@rivet-health/design-system 40.15.0 → 40.17.0
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/esm2020/lib/layout/card/card-content.component.mjs +26 -5
- package/esm2020/lib/layout/card/card-header.component.mjs +83 -9
- package/esm2020/lib/layout/card/card.component.mjs +53 -4
- package/fesm2015/rivet-health-design-system.mjs +198 -53
- package/fesm2015/rivet-health-design-system.mjs.map +1 -1
- package/fesm2020/rivet-health-design-system.mjs +193 -51
- package/fesm2020/rivet-health-design-system.mjs.map +1 -1
- package/lib/layout/card/card-content.component.d.ts +17 -2
- package/lib/layout/card/card-header.component.d.ts +59 -7
- package/lib/layout/card/card.component.d.ts +43 -1
- package/package.json +1 -1
|
@@ -1,19 +1,38 @@
|
|
|
1
|
-
import { ChangeDetectionStrategy, Component, HostBinding, Input, } from '@angular/core';
|
|
1
|
+
import { ChangeDetectionStrategy, Component, HostBinding, Input, Optional, } from '@angular/core';
|
|
2
2
|
import * as i0 from "@angular/core";
|
|
3
|
+
import * as i1 from "./card.component";
|
|
3
4
|
/**
|
|
4
5
|
* Body of a `riv-card`.
|
|
5
6
|
*
|
|
6
7
|
* Grows to absorb any spare height by default, which keeps `riv-card-actions`
|
|
7
8
|
* pinned to the bottom when cards of differing content sit in an equal-height
|
|
8
9
|
* grid. Set `[grow]="false"` when the card should shrink to its content.
|
|
10
|
+
*
|
|
11
|
+
* In a card with an expandable header, this is the region the toggle controls —
|
|
12
|
+
* it takes an id from the card so that `aria-controls` resolves as soon as the
|
|
13
|
+
* body is rendered.
|
|
9
14
|
*/
|
|
10
15
|
export class CardContentComponent {
|
|
11
|
-
constructor() {
|
|
16
|
+
constructor(el, renderer, card) {
|
|
17
|
+
this.el = el;
|
|
18
|
+
this.renderer = renderer;
|
|
19
|
+
this.card = card;
|
|
12
20
|
this.padding = 'medium';
|
|
13
21
|
this.grow = true;
|
|
14
22
|
/** Draws a separator below the content. */
|
|
15
23
|
this.divider = false;
|
|
16
24
|
}
|
|
25
|
+
/**
|
|
26
|
+
* Wears the region id an expandable header's toggle points `aria-controls`
|
|
27
|
+
* at, so neither side needs the consumer to name the body. An id the consumer
|
|
28
|
+
* set of their own is left alone.
|
|
29
|
+
*/
|
|
30
|
+
ngOnInit() {
|
|
31
|
+
const regionId = this.card?.regionId;
|
|
32
|
+
if (regionId && !this.el.nativeElement.id) {
|
|
33
|
+
this.renderer.setAttribute(this.el.nativeElement, 'id', regionId);
|
|
34
|
+
}
|
|
35
|
+
}
|
|
17
36
|
get classes() {
|
|
18
37
|
return Object.entries({
|
|
19
38
|
[`padding-${this.padding}`]: true,
|
|
@@ -25,12 +44,14 @@ export class CardContentComponent {
|
|
|
25
44
|
.join(' ');
|
|
26
45
|
}
|
|
27
46
|
}
|
|
28
|
-
CardContentComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.2.10", ngImport: i0, type: CardContentComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
|
|
47
|
+
CardContentComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.2.10", ngImport: i0, type: CardContentComponent, deps: [{ token: i0.ElementRef }, { token: i0.Renderer2 }, { token: i1.CardComponent, optional: true }], target: i0.ɵɵFactoryTarget.Component });
|
|
29
48
|
CardContentComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "15.2.10", type: CardContentComponent, selector: "riv-card-content", inputs: { padding: "padding", grow: "grow", divider: "divider" }, host: { properties: { "class": "this.classes" } }, ngImport: i0, template: "<ng-content></ng-content>\n", styles: [":host{display:block;min-width:0;font:var(--body-medium)}:host.grow{flex-grow:1}:host.divider{border-bottom:var(--border-width) solid var(--border-light-blend)}:host.padding-small{padding:var(--size-small)}:host.padding-medium{padding:var(--size-medium)}:host.padding-large{padding:var(--size-large)}\n"], changeDetection: i0.ChangeDetectionStrategy.OnPush });
|
|
30
49
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.10", ngImport: i0, type: CardContentComponent, decorators: [{
|
|
31
50
|
type: Component,
|
|
32
51
|
args: [{ selector: 'riv-card-content', changeDetection: ChangeDetectionStrategy.OnPush, template: "<ng-content></ng-content>\n", styles: [":host{display:block;min-width:0;font:var(--body-medium)}:host.grow{flex-grow:1}:host.divider{border-bottom:var(--border-width) solid var(--border-light-blend)}:host.padding-small{padding:var(--size-small)}:host.padding-medium{padding:var(--size-medium)}:host.padding-large{padding:var(--size-large)}\n"] }]
|
|
33
|
-
}],
|
|
52
|
+
}], ctorParameters: function () { return [{ type: i0.ElementRef }, { type: i0.Renderer2 }, { type: i1.CardComponent, decorators: [{
|
|
53
|
+
type: Optional
|
|
54
|
+
}] }]; }, propDecorators: { padding: [{
|
|
34
55
|
type: Input
|
|
35
56
|
}], grow: [{
|
|
36
57
|
type: Input
|
|
@@ -40,4 +61,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.10", ngImpo
|
|
|
40
61
|
type: HostBinding,
|
|
41
62
|
args: ['class']
|
|
42
63
|
}] } });
|
|
43
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
64
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2FyZC1jb250ZW50LmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL3Jpdi9zcmMvbGliL2xheW91dC9jYXJkL2NhcmQtY29udGVudC5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9yaXYvc3JjL2xpYi9sYXlvdXQvY2FyZC9jYXJkLWNvbnRlbnQuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUNMLHVCQUF1QixFQUN2QixTQUFTLEVBRVQsV0FBVyxFQUNYLEtBQUssRUFFTCxRQUFRLEdBRVQsTUFBTSxlQUFlLENBQUM7OztBQUd2Qjs7Ozs7Ozs7OztHQVVHO0FBT0gsTUFBTSxPQUFPLG9CQUFvQjtJQUMvQixZQUNtQixFQUEyQixFQUMzQixRQUFtQixFQUNQLElBQTBCO1FBRnRDLE9BQUUsR0FBRixFQUFFLENBQXlCO1FBQzNCLGFBQVEsR0FBUixRQUFRLENBQVc7UUFDUCxTQUFJLEdBQUosSUFBSSxDQUFzQjtRQUl6RCxZQUFPLEdBQTBCLFFBQVEsQ0FBQztRQUcxQyxTQUFJLEdBQVksSUFBSSxDQUFDO1FBRXJCLDJDQUEyQztRQUUzQyxZQUFPLEdBQVksS0FBSyxDQUFDO0lBVnRCLENBQUM7SUFZSjs7OztPQUlHO0lBQ0gsUUFBUTtRQUNOLE1BQU0sUUFBUSxHQUFHLElBQUksQ0FBQyxJQUFJLEVBQUUsUUFBUSxDQUFDO1FBQ3JDLElBQUksUUFBUSxJQUFJLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQyxhQUFhLENBQUMsRUFBRSxFQUFFO1lBQ3pDLElBQUksQ0FBQyxRQUFRLENBQUMsWUFBWSxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUMsYUFBYSxFQUFFLElBQUksRUFBRSxRQUFRLENBQUMsQ0FBQztTQUNuRTtJQUNILENBQUM7SUFFRCxJQUNJLE9BQU87UUFDVCxPQUFPLE1BQU0sQ0FBQyxPQUFPLENBQUM7WUFDcEIsQ0FBQyxXQUFXLElBQUksQ0FBQyxPQUFPLEVBQUUsQ0FBQyxFQUFFLElBQUk7WUFDakMsSUFBSSxFQUFFLElBQUksQ0FBQyxJQUFJO1lBQ2YsT0FBTyxFQUFFLElBQUksQ0FBQyxPQUFPO1NBQ3RCLENBQUM7YUFDQyxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDO2FBQ3JCLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUMsQ0FBQzthQUNmLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQztJQUNmLENBQUM7O2tIQXZDVSxvQkFBb0I7c0dBQXBCLG9CQUFvQiw2S0M3QmpDLDZCQUNBOzRGRDRCYSxvQkFBb0I7a0JBTmhDLFNBQVM7K0JBQ0Usa0JBQWtCLG1CQUdYLHVCQUF1QixDQUFDLE1BQU07OzBCQU01QyxRQUFROzRDQUlYLE9BQU87c0JBRE4sS0FBSztnQkFJTixJQUFJO3NCQURILEtBQUs7Z0JBS04sT0FBTztzQkFETixLQUFLO2dCQWdCRixPQUFPO3NCQURWLFdBQVc7dUJBQUMsT0FBTyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7XG4gIENoYW5nZURldGVjdGlvblN0cmF0ZWd5LFxuICBDb21wb25lbnQsXG4gIEVsZW1lbnRSZWYsXG4gIEhvc3RCaW5kaW5nLFxuICBJbnB1dCxcbiAgT25Jbml0LFxuICBPcHRpb25hbCxcbiAgUmVuZGVyZXIyLFxufSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IENhcmRDb21wb25lbnQgfSBmcm9tICcuL2NhcmQuY29tcG9uZW50JztcblxuLyoqXG4gKiBCb2R5IG9mIGEgYHJpdi1jYXJkYC5cbiAqXG4gKiBHcm93cyB0byBhYnNvcmIgYW55IHNwYXJlIGhlaWdodCBieSBkZWZhdWx0LCB3aGljaCBrZWVwcyBgcml2LWNhcmQtYWN0aW9uc2BcbiAqIHBpbm5lZCB0byB0aGUgYm90dG9tIHdoZW4gY2FyZHMgb2YgZGlmZmVyaW5nIGNvbnRlbnQgc2l0IGluIGFuIGVxdWFsLWhlaWdodFxuICogZ3JpZC4gU2V0IGBbZ3Jvd109XCJmYWxzZVwiYCB3aGVuIHRoZSBjYXJkIHNob3VsZCBzaHJpbmsgdG8gaXRzIGNvbnRlbnQuXG4gKlxuICogSW4gYSBjYXJkIHdpdGggYW4gZXhwYW5kYWJsZSBoZWFkZXIsIHRoaXMgaXMgdGhlIHJlZ2lvbiB0aGUgdG9nZ2xlIGNvbnRyb2xzIOKAlFxuICogaXQgdGFrZXMgYW4gaWQgZnJvbSB0aGUgY2FyZCBzbyB0aGF0IGBhcmlhLWNvbnRyb2xzYCByZXNvbHZlcyBhcyBzb29uIGFzIHRoZVxuICogYm9keSBpcyByZW5kZXJlZC5cbiAqL1xuQENvbXBvbmVudCh7XG4gIHNlbGVjdG9yOiAncml2LWNhcmQtY29udGVudCcsXG4gIHRlbXBsYXRlVXJsOiAnLi9jYXJkLWNvbnRlbnQuY29tcG9uZW50Lmh0bWwnLFxuICBzdHlsZVVybHM6IFsnLi9jYXJkLWNvbnRlbnQuY29tcG9uZW50LmNzcyddLFxuICBjaGFuZ2VEZXRlY3Rpb246IENoYW5nZURldGVjdGlvblN0cmF0ZWd5Lk9uUHVzaCxcbn0pXG5leHBvcnQgY2xhc3MgQ2FyZENvbnRlbnRDb21wb25lbnQgaW1wbGVtZW50cyBPbkluaXQge1xuICBjb25zdHJ1Y3RvcihcbiAgICBwcml2YXRlIHJlYWRvbmx5IGVsOiBFbGVtZW50UmVmPEhUTUxFbGVtZW50PixcbiAgICBwcml2YXRlIHJlYWRvbmx5IHJlbmRlcmVyOiBSZW5kZXJlcjIsXG4gICAgQE9wdGlvbmFsKCkgcHJpdmF0ZSByZWFkb25seSBjYXJkOiBDYXJkQ29tcG9uZW50IHwgbnVsbCxcbiAgKSB7fVxuXG4gIEBJbnB1dCgpXG4gIHBhZGRpbmc6IENhcmRDb21wb25lbnQuUGFkZGluZyA9ICdtZWRpdW0nO1xuXG4gIEBJbnB1dCgpXG4gIGdyb3c6IGJvb2xlYW4gPSB0cnVlO1xuXG4gIC8qKiBEcmF3cyBhIHNlcGFyYXRvciBiZWxvdyB0aGUgY29udGVudC4gKi9cbiAgQElucHV0KClcbiAgZGl2aWRlcjogYm9vbGVhbiA9IGZhbHNlO1xuXG4gIC8qKlxuICAgKiBXZWFycyB0aGUgcmVnaW9uIGlkIGFuIGV4cGFuZGFibGUgaGVhZGVyJ3MgdG9nZ2xlIHBvaW50cyBgYXJpYS1jb250cm9sc2BcbiAgICogYXQsIHNvIG5laXRoZXIgc2lkZSBuZWVkcyB0aGUgY29uc3VtZXIgdG8gbmFtZSB0aGUgYm9keS4gQW4gaWQgdGhlIGNvbnN1bWVyXG4gICAqIHNldCBvZiB0aGVpciBvd24gaXMgbGVmdCBhbG9uZS5cbiAgICovXG4gIG5nT25Jbml0KCkge1xuICAgIGNvbnN0IHJlZ2lvbklkID0gdGhpcy5jYXJkPy5yZWdpb25JZDtcbiAgICBpZiAocmVnaW9uSWQgJiYgIXRoaXMuZWwubmF0aXZlRWxlbWVudC5pZCkge1xuICAgICAgdGhpcy5yZW5kZXJlci5zZXRBdHRyaWJ1dGUodGhpcy5lbC5uYXRpdmVFbGVtZW50LCAnaWQnLCByZWdpb25JZCk7XG4gICAgfVxuICB9XG5cbiAgQEhvc3RCaW5kaW5nKCdjbGFzcycpXG4gIGdldCBjbGFzc2VzKCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIE9iamVjdC5lbnRyaWVzKHtcbiAgICAgIFtgcGFkZGluZy0ke3RoaXMucGFkZGluZ31gXTogdHJ1ZSxcbiAgICAgIGdyb3c6IHRoaXMuZ3JvdyxcbiAgICAgIGRpdmlkZXI6IHRoaXMuZGl2aWRlcixcbiAgICB9KVxuICAgICAgLmZpbHRlcigoW18sIHZdKSA9PiB2KVxuICAgICAgLm1hcCgoW2tdKSA9PiBrKVxuICAgICAgLmpvaW4oJyAnKTtcbiAgfVxufVxuIiwiPG5nLWNvbnRlbnQ+PC9uZy1jb250ZW50PlxuIl19
|
|
@@ -1,8 +1,9 @@
|
|
|
1
|
-
import { ChangeDetectionStrategy, Component, HostBinding, Input, Optional, } from '@angular/core';
|
|
1
|
+
import { ChangeDetectionStrategy, Component, EventEmitter, HostBinding, Input, Optional, Output, } from '@angular/core';
|
|
2
2
|
import { uniqueId } from 'lodash';
|
|
3
3
|
import * as i0 from "@angular/core";
|
|
4
4
|
import * as i1 from "./card.component";
|
|
5
5
|
import * as i2 from "@angular/common";
|
|
6
|
+
import * as i3 from "../../icon/icon.component";
|
|
6
7
|
/**
|
|
7
8
|
* Top row of a `riv-card`: heading text plus optional adornments.
|
|
8
9
|
*
|
|
@@ -26,8 +27,33 @@ import * as i2 from "@angular/common";
|
|
|
26
27
|
* outline; pick the level that follows the surrounding content rather than the
|
|
27
28
|
* one that looks right, since size comes from the design tokens either way.
|
|
28
29
|
*
|
|
29
|
-
* The heading font can be overridden per-instance with the
|
|
30
|
-
* `--card-heading-font` custom
|
|
30
|
+
* The heading font and colour can be overridden per-instance with the
|
|
31
|
+
* `--card-heading-font` and `--card-heading-color` custom properties.
|
|
32
|
+
*
|
|
33
|
+
* ## Expanding and collapsing
|
|
34
|
+
*
|
|
35
|
+
* `expandable` turns the header into the toggle for the card's body: it renders
|
|
36
|
+
* a chevron and covers the row with a real `<button>` carrying `aria-expanded`
|
|
37
|
+
* and `aria-controls`, so the pattern is keyboard operable and announces its
|
|
38
|
+
* state. Controls in `[actions]` sit above that button and stay independently
|
|
39
|
+
* clickable, so a menu beside the toggle needs no `stopPropagation`.
|
|
40
|
+
*
|
|
41
|
+
* The header holds no state of its own — bind `expanded` and act on
|
|
42
|
+
* `expandedChange`, or use `[(expanded)]`:
|
|
43
|
+
*
|
|
44
|
+
* ```html
|
|
45
|
+
* <riv-card>
|
|
46
|
+
* <riv-card-header
|
|
47
|
+
* [heading]="'Patient info'"
|
|
48
|
+
* [expandable]="true"
|
|
49
|
+
* [(expanded)]="open"
|
|
50
|
+
* ></riv-card-header>
|
|
51
|
+
* <riv-card-content *ngIf="open">...</riv-card-content>
|
|
52
|
+
* </riv-card>
|
|
53
|
+
* ```
|
|
54
|
+
*
|
|
55
|
+
* The toggle is named by the header's title, so an expandable header needs a
|
|
56
|
+
* `heading` or a projected title.
|
|
31
57
|
*/
|
|
32
58
|
export class CardHeaderComponent {
|
|
33
59
|
constructor(card) {
|
|
@@ -37,6 +63,11 @@ export class CardHeaderComponent {
|
|
|
37
63
|
* target from the title rather than from the card's whole text.
|
|
38
64
|
*/
|
|
39
65
|
this.titleId = uniqueId('riv-card-title-');
|
|
66
|
+
/**
|
|
67
|
+
* Names the body the toggle controls. Handed to the enclosing card, which
|
|
68
|
+
* relays it to the projected `riv-card-content`.
|
|
69
|
+
*/
|
|
70
|
+
this.regionId = uniqueId('riv-card-region-');
|
|
40
71
|
/** Heading element rendered for `heading`, for document outline purposes. */
|
|
41
72
|
this.headingLevel = 3;
|
|
42
73
|
/** `filled` gives the header its own background, separating it from the body. */
|
|
@@ -46,11 +77,26 @@ export class CardHeaderComponent {
|
|
|
46
77
|
this.divider = false;
|
|
47
78
|
/** Cross-axis alignment of the leading slot, heading block, and actions. */
|
|
48
79
|
this.align = 'start';
|
|
80
|
+
/** Turns the header row into the toggle for the card's body. */
|
|
81
|
+
this.expandable = false;
|
|
82
|
+
/** Whether the body is currently open. The consumer owns this state. */
|
|
83
|
+
this.expanded = false;
|
|
84
|
+
/** Side of the header the chevron sits on. */
|
|
85
|
+
this.togglePosition = 'trailing';
|
|
86
|
+
/**
|
|
87
|
+
* Blocks the toggle, for a section that is not yet available to open. Set it
|
|
88
|
+
* alongside a disabled `riv-card`, whose own `disabled` mutes the surface but
|
|
89
|
+
* does not reach the header's controls.
|
|
90
|
+
*/
|
|
91
|
+
this.disabled = false;
|
|
92
|
+
/** Emitted with the state the consumer is being asked to move to. */
|
|
93
|
+
this.expandedChange = new EventEmitter();
|
|
49
94
|
}
|
|
50
95
|
/**
|
|
51
|
-
* Offers the heading to an enclosing card as the name for its click target
|
|
52
|
-
*
|
|
53
|
-
*
|
|
96
|
+
* Offers the heading to an enclosing card as the name for its click target,
|
|
97
|
+
* and the toggle's region so a projected `riv-card-content` can wear it. Only
|
|
98
|
+
* a text heading is offered: projected titles can be anything, so those cards
|
|
99
|
+
* fall back to naming against their whole content.
|
|
54
100
|
*/
|
|
55
101
|
ngOnChanges(changes) {
|
|
56
102
|
if (changes['heading']) {
|
|
@@ -61,10 +107,26 @@ export class CardHeaderComponent {
|
|
|
61
107
|
this.card?.clearTitleId(this.titleId);
|
|
62
108
|
}
|
|
63
109
|
}
|
|
110
|
+
if (changes['expandable']) {
|
|
111
|
+
if (this.expandable) {
|
|
112
|
+
this.card?.setRegionId(this.regionId);
|
|
113
|
+
}
|
|
114
|
+
else {
|
|
115
|
+
this.card?.clearRegionId(this.regionId);
|
|
116
|
+
}
|
|
117
|
+
}
|
|
64
118
|
}
|
|
65
119
|
/** Withdraws the offer, so the card stops naming itself against this header. */
|
|
66
120
|
ngOnDestroy() {
|
|
67
121
|
this.card?.clearTitleId(this.titleId);
|
|
122
|
+
this.card?.clearRegionId(this.regionId);
|
|
123
|
+
}
|
|
124
|
+
/**
|
|
125
|
+
* Asks for the opposite state rather than taking it, which keeps the header
|
|
126
|
+
* free of state that could drift from the consumer's.
|
|
127
|
+
*/
|
|
128
|
+
toggle() {
|
|
129
|
+
this.expandedChange.emit(!this.expanded);
|
|
68
130
|
}
|
|
69
131
|
get classes() {
|
|
70
132
|
return Object.entries({
|
|
@@ -72,6 +134,7 @@ export class CardHeaderComponent {
|
|
|
72
134
|
[`padding-${this.padding}`]: true,
|
|
73
135
|
[`align-${this.align}`]: true,
|
|
74
136
|
divider: this.divider,
|
|
137
|
+
expandable: this.expandable,
|
|
75
138
|
})
|
|
76
139
|
.filter(([_, v]) => v)
|
|
77
140
|
.map(([k]) => k)
|
|
@@ -93,10 +156,10 @@ export class CardHeaderComponent {
|
|
|
93
156
|
}
|
|
94
157
|
}
|
|
95
158
|
CardHeaderComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.2.10", ngImport: i0, type: CardHeaderComponent, deps: [{ token: i1.CardComponent, optional: true }], target: i0.ɵɵFactoryTarget.Component });
|
|
96
|
-
CardHeaderComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "15.2.10", type: CardHeaderComponent, selector: "riv-card-header", inputs: { heading: "heading", subheading: "subheading", headingLevel: "headingLevel", variant: "variant", padding: "padding", divider: "divider", align: "align", clamp: "clamp" }, host: { properties: { "class": "this.classes" } }, usesOnChanges: true, ngImport: i0, template: "<div class=\"leading\"><ng-content select=\"[leading]\"></ng-content></div>\n<div class=\"main\">\n <div class=\"title-row\" [id]=\"titleId\">\n <div *ngIf=\"heading?.trim()\" class=\"heading\" [ngStyle]=\"clampStyle\">\n <ng-container [ngSwitch]=\"headingLevel\">\n <h1 *ngSwitchCase=\"1\">{{ heading }}</h1>\n <h2 *ngSwitchCase=\"2\">{{ heading }}</h2>\n <h3 *ngSwitchCase=\"3\">{{ heading }}</h3>\n <h4 *ngSwitchCase=\"4\">{{ heading }}</h4>\n <h5 *ngSwitchCase=\"5\">{{ heading }}</h5>\n <h6 *ngSwitchCase=\"6\">{{ heading }}</h6>\n </ng-container>\n </div>\n <ng-content></ng-content>\n </div>\n <div *ngIf=\"subheading?.trim()\" class=\"subheading\">{{ subheading }}</div>\n</div>\n<div class=\"actions\"><ng-content select=\"[actions]\"></ng-content></div>\n", styles: [":host{display:flex;gap:var(--size-medium);min-width:0}:host.align-start{align-items:flex-start}:host.align-center{align-items:center}:host.padding-small{padding:var(--size-small)}:host.padding-medium{padding:var(--size-medium)}:host.padding-large{padding:var(--size-large)}:host.filled{background-color:var(--surface-light-1)}:host.filled,:host.divider{border-bottom:var(--border-width) solid var(--border-light-blend)}.main{flex-grow:1;min-width:0}.title-row{display:flex;flex-wrap:wrap;align-items:baseline;gap:var(--size-xsmall);min-width:0;font:var(--card-heading-font, var(--title-04));color:var(--type-light-high-contrast)}:host.filled .title-row{font:var(--card-heading-font, var(--title-02))}.leading{flex-shrink:0}.actions{position:relative;z-index:var(--card-raised-z-index);display:flex;flex-shrink:0;align-items:center;gap:var(--size-small)}.leading:not(:has(*)),.actions:not(:has(*)){display:none}.heading{min-width:0}.heading>*{display:inline;margin:0;font:inherit;color:inherit}.subheading{font:var(--body-small);color:var(--type-light-low-contrast)}\n"], dependencies: [{ kind: "directive", type: i2.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i2.NgStyle, selector: "[ngStyle]", inputs: ["ngStyle"] }, { kind: "directive", type: i2.NgSwitch, selector: "[ngSwitch]", inputs: ["ngSwitch"] }, { kind: "directive", type: i2.NgSwitchCase, selector: "[ngSwitchCase]", inputs: ["ngSwitchCase"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
|
|
159
|
+
CardHeaderComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "15.2.10", type: CardHeaderComponent, selector: "riv-card-header", inputs: { heading: "heading", subheading: "subheading", headingLevel: "headingLevel", variant: "variant", padding: "padding", divider: "divider", align: "align", clamp: "clamp", expandable: "expandable", expanded: "expanded", togglePosition: "togglePosition", disabled: "disabled" }, outputs: { expandedChange: "expandedChange" }, host: { properties: { "class": "this.classes" } }, usesOnChanges: true, ngImport: i0, template: "<button\n *ngIf=\"expandable\"\n type=\"button\"\n class=\"expand-toggle\"\n [disabled]=\"disabled\"\n [attr.aria-expanded]=\"expanded\"\n [attr.aria-controls]=\"regionId\"\n [attr.aria-labelledby]=\"titleId\"\n (click)=\"toggle()\"\n></button>\n<ng-container\n *ngIf=\"expandable && togglePosition === 'leading'\"\n [ngTemplateOutlet]=\"chevron\"\n></ng-container>\n<div class=\"leading\"><ng-content select=\"[leading]\"></ng-content></div>\n<div class=\"main\">\n <div class=\"title-row\" [id]=\"titleId\">\n <div *ngIf=\"heading?.trim()\" class=\"heading\" [ngStyle]=\"clampStyle\">\n <ng-container [ngSwitch]=\"headingLevel\">\n <h1 *ngSwitchCase=\"1\">{{ heading }}</h1>\n <h2 *ngSwitchCase=\"2\">{{ heading }}</h2>\n <h3 *ngSwitchCase=\"3\">{{ heading }}</h3>\n <h4 *ngSwitchCase=\"4\">{{ heading }}</h4>\n <h5 *ngSwitchCase=\"5\">{{ heading }}</h5>\n <h6 *ngSwitchCase=\"6\">{{ heading }}</h6>\n </ng-container>\n </div>\n <ng-content></ng-content>\n </div>\n <div *ngIf=\"subheading?.trim()\" class=\"subheading\">{{ subheading }}</div>\n</div>\n<ng-container\n *ngIf=\"expandable && togglePosition === 'trailing'\"\n [ngTemplateOutlet]=\"chevron\"\n></ng-container>\n<div class=\"actions\"><ng-content select=\"[actions]\"></ng-content></div>\n\n<ng-template #chevron>\n <riv-icon\n class=\"expand-chevron\"\n [class.expanded]=\"expanded\"\n [name]=\"'ChevronDown'\"\n [size]=\"20\"\n ></riv-icon>\n</ng-template>\n", styles: [":host{display:flex;gap:var(--size-medium);min-width:0}:host.expandable{position:relative}:host.align-start{align-items:flex-start}:host.align-center{align-items:center}:host.padding-small{padding:var(--size-small)}:host.padding-medium{padding:var(--size-medium)}:host.padding-large{padding:var(--size-large)}:host.filled{background-color:var(--surface-light-1)}:host.filled,:host.divider{border-bottom:var(--border-width) solid var(--border-light-blend)}.main{flex-grow:1;min-width:0}.title-row{display:flex;flex-wrap:wrap;align-items:baseline;gap:var(--size-xsmall);min-width:0;font:var(--card-heading-font, var(--title-04));color:var(--card-heading-color, var(--type-light-high-contrast))}:host.filled .title-row{font:var(--card-heading-font, var(--title-02))}.leading{flex-shrink:0}.actions{position:relative;z-index:var(--card-raised-z-index);display:flex;flex-shrink:0;align-items:center;gap:var(--size-small)}.expand-toggle{position:absolute;inset:0;z-index:var(--card-click-target-z-index);padding:0;border:none;background:none;cursor:pointer;transition:background-color var(--short-transition)}.expand-toggle:not(:disabled):hover{background-color:var(--black-20)}.expand-toggle:disabled{cursor:default}.expand-toggle:focus-visible{outline:var(--border-width-large) solid var(--type-light-link);outline-offset:calc(-1 * var(--border-width-large))}.expand-chevron{flex-shrink:0;transition:transform var(--medium-transition)}.expand-chevron.expanded{transform:rotate(-180deg)}.leading:not(:has(*)),.actions:not(:has(*)){display:none}.heading{min-width:0}.heading>*{display:inline;margin:0;font:inherit;color:inherit}.subheading{font:var(--body-small);color:var(--type-light-low-contrast)}\n"], dependencies: [{ kind: "directive", type: i2.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i2.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "directive", type: i2.NgStyle, selector: "[ngStyle]", inputs: ["ngStyle"] }, { kind: "directive", type: i2.NgSwitch, selector: "[ngSwitch]", inputs: ["ngSwitch"] }, { kind: "directive", type: i2.NgSwitchCase, selector: "[ngSwitchCase]", inputs: ["ngSwitchCase"] }, { kind: "component", type: i3.IconComponent, selector: "riv-icon", inputs: ["name", "fillColor", "size", "customSize", "strokeWidth"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
|
|
97
160
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.10", ngImport: i0, type: CardHeaderComponent, decorators: [{
|
|
98
161
|
type: Component,
|
|
99
|
-
args: [{ selector: 'riv-card-header', changeDetection: ChangeDetectionStrategy.OnPush, template: "<div class=\"leading\"><ng-content select=\"[leading]\"></ng-content></div>\n<div class=\"main\">\n <div class=\"title-row\" [id]=\"titleId\">\n <div *ngIf=\"heading?.trim()\" class=\"heading\" [ngStyle]=\"clampStyle\">\n <ng-container [ngSwitch]=\"headingLevel\">\n <h1 *ngSwitchCase=\"1\">{{ heading }}</h1>\n <h2 *ngSwitchCase=\"2\">{{ heading }}</h2>\n <h3 *ngSwitchCase=\"3\">{{ heading }}</h3>\n <h4 *ngSwitchCase=\"4\">{{ heading }}</h4>\n <h5 *ngSwitchCase=\"5\">{{ heading }}</h5>\n <h6 *ngSwitchCase=\"6\">{{ heading }}</h6>\n </ng-container>\n </div>\n <ng-content></ng-content>\n </div>\n <div *ngIf=\"subheading?.trim()\" class=\"subheading\">{{ subheading }}</div>\n</div>\n<div class=\"actions\"><ng-content select=\"[actions]\"></ng-content></div>\n", styles: [":host{display:flex;gap:var(--size-medium);min-width:0}:host.align-start{align-items:flex-start}:host.align-center{align-items:center}:host.padding-small{padding:var(--size-small)}:host.padding-medium{padding:var(--size-medium)}:host.padding-large{padding:var(--size-large)}:host.filled{background-color:var(--surface-light-1)}:host.filled,:host.divider{border-bottom:var(--border-width) solid var(--border-light-blend)}.main{flex-grow:1;min-width:0}.title-row{display:flex;flex-wrap:wrap;align-items:baseline;gap:var(--size-xsmall);min-width:0;font:var(--card-heading-font, var(--title-04));color:var(--type-light-high-contrast)}:host.filled .title-row{font:var(--card-heading-font, var(--title-02))}.leading{flex-shrink:0}.actions{position:relative;z-index:var(--card-raised-z-index);display:flex;flex-shrink:0;align-items:center;gap:var(--size-small)}.leading:not(:has(*)),.actions:not(:has(*)){display:none}.heading{min-width:0}.heading>*{display:inline;margin:0;font:inherit;color:inherit}.subheading{font:var(--body-small);color:var(--type-light-low-contrast)}\n"] }]
|
|
162
|
+
args: [{ selector: 'riv-card-header', changeDetection: ChangeDetectionStrategy.OnPush, template: "<button\n *ngIf=\"expandable\"\n type=\"button\"\n class=\"expand-toggle\"\n [disabled]=\"disabled\"\n [attr.aria-expanded]=\"expanded\"\n [attr.aria-controls]=\"regionId\"\n [attr.aria-labelledby]=\"titleId\"\n (click)=\"toggle()\"\n></button>\n<ng-container\n *ngIf=\"expandable && togglePosition === 'leading'\"\n [ngTemplateOutlet]=\"chevron\"\n></ng-container>\n<div class=\"leading\"><ng-content select=\"[leading]\"></ng-content></div>\n<div class=\"main\">\n <div class=\"title-row\" [id]=\"titleId\">\n <div *ngIf=\"heading?.trim()\" class=\"heading\" [ngStyle]=\"clampStyle\">\n <ng-container [ngSwitch]=\"headingLevel\">\n <h1 *ngSwitchCase=\"1\">{{ heading }}</h1>\n <h2 *ngSwitchCase=\"2\">{{ heading }}</h2>\n <h3 *ngSwitchCase=\"3\">{{ heading }}</h3>\n <h4 *ngSwitchCase=\"4\">{{ heading }}</h4>\n <h5 *ngSwitchCase=\"5\">{{ heading }}</h5>\n <h6 *ngSwitchCase=\"6\">{{ heading }}</h6>\n </ng-container>\n </div>\n <ng-content></ng-content>\n </div>\n <div *ngIf=\"subheading?.trim()\" class=\"subheading\">{{ subheading }}</div>\n</div>\n<ng-container\n *ngIf=\"expandable && togglePosition === 'trailing'\"\n [ngTemplateOutlet]=\"chevron\"\n></ng-container>\n<div class=\"actions\"><ng-content select=\"[actions]\"></ng-content></div>\n\n<ng-template #chevron>\n <riv-icon\n class=\"expand-chevron\"\n [class.expanded]=\"expanded\"\n [name]=\"'ChevronDown'\"\n [size]=\"20\"\n ></riv-icon>\n</ng-template>\n", styles: [":host{display:flex;gap:var(--size-medium);min-width:0}:host.expandable{position:relative}:host.align-start{align-items:flex-start}:host.align-center{align-items:center}:host.padding-small{padding:var(--size-small)}:host.padding-medium{padding:var(--size-medium)}:host.padding-large{padding:var(--size-large)}:host.filled{background-color:var(--surface-light-1)}:host.filled,:host.divider{border-bottom:var(--border-width) solid var(--border-light-blend)}.main{flex-grow:1;min-width:0}.title-row{display:flex;flex-wrap:wrap;align-items:baseline;gap:var(--size-xsmall);min-width:0;font:var(--card-heading-font, var(--title-04));color:var(--card-heading-color, var(--type-light-high-contrast))}:host.filled .title-row{font:var(--card-heading-font, var(--title-02))}.leading{flex-shrink:0}.actions{position:relative;z-index:var(--card-raised-z-index);display:flex;flex-shrink:0;align-items:center;gap:var(--size-small)}.expand-toggle{position:absolute;inset:0;z-index:var(--card-click-target-z-index);padding:0;border:none;background:none;cursor:pointer;transition:background-color var(--short-transition)}.expand-toggle:not(:disabled):hover{background-color:var(--black-20)}.expand-toggle:disabled{cursor:default}.expand-toggle:focus-visible{outline:var(--border-width-large) solid var(--type-light-link);outline-offset:calc(-1 * var(--border-width-large))}.expand-chevron{flex-shrink:0;transition:transform var(--medium-transition)}.expand-chevron.expanded{transform:rotate(-180deg)}.leading:not(:has(*)),.actions:not(:has(*)){display:none}.heading{min-width:0}.heading>*{display:inline;margin:0;font:inherit;color:inherit}.subheading{font:var(--body-small);color:var(--type-light-low-contrast)}\n"] }]
|
|
100
163
|
}], ctorParameters: function () { return [{ type: i1.CardComponent, decorators: [{
|
|
101
164
|
type: Optional
|
|
102
165
|
}] }]; }, propDecorators: { heading: [{
|
|
@@ -115,6 +178,16 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.10", ngImpo
|
|
|
115
178
|
type: Input
|
|
116
179
|
}], clamp: [{
|
|
117
180
|
type: Input
|
|
181
|
+
}], expandable: [{
|
|
182
|
+
type: Input
|
|
183
|
+
}], expanded: [{
|
|
184
|
+
type: Input
|
|
185
|
+
}], togglePosition: [{
|
|
186
|
+
type: Input
|
|
187
|
+
}], disabled: [{
|
|
188
|
+
type: Input
|
|
189
|
+
}], expandedChange: [{
|
|
190
|
+
type: Output
|
|
118
191
|
}], classes: [{
|
|
119
192
|
type: HostBinding,
|
|
120
193
|
args: ['class']
|
|
@@ -123,5 +196,6 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.10", ngImpo
|
|
|
123
196
|
CardHeaderComponent.Variants = ['plain', 'filled'];
|
|
124
197
|
CardHeaderComponent.HeadingLevels = [1, 2, 3, 4, 5, 6];
|
|
125
198
|
CardHeaderComponent.Aligns = ['start', 'center'];
|
|
199
|
+
CardHeaderComponent.TogglePositions = ['leading', 'trailing'];
|
|
126
200
|
})(CardHeaderComponent || (CardHeaderComponent = {}));
|
|
127
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2FyZC1oZWFkZXIuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvcml2L3NyYy9saWIvbGF5b3V0L2NhcmQvY2FyZC1oZWFkZXIuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvcml2L3NyYy9saWIvbGF5b3V0L2NhcmQvY2FyZC1oZWFkZXIuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUNMLHVCQUF1QixFQUN2QixTQUFTLEVBQ1QsV0FBVyxFQUNYLEtBQUssRUFHTCxRQUFRLEdBRVQsTUFBTSxlQUFlLENBQUM7QUFDdkIsT0FBTyxFQUFFLFFBQVEsRUFBRSxNQUFNLFFBQVEsQ0FBQzs7OztBQUdsQzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztHQXlCRztBQU9ILE1BQU0sT0FBTyxtQkFBbUI7SUFDOUIsWUFBeUMsSUFBMEI7UUFBMUIsU0FBSSxHQUFKLElBQUksQ0FBc0I7UUFFbkU7OztXQUdHO1FBQ00sWUFBTyxHQUFXLFFBQVEsQ0FBQyxpQkFBaUIsQ0FBQyxDQUFDO1FBVXZELDZFQUE2RTtRQUU3RSxpQkFBWSxHQUFxQyxDQUFDLENBQUM7UUFFbkQsaUZBQWlGO1FBRWpGLFlBQU8sR0FBZ0MsT0FBTyxDQUFDO1FBRy9DLFlBQU8sR0FBMEIsUUFBUSxDQUFDO1FBRTFDLDJFQUEyRTtRQUUzRSxZQUFPLEdBQVksS0FBSyxDQUFDO1FBRXpCLDRFQUE0RTtRQUU1RSxVQUFLLEdBQThCLE9BQU8sQ0FBQztJQWpDMkIsQ0FBQztJQTBDdkU7Ozs7T0FJRztJQUNILFdBQVcsQ0FBQyxPQUFzQjtRQUNoQyxJQUFJLE9BQU8sQ0FBQyxTQUFTLENBQUMsRUFBRTtZQUN0QixJQUFJLElBQUksQ0FBQyxPQUFPLEVBQUUsSUFBSSxFQUFFLEVBQUU7Z0JBQ3hCLElBQUksQ0FBQyxJQUFJLEVBQUUsVUFBVSxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsQ0FBQzthQUNyQztpQkFBTTtnQkFDTCxJQUFJLENBQUMsSUFBSSxFQUFFLFlBQVksQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLENBQUM7YUFDdkM7U0FDRjtJQUNILENBQUM7SUFFRCxnRkFBZ0Y7SUFDaEYsV0FBVztRQUNULElBQUksQ0FBQyxJQUFJLEVBQUUsWUFBWSxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsQ0FBQztJQUN4QyxDQUFDO0lBRUQsSUFDSSxPQUFPO1FBQ1QsT0FBTyxNQUFNLENBQUMsT0FBTyxDQUFDO1lBQ3BCLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxFQUFFLElBQUk7WUFDcEIsQ0FBQyxXQUFXLElBQUksQ0FBQyxPQUFPLEVBQUUsQ0FBQyxFQUFFLElBQUk7WUFDakMsQ0FBQyxTQUFTLElBQUksQ0FBQyxLQUFLLEVBQUUsQ0FBQyxFQUFFLElBQUk7WUFDN0IsT0FBTyxFQUFFLElBQUksQ0FBQyxPQUFPO1NBQ3RCLENBQUM7YUFDQyxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDO2FBQ3JCLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUMsQ0FBQzthQUNmLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQztJQUNmLENBQUM7SUFFRDs7O09BR0c7SUFDSCxJQUFJLFVBQVU7UUFDWixPQUFPLElBQUksQ0FBQyxLQUFLLElBQUksSUFBSTtZQUN2QixDQUFDLENBQUMsRUFBRTtZQUNKLENBQUMsQ0FBQztnQkFDRSxPQUFPLEVBQUUsYUFBYTtnQkFDdEIsb0JBQW9CLEVBQUUsVUFBVTtnQkFDaEMsb0JBQW9CLEVBQUUsR0FBRyxJQUFJLENBQUMsS0FBSyxFQUFFO2dCQUNyQyxRQUFRLEVBQUUsUUFBUTthQUNuQixDQUFDO0lBQ1IsQ0FBQzs7aUhBekZVLG1CQUFtQjtxR0FBbkIsbUJBQW1CLG1UQzdDaEMsK3pCQWtCQTs0RkQyQmEsbUJBQW1CO2tCQU4vQixTQUFTOytCQUNFLGlCQUFpQixtQkFHVix1QkFBdUIsQ0FBQyxNQUFNOzswQkFHbEMsUUFBUTs0Q0FVckIsT0FBTztzQkFETixLQUFLO2dCQUtOLFVBQVU7c0JBRFQsS0FBSztnQkFLTixZQUFZO3NCQURYLEtBQUs7Z0JBS04sT0FBTztzQkFETixLQUFLO2dCQUlOLE9BQU87c0JBRE4sS0FBSztnQkFLTixPQUFPO3NCQUROLEtBQUs7Z0JBS04sS0FBSztzQkFESixLQUFLO2dCQVFOLEtBQUs7c0JBREosS0FBSztnQkF3QkYsT0FBTztzQkFEVixXQUFXO3VCQUFDLE9BQU87O0FBNkJ0QixXQUFpQixtQkFBbUI7SUFDckIsNEJBQVEsR0FBRyxDQUFDLE9BQU8sRUFBRSxRQUFRLENBQVUsQ0FBQztJQUd4QyxpQ0FBYSxHQUFHLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLENBQVUsQ0FBQztJQUc1QywwQkFBTSxHQUFHLENBQUMsT0FBTyxFQUFFLFFBQVEsQ0FBVSxDQUFDO0FBRXJELENBQUMsRUFUZ0IsbUJBQW1CLEtBQW5CLG1CQUFtQixRQVNuQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7XG4gIENoYW5nZURldGVjdGlvblN0cmF0ZWd5LFxuICBDb21wb25lbnQsXG4gIEhvc3RCaW5kaW5nLFxuICBJbnB1dCxcbiAgT25DaGFuZ2VzLFxuICBPbkRlc3Ryb3ksXG4gIE9wdGlvbmFsLFxuICBTaW1wbGVDaGFuZ2VzLFxufSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IHVuaXF1ZUlkIH0gZnJvbSAnbG9kYXNoJztcbmltcG9ydCB7IENhcmRDb21wb25lbnQgfSBmcm9tICcuL2NhcmQuY29tcG9uZW50JztcblxuLyoqXG4gKiBUb3Agcm93IG9mIGEgYHJpdi1jYXJkYDogaGVhZGluZyB0ZXh0IHBsdXMgb3B0aW9uYWwgYWRvcm5tZW50cy5cbiAqXG4gKiBUaHJlZSBwcm9qZWN0aW9uIHNsb3RzLCBhbGwgb3B0aW9uYWw6XG4gKiAtIGBbbGVhZGluZ11gIOKAlCBpY29uLCBhdmF0YXIsIG9yIHN0YXR1cyBkb3Qgc2hvd24gYmVmb3JlIHRoZSBoZWFkaW5nXG4gKiAtIGRlZmF1bHQg4oCUIGxhaWQgb3V0IG9uIHRoZSBoZWFkaW5nJ3MgYmFzZWxpbmUsIHNvIHN0YXR1cyBiYWRnZXMgc2l0IGJlc2lkZVxuICogICB0aGUgdGl0bGUgYW5kIHdyYXAgYmVsb3cgaXQgd2hlbiBzcGFjZSBydW5zIG91dC4gQWxzbyB0YWtlcyBhIHdob2xlIGN1c3RvbVxuICogICB0aXRsZSAoYW4gaW5saW5lIHJlbmFtZSBmaWVsZCwgc2F5KSB3aGVuIGBoZWFkaW5nYCBpcyBsZWZ0IHVuc2V0O1xuICogICBgc3ViaGVhZGluZ2Agc3RpbGwgcmVuZGVycyBiZWxvdyBlaXRoZXIgd2F5LlxuICogLSBgW2FjdGlvbnNdYCDigJQgdHJhaWxpbmcgY29udHJvbHMgc3VjaCBhcyBgcml2LW1lbnVgXG4gKlxuICogYGBgaHRtbFxuICogPHJpdi1jYXJkLWhlYWRlciBbaGVhZGluZ109XCInQ29tbWVyY2lhbCAyMDI1J1wiIFtzdWJoZWFkaW5nXT1cIidBZXRuYSdcIj5cbiAqICAgPHJpdi1pY29uIGxlYWRpbmcgW25hbWVdPVwiJ0ZpbGVUZXh0J1wiPjwvcml2LWljb24+XG4gKiAgIDxyaXYtYmFkZ2UgW3NpemVdPVwiJ3NtYWxsJ1wiIFt2YXJpYW50XT1cIidjYXRlZ29yaWNhbC04J1wiPkRyYWZ0PC9yaXYtYmFkZ2U+XG4gKiAgIDxyaXYtbWVudSBhY3Rpb25zPi4uLjwvcml2LW1lbnU+XG4gKiA8L3Jpdi1jYXJkLWhlYWRlcj5cbiAqIGBgYFxuICpcbiAqIGBoZWFkaW5nTGV2ZWxgIHJlbmRlcnMgYSByZWFsIGBoMWDigJNgaDZgIHNvIHRoZSBjYXJkIGZpdHMgdGhlIHBhZ2UncyBoZWFkaW5nXG4gKiBvdXRsaW5lOyBwaWNrIHRoZSBsZXZlbCB0aGF0IGZvbGxvd3MgdGhlIHN1cnJvdW5kaW5nIGNvbnRlbnQgcmF0aGVyIHRoYW4gdGhlXG4gKiBvbmUgdGhhdCBsb29rcyByaWdodCwgc2luY2Ugc2l6ZSBjb21lcyBmcm9tIHRoZSBkZXNpZ24gdG9rZW5zIGVpdGhlciB3YXkuXG4gKlxuICogVGhlIGhlYWRpbmcgZm9udCBjYW4gYmUgb3ZlcnJpZGRlbiBwZXItaW5zdGFuY2Ugd2l0aCB0aGVcbiAqIGAtLWNhcmQtaGVhZGluZy1mb250YCBjdXN0b20gcHJvcGVydHkuXG4gKi9cbkBDb21wb25lbnQoe1xuICBzZWxlY3RvcjogJ3Jpdi1jYXJkLWhlYWRlcicsXG4gIHRlbXBsYXRlVXJsOiAnLi9jYXJkLWhlYWRlci5jb21wb25lbnQuaHRtbCcsXG4gIHN0eWxlVXJsczogWycuL2NhcmQtaGVhZGVyLmNvbXBvbmVudC5jc3MnXSxcbiAgY2hhbmdlRGV0ZWN0aW9uOiBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneS5PblB1c2gsXG59KVxuZXhwb3J0IGNsYXNzIENhcmRIZWFkZXJDb21wb25lbnQgaW1wbGVtZW50cyBPbkNoYW5nZXMsIE9uRGVzdHJveSB7XG4gIGNvbnN0cnVjdG9yKEBPcHRpb25hbCgpIHByaXZhdGUgcmVhZG9ubHkgY2FyZDogQ2FyZENvbXBvbmVudCB8IG51bGwpIHt9XG5cbiAgLyoqXG4gICAqIElkZW50aWZpZXMgdGhlIHRpdGxlIGZvciBhIGNsaWNrYWJsZSBgcml2LWNhcmRgLCB3aGljaCBuYW1lcyBpdHMgY2xpY2tcbiAgICogdGFyZ2V0IGZyb20gdGhlIHRpdGxlIHJhdGhlciB0aGFuIGZyb20gdGhlIGNhcmQncyB3aG9sZSB0ZXh0LlxuICAgKi9cbiAgcmVhZG9ubHkgdGl0bGVJZDogc3RyaW5nID0gdW5pcXVlSWQoJ3Jpdi1jYXJkLXRpdGxlLScpO1xuXG4gIC8qKiBIZWFkaW5nIHRleHQuIE9taXQgd2hlbiBwcm9qZWN0aW5nIGN1c3RvbSBoZWFkaW5nIG1hcmt1cCBpbnN0ZWFkLiAqL1xuICBASW5wdXQoKVxuICBoZWFkaW5nPzogc3RyaW5nO1xuXG4gIC8qKiBTdXBwb3J0aW5nIHRleHQgcmVuZGVyZWQgYmVsb3cgdGhlIGhlYWRpbmcuICovXG4gIEBJbnB1dCgpXG4gIHN1YmhlYWRpbmc/OiBzdHJpbmc7XG5cbiAgLyoqIEhlYWRpbmcgZWxlbWVudCByZW5kZXJlZCBmb3IgYGhlYWRpbmdgLCBmb3IgZG9jdW1lbnQgb3V0bGluZSBwdXJwb3Nlcy4gKi9cbiAgQElucHV0KClcbiAgaGVhZGluZ0xldmVsOiBDYXJkSGVhZGVyQ29tcG9uZW50LkhlYWRpbmdMZXZlbCA9IDM7XG5cbiAgLyoqIGBmaWxsZWRgIGdpdmVzIHRoZSBoZWFkZXIgaXRzIG93biBiYWNrZ3JvdW5kLCBzZXBhcmF0aW5nIGl0IGZyb20gdGhlIGJvZHkuICovXG4gIEBJbnB1dCgpXG4gIHZhcmlhbnQ6IENhcmRIZWFkZXJDb21wb25lbnQuVmFyaWFudCA9ICdwbGFpbic7XG5cbiAgQElucHV0KClcbiAgcGFkZGluZzogQ2FyZENvbXBvbmVudC5QYWRkaW5nID0gJ21lZGl1bSc7XG5cbiAgLyoqIERyYXdzIGEgc2VwYXJhdG9yIGJlbG93IHRoZSBoZWFkZXIuIEltcGxpZWQgYnkgdGhlIGBmaWxsZWRgIHZhcmlhbnQuICovXG4gIEBJbnB1dCgpXG4gIGRpdmlkZXI6IGJvb2xlYW4gPSBmYWxzZTtcblxuICAvKiogQ3Jvc3MtYXhpcyBhbGlnbm1lbnQgb2YgdGhlIGxlYWRpbmcgc2xvdCwgaGVhZGluZyBibG9jaywgYW5kIGFjdGlvbnMuICovXG4gIEBJbnB1dCgpXG4gIGFsaWduOiBDYXJkSGVhZGVyQ29tcG9uZW50LkFsaWduID0gJ3N0YXJ0JztcblxuICAvKipcbiAgICogVHJ1bmNhdGVzIHRoZSBoZWFkaW5nIHRvIHRoaXMgbWFueSBsaW5lcyB3aXRoIGFuIGVsbGlwc2lzLiBMZWF2ZSB1bnNldCB0b1xuICAgKiBsZXQgdGhlIGhlYWRpbmcgd3JhcCBmcmVlbHkuXG4gICAqL1xuICBASW5wdXQoKVxuICBjbGFtcD86IG51bWJlcjtcblxuICAvKipcbiAgICogT2ZmZXJzIHRoZSBoZWFkaW5nIHRvIGFuIGVuY2xvc2luZyBjYXJkIGFzIHRoZSBuYW1lIGZvciBpdHMgY2xpY2sgdGFyZ2V0LlxuICAgKiBPbmx5IGEgdGV4dCBoZWFkaW5nIGlzIG9mZmVyZWQ6IHByb2plY3RlZCB0aXRsZXMgY2FuIGJlIGFueXRoaW5nLCBzbyB0aG9zZVxuICAgKiBjYXJkcyBmYWxsIGJhY2sgdG8gbmFtaW5nIGFnYWluc3QgdGhlaXIgd2hvbGUgY29udGVudC5cbiAgICovXG4gIG5nT25DaGFuZ2VzKGNoYW5nZXM6IFNpbXBsZUNoYW5nZXMpIHtcbiAgICBpZiAoY2hhbmdlc1snaGVhZGluZyddKSB7XG4gICAgICBpZiAodGhpcy5oZWFkaW5nPy50cmltKCkpIHtcbiAgICAgICAgdGhpcy5jYXJkPy5zZXRUaXRsZUlkKHRoaXMudGl0bGVJZCk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0aGlzLmNhcmQ/LmNsZWFyVGl0bGVJZCh0aGlzLnRpdGxlSWQpO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIC8qKiBXaXRoZHJhd3MgdGhlIG9mZmVyLCBzbyB0aGUgY2FyZCBzdG9wcyBuYW1pbmcgaXRzZWxmIGFnYWluc3QgdGhpcyBoZWFkZXIuICovXG4gIG5nT25EZXN0cm95KCkge1xuICAgIHRoaXMuY2FyZD8uY2xlYXJUaXRsZUlkKHRoaXMudGl0bGVJZCk7XG4gIH1cblxuICBASG9zdEJpbmRpbmcoJ2NsYXNzJylcbiAgZ2V0IGNsYXNzZXMoKTogc3RyaW5nIHtcbiAgICByZXR1cm4gT2JqZWN0LmVudHJpZXMoe1xuICAgICAgW3RoaXMudmFyaWFudF06IHRydWUsXG4gICAgICBbYHBhZGRpbmctJHt0aGlzLnBhZGRpbmd9YF06IHRydWUsXG4gICAgICBbYGFsaWduLSR7dGhpcy5hbGlnbn1gXTogdHJ1ZSxcbiAgICAgIGRpdmlkZXI6IHRoaXMuZGl2aWRlcixcbiAgICB9KVxuICAgICAgLmZpbHRlcigoW18sIHZdKSA9PiB2KVxuICAgICAgLm1hcCgoW2tdKSA9PiBrKVxuICAgICAgLmpvaW4oJyAnKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBMaW5lIGNsYW1waW5nIGlzIGFwcGxpZWQgaW5saW5lIHNvIHRoZSBsaW5lIGNvdW50IHN0YXlzIGEgcGxhaW4gaW5wdXRcbiAgICogcmF0aGVyIHRoYW4gYSBmaXhlZCBzZXQgb2YgQ1NTIGNsYXNzZXMuXG4gICAqL1xuICBnZXQgY2xhbXBTdHlsZSgpOiBSZWNvcmQ8c3RyaW5nLCBzdHJpbmc+IHtcbiAgICByZXR1cm4gdGhpcy5jbGFtcCA9PSBudWxsXG4gICAgICA/IHt9XG4gICAgICA6IHtcbiAgICAgICAgICBkaXNwbGF5OiAnLXdlYmtpdC1ib3gnLFxuICAgICAgICAgICctd2Via2l0LWJveC1vcmllbnQnOiAndmVydGljYWwnLFxuICAgICAgICAgICctd2Via2l0LWxpbmUtY2xhbXAnOiBgJHt0aGlzLmNsYW1wfWAsXG4gICAgICAgICAgb3ZlcmZsb3c6ICdoaWRkZW4nLFxuICAgICAgICB9O1xuICB9XG59XG5cbmV4cG9ydCBuYW1lc3BhY2UgQ2FyZEhlYWRlckNvbXBvbmVudCB7XG4gIGV4cG9ydCBjb25zdCBWYXJpYW50cyA9IFsncGxhaW4nLCAnZmlsbGVkJ10gYXMgY29uc3Q7XG4gIGV4cG9ydCB0eXBlIFZhcmlhbnQgPSAodHlwZW9mIFZhcmlhbnRzKVtudW1iZXJdO1xuXG4gIGV4cG9ydCBjb25zdCBIZWFkaW5nTGV2ZWxzID0gWzEsIDIsIDMsIDQsIDUsIDZdIGFzIGNvbnN0O1xuICBleHBvcnQgdHlwZSBIZWFkaW5nTGV2ZWwgPSAodHlwZW9mIEhlYWRpbmdMZXZlbHMpW251bWJlcl07XG5cbiAgZXhwb3J0IGNvbnN0IEFsaWducyA9IFsnc3RhcnQnLCAnY2VudGVyJ10gYXMgY29uc3Q7XG4gIGV4cG9ydCB0eXBlIEFsaWduID0gKHR5cGVvZiBBbGlnbnMpW251bWJlcl07XG59XG4iLCI8ZGl2IGNsYXNzPVwibGVhZGluZ1wiPjxuZy1jb250ZW50IHNlbGVjdD1cIltsZWFkaW5nXVwiPjwvbmctY29udGVudD48L2Rpdj5cbjxkaXYgY2xhc3M9XCJtYWluXCI+XG4gIDxkaXYgY2xhc3M9XCJ0aXRsZS1yb3dcIiBbaWRdPVwidGl0bGVJZFwiPlxuICAgIDxkaXYgKm5nSWY9XCJoZWFkaW5nPy50cmltKClcIiBjbGFzcz1cImhlYWRpbmdcIiBbbmdTdHlsZV09XCJjbGFtcFN0eWxlXCI+XG4gICAgICA8bmctY29udGFpbmVyIFtuZ1N3aXRjaF09XCJoZWFkaW5nTGV2ZWxcIj5cbiAgICAgICAgPGgxICpuZ1N3aXRjaENhc2U9XCIxXCI+e3sgaGVhZGluZyB9fTwvaDE+XG4gICAgICAgIDxoMiAqbmdTd2l0Y2hDYXNlPVwiMlwiPnt7IGhlYWRpbmcgfX08L2gyPlxuICAgICAgICA8aDMgKm5nU3dpdGNoQ2FzZT1cIjNcIj57eyBoZWFkaW5nIH19PC9oMz5cbiAgICAgICAgPGg0ICpuZ1N3aXRjaENhc2U9XCI0XCI+e3sgaGVhZGluZyB9fTwvaDQ+XG4gICAgICAgIDxoNSAqbmdTd2l0Y2hDYXNlPVwiNVwiPnt7IGhlYWRpbmcgfX08L2g1PlxuICAgICAgICA8aDYgKm5nU3dpdGNoQ2FzZT1cIjZcIj57eyBoZWFkaW5nIH19PC9oNj5cbiAgICAgIDwvbmctY29udGFpbmVyPlxuICAgIDwvZGl2PlxuICAgIDxuZy1jb250ZW50PjwvbmctY29udGVudD5cbiAgPC9kaXY+XG4gIDxkaXYgKm5nSWY9XCJzdWJoZWFkaW5nPy50cmltKClcIiBjbGFzcz1cInN1YmhlYWRpbmdcIj57eyBzdWJoZWFkaW5nIH19PC9kaXY+XG48L2Rpdj5cbjxkaXYgY2xhc3M9XCJhY3Rpb25zXCI+PG5nLWNvbnRlbnQgc2VsZWN0PVwiW2FjdGlvbnNdXCI+PC9uZy1jb250ZW50PjwvZGl2PlxuIl19
|
|
201
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2FyZC1oZWFkZXIuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvcml2L3NyYy9saWIvbGF5b3V0L2NhcmQvY2FyZC1oZWFkZXIuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvcml2L3NyYy9saWIvbGF5b3V0L2NhcmQvY2FyZC1oZWFkZXIuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUNMLHVCQUF1QixFQUN2QixTQUFTLEVBQ1QsWUFBWSxFQUNaLFdBQVcsRUFDWCxLQUFLLEVBR0wsUUFBUSxFQUNSLE1BQU0sR0FFUCxNQUFNLGVBQWUsQ0FBQztBQUN2QixPQUFPLEVBQUUsUUFBUSxFQUFFLE1BQU0sUUFBUSxDQUFDOzs7OztBQUdsQzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7R0FrREc7QUFPSCxNQUFNLE9BQU8sbUJBQW1CO0lBQzlCLFlBQXlDLElBQTBCO1FBQTFCLFNBQUksR0FBSixJQUFJLENBQXNCO1FBRW5FOzs7V0FHRztRQUNNLFlBQU8sR0FBVyxRQUFRLENBQUMsaUJBQWlCLENBQUMsQ0FBQztRQUV2RDs7O1dBR0c7UUFDTSxhQUFRLEdBQVcsUUFBUSxDQUFDLGtCQUFrQixDQUFDLENBQUM7UUFVekQsNkVBQTZFO1FBRTdFLGlCQUFZLEdBQXFDLENBQUMsQ0FBQztRQUVuRCxpRkFBaUY7UUFFakYsWUFBTyxHQUFnQyxPQUFPLENBQUM7UUFHL0MsWUFBTyxHQUEwQixRQUFRLENBQUM7UUFFMUMsMkVBQTJFO1FBRTNFLFlBQU8sR0FBWSxLQUFLLENBQUM7UUFFekIsNEVBQTRFO1FBRTVFLFVBQUssR0FBOEIsT0FBTyxDQUFDO1FBUzNDLGdFQUFnRTtRQUVoRSxlQUFVLEdBQVksS0FBSyxDQUFDO1FBRTVCLHdFQUF3RTtRQUV4RSxhQUFRLEdBQVksS0FB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S0FBSztnQkFLTixLQUFLO3NCQURKLEtBQUs7Z0JBUU4sS0FBSztzQkFESixLQUFLO2dCQUtOLFVBQVU7c0JBRFQsS0FBSztnQkFLTixRQUFRO3NCQURQLEtBQUs7Z0JBS04sY0FBYztzQkFEYixLQUFLO2dCQVNOLFFBQVE7c0JBRFAsS0FBSztnQkFLTixjQUFjO3NCQURiLE1BQU07Z0JBeUNILE9BQU87c0JBRFYsV0FBVzt1QkFBQyxPQUFPOztBQThCdEIsV0FBaUIsbUJBQW1CO0lBQ3JCLDRCQUFRLEdBQUcsQ0FBQyxPQUFPLEVBQUUsUUFBUSxDQUFVLENBQUM7SUFHeEMsaUNBQWEsR0FBRyxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFVLENBQUM7SUFHNUMsMEJBQU0sR0FBRyxDQUFDLE9BQU8sRUFBRSxRQUFRLENBQVUsQ0FBQztJQUd0QyxtQ0FBZSxHQUFHLENBQUMsU0FBUyxFQUFFLFVBQVUsQ0FBVSxDQUFDO0FBRWxFLENBQUMsRUFaZ0IsbUJBQW1CLEtBQW5CLG1CQUFtQixRQVluQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7XG4gIENoYW5nZURldGVjdGlvblN0cmF0ZWd5LFxuICBDb21wb25lbnQsXG4gIEV2ZW50RW1pdHRlcixcbiAgSG9zdEJpbmRpbmcsXG4gIElucHV0LFxuICBPbkNoYW5nZXMsXG4gIE9uRGVzdHJveSxcbiAgT3B0aW9uYWwsXG4gIE91dHB1dCxcbiAgU2ltcGxlQ2hhbmdlcyxcbn0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyB1bmlxdWVJZCB9IGZyb20gJ2xvZGFzaCc7XG5pbXBvcnQgeyBDYXJkQ29tcG9uZW50IH0gZnJvbSAnLi9jYXJkLmNvbXBvbmVudCc7XG5cbi8qKlxuICogVG9wIHJvdyBvZiBhIGByaXYtY2FyZGA6IGhlYWRpbmcgdGV4dCBwbHVzIG9wdGlvbmFsIGFkb3JubWVudHMuXG4gKlxuICogVGhyZWUgcHJvamVjdGlvbiBzbG90cywgYWxsIG9wdGlvbmFsOlxuICogLSBgW2xlYWRpbmddYCDigJQgaWNvbiwgYXZhdGFyLCBvciBzdGF0dXMgZG90IHNob3duIGJlZm9yZSB0aGUgaGVhZGluZ1xuICogLSBkZWZhdWx0IOKAlCBsYWlkIG91dCBvbiB0aGUgaGVhZGluZydzIGJhc2VsaW5lLCBzbyBzdGF0dXMgYmFkZ2VzIHNpdCBiZXNpZGVcbiAqICAgdGhlIHRpdGxlIGFuZCB3cmFwIGJlbG93IGl0IHdoZW4gc3BhY2UgcnVucyBvdXQuIEFsc28gdGFrZXMgYSB3aG9sZSBjdXN0b21cbiAqICAgdGl0bGUgKGFuIGlubGluZSByZW5hbWUgZmllbGQsIHNheSkgd2hlbiBgaGVhZGluZ2AgaXMgbGVmdCB1bnNldDtcbiAqICAgYHN1YmhlYWRpbmdgIHN0aWxsIHJlbmRlcnMgYmVsb3cgZWl0aGVyIHdheS5cbiAqIC0gYFthY3Rpb25zXWAg4oCUIHRyYWlsaW5nIGNvbnRyb2xzIHN1Y2ggYXMgYHJpdi1tZW51YFxuICpcbiAqIGBgYGh0bWxcbiAqIDxyaXYtY2FyZC1oZWFkZXIgW2hlYWRpbmddPVwiJ0NvbW1lcmNpYWwgMjAyNSdcIiBbc3ViaGVhZGluZ109XCInQWV0bmEnXCI+XG4gKiAgIDxyaXYtaWNvbiBsZWFkaW5nIFtuYW1lXT1cIidGaWxlVGV4dCdcIj48L3Jpdi1pY29uPlxuICogICA8cml2LWJhZGdlIFtzaXplXT1cIidzbWFsbCdcIiBbdmFyaWFudF09XCInY2F0ZWdvcmljYWwtOCdcIj5EcmFmdDwvcml2LWJhZGdlPlxuICogICA8cml2LW1lbnUgYWN0aW9ucz4uLi48L3Jpdi1tZW51PlxuICogPC9yaXYtY2FyZC1oZWFkZXI+XG4gKiBgYGBcbiAqXG4gKiBgaGVhZGluZ0xldmVsYCByZW5kZXJzIGEgcmVhbCBgaDFg4oCTYGg2YCBzbyB0aGUgY2FyZCBmaXRzIHRoZSBwYWdlJ3MgaGVhZGluZ1xuICogb3V0bGluZTsgcGljayB0aGUgbGV2ZWwgdGhhdCBmb2xsb3dzIHRoZSBzdXJyb3VuZGluZyBjb250ZW50IHJhdGhlciB0aGFuIHRoZVxuICogb25lIHRoYXQgbG9va3MgcmlnaHQsIHNpbmNlIHNpemUgY29tZXMgZnJvbSB0aGUgZGVzaWduIHRva2VucyBlaXRoZXIgd2F5LlxuICpcbiAqIFRoZSBoZWFkaW5nIGZvbnQgYW5kIGNvbG91ciBjYW4gYmUgb3ZlcnJpZGRlbiBwZXItaW5zdGFuY2Ugd2l0aCB0aGVcbiAqIGAtLWNhcmQtaGVhZGluZy1mb250YCBhbmQgYC0tY2FyZC1oZWFkaW5nLWNvbG9yYCBjdXN0b20gcHJvcGVydGllcy5cbiAqXG4gKiAjIyBFeHBhbmRpbmcgYW5kIGNvbGxhcHNpbmdcbiAqXG4gKiBgZXhwYW5kYWJsZWAgdHVybnMgdGhlIGhlYWRlciBpbnRvIHRoZSB0b2dnbGUgZm9yIHRoZSBjYXJkJ3MgYm9keTogaXQgcmVuZGVyc1xuICogYSBjaGV2cm9uIGFuZCBjb3ZlcnMgdGhlIHJvdyB3aXRoIGEgcmVhbCBgPGJ1dHRvbj5gIGNhcnJ5aW5nIGBhcmlhLWV4cGFuZGVkYFxuICogYW5kIGBhcmlhLWNvbnRyb2xzYCwgc28gdGhlIHBhdHRlcm4gaXMga2V5Ym9hcmQgb3BlcmFibGUgYW5kIGFubm91bmNlcyBpdHNcbiAqIHN0YXRlLiBDb250cm9scyBpbiBgW2FjdGlvbnNdYCBzaXQgYWJvdmUgdGhhdCBidXR0b24gYW5kIHN0YXkgaW5kZXBlbmRlbnRseVxuICogY2xpY2thYmxlLCBzbyBhIG1lbnUgYmVzaWRlIHRoZSB0b2dnbGUgbmVlZHMgbm8gYHN0b3BQcm9wYWdhdGlvbmAuXG4gKlxuICogVGhlIGhlYWRlciBob2xkcyBubyBzdGF0ZSBvZiBpdHMgb3duIOKAlCBiaW5kIGBleHBhbmRlZGAgYW5kIGFjdCBvblxuICogYGV4cGFuZGVkQ2hhbmdlYCwgb3IgdXNlIGBbKGV4cGFuZGVkKV1gOlxuICpcbiAqIGBgYGh0bWxcbiAqIDxyaXYtY2FyZD5cbiAqICAgPHJpdi1jYXJkLWhlYWRlclxuICogICAgIFtoZWFkaW5nXT1cIidQYXRpZW50IGluZm8nXCJcbiAqICAgICBbZXhwYW5kYWJsZV09XCJ0cnVlXCJcbiAqICAgICBbKGV4cGFuZGVkKV09XCJvcGVuXCJcbiAqICAgPjwvcml2LWNhcmQtaGVhZGVyPlxuICogICA8cml2LWNhcmQtY29udGVudCAqbmdJZj1cIm9wZW5cIj4uLi48L3Jpdi1jYXJkLWNvbnRlbnQ+XG4gKiA8L3Jpdi1jYXJkPlxuICogYGBgXG4gKlxuICogVGhlIHRvZ2dsZSBpcyBuYW1lZCBieSB0aGUgaGVhZGVyJ3MgdGl0bGUsIHNvIGFuIGV4cGFuZGFibGUgaGVhZGVyIG5lZWRzIGFcbiAqIGBoZWFkaW5nYCBvciBhIHByb2plY3RlZCB0aXRsZS5cbiAqL1xuQENvbXBvbmVudCh7XG4gIHNlbGVjdG9yOiAncml2LWNhcmQtaGVhZGVyJyxcbiAgdGVtcGxhdGVVcmw6ICcuL2NhcmQtaGVhZGVyLmNvbXBvbmVudC5odG1sJyxcbiAgc3R5bGVVcmxzOiBbJy4vY2FyZC1oZWFkZXIuY29tcG9uZW50LmNzcyddLFxuICBjaGFuZ2VEZXRlY3Rpb246IENoYW5nZURldGVjdGlvblN0cmF0ZWd5Lk9uUHVzaCxcbn0pXG5leHBvcnQgY2xhc3MgQ2FyZEhlYWRlckNvbXBvbmVudCBpbXBsZW1lbnRzIE9uQ2hhbmdlcywgT25EZXN0cm95IHtcbiAgY29uc3RydWN0b3IoQE9wdGlvbmFsKCkgcHJpdmF0ZSByZWFkb25seSBjYXJkOiBDYXJkQ29tcG9uZW50IHwgbnVsbCkge31cblxuICAvKipcbiAgICogSWRlbnRpZmllcyB0aGUgdGl0bGUgZm9yIGEgY2xpY2thYmxlIGByaXYtY2FyZGAsIHdoaWNoIG5hbWVzIGl0cyBjbGlja1xuICAgKiB0YXJnZXQgZnJvbSB0aGUgdGl0bGUgcmF0aGVyIHRoYW4gZnJvbSB0aGUgY2FyZCdzIHdob2xlIHRleHQuXG4gICAqL1xuICByZWFkb25seSB0aXRsZUlkOiBzdHJpbmcgPSB1bmlxdWVJZCgncml2LWNhcmQtdGl0bGUtJyk7XG5cbiAgLyoqXG4gICAqIE5hbWVzIHRoZSBib2R5IHRoZSB0b2dnbGUgY29udHJvbHMuIEhhbmRlZCB0byB0aGUgZW5jbG9zaW5nIGNhcmQsIHdoaWNoXG4gICAqIHJlbGF5cyBpdCB0byB0aGUgcHJvamVjdGVkIGByaXYtY2FyZC1jb250ZW50YC5cbiAgICovXG4gIHJlYWRvbmx5IHJlZ2lvbklkOiBzdHJpbmcgPSB1bmlxdWVJZCgncml2LWNhcmQtcmVnaW9uLScpO1xuXG4gIC8qKiBIZWFkaW5nIHRleHQuIE9taXQgd2hlbiBwcm9qZWN0aW5nIGN1c3RvbSBoZWFkaW5nIG1hcmt1cCBpbnN0ZWFkLiAqL1xuICBASW5wdXQoKVxuICBoZWFkaW5nPzogc3RyaW5nO1xuXG4gIC8qKiBTdXBwb3J0aW5nIHRleHQgcmVuZGVyZWQgYmVsb3cgdGhlIGhlYWRpbmcuICovXG4gIEBJbnB1dCgpXG4gIHN1YmhlYWRpbmc/OiBzdHJpbmc7XG5cbiAgLyoqIEhlYWRpbmcgZWxlbWVudCByZW5kZXJlZCBmb3IgYGhlYWRpbmdgLCBmb3IgZG9jdW1lbnQgb3V0bGluZSBwdXJwb3Nlcy4gKi9cbiAgQElucHV0KClcbiAgaGVhZGluZ0xldmVsOiBDYXJkSGVhZGVyQ29tcG9uZW50LkhlYWRpbmdMZXZlbCA9IDM7XG5cbiAgLyoqIGBmaWxsZWRgIGdpdmVzIHRoZSBoZWFkZXIgaXRzIG93biBiYWNrZ3JvdW5kLCBzZXBhcmF0aW5nIGl0IGZyb20gdGhlIGJvZHkuICovXG4gIEBJbnB1dCgpXG4gIHZhcmlhbnQ6IENhcmRIZWFkZXJDb21wb25lbnQuVmFyaWFudCA9ICdwbGFpbic7XG5cbiAgQElucHV0KClcbiAgcGFkZGluZzogQ2FyZENvbXBvbmVudC5QYWRkaW5nID0gJ21lZGl1bSc7XG5cbiAgLyoqIERyYXdzIGEgc2VwYXJhdG9yIGJlbG93IHRoZSBoZWFkZXIuIEltcGxpZWQgYnkgdGhlIGBmaWxsZWRgIHZhcmlhbnQuICovXG4gIEBJbnB1dCgpXG4gIGRpdmlkZXI6IGJvb2xlYW4gPSBmYWxzZTtcblxuICAvKiogQ3Jvc3MtYXhpcyBhbGlnbm1lbnQgb2YgdGhlIGxlYWRpbmcgc2xvdCwgaGVhZGluZyBibG9jaywgYW5kIGFjdGlvbnMuICovXG4gIEBJbnB1dCgpXG4gIGFsaWduOiBDYXJkSGVhZGVyQ29tcG9uZW50LkFsaWduID0gJ3N0YXJ0JztcblxuICAvKipcbiAgICogVHJ1bmNhdGVzIHRoZSBoZWFkaW5nIHRvIHRoaXMgbWFueSBsaW5lcyB3aXRoIGFuIGVsbGlwc2lzLiBMZWF2ZSB1bnNldCB0b1xuICAgKiBsZXQgdGhlIGhlYWRpbmcgd3JhcCBmcmVlbHkuXG4gICAqL1xuICBASW5wdXQoKVxuICBjbGFtcD86IG51bWJlcjtcblxuICAvKiogVHVybnMgdGhlIGhlYWRlciByb3cgaW50byB0aGUgdG9nZ2xlIGZvciB0aGUgY2FyZCdzIGJvZHkuICovXG4gIEBJbnB1dCgpXG4gIGV4cGFuZGFibGU6IGJvb2xlYW4gPSBmYWxzZTtcblxuICAvKiogV2hldGhlciB0aGUgYm9keSBpcyBjdXJyZW50bHkgb3Blbi4gVGhlIGNvbnN1bWVyIG93bnMgdGhpcyBzdGF0ZS4gKi9cbiAgQElucHV0KClcbiAgZXhwYW5kZWQ6IGJvb2xlYW4gPSBmYWxzZTtcblxuICAvKiogU2lkZSBvZiB0aGUgaGVhZGVyIHRoZSBjaGV2cm9uIHNpdHMgb24uICovXG4gIEBJbnB1dCgpXG4gIHRvZ2dsZVBvc2l0aW9uOiBDYXJkSGVhZGVyQ29tcG9uZW50LlRvZ2dsZVBvc2l0aW9uID0gJ3RyYWlsaW5nJztcblxuICAvKipcbiAgICogQmxvY2tzIHRoZSB0b2dnbGUsIGZvciBhIHNlY3Rpb24gdGhhdCBpcyBub3QgeWV0IGF2YWlsYWJsZSB0byBvcGVuLiBTZXQgaXRcbiAgICogYWxvbmdzaWRlIGEgZGlzYWJsZWQgYHJpdi1jYXJkYCwgd2hvc2Ugb3duIGBkaXNhYmxlZGAgbXV0ZXMgdGhlIHN1cmZhY2UgYnV0XG4gICAqIGRvZXMgbm90IHJlYWNoIHRoZSBoZWFkZXIncyBjb250cm9scy5cbiAgICovXG4gIEBJbnB1dCgpXG4gIGRpc2FibGVkOiBib29sZWFuID0gZmFsc2U7XG5cbiAgLyoqIEVtaXR0ZWQgd2l0aCB0aGUgc3RhdGUgdGhlIGNvbnN1bWVyIGlzIGJlaW5nIGFza2VkIHRvIG1vdmUgdG8uICovXG4gIEBPdXRwdXQoKVxuICBleHBhbmRlZENoYW5nZSA9IG5ldyBFdmVudEVtaXR0ZXI8Ym9vbGVhbj4oKTtcblxuICAvKipcbiAgICogT2ZmZXJzIHRoZSBoZWFkaW5nIHRvIGFuIGVuY2xvc2luZyBjYXJkIGFzIHRoZSBuYW1lIGZvciBpdHMgY2xpY2sgdGFyZ2V0LFxuICAgKiBhbmQgdGhlIHRvZ2dsZSdzIHJlZ2lvbiBzbyBhIHByb2plY3RlZCBgcml2LWNhcmQtY29udGVudGAgY2FuIHdlYXIgaXQuIE9ubHlcbiAgICogYSB0ZXh0IGhlYWRpbmcgaXMgb2ZmZXJlZDogcHJvamVjdGVkIHRpdGxlcyBjYW4gYmUgYW55dGhpbmcsIHNvIHRob3NlIGNhcmRzXG4gICAqIGZhbGwgYmFjayB0byBuYW1pbmcgYWdhaW5zdCB0aGVpciB3aG9sZSBjb250ZW50LlxuICAgKi9cbiAgbmdPbkNoYW5nZXMoY2hhbmdlczogU2ltcGxlQ2hhbmdlcykge1xuICAgIGlmIChjaGFuZ2VzWydoZWFkaW5nJ10pIHtcbiAgICAgIGlmICh0aGlzLmhlYWRpbmc/LnRyaW0oKSkge1xuICAgICAgICB0aGlzLmNhcmQ/LnNldFRpdGxlSWQodGhpcy50aXRsZUlkKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHRoaXMuY2FyZD8uY2xlYXJUaXRsZUlkKHRoaXMudGl0bGVJZCk7XG4gICAgICB9XG4gICAgfVxuICAgIGlmIChjaGFuZ2VzWydleHBhbmRhYmxlJ10pIHtcbiAgICAgIGlmICh0aGlzLmV4cGFuZGFibGUpIHtcbiAgICAgICAgdGhpcy5jYXJkPy5zZXRSZWdpb25JZCh0aGlzLnJlZ2lvbklkKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHRoaXMuY2FyZD8uY2xlYXJSZWdpb25JZCh0aGlzLnJlZ2lvbklkKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICAvKiogV2l0aGRyYXdzIHRoZSBvZmZlciwgc28gdGhlIGNhcmQgc3RvcHMgbmFtaW5nIGl0c2VsZiBhZ2FpbnN0IHRoaXMgaGVhZGVyLiAqL1xuICBuZ09uRGVzdHJveSgpIHtcbiAgICB0aGlzLmNhcmQ/LmNsZWFyVGl0bGVJZCh0aGlzLnRpdGxlSWQpO1xuICAgIHRoaXMuY2FyZD8uY2xlYXJSZWdpb25JZCh0aGlzLnJlZ2lvbklkKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBBc2tzIGZvciB0aGUgb3Bwb3NpdGUgc3RhdGUgcmF0aGVyIHRoYW4gdGFraW5nIGl0LCB3aGljaCBrZWVwcyB0aGUgaGVhZGVyXG4gICAqIGZyZWUgb2Ygc3RhdGUgdGhhdCBjb3VsZCBkcmlmdCBmcm9tIHRoZSBjb25zdW1lcidzLlxuICAgKi9cbiAgcHJvdGVjdGVkIHRvZ2dsZSgpIHtcbiAgICB0aGlzLmV4cGFuZGVkQ2hhbmdlLmVtaXQoIXRoaXMuZXhwYW5kZWQpO1xuICB9XG5cbiAgQEhvc3RCaW5kaW5nKCdjbGFzcycpXG4gIGdldCBjbGFzc2VzKCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIE9iamVjdC5lbnRyaWVzKHtcbiAgICAgIFt0aGlzLnZhcmlhbnRdOiB0cnVlLFxuICAgICAgW2BwYWRkaW5nLSR7dGhpcy5wYWRkaW5nfWBdOiB0cnVlLFxuICAgICAgW2BhbGlnbi0ke3RoaXMuYWxpZ259YF06IHRydWUsXG4gICAgICBkaXZpZGVyOiB0aGlzLmRpdmlkZXIsXG4gICAgICBleHBhbmRhYmxlOiB0aGlzLmV4cGFuZGFibGUsXG4gICAgfSlcbiAgICAgIC5maWx0ZXIoKFtfLCB2XSkgPT4gdilcbiAgICAgIC5tYXAoKFtrXSkgPT4gaylcbiAgICAgIC5qb2luKCcgJyk7XG4gIH1cblxuICAvKipcbiAgICogTGluZSBjbGFtcGluZyBpcyBhcHBsaWVkIGlubGluZSBzbyB0aGUgbGluZSBjb3VudCBzdGF5cyBhIHBsYWluIGlucHV0XG4gICAqIHJhdGhlciB0aGFuIGEgZml4ZWQgc2V0IG9mIENTUyBjbGFzc2VzLlxuICAgKi9cbiAgZ2V0IGNsYW1wU3R5bGUoKTogUmVjb3JkPHN0cmluZywgc3RyaW5nPiB7XG4gICAgcmV0dXJuIHRoaXMuY2xhbXAgPT0gbnVsbFxuICAgICAgPyB7fVxuICAgICAgOiB7XG4gICAgICAgICAgZGlzcGxheTogJy13ZWJraXQtYm94JyxcbiAgICAgICAgICAnLXdlYmtpdC1ib3gtb3JpZW50JzogJ3ZlcnRpY2FsJyxcbiAgICAgICAgICAnLXdlYmtpdC1saW5lLWNsYW1wJzogYCR7dGhpcy5jbGFtcH1gLFxuICAgICAgICAgIG92ZXJmbG93OiAnaGlkZGVuJyxcbiAgICAgICAgfTtcbiAgfVxufVxuXG5leHBvcnQgbmFtZXNwYWNlIENhcmRIZWFkZXJDb21wb25lbnQge1xuICBleHBvcnQgY29uc3QgVmFyaWFudHMgPSBbJ3BsYWluJywgJ2ZpbGxlZCddIGFzIGNvbnN0O1xuICBleHBvcnQgdHlwZSBWYXJpYW50ID0gKHR5cGVvZiBWYXJpYW50cylbbnVtYmVyXTtcblxuICBleHBvcnQgY29uc3QgSGVhZGluZ0xldmVscyA9IFsxLCAyLCAzLCA0LCA1LCA2XSBhcyBjb25zdDtcbiAgZXhwb3J0IHR5cGUgSGVhZGluZ0xldmVsID0gKHR5cGVvZiBIZWFkaW5nTGV2ZWxzKVtudW1iZXJdO1xuXG4gIGV4cG9ydCBjb25zdCBBbGlnbnMgPSBbJ3N0YXJ0JywgJ2NlbnRlciddIGFzIGNvbnN0O1xuICBleHBvcnQgdHlwZSBBbGlnbiA9ICh0eXBlb2YgQWxpZ25zKVtudW1iZXJdO1xuXG4gIGV4cG9ydCBjb25zdCBUb2dnbGVQb3NpdGlvbnMgPSBbJ2xlYWRpbmcnLCAndHJhaWxpbmcnXSBhcyBjb25zdDtcbiAgZXhwb3J0IHR5cGUgVG9nZ2xlUG9zaXRpb24gPSAodHlwZW9mIFRvZ2dsZVBvc2l0aW9ucylbbnVtYmVyXTtcbn1cbiIsIjxidXR0b25cbiAgKm5nSWY9XCJleHBhbmRhYmxlXCJcbiAgdHlwZT1cImJ1dHRvblwiXG4gIGNsYXNzPVwiZXhwYW5kLXRvZ2dsZVwiXG4gIFtkaXNhYmxlZF09XCJkaXNhYmxlZFwiXG4gIFthdHRyLmFyaWEtZXhwYW5kZWRdPVwiZXhwYW5kZWRcIlxuICBbYXR0ci5hcmlhLWNvbnRyb2xzXT1cInJlZ2lvbklkXCJcbiAgW2F0dHIuYXJpYS1sYWJlbGxlZGJ5XT1cInRpdGxlSWRcIlxuICAoY2xpY2spPVwidG9nZ2xlKClcIlxuPjwvYnV0dG9uPlxuPG5nLWNvbnRhaW5lclxuICAqbmdJZj1cImV4cGFuZGFibGUgJiYgdG9nZ2xlUG9zaXRpb24gPT09ICdsZWFkaW5nJ1wiXG4gIFtuZ1RlbXBsYXRlT3V0bGV0XT1cImNoZXZyb25cIlxuPjwvbmctY29udGFpbmVyPlxuPGRpdiBjbGFzcz1cImxlYWRpbmdcIj48bmctY29udGVudCBzZWxlY3Q9XCJbbGVhZGluZ11cIj48L25nLWNvbnRlbnQ+PC9kaXY+XG48ZGl2IGNsYXNzPVwibWFpblwiPlxuICA8ZGl2IGNsYXNzPVwidGl0bGUtcm93XCIgW2lkXT1cInRpdGxlSWRcIj5cbiAgICA8ZGl2ICpuZ0lmPVwiaGVhZGluZz8udHJpbSgpXCIgY2xhc3M9XCJoZWFkaW5nXCIgW25nU3R5bGVdPVwiY2xhbXBTdHlsZVwiPlxuICAgICAgPG5nLWNvbnRhaW5lciBbbmdTd2l0Y2hdPVwiaGVhZGluZ0xldmVsXCI+XG4gICAgICAgIDxoMSAqbmdTd2l0Y2hDYXNlPVwiMVwiPnt7IGhlYWRpbmcgfX08L2gxPlxuICAgICAgICA8aDIgKm5nU3dpdGNoQ2FzZT1cIjJcIj57eyBoZWFkaW5nIH19PC9oMj5cbiAgICAgICAgPGgzICpuZ1N3aXRjaENhc2U9XCIzXCI+e3sgaGVhZGluZyB9fTwvaDM+XG4gICAgICAgIDxoNCAqbmdTd2l0Y2hDYXNlPVwiNFwiPnt7IGhlYWRpbmcgfX08L2g0PlxuICAgICAgICA8aDUgKm5nU3dpdGNoQ2FzZT1cIjVcIj57eyBoZWFkaW5nIH19PC9oNT5cbiAgICAgICAgPGg2ICpuZ1N3aXRjaENhc2U9XCI2XCI+e3sgaGVhZGluZyB9fTwvaDY+XG4gICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICA8L2Rpdj5cbiAgICA8bmctY29udGVudD48L25nLWNvbnRlbnQ+XG4gIDwvZGl2PlxuICA8ZGl2ICpuZ0lmPVwic3ViaGVhZGluZz8udHJpbSgpXCIgY2xhc3M9XCJzdWJoZWFkaW5nXCI+e3sgc3ViaGVhZGluZyB9fTwvZGl2PlxuPC9kaXY+XG48bmctY29udGFpbmVyXG4gICpuZ0lmPVwiZXhwYW5kYWJsZSAmJiB0b2dnbGVQb3NpdGlvbiA9PT0gJ3RyYWlsaW5nJ1wiXG4gIFtuZ1RlbXBsYXRlT3V0bGV0XT1cImNoZXZyb25cIlxuPjwvbmctY29udGFpbmVyPlxuPGRpdiBjbGFzcz1cImFjdGlvbnNcIj48bmctY29udGVudCBzZWxlY3Q9XCJbYWN0aW9uc11cIj48L25nLWNvbnRlbnQ+PC9kaXY+XG5cbjxuZy10ZW1wbGF0ZSAjY2hldnJvbj5cbiAgPHJpdi1pY29uXG4gICAgY2xhc3M9XCJleHBhbmQtY2hldnJvblwiXG4gICAgW2NsYXNzLmV4cGFuZGVkXT1cImV4cGFuZGVkXCJcbiAgICBbbmFtZV09XCInQ2hldnJvbkRvd24nXCJcbiAgICBbc2l6ZV09XCIyMFwiXG4gID48L3Jpdi1pY29uPlxuPC9uZy10ZW1wbGF0ZT5cbiJdfQ==
|
|
@@ -58,6 +58,30 @@ import * as i1 from "@angular/common";
|
|
|
58
58
|
* Selection is separate from `tone`, so it composes with any tint — a selected
|
|
59
59
|
* `danger` card keeps its danger background.
|
|
60
60
|
*
|
|
61
|
+
* ## Making the card expand and collapse
|
|
62
|
+
*
|
|
63
|
+
* Set `expandable` on `riv-card-header` and render the body only while it is
|
|
64
|
+
* open. The header owns the toggle affordance and its accessibility; the
|
|
65
|
+
* consumer owns the state:
|
|
66
|
+
*
|
|
67
|
+
* ```html
|
|
68
|
+
* <riv-card>
|
|
69
|
+
* <riv-card-header
|
|
70
|
+
* [heading]="'Patient info'"
|
|
71
|
+
* [expandable]="true"
|
|
72
|
+
* [(expanded)]="open"
|
|
73
|
+
* ></riv-card-header>
|
|
74
|
+
* <riv-card-content *ngIf="open">...</riv-card-content>
|
|
75
|
+
* </riv-card>
|
|
76
|
+
* ```
|
|
77
|
+
*
|
|
78
|
+
* The card relays the region id from the header to the content, so the toggle's
|
|
79
|
+
* `aria-controls` names the body with no ids wired by hand.
|
|
80
|
+
*
|
|
81
|
+
* Do not combine `expandable` with `clickable`: both claim the same click, and
|
|
82
|
+
* a card that opens as well as expands leaves the user no way to tell which one
|
|
83
|
+
* they are about to get.
|
|
84
|
+
*
|
|
61
85
|
* ## Notes
|
|
62
86
|
*
|
|
63
87
|
* When projecting raw content with no sub-components, set `padding` so the
|
|
@@ -114,6 +138,13 @@ export class CardComponent {
|
|
|
114
138
|
*/
|
|
115
139
|
this.cardId = '';
|
|
116
140
|
}
|
|
141
|
+
/**
|
|
142
|
+
* Id an expandable header's toggle points `aria-controls` at, worn by a
|
|
143
|
+
* projected `riv-card-content`.
|
|
144
|
+
*/
|
|
145
|
+
get regionId() {
|
|
146
|
+
return this.expandRegionId;
|
|
147
|
+
}
|
|
117
148
|
ngOnInit() {
|
|
118
149
|
this.cardId = this.el.nativeElement.id || uniqueId('riv-card-');
|
|
119
150
|
if (!this.el.nativeElement.id) {
|
|
@@ -139,6 +170,24 @@ export class CardComponent {
|
|
|
139
170
|
this.setTitleId(undefined);
|
|
140
171
|
}
|
|
141
172
|
}
|
|
173
|
+
/**
|
|
174
|
+
* Relays the region an expandable header controls to the projected
|
|
175
|
+
* `riv-card-content`, so neither side needs the consumer to wire an id.
|
|
176
|
+
* Called by `riv-card-header`; not part of the public API.
|
|
177
|
+
*/
|
|
178
|
+
setRegionId(id) {
|
|
179
|
+
this.expandRegionId = id;
|
|
180
|
+
this.cdr.markForCheck();
|
|
181
|
+
}
|
|
182
|
+
/**
|
|
183
|
+
* Gives up a region registered by `setRegionId`. Ignores ids that are no
|
|
184
|
+
* longer the one in use.
|
|
185
|
+
*/
|
|
186
|
+
clearRegionId(id) {
|
|
187
|
+
if (this.expandRegionId === id) {
|
|
188
|
+
this.setRegionId(undefined);
|
|
189
|
+
}
|
|
190
|
+
}
|
|
142
191
|
/**
|
|
143
192
|
* Element whose text names the click target, unless `clickLabel` is set. The
|
|
144
193
|
* host id is read from the DOM rather than cached, so a bound `[id]` that
|
|
@@ -170,10 +219,10 @@ export class CardComponent {
|
|
|
170
219
|
}
|
|
171
220
|
}
|
|
172
221
|
CardComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.2.10", ngImport: i0, type: CardComponent, deps: [{ token: i0.ElementRef }, { token: i0.Renderer2 }, { token: i0.ChangeDetectorRef }], target: i0.ɵɵFactoryTarget.Component });
|
|
173
|
-
CardComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "15.2.10", type: CardComponent, selector: "riv-card", inputs: { variant: "variant", surface: "surface", tone: "tone", orientation: "orientation", padding: "padding", clickable: "clickable", clickLabel: "clickLabel", selected: "selected", disabled: "disabled" }, outputs: { cardClick: "cardClick" }, host: { properties: { "attr.aria-current": "this.ariaCurrent", "class": "this.classes" } }, ngImport: i0, template: "<button\n *ngIf=\"clickable\"\n type=\"button\"\n class=\"click-target\"\n [disabled]=\"disabled\"\n [attr.aria-label]=\"clickLabel\"\n [attr.aria-labelledby]=\"labelledBy\"\n (click)=\"cardClick.emit($event)\"\n></button>\n<ng-content></ng-content>\n", styles: [":host{position:relative;display:flex;min-width:0;overflow:hidden;border-radius:var(--card-border-radius, var(--border-radius-medium));color:var(--type-light-high-contrast);font:var(--body-medium)}:host.vertical{flex-direction:column}:host.horizontal{flex-direction:row}:host.outlined{border:var(--border-width) solid var(--border-light-blend)}:host.elevated{box-shadow:var(--depth-1)}:host.surface-0{background-color:var(--surface-light-0)}:host.surface-1{background-color:var(--surface-light-1)}:host.surface-2{background-color:var(--surface-light-2)}:host.tone-danger{background-color:var(--surface-light-danger)}:host.tone-caution{background-color:var(--surface-light-caution)}:host.tone-warning{background-color:var(--surface-light-warning)}:host.tone-safety{background-color:var(--surface-light-safety)}:host.tone-selected{background-color:var(--surface-light-selected)}:host.padding-small{padding:var(--size-small)}:host.padding-medium{padding:var(--size-medium)}:host.padding-large{padding:var(--size-large)}:host.clickable{transition:box-shadow var(--short-transition)}:host.clickable:not(.disabled):hover{box-shadow:var(--depth-1)}:host.elevated.clickable:not(.disabled):hover{box-shadow:var(--depth-2)}.click-target{position:absolute;inset:0;z-index:var(--card-click-target-z-index);padding:0;border:none;background:none;cursor:pointer;transition:background-color var(--short-transition)}.click-target:not(:disabled):hover{background-color:var(--black-20)}.click-target:disabled{cursor:default}.click-target:focus-visible{outline:var(--border-width-large) solid var(--type-light-link);outline-offset:calc(-1 * var(--border-width-large))}:host.selected{border:var(--border-width) solid var(--baloo-50);box-shadow:var(--depth-2)}:host.disabled{background-color:var(--surface-light-1)}:host.outlined.disabled{border-color:var(--border-light)}@media print{:host{break-inside:avoid}}\n"], dependencies: [{ kind: "directive", type: i1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
|
|
222
|
+
CardComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "15.2.10", type: CardComponent, selector: "riv-card", inputs: { variant: "variant", surface: "surface", tone: "tone", orientation: "orientation", padding: "padding", clickable: "clickable", clickLabel: "clickLabel", selected: "selected", disabled: "disabled" }, outputs: { cardClick: "cardClick" }, host: { properties: { "attr.aria-current": "this.ariaCurrent", "class": "this.classes" } }, ngImport: i0, template: "<button\n *ngIf=\"clickable\"\n type=\"button\"\n class=\"click-target\"\n [disabled]=\"disabled\"\n [attr.aria-label]=\"clickLabel\"\n [attr.aria-labelledby]=\"labelledBy\"\n (click)=\"cardClick.emit($event)\"\n></button>\n<ng-content></ng-content>\n", styles: [":host{position:relative;display:flex;min-width:0;overflow:hidden;border-radius:var(--card-border-radius, var(--border-radius-medium));color:var(--type-light-high-contrast);font:var(--body-medium)}:host.vertical{flex-direction:column}:host.horizontal{flex-direction:row}:host.outlined{border:var(--border-width) solid var(--border-light-blend)}:host.dashed{border:var(--border-width) dashed var(--border-light-blend)}:host.elevated{box-shadow:var(--depth-1)}:host.surface-0{background-color:var(--surface-light-0)}:host.surface-1{background-color:var(--surface-light-1)}:host.surface-2{background-color:var(--surface-light-2)}:host.tone-danger{background-color:var(--surface-light-danger)}:host.tone-caution{background-color:var(--surface-light-caution)}:host.tone-warning{background-color:var(--surface-light-warning)}:host.tone-safety{background-color:var(--surface-light-safety)}:host.tone-selected{background-color:var(--surface-light-selected)}:host.padding-small{padding:var(--size-small)}:host.padding-medium{padding:var(--size-medium)}:host.padding-large{padding:var(--size-large)}:host.clickable{transition:box-shadow var(--short-transition)}:host.clickable:not(.disabled):hover{box-shadow:var(--depth-1)}:host.elevated.clickable:not(.disabled):hover{box-shadow:var(--depth-2)}.click-target{position:absolute;inset:0;z-index:var(--card-click-target-z-index);padding:0;border:none;background:none;cursor:pointer;transition:background-color var(--short-transition)}.click-target:not(:disabled):hover{background-color:var(--black-20)}.click-target:disabled{cursor:default}.click-target:focus-visible{outline:var(--border-width-large) solid var(--type-light-link);outline-offset:calc(-1 * var(--border-width-large))}:host.selected{border:var(--border-width) solid var(--baloo-50);box-shadow:var(--depth-2)}:host.disabled{background-color:var(--surface-light-1)}:host.outlined.disabled,:host.dashed.disabled{border-color:var(--border-light)}@media print{:host{break-inside:avoid}}\n"], dependencies: [{ kind: "directive", type: i1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
|
|
174
223
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.10", ngImport: i0, type: CardComponent, decorators: [{
|
|
175
224
|
type: Component,
|
|
176
|
-
args: [{ selector: 'riv-card', changeDetection: ChangeDetectionStrategy.OnPush, template: "<button\n *ngIf=\"clickable\"\n type=\"button\"\n class=\"click-target\"\n [disabled]=\"disabled\"\n [attr.aria-label]=\"clickLabel\"\n [attr.aria-labelledby]=\"labelledBy\"\n (click)=\"cardClick.emit($event)\"\n></button>\n<ng-content></ng-content>\n", styles: [":host{position:relative;display:flex;min-width:0;overflow:hidden;border-radius:var(--card-border-radius, var(--border-radius-medium));color:var(--type-light-high-contrast);font:var(--body-medium)}:host.vertical{flex-direction:column}:host.horizontal{flex-direction:row}:host.outlined{border:var(--border-width) solid var(--border-light-blend)}:host.elevated{box-shadow:var(--depth-1)}:host.surface-0{background-color:var(--surface-light-0)}:host.surface-1{background-color:var(--surface-light-1)}:host.surface-2{background-color:var(--surface-light-2)}:host.tone-danger{background-color:var(--surface-light-danger)}:host.tone-caution{background-color:var(--surface-light-caution)}:host.tone-warning{background-color:var(--surface-light-warning)}:host.tone-safety{background-color:var(--surface-light-safety)}:host.tone-selected{background-color:var(--surface-light-selected)}:host.padding-small{padding:var(--size-small)}:host.padding-medium{padding:var(--size-medium)}:host.padding-large{padding:var(--size-large)}:host.clickable{transition:box-shadow var(--short-transition)}:host.clickable:not(.disabled):hover{box-shadow:var(--depth-1)}:host.elevated.clickable:not(.disabled):hover{box-shadow:var(--depth-2)}.click-target{position:absolute;inset:0;z-index:var(--card-click-target-z-index);padding:0;border:none;background:none;cursor:pointer;transition:background-color var(--short-transition)}.click-target:not(:disabled):hover{background-color:var(--black-20)}.click-target:disabled{cursor:default}.click-target:focus-visible{outline:var(--border-width-large) solid var(--type-light-link);outline-offset:calc(-1 * var(--border-width-large))}:host.selected{border:var(--border-width) solid var(--baloo-50);box-shadow:var(--depth-2)}:host.disabled{background-color:var(--surface-light-1)}:host.outlined.disabled{border-color:var(--border-light)}@media print{:host{break-inside:avoid}}\n"] }]
|
|
225
|
+
args: [{ selector: 'riv-card', changeDetection: ChangeDetectionStrategy.OnPush, template: "<button\n *ngIf=\"clickable\"\n type=\"button\"\n class=\"click-target\"\n [disabled]=\"disabled\"\n [attr.aria-label]=\"clickLabel\"\n [attr.aria-labelledby]=\"labelledBy\"\n (click)=\"cardClick.emit($event)\"\n></button>\n<ng-content></ng-content>\n", styles: [":host{position:relative;display:flex;min-width:0;overflow:hidden;border-radius:var(--card-border-radius, var(--border-radius-medium));color:var(--type-light-high-contrast);font:var(--body-medium)}:host.vertical{flex-direction:column}:host.horizontal{flex-direction:row}:host.outlined{border:var(--border-width) solid var(--border-light-blend)}:host.dashed{border:var(--border-width) dashed var(--border-light-blend)}:host.elevated{box-shadow:var(--depth-1)}:host.surface-0{background-color:var(--surface-light-0)}:host.surface-1{background-color:var(--surface-light-1)}:host.surface-2{background-color:var(--surface-light-2)}:host.tone-danger{background-color:var(--surface-light-danger)}:host.tone-caution{background-color:var(--surface-light-caution)}:host.tone-warning{background-color:var(--surface-light-warning)}:host.tone-safety{background-color:var(--surface-light-safety)}:host.tone-selected{background-color:var(--surface-light-selected)}:host.padding-small{padding:var(--size-small)}:host.padding-medium{padding:var(--size-medium)}:host.padding-large{padding:var(--size-large)}:host.clickable{transition:box-shadow var(--short-transition)}:host.clickable:not(.disabled):hover{box-shadow:var(--depth-1)}:host.elevated.clickable:not(.disabled):hover{box-shadow:var(--depth-2)}.click-target{position:absolute;inset:0;z-index:var(--card-click-target-z-index);padding:0;border:none;background:none;cursor:pointer;transition:background-color var(--short-transition)}.click-target:not(:disabled):hover{background-color:var(--black-20)}.click-target:disabled{cursor:default}.click-target:focus-visible{outline:var(--border-width-large) solid var(--type-light-link);outline-offset:calc(-1 * var(--border-width-large))}:host.selected{border:var(--border-width) solid var(--baloo-50);box-shadow:var(--depth-2)}:host.disabled{background-color:var(--surface-light-1)}:host.outlined.disabled,:host.dashed.disabled{border-color:var(--border-light)}@media print{:host{break-inside:avoid}}\n"] }]
|
|
177
226
|
}], ctorParameters: function () { return [{ type: i0.ElementRef }, { type: i0.Renderer2 }, { type: i0.ChangeDetectorRef }]; }, propDecorators: { variant: [{
|
|
178
227
|
type: Input
|
|
179
228
|
}], surface: [{
|
|
@@ -202,7 +251,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.10", ngImpo
|
|
|
202
251
|
args: ['class']
|
|
203
252
|
}] } });
|
|
204
253
|
(function (CardComponent) {
|
|
205
|
-
CardComponent.Variants = ['outlined', 'elevated', 'flat'];
|
|
254
|
+
CardComponent.Variants = ['outlined', 'elevated', 'flat', 'dashed'];
|
|
206
255
|
CardComponent.Surfaces = ['0', '1', '2'];
|
|
207
256
|
CardComponent.Tones = [
|
|
208
257
|
'neutral',
|
|
@@ -216,4 +265,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.10", ngImpo
|
|
|
216
265
|
/** Shared padding scale for the card and its sub-components. */
|
|
217
266
|
CardComponent.Paddings = ['none', 'small', 'medium', 'large'];
|
|
218
267
|
})(CardComponent || (CardComponent = {}));
|
|
219
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2FyZC5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9yaXYvc3JjL2xpYi9sYXlvdXQvY2FyZC9jYXJkLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL3Jpdi9zcmMvbGliL2xheW91dC9jYXJkL2NhcmQuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUNMLHVCQUF1QixFQUV2QixTQUFTLEVBRVQsWUFBWSxFQUNaLFdBQVcsRUFDWCxLQUFLLEVBRUwsTUFBTSxHQUVQLE1BQU0sZUFBZSxDQUFDO0FBQ3ZCLE9BQU8sRUFBRSxRQUFRLEVBQUUsTUFBTSxRQUFRLENBQUM7OztBQUVsQzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztHQW1FRztBQU9ILE1BQU0sT0FBTyxhQUFhO0lBQ3hCLFlBQ21CLEVBQTJCLEVBQzNCLFFBQW1CLEVBQ25CLEdBQXNCO1FBRnRCLE9BQUUsR0FBRixFQUFFLENBQXlCO1FBQzNCLGFBQVEsR0FBUixRQUFRLENBQVc7UUFDbkIsUUFBRyxHQUFILEdBQUcsQ0FBbUI7UUFHekMsa0RBQWtEO1FBRWxELFlBQU8sR0FBMEIsVUFBVSxDQUFDO1FBRTVDLDZFQUE2RTtRQUU3RSxZQUFPLEdBQTBCLEdBQUcsQ0FBQztRQUVyQyx3RUFBd0U7UUFFeEUsU0FBSSxHQUF1QixTQUFTLENBQUM7UUFFckMsaURBQWlEO1FBRWpELGdCQUFXLEdBQThCLFVBQVUsQ0FBQztRQUVwRDs7OztXQUlHO1FBRUgsWUFBTyxHQUEwQixNQUFNLENBQUM7UUFFeEM7OztXQUdHO1FBRUgsY0FBUyxHQUFZLEtBQUssQ0FBQztRQVUzQjs7OztXQUlHO1FBRUgsYUFBUSxHQUFZLEtBQUssQ0FBQztRQUUxQjs7OztXQUlHO1FBRUgsYUFBUSxHQUFZLEtB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O2dCQW9ESCxXQUFXO3NCQURkLFdBQVc7dUJBQUMsbUJBQW1CO2dCQU01QixPQUFPO3NCQURWLFdBQVc7dUJBQUMsT0FBTzs7QUFrQnRCLFdBQWlCLGFBQWE7SUFDZixzQkFBUSxHQUFHLENBQUMsVUFBVSxFQUFFLFVBQVUsRUFBRSxNQUFNLENBQVUsQ0FBQztJQUdyRCxzQkFBUSxHQUFHLENBQUMsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLENBQVUsQ0FBQztJQUdwQyxtQkFBSyxHQUFHO1FBQ25CLFNBQVM7UUFDVCxRQUFRO1FBQ1IsU0FBUztRQUNULFNBQVM7UUFDVCxRQUFRO1FBQ1IsVUFBVTtLQUNGLENBQUM7SUFHRSwwQkFBWSxHQUFHLENBQUMsVUFBVSxFQUFFLFlBQVksQ0FBVSxDQUFDO0lBR2hFLGdFQUFnRTtJQUNuRCxzQkFBUSxHQUFHLENBQUMsTUFBTSxFQUFFLE9BQU8sRUFBRSxRQUFRLEVBQUUsT0FBTyxDQUFVLENBQUM7QUFFeEUsQ0FBQyxFQXZCZ0IsYUFBYSxLQUFiLGFBQWEsUUF1QjdCIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtcbiAgQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3ksXG4gIENoYW5nZURldGVjdG9yUmVmLFxuICBDb21wb25lbnQsXG4gIEVsZW1lbnRSZWYsXG4gIEV2ZW50RW1pdHRlcixcbiAgSG9zdEJpbmRpbmcsXG4gIElucHV0LFxuICBPbkluaXQsXG4gIE91dHB1dCxcbiAgUmVuZGVyZXIyLFxufSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IHVuaXF1ZUlkIH0gZnJvbSAnbG9kYXNoJztcblxuLyoqXG4gKiBTdXJmYWNlIGNvbnRhaW5lciB0aGF0IGdyb3VwcyByZWxhdGVkIGNvbnRlbnQgaW50byBhIHNpbmdsZSBzY2FubmFibGUgdW5pdC5cbiAqXG4gKiBBIGNhcmQgaXMgY29tcG9zZWQsIG5vdCBjb25maWd1cmVkOiBwcm9qZWN0IHRoZSBwYXJ0cyB5b3UgbmVlZCwgaW4gdGhlIG9yZGVyXG4gKiB5b3UgbmVlZCB0aGVtLiBFdmVyeSBwYXJ0IGlzIG9wdGlvbmFsLCBzbyBhIGJhcmUgYHJpdi1jYXJkYCBpcyBhIHZhbGlkXG4gKiBzdXJmYWNlIG9uIGl0cyBvd24uXG4gKlxuICogLSBgcml2LWNhcmQtbWVkaWFgIOKAlCBsZWFkaW5nIGltYWdlIG9yIHZpZGVvXG4gKiAtIGByaXYtY2FyZC1oZWFkZXJgIOKAlCBoZWFkaW5nLCBzdWJoZWFkaW5nLCBsZWFkaW5nIGFkb3JubWVudCwgYWN0aW9uc1xuICogLSBgcml2LWNhcmQtY29udGVudGAg4oCUIGJvZHlcbiAqIC0gYHJpdi1jYXJkLWFjdGlvbnNgIOKAlCB0cmFpbGluZyBjb250cm9sIHJvd1xuICpcbiAqIGBgYGh0bWxcbiAqIDxyaXYtY2FyZD5cbiAqICAgPHJpdi1jYXJkLWhlYWRlciBbaGVhZGluZ109XCJ3b3JrYm9vay5uYW1lXCIgW3N1YmhlYWRpbmddPVwicGF5ZXJOYW1lXCI+XG4gKiAgICAgPHJpdi1tZW51IGFjdGlvbnM+Li4uPC9yaXYtbWVudT5cbiAqICAgPC9yaXYtY2FyZC1oZWFkZXI+XG4gKiAgIDxyaXYtY2FyZC1jb250ZW50PlxuICogICAgIExhc3QgZWRpdDoge3sgd29ya2Jvb2subW9kaWZpZWQgfCByaXZEYXRlIH19XG4gKiAgIDwvcml2LWNhcmQtY29udGVudD5cbiAqIDwvcml2LWNhcmQ+XG4gKiBgYGBcbiAqXG4gKiAjIyBNYWtpbmcgdGhlIGNhcmQgYWN0aXZhdGVcbiAqXG4gKiBTZXQgYGNsaWNrYWJsZWAgYW5kIGhhbmRsZSBgY2FyZENsaWNrYCB0byBtYWtlIHRoZSB3aG9sZSBzdXJmYWNlIGFjdCBvbiBhXG4gKiBjbGljazpcbiAqXG4gKiBgYGBodG1sXG4gKiA8cml2LWNhcmQgW2NsaWNrYWJsZV09XCJ0cnVlXCIgKGNhcmRDbGljayk9XCJnb1RvV29ya2Jvb2soKVwiPlxuICogYGBgXG4gKlxuICogVGhlIGNhcmQgcmVuZGVycyBpdHMgb3duIGZ1bGwtc3VyZmFjZSBidXR0b24gZm9yIHRoaXMsIHNvIGFjdGl2YXRpb24gd29ya3NcbiAqIHdpdGggYSBwb2ludGVyLCB3aXRoIEVudGVyLCBhbmQgd2l0aCBTcGFjZSwgYW5kIHRoZSBmb2N1cyByaW5nIHRyYWNlcyB0aGVcbiAqIHdob2xlIGNhcmQuIENvbnRyb2xzIGluIGByaXYtY2FyZC1oZWFkZXJgJ3MgYFthY3Rpb25zXWAgc2xvdCBhbmQgaW5cbiAqIGByaXYtY2FyZC1hY3Rpb25zYCBzaXQgYWJvdmUgaXQgYW5kIHN0YXkgaW5kZXBlbmRlbnRseSBjbGlja2FibGUg4oCUIGEgbWVudVxuICogaW5zaWRlIGEgY2xpY2thYmxlIGNhcmQgbmVlZHMgbm8gYHN0b3BQcm9wYWdhdGlvbmAuIE90aGVyIGludGVyYWN0aXZlIGNvbnRlbnRcbiAqIHByb2plY3RlZCBpbnRvIHRoZSBjYXJkIG11c3QgcmFpc2UgaXRzZWxmIHdpdGggYHBvc2l0aW9uOiByZWxhdGl2ZWAgYW5kXG4gKiBgei1pbmRleDogdmFyKC0tY2FyZC1yYWlzZWQtei1pbmRleClgLlxuICpcbiAqIFdoZW4gdGhlIGNhcmQncyBhY3Rpb24gaXMgcmVhbGx5IGEgbmF2aWdhdGlvbiwgcHJlZmVyIGBbcml2LWNhcmQtbGlua11gIG9uIGFuXG4gKiBgPGE+YCBpbnN0ZWFkOiB0aGF0IGtlZXBzIHRoZSBVUkwsIG1pZGRsZS1jbGljaywgYW5kIFwib3BlbiBpbiBuZXcgdGFiXCIuXG4gKlxuICogIyMgU2VsZWN0aW9uXG4gKlxuICogU2V0IGBzZWxlY3RlZGAgdG8gbWFyayB0aGUgY2FyZCB0aGUgdXNlciBpcyBjdXJyZW50bHkgbG9va2luZyBhdC4gSXQgZ2l2ZXNcbiAqIHRoZSBzdXJmYWNlIGEgZGlzdGluY3QgYm9yZGVyIGFuZCBzaGFkb3csIGFuZCBhbm5vdW5jZXMgdGhyb3VnaFxuICogYGFyaWEtY3VycmVudGAgc28gdGhlIHN0YXRlIGlzIG5vdCBjb252ZXllZCBieSBjb2xvdXIgYWxvbmUuXG4gKlxuICogYGBgaHRtbFxuICogPHJpdi1jYXJkIFtzZWxlY3RlZF09XCJ3b3JrYm9vay5pZCA9PT0gYWN0aXZlSWRcIj5cbiAqIGBgYFxuICpcbiAqIFNlbGVjdGlvbiBpcyBzZXBhcmF0ZSBmcm9tIGB0b25lYCwgc28gaXQgY29tcG9zZXMgd2l0aCBhbnkgdGludCDigJQgYSBzZWxlY3RlZFxuICogYGRhbmdlcmAgY2FyZCBrZWVwcyBpdHMgZGFuZ2VyIGJhY2tncm91bmQuXG4gKlxuICogIyMgTm90ZXNcbiAqXG4gKiBXaGVuIHByb2plY3RpbmcgcmF3IGNvbnRlbnQgd2l0aCBubyBzdWItY29tcG9uZW50cywgc2V0IGBwYWRkaW5nYCBzbyB0aGVcbiAqIGNvbnRlbnQgaXMgbm90IGZsdXNoIGFnYWluc3QgdGhlIGJvcmRlci5cbiAqXG4gKiBUaGUgY2FyZCBjbGlwcyBpdHMgb3duIGNvbnRlbnQgc28gbWVkaWEgYW5kIGZpbGxlZCBoZWFkZXIvYWN0aW9uIHJvd3MgZm9sbG93XG4gKiBpdHMgY29ybmVycy4gUG9wdXBzIChgcml2LW1lbnVgLCBgcml2VG9vbHRpcGApIHJlbmRlciB0aHJvdWdoIHRoZSBvdmVybGF5XG4gKiBvdXRsZXQsIHNvIHRoZXkgYXJlIG5vdCBhZmZlY3RlZCBieSB0aGF0IGNsaXBwaW5nLlxuICpcbiAqIFBlci1pbnN0YW5jZSByYWRpdXMgY2FuIGJlIG92ZXJyaWRkZW4gd2l0aCB0aGUgYC0tY2FyZC1ib3JkZXItcmFkaXVzYFxuICogY3VzdG9tIHByb3BlcnR5LlxuICovXG5AQ29tcG9uZW50KHtcbiAgc2VsZWN0b3I6ICdyaXYtY2FyZCcsXG4gIHRlbXBsYXRlVXJsOiAnLi9jYXJkLmNvbXBvbmVudC5odG1sJyxcbiAgc3R5bGVVcmxzOiBbJy4vY2FyZC5jb21wb25lbnQuY3NzJ10sXG4gIGNoYW5nZURldGVjdGlvbjogQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3kuT25QdXNoLFxufSlcbmV4cG9ydCBjbGFzcyBDYXJkQ29tcG9uZW50IGltcGxlbWVudHMgT25Jbml0IHtcbiAgY29uc3RydWN0b3IoXG4gICAgcHJpdmF0ZSByZWFkb25seSBlbDogRWxlbWVudFJlZjxIVE1MRWxlbWVudD4sXG4gICAgcHJpdmF0ZSByZWFkb25seSByZW5kZXJlcjogUmVuZGVyZXIyLFxuICAgIHByaXZhdGUgcmVhZG9ubHkgY2RyOiBDaGFuZ2VEZXRlY3RvclJlZixcbiAgKSB7fVxuXG4gIC8qKiBCb3JkZXIgYW5kIHNoYWRvdyB0cmVhdG1lbnQgb2YgdGhlIHN1cmZhY2UuICovXG4gIEBJbnB1dCgpXG4gIHZhcmlhbnQ6IENhcmRDb21wb25lbnQuVmFyaWFudCA9ICdvdXRsaW5lZCc7XG5cbiAgLyoqIE5ldXRyYWwgYmFja2dyb3VuZCBlbGV2YXRpb24sIG1hdGNoaW5nIHRoZSBgLS1zdXJmYWNlLWxpZ2h0LSpgIHRva2Vucy4gKi9cbiAgQElucHV0KClcbiAgc3VyZmFjZTogQ2FyZENvbXBvbmVudC5TdXJmYWNlID0gJzAnO1xuXG4gIC8qKiBTZW1hbnRpYyBiYWNrZ3JvdW5kIHRpbnQuIE92ZXJyaWRlcyBgc3VyZmFjZWAgd2hlbiBub3QgYG5ldXRyYWxgLiAqL1xuICBASW5wdXQoKVxuICB0b25lOiBDYXJkQ29tcG9uZW50LlRvbmUgPSAnbmV1dHJhbCc7XG5cbiAgLyoqIFN0YWNraW5nIGRpcmVjdGlvbiBvZiB0aGUgcHJvamVjdGVkIHBhcnRzLiAqL1xuICBASW5wdXQoKVxuICBvcmllbnRhdGlvbjogQ2FyZENvbXBvbmVudC5PcmllbnRhdGlvbiA9ICd2ZXJ0aWNhbCc7XG5cbiAgLyoqXG4gICAqIFBhZGRpbmcgYXBwbGllZCB0byB0aGUgY2FyZCBpdHNlbGYuIExlYXZlIGFzIGBub25lYCB3aGVuIGNvbXBvc2luZyB3aXRoXG4gICAqIGByaXYtY2FyZC1oZWFkZXJgIC8gYHJpdi1jYXJkLWNvbnRlbnRgIC8gYHJpdi1jYXJkLWFjdGlvbnNgLCB3aGljaCBvd25cbiAgICogdGhlaXIgb3duIHBhZGRpbmcuXG4gICAqL1xuICBASW5wdXQoKVxuICBwYWRkaW5nOiBDYXJkQ29tcG9uZW50LlBhZGRpbmcgPSAnbm9uZSc7XG5cbiAgLyoqXG4gICAqIE1ha2VzIHRoZSB3aG9sZSBzdXJmYWNlIGFjdGl2YXRlLCBlbWl0dGluZyBgY2FyZENsaWNrYC4gQWRkcyB0aGUgaG92ZXJcbiAgICogYWZmb3JkYW5jZSBhbmQga2V5Ym9hcmQgc3VwcG9ydC5cbiAgICovXG4gIEBJbnB1dCgpXG4gIGNsaWNrYWJsZTogYm9vbGVhbiA9IGZhbHNlO1xuXG4gIC8qKlxuICAgKiBBY2Nlc3NpYmxlIG5hbWUgZm9yIHRoZSBjYXJkJ3MgYWN0aW9uLiBEZWZhdWx0cyB0byB0aGUgYHJpdi1jYXJkLWhlYWRlcmBcbiAgICogdGl0bGUsIGZhbGxpbmcgYmFjayB0byB0aGUgY2FyZCdzIHdob2xlIHRleHQgY29udGVudCB3aGVuIHRoZXJlIGlzIG5vXG4gICAqIGhlYWRlci4gU2V0IHRoaXMgd2hlbiBuZWl0aGVyIHJlYWRzIHdlbGwgb24gaXRzIG93bi5cbiAgICovXG4gIEBJbnB1dCgpXG4gIGNsaWNrTGFiZWw/OiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIE1hcmtzIHRoZSBjYXJkIGFzIHRoZSBjdXJyZW50IHNlbGVjdGlvbiwgZ2l2aW5nIGl0IGEgZGlzdGluY3QgYm9yZGVyIGFuZFxuICAgKiBzaGFkb3cuIENvbXBvc2VzIHdpdGggYW55IGB0b25lYCwgc28gYSBzZWxlY3RlZCBkYW5nZXIgY2FyZCBrZWVwcyBpdHNcbiAgICogdGludC4gQW5ub3VuY2VkIHRvIGFzc2lzdGl2ZSB0ZWNobm9sb2d5IHRocm91Z2ggYGFyaWEtY3VycmVudGAuXG4gICAqL1xuICBASW5wdXQoKVxuICBzZWxlY3RlZDogYm9vbGVhbiA9IGZhbHNlO1xuXG4gIC8qKlxuICAgKiBNdXRlcyB0aGUgc3VyZmFjZSwgc3VwcHJlc3NlcyBob3ZlciBmZWVkYmFjaywgYW5kIGRpc2FibGVzIHRoZSBjbGlja1xuICAgKiB0YXJnZXQuIFByZXNlbnRhdGlvbmFsIGZvciBldmVyeXRoaW5nIGVsc2Ug4oCUIGRpc2FibGUgdGhlIGNhcmQncyBvd25cbiAgICogY29udHJvbHMgdG9vLlxuICAgKi9cbiAgQElucHV0KClcbiAgZGlzYWJsZWQ6IGJvb2xlYW4gPSBmYWxzZTtcblxuICAvKiogRW1pdHRlZCB3aGVuIGEgY2xpY2thYmxlIGNhcmQgaXMgYWN0aXZhdGVkIGJ5IHBvaW50ZXIgb3Iga2V5Ym9hcmQuICovXG4gIEBPdXRwdXQoKVxuICBjYXJkQ2xpY2sgPSBuZXcgRXZlbnRFbWl0dGVyPE1vdXNlRXZlbnQ+KCk7XG5cbiAgLyoqXG4gICAqIE5hbWVzIHRoZSBjbGljayB0YXJnZXQgZnJvbSB0aGUgY2FyZCdzIGNvbnRlbnQuIEdlbmVyYXRlZCBvbmx5IHdoZW4gdGhlXG4gICAqIGNvbnN1bWVyIGhhcyBub3Qgc2V0IHRoZWlyIG93biBpZC5cbiAgICovXG4gIHByaXZhdGUgY2FyZElkOiBzdHJpbmcgPSAnJztcblxuICAvKiogU2V0IGJ5IGEgcHJvamVjdGVkIGByaXYtY2FyZC1oZWFkZXJgIHRoYXQgaGFzIGEgdGl0bGUgdG8gbmFtZSBhZ2FpbnN0LiAqL1xuICBwcml2YXRlIHRpdGxlSWQ/OiBzdHJpbmc7XG5cbiAgbmdPbkluaXQoKSB7XG4gICAgdGhpcy5jYXJkSWQgPSB0aGlzLmVsLm5hdGl2ZUVsZW1lbnQuaWQgfHwgdW5pcXVlSWQoJ3Jpdi1jYXJkLScpO1xuICAgIGlmICghdGhpcy5lbC5uYXRpdmVFbGVtZW50LmlkKSB7XG4gICAgICB0aGlzLnJlbmRlcmVyLnNldEF0dHJpYnV0ZSh0aGlzLmVsLm5hdGl2ZUVsZW1lbnQsICdpZCcsIHRoaXMuY2FyZElkKTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogUmVnaXN0ZXJzIHRoZSBoZWFkZXIncyB0aXRsZSBhcyB0aGUgY2xpY2sgdGFyZ2V0J3MgYWNjZXNzaWJsZSBuYW1lLCB3aGljaFxuICAgKiBrZWVwcyB0aGUgYW5ub3VuY2VtZW50IHRvIHRoZSBjYXJkJ3Mgc3ViamVjdCBpbnN0ZWFkIG9mIGV2ZXJ5IHdvcmQgb24gdGhlXG4gICAqIHN1cmZhY2UuIENhbGxlZCBieSBgcml2LWNhcmQtaGVhZGVyYDsgbm90IHBhcnQgb2YgdGhlIHB1YmxpYyBBUEkuXG4gICAqL1xuICBzZXRUaXRsZUlkKGlkOiBzdHJpbmcgfCB1bmRlZmluZWQpIHtcbiAgICB0aGlzLnRpdGxlSWQgPSBpZDtcbiAgICB0aGlzLmNkci5tYXJrRm9yQ2hlY2soKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBHaXZlcyB1cCBhIHRpdGxlIHJlZ2lzdGVyZWQgYnkgYHNldFRpdGxlSWRgLCBzbyBhIGhlYWRlciB0aGF0IGlzIHJlbW92ZWRcbiAgICogZG9lcyBub3QgbGVhdmUgdGhlIGNsaWNrIHRhcmdldCBuYW1pbmcgaXRzZWxmIGFnYWluc3QgYSBkZXRhY2hlZCBlbGVtZW50LlxuICAgKiBJZ25vcmVzIGlkcyB0aGF0IGFyZSBubyBsb25nZXIgdGhlIG9uZSBpbiB1c2UuXG4gICAqL1xuICBjbGVhclRpdGxlSWQoaWQ6IHN0cmluZykge1xuICAgIGlmICh0aGlzLnRpdGxlSWQgPT09IGlkKSB7XG4gICAgICB0aGlzLnNldFRpdGxlSWQodW5kZWZpbmVkKTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogRWxlbWVudCB3aG9zZSB0ZXh0IG5hbWVzIHRoZSBjbGljayB0YXJnZXQsIHVubGVzcyBgY2xpY2tMYWJlbGAgaXMgc2V0LiBUaGVcbiAgICogaG9zdCBpZCBpcyByZWFkIGZyb20gdGhlIERPTSByYXRoZXIgdGhhbiBjYWNoZWQsIHNvIGEgYm91bmQgYFtpZF1gIHRoYXRcbiAgICogY2hhbmdlcyBpcyBwaWNrZWQgdXAgb24gdGhlIGNhcmQncyBuZXh0IGNoYW5nZSBkZXRlY3Rpb24uXG4gICAqL1xuICBwcm90ZWN0ZWQgZ2V0IGxhYmVsbGVkQnkoKTogc3RyaW5nIHwgbnVsbCB7XG4gICAgaWYgKHRoaXMuY2xpY2tMYWJlbCkgcmV0dXJuIG51bGw7XG4gICAgcmV0dXJuIHRoaXMudGl0bGVJZCA/PyAodGhpcy5lbC5uYXRpdmVFbGVtZW50LmlkIHx8IHRoaXMuY2FyZElkKTtcbiAgfVxuXG4gIC8qKiBBbm5vdW5jZXMgdGhlIGN1cnJlbnQgc2VsZWN0aW9uIHRvIGFzc2lzdGl2ZSB0ZWNobm9sb2d5LiAqL1xuICBASG9zdEJpbmRpbmcoJ2F0dHIuYXJpYS1jdXJyZW50JylcbiAgZ2V0IGFyaWFDdXJyZW50KCk6IHN0cmluZyB8IG51bGwge1xuICAgIHJldHVybiB0aGlzLnNlbGVjdGVkID8gJ3RydWUnIDogbnVsbDtcbiAgfVxuXG4gIEBIb3N0QmluZGluZygnY2xhc3MnKVxuICBnZXQgY2xhc3NlcygpOiBzdHJpbmcge1xuICAgIHJldHVybiBPYmplY3QuZW50cmllcyh7XG4gICAgICBbdGhpcy52YXJpYW50XTogdHJ1ZSxcbiAgICAgIFtgc3VyZmFjZS0ke3RoaXMuc3VyZmFjZX1gXTogdHJ1ZSxcbiAgICAgIFtgdG9uZS0ke3RoaXMudG9uZX1gXTogdHJ1ZSxcbiAgICAgIFt0aGlzLm9yaWVudGF0aW9uXTogdHJ1ZSxcbiAgICAgIFtgcGFkZGluZy0ke3RoaXMucGFkZGluZ31gXTogdHJ1ZSxcbiAgICAgIGNsaWNrYWJsZTogdGhpcy5jbGlja2FibGUsXG4gICAgICBzZWxlY3RlZDogdGhpcy5zZWxlY3RlZCxcbiAgICAgIGRpc2FibGVkOiB0aGlzLmRpc2FibGVkLFxuICAgIH0pXG4gICAgICAuZmlsdGVyKChbXywgdl0pID0+IHYpXG4gICAgICAubWFwKChba10pID0+IGspXG4gICAgICAuam9pbignICcpO1xuICB9XG59XG5cbmV4cG9ydCBuYW1lc3BhY2UgQ2FyZENvbXBvbmVudCB7XG4gIGV4cG9ydCBjb25zdCBWYXJpYW50cyA9IFsnb3V0bGluZWQnLCAnZWxldmF0ZWQnLCAnZmxhdCddIGFzIGNvbnN0O1xuICBleHBvcnQgdHlwZSBWYXJpYW50ID0gKHR5cGVvZiBWYXJpYW50cylbbnVtYmVyXTtcblxuICBleHBvcnQgY29uc3QgU3VyZmFjZXMgPSBbJzAnLCAnMScsICcyJ10gYXMgY29uc3Q7XG4gIGV4cG9ydCB0eXBlIFN1cmZhY2UgPSAodHlwZW9mIFN1cmZhY2VzKVtudW1iZXJdO1xuXG4gIGV4cG9ydCBjb25zdCBUb25lcyA9IFtcbiAgICAnbmV1dHJhbCcsXG4gICAgJ2RhbmdlcicsXG4gICAgJ2NhdXRpb24nLFxuICAgICd3YXJuaW5nJyxcbiAgICAnc2FmZXR5JyxcbiAgICAnc2VsZWN0ZWQnLFxuICBdIGFzIGNvbnN0O1xuICBleHBvcnQgdHlwZSBUb25lID0gKHR5cGVvZiBUb25lcylbbnVtYmVyXTtcblxuICBleHBvcnQgY29uc3QgT3JpZW50YXRpb25zID0gWyd2ZXJ0aWNhbCcsICdob3Jpem9udGFsJ10gYXMgY29uc3Q7XG4gIGV4cG9ydCB0eXBlIE9yaWVudGF0aW9uID0gKHR5cGVvZiBPcmllbnRhdGlvbnMpW251bWJlcl07XG5cbiAgLyoqIFNoYXJlZCBwYWRkaW5nIHNjYWxlIGZvciB0aGUgY2FyZCBhbmQgaXRzIHN1Yi1jb21wb25lbnRzLiAqL1xuICBleHBvcnQgY29uc3QgUGFkZGluZ3MgPSBbJ25vbmUnLCAnc21hbGwnLCAnbWVkaXVtJywgJ2xhcmdlJ10gYXMgY29uc3Q7XG4gIGV4cG9ydCB0eXBlIFBhZGRpbmcgPSAodHlwZW9mIFBhZGRpbmdzKVtudW1iZXJdO1xufVxuIiwiPGJ1dHRvblxuICAqbmdJZj1cImNsaWNrYWJsZVwiXG4gIHR5cGU9XCJidXR0b25cIlxuICBjbGFzcz1cImNsaWNrLXRhcmdldFwiXG4gIFtkaXNhYmxlZF09XCJkaXNhYmxlZFwiXG4gIFthdHRyLmFyaWEtbGFiZWxdPVwiY2xpY2tMYWJlbFwiXG4gIFthdHRyLmFyaWEtbGFiZWxsZWRieV09XCJsYWJlbGxlZEJ5XCJcbiAgKGNsaWNrKT1cImNhcmRDbGljay5lbWl0KCRldmVudClcIlxuPjwvYnV0dG9uPlxuPG5nLWNvbnRlbnQ+PC9uZy1jb250ZW50PlxuIl19
|
|
268
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2FyZC5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9yaXYvc3JjL2xpYi9sYXlvdXQvY2FyZC9jYXJkLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL3Jpdi9zcmMvbGliL2xheW91dC9jYXJkL2NhcmQuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUNMLHVCQUF1QixFQUV2QixTQUFTLEVBRVQsWUFBWSxFQUNaLFdBQVcsRUFDWCxLQUFLLEVBRUwsTUFBTSxHQUVQLE1BQU0sZUFBZSxDQUFDO0FBQ3ZCLE9BQU8sRUFBRSxRQUFRLEVBQUUsTUFBTSxRQUFRLENBQUM7OztBQUVsQzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztHQTJGRztBQU9ILE1BQU0sT0FBTyxhQUFhO0lBQ3hCLFlBQ21CLEVBQTJCLEVBQzNCLFFBQW1CLEVBQ25CLEdBQXNCO1FBRnRCLE9BQUUsR0FBRixFQUFFLENBQXlCO1FBQzNCLGFBQVEsR0FBUixRQUFRLENBQVc7UUFDbkIsUUFBRyxHQUFILEdBQUcsQ0FBbUI7UUFHekMsa0RBQWtEO1FBRWxELFlBQU8sR0FBMEIsVUFBVSxDQUFDO1FBRTVDLDZFQUE2RTtRQUU3RSxZQUFPLEdBQTBCLEdBQUcsQ0FBQztRQUVyQyx3RUFBd0U7UUFFeEUsU0FBSSxHQUF1QixTQUFTLENBQUM7UUFFckMsaURBQWlEO1FBRWpELGdCQUFXLEdBQThCLFVBQVUsQ0FBQztRQUVwRDs7OztXQUlHO1FBRUgsWUFBTyxHQUEwQixNQUFNLENBQUM7UUFFeEM7OztXQUdHO1FBRUgsY0FBUyxHQUFZLEtBQUssQ0FBQztRQVUzQjs7OztXQUlHO1FBRUgsYUFBUSxHQUFZLEtBQUssQ0FBQztRQUUxQjs7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QUMsR0FBRyxDQUFDLENBQUM7SUFDZixDQUFDOzsyR0FyS1UsYUFBYTsrRkFBYixhQUFhLGlZQ2hIMUIsb1FBVUE7NEZEc0dhLGFBQWE7a0JBTnpCLFNBQVM7K0JBQ0UsVUFBVSxtQkFHSCx1QkFBdUIsQ0FBQyxNQUFNO3lKQVcvQyxPQUFPO3NCQUROLEtBQUs7Z0JBS04sT0FBTztzQkFETixLQUFLO2dCQUtOLElBQUk7c0JBREgsS0FBSztnQkFLTixXQUFXO3NCQURWLEtBQUs7Z0JBU04sT0FBTztzQkFETixLQUFLO2dCQVFOLFNBQVM7c0JBRFIsS0FBSztnQkFTTixVQUFVO3NCQURULEtBQUs7Z0JBU04sUUFBUTtzQkFEUCxLQUFLO2dCQVNOLFFBQVE7c0JBRFAsS0FBSztnQkFLTixTQUFTO3NCQURSLE1BQU07Z0JBbUZILFdBQVc7c0JBRGQsV0FBVzt1QkFBQyxtQkFBbUI7Z0JBTTVCLE9BQU87c0JBRFYsV0FBVzt1QkFBQyxPQUFPOztBQWtCdEIsV0FBaUIsYUFBYTtJQUNmLHNCQUFRLEdBQUcsQ0FBQyxVQUFVLEVBQUUsVUFBVSxFQUFFLE1BQU0sRUFBRSxRQUFRLENBQVUsQ0FBQztJQUcvRCxzQkFBUSxHQUFHLENBQUMsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLENBQVUsQ0FBQztJQUdwQyxtQkFBSyxHQUFHO1FBQ25CLFNBQVM7UUFDVCxRQUFRO1FBQ1IsU0FBUztRQUNULFNBQVM7UUFDVCxRQUFRO1FBQ1IsVUFBVTtLQUNGLENBQUM7SUFHRSwwQkFBWSxHQUFHLENBQUMsVUFBVSxFQUFFLFlBQVksQ0FBVSxDQUFDO0lBR2hFLGdFQUFnRTtJQUNuRCxzQkFBUSxHQUFHLENBQUMsTUFBTSxFQUFFLE9BQU8sRUFBRSxRQUFRLEVBQUUsT0FBTyxDQUFVLENBQUM7QUFFeEUsQ0FBQyxFQXZCZ0IsYUFBYSxLQUFiLGFBQWEsUUF1QjdCIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtcbiAgQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3ksXG4gIENoYW5nZURldGVjdG9yUmVmLFxuICBDb21wb25lbnQsXG4gIEVsZW1lbnRSZWYsXG4gIEV2ZW50RW1pdHRlcixcbiAgSG9zdEJpbmRpbmcsXG4gIElucHV0LFxuICBPbkluaXQsXG4gIE91dHB1dCxcbiAgUmVuZGVyZXIyLFxufSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IHVuaXF1ZUlkIH0gZnJvbSAnbG9kYXNoJztcblxuLyoqXG4gKiBTdXJmYWNlIGNvbnRhaW5lciB0aGF0IGdyb3VwcyByZWxhdGVkIGNvbnRlbnQgaW50byBhIHNpbmdsZSBzY2FubmFibGUgdW5pdC5cbiAqXG4gKiBBIGNhcmQgaXMgY29tcG9zZWQsIG5vdCBjb25maWd1cmVkOiBwcm9qZWN0IHRoZSBwYXJ0cyB5b3UgbmVlZCwgaW4gdGhlIG9yZGVyXG4gKiB5b3UgbmVlZCB0aGVtLiBFdmVyeSBwYXJ0IGlzIG9wdGlvbmFsLCBzbyBhIGJhcmUgYHJpdi1jYXJkYCBpcyBhIHZhbGlkXG4gKiBzdXJmYWNlIG9uIGl0cyBvd24uXG4gKlxuICogLSBgcml2LWNhcmQtbWVkaWFgIOKAlCBsZWFkaW5nIGltYWdlIG9yIHZpZGVvXG4gKiAtIGByaXYtY2FyZC1oZWFkZXJgIOKAlCBoZWFkaW5nLCBzdWJoZWFkaW5nLCBsZWFkaW5nIGFkb3JubWVudCwgYWN0aW9uc1xuICogLSBgcml2LWNhcmQtY29udGVudGAg4oCUIGJvZHlcbiAqIC0gYHJpdi1jYXJkLWFjdGlvbnNgIOKAlCB0cmFpbGluZyBjb250cm9sIHJvd1xuICpcbiAqIGBgYGh0bWxcbiAqIDxyaXYtY2FyZD5cbiAqICAgPHJpdi1jYXJkLWhlYWRlciBbaGVhZGluZ109XCJ3b3JrYm9vay5uYW1lXCIgW3N1YmhlYWRpbmddPVwicGF5ZXJOYW1lXCI+XG4gKiAgICAgPHJpdi1tZW51IGFjdGlvbnM+Li4uPC9yaXYtbWVudT5cbiAqICAgPC9yaXYtY2FyZC1oZWFkZXI+XG4gKiAgIDxyaXYtY2FyZC1jb250ZW50PlxuICogICAgIExhc3QgZWRpdDoge3sgd29ya2Jvb2subW9kaWZpZWQgfCByaXZEYXRlIH19XG4gKiAgIDwvcml2LWNhcmQtY29udGVudD5cbiAqIDwvcml2LWNhcmQ+XG4gKiBgYGBcbiAqXG4gKiAjIyBNYWtpbmcgdGhlIGNhcmQgYWN0aXZhdGVcbiAqXG4gKiBTZXQgYGNsaWNrYWJsZWAgYW5kIGhhbmRsZSBgY2FyZENsaWNrYCB0byBtYWtlIHRoZSB3aG9sZSBzdXJmYWNlIGFjdCBvbiBhXG4gKiBjbGljazpcbiAqXG4gKiBgYGBodG1sXG4gKiA8cml2LWNhcmQgW2NsaWNrYWJsZV09XCJ0cnVlXCIgKGNhcmRDbGljayk9XCJnb1RvV29ya2Jvb2soKVwiPlxuICogYGBgXG4gKlxuICogVGhlIGNhcmQgcmVuZGVycyBpdHMgb3duIGZ1bGwtc3VyZmFjZSBidXR0b24gZm9yIHRoaXMsIHNvIGFjdGl2YXRpb24gd29ya3NcbiAqIHdpdGggYSBwb2ludGVyLCB3aXRoIEVudGVyLCBhbmQgd2l0aCBTcGFjZSwgYW5kIHRoZSBmb2N1cyByaW5nIHRyYWNlcyB0aGVcbiAqIHdob2xlIGNhcmQuIENvbnRyb2xzIGluIGByaXYtY2FyZC1oZWFkZXJgJ3MgYFthY3Rpb25zXWAgc2xvdCBhbmQgaW5cbiAqIGByaXYtY2FyZC1hY3Rpb25zYCBzaXQgYWJvdmUgaXQgYW5kIHN0YXkgaW5kZXBlbmRlbnRseSBjbGlja2FibGUg4oCUIGEgbWVudVxuICogaW5zaWRlIGEgY2xpY2thYmxlIGNhcmQgbmVlZHMgbm8gYHN0b3BQcm9wYWdhdGlvbmAuIE90aGVyIGludGVyYWN0aXZlIGNvbnRlbnRcbiAqIHByb2plY3RlZCBpbnRvIHRoZSBjYXJkIG11c3QgcmFpc2UgaXRzZWxmIHdpdGggYHBvc2l0aW9uOiByZWxhdGl2ZWAgYW5kXG4gKiBgei1pbmRleDogdmFyKC0tY2FyZC1yYWlzZWQtei1pbmRleClgLlxuICpcbiAqIFdoZW4gdGhlIGNhcmQncyBhY3Rpb24gaXMgcmVhbGx5IGEgbmF2aWdhdGlvbiwgcHJlZmVyIGBbcml2LWNhcmQtbGlua11gIG9uIGFuXG4gKiBgPGE+YCBpbnN0ZWFkOiB0aGF0IGtlZXBzIHRoZSBVUkwsIG1pZGRsZS1jbGljaywgYW5kIFwib3BlbiBpbiBuZXcgdGFiXCIuXG4gKlxuICogIyMgU2VsZWN0aW9uXG4gKlxuICogU2V0IGBzZWxlY3RlZGAgdG8gbWFyayB0aGUgY2FyZCB0aGUgdXNlciBpcyBjdXJyZW50bHkgbG9va2luZyBhdC4gSXQgZ2l2ZXNcbiAqIHRoZSBzdXJmYWNlIGEgZGlzdGluY3QgYm9yZGVyIGFuZCBzaGFkb3csIGFuZCBhbm5vdW5jZXMgdGhyb3VnaFxuICogYGFyaWEtY3VycmVudGAgc28gdGhlIHN0YXRlIGlzIG5vdCBjb252ZXllZCBieSBjb2xvdXIgYWxvbmUuXG4gKlxuICogYGBgaHRtbFxuICogPHJpdi1jYXJkIFtzZWxlY3RlZF09XCJ3b3JrYm9vay5pZCA9PT0gYWN0aXZlSWRcIj5cbiAqIGBgYFxuICpcbiAqIFNlbGVjdGlvbiBpcyBzZXBhcmF0ZSBmcm9tIGB0b25lYCwgc28gaXQgY29tcG9zZXMgd2l0aCBhbnkgdGludCDigJQgYSBzZWxlY3RlZFxuICogYGRhbmdlcmAgY2FyZCBrZWVwcyBpdHMgZGFuZ2VyIGJhY2tncm91bmQuXG4gKlxuICogIyMgTWFraW5nIHRoZSBjYXJkIGV4cGFuZCBhbmQgY29sbGFwc2VcbiAqXG4gKiBTZXQgYGV4cGFuZGFibGVgIG9uIGByaXYtY2FyZC1oZWFkZXJgIGFuZCByZW5kZXIgdGhlIGJvZHkgb25seSB3aGlsZSBpdCBpc1xuICogb3Blbi4gVGhlIGhlYWRlciBvd25zIHRoZSB0b2dnbGUgYWZmb3JkYW5jZSBhbmQgaXRzIGFjY2Vzc2liaWxpdHk7IHRoZVxuICogY29uc3VtZXIgb3ducyB0aGUgc3RhdGU6XG4gKlxuICogYGBgaHRtbFxuICogPHJpdi1jYXJkPlxuICogICA8cml2LWNhcmQtaGVhZGVyXG4gKiAgICAgW2hlYWRpbmddPVwiJ1BhdGllbnQgaW5mbydcIlxuICogICAgIFtleHBhbmRhYmxlXT1cInRydWVcIlxuICogICAgIFsoZXhwYW5kZWQpXT1cIm9wZW5cIlxuICogICA+PC9yaXYtY2FyZC1oZWFkZXI+XG4gKiAgIDxyaXYtY2FyZC1jb250ZW50ICpuZ0lmPVwib3BlblwiPi4uLjwvcml2LWNhcmQtY29udGVudD5cbiAqIDwvcml2LWNhcmQ+XG4gKiBgYGBcbiAqXG4gKiBUaGUgY2FyZCByZWxheXMgdGhlIHJlZ2lvbiBpZCBmcm9tIHRoZSBoZWFkZXIgdG8gdGhlIGNvbnRlbnQsIHNvIHRoZSB0b2dnbGUnc1xuICogYGFyaWEtY29udHJvbHNgIG5hbWVzIHRoZSBib2R5IHdpdGggbm8gaWRzIHdpcmVkIGJ5IGhhbmQuXG4gKlxuICogRG8gbm90IGNvbWJpbmUgYGV4cGFuZGFibGVgIHdpdGggYGNsaWNrYWJsZWA6IGJvdGggY2xhaW0gdGhlIHNhbWUgY2xpY2ssIGFuZFxuICogYSBjYXJkIHRoYXQgb3BlbnMgYXMgd2VsbCBhcyBleHBhbmRzIGxlYXZlcyB0aGUgdXNlciBubyB3YXkgdG8gdGVsbCB3aGljaCBvbmVcbiAqIHRoZXkgYXJlIGFib3V0IHRvIGdldC5cbiAqXG4gKiAjIyBOb3Rlc1xuICpcbiAqIFdoZW4gcHJvamVjdGluZyByYXcgY29udGVudCB3aXRoIG5vIHN1Yi1jb21wb25lbnRzLCBzZXQgYHBhZGRpbmdgIHNvIHRoZVxuICogY29udGVudCBpcyBub3QgZmx1c2ggYWdhaW5zdCB0aGUgYm9yZGVyLlxuICpcbiAqIFRoZSBjYXJkIGNsaXBzIGl0cyBvd24gY29udGVudCBzbyBtZWRpYSBhbmQgZmlsbGVkIGhlYWRlci9hY3Rpb24gcm93cyBmb2xsb3dcbiAqIGl0cyBjb3JuZXJzLiBQb3B1cHMgKGByaXYtbWVudWAsIGByaXZUb29sdGlwYCkgcmVuZGVyIHRocm91Z2ggdGhlIG92ZXJsYXlcbiAqIG91dGxldCwgc28gdGhleSBhcmUgbm90IGFmZmVjdGVkIGJ5IHRoYXQgY2xpcHBpbmcuXG4gKlxuICogUGVyLWluc3RhbmNlIHJhZGl1cyBjYW4gYmUgb3ZlcnJpZGRlbiB3aXRoIHRoZSBgLS1jYXJkLWJvcmRlci1yYWRpdXNgXG4gKiBjdXN0b20gcHJvcGVydHkuXG4gKi9cbkBDb21wb25lbnQoe1xuICBzZWxlY3RvcjogJ3Jpdi1jYXJkJyxcbiAgdGVtcGxhdGVVcmw6ICcuL2NhcmQuY29tcG9uZW50Lmh0bWwnLFxuICBzdHlsZVVybHM6IFsnLi9jYXJkLmNvbXBvbmVudC5jc3MnXSxcbiAgY2hhbmdlRGV0ZWN0aW9uOiBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneS5PblB1c2gsXG59KVxuZXhwb3J0IGNsYXNzIENhcmRDb21wb25lbnQgaW1wbGVtZW50cyBPbkluaXQge1xuICBjb25zdHJ1Y3RvcihcbiAgICBwcml2YXRlIHJlYWRvbmx5IGVsOiBFbGVtZW50UmVmPEhUTUxFbGVtZW50PixcbiAgICBwcml2YXRlIHJlYWRvbmx5IHJlbmRlcmVyOiBSZW5kZXJlcjIsXG4gICAgcHJpdmF0ZSByZWFkb25seSBjZHI6IENoYW5nZURldGVjdG9yUmVmLFxuICApIHt9XG5cbiAgLyoqIEJvcmRlciBhbmQgc2hhZG93IHRyZWF0bWVudCBvZiB0aGUgc3VyZmFjZS4gKi9cbiAgQElucHV0KClcbiAgdmFyaWFudDogQ2FyZENvbXBvbmVudC5WYXJpYW50ID0gJ291dGxpbmVkJztcblxuICAvKiogTmV1dHJhbCBiYWNrZ3JvdW5kIGVsZXZhdGlvbiwgbWF0Y2hpbmcgdGhlIGAtLXN1cmZhY2UtbGlnaHQtKmAgdG9rZW5zLiAqL1xuICBASW5wdXQoKVxuICBzdXJmYWNlOiBDYXJkQ29tcG9uZW50LlN1cmZhY2UgPSAnMCc7XG5cbiAgLyoqIFNlbWFudGljIGJhY2tncm91bmQgdGludC4gT3ZlcnJpZGVzIGBzdXJmYWNlYCB3aGVuIG5vdCBgbmV1dHJhbGAuICovXG4gIEBJbnB1dCgpXG4gIHRvbmU6IENhcmRDb21wb25lbnQuVG9uZSA9ICduZXV0cmFsJztcblxuICAvKiogU3RhY2tpbmcgZGlyZWN0aW9uIG9mIHRoZSBwcm9qZWN0ZWQgcGFydHMuICovXG4gIEBJbnB1dCgpXG4gIG9yaWVudGF0aW9uOiBDYXJkQ29tcG9uZW50Lk9yaWVudGF0aW9uID0gJ3ZlcnRpY2FsJztcblxuICAvKipcbiAgICogUGFkZGluZyBhcHBsaWVkIHRvIHRoZSBjYXJkIGl0c2VsZi4gTGVhdmUgYXMgYG5vbmVgIHdoZW4gY29tcG9zaW5nIHdpdGhcbiAgICogYHJpdi1jYXJkLWhlYWRlcmAgLyBgcml2LWNhcmQtY29udGVudGAgLyBgcml2LWNhcmQtYWN0aW9uc2AsIHdoaWNoIG93blxuICAgKiB0aGVpciBvd24gcGFkZGluZy5cbiAgICovXG4gIEBJbnB1dCgpXG4gIHBhZGRpbmc6IENhcmRDb21wb25lbnQuUGFkZGluZyA9ICdub25lJztcblxuICAvKipcbiAgICogTWFrZXMgdGhlIHdob2xlIHN1cmZhY2UgYWN0aXZhdGUsIGVtaXR0aW5nIGBjYXJkQ2xpY2tgLiBBZGRzIHRoZSBob3ZlclxuICAgKiBhZmZvcmRhbmNlIGFuZCBrZXlib2FyZCBzdXBwb3J0LlxuICAgKi9cbiAgQElucHV0KClcbiAgY2xpY2thYmxlOiBib29sZWFuID0gZmFsc2U7XG5cbiAgLyoqXG4gICAqIEFjY2Vzc2libGUgbmFtZSBmb3IgdGhlIGNhcmQncyBhY3Rpb24uIERlZmF1bHRzIHRvIHRoZSBgcml2LWNhcmQtaGVhZGVyYFxuICAgKiB0aXRsZSwgZmFsbGluZyBiYWNrIHRvIHRoZSBjYXJkJ3Mgd2hvbGUgdGV4dCBjb250ZW50IHdoZW4gdGhlcmUgaXMgbm9cbiAgICogaGVhZGVyLiBTZXQgdGhpcyB3aGVuIG5laXRoZXIgcmVhZHMgd2VsbCBvbiBpdHMgb3duLlxuICAgKi9cbiAgQElucHV0KClcbiAgY2xpY2tMYWJlbD86IHN0cmluZztcblxuICAvKipcbiAgICogTWFya3MgdGhlIGNhcmQgYXMgdGhlIGN1cnJlbnQgc2VsZWN0aW9uLCBnaXZpbmcgaXQgYSBkaXN0aW5jdCBib3JkZXIgYW5kXG4gICAqIHNoYWRvdy4gQ29tcG9zZXMgd2l0aCBhbnkgYHRvbmVgLCBzbyBhIHNlbGVjdGVkIGRhbmdlciBjYXJkIGtlZXBzIGl0c1xuICAgKiB0aW50LiBBbm5vdW5jZWQgdG8gYXNzaXN0aXZlIHRlY2hub2xvZ3kgdGhyb3VnaCBgYXJpYS1jdXJyZW50YC5cbiAgICovXG4gIEBJbnB1dCgpXG4gIHNlbGVjdGVkOiBib29sZWFuID0gZmFsc2U7XG5cbiAgLyoqXG4gICAqIE11dGVzIHRoZSBzdXJmYWNlLCBzdXBwcmVzc2VzIGhvdmVyIGZlZWRiYWNrLCBhbmQgZGlzYWJsZXMgdGhlIGNsaWNrXG4gICAqIHRhcmdldC4gUHJlc2VudGF0aW9uYWwgZm9yIGV2ZXJ5dGhpbmcgZWxzZSDigJQgZGlzYWJsZSB0aGUgY2FyZCdzIG93blxuICAgKiBjb250cm9scyB0b28uXG4gICAqL1xuICBASW5wdXQoKVxuICBkaXNhYmxlZDogYm9vbGVhbiA9IGZhbHNlO1xuXG4gIC8qKiBFbWl0dGVkIHdoZW4gYSBjbGlja2FibGUgY2FyZCBpcyBhY3RpdmF0ZWQgYnkgcG9pbnRlciBvciBrZXlib2FyZC4gKi9cbiAgQE91dHB1dCgpXG4gIGNhcmRDbGljayA9IG5ldyBFdmVudEVtaXR0ZXI8TW91c2VFdmVudD4oKTtcblxuICAvKipcbiAgICogTmFtZXMgdGhlIGNsaWNrIHRhcmdldCBmcm9tIHRoZSBjYXJkJ3MgY29udGVudC4gR2VuZXJhdGVkIG9ubHkgd2hlbiB0aGVcbiAgICogY29uc3VtZXIgaGFzIG5vdCBzZXQgdGhlaXIgb3duIGlkLlxuICAgKi9cbiAgcHJpdmF0ZSBjYXJkSWQ6IHN0cmluZyA9ICcnO1xuXG4gIC8qKiBTZXQgYnkgYSBwcm9qZWN0ZWQgYHJpdi1jYXJkLWhlYWRlcmAgdGhhdCBoYXMgYSB0aXRsZSB0byBuYW1lIGFnYWluc3QuICovXG4gIHByaXZhdGUgdGl0bGVJZD86IHN0cmluZztcblxuICAvKiogU2V0IGJ5IGEgcHJvamVjdGVkIGByaXYtY2FyZC1oZWFkZXJgIHRoYXQgaXMgZXhwYW5kYWJsZS4gKi9cbiAgcHJpdmF0ZSBleHBhbmRSZWdpb25JZD86IHN0cmluZztcblxuICAvKipcbiAgICogSWQgYW4gZXhwYW5kYWJsZSBoZWFkZXIncyB0b2dnbGUgcG9pbnRzIGBhcmlhLWNvbnRyb2xzYCBhdCwgd29ybiBieSBhXG4gICAqIHByb2plY3RlZCBgcml2LWNhcmQtY29udGVudGAuXG4gICAqL1xuICBnZXQgcmVnaW9uSWQoKTogc3RyaW5nIHwgdW5kZWZpbmVkIHtcbiAgICByZXR1cm4gdGhpcy5leHBhbmRSZWdpb25JZDtcbiAgfVxuXG4gIG5nT25Jbml0KCkge1xuICAgIHRoaXMuY2FyZElkID0gdGhpcy5lbC5uYXRpdmVFbGVtZW50LmlkIHx8IHVuaXF1ZUlkKCdyaXYtY2FyZC0nKTtcbiAgICBpZiAoIXRoaXMuZWwubmF0aXZlRWxlbWVudC5pZCkge1xuICAgICAgdGhpcy5yZW5kZXJlci5zZXRBdHRyaWJ1dGUodGhpcy5lbC5uYXRpdmVFbGVtZW50LCAnaWQnLCB0aGlzLmNhcmRJZCk7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIFJlZ2lzdGVycyB0aGUgaGVhZGVyJ3MgdGl0bGUgYXMgdGhlIGNsaWNrIHRhcmdldCdzIGFjY2Vzc2libGUgbmFtZSwgd2hpY2hcbiAgICoga2VlcHMgdGhlIGFubm91bmNlbWVudCB0byB0aGUgY2FyZCdzIHN1YmplY3QgaW5zdGVhZCBvZiBldmVyeSB3b3JkIG9uIHRoZVxuICAgKiBzdXJmYWNlLiBDYWxsZWQgYnkgYHJpdi1jYXJkLWhlYWRlcmA7IG5vdCBwYXJ0IG9mIHRoZSBwdWJsaWMgQVBJLlxuICAgKi9cbiAgc2V0VGl0bGVJZChpZDogc3RyaW5nIHwgdW5kZWZpbmVkKSB7XG4gICAgdGhpcy50aXRsZUlkID0gaWQ7XG4gICAgdGhpcy5jZHIubWFya0ZvckNoZWNrKCk7XG4gIH1cblxuICAvKipcbiAgICogR2l2ZXMgdXAgYSB0aXRsZSByZWdpc3RlcmVkIGJ5IGBzZXRUaXRsZUlkYCwgc28gYSBoZWFkZXIgdGhhdCBpcyByZW1vdmVkXG4gICAqIGRvZXMgbm90IGxlYXZlIHRoZSBjbGljayB0YXJnZXQgbmFtaW5nIGl0c2VsZiBhZ2FpbnN0IGEgZGV0YWNoZWQgZWxlbWVudC5cbiAgICogSWdub3JlcyBpZHMgdGhhdCBhcmUgbm8gbG9uZ2VyIHRoZSBvbmUgaW4gdXNlLlxuICAgKi9cbiAgY2xlYXJUaXRsZUlkKGlkOiBzdHJpbmcpIHtcbiAgICBpZiAodGhpcy50aXRsZUlkID09PSBpZCkge1xuICAgICAgdGhpcy5zZXRUaXRsZUlkKHVuZGVmaW5lZCk7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIFJlbGF5cyB0aGUgcmVnaW9uIGFuIGV4cGFuZGFibGUgaGVhZGVyIGNvbnRyb2xzIHRvIHRoZSBwcm9qZWN0ZWRcbiAgICogYHJpdi1jYXJkLWNvbnRlbnRgLCBzbyBuZWl0aGVyIHNpZGUgbmVlZHMgdGhlIGNvbnN1bWVyIHRvIHdpcmUgYW4gaWQuXG4gICAqIENhbGxlZCBieSBgcml2LWNhcmQtaGVhZGVyYDsgbm90IHBhcnQgb2YgdGhlIHB1YmxpYyBBUEkuXG4gICAqL1xuICBzZXRSZWdpb25JZChpZDogc3RyaW5nIHwgdW5kZWZpbmVkKSB7XG4gICAgdGhpcy5leHBhbmRSZWdpb25JZCA9IGlkO1xuICAgIHRoaXMuY2RyLm1hcmtGb3JDaGVjaygpO1xuICB9XG5cbiAgLyoqXG4gICAqIEdpdmVzIHVwIGEgcmVnaW9uIHJlZ2lzdGVyZWQgYnkgYHNldFJlZ2lvbklkYC4gSWdub3JlcyBpZHMgdGhhdCBhcmUgbm9cbiAgICogbG9uZ2VyIHRoZSBvbmUgaW4gdXNlLlxuICAgKi9cbiAgY2xlYXJSZWdpb25JZChpZDogc3RyaW5nKSB7XG4gICAgaWYgKHRoaXMuZXhwYW5kUmVnaW9uSWQgPT09IGlkKSB7XG4gICAgICB0aGlzLnNldFJlZ2lvbklkKHVuZGVmaW5lZCk7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIEVsZW1lbnQgd2hvc2UgdGV4dCBuYW1lcyB0aGUgY2xpY2sgdGFyZ2V0LCB1bmxlc3MgYGNsaWNrTGFiZWxgIGlzIHNldC4gVGhlXG4gICAqIGhvc3QgaWQgaXMgcmVhZCBmcm9tIHRoZSBET00gcmF0aGVyIHRoYW4gY2FjaGVkLCBzbyBhIGJvdW5kIGBbaWRdYCB0aGF0XG4gICAqIGNoYW5nZXMgaXMgcGlja2VkIHVwIG9uIHRoZSBjYXJkJ3MgbmV4dCBjaGFuZ2UgZGV0ZWN0aW9uLlxuICAgKi9cbiAgcHJvdGVjdGVkIGdldCBsYWJlbGxlZEJ5KCk6IHN0cmluZyB8IG51bGwge1xuICAgIGlmICh0aGlzLmNsaWNrTGFiZWwpIHJldHVybiBudWxsO1xuICAgIHJldHVybiB0aGlzLnRpdGxlSWQgPz8gKHRoaXMuZWwubmF0aXZlRWxlbWVudC5pZCB8fCB0aGlzLmNhcmRJZCk7XG4gIH1cblxuICAvKiogQW5ub3VuY2VzIHRoZSBjdXJyZW50IHNlbGVjdGlvbiB0byBhc3Npc3RpdmUgdGVjaG5vbG9neS4gKi9cbiAgQEhvc3RCaW5kaW5nKCdhdHRyLmFyaWEtY3VycmVudCcpXG4gIGdldCBhcmlhQ3VycmVudCgpOiBzdHJpbmcgfCBudWxsIHtcbiAgICByZXR1cm4gdGhpcy5zZWxlY3RlZCA/ICd0cnVlJyA6IG51bGw7XG4gIH1cblxuICBASG9zdEJpbmRpbmcoJ2NsYXNzJylcbiAgZ2V0IGNsYXNzZXMoKTogc3RyaW5nIHtcbiAgICByZXR1cm4gT2JqZWN0LmVudHJpZXMoe1xuICAgICAgW3RoaXMudmFyaWFudF06IHRydWUsXG4gICAgICBbYHN1cmZhY2UtJHt0aGlzLnN1cmZhY2V9YF06IHRydWUsXG4gICAgICBbYHRvbmUtJHt0aGlzLnRvbmV9YF06IHRydWUsXG4gICAgICBbdGhpcy5vcmllbnRhdGlvbl06IHRydWUsXG4gICAgICBbYHBhZGRpbmctJHt0aGlzLnBhZGRpbmd9YF06IHRydWUsXG4gICAgICBjbGlja2FibGU6IHRoaXMuY2xpY2thYmxlLFxuICAgICAgc2VsZWN0ZWQ6IHRoaXMuc2VsZWN0ZWQsXG4gICAgICBkaXNhYmxlZDogdGhpcy5kaXNhYmxlZCxcbiAgICB9KVxuICAgICAgLmZpbHRlcigoW18sIHZdKSA9PiB2KVxuICAgICAgLm1hcCgoW2tdKSA9PiBrKVxuICAgICAgLmpvaW4oJyAnKTtcbiAgfVxufVxuXG5leHBvcnQgbmFtZXNwYWNlIENhcmRDb21wb25lbnQge1xuICBleHBvcnQgY29uc3QgVmFyaWFudHMgPSBbJ291dGxpbmVkJywgJ2VsZXZhdGVkJywgJ2ZsYXQnLCAnZGFzaGVkJ10gYXMgY29uc3Q7XG4gIGV4cG9ydCB0eXBlIFZhcmlhbnQgPSAodHlwZW9mIFZhcmlhbnRzKVtudW1iZXJdO1xuXG4gIGV4cG9ydCBjb25zdCBTdXJmYWNlcyA9IFsnMCcsICcxJywgJzInXSBhcyBjb25zdDtcbiAgZXhwb3J0IHR5cGUgU3VyZmFjZSA9ICh0eXBlb2YgU3VyZmFjZXMpW251bWJlcl07XG5cbiAgZXhwb3J0IGNvbnN0IFRvbmVzID0gW1xuICAgICduZXV0cmFsJyxcbiAgICAnZGFuZ2VyJyxcbiAgICAnY2F1dGlvbicsXG4gICAgJ3dhcm5pbmcnLFxuICAgICdzYWZldHknLFxuICAgICdzZWxlY3RlZCcsXG4gIF0gYXMgY29uc3Q7XG4gIGV4cG9ydCB0eXBlIFRvbmUgPSAodHlwZW9mIFRvbmVzKVtudW1iZXJdO1xuXG4gIGV4cG9ydCBjb25zdCBPcmllbnRhdGlvbnMgPSBbJ3ZlcnRpY2FsJywgJ2hvcml6b250YWwnXSBhcyBjb25zdDtcbiAgZXhwb3J0IHR5cGUgT3JpZW50YXRpb24gPSAodHlwZW9mIE9yaWVudGF0aW9ucylbbnVtYmVyXTtcblxuICAvKiogU2hhcmVkIHBhZGRpbmcgc2NhbGUgZm9yIHRoZSBjYXJkIGFuZCBpdHMgc3ViLWNvbXBvbmVudHMuICovXG4gIGV4cG9ydCBjb25zdCBQYWRkaW5ncyA9IFsnbm9uZScsICdzbWFsbCcsICdtZWRpdW0nLCAnbGFyZ2UnXSBhcyBjb25zdDtcbiAgZXhwb3J0IHR5cGUgUGFkZGluZyA9ICh0eXBlb2YgUGFkZGluZ3MpW251bWJlcl07XG59XG4iLCI8YnV0dG9uXG4gICpuZ0lmPVwiY2xpY2thYmxlXCJcbiAgdHlwZT1cImJ1dHRvblwiXG4gIGNsYXNzPVwiY2xpY2stdGFyZ2V0XCJcbiAgW2Rpc2FibGVkXT1cImRpc2FibGVkXCJcbiAgW2F0dHIuYXJpYS1sYWJlbF09XCJjbGlja0xhYmVsXCJcbiAgW2F0dHIuYXJpYS1sYWJlbGxlZGJ5XT1cImxhYmVsbGVkQnlcIlxuICAoY2xpY2spPVwiY2FyZENsaWNrLmVtaXQoJGV2ZW50KVwiXG4+PC9idXR0b24+XG48bmctY29udGVudD48L25nLWNvbnRlbnQ+XG4iXX0=
|