@rivet-health/design-system 40.14.0 → 40.15.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.
@@ -45,6 +45,19 @@ import * as i1 from "@angular/common";
45
45
  * When the card's action is really a navigation, prefer `[riv-card-link]` on an
46
46
  * `<a>` instead: that keeps the URL, middle-click, and "open in new tab".
47
47
  *
48
+ * ## Selection
49
+ *
50
+ * Set `selected` to mark the card the user is currently looking at. It gives
51
+ * the surface a distinct border and shadow, and announces through
52
+ * `aria-current` so the state is not conveyed by colour alone.
53
+ *
54
+ * ```html
55
+ * <riv-card [selected]="workbook.id === activeId">
56
+ * ```
57
+ *
58
+ * Selection is separate from `tone`, so it composes with any tint — a selected
59
+ * `danger` card keeps its danger background.
60
+ *
48
61
  * ## Notes
49
62
  *
50
63
  * When projecting raw content with no sub-components, set `padding` so the
@@ -81,6 +94,12 @@ export class CardComponent {
81
94
  * affordance and keyboard support.
82
95
  */
83
96
  this.clickable = false;
97
+ /**
98
+ * Marks the card as the current selection, giving it a distinct border and
99
+ * shadow. Composes with any `tone`, so a selected danger card keeps its
100
+ * tint. Announced to assistive technology through `aria-current`.
101
+ */
102
+ this.selected = false;
84
103
  /**
85
104
  * Mutes the surface, suppresses hover feedback, and disables the click
86
105
  * target. Presentational for everything else — disable the card's own
@@ -130,6 +149,10 @@ export class CardComponent {
130
149
  return null;
131
150
  return this.titleId ?? (this.el.nativeElement.id || this.cardId);
132
151
  }
152
+ /** Announces the current selection to assistive technology. */
153
+ get ariaCurrent() {
154
+ return this.selected ? 'true' : null;
155
+ }
133
156
  get classes() {
134
157
  return Object.entries({
135
158
  [this.variant]: true,
@@ -138,6 +161,7 @@ export class CardComponent {
138
161
  [this.orientation]: true,
139
162
  [`padding-${this.padding}`]: true,
140
163
  clickable: this.clickable,
164
+ selected: this.selected,
141
165
  disabled: this.disabled,
142
166
  })
143
167
  .filter(([_, v]) => v)
@@ -146,10 +170,10 @@ export class CardComponent {
146
170
  }
147
171
  }
148
172
  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 });
149
- 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", disabled: "disabled" }, outputs: { cardClick: "cardClick" }, host: { properties: { "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.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 });
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 });
150
174
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.10", ngImport: i0, type: CardComponent, decorators: [{
151
175
  type: Component,
152
- 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.disabled{background-color:var(--surface-light-1)}:host.outlined.disabled{border-color:var(--border-light)}@media print{:host{break-inside:avoid}}\n"] }]
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"] }]
153
177
  }], ctorParameters: function () { return [{ type: i0.ElementRef }, { type: i0.Renderer2 }, { type: i0.ChangeDetectorRef }]; }, propDecorators: { variant: [{
154
178
  type: Input
155
179
  }], surface: [{
@@ -164,10 +188,15 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.10", ngImpo
164
188
  type: Input
165
189
  }], clickLabel: [{
166
190
  type: Input
191
+ }], selected: [{
192
+ type: Input
167
193
  }], disabled: [{
168
194
  type: Input
169
195
  }], cardClick: [{
170
196
  type: Output
197
+ }], ariaCurrent: [{
198
+ type: HostBinding,
199
+ args: ['attr.aria-current']
171
200
  }], classes: [{
172
201
  type: HostBinding,
173
202
  args: ['class']
@@ -187,4 +216,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.10", ngImpo
187
216
  /** Shared padding scale for the card and its sub-components. */
188
217
  CardComponent.Paddings = ['none', 'small', 'medium', 'large'];
189
218
  })(CardComponent || (CardComponent = {}));
190
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2FyZC5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9yaXYvc3JjL2xpYi9sYXlvdXQvY2FyZC9jYXJkLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL3Jpdi9zcmMvbGliL2xheW91dC9jYXJkL2NhcmQuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUNMLHVCQUF1QixFQUV2QixTQUFTLEVBRVQsWUFBWSxFQUNaLFdBQVcsRUFDWCxLQUFLLEVBRUwsTUFBTSxHQUVQLE1BQU0sZUFBZSxDQUFDO0FBQ3ZCLE9BQU8sRUFBRSxRQUFRLEVBQUUsTUFBTSxRQUFRLENBQUM7OztBQUVsQzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0dBc0RHO0FBT0gsTUFBTSxPQUFPLGFBQWE7SUFDeEIsWUFDbUIsRUFBMkIsRUFDM0IsUUFBbUIsRUFDbkIsR0FBc0I7UUFGdEIsT0FBRSxHQUFGLEVBQUUsQ0FBeUI7UUFDM0IsYUFBUSxHQUFSLFFBQVEsQ0FBVztRQUNuQixRQUFHLEdBQUgsR0FBRyxDQUFtQjtRQUd6QyxrREFBa0Q7UUFFbEQsWUFBTyxHQUEwQixVQUFVLENBQUM7UUFFNUMsNkVBQTZFO1FBRTdFLFlBQU8sR0FBMEIsR0FBRyxDQUFDO1FBRXJDLHdFQUF3RTtRQUV4RSxTQUFJLEdBQXVCLFNBQVMsQ0FBQztRQUVyQyxpREFBaUQ7UUFFakQsZ0JBQVcsR0FBOEIsVUFBVSxDQUFDO1FBRXBEOzs7O1dBSUc7UUFFSCxZQUFPLEdBQTBCLE1BQU0sQ0FBQztRQUV4Qzs7O1dBR0c7UUFFSCxjQUFTLEdBQVksS0FBSyxDQUFDO1FBVTNCOzs7O1dBSUc7UUFFSCxhQUFRLEdBQVksS0FBSyxDQUFDO1FBRTFCLHlFQUF5RTtRQUV6RSxjQUFTLEdBQUcsSUFBSSxZQUFZLEVBQWMs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O1FBQ1QsU0FBUztRQUNULFFBQVE7UUFDUixVQUFVO0tBQ0YsQ0FBQztJQUdFLDBCQUFZLEdBQUcsQ0FBQyxVQUFVLEVBQUUsWUFBWSxDQUFVLENBQUM7SUFHaEUsZ0VBQWdFO0lBQ25ELHNCQUFRLEdBQUcsQ0FBQyxNQUFNLEVBQUUsT0FBTyxFQUFFLFFBQVEsRUFBRSxPQUFPLENBQVUsQ0FBQztBQUV4RSxDQUFDLEVBdkJnQixhQUFhLEtBQWIsYUFBYSxRQXVCN0IiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge1xuICBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneSxcbiAgQ2hhbmdlRGV0ZWN0b3JSZWYsXG4gIENvbXBvbmVudCxcbiAgRWxlbWVudFJlZixcbiAgRXZlbnRFbWl0dGVyLFxuICBIb3N0QmluZGluZyxcbiAgSW5wdXQsXG4gIE9uSW5pdCxcbiAgT3V0cHV0LFxuICBSZW5kZXJlcjIsXG59IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgdW5pcXVlSWQgfSBmcm9tICdsb2Rhc2gnO1xuXG4vKipcbiAqIFN1cmZhY2UgY29udGFpbmVyIHRoYXQgZ3JvdXBzIHJlbGF0ZWQgY29udGVudCBpbnRvIGEgc2luZ2xlIHNjYW5uYWJsZSB1bml0LlxuICpcbiAqIEEgY2FyZCBpcyBjb21wb3NlZCwgbm90IGNvbmZpZ3VyZWQ6IHByb2plY3QgdGhlIHBhcnRzIHlvdSBuZWVkLCBpbiB0aGUgb3JkZXJcbiAqIHlvdSBuZWVkIHRoZW0uIEV2ZXJ5IHBhcnQgaXMgb3B0aW9uYWwsIHNvIGEgYmFyZSBgcml2LWNhcmRgIGlzIGEgdmFsaWRcbiAqIHN1cmZhY2Ugb24gaXRzIG93bi5cbiAqXG4gKiAtIGByaXYtY2FyZC1tZWRpYWAg4oCUIGxlYWRpbmcgaW1hZ2Ugb3IgdmlkZW9cbiAqIC0gYHJpdi1jYXJkLWhlYWRlcmAg4oCUIGhlYWRpbmcsIHN1YmhlYWRpbmcsIGxlYWRpbmcgYWRvcm5tZW50LCBhY3Rpb25zXG4gKiAtIGByaXYtY2FyZC1jb250ZW50YCDigJQgYm9keVxuICogLSBgcml2LWNhcmQtYWN0aW9uc2Ag4oCUIHRyYWlsaW5nIGNvbnRyb2wgcm93XG4gKlxuICogYGBgaHRtbFxuICogPHJpdi1jYXJkPlxuICogICA8cml2LWNhcmQtaGVhZGVyIFtoZWFkaW5nXT1cIndvcmtib29rLm5hbWVcIiBbc3ViaGVhZGluZ109XCJwYXllck5hbWVcIj5cbiAqICAgICA8cml2LW1lbnUgYWN0aW9ucz4uLi48L3Jpdi1tZW51PlxuICogICA8L3Jpdi1jYXJkLWhlYWRlcj5cbiAqICAgPHJpdi1jYXJkLWNvbnRlbnQ+XG4gKiAgICAgTGFzdCBlZGl0OiB7eyB3b3JrYm9vay5tb2RpZmllZCB8IHJpdkRhdGUgfX1cbiAqICAgPC9yaXYtY2FyZC1jb250ZW50PlxuICogPC9yaXYtY2FyZD5cbiAqIGBgYFxuICpcbiAqICMjIE1ha2luZyB0aGUgY2FyZCBhY3RpdmF0ZVxuICpcbiAqIFNldCBgY2xpY2thYmxlYCBhbmQgaGFuZGxlIGBjYXJkQ2xpY2tgIHRvIG1ha2UgdGhlIHdob2xlIHN1cmZhY2UgYWN0IG9uIGFcbiAqIGNsaWNrOlxuICpcbiAqIGBgYGh0bWxcbiAqIDxyaXYtY2FyZCBbY2xpY2thYmxlXT1cInRydWVcIiAoY2FyZENsaWNrKT1cImdvVG9Xb3JrYm9vaygpXCI+XG4gKiBgYGBcbiAqXG4gKiBUaGUgY2FyZCByZW5kZXJzIGl0cyBvd24gZnVsbC1zdXJmYWNlIGJ1dHRvbiBmb3IgdGhpcywgc28gYWN0aXZhdGlvbiB3b3Jrc1xuICogd2l0aCBhIHBvaW50ZXIsIHdpdGggRW50ZXIsIGFuZCB3aXRoIFNwYWNlLCBhbmQgdGhlIGZvY3VzIHJpbmcgdHJhY2VzIHRoZVxuICogd2hvbGUgY2FyZC4gQ29udHJvbHMgaW4gYHJpdi1jYXJkLWhlYWRlcmAncyBgW2FjdGlvbnNdYCBzbG90IGFuZCBpblxuICogYHJpdi1jYXJkLWFjdGlvbnNgIHNpdCBhYm92ZSBpdCBhbmQgc3RheSBpbmRlcGVuZGVudGx5IGNsaWNrYWJsZSDigJQgYSBtZW51XG4gKiBpbnNpZGUgYSBjbGlja2FibGUgY2FyZCBuZWVkcyBubyBgc3RvcFByb3BhZ2F0aW9uYC4gT3RoZXIgaW50ZXJhY3RpdmUgY29udGVudFxuICogcHJvamVjdGVkIGludG8gdGhlIGNhcmQgbXVzdCByYWlzZSBpdHNlbGYgd2l0aCBgcG9zaXRpb246IHJlbGF0aXZlYCBhbmRcbiAqIGB6LWluZGV4OiB2YXIoLS1jYXJkLXJhaXNlZC16LWluZGV4KWAuXG4gKlxuICogV2hlbiB0aGUgY2FyZCdzIGFjdGlvbiBpcyByZWFsbHkgYSBuYXZpZ2F0aW9uLCBwcmVmZXIgYFtyaXYtY2FyZC1saW5rXWAgb24gYW5cbiAqIGA8YT5gIGluc3RlYWQ6IHRoYXQga2VlcHMgdGhlIFVSTCwgbWlkZGxlLWNsaWNrLCBhbmQgXCJvcGVuIGluIG5ldyB0YWJcIi5cbiAqXG4gKiAjIyBOb3Rlc1xuICpcbiAqIFdoZW4gcHJvamVjdGluZyByYXcgY29udGVudCB3aXRoIG5vIHN1Yi1jb21wb25lbnRzLCBzZXQgYHBhZGRpbmdgIHNvIHRoZVxuICogY29udGVudCBpcyBub3QgZmx1c2ggYWdhaW5zdCB0aGUgYm9yZGVyLlxuICpcbiAqIFRoZSBjYXJkIGNsaXBzIGl0cyBvd24gY29udGVudCBzbyBtZWRpYSBhbmQgZmlsbGVkIGhlYWRlci9hY3Rpb24gcm93cyBmb2xsb3dcbiAqIGl0cyBjb3JuZXJzLiBQb3B1cHMgKGByaXYtbWVudWAsIGByaXZUb29sdGlwYCkgcmVuZGVyIHRocm91Z2ggdGhlIG92ZXJsYXlcbiAqIG91dGxldCwgc28gdGhleSBhcmUgbm90IGFmZmVjdGVkIGJ5IHRoYXQgY2xpcHBpbmcuXG4gKlxuICogUGVyLWluc3RhbmNlIHJhZGl1cyBjYW4gYmUgb3ZlcnJpZGRlbiB3aXRoIHRoZSBgLS1jYXJkLWJvcmRlci1yYWRpdXNgXG4gKiBjdXN0b20gcHJvcGVydHkuXG4gKi9cbkBDb21wb25lbnQoe1xuICBzZWxlY3RvcjogJ3Jpdi1jYXJkJyxcbiAgdGVtcGxhdGVVcmw6ICcuL2NhcmQuY29tcG9uZW50Lmh0bWwnLFxuICBzdHlsZVVybHM6IFsnLi9jYXJkLmNvbXBvbmVudC5jc3MnXSxcbiAgY2hhbmdlRGV0ZWN0aW9uOiBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneS5PblB1c2gsXG59KVxuZXhwb3J0IGNsYXNzIENhcmRDb21wb25lbnQgaW1wbGVtZW50cyBPbkluaXQge1xuICBjb25zdHJ1Y3RvcihcbiAgICBwcml2YXRlIHJlYWRvbmx5IGVsOiBFbGVtZW50UmVmPEhUTUxFbGVtZW50PixcbiAgICBwcml2YXRlIHJlYWRvbmx5IHJlbmRlcmVyOiBSZW5kZXJlcjIsXG4gICAgcHJpdmF0ZSByZWFkb25seSBjZHI6IENoYW5nZURldGVjdG9yUmVmLFxuICApIHt9XG5cbiAgLyoqIEJvcmRlciBhbmQgc2hhZG93IHRyZWF0bWVudCBvZiB0aGUgc3VyZmFjZS4gKi9cbiAgQElucHV0KClcbiAgdmFyaWFudDogQ2FyZENvbXBvbmVudC5WYXJpYW50ID0gJ291dGxpbmVkJztcblxuICAvKiogTmV1dHJhbCBiYWNrZ3JvdW5kIGVsZXZhdGlvbiwgbWF0Y2hpbmcgdGhlIGAtLXN1cmZhY2UtbGlnaHQtKmAgdG9rZW5zLiAqL1xuICBASW5wdXQoKVxuICBzdXJmYWNlOiBDYXJkQ29tcG9uZW50LlN1cmZhY2UgPSAnMCc7XG5cbiAgLyoqIFNlbWFudGljIGJhY2tncm91bmQgdGludC4gT3ZlcnJpZGVzIGBzdXJmYWNlYCB3aGVuIG5vdCBgbmV1dHJhbGAuICovXG4gIEBJbnB1dCgpXG4gIHRvbmU6IENhcmRDb21wb25lbnQuVG9uZSA9ICduZXV0cmFsJztcblxuICAvKiogU3RhY2tpbmcgZGlyZWN0aW9uIG9mIHRoZSBwcm9qZWN0ZWQgcGFydHMuICovXG4gIEBJbnB1dCgpXG4gIG9yaWVudGF0aW9uOiBDYXJkQ29tcG9uZW50Lk9yaWVudGF0aW9uID0gJ3ZlcnRpY2FsJztcblxuICAvKipcbiAgICogUGFkZGluZyBhcHBsaWVkIHRvIHRoZSBjYXJkIGl0c2VsZi4gTGVhdmUgYXMgYG5vbmVgIHdoZW4gY29tcG9zaW5nIHdpdGhcbiAgICogYHJpdi1jYXJkLWhlYWRlcmAgLyBgcml2LWNhcmQtY29udGVudGAgLyBgcml2LWNhcmQtYWN0aW9uc2AsIHdoaWNoIG93blxuICAgKiB0aGVpciBvd24gcGFkZGluZy5cbiAgICovXG4gIEBJbnB1dCgpXG4gIHBhZGRpbmc6IENhcmRDb21wb25lbnQuUGFkZGluZyA9ICdub25lJztcblxuICAvKipcbiAgICogTWFrZXMgdGhlIHdob2xlIHN1cmZhY2UgYWN0aXZhdGUsIGVtaXR0aW5nIGBjYXJkQ2xpY2tgLiBBZGRzIHRoZSBob3ZlclxuICAgKiBhZmZvcmRhbmNlIGFuZCBrZXlib2FyZCBzdXBwb3J0LlxuICAgKi9cbiAgQElucHV0KClcbiAgY2xpY2thYmxlOiBib29sZWFuID0gZmFsc2U7XG5cbiAgLyoqXG4gICAqIEFjY2Vzc2libGUgbmFtZSBmb3IgdGhlIGNhcmQncyBhY3Rpb24uIERlZmF1bHRzIHRvIHRoZSBgcml2LWNhcmQtaGVhZGVyYFxuICAgKiB0aXRsZSwgZmFsbGluZyBiYWNrIHRvIHRoZSBjYXJkJ3Mgd2hvbGUgdGV4dCBjb250ZW50IHdoZW4gdGhlcmUgaXMgbm9cbiAgICogaGVhZGVyLiBTZXQgdGhpcyB3aGVuIG5laXRoZXIgcmVhZHMgd2VsbCBvbiBpdHMgb3duLlxuICAgKi9cbiAgQElucHV0KClcbiAgY2xpY2tMYWJlbD86IHN0cmluZztcblxuICAvKipcbiAgICogTXV0ZXMgdGhlIHN1cmZhY2UsIHN1cHByZXNzZXMgaG92ZXIgZmVlZGJhY2ssIGFuZCBkaXNhYmxlcyB0aGUgY2xpY2tcbiAgICogdGFyZ2V0LiBQcmVzZW50YXRpb25hbCBmb3IgZXZlcnl0aGluZyBlbHNlIOKAlCBkaXNhYmxlIHRoZSBjYXJkJ3Mgb3duXG4gICAqIGNvbnRyb2xzIHRvby5cbiAgICovXG4gIEBJbnB1dCgpXG4gIGRpc2FibGVkOiBib29sZWFuID0gZmFsc2U7XG5cbiAgLyoqIEVtaXR0ZWQgd2hlbiBhIGNsaWNrYWJsZSBjYXJkIGlzIGFjdGl2YXRlZCBieSBwb2ludGVyIG9yIGtleWJvYXJkLiAqL1xuICBAT3V0cHV0KClcbiAgY2FyZENsaWNrID0gbmV3IEV2ZW50RW1pdHRlcjxNb3VzZUV2ZW50PigpO1xuXG4gIC8qKlxuICAgKiBOYW1lcyB0aGUgY2xpY2sgdGFyZ2V0IGZyb20gdGhlIGNhcmQncyBjb250ZW50LiBHZW5lcmF0ZWQgb25seSB3aGVuIHRoZVxuICAgKiBjb25zdW1lciBoYXMgbm90IHNldCB0aGVpciBvd24gaWQuXG4gICAqL1xuICBwcml2YXRlIGNhcmRJZDogc3RyaW5nID0gJyc7XG5cbiAgLyoqIFNldCBieSBhIHByb2plY3RlZCBgcml2LWNhcmQtaGVhZGVyYCB0aGF0IGhhcyBhIHRpdGxlIHRvIG5hbWUgYWdhaW5zdC4gKi9cbiAgcHJpdmF0ZSB0aXRsZUlkPzogc3RyaW5nO1xuXG4gIG5nT25Jbml0KCkge1xuICAgIHRoaXMuY2FyZElkID0gdGhpcy5lbC5uYXRpdmVFbGVtZW50LmlkIHx8IHVuaXF1ZUlkKCdyaXYtY2FyZC0nKTtcbiAgICBpZiAoIXRoaXMuZWwubmF0aXZlRWxlbWVudC5pZCkge1xuICAgICAgdGhpcy5yZW5kZXJlci5zZXRBdHRyaWJ1dGUodGhpcy5lbC5uYXRpdmVFbGVtZW50LCAnaWQnLCB0aGlzLmNhcmRJZCk7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIFJlZ2lzdGVycyB0aGUgaGVhZGVyJ3MgdGl0bGUgYXMgdGhlIGNsaWNrIHRhcmdldCdzIGFjY2Vzc2libGUgbmFtZSwgd2hpY2hcbiAgICoga2VlcHMgdGhlIGFubm91bmNlbWVudCB0byB0aGUgY2FyZCdzIHN1YmplY3QgaW5zdGVhZCBvZiBldmVyeSB3b3JkIG9uIHRoZVxuICAgKiBzdXJmYWNlLiBDYWxsZWQgYnkgYHJpdi1jYXJkLWhlYWRlcmA7IG5vdCBwYXJ0IG9mIHRoZSBwdWJsaWMgQVBJLlxuICAgKi9cbiAgc2V0VGl0bGVJZChpZDogc3RyaW5nIHwgdW5kZWZpbmVkKSB7XG4gICAgdGhpcy50aXRsZUlkID0gaWQ7XG4gICAgdGhpcy5jZHIubWFya0ZvckNoZWNrKCk7XG4gIH1cblxuICAvKipcbiAgICogR2l2ZXMgdXAgYSB0aXRsZSByZWdpc3RlcmVkIGJ5IGBzZXRUaXRsZUlkYCwgc28gYSBoZWFkZXIgdGhhdCBpcyByZW1vdmVkXG4gICAqIGRvZXMgbm90IGxlYXZlIHRoZSBjbGljayB0YXJnZXQgbmFtaW5nIGl0c2VsZiBhZ2FpbnN0IGEgZGV0YWNoZWQgZWxlbWVudC5cbiAgICogSWdub3JlcyBpZHMgdGhhdCBhcmUgbm8gbG9uZ2VyIHRoZSBvbmUgaW4gdXNlLlxuICAgKi9cbiAgY2xlYXJUaXRsZUlkKGlkOiBzdHJpbmcpIHtcbiAgICBpZiAodGhpcy50aXRsZUlkID09PSBpZCkge1xuICAgICAgdGhpcy5zZXRUaXRsZUlkKHVuZGVmaW5lZCk7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIEVsZW1lbnQgd2hvc2UgdGV4dCBuYW1lcyB0aGUgY2xpY2sgdGFyZ2V0LCB1bmxlc3MgYGNsaWNrTGFiZWxgIGlzIHNldC4gVGhlXG4gICAqIGhvc3QgaWQgaXMgcmVhZCBmcm9tIHRoZSBET00gcmF0aGVyIHRoYW4gY2FjaGVkLCBzbyBhIGJvdW5kIGBbaWRdYCB0aGF0XG4gICAqIGNoYW5nZXMgaXMgcGlja2VkIHVwIG9uIHRoZSBjYXJkJ3MgbmV4dCBjaGFuZ2UgZGV0ZWN0aW9uLlxuICAgKi9cbiAgcHJvdGVjdGVkIGdldCBsYWJlbGxlZEJ5KCk6IHN0cmluZyB8IG51bGwge1xuICAgIGlmICh0aGlzLmNsaWNrTGFiZWwpIHJldHVybiBudWxsO1xuICAgIHJldHVybiB0aGlzLnRpdGxlSWQgPz8gKHRoaXMuZWwubmF0aXZlRWxlbWVudC5pZCB8fCB0aGlzLmNhcmRJZCk7XG4gIH1cblxuICBASG9zdEJpbmRpbmcoJ2NsYXNzJylcbiAgZ2V0IGNsYXNzZXMoKTogc3RyaW5nIHtcbiAgICByZXR1cm4gT2JqZWN0LmVudHJpZXMoe1xuICAgICAgW3RoaXMudmFyaWFudF06IHRydWUsXG4gICAgICBbYHN1cmZhY2UtJHt0aGlzLnN1cmZhY2V9YF06IHRydWUsXG4gICAgICBbYHRvbmUtJHt0aGlzLnRvbmV9YF06IHRydWUsXG4gICAgICBbdGhpcy5vcmllbnRhdGlvbl06IHRydWUsXG4gICAgICBbYHBhZGRpbmctJHt0aGlzLnBhZGRpbmd9YF06IHRydWUsXG4gICAgICBjbGlja2FibGU6IHRoaXMuY2xpY2thYmxlLFxuICAgICAgZGlzYWJsZWQ6IHRoaXMuZGlzYWJsZWQsXG4gICAgfSlcbiAgICAgIC5maWx0ZXIoKFtfLCB2XSkgPT4gdilcbiAgICAgIC5tYXAoKFtrXSkgPT4gaylcbiAgICAgIC5qb2luKCcgJyk7XG4gIH1cbn1cblxuZXhwb3J0IG5hbWVzcGFjZSBDYXJkQ29tcG9uZW50IHtcbiAgZXhwb3J0IGNvbnN0IFZhcmlhbnRzID0gWydvdXRsaW5lZCcsICdlbGV2YXRlZCcsICdmbGF0J10gYXMgY29uc3Q7XG4gIGV4cG9ydCB0eXBlIFZhcmlhbnQgPSAodHlwZW9mIFZhcmlhbnRzKVtudW1iZXJdO1xuXG4gIGV4cG9ydCBjb25zdCBTdXJmYWNlcyA9IFsnMCcsICcxJywgJzInXSBhcyBjb25zdDtcbiAgZXhwb3J0IHR5cGUgU3VyZmFjZSA9ICh0eXBlb2YgU3VyZmFjZXMpW251bWJlcl07XG5cbiAgZXhwb3J0IGNvbnN0IFRvbmVzID0gW1xuICAgICduZXV0cmFsJyxcbiAgICAnZGFuZ2VyJyxcbiAgICAnY2F1dGlvbicsXG4gICAgJ3dhcm5pbmcnLFxuICAgICdzYWZldHknLFxuICAgICdzZWxlY3RlZCcsXG4gIF0gYXMgY29uc3Q7XG4gIGV4cG9ydCB0eXBlIFRvbmUgPSAodHlwZW9mIFRvbmVzKVtudW1iZXJdO1xuXG4gIGV4cG9ydCBjb25zdCBPcmllbnRhdGlvbnMgPSBbJ3ZlcnRpY2FsJywgJ2hvcml6b250YWwnXSBhcyBjb25zdDtcbiAgZXhwb3J0IHR5cGUgT3JpZW50YXRpb24gPSAodHlwZW9mIE9yaWVudGF0aW9ucylbbnVtYmVyXTtcblxuICAvKiogU2hhcmVkIHBhZGRpbmcgc2NhbGUgZm9yIHRoZSBjYXJkIGFuZCBpdHMgc3ViLWNvbXBvbmVudHMuICovXG4gIGV4cG9ydCBjb25zdCBQYWRkaW5ncyA9IFsnbm9uZScsICdzbWFsbCcsICdtZWRpdW0nLCAnbGFyZ2UnXSBhcyBjb25zdDtcbiAgZXhwb3J0IHR5cGUgUGFkZGluZyA9ICh0eXBlb2YgUGFkZGluZ3MpW251bWJlcl07XG59XG4iLCI8YnV0dG9uXG4gICpuZ0lmPVwiY2xpY2thYmxlXCJcbiAgdHlwZT1cImJ1dHRvblwiXG4gIGNsYXNzPVwiY2xpY2stdGFyZ2V0XCJcbiAgW2Rpc2FibGVkXT1cImRpc2FibGVkXCJcbiAgW2F0dHIuYXJpYS1sYWJlbF09XCJjbGlja0xhYmVsXCJcbiAgW2F0dHIuYXJpYS1sYWJlbGxlZGJ5XT1cImxhYmVsbGVkQnlcIlxuICAoY2xpY2spPVwiY2FyZENsaWNrLmVtaXQoJGV2ZW50KVwiXG4+PC9idXR0b24+XG48bmctY29udGVudD48L25nLWNvbnRlbnQ+XG4iXX0=
219
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2FyZC5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9yaXYvc3JjL2xpYi9sYXlvdXQvY2FyZC9jYXJkLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL3Jpdi9zcmMvbGliL2xheW91dC9jYXJkL2NhcmQuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUNMLHVCQUF1QixFQUV2QixTQUFTLEVBRVQsWUFBWSxFQUNaLFdBQVcsRUFDWCxLQUFLLEVBRUwsTUFBTSxHQUVQLE1BQU0sZUFBZSxDQUFDO0FBQ3ZCLE9BQU8sRUFBRSxRQUFRLEVBQUUsTUFBTSxRQUFRLENBQUM7OztBQUVsQzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztHQW1FRztBQU9ILE1BQU0sT0FBTyxhQUFhO0lBQ3hCLFlBQ21CLEVBQTJCLEVBQzNCLFFBQW1CLEVBQ25CLEdBQXNCO1FBRnRCLE9BQUUsR0FBRixFQUFFLENBQXlCO1FBQzNCLGFBQVEsR0FBUixRQUFRLENBQVc7UUFDbkIsUUFBRyxHQUFILEdBQUcsQ0FBbUI7UUFHekMsa0RBQWtEO1FBRWxELFlBQU8sR0FBMEIsVUFBVSxDQUFDO1FBRTVDLDZFQUE2RTtRQUU3RSxZQUFPLEdBQTBCLEdBQUcsQ0FBQztRQUVyQyx3RUFBd0U7UUFFeEUsU0FBSSxHQUF1QixTQUFTLENBQUM7UUFFckMsaURBQWlEO1FBRWpELGdCQUFXLEdBQThCLFVBQVUsQ0FBQztRQUVwRDs7OztXQUlHO1FBRUgsWUFBTyxHQUEwQixNQUFNLENBQUM7UUFFeEM7OztXQUdHO1FBRUgsY0FBUyxHQUFZLEtBQUssQ0FBQztRQVUzQjs7OztXQUlHO1FBRUgsYUFBUSxHQUFZLEtBQUssQ0FBQztRQUUxQjs7OztXQUlHO1FBRUgsYUFBUSxHQUFZLEtB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O2dCQW9ESCxXQUFXO3NCQURkLFdBQVc7dUJBQUMsbUJBQW1CO2dCQU01QixPQUFPO3NCQURWLFdBQVc7dUJBQUMsT0FBTzs7QUFrQnRCLFdBQWlCLGFBQWE7SUFDZixzQkFBUSxHQUFHLENBQUMsVUFBVSxFQUFFLFVBQVUsRUFBRSxNQUFNLENBQVUsQ0FBQztJQUdyRCxzQkFBUSxHQUFHLENBQUMsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLENBQVUsQ0FBQztJQUdwQyxtQkFBSyxHQUFHO1FBQ25CLFNBQVM7UUFDVCxRQUFRO1FBQ1IsU0FBUztRQUNULFNBQVM7UUFDVCxRQUFRO1FBQ1IsVUFBVTtLQUNGLENBQUM7SUFHRSwwQkFBWSxHQUFHLENBQUMsVUFBVSxFQUFFLFlBQVksQ0FBVSxDQUFDO0lBR2hFLGdFQUFnRTtJQUNuRCxzQkFBUSxHQUFHLENBQUMsTUFBTSxFQUFFLE9BQU8sRUFBRSxRQUFRLEVBQUUsT0FBTyxDQUFVLENBQUM7QUFFeEUsQ0FBQyxFQXZCZ0IsYUFBYSxLQUFiLGFBQWEsUUF1QjdCIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtcbiAgQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3ksXG4gIENoYW5nZURldGVjdG9yUmVmLFxuICBDb21wb25lbnQsXG4gIEVsZW1lbnRSZWYsXG4gIEV2ZW50RW1pdHRlcixcbiAgSG9zdEJpbmRpbmcsXG4gIElucHV0LFxuICBPbkluaXQsXG4gIE91dHB1dCxcbiAgUmVuZGVyZXIyLFxufSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IHVuaXF1ZUlkIH0gZnJvbSAnbG9kYXNoJztcblxuLyoqXG4gKiBTdXJmYWNlIGNvbnRhaW5lciB0aGF0IGdyb3VwcyByZWxhdGVkIGNvbnRlbnQgaW50byBhIHNpbmdsZSBzY2FubmFibGUgdW5pdC5cbiAqXG4gKiBBIGNhcmQgaXMgY29tcG9zZWQsIG5vdCBjb25maWd1cmVkOiBwcm9qZWN0IHRoZSBwYXJ0cyB5b3UgbmVlZCwgaW4gdGhlIG9yZGVyXG4gKiB5b3UgbmVlZCB0aGVtLiBFdmVyeSBwYXJ0IGlzIG9wdGlvbmFsLCBzbyBhIGJhcmUgYHJpdi1jYXJkYCBpcyBhIHZhbGlkXG4gKiBzdXJmYWNlIG9uIGl0cyBvd24uXG4gKlxuICogLSBgcml2LWNhcmQtbWVkaWFgIOKAlCBsZWFkaW5nIGltYWdlIG9yIHZpZGVvXG4gKiAtIGByaXYtY2FyZC1oZWFkZXJgIOKAlCBoZWFkaW5nLCBzdWJoZWFkaW5nLCBsZWFkaW5nIGFkb3JubWVudCwgYWN0aW9uc1xuICogLSBgcml2LWNhcmQtY29udGVudGAg4oCUIGJvZHlcbiAqIC0gYHJpdi1jYXJkLWFjdGlvbnNgIOKAlCB0cmFpbGluZyBjb250cm9sIHJvd1xuICpcbiAqIGBgYGh0bWxcbiAqIDxyaXYtY2FyZD5cbiAqICAgPHJpdi1jYXJkLWhlYWRlciBbaGVhZGluZ109XCJ3b3JrYm9vay5uYW1lXCIgW3N1YmhlYWRpbmddPVwicGF5ZXJOYW1lXCI+XG4gKiAgICAgPHJpdi1tZW51IGFjdGlvbnM+Li4uPC9yaXYtbWVudT5cbiAqICAgPC9yaXYtY2FyZC1oZWFkZXI+XG4gKiAgIDxyaXYtY2FyZC1jb250ZW50PlxuICogICAgIExhc3QgZWRpdDoge3sgd29ya2Jvb2subW9kaWZpZWQgfCByaXZEYXRlIH19XG4gKiAgIDwvcml2LWNhcmQtY29udGVudD5cbiAqIDwvcml2LWNhcmQ+XG4gKiBgYGBcbiAqXG4gKiAjIyBNYWtpbmcgdGhlIGNhcmQgYWN0aXZhdGVcbiAqXG4gKiBTZXQgYGNsaWNrYWJsZWAgYW5kIGhhbmRsZSBgY2FyZENsaWNrYCB0byBtYWtlIHRoZSB3aG9sZSBzdXJmYWNlIGFjdCBvbiBhXG4gKiBjbGljazpcbiAqXG4gKiBgYGBodG1sXG4gKiA8cml2LWNhcmQgW2NsaWNrYWJsZV09XCJ0cnVlXCIgKGNhcmRDbGljayk9XCJnb1RvV29ya2Jvb2soKVwiPlxuICogYGBgXG4gKlxuICogVGhlIGNhcmQgcmVuZGVycyBpdHMgb3duIGZ1bGwtc3VyZmFjZSBidXR0b24gZm9yIHRoaXMsIHNvIGFjdGl2YXRpb24gd29ya3NcbiAqIHdpdGggYSBwb2ludGVyLCB3aXRoIEVudGVyLCBhbmQgd2l0aCBTcGFjZSwgYW5kIHRoZSBmb2N1cyByaW5nIHRyYWNlcyB0aGVcbiAqIHdob2xlIGNhcmQuIENvbnRyb2xzIGluIGByaXYtY2FyZC1oZWFkZXJgJ3MgYFthY3Rpb25zXWAgc2xvdCBhbmQgaW5cbiAqIGByaXYtY2FyZC1hY3Rpb25zYCBzaXQgYWJvdmUgaXQgYW5kIHN0YXkgaW5kZXBlbmRlbnRseSBjbGlja2FibGUg4oCUIGEgbWVudVxuICogaW5zaWRlIGEgY2xpY2thYmxlIGNhcmQgbmVlZHMgbm8gYHN0b3BQcm9wYWdhdGlvbmAuIE90aGVyIGludGVyYWN0aXZlIGNvbnRlbnRcbiAqIHByb2plY3RlZCBpbnRvIHRoZSBjYXJkIG11c3QgcmFpc2UgaXRzZWxmIHdpdGggYHBvc2l0aW9uOiByZWxhdGl2ZWAgYW5kXG4gKiBgei1pbmRleDogdmFyKC0tY2FyZC1yYWlzZWQtei1pbmRleClgLlxuICpcbiAqIFdoZW4gdGhlIGNhcmQncyBhY3Rpb24gaXMgcmVhbGx5IGEgbmF2aWdhdGlvbiwgcHJlZmVyIGBbcml2LWNhcmQtbGlua11gIG9uIGFuXG4gKiBgPGE+YCBpbnN0ZWFkOiB0aGF0IGtlZXBzIHRoZSBVUkwsIG1pZGRsZS1jbGljaywgYW5kIFwib3BlbiBpbiBuZXcgdGFiXCIuXG4gKlxuICogIyMgU2VsZWN0aW9uXG4gKlxuICogU2V0IGBzZWxlY3RlZGAgdG8gbWFyayB0aGUgY2FyZCB0aGUgdXNlciBpcyBjdXJyZW50bHkgbG9va2luZyBhdC4gSXQgZ2l2ZXNcbiAqIHRoZSBzdXJmYWNlIGEgZGlzdGluY3QgYm9yZGVyIGFuZCBzaGFkb3csIGFuZCBhbm5vdW5jZXMgdGhyb3VnaFxuICogYGFyaWEtY3VycmVudGAgc28gdGhlIHN0YXRlIGlzIG5vdCBjb252ZXllZCBieSBjb2xvdXIgYWxvbmUuXG4gKlxuICogYGBgaHRtbFxuICogPHJpdi1jYXJkIFtzZWxlY3RlZF09XCJ3b3JrYm9vay5pZCA9PT0gYWN0aXZlSWRcIj5cbiAqIGBgYFxuICpcbiAqIFNlbGVjdGlvbiBpcyBzZXBhcmF0ZSBmcm9tIGB0b25lYCwgc28gaXQgY29tcG9zZXMgd2l0aCBhbnkgdGludCDigJQgYSBzZWxlY3RlZFxuICogYGRhbmdlcmAgY2FyZCBrZWVwcyBpdHMgZGFuZ2VyIGJhY2tncm91bmQuXG4gKlxuICogIyMgTm90ZXNcbiAqXG4gKiBXaGVuIHByb2plY3RpbmcgcmF3IGNvbnRlbnQgd2l0aCBubyBzdWItY29tcG9uZW50cywgc2V0IGBwYWRkaW5nYCBzbyB0aGVcbiAqIGNvbnRlbnQgaXMgbm90IGZsdXNoIGFnYWluc3QgdGhlIGJvcmRlci5cbiAqXG4gKiBUaGUgY2FyZCBjbGlwcyBpdHMgb3duIGNvbnRlbnQgc28gbWVkaWEgYW5kIGZpbGxlZCBoZWFkZXIvYWN0aW9uIHJvd3MgZm9sbG93XG4gKiBpdHMgY29ybmVycy4gUG9wdXBzIChgcml2LW1lbnVgLCBgcml2VG9vbHRpcGApIHJlbmRlciB0aHJvdWdoIHRoZSBvdmVybGF5XG4gKiBvdXRsZXQsIHNvIHRoZXkgYXJlIG5vdCBhZmZlY3RlZCBieSB0aGF0IGNsaXBwaW5nLlxuICpcbiAqIFBlci1pbnN0YW5jZSByYWRpdXMgY2FuIGJlIG92ZXJyaWRkZW4gd2l0aCB0aGUgYC0tY2FyZC1ib3JkZXItcmFkaXVzYFxuICogY3VzdG9tIHByb3BlcnR5LlxuICovXG5AQ29tcG9uZW50KHtcbiAgc2VsZWN0b3I6ICdyaXYtY2FyZCcsXG4gIHRlbXBsYXRlVXJsOiAnLi9jYXJkLmNvbXBvbmVudC5odG1sJyxcbiAgc3R5bGVVcmxzOiBbJy4vY2FyZC5jb21wb25lbnQuY3NzJ10sXG4gIGNoYW5nZURldGVjdGlvbjogQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3kuT25QdXNoLFxufSlcbmV4cG9ydCBjbGFzcyBDYXJkQ29tcG9uZW50IGltcGxlbWVudHMgT25Jbml0IHtcbiAgY29uc3RydWN0b3IoXG4gICAgcHJpdmF0ZSByZWFkb25seSBlbDogRWxlbWVudFJlZjxIVE1MRWxlbWVudD4sXG4gICAgcHJpdmF0ZSByZWFkb25seSByZW5kZXJlcjogUmVuZGVyZXIyLFxuICAgIHByaXZhdGUgcmVhZG9ubHkgY2RyOiBDaGFuZ2VEZXRlY3RvclJlZixcbiAgKSB7fVxuXG4gIC8qKiBCb3JkZXIgYW5kIHNoYWRvdyB0cmVhdG1lbnQgb2YgdGhlIHN1cmZhY2UuICovXG4gIEBJbnB1dCgpXG4gIHZhcmlhbnQ6IENhcmRDb21wb25lbnQuVmFyaWFudCA9ICdvdXRsaW5lZCc7XG5cbiAgLyoqIE5ldXRyYWwgYmFja2dyb3VuZCBlbGV2YXRpb24sIG1hdGNoaW5nIHRoZSBgLS1zdXJmYWNlLWxpZ2h0LSpgIHRva2Vucy4gKi9cbiAgQElucHV0KClcbiAgc3VyZmFjZTogQ2FyZENvbXBvbmVudC5TdXJmYWNlID0gJzAnO1xuXG4gIC8qKiBTZW1hbnRpYyBiYWNrZ3JvdW5kIHRpbnQuIE92ZXJyaWRlcyBgc3VyZmFjZWAgd2hlbiBub3QgYG5ldXRyYWxgLiAqL1xuICBASW5wdXQoKVxuICB0b25lOiBDYXJkQ29tcG9uZW50LlRvbmUgPSAnbmV1dHJhbCc7XG5cbiAgLyoqIFN0YWNraW5nIGRpcmVjdGlvbiBvZiB0aGUgcHJvamVjdGVkIHBhcnRzLiAqL1xuICBASW5wdXQoKVxuICBvcmllbnRhdGlvbjogQ2FyZENvbXBvbmVudC5PcmllbnRhdGlvbiA9ICd2ZXJ0aWNhbCc7XG5cbiAgLyoqXG4gICAqIFBhZGRpbmcgYXBwbGllZCB0byB0aGUgY2FyZCBpdHNlbGYuIExlYXZlIGFzIGBub25lYCB3aGVuIGNvbXBvc2luZyB3aXRoXG4gICAqIGByaXYtY2FyZC1oZWFkZXJgIC8gYHJpdi1jYXJkLWNvbnRlbnRgIC8gYHJpdi1jYXJkLWFjdGlvbnNgLCB3aGljaCBvd25cbiAgICogdGhlaXIgb3duIHBhZGRpbmcuXG4gICAqL1xuICBASW5wdXQoKVxuICBwYWRkaW5nOiBDYXJkQ29tcG9uZW50LlBhZGRpbmcgPSAnbm9uZSc7XG5cbiAgLyoqXG4gICAqIE1ha2VzIHRoZSB3aG9sZSBzdXJmYWNlIGFjdGl2YXRlLCBlbWl0dGluZyBgY2FyZENsaWNrYC4gQWRkcyB0aGUgaG92ZXJcbiAgICogYWZmb3JkYW5jZSBhbmQga2V5Ym9hcmQgc3VwcG9ydC5cbiAgICovXG4gIEBJbnB1dCgpXG4gIGNsaWNrYWJsZTogYm9vbGVhbiA9IGZhbHNlO1xuXG4gIC8qKlxuICAgKiBBY2Nlc3NpYmxlIG5hbWUgZm9yIHRoZSBjYXJkJ3MgYWN0aW9uLiBEZWZhdWx0cyB0byB0aGUgYHJpdi1jYXJkLWhlYWRlcmBcbiAgICogdGl0bGUsIGZhbGxpbmcgYmFjayB0byB0aGUgY2FyZCdzIHdob2xlIHRleHQgY29udGVudCB3aGVuIHRoZXJlIGlzIG5vXG4gICAqIGhlYWRlci4gU2V0IHRoaXMgd2hlbiBuZWl0aGVyIHJlYWRzIHdlbGwgb24gaXRzIG93bi5cbiAgICovXG4gIEBJbnB1dCgpXG4gIGNsaWNrTGFiZWw/OiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIE1hcmtzIHRoZSBjYXJkIGFzIHRoZSBjdXJyZW50IHNlbGVjdGlvbiwgZ2l2aW5nIGl0IGEgZGlzdGluY3QgYm9yZGVyIGFuZFxuICAgKiBzaGFkb3cuIENvbXBvc2VzIHdpdGggYW55IGB0b25lYCwgc28gYSBzZWxlY3RlZCBkYW5nZXIgY2FyZCBrZWVwcyBpdHNcbiAgICogdGludC4gQW5ub3VuY2VkIHRvIGFzc2lzdGl2ZSB0ZWNobm9sb2d5IHRocm91Z2ggYGFyaWEtY3VycmVudGAuXG4gICAqL1xuICBASW5wdXQoKVxuICBzZWxlY3RlZDogYm9vbGVhbiA9IGZhbHNlO1xuXG4gIC8qKlxuICAgKiBNdXRlcyB0aGUgc3VyZmFjZSwgc3VwcHJlc3NlcyBob3ZlciBmZWVkYmFjaywgYW5kIGRpc2FibGVzIHRoZSBjbGlja1xuICAgKiB0YXJnZXQuIFByZXNlbnRhdGlvbmFsIGZvciBldmVyeXRoaW5nIGVsc2Ug4oCUIGRpc2FibGUgdGhlIGNhcmQncyBvd25cbiAgICogY29udHJvbHMgdG9vLlxuICAgKi9cbiAgQElucHV0KClcbiAgZGlzYWJsZWQ6IGJvb2xlYW4gPSBmYWxzZTtcblxuICAvKiogRW1pdHRlZCB3aGVuIGEgY2xpY2thYmxlIGNhcmQgaXMgYWN0aXZhdGVkIGJ5IHBvaW50ZXIgb3Iga2V5Ym9hcmQuICovXG4gIEBPdXRwdXQoKVxuICBjYXJkQ2xpY2sgPSBuZXcgRXZlbnRFbWl0dGVyPE1vdXNlRXZlbnQ+KCk7XG5cbiAgLyoqXG4gICAqIE5hbWVzIHRoZSBjbGljayB0YXJnZXQgZnJvbSB0aGUgY2FyZCdzIGNvbnRlbnQuIEdlbmVyYXRlZCBvbmx5IHdoZW4gdGhlXG4gICAqIGNvbnN1bWVyIGhhcyBub3Qgc2V0IHRoZWlyIG93biBpZC5cbiAgICovXG4gIHByaXZhdGUgY2FyZElkOiBzdHJpbmcgPSAnJztcblxuICAvKiogU2V0IGJ5IGEgcHJvamVjdGVkIGByaXYtY2FyZC1oZWFkZXJgIHRoYXQgaGFzIGEgdGl0bGUgdG8gbmFtZSBhZ2FpbnN0LiAqL1xuICBwcml2YXRlIHRpdGxlSWQ/OiBzdHJpbmc7XG5cbiAgbmdPbkluaXQoKSB7XG4gICAgdGhpcy5jYXJkSWQgPSB0aGlzLmVsLm5hdGl2ZUVsZW1lbnQuaWQgfHwgdW5pcXVlSWQoJ3Jpdi1jYXJkLScpO1xuICAgIGlmICghdGhpcy5lbC5uYXRpdmVFbGVtZW50LmlkKSB7XG4gICAgICB0aGlzLnJlbmRlcmVyLnNldEF0dHJpYnV0ZSh0aGlzLmVsLm5hdGl2ZUVsZW1lbnQsICdpZCcsIHRoaXMuY2FyZElkKTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogUmVnaXN0ZXJzIHRoZSBoZWFkZXIncyB0aXRsZSBhcyB0aGUgY2xpY2sgdGFyZ2V0J3MgYWNjZXNzaWJsZSBuYW1lLCB3aGljaFxuICAgKiBrZWVwcyB0aGUgYW5ub3VuY2VtZW50IHRvIHRoZSBjYXJkJ3Mgc3ViamVjdCBpbnN0ZWFkIG9mIGV2ZXJ5IHdvcmQgb24gdGhlXG4gICAqIHN1cmZhY2UuIENhbGxlZCBieSBgcml2LWNhcmQtaGVhZGVyYDsgbm90IHBhcnQgb2YgdGhlIHB1YmxpYyBBUEkuXG4gICAqL1xuICBzZXRUaXRsZUlkKGlkOiBzdHJpbmcgfCB1bmRlZmluZWQpIHtcbiAgICB0aGlzLnRpdGxlSWQgPSBpZDtcbiAgICB0aGlzLmNkci5tYXJrRm9yQ2hlY2soKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBHaXZlcyB1cCBhIHRpdGxlIHJlZ2lzdGVyZWQgYnkgYHNldFRpdGxlSWRgLCBzbyBhIGhlYWRlciB0aGF0IGlzIHJlbW92ZWRcbiAgICogZG9lcyBub3QgbGVhdmUgdGhlIGNsaWNrIHRhcmdldCBuYW1pbmcgaXRzZWxmIGFnYWluc3QgYSBkZXRhY2hlZCBlbGVtZW50LlxuICAgKiBJZ25vcmVzIGlkcyB0aGF0IGFyZSBubyBsb25nZXIgdGhlIG9uZSBpbiB1c2UuXG4gICAqL1xuICBjbGVhclRpdGxlSWQoaWQ6IHN0cmluZykge1xuICAgIGlmICh0aGlzLnRpdGxlSWQgPT09IGlkKSB7XG4gICAgICB0aGlzLnNldFRpdGxlSWQodW5kZWZpbmVkKTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogRWxlbWVudCB3aG9zZSB0ZXh0IG5hbWVzIHRoZSBjbGljayB0YXJnZXQsIHVubGVzcyBgY2xpY2tMYWJlbGAgaXMgc2V0LiBUaGVcbiAgICogaG9zdCBpZCBpcyByZWFkIGZyb20gdGhlIERPTSByYXRoZXIgdGhhbiBjYWNoZWQsIHNvIGEgYm91bmQgYFtpZF1gIHRoYXRcbiAgICogY2hhbmdlcyBpcyBwaWNrZWQgdXAgb24gdGhlIGNhcmQncyBuZXh0IGNoYW5nZSBkZXRlY3Rpb24uXG4gICAqL1xuICBwcm90ZWN0ZWQgZ2V0IGxhYmVsbGVkQnkoKTogc3RyaW5nIHwgbnVsbCB7XG4gICAgaWYgKHRoaXMuY2xpY2tMYWJlbCkgcmV0dXJuIG51bGw7XG4gICAgcmV0dXJuIHRoaXMudGl0bGVJZCA/PyAodGhpcy5lbC5uYXRpdmVFbGVtZW50LmlkIHx8IHRoaXMuY2FyZElkKTtcbiAgfVxuXG4gIC8qKiBBbm5vdW5jZXMgdGhlIGN1cnJlbnQgc2VsZWN0aW9uIHRvIGFzc2lzdGl2ZSB0ZWNobm9sb2d5LiAqL1xuICBASG9zdEJpbmRpbmcoJ2F0dHIuYXJpYS1jdXJyZW50JylcbiAgZ2V0IGFyaWFDdXJyZW50KCk6IHN0cmluZyB8IG51bGwge1xuICAgIHJldHVybiB0aGlzLnNlbGVjdGVkID8gJ3RydWUnIDogbnVsbDtcbiAgfVxuXG4gIEBIb3N0QmluZGluZygnY2xhc3MnKVxuICBnZXQgY2xhc3NlcygpOiBzdHJpbmcge1xuICAgIHJldHVybiBPYmplY3QuZW50cmllcyh7XG4gICAgICBbdGhpcy52YXJpYW50XTogdHJ1ZSxcbiAgICAgIFtgc3VyZmFjZS0ke3RoaXMuc3VyZmFjZX1gXTogdHJ1ZSxcbiAgICAgIFtgdG9uZS0ke3RoaXMudG9uZX1gXTogdHJ1ZSxcbiAgICAgIFt0aGlzLm9yaWVudGF0aW9uXTogdHJ1ZSxcbiAgICAgIFtgcGFkZGluZy0ke3RoaXMucGFkZGluZ31gXTogdHJ1ZSxcbiAgICAgIGNsaWNrYWJsZTogdGhpcy5jbGlja2FibGUsXG4gICAgICBzZWxlY3RlZDogdGhpcy5zZWxlY3RlZCxcbiAgICAgIGRpc2FibGVkOiB0aGlzLmRpc2FibGVkLFxuICAgIH0pXG4gICAgICAuZmlsdGVyKChbXywgdl0pID0+IHYpXG4gICAgICAubWFwKChba10pID0+IGspXG4gICAgICAuam9pbignICcpO1xuICB9XG59XG5cbmV4cG9ydCBuYW1lc3BhY2UgQ2FyZENvbXBvbmVudCB7XG4gIGV4cG9ydCBjb25zdCBWYXJpYW50cyA9IFsnb3V0bGluZWQnLCAnZWxldmF0ZWQnLCAnZmxhdCddIGFzIGNvbnN0O1xuICBleHBvcnQgdHlwZSBWYXJpYW50ID0gKHR5cGVvZiBWYXJpYW50cylbbnVtYmVyXTtcblxuICBleHBvcnQgY29uc3QgU3VyZmFjZXMgPSBbJzAnLCAnMScsICcyJ10gYXMgY29uc3Q7XG4gIGV4cG9ydCB0eXBlIFN1cmZhY2UgPSAodHlwZW9mIFN1cmZhY2VzKVtudW1iZXJdO1xuXG4gIGV4cG9ydCBjb25zdCBUb25lcyA9IFtcbiAgICAnbmV1dHJhbCcsXG4gICAgJ2RhbmdlcicsXG4gICAgJ2NhdXRpb24nLFxuICAgICd3YXJuaW5nJyxcbiAgICAnc2FmZXR5JyxcbiAgICAnc2VsZWN0ZWQnLFxuICBdIGFzIGNvbnN0O1xuICBleHBvcnQgdHlwZSBUb25lID0gKHR5cGVvZiBUb25lcylbbnVtYmVyXTtcblxuICBleHBvcnQgY29uc3QgT3JpZW50YXRpb25zID0gWyd2ZXJ0aWNhbCcsICdob3Jpem9udGFsJ10gYXMgY29uc3Q7XG4gIGV4cG9ydCB0eXBlIE9yaWVudGF0aW9uID0gKHR5cGVvZiBPcmllbnRhdGlvbnMpW251bWJlcl07XG5cbiAgLyoqIFNoYXJlZCBwYWRkaW5nIHNjYWxlIGZvciB0aGUgY2FyZCBhbmQgaXRzIHN1Yi1jb21wb25lbnRzLiAqL1xuICBleHBvcnQgY29uc3QgUGFkZGluZ3MgPSBbJ25vbmUnLCAnc21hbGwnLCAnbWVkaXVtJywgJ2xhcmdlJ10gYXMgY29uc3Q7XG4gIGV4cG9ydCB0eXBlIFBhZGRpbmcgPSAodHlwZW9mIFBhZGRpbmdzKVtudW1iZXJdO1xufVxuIiwiPGJ1dHRvblxuICAqbmdJZj1cImNsaWNrYWJsZVwiXG4gIHR5cGU9XCJidXR0b25cIlxuICBjbGFzcz1cImNsaWNrLXRhcmdldFwiXG4gIFtkaXNhYmxlZF09XCJkaXNhYmxlZFwiXG4gIFthdHRyLmFyaWEtbGFiZWxdPVwiY2xpY2tMYWJlbFwiXG4gIFthdHRyLmFyaWEtbGFiZWxsZWRieV09XCJsYWJlbGxlZEJ5XCJcbiAgKGNsaWNrKT1cImNhcmRDbGljay5lbWl0KCRldmVudClcIlxuPjwvYnV0dG9uPlxuPG5nLWNvbnRlbnQ+PC9uZy1jb250ZW50PlxuIl19
@@ -5610,6 +5610,19 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.10", ngImpo
5610
5610
  * When the card's action is really a navigation, prefer `[riv-card-link]` on an
5611
5611
  * `<a>` instead: that keeps the URL, middle-click, and "open in new tab".
5612
5612
  *
5613
+ * ## Selection
5614
+ *
5615
+ * Set `selected` to mark the card the user is currently looking at. It gives
5616
+ * the surface a distinct border and shadow, and announces through
5617
+ * `aria-current` so the state is not conveyed by colour alone.
5618
+ *
5619
+ * ```html
5620
+ * <riv-card [selected]="workbook.id === activeId">
5621
+ * ```
5622
+ *
5623
+ * Selection is separate from `tone`, so it composes with any tint — a selected
5624
+ * `danger` card keeps its danger background.
5625
+ *
5613
5626
  * ## Notes
5614
5627
  *
5615
5628
  * When projecting raw content with no sub-components, set `padding` so the
@@ -5646,6 +5659,12 @@ class CardComponent {
5646
5659
  * affordance and keyboard support.
5647
5660
  */
5648
5661
  this.clickable = false;
5662
+ /**
5663
+ * Marks the card as the current selection, giving it a distinct border and
5664
+ * shadow. Composes with any `tone`, so a selected danger card keeps its
5665
+ * tint. Announced to assistive technology through `aria-current`.
5666
+ */
5667
+ this.selected = false;
5649
5668
  /**
5650
5669
  * Mutes the surface, suppresses hover feedback, and disables the click
5651
5670
  * target. Presentational for everything else — disable the card's own
@@ -5696,6 +5715,10 @@ class CardComponent {
5696
5715
  return null;
5697
5716
  return (_a = this.titleId) !== null && _a !== void 0 ? _a : (this.el.nativeElement.id || this.cardId);
5698
5717
  }
5718
+ /** Announces the current selection to assistive technology. */
5719
+ get ariaCurrent() {
5720
+ return this.selected ? 'true' : null;
5721
+ }
5699
5722
  get classes() {
5700
5723
  return Object.entries({
5701
5724
  [this.variant]: true,
@@ -5704,6 +5727,7 @@ class CardComponent {
5704
5727
  [this.orientation]: true,
5705
5728
  [`padding-${this.padding}`]: true,
5706
5729
  clickable: this.clickable,
5730
+ selected: this.selected,
5707
5731
  disabled: this.disabled,
5708
5732
  })
5709
5733
  .filter(([_, v]) => v)
@@ -5712,10 +5736,10 @@ class CardComponent {
5712
5736
  }
5713
5737
  }
5714
5738
  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 });
5715
- 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", disabled: "disabled" }, outputs: { cardClick: "cardClick" }, host: { properties: { "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.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 });
5739
+ 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 });
5716
5740
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.10", ngImport: i0, type: CardComponent, decorators: [{
5717
5741
  type: Component,
5718
- 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.disabled{background-color:var(--surface-light-1)}:host.outlined.disabled{border-color:var(--border-light)}@media print{:host{break-inside:avoid}}\n"] }]
5742
+ 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"] }]
5719
5743
  }], ctorParameters: function () { return [{ type: i0.ElementRef }, { type: i0.Renderer2 }, { type: i0.ChangeDetectorRef }]; }, propDecorators: { variant: [{
5720
5744
  type: Input
5721
5745
  }], surface: [{
@@ -5730,10 +5754,15 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.10", ngImpo
5730
5754
  type: Input
5731
5755
  }], clickLabel: [{
5732
5756
  type: Input
5757
+ }], selected: [{
5758
+ type: Input
5733
5759
  }], disabled: [{
5734
5760
  type: Input
5735
5761
  }], cardClick: [{
5736
5762
  type: Output
5763
+ }], ariaCurrent: [{
5764
+ type: HostBinding,
5765
+ args: ['attr.aria-current']
5737
5766
  }], classes: [{
5738
5767
  type: HostBinding,
5739
5768
  args: ['class']