@ethlete/cdk 4.47.0 → 4.48.1

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.
Files changed (29) hide show
  1. package/CHANGELOG.md +12 -0
  2. package/esm2022/lib/components/bracket/components/new-bracket/bracket-new.mjs +170 -69
  3. package/esm2022/lib/components/bracket/components/new-bracket/draw-man.mjs +75 -32
  4. package/esm2022/lib/components/bracket/components/new-bracket/grid-placements.mjs +8 -3
  5. package/esm2022/lib/components/bracket/components/new-bracket/journey-highlight.mjs +18 -0
  6. package/esm2022/lib/components/bracket/components/new-bracket/new-bracket.component.mjs +47 -9
  7. package/esm2022/lib/components/bracket/stories/dummy-data/ET_DUMMY_DATA_DOUBLE_SYNC.mjs +1116 -0
  8. package/esm2022/lib/components/bracket/stories/dummy-data/ET_DUMMY_DATA_SINGLE.mjs +2691 -0
  9. package/esm2022/lib/components/bracket/stories/dummy-data/ET_DUMMY_DATA_SWISS.mjs +72479 -0
  10. package/esm2022/lib/components/bracket/stories/dummy-data/ET_DUMMY_DATE_DOUBLE_ASYNC.mjs +1275 -0
  11. package/esm2022/lib/components/bracket/stories/dummy-data/FIFA_DUMMY_DATA_DOUBLE.mjs +2453 -0
  12. package/esm2022/lib/components/bracket/stories/dummy-data/FIFA_DUMMY_DATA_SINGLE.mjs +2570 -0
  13. package/esm2022/lib/components/bracket/stories/dummy-data/index.mjs +7 -0
  14. package/fesm2022/ethlete-cdk.mjs +315 -109
  15. package/fesm2022/ethlete-cdk.mjs.map +1 -1
  16. package/lib/components/bracket/components/new-bracket/bracket-new.d.ts +1632 -18
  17. package/lib/components/bracket/components/new-bracket/draw-man.d.ts +5 -3
  18. package/lib/components/bracket/components/new-bracket/grid-placements.d.ts +4 -0
  19. package/lib/components/bracket/components/new-bracket/journey-highlight.d.ts +2 -0
  20. package/lib/components/bracket/components/new-bracket/new-bracket.component.d.ts +7 -2
  21. package/lib/components/bracket/stories/dummy-data/ET_DUMMY_DATA_DOUBLE_SYNC.d.ts +149 -0
  22. package/lib/components/bracket/stories/dummy-data/ET_DUMMY_DATA_SINGLE.d.ts +184 -0
  23. package/lib/components/bracket/stories/dummy-data/ET_DUMMY_DATA_SWISS.d.ts +214 -0
  24. package/lib/components/bracket/stories/dummy-data/ET_DUMMY_DATE_DOUBLE_ASYNC.d.ts +149 -0
  25. package/lib/components/bracket/stories/dummy-data/FIFA_DUMMY_DATA_DOUBLE.d.ts +1640 -0
  26. package/lib/components/bracket/stories/dummy-data/FIFA_DUMMY_DATA_SINGLE.d.ts +2388 -0
  27. package/lib/components/bracket/stories/dummy-data/index.d.ts +6 -0
  28. package/lib/components/query-error/directives/query-error/query-error.directive.d.ts +1 -1
  29. package/package.json +1 -1
@@ -1,28 +1,36 @@
1
- import { NgComponentOutlet } from '@angular/common';
2
- import { booleanAttribute, ChangeDetectionStrategy, Component, computed, inject, input, numberAttribute, ViewEncapsulation, } from '@angular/core';
1
+ import { isPlatformBrowser, NgComponentOutlet } from '@angular/common';
2
+ import { booleanAttribute, ChangeDetectionStrategy, Component, computed, DestroyRef, effect, inject, input, numberAttribute, PLATFORM_ID, Renderer2, ViewEncapsulation, } from '@angular/core';
3
3
  import { DomSanitizer } from '@angular/platform-browser';
4
+ import { createComponentId } from '@ethlete/core';
4
5
  import { BRACKET_DATA_LAYOUT, generateBracketData, generateBracketRoundSwissGroupMaps, generateBracketRoundTypeMap, generateMatchParticipantMap, generateMatchPositionMaps, generateMatchRelations, generateRoundRelations, getFirstRounds, } from './bracket-new';
5
6
  import { drawMan } from './draw-man';
6
7
  import { generateBracketGridDefinitions } from './grid-definitions';
7
8
  import { generateBracketGridItems } from './grid-placements';
9
+ import { createJourneyHighlight } from './journey-highlight';
8
10
  import * as i0 from "@angular/core";
9
11
  export class NewBracketComponent {
12
+ #domSanitizer;
13
+ #elementId;
10
14
  constructor() {
11
15
  this.#domSanitizer = inject(DomSanitizer);
16
+ this.#elementId = createComponentId('et-new-bracket');
12
17
  this.source = input.required();
13
18
  this.columnWidth = input(250, { transform: numberAttribute });
14
19
  this.matchHeight = input(75, { transform: numberAttribute });
15
20
  this.roundHeaderHeight = input(50, { transform: numberAttribute });
16
21
  this.columnGap = input(60, { transform: numberAttribute });
17
22
  this.rowGap = input(30, { transform: numberAttribute });
18
- this.curveAmount = input(20, { transform: numberAttribute });
23
+ this.lineStartingCurveAmount = input(10, { transform: numberAttribute });
24
+ this.lineEndingCurveAmount = input(0, { transform: numberAttribute });
19
25
  this.lineWidth = input(2, { transform: numberAttribute });
20
26
  this.lineDashArray = input(0, { transform: numberAttribute });
21
27
  this.lineDashOffset = input(0, { transform: numberAttribute });
28
+ this.disableJourneyHighlight = input(false, { transform: booleanAttribute });
22
29
  this.layout = input(BRACKET_DATA_LAYOUT.LEFT_TO_RIGHT);
23
30
  this.hideRoundHeaders = input(false, { transform: booleanAttribute });
24
31
  this.roundHeaderComponent = input();
25
32
  this.matchComponent = input();
33
+ this.finalMatchComponent = input();
26
34
  this.bracketData = computed(() => generateBracketData(this.source(), { layout: this.layout() }));
27
35
  this.roundTypeMap = computed(() => generateBracketRoundTypeMap(this.bracketData()));
28
36
  this.matchParticipantMap = computed(() => generateMatchParticipantMap(this.bracketData()));
@@ -34,6 +42,7 @@ export class NewBracketComponent {
34
42
  includeRoundHeaders: !this.hideRoundHeaders(),
35
43
  headerComponent: this.roundHeaderComponent(),
36
44
  matchComponent: this.matchComponent(),
45
+ finalMatchComponent: this.finalMatchComponent(),
37
46
  }));
38
47
  this.definitions = computed(() => generateBracketGridDefinitions(this.bracketData(), this.roundTypeMap(), {
39
48
  includeRoundHeaders: !this.hideRoundHeaders(),
@@ -47,7 +56,8 @@ export class NewBracketComponent {
47
56
  rowGap: this.rowGap(),
48
57
  gridDefinitions: this.definitions(),
49
58
  curve: {
50
- curveAmount: this.curveAmount(),
59
+ lineEndingCurveAmount: this.lineEndingCurveAmount(),
60
+ lineStartingCurveAmount: this.lineStartingCurveAmount(),
51
61
  },
52
62
  path: {
53
63
  dashArray: this.lineDashArray(),
@@ -55,15 +65,43 @@ export class NewBracketComponent {
55
65
  width: this.lineWidth(),
56
66
  },
57
67
  })));
68
+ this.journeyHighlight = computed(() => this.disableJourneyHighlight() ? null : createJourneyHighlight(this.bracketData()));
69
+ const isBrowser = isPlatformBrowser(inject(PLATFORM_ID));
70
+ if (!isBrowser)
71
+ return;
72
+ const renderer = inject(Renderer2);
73
+ const styleId = `et-new-bracket-journey-highlight--${this.#elementId}`;
74
+ let oldStyleEl = null;
75
+ effect(() => {
76
+ const newHighlightStyle = this.journeyHighlight();
77
+ const head = document.head;
78
+ if (oldStyleEl) {
79
+ renderer.removeChild(head, oldStyleEl);
80
+ }
81
+ if (newHighlightStyle) {
82
+ const el = renderer.createElement('style');
83
+ renderer.setAttribute(el, 'id', styleId);
84
+ renderer.appendChild(el, renderer.createText(newHighlightStyle));
85
+ renderer.appendChild(head, el);
86
+ oldStyleEl = el;
87
+ }
88
+ else {
89
+ oldStyleEl = null;
90
+ }
91
+ });
92
+ inject(DestroyRef).onDestroy(() => {
93
+ if (oldStyleEl) {
94
+ renderer.removeChild(document.head, oldStyleEl);
95
+ }
96
+ });
58
97
  }
59
- #domSanitizer;
60
98
  static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.12", ngImport: i0, type: NewBracketComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
61
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "18.2.12", type: NewBracketComponent, isStandalone: true, selector: "et-new-bracket", inputs: { source: { classPropertyName: "source", publicName: "source", isSignal: true, isRequired: true, transformFunction: null }, columnWidth: { classPropertyName: "columnWidth", publicName: "columnWidth", isSignal: true, isRequired: false, transformFunction: null }, matchHeight: { classPropertyName: "matchHeight", publicName: "matchHeight", isSignal: true, isRequired: false, transformFunction: null }, roundHeaderHeight: { classPropertyName: "roundHeaderHeight", publicName: "roundHeaderHeight", isSignal: true, isRequired: false, transformFunction: null }, columnGap: { classPropertyName: "columnGap", publicName: "columnGap", isSignal: true, isRequired: false, transformFunction: null }, rowGap: { classPropertyName: "rowGap", publicName: "rowGap", isSignal: true, isRequired: false, transformFunction: null }, curveAmount: { classPropertyName: "curveAmount", publicName: "curveAmount", isSignal: true, isRequired: false, transformFunction: null }, lineWidth: { classPropertyName: "lineWidth", publicName: "lineWidth", isSignal: true, isRequired: false, transformFunction: null }, lineDashArray: { classPropertyName: "lineDashArray", publicName: "lineDashArray", isSignal: true, isRequired: false, transformFunction: null }, lineDashOffset: { classPropertyName: "lineDashOffset", publicName: "lineDashOffset", isSignal: true, isRequired: false, transformFunction: null }, layout: { classPropertyName: "layout", publicName: "layout", isSignal: true, isRequired: false, transformFunction: null }, hideRoundHeaders: { classPropertyName: "hideRoundHeaders", publicName: "hideRoundHeaders", isSignal: true, isRequired: false, transformFunction: null }, roundHeaderComponent: { classPropertyName: "roundHeaderComponent", publicName: "roundHeaderComponent", isSignal: true, isRequired: false, transformFunction: null }, matchComponent: { classPropertyName: "matchComponent", publicName: "matchComponent", isSignal: true, isRequired: false, transformFunction: null } }, host: { classAttribute: "et-new-bracket-host" }, ngImport: i0, template: "<section\n [style.--_cw.px]=\"columnWidth()\"\n [style.--_mh.px]=\"matchHeight()\"\n [style.--_rhh.px]=\"roundHeaderHeight()\"\n [style.--_cg.px]=\"columnGap()\"\n [style.--_rg.px]=\"rowGap()\"\n [style.--_bcc]=\"definitions().columnCount\"\n [style.--_brc]=\"definitions().rowCount\"\n class=\"et-bracket-new\"\n>\n <svg [innerHTML]=\"drawManData()\" class=\"et-bracket-new-svg\" xmlns=\"http://www.w3.org/2000/svg\" />\n\n @for (round of items().values(); track round.layoutId) {\n <ul [style.--_c]=\"round.columnStart + ' / ' + round.columnEnd\" class=\"et-bracket-new-round\">\n @for (item of round.items.values(); track item.layoutId) {\n <li [style.--_r]=\"item.rowStart + ' / ' + item.rowEnd\" class=\"et-bracket-new-item\">\n <ng-container *ngComponentOutlet=\"item.component; inputs: item.data\" />\n </li>\n }\n </ul>\n }\n</section>\n", styles: [".et-bracket-new{display:grid;gap:var(--_cg);grid-auto-columns:var(--_cw);--bracket-line-color: red}.et-bracket-new-round{display:grid;grid-column:var(--_c);grid-row:1;list-style:none;margin:0;padding:0;gap:var(--_rg);grid-template-rows:var(--_rhh);grid-auto-rows:var(--_mh)}.et-bracket-new-item{grid-row:var(--_r);place-self:center}.et-bracket-new-svg{grid-column:1/calc(var(--_bcc) + 1);grid-row:1/2;inline-size:100%;block-size:100%}.et-bracket-new-svg path{color:var(--bracket-line-color)}\n"], dependencies: [{ kind: "directive", type: NgComponentOutlet, selector: "[ngComponentOutlet]", inputs: ["ngComponentOutlet", "ngComponentOutletInputs", "ngComponentOutletInjector", "ngComponentOutletContent", "ngComponentOutletNgModule", "ngComponentOutletNgModuleFactory"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None }); }
99
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "18.2.12", type: NewBracketComponent, isStandalone: true, selector: "et-new-bracket", inputs: { source: { classPropertyName: "source", publicName: "source", isSignal: true, isRequired: true, transformFunction: null }, columnWidth: { classPropertyName: "columnWidth", publicName: "columnWidth", isSignal: true, isRequired: false, transformFunction: null }, matchHeight: { classPropertyName: "matchHeight", publicName: "matchHeight", isSignal: true, isRequired: false, transformFunction: null }, roundHeaderHeight: { classPropertyName: "roundHeaderHeight", publicName: "roundHeaderHeight", isSignal: true, isRequired: false, transformFunction: null }, columnGap: { classPropertyName: "columnGap", publicName: "columnGap", isSignal: true, isRequired: false, transformFunction: null }, rowGap: { classPropertyName: "rowGap", publicName: "rowGap", isSignal: true, isRequired: false, transformFunction: null }, lineStartingCurveAmount: { classPropertyName: "lineStartingCurveAmount", publicName: "lineStartingCurveAmount", isSignal: true, isRequired: false, transformFunction: null }, lineEndingCurveAmount: { classPropertyName: "lineEndingCurveAmount", publicName: "lineEndingCurveAmount", isSignal: true, isRequired: false, transformFunction: null }, lineWidth: { classPropertyName: "lineWidth", publicName: "lineWidth", isSignal: true, isRequired: false, transformFunction: null }, lineDashArray: { classPropertyName: "lineDashArray", publicName: "lineDashArray", isSignal: true, isRequired: false, transformFunction: null }, lineDashOffset: { classPropertyName: "lineDashOffset", publicName: "lineDashOffset", isSignal: true, isRequired: false, transformFunction: null }, disableJourneyHighlight: { classPropertyName: "disableJourneyHighlight", publicName: "disableJourneyHighlight", isSignal: true, isRequired: false, transformFunction: null }, layout: { classPropertyName: "layout", publicName: "layout", isSignal: true, isRequired: false, transformFunction: null }, hideRoundHeaders: { classPropertyName: "hideRoundHeaders", publicName: "hideRoundHeaders", isSignal: true, isRequired: false, transformFunction: null }, roundHeaderComponent: { classPropertyName: "roundHeaderComponent", publicName: "roundHeaderComponent", isSignal: true, isRequired: false, transformFunction: null }, matchComponent: { classPropertyName: "matchComponent", publicName: "matchComponent", isSignal: true, isRequired: false, transformFunction: null }, finalMatchComponent: { classPropertyName: "finalMatchComponent", publicName: "finalMatchComponent", isSignal: true, isRequired: false, transformFunction: null } }, host: { classAttribute: "et-new-bracket-host" }, ngImport: i0, template: "<section\n [style.--_cw.px]=\"columnWidth()\"\n [style.--_mh.px]=\"matchHeight()\"\n [style.--_rhh.px]=\"hideRoundHeaders() ? matchHeight() : roundHeaderHeight()\"\n [style.--_cg.px]=\"columnGap()\"\n [style.--_rg.px]=\"rowGap()\"\n [style.--_bcc]=\"definitions().columnCount\"\n [style.--_brc]=\"definitions().rowCount\"\n class=\"et-bracket-new\"\n>\n <svg [innerHTML]=\"drawManData()\" class=\"et-bracket-new-svg\" xmlns=\"http://www.w3.org/2000/svg\" />\n\n @for (round of items().values(); track round.layoutId) {\n <ul [style.--_c]=\"round.columnStart + ' / ' + round.columnEnd\" class=\"et-bracket-new-round\">\n @for (item of round.items.values(); track item.layoutId) {\n <li [style.--_r]=\"item.rowStart + ' / ' + item.rowEnd\" [class]=\"item.className\">\n <ng-container *ngComponentOutlet=\"item.component; inputs: item.data\" />\n </li>\n }\n </ul>\n }\n</section>\n", styles: [".et-bracket-new{display:grid;gap:var(--_cg);grid-auto-columns:var(--_cw);--bracket-line-color: red}.et-bracket-new-round{display:grid;grid-column:var(--_c);grid-row:1;list-style:none;margin:0;padding:0;gap:var(--_rg);grid-template-rows:var(--_rhh);grid-auto-rows:var(--_mh)}.et-bracket-new-item{grid-row:var(--_r);place-self:center;transition:opacity .2s}.et-bracket-new-svg{grid-column:1/calc(var(--_bcc) + 1);grid-row:1/2;inline-size:100%;block-size:100%}.et-bracket-new-svg path{color:var(--bracket-line-color);transition:opacity .2s}\n"], dependencies: [{ kind: "directive", type: NgComponentOutlet, selector: "[ngComponentOutlet]", inputs: ["ngComponentOutlet", "ngComponentOutletInputs", "ngComponentOutletInjector", "ngComponentOutletContent", "ngComponentOutletNgModule", "ngComponentOutletNgModuleFactory"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None }); }
62
100
  }
63
101
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.12", ngImport: i0, type: NewBracketComponent, decorators: [{
64
102
  type: Component,
65
103
  args: [{ selector: 'et-new-bracket', standalone: true, changeDetection: ChangeDetectionStrategy.OnPush, encapsulation: ViewEncapsulation.None, host: {
66
104
  class: 'et-new-bracket-host',
67
- }, imports: [NgComponentOutlet], template: "<section\n [style.--_cw.px]=\"columnWidth()\"\n [style.--_mh.px]=\"matchHeight()\"\n [style.--_rhh.px]=\"roundHeaderHeight()\"\n [style.--_cg.px]=\"columnGap()\"\n [style.--_rg.px]=\"rowGap()\"\n [style.--_bcc]=\"definitions().columnCount\"\n [style.--_brc]=\"definitions().rowCount\"\n class=\"et-bracket-new\"\n>\n <svg [innerHTML]=\"drawManData()\" class=\"et-bracket-new-svg\" xmlns=\"http://www.w3.org/2000/svg\" />\n\n @for (round of items().values(); track round.layoutId) {\n <ul [style.--_c]=\"round.columnStart + ' / ' + round.columnEnd\" class=\"et-bracket-new-round\">\n @for (item of round.items.values(); track item.layoutId) {\n <li [style.--_r]=\"item.rowStart + ' / ' + item.rowEnd\" class=\"et-bracket-new-item\">\n <ng-container *ngComponentOutlet=\"item.component; inputs: item.data\" />\n </li>\n }\n </ul>\n }\n</section>\n", styles: [".et-bracket-new{display:grid;gap:var(--_cg);grid-auto-columns:var(--_cw);--bracket-line-color: red}.et-bracket-new-round{display:grid;grid-column:var(--_c);grid-row:1;list-style:none;margin:0;padding:0;gap:var(--_rg);grid-template-rows:var(--_rhh);grid-auto-rows:var(--_mh)}.et-bracket-new-item{grid-row:var(--_r);place-self:center}.et-bracket-new-svg{grid-column:1/calc(var(--_bcc) + 1);grid-row:1/2;inline-size:100%;block-size:100%}.et-bracket-new-svg path{color:var(--bracket-line-color)}\n"] }]
68
- }] });
69
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibmV3LWJyYWNrZXQuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vbGlicy9jZGsvc3JjL2xpYi9jb21wb25lbnRzL2JyYWNrZXQvY29tcG9uZW50cy9uZXctYnJhY2tldC9uZXctYnJhY2tldC5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi9saWJzL2Nkay9zcmMvbGliL2NvbXBvbmVudHMvYnJhY2tldC9jb21wb25lbnRzL25ldy1icmFja2V0L25ldy1icmFja2V0LmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxpQkFBaUIsRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBQ3BELE9BQU8sRUFDTCxnQkFBZ0IsRUFDaEIsdUJBQXVCLEVBQ3ZCLFNBQVMsRUFDVCxRQUFRLEVBQ1IsTUFBTSxFQUNOLEtBQUssRUFDTCxlQUFlLEVBQ2YsaUJBQWlCLEdBQ2xCLE1BQU0sZUFBZSxDQUFDO0FBQ3ZCLE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSwyQkFBMkIsQ0FBQztBQUN6RCxPQUFPLEVBQ0wsbUJBQW1CLEVBR25CLG1CQUFtQixFQUNuQixrQ0FBa0MsRUFDbEMsMkJBQTJCLEVBQzNCLDJCQUEyQixFQUMzQix5QkFBeUIsRUFDekIsc0JBQXNCLEVBQ3RCLHNCQUFzQixFQUN0QixjQUFjLEdBQ2YsTUFBTSxlQUFlLENBQUM7QUFDdkIsT0FBTyxFQUFFLE9BQU8sRUFBRSxNQUFNLFlBQVksQ0FBQztBQUNyQyxPQUFPLEVBQUUsOEJBQThCLEVBQUUsTUFBTSxvQkFBb0IsQ0FBQztBQUNwRSxPQUFPLEVBQXNELHdCQUF3QixFQUFFLE1BQU0sbUJBQW1CLENBQUM7O0FBY2pILE1BQU0sT0FBTyxtQkFBbUI7SUFaaEM7UUFhRSxrQkFBYSxHQUFHLE1BQU0sQ0FBQyxZQUFZLENBQUMsQ0FBQztRQUVyQyxXQUFNLEdBQUcsS0FB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LEVBQUU7Z0JBQ0osU0FBUyxFQUFFLElBQUksQ0FBQyxhQUFhLEVBQUU7Z0JBQy9CLFVBQVUsRUFBRSxJQUFJLENBQUMsY0FBYyxFQUFFO2dCQUNqQyxLQUFLLEVBQUUsSUFBSSxDQUFDLFNBQVMsRUFBRTthQUN4QjtTQUNGLENBQUMsQ0FDSCxDQUNGLENBQUM7S0FDSDtJQTVFQyxhQUFhLENBQXdCOytHQUQxQixtQkFBbUI7bUdBQW5CLG1CQUFtQiw2aUVDekNoQyxpNEJBc0JBLHVpQkRpQlksaUJBQWlCOzs0RkFFaEIsbUJBQW1CO2tCQVovQixTQUFTOytCQUNFLGdCQUFnQixjQUdkLElBQUksbUJBQ0MsdUJBQXVCLENBQUMsTUFBTSxpQkFDaEMsaUJBQWlCLENBQUMsSUFBSSxRQUMvQjt3QkFDSixLQUFLLEVBQUUscUJBQXFCO3FCQUM3QixXQUNRLENBQUMsaUJBQWlCLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBOZ0NvbXBvbmVudE91dGxldCB9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbic7XG5pbXBvcnQge1xuICBib29sZWFuQXR0cmlidXRlLFxuICBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneSxcbiAgQ29tcG9uZW50LFxuICBjb21wdXRlZCxcbiAgaW5qZWN0LFxuICBpbnB1dCxcbiAgbnVtYmVyQXR0cmlidXRlLFxuICBWaWV3RW5jYXBzdWxhdGlvbixcbn0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBEb21TYW5pdGl6ZXIgfSBmcm9tICdAYW5ndWxhci9wbGF0Zm9ybS1icm93c2VyJztcbmltcG9ydCB7XG4gIEJSQUNLRVRfREFUQV9MQVlPVVQsXG4gIEJyYWNrZXREYXRhTGF5b3V0LFxuICBCcmFja2V0RGF0YVNvdXJjZSxcbiAgZ2VuZXJhdGVCcmFja2V0RGF0YSxcbiAgZ2VuZXJhdGVCcmFja2V0Um91bmRTd2lzc0dyb3VwTWFwcyxcbiAgZ2VuZXJhdGVCcmFja2V0Um91bmRUeXBlTWFwLFxuICBnZW5lcmF0ZU1hdGNoUGFydGljaXBhbnRNYXAsXG4gIGdlbmVyYXRlTWF0Y2hQb3NpdGlvbk1hcHMsXG4gIGdlbmVyYXRlTWF0Y2hSZWxhdGlvbnMsXG4gIGdlbmVyYXRlUm91bmRSZWxhdGlvbnMsXG4gIGdldEZpcnN0Um91bmRzLFxufSBmcm9tICcuL2JyYWNrZXQtbmV3JztcbmltcG9ydCB7IGRyYXdNYW4gfSBmcm9tICcuL2RyYXctbWFuJztcbmltcG9ydCB7IGdlbmVyYXRlQnJhY2tldEdyaWREZWZpbml0aW9ucyB9IGZyb20gJy4vZ3JpZC1kZWZpbml0aW9ucyc7XG5pbXBvcnQgeyBCcmFja2V0TWF0Y2hDb21wb25lbnQsIEJyYWNrZXRSb3VuZEhlYWRlckNvbXBvbmVudCwgZ2VuZXJhdGVCcmFja2V0R3JpZEl0ZW1zIH0gZnJvbSAnLi9ncmlkLXBsYWNlbWVudHMnO1xuXG5AQ29tcG9uZW50KHtcbiAgc2VsZWN0b3I6ICdldC1uZXctYnJhY2tldCcsXG4gIHRlbXBsYXRlVXJsOiAnLi9uZXctYnJhY2tldC5jb21wb25lbnQuaHRtbCcsXG4gIHN0eWxlVXJsOiAnLi9uZXctYnJhY2tldC5jb21wb25lbnQuc2NzcycsXG4gIHN0YW5kYWxvbmU6IHRydWUsXG4gIGNoYW5nZURldGVjdGlvbjogQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3kuT25QdXNoLFxuICBlbmNhcHN1bGF0aW9uOiBWaWV3RW5jYXBzdWxhdGlvbi5Ob25lLFxuICBob3N0OiB7XG4gICAgY2xhc3M6ICdldC1uZXctYnJhY2tldC1ob3N0JyxcbiAgfSxcbiAgaW1wb3J0czogW05nQ29tcG9uZW50T3V0bGV0XSxcbn0pXG5leHBvcnQgY2xhc3MgTmV3QnJhY2tldENvbXBvbmVudDxUUm91bmREYXRhID0gdW5rbm93biwgVE1hdGNoRGF0YSA9IHVua25vd24+IHtcbiAgI2RvbVNhbml0aXplciA9IGluamVjdChEb21TYW5pdGl6ZXIpO1xuXG4gIHNvdXJjZSA9IGlucHV0LnJlcXVpcmVkPEJyYWNrZXREYXRhU291cmNlPFRSb3VuZERhdGEsIFRNYXRjaERhdGE+PigpO1xuXG4gIGNvbHVtbldpZHRoID0gaW5wdXQoMjUwLCB7IHRyYW5zZm9ybTogbnVtYmVyQXR0cmlidXRlIH0pO1xuICBtYXRjaEhlaWdodCA9IGlucHV0KDc1LCB7IHRyYW5zZm9ybTogbnVtYmVyQXR0cmlidXRlIH0pO1xuICByb3VuZEhlYWRlckhlaWdodCA9IGlucHV0KDUwLCB7IHRyYW5zZm9ybTogbnVtYmVyQXR0cmlidXRlIH0pO1xuICBjb2x1bW5HYXAgPSBpbnB1dCg2MCwgeyB0cmFuc2Zvcm06IG51bWJlckF0dHJpYnV0ZSB9KTtcbiAgcm93R2FwID0gaW5wdXQoMzAsIHsgdHJhbnNmb3JtOiBudW1iZXJBdHRyaWJ1dGUgfSk7XG4gIGN1cnZlQW1vdW50ID0gaW5wdXQoMjAsIHsgdHJhbnNmb3JtOiBudW1iZXJBdHRyaWJ1dGUgfSk7XG4gIGxpbmVXaWR0aCA9IGlucHV0KDIsIHsgdHJhbnNmb3JtOiBudW1iZXJBdHRyaWJ1dGUgfSk7XG4gIGxpbmVEYXNoQXJyYXkgPSBpbnB1dCgwLCB7IHRyYW5zZm9ybTogbnVtYmVyQXR0cmlidXRlIH0pO1xuICBsaW5lRGFzaE9mZnNldCA9IGlucHV0KDAsIHsgdHJhbnNmb3JtOiBudW1iZXJBdHRyaWJ1dGUgfSk7XG5cbiAgbGF5b3V0ID0gaW5wdXQ8QnJhY2tldERhdGFMYXlvdXQ+KEJSQUNLRVRfREFUQV9MQVlPVVQuTEVGVF9UT19SSUdIVCk7XG4gIGhpZGVSb3VuZEhlYWRlcnMgPSBpbnB1dChmYWxzZSwgeyB0cmFuc2Zvcm06IGJvb2xlYW5BdHRyaWJ1dGUgfSk7XG5cbiAgcm91bmRIZWFkZXJDb21wb25lbnQgPSBpbnB1dDxCcmFja2V0Um91bmRIZWFkZXJDb21wb25lbnQ8VFJvdW5kRGF0YSwgVE1hdGNoRGF0YT4gfCB1bmRlZmluZWQ+KCk7XG4gIG1hdGNoQ29tcG9uZW50ID0gaW5wdXQ8QnJhY2tldE1hdGNoQ29tcG9uZW50PFRSb3VuZERhdGEsIFRNYXRjaERhdGE+IHwgdW5kZWZpbmVkPigpO1xuXG4gIGJyYWNrZXREYXRhID0gY29tcHV0ZWQoKCkgPT4gZ2VuZXJhdGVCcmFja2V0RGF0YSh0aGlzLnNvdXJjZSgpLCB7IGxheW91dDogdGhpcy5sYXlvdXQoKSB9KSk7XG5cbiAgcm91bmRUeXBlTWFwID0gY29tcHV0ZWQoKCkgPT4gZ2VuZXJhdGVCcmFja2V0Um91bmRUeXBlTWFwKHRoaXMuYnJhY2tldERhdGEoKSkpO1xuICBtYXRjaFBhcnRpY2lwYW50TWFwID0gY29tcHV0ZWQoKCkgPT4gZ2VuZXJhdGVNYXRjaFBhcnRpY2lwYW50TWFwKHRoaXMuYnJhY2tldERhdGEoKSkpO1xuICBtYXRjaFBvc2l0aW9uc01hcCA9IGNvbXB1dGVkKCgpID0+IGdlbmVyYXRlTWF0Y2hQb3NpdGlvbk1hcHModGhpcy5icmFja2V0RGF0YSgpKSk7XG5cbiAgcm91bmRSZWxhdGlvbnMgPSBjb21wdXRlZCgoKSA9PiBnZW5lcmF0ZVJvdW5kUmVsYXRpb25zKHRoaXMuYnJhY2tldERhdGEoKSkpO1xuICBtYXRjaFJlbGF0aW9ucyA9IGNvbXB1dGVkKCgpID0+XG4gICAgZ2VuZXJhdGVNYXRjaFJlbGF0aW9ucyh0aGlzLmJyYWNrZXREYXRhKCksIHRoaXMucm91bmRSZWxhdGlvbnMoKSwgdGhpcy5tYXRjaFBvc2l0aW9uc01hcCgpKSxcbiAgKTtcblxuICBzd2lzc0dyb3VwcyA9IGNvbXB1dGVkKCgpID0+IGdlbmVyYXRlQnJhY2tldFJvdW5kU3dpc3NHcm91cE1hcHModGhpcy5icmFja2V0RGF0YSgpLCB0aGlzLm1hdGNoUGFydGljaXBhbnRNYXAoKSkpO1xuXG4gIGl0ZW1zID0gY29tcHV0ZWQoKCkgPT5cbiAgICBnZW5lcmF0ZUJyYWNrZXRHcmlkSXRlbXMoXG4gICAgICB0aGlzLmJyYWNrZXREYXRhKCksXG4gICAgICB0aGlzLnJvdW5kVHlwZU1hcCgpLFxuICAgICAgdGhpcy5zd2lzc0dyb3VwcygpLFxuICAgICAgdGhpcy5yb3VuZFJlbGF0aW9ucygpLFxuICAgICAgdGhpcy5tYXRjaFJlbGF0aW9ucygpLFxuICAgICAge1xuICAgICAgICBpbmNsdWRlUm91bmRIZWFkZXJzOiAhdGhpcy5oaWRlUm91bmRIZWFkZXJzKCksXG4gICAgICAgIGhlYWRlckNvbXBvbmVudDogdGhpcy5yb3VuZEhlYWRlckNvbXBvbmVudCgpLFxuICAgICAgICBtYXRjaENvbXBvbmVudDogdGhpcy5tYXRjaENvbXBvbmVudCgpLFxuICAgICAgfSxcbiAgICApLFxuICApO1xuXG4gIGRlZmluaXRpb25zID0gY29tcHV0ZWQoKCkgPT5cbiAgICBnZW5lcmF0ZUJyYWNrZXRHcmlkRGVmaW5pdGlvbnModGhpcy5icmFja2V0RGF0YSgpLCB0aGlzLnJvdW5kVHlwZU1hcCgpLCB7XG4gICAgICBpbmNsdWRlUm91bmRIZWFkZXJzOiAhdGhpcy5oaWRlUm91bmRIZWFkZXJzKCksXG4gICAgfSksXG4gICk7XG5cbiAgZmlyc3RSb3VuZHMgPSBjb21wdXRlZCgoKSA9PiBnZXRGaXJzdFJvdW5kcyh0aGlzLmJyYWNrZXREYXRhKCksIHRoaXMucm91bmRUeXBlTWFwKCkpKTtcblxuICBkcmF3TWFuRGF0YSA9IGNvbXB1dGVkKCgpID0+XG4gICAgdGhpcy4jZG9tU2FuaXRpemVyLmJ5cGFzc1NlY3VyaXR5VHJ1c3RIdG1sKFxuICAgICAgZHJhd01hbih0aGlzLml0ZW1zKCksIHRoaXMuZmlyc3RSb3VuZHMoKSwge1xuICAgICAgICBjb2x1bW5HYXA6IHRoaXMuY29sdW1uR2FwKCksXG4gICAgICAgIGNvbHVtbldpZHRoOiB0aGlzLmNvbHVtbldpZHRoKCksXG4gICAgICAgIG1hdGNoSGVpZ2h0OiB0aGlzLm1hdGNoSGVpZ2h0KCksXG4gICAgICAgIHJvdW5kSGVhZGVySGVpZ2h0OiB0aGlzLmhpZGVSb3VuZEhlYWRlcnMoKSA/IDAgOiB0aGlzLnJvdW5kSGVhZGVySGVpZ2h0KCksXG4gICAgICAgIHJvd0dhcDogdGhpcy5yb3dHYXAoKSxcbiAgICAgICAgZ3JpZERlZmluaXRpb25zOiB0aGlzLmRlZmluaXRpb25zKCksXG4gICAgICAgIGN1cnZlOiB7XG4gICAgICAgICAgY3VydmVBbW91bnQ6IHRoaXMuY3VydmVBbW91bnQoKSxcbiAgICAgICAgfSxcbiAgICAgICAgcGF0aDoge1xuICAgICAgICAgIGRhc2hBcnJheTogdGhpcy5saW5lRGFzaEFycmF5KCksXG4gICAgICAgICAgZGFzaE9mZnNldDogdGhpcy5saW5lRGFzaE9mZnNldCgpLFxuICAgICAgICAgIHdpZHRoOiB0aGlzLmxpbmVXaWR0aCgpLFxuICAgICAgICB9LFxuICAgICAgfSksXG4gICAgKSxcbiAgKTtcbn1cbiIsIjxzZWN0aW9uXG4gIFtzdHlsZS4tLV9jdy5weF09XCJjb2x1bW5XaWR0aCgpXCJcbiAgW3N0eWxlLi0tX21oLnB4XT1cIm1hdGNoSGVpZ2h0KClcIlxuICBbc3R5bGUuLS1fcmhoLnB4XT1cInJvdW5kSGVhZGVySGVpZ2h0KClcIlxuICBbc3R5bGUuLS1fY2cucHhdPVwiY29sdW1uR2FwKClcIlxuICBbc3R5bGUuLS1fcmcucHhdPVwicm93R2FwKClcIlxuICBbc3R5bGUuLS1fYmNjXT1cImRlZmluaXRpb25zKCkuY29sdW1uQ291bnRcIlxuICBbc3R5bGUuLS1fYnJjXT1cImRlZmluaXRpb25zKCkucm93Q291bnRcIlxuICBjbGFzcz1cImV0LWJyYWNrZXQtbmV3XCJcbj5cbiAgPHN2ZyBbaW5uZXJIVE1MXT1cImRyYXdNYW5EYXRhKClcIiBjbGFzcz1cImV0LWJyYWNrZXQtbmV3LXN2Z1wiIHhtbG5zPVwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIiAvPlxuXG4gIEBmb3IgKHJvdW5kIG9mIGl0ZW1zKCkudmFsdWVzKCk7IHRyYWNrIHJvdW5kLmxheW91dElkKSB7XG4gICAgPHVsIFtzdHlsZS4tLV9jXT1cInJvdW5kLmNvbHVtblN0YXJ0ICsgJyAvICcgKyByb3VuZC5jb2x1bW5FbmRcIiBjbGFzcz1cImV0LWJyYWNrZXQtbmV3LXJvdW5kXCI+XG4gICAgICBAZm9yIChpdGVtIG9mIHJvdW5kLml0ZW1zLnZhbHVlcygpOyB0cmFjayBpdGVtLmxheW91dElkKSB7XG4gICAgICAgIDxsaSBbc3R5bGUuLS1fcl09XCJpdGVtLnJvd1N0YXJ0ICsgJyAvICcgKyBpdGVtLnJvd0VuZFwiIGNsYXNzPVwiZXQtYnJhY2tldC1uZXctaXRlbVwiPlxuICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nQ29tcG9uZW50T3V0bGV0PVwiaXRlbS5jb21wb25lbnQ7IGlucHV0czogaXRlbS5kYXRhXCIgLz5cbiAgICAgICAgPC9saT5cbiAgICAgIH1cbiAgICA8L3VsPlxuICB9XG48L3NlY3Rpb24+XG4iXX0=
105
+ }, imports: [NgComponentOutlet], template: "<section\n [style.--_cw.px]=\"columnWidth()\"\n [style.--_mh.px]=\"matchHeight()\"\n [style.--_rhh.px]=\"hideRoundHeaders() ? matchHeight() : roundHeaderHeight()\"\n [style.--_cg.px]=\"columnGap()\"\n [style.--_rg.px]=\"rowGap()\"\n [style.--_bcc]=\"definitions().columnCount\"\n [style.--_brc]=\"definitions().rowCount\"\n class=\"et-bracket-new\"\n>\n <svg [innerHTML]=\"drawManData()\" class=\"et-bracket-new-svg\" xmlns=\"http://www.w3.org/2000/svg\" />\n\n @for (round of items().values(); track round.layoutId) {\n <ul [style.--_c]=\"round.columnStart + ' / ' + round.columnEnd\" class=\"et-bracket-new-round\">\n @for (item of round.items.values(); track item.layoutId) {\n <li [style.--_r]=\"item.rowStart + ' / ' + item.rowEnd\" [class]=\"item.className\">\n <ng-container *ngComponentOutlet=\"item.component; inputs: item.data\" />\n </li>\n }\n </ul>\n }\n</section>\n", styles: [".et-bracket-new{display:grid;gap:var(--_cg);grid-auto-columns:var(--_cw);--bracket-line-color: red}.et-bracket-new-round{display:grid;grid-column:var(--_c);grid-row:1;list-style:none;margin:0;padding:0;gap:var(--_rg);grid-template-rows:var(--_rhh);grid-auto-rows:var(--_mh)}.et-bracket-new-item{grid-row:var(--_r);place-self:center;transition:opacity .2s}.et-bracket-new-svg{grid-column:1/calc(var(--_bcc) + 1);grid-row:1/2;inline-size:100%;block-size:100%}.et-bracket-new-svg path{color:var(--bracket-line-color);transition:opacity .2s}\n"] }]
106
+ }], ctorParameters: () => [] });
107
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibmV3LWJyYWNrZXQuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vbGlicy9jZGsvc3JjL2xpYi9jb21wb25lbnRzL2JyYWNrZXQvY29tcG9uZW50cy9uZXctYnJhY2tldC9uZXctYnJhY2tldC5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi9saWJzL2Nkay9zcmMvbGliL2NvbXBvbmVudHMvYnJhY2tldC9jb21wb25lbnRzL25ldy1icmFja2V0L25ldy1icmFja2V0LmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxpQkFBaUIsRUFBRSxpQkFBaUIsRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBQ3ZFLE9BQU8sRUFDTCxnQkFBZ0IsRUFDaEIsdUJBQXVCLEVBQ3ZCLFNBQVMsRUFDVCxRQUFRLEVBQ1IsVUFBVSxFQUNWLE1BQU0sRUFDTixNQUFNLEVBQ04sS0FBSyxFQUNMLGVBQWUsRUFDZixXQUFXLEVBQ1gsU0FBUyxFQUNULGlCQUFpQixHQUNsQixNQUFNLGVBQWUsQ0FBQztBQUN2QixPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0sMkJBQTJCLENBQUM7QUFDekQsT0FBTyxFQUFFLGlCQUFpQixFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQ2xELE9BQU8sRUFDTCxtQkFBbUIsRUFHbkIsbUJBQW1CLEVBQ25CLGtDQUFrQyxFQUNsQywyQkFBMkIsRUFDM0IsMkJBQTJCLEVBQzNCLHlCQUF5QixFQUN6QixzQkFBc0IsRUFDdEIsc0JBQXNCLEVBQ3RCLGNBQWMsR0FDZixNQUFNLGVBQWUsQ0FBQztBQUN2QixPQUFPLEVBQUUsT0FBTyxFQUFFLE1BQU0sWUFBWSxDQUFDO0FBQ3JDLE9BQU8sRUFBRSw4QkFBOEIsRUFBRSxNQUFNLG9CQUFvQixDQUFDO0FBQ3BFLE9BQU8sRUFBc0Qsd0JBQXdCLEVBQUUsTUFBTSxtQkFBbUIs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eWtGQy9DaEMsbTZCQXNCQSxxbEJEdUJZLGlCQUFpQjs7NEZBRWhCLG1CQUFtQjtrQkFaL0IsU0FBUzsrQkFDRSxnQkFBZ0IsY0FHZCxJQUFJLG1CQUNDLHVCQUF1QixDQUFDLE1BQU0saUJBQ2hDLGlCQUFpQixDQUFDLElBQUksUUFDL0I7d0JBQ0osS0FBSyxFQUFFLHFCQUFxQjtxQkFDN0IsV0FDUSxDQUFDLGlCQUFpQixDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgaXNQbGF0Zm9ybUJyb3dzZXIsIE5nQ29tcG9uZW50T3V0bGV0IH0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uJztcbmltcG9ydCB7XG4gIGJvb2xlYW5BdHRyaWJ1dGUsXG4gIENoYW5nZURldGVjdGlvblN0cmF0ZWd5LFxuICBDb21wb25lbnQsXG4gIGNvbXB1dGVkLFxuICBEZXN0cm95UmVmLFxuICBlZmZlY3QsXG4gIGluamVjdCxcbiAgaW5wdXQsXG4gIG51bWJlckF0dHJpYnV0ZSxcbiAgUExBVEZPUk1fSUQsXG4gIFJlbmRlcmVyMixcbiAgVmlld0VuY2Fwc3VsYXRpb24sXG59IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgRG9tU2FuaXRpemVyIH0gZnJvbSAnQGFuZ3VsYXIvcGxhdGZvcm0tYnJvd3Nlcic7XG5pbXBvcnQgeyBjcmVhdGVDb21wb25lbnRJZCB9IGZyb20gJ0BldGhsZXRlL2NvcmUnO1xuaW1wb3J0IHtcbiAgQlJBQ0tFVF9EQVRBX0xBWU9VVCxcbiAgQnJhY2tldERhdGFMYXlvdXQsXG4gIEJyYWNrZXREYXRhU291cmNlLFxuICBnZW5lcmF0ZUJyYWNrZXREYXRhLFxuICBnZW5lcmF0ZUJyYWNrZXRSb3VuZFN3aXNzR3JvdXBNYXBzLFxuICBnZW5lcmF0ZUJyYWNrZXRSb3VuZFR5cGVNYXAsXG4gIGdlbmVyYXRlTWF0Y2hQYXJ0aWNpcGFudE1hcCxcbiAgZ2VuZXJhdGVNYXRjaFBvc2l0aW9uTWFwcyxcbiAgZ2VuZXJhdGVNYXRjaFJlbGF0aW9ucyxcbiAgZ2VuZXJhdGVSb3VuZFJlbGF0aW9ucyxcbiAgZ2V0Rmlyc3RSb3VuZHMsXG59IGZyb20gJy4vYnJhY2tldC1uZXcnO1xuaW1wb3J0IHsgZHJhd01hbiB9IGZyb20gJy4vZHJhdy1tYW4nO1xuaW1wb3J0IHsgZ2VuZXJhdGVCcmFja2V0R3JpZERlZmluaXRpb25zIH0gZnJvbSAnLi9ncmlkLWRlZmluaXRpb25zJztcbmltcG9ydCB7IEJyYWNrZXRNYXRjaENvbXBvbmVudCwgQnJhY2tldFJvdW5kSGVhZGVyQ29tcG9uZW50LCBnZW5lcmF0ZUJyYWNrZXRHcmlkSXRlbXMgfSBmcm9tICcuL2dyaWQtcGxhY2VtZW50cyc7XG5pbXBvcnQgeyBjcmVhdGVKb3VybmV5SGlnaGxpZ2h0IH0gZnJvbSAnLi9qb3VybmV5LWhpZ2hsaWdodCc7XG5cbkBDb21wb25lbnQoe1xuICBzZWxlY3RvcjogJ2V0LW5ldy1icmFja2V0JyxcbiAgdGVtcGxhdGVVcmw6ICcuL25ldy1icmFja2V0LmNvbXBvbmVudC5odG1sJyxcbiAgc3R5bGVVcmw6ICcuL25ldy1icmFja2V0LmNvbXBvbmVudC5zY3NzJyxcbiAgc3RhbmRhbG9uZTogdHJ1ZSxcbiAgY2hhbmdlRGV0ZWN0aW9uOiBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneS5PblB1c2gsXG4gIGVuY2Fwc3VsYXRpb246IFZpZXdFbmNhcHN1bGF0aW9uLk5vbmUsXG4gIGhvc3Q6IHtcbiAgICBjbGFzczogJ2V0LW5ldy1icmFja2V0LWhvc3QnLFxuICB9LFxuICBpbXBvcnRzOiBbTmdDb21wb25lbnRPdXRsZXRdLFxufSlcbmV4cG9ydCBjbGFzcyBOZXdCcmFja2V0Q29tcG9uZW50PFRSb3VuZERhdGEgPSB1bmtub3duLCBUTWF0Y2hEYXRhID0gdW5rbm93bj4ge1xuICAjZG9tU2FuaXRpemVyID0gaW5qZWN0KERvbVNhbml0aXplcik7XG4gICNlbGVtZW50SWQgPSBjcmVhdGVDb21wb25lbnRJZCgnZXQtbmV3LWJyYWNrZXQnKTtcblxuICBzb3VyY2UgPSBpbnB1dC5yZXF1aXJlZDxCcmFja2V0RGF0YVNvdXJjZTxUUm91bmREYXRhLCBUTWF0Y2hEYXRhPj4oKTtcblxuICBjb2x1bW5XaWR0aCA9IGlucHV0KDI1MCwgeyB0cmFuc2Zvcm06IG51bWJlckF0dHJpYnV0ZSB9KTtcbiAgbWF0Y2hIZWlnaHQgPSBpbnB1dCg3NSwgeyB0cmFuc2Zvcm06IG51bWJlckF0dHJpYnV0ZSB9KTtcbiAgcm91bmRIZWFkZXJIZWlnaHQgPSBpbnB1dCg1MCwgeyB0cmFuc2Zvcm06IG51bWJlckF0dHJpYnV0ZSB9KTtcbiAgY29sdW1uR2FwID0gaW5wdXQoNjAsIHsgdHJhbnNmb3JtOiBudW1iZXJBdHRyaWJ1dGUgfSk7XG4gIHJvd0dhcCA9IGlucHV0KDMwLCB7IHRyYW5zZm9ybTogbnVtYmVyQXR0cmlidXRlIH0pO1xuICBsaW5lU3RhcnRpbmdDdXJ2ZUFtb3VudCA9IGlucHV0KDEwLCB7IHRyYW5zZm9ybTogbnVtYmVyQXR0cmlidXRlIH0pO1xuICBsaW5lRW5kaW5nQ3VydmVBbW91bnQgPSBpbnB1dCgwLCB7IHRyYW5zZm9ybTogbnVtYmVyQXR0cmlidXRlIH0pO1xuICBsaW5lV2lkdGggPSBpbnB1dCgyLCB7IHRyYW5zZm9ybTogbnVtYmVyQXR0cmlidXRlIH0pO1xuICBsaW5lRGFzaEFycmF5ID0gaW5wdXQoMCwgeyB0cmFuc2Zvcm06IG51bWJlckF0dHJpYnV0ZSB9KTtcbiAgbGluZURhc2hPZmZzZXQgPSBpbnB1dCgwLCB7IHRyYW5zZm9ybTogbnVtYmVyQXR0cmlidXRlIH0pO1xuICBkaXNhYmxlSm91cm5leUhpZ2hsaWdodCA9IGlucHV0KGZhbHNlLCB7IHRyYW5zZm9ybTogYm9vbGVhbkF0dHJpYnV0ZSB9KTtcblxuICBsYXlvdXQgPSBpbnB1dDxCcmFja2V0RGF0YUxheW91dD4oQlJBQ0tFVF9EQVRBX0xBWU9VVC5MRUZUX1RPX1JJR0hUKTtcbiAgaGlkZVJvdW5kSGVhZGVycyA9IGlucHV0KGZhbHNlLCB7IHRyYW5zZm9ybTogYm9vbGVhbkF0dHJpYnV0ZSB9KTtcblxuICByb3VuZEhlYWRlckNvbXBvbmVudCA9IGlucHV0PEJyYWNrZXRSb3VuZEhlYWRlckNvbXBvbmVudDxUUm91bmREYXRhLCBUTWF0Y2hEYXRhPiB8IHVuZGVmaW5lZD4oKTtcbiAgbWF0Y2hDb21wb25lbnQgPSBpbnB1dDxCcmFja2V0TWF0Y2hDb21wb25lbnQ8VFJvdW5kRGF0YSwgVE1hdGNoRGF0YT4gfCB1bmRlZmluZWQ+KCk7XG4gIGZpbmFsTWF0Y2hDb21wb25lbnQgPSBpbnB1dDxCcmFja2V0TWF0Y2hDb21wb25lbnQ8VFJvdW5kRGF0YSwgVE1hdGNoRGF0YT4gfCB1bmRlZmluZWQ+KCk7XG5cbiAgYnJhY2tldERhdGEgPSBjb21wdXRlZCgoKSA9PiBnZW5lcmF0ZUJyYWNrZXREYXRhKHRoaXMuc291cmNlKCksIHsgbGF5b3V0OiB0aGlzLmxheW91dCgpIH0pKTtcblxuICByb3VuZFR5cGVNYXAgPSBjb21wdXRlZCgoKSA9PiBnZW5lcmF0ZUJyYWNrZXRSb3VuZFR5cGVNYXAodGhpcy5icmFja2V0RGF0YSgpKSk7XG4gIG1hdGNoUGFydGljaXBhbnRNYXAgPSBjb21wdXRlZCgoKSA9PiBnZW5lcmF0ZU1hdGNoUGFydGljaXBhbnRNYXAodGhpcy5icmFja2V0RGF0YSgpKSk7XG4gIG1hdGNoUG9zaXRpb25zTWFwID0gY29tcHV0ZWQoKCkgPT4gZ2VuZXJhdGVNYXRjaFBvc2l0aW9uTWFwcyh0aGlzLmJyYWNrZXREYXRhKCkpKTtcblxuICByb3VuZFJlbGF0aW9ucyA9IGNvbXB1dGVkKCgpID0+IGdlbmVyYXRlUm91bmRSZWxhdGlvbnModGhpcy5icmFja2V0RGF0YSgpKSk7XG4gIG1hdGNoUmVsYXRpb25zID0gY29tcHV0ZWQoKCkgPT5cbiAgICBnZW5lcmF0ZU1hdGNoUmVsYXRpb25zKHRoaXMuYnJhY2tldERhdGEoKSwgdGhpcy5yb3VuZFJlbGF0aW9ucygpLCB0aGlzLm1hdGNoUG9zaXRpb25zTWFwKCkpLFxuICApO1xuXG4gIHN3aXNzR3JvdXBzID0gY29tcHV0ZWQoKCkgPT4gZ2VuZXJhdGVCcmFja2V0Um91bmRTd2lzc0dyb3VwTWFwcyh0aGlzLmJyYWNrZXREYXRhKCksIHRoaXMubWF0Y2hQYXJ0aWNpcGFudE1hcCgpKSk7XG5cbiAgaXRlbXMgPSBjb21wdXRlZCgoKSA9PlxuICAgIGdlbmVyYXRlQnJhY2tldEdyaWRJdGVtcyhcbiAgICAgIHRoaXMuYnJhY2tldERhdGEoKSxcbiAgICAgIHRoaXMucm91bmRUeXBlTWFwKCksXG4gICAgICB0aGlzLnN3aXNzR3JvdXBzKCksXG4gICAgICB0aGlzLnJvdW5kUmVsYXRpb25zKCksXG4gICAgICB0aGlzLm1hdGNoUmVsYXRpb25zKCksXG4gICAgICB7XG4gICAgICAgIGluY2x1ZGVSb3VuZEhlYWRlcnM6ICF0aGlzLmhpZGVSb3VuZEhlYWRlcnMoKSxcbiAgICAgICAgaGVhZGVyQ29tcG9uZW50OiB0aGlzLnJvdW5kSGVhZGVyQ29tcG9uZW50KCksXG4gICAgICAgIG1hdGNoQ29tcG9uZW50OiB0aGlzLm1hdGNoQ29tcG9uZW50KCksXG4gICAgICAgIGZpbmFsTWF0Y2hDb21wb25lbnQ6IHRoaXMuZmluYWxNYXRjaENvbXBvbmVudCgpLFxuICAgICAgfSxcbiAgICApLFxuICApO1xuXG4gIGRlZmluaXRpb25zID0gY29tcHV0ZWQoKCkgPT5cbiAgICBnZW5lcmF0ZUJyYWNrZXRHcmlkRGVmaW5pdGlvbnModGhpcy5icmFja2V0RGF0YSgpLCB0aGlzLnJvdW5kVHlwZU1hcCgpLCB7XG4gICAgICBpbmNsdWRlUm91bmRIZWFkZXJzOiAhdGhpcy5oaWRlUm91bmRIZWFkZXJzKCksXG4gICAgfSksXG4gICk7XG5cbiAgZmlyc3RSb3VuZHMgPSBjb21wdXRlZCgoKSA9PiBnZXRGaXJzdFJvdW5kcyh0aGlzLmJyYWNrZXREYXRhKCksIHRoaXMucm91bmRUeXBlTWFwKCkpKTtcblxuICBkcmF3TWFuRGF0YSA9IGNvbXB1dGVkKCgpID0+XG4gICAgdGhpcy4jZG9tU2FuaXRpemVyLmJ5cGFzc1NlY3VyaXR5VHJ1c3RIdG1sKFxuICAgICAgZHJhd01hbih0aGlzLml0ZW1zKCksIHRoaXMuZmlyc3RSb3VuZHMoKSwge1xuICAgICAgICBjb2x1bW5HYXA6IHRoaXMuY29sdW1uR2FwKCksXG4gICAgICAgIGNvbHVtbldpZHRoOiB0aGlzLmNvbHVtbldpZHRoKCksXG4gICAgICAgIG1hdGNoSGVpZ2h0OiB0aGlzLm1hdGNoSGVpZ2h0KCksXG4gICAgICAgIHJvdW5kSGVhZGVySGVpZ2h0OiB0aGlzLmhpZGVSb3VuZEhlYWRlcnMoKSA/IDAgOiB0aGlzLnJvdW5kSGVhZGVySGVpZ2h0KCksXG4gICAgICAgIHJvd0dhcDogdGhpcy5yb3dHYXAoKSxcbiAgICAgICAgZ3JpZERlZmluaXRpb25zOiB0aGlzLmRlZmluaXRpb25zKCksXG4gICAgICAgIGN1cnZlOiB7XG4gICAgICAgICAgbGluZUVuZGluZ0N1cnZlQW1vdW50OiB0aGlzLmxpbmVFbmRpbmdDdXJ2ZUFtb3VudCgpLFxuICAgICAgICAgIGxpbmVTdGFydGluZ0N1cnZlQW1vdW50OiB0aGlzLmxpbmVTdGFydGluZ0N1cnZlQW1vdW50KCksXG4gICAgICAgIH0sXG4gICAgICAgIHBhdGg6IHtcbiAgICAgICAgICBkYXNoQXJyYXk6IHRoaXMubGluZURhc2hBcnJheSgpLFxuICAgICAgICAgIGRhc2hPZmZzZXQ6IHRoaXMubGluZURhc2hPZmZzZXQoKSxcbiAgICAgICAgICB3aWR0aDogdGhpcy5saW5lV2lkdGgoKSxcbiAgICAgICAgfSxcbiAgICAgIH0pLFxuICAgICksXG4gICk7XG5cbiAgam91cm5leUhpZ2hsaWdodCA9IGNvbXB1dGVkKCgpID0+XG4gICAgdGhpcy5kaXNhYmxlSm91cm5leUhpZ2hsaWdodCgpID8gbnVsbCA6IGNyZWF0ZUpvdXJuZXlIaWdobGlnaHQodGhpcy5icmFja2V0RGF0YSgpKSxcbiAgKTtcblxuICBjb25zdHJ1Y3RvcigpIHtcbiAgICBjb25zdCBpc0Jyb3dzZXIgPSBpc1BsYXRmb3JtQnJvd3NlcihpbmplY3QoUExBVEZPUk1fSUQpKTtcblxuICAgIGlmICghaXNCcm93c2VyKSByZXR1cm47XG5cbiAgICBjb25zdCByZW5kZXJlciA9IGluamVjdChSZW5kZXJlcjIpO1xuICAgIGNvbnN0IHN0eWxlSWQgPSBgZXQtbmV3LWJyYWNrZXQtam91cm5leS1oaWdobGlnaHQtLSR7dGhpcy4jZWxlbWVudElkfWA7XG5cbiAgICBsZXQgb2xkU3R5bGVFbDogdW5rbm93biA9IG51bGw7XG5cbiAgICBlZmZlY3QoKCkgPT4ge1xuICAgICAgY29uc3QgbmV3SGlnaGxpZ2h0U3R5bGUgPSB0aGlzLmpvdXJuZXlIaWdobGlnaHQoKTtcbiAgICAgIGNvbnN0IGhlYWQgPSBkb2N1bWVudC5oZWFkO1xuXG4gICAgICBpZiAob2xkU3R5bGVFbCkge1xuICAgICAgICByZW5kZXJlci5yZW1vdmVDaGlsZChoZWFkLCBvbGRTdHlsZUVsKTtcbiAgICAgIH1cblxuICAgICAgaWYgKG5ld0hpZ2hsaWdodFN0eWxlKSB7XG4gICAgICAgIGNvbnN0IGVsID0gcmVuZGVyZXIuY3JlYXRlRWxlbWVudCgnc3R5bGUnKTtcbiAgICAgICAgcmVuZGVyZXIuc2V0QXR0cmlidXRlKGVsLCAnaWQnLCBzdHlsZUlkKTtcbiAgICAgICAgcmVuZGVyZXIuYXBwZW5kQ2hpbGQoZWwsIHJlbmRlcmVyLmNyZWF0ZVRleHQobmV3SGlnaGxpZ2h0U3R5bGUpKTtcblxuICAgICAgICByZW5kZXJlci5hcHBlbmRDaGlsZChoZWFkLCBlbCk7XG4gICAgICAgIG9sZFN0eWxlRWwgPSBlbDtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIG9sZFN0eWxlRWwgPSBudWxsO1xuICAgICAgfVxuICAgIH0pO1xuXG4gICAgaW5qZWN0KERlc3Ryb3lSZWYpLm9uRGVzdHJveSgoKSA9PiB7XG4gICAgICBpZiAob2xkU3R5bGVFbCkge1xuICAgICAgICByZW5kZXJlci5yZW1vdmVDaGlsZChkb2N1bWVudC5oZWFkLCBvbGRTdHlsZUVsKTtcbiAgICAgIH1cbiAgICB9KTtcbiAgfVxufVxuIiwiPHNlY3Rpb25cbiAgW3N0eWxlLi0tX2N3LnB4XT1cImNvbHVtbldpZHRoKClcIlxuICBbc3R5bGUuLS1fbWgucHhdPVwibWF0Y2hIZWlnaHQoKVwiXG4gIFtzdHlsZS4tLV9yaGgucHhdPVwiaGlkZVJvdW5kSGVhZGVycygpID8gbWF0Y2hIZWlnaHQoKSA6IHJvdW5kSGVhZGVySGVpZ2h0KClcIlxuICBbc3R5bGUuLS1fY2cucHhdPVwiY29sdW1uR2FwKClcIlxuICBbc3R5bGUuLS1fcmcucHhdPVwicm93R2FwKClcIlxuICBbc3R5bGUuLS1fYmNjXT1cImRlZmluaXRpb25zKCkuY29sdW1uQ291bnRcIlxuICBbc3R5bGUuLS1fYnJjXT1cImRlZmluaXRpb25zKCkucm93Q291bnRcIlxuICBjbGFzcz1cImV0LWJyYWNrZXQtbmV3XCJcbj5cbiAgPHN2ZyBbaW5uZXJIVE1MXT1cImRyYXdNYW5EYXRhKClcIiBjbGFzcz1cImV0LWJyYWNrZXQtbmV3LXN2Z1wiIHhtbG5zPVwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIiAvPlxuXG4gIEBmb3IgKHJvdW5kIG9mIGl0ZW1zKCkudmFsdWVzKCk7IHRyYWNrIHJvdW5kLmxheW91dElkKSB7XG4gICAgPHVsIFtzdHlsZS4tLV9jXT1cInJvdW5kLmNvbHVtblN0YXJ0ICsgJyAvICcgKyByb3VuZC5jb2x1bW5FbmRcIiBjbGFzcz1cImV0LWJyYWNrZXQtbmV3LXJvdW5kXCI+XG4gICAgICBAZm9yIChpdGVtIG9mIHJvdW5kLml0ZW1zLnZhbHVlcygpOyB0cmFjayBpdGVtLmxheW91dElkKSB7XG4gICAgICAgIDxsaSBbc3R5bGUuLS1fcl09XCJpdGVtLnJvd1N0YXJ0ICsgJyAvICcgKyBpdGVtLnJvd0VuZFwiIFtjbGFzc109XCJpdGVtLmNsYXNzTmFtZVwiPlxuICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nQ29tcG9uZW50T3V0bGV0PVwiaXRlbS5jb21wb25lbnQ7IGlucHV0czogaXRlbS5kYXRhXCIgLz5cbiAgICAgICAgPC9saT5cbiAgICAgIH1cbiAgICA8L3VsPlxuICB9XG48L3NlY3Rpb24+XG4iXX0=