@rivet-health/design-system 40.1.0 → 40.3.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/input/date/date.component.mjs +134 -17
- package/esm2020/lib/navigation/views/view-menu/view-menu.component.mjs +1 -1
- package/esm2020/lib/notification/banner/banner.component.mjs +2 -2
- package/esm2020/lib/overlay/modal/dialog/dialog.component.mjs +9 -3
- package/esm2020/lib/table/table/table-search-columns/table-search-columns.component.mjs +2 -2
- package/fesm2015/rivet-health-design-system.mjs +144 -20
- package/fesm2015/rivet-health-design-system.mjs.map +1 -1
- package/fesm2020/rivet-health-design-system.mjs +143 -20
- package/fesm2020/rivet-health-design-system.mjs.map +1 -1
- package/lib/input/date/date.component.d.ts +20 -1
- package/lib/overlay/modal/dialog/dialog.component.d.ts +3 -1
- package/package.json +1 -1
- package/styles/global.css +14 -0
|
@@ -1,6 +1,7 @@
|
|
|
1
|
-
import { ChangeDetectionStrategy, Component, ContentChild, EventEmitter, Input, Output, } from '@angular/core';
|
|
2
|
-
import { timeMonth } from 'd3-time';
|
|
1
|
+
import { ChangeDetectionStrategy, Component, ContentChild, EventEmitter, HostListener, Input, Output, } from '@angular/core';
|
|
2
|
+
import { timeDay, timeMonth } from 'd3-time';
|
|
3
3
|
import { BehaviorSubject } from 'rxjs';
|
|
4
|
+
import { DatePipe } from '../../format/pipes/date.pipe';
|
|
4
5
|
import { CalendarComponent } from '../calendar/calendar.component';
|
|
5
6
|
import { InputLabelComponent } from '../input-label/input-label.component';
|
|
6
7
|
import * as i0 from "@angular/core";
|
|
@@ -11,10 +12,11 @@ import * as i4 from "../../overlay/callout/callout.component";
|
|
|
11
12
|
import * as i5 from "../../icon/icon.component";
|
|
12
13
|
import * as i6 from "../input-label/input-label.component";
|
|
13
14
|
import * as i7 from "../../overlay/overlay.directive";
|
|
14
|
-
import * as i8 from "../../format/pipes/date.pipe";
|
|
15
15
|
export class DateComponent extends InputLabelComponent {
|
|
16
|
-
constructor() {
|
|
17
|
-
super(
|
|
16
|
+
constructor(cdr, host) {
|
|
17
|
+
super();
|
|
18
|
+
this.cdr = cdr;
|
|
19
|
+
this.host = host;
|
|
18
20
|
this.min = CalendarComponent.defaultMin;
|
|
19
21
|
this.max = CalendarComponent.defaultMax;
|
|
20
22
|
this.placeholder = 'Select date';
|
|
@@ -24,17 +26,20 @@ export class DateComponent extends InputLabelComponent {
|
|
|
24
26
|
this.activeYearMonth = timeMonth.floor(new Date());
|
|
25
27
|
this.open$ = new BehaviorSubject(false);
|
|
26
28
|
this.valueChange = new EventEmitter();
|
|
29
|
+
this.inputText = '';
|
|
30
|
+
this.hasFocus = false;
|
|
31
|
+
this.datePipe = new DatePipe();
|
|
27
32
|
}
|
|
28
33
|
set value(v) {
|
|
29
34
|
if (this._value?.getTime() === v?.getTime())
|
|
30
35
|
return;
|
|
31
36
|
this._value = v;
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
37
|
+
// Skip text sync while typing so we don't stomp the user's in-progress input.
|
|
38
|
+
if (!this.hasFocus)
|
|
39
|
+
this.inputText = v ? this.formatValue(v) : '';
|
|
40
|
+
if (v)
|
|
41
|
+
this.setActiveMonth(v);
|
|
42
|
+
this.cdr.markForCheck();
|
|
38
43
|
}
|
|
39
44
|
get value() {
|
|
40
45
|
return this._value;
|
|
@@ -45,17 +50,101 @@ export class DateComponent extends InputLabelComponent {
|
|
|
45
50
|
get open() {
|
|
46
51
|
return this.open$.getValue();
|
|
47
52
|
}
|
|
53
|
+
// The callout renders with isModal=false (no full-viewport scrim) and can't
|
|
54
|
+
// self-close on outside clicks. Any overlay layer — including sibling
|
|
55
|
+
// overlays like the month/year selects — counts as "inside" the picker.
|
|
56
|
+
onDocumentMouseDown(target) {
|
|
57
|
+
if (!this.open$.getValue() || !(target instanceof Element))
|
|
58
|
+
return;
|
|
59
|
+
if (this.host.nativeElement.contains(target))
|
|
60
|
+
return;
|
|
61
|
+
if (target.closest('.callout, .scrim, .overlay-container'))
|
|
62
|
+
return;
|
|
63
|
+
this.open$.next(false);
|
|
64
|
+
this.cdr.markForCheck();
|
|
65
|
+
}
|
|
48
66
|
clearValue() {
|
|
49
|
-
this.
|
|
67
|
+
this.commit(undefined);
|
|
68
|
+
this.open$.next(false);
|
|
69
|
+
}
|
|
70
|
+
onInputChange(value) {
|
|
71
|
+
this.inputText = value;
|
|
72
|
+
const parsed = this.parseInput(value);
|
|
73
|
+
this.previewValue = parsed;
|
|
74
|
+
if (parsed)
|
|
75
|
+
this.setActiveMonth(parsed);
|
|
76
|
+
this.cdr.markForCheck();
|
|
77
|
+
}
|
|
78
|
+
onInputBlur(event) {
|
|
79
|
+
this.hasFocus = false;
|
|
80
|
+
const parsed = this.parseInput(this.inputText);
|
|
81
|
+
if (parsed) {
|
|
82
|
+
this.commit(parsed);
|
|
83
|
+
}
|
|
84
|
+
else if (!this.inputText.trim()) {
|
|
85
|
+
this.commit(undefined);
|
|
86
|
+
}
|
|
87
|
+
else {
|
|
88
|
+
// Invalid text — revert to whatever the committed value was.
|
|
89
|
+
this.inputText = this._value ? this.formatValue(this._value) : '';
|
|
90
|
+
}
|
|
91
|
+
this.previewValue = undefined;
|
|
92
|
+
// Close on keyboard-driven focus changes (Tab out). Stay open if focus
|
|
93
|
+
// moved into a nested overlay (e.g. the calendar's month/year select).
|
|
94
|
+
// Mouse clicks inside the calendar preventDefault mousedown so this
|
|
95
|
+
// handler never runs for them.
|
|
96
|
+
const nextTarget = event?.relatedTarget;
|
|
97
|
+
const stayOpen = nextTarget instanceof Element &&
|
|
98
|
+
(this.host.nativeElement.contains(nextTarget) ||
|
|
99
|
+
!!nextTarget.closest('.callout, .scrim, .overlay-container'));
|
|
100
|
+
if (!stayOpen)
|
|
101
|
+
this.open$.next(false);
|
|
102
|
+
this.cdr.markForCheck();
|
|
103
|
+
}
|
|
104
|
+
onDateSelect(date) {
|
|
105
|
+
this.commit(timeDay.floor(date));
|
|
50
106
|
this.open$.next(false);
|
|
51
107
|
}
|
|
108
|
+
onInputFocus() {
|
|
109
|
+
this.hasFocus = true;
|
|
110
|
+
this.open$.next(true);
|
|
111
|
+
}
|
|
112
|
+
toggleCalendar() {
|
|
113
|
+
this.open$.next(!this.open$.getValue());
|
|
114
|
+
}
|
|
115
|
+
formatValue(date) {
|
|
116
|
+
return this.datePipe.transform(date);
|
|
117
|
+
}
|
|
118
|
+
parseInput(text) {
|
|
119
|
+
const parsed = DateComponent.parseDate(text);
|
|
120
|
+
return parsed && DateComponent.isValidDate(parsed, this.min, this.max)
|
|
121
|
+
? timeDay.floor(parsed)
|
|
122
|
+
: undefined;
|
|
123
|
+
}
|
|
124
|
+
setActiveMonth(date) {
|
|
125
|
+
const month = timeMonth.floor(date);
|
|
126
|
+
if (month.getTime() !== this.activeYearMonth.getTime()) {
|
|
127
|
+
this.activeYearMonth = month;
|
|
128
|
+
}
|
|
129
|
+
}
|
|
130
|
+
commit(next) {
|
|
131
|
+
const unchanged = next?.getTime() === this._value?.getTime();
|
|
132
|
+
this._value = next;
|
|
133
|
+
this.inputText = next ? this.formatValue(next) : '';
|
|
134
|
+
this.previewValue = undefined;
|
|
135
|
+
if (next)
|
|
136
|
+
this.setActiveMonth(next);
|
|
137
|
+
if (!unchanged)
|
|
138
|
+
this.valueChange.emit(next);
|
|
139
|
+
this.cdr.markForCheck();
|
|
140
|
+
}
|
|
52
141
|
}
|
|
53
|
-
DateComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.3.0", ngImport: i0, type: DateComponent, deps:
|
|
54
|
-
DateComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "14.3.0", type: DateComponent, selector: "riv-date", inputs: { min: "min", max: "max", value: "value", placeholder: "placeholder", disabled: "disabled", size: "size", showClearButton: "showClearButton", open: "open" }, outputs: { valueChange: "valueChange" }, queries: [{ propertyName: "headerTemplate", first: true, predicate: ["header"], descendants: true }], usesInheritance: true, ngImport: i0, template: "<riv-input-label\n [label]=\"label\"\n [help]=\"help\"\n [required]=\"required\"\n [state]=\"state\"\n [errorMessage]=\"errorMessage\"\n [labelActionText]=\"labelActionText\"\n (labelAction)=\"labelAction.emit($event)\"\n>\n <
|
|
142
|
+
DateComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.3.0", ngImport: i0, type: DateComponent, deps: [{ token: i0.ChangeDetectorRef }, { token: i0.ElementRef }], target: i0.ɵɵFactoryTarget.Component });
|
|
143
|
+
DateComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "14.3.0", type: DateComponent, selector: "riv-date", inputs: { min: "min", max: "max", value: "value", placeholder: "placeholder", disabled: "disabled", size: "size", showClearButton: "showClearButton", open: "open" }, outputs: { valueChange: "valueChange" }, host: { listeners: { "document:mousedown": "onDocumentMouseDown($event.target)" } }, queries: [{ propertyName: "headerTemplate", first: true, predicate: ["header"], descendants: true }], usesInheritance: true, ngImport: i0, template: "<riv-input-label\n [label]=\"label\"\n [help]=\"help\"\n [required]=\"required\"\n [state]=\"state\"\n [errorMessage]=\"errorMessage\"\n [labelActionText]=\"labelActionText\"\n (labelAction)=\"labelAction.emit($event)\"\n>\n <div\n #trigger\n class=\"trigger\"\n [class.xsmall]=\"size === 'xsmall'\"\n [class.small]=\"size === 'small'\"\n [class.large]=\"size === 'large'\"\n [class.xlarge]=\"size === 'xlarge'\"\n [class.warning]=\"state === 'warning'\"\n [class.error]=\"state === 'error'\"\n [class.disabled]=\"disabled\"\n >\n <input\n #input\n class=\"value\"\n [placeholder]=\"placeholder\"\n [value]=\"inputText\"\n [disabled]=\"disabled\"\n [attr.aria-label]=\"label || null\"\n [attr.aria-expanded]=\"open$ | async\"\n role=\"combobox\"\n aria-haspopup=\"dialog\"\n aria-autocomplete=\"none\"\n (input)=\"onInputChange(input.value)\"\n (blur)=\"onInputBlur($event)\"\n (focus)=\"onInputFocus()\"\n (keydown.enter)=\"input.blur(); open$.next(false); $event.preventDefault()\"\n type=\"text\"\n autocomplete=\"off\"\n spellcheck=\"false\"\n />\n <button\n class=\"chevron\"\n (mousedown)=\"$event.preventDefault()\"\n (click)=\"toggleCalendar()\"\n [disabled]=\"disabled\"\n [attr.aria-label]=\"(open$ | async) ? 'Close calendar' : 'Open calendar'\"\n type=\"button\"\n tabindex=\"-1\"\n >\n <riv-icon [name]=\"'Calendar'\" [size]=\"16\"></riv-icon>\n </button>\n </div>\n</riv-input-label>\n<ng-container *ngIf=\"open$ | async\">\n <riv-callout\n *riv-overlay\n [anchor]=\"trigger\"\n [isModal]=\"false\"\n [showCaret]=\"false\"\n [theme]=\"'light'\"\n [allowedPositions]=\"[\n 'top-left',\n 'top-right',\n 'bottom-right',\n 'bottom-left'\n ]\"\n [preferredPosition]=\"'bottom-right'\"\n (close)=\"open$.next(false)\"\n >\n <div (mousedown)=\"$event.preventDefault()\">\n <header *ngIf=\"headerTemplate\">\n <ng-container *ngTemplateOutlet=\"headerTemplate\"></ng-container>\n </header>\n <div class=\"content\">\n <riv-calendar\n [activeYearMonth]=\"activeYearMonth\"\n (activeYearMonthChange)=\"activeYearMonth = $event\"\n [displayMin]=\"min\"\n [displayMax]=\"max\"\n [selectableMin]=\"min\"\n [selectableMax]=\"max\"\n [selectedValue]=\"previewValue ?? value\"\n (dateSelect)=\"onDateSelect($event); input.blur()\"\n ></riv-calendar>\n </div>\n <footer *ngIf=\"showClearButton\" class=\"buttons\">\n <button\n rivButton\n [size]=\"'small'\"\n [variant]=\"'ghost'\"\n (click)=\"clearValue(); input.blur()\"\n type=\"button\"\n >\n Clear\n </button>\n </footer>\n </div>\n </riv-callout>\n</ng-container>\n", styles: [".trigger{width:100%;border:var(--border-width) solid var(--border-light);border-radius:var(--border-radius-small);display:flex;gap:var(--size-small);background-color:var(--surface-light-0);padding-left:var(--size-small);position:relative}.trigger:focus-within{outline:none;border:var(--border-width) solid var(--purp-60)}.trigger.disabled{color:var(--type-light-disabled);background-color:var(--surface-light-1)}.value{font:var(--input-medium);color:var(--type-light-high-contrast);padding:var(--size-small) 0;flex-grow:1;text-align:left;overflow:hidden;text-overflow:ellipsis;white-space:pre;border:none;background:transparent;outline:none;width:100%}.value::placeholder{color:var(--type-light-disabled)}.value:disabled{color:var(--type-light-disabled)}.trigger.xsmall .value{font:var(--input-small);padding:var(--size-xsmall) 0}.trigger.small .value{font:var(--input-small)}.trigger.large .value{font:var(--input-large);padding:var(--size-medium) var(--size-xsmall)}.trigger.xlarge .value{font:var(--input-large);padding:var(--size-large) var(--size-small)}.chevron{display:flex;justify-content:center;align-items:center;padding:var(--size-xsmall) calc(var(--base-grid-size) * 1.5);border:none;background:transparent;cursor:pointer;color:var(--type-light-high-contrast)}.chevron:disabled{color:var(--type-light-disabled);cursor:not-allowed}.trigger.warning{border-color:var(--surface-dark-caution)}.trigger.error{border-color:var(--surface-dark-danger);box-shadow:inset 0 0 0 var(--border-width-large) var(--surface-dark-danger)}.content{padding:var(--size-large)}.buttons{padding:var(--size-small);display:flex;justify-content:space-between}\n"], dependencies: [{ kind: "directive", type: i1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i1.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "component", type: i2.ButtonComponent, selector: "[rivButton]", inputs: ["locked", "disabled", "loading", "full", "size", "variant", "icon", "iconPosition", "current"] }, { kind: "component", type: i3.CalendarComponent, selector: "riv-calendar", inputs: ["activeYearMonth", "displayMin", "displayMax", "selectableMin", "selectableMax", "omitRange", "selectedValue"], outputs: ["activeYearMonthChange", "dateSelect"] }, { kind: "component", type: i4.CalloutComponent, selector: "riv-callout", inputs: ["anchor", "isModal", "preferredPosition", "allowedPositions", "fallbackDirection", "showCaret", "theme"], outputs: ["close"] }, { kind: "component", type: i5.IconComponent, selector: "riv-icon", inputs: ["name", "fillColor", "size", "customSize", "strokeWidth"] }, { kind: "component", type: i6.InputLabelComponent, selector: "riv-input-label", inputs: ["label", "help", "required", "labelActionText", "errorMessage", "state"], outputs: ["labelAction"] }, { kind: "directive", type: i7.OverlayDirective, selector: "[riv-overlay]" }, { kind: "pipe", type: i1.AsyncPipe, name: "async" }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
|
|
55
144
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.3.0", ngImport: i0, type: DateComponent, decorators: [{
|
|
56
145
|
type: Component,
|
|
57
|
-
args: [{ selector: 'riv-date', changeDetection: ChangeDetectionStrategy.OnPush, template: "<riv-input-label\n [label]=\"label\"\n [help]=\"help\"\n [required]=\"required\"\n [state]=\"state\"\n [errorMessage]=\"errorMessage\"\n [labelActionText]=\"labelActionText\"\n (labelAction)=\"labelAction.emit($event)\"\n>\n <
|
|
58
|
-
}], propDecorators: { min: [{
|
|
146
|
+
args: [{ selector: 'riv-date', changeDetection: ChangeDetectionStrategy.OnPush, template: "<riv-input-label\n [label]=\"label\"\n [help]=\"help\"\n [required]=\"required\"\n [state]=\"state\"\n [errorMessage]=\"errorMessage\"\n [labelActionText]=\"labelActionText\"\n (labelAction)=\"labelAction.emit($event)\"\n>\n <div\n #trigger\n class=\"trigger\"\n [class.xsmall]=\"size === 'xsmall'\"\n [class.small]=\"size === 'small'\"\n [class.large]=\"size === 'large'\"\n [class.xlarge]=\"size === 'xlarge'\"\n [class.warning]=\"state === 'warning'\"\n [class.error]=\"state === 'error'\"\n [class.disabled]=\"disabled\"\n >\n <input\n #input\n class=\"value\"\n [placeholder]=\"placeholder\"\n [value]=\"inputText\"\n [disabled]=\"disabled\"\n [attr.aria-label]=\"label || null\"\n [attr.aria-expanded]=\"open$ | async\"\n role=\"combobox\"\n aria-haspopup=\"dialog\"\n aria-autocomplete=\"none\"\n (input)=\"onInputChange(input.value)\"\n (blur)=\"onInputBlur($event)\"\n (focus)=\"onInputFocus()\"\n (keydown.enter)=\"input.blur(); open$.next(false); $event.preventDefault()\"\n type=\"text\"\n autocomplete=\"off\"\n spellcheck=\"false\"\n />\n <button\n class=\"chevron\"\n (mousedown)=\"$event.preventDefault()\"\n (click)=\"toggleCalendar()\"\n [disabled]=\"disabled\"\n [attr.aria-label]=\"(open$ | async) ? 'Close calendar' : 'Open calendar'\"\n type=\"button\"\n tabindex=\"-1\"\n >\n <riv-icon [name]=\"'Calendar'\" [size]=\"16\"></riv-icon>\n </button>\n </div>\n</riv-input-label>\n<ng-container *ngIf=\"open$ | async\">\n <riv-callout\n *riv-overlay\n [anchor]=\"trigger\"\n [isModal]=\"false\"\n [showCaret]=\"false\"\n [theme]=\"'light'\"\n [allowedPositions]=\"[\n 'top-left',\n 'top-right',\n 'bottom-right',\n 'bottom-left'\n ]\"\n [preferredPosition]=\"'bottom-right'\"\n (close)=\"open$.next(false)\"\n >\n <div (mousedown)=\"$event.preventDefault()\">\n <header *ngIf=\"headerTemplate\">\n <ng-container *ngTemplateOutlet=\"headerTemplate\"></ng-container>\n </header>\n <div class=\"content\">\n <riv-calendar\n [activeYearMonth]=\"activeYearMonth\"\n (activeYearMonthChange)=\"activeYearMonth = $event\"\n [displayMin]=\"min\"\n [displayMax]=\"max\"\n [selectableMin]=\"min\"\n [selectableMax]=\"max\"\n [selectedValue]=\"previewValue ?? value\"\n (dateSelect)=\"onDateSelect($event); input.blur()\"\n ></riv-calendar>\n </div>\n <footer *ngIf=\"showClearButton\" class=\"buttons\">\n <button\n rivButton\n [size]=\"'small'\"\n [variant]=\"'ghost'\"\n (click)=\"clearValue(); input.blur()\"\n type=\"button\"\n >\n Clear\n </button>\n </footer>\n </div>\n </riv-callout>\n</ng-container>\n", styles: [".trigger{width:100%;border:var(--border-width) solid var(--border-light);border-radius:var(--border-radius-small);display:flex;gap:var(--size-small);background-color:var(--surface-light-0);padding-left:var(--size-small);position:relative}.trigger:focus-within{outline:none;border:var(--border-width) solid var(--purp-60)}.trigger.disabled{color:var(--type-light-disabled);background-color:var(--surface-light-1)}.value{font:var(--input-medium);color:var(--type-light-high-contrast);padding:var(--size-small) 0;flex-grow:1;text-align:left;overflow:hidden;text-overflow:ellipsis;white-space:pre;border:none;background:transparent;outline:none;width:100%}.value::placeholder{color:var(--type-light-disabled)}.value:disabled{color:var(--type-light-disabled)}.trigger.xsmall .value{font:var(--input-small);padding:var(--size-xsmall) 0}.trigger.small .value{font:var(--input-small)}.trigger.large .value{font:var(--input-large);padding:var(--size-medium) var(--size-xsmall)}.trigger.xlarge .value{font:var(--input-large);padding:var(--size-large) var(--size-small)}.chevron{display:flex;justify-content:center;align-items:center;padding:var(--size-xsmall) calc(var(--base-grid-size) * 1.5);border:none;background:transparent;cursor:pointer;color:var(--type-light-high-contrast)}.chevron:disabled{color:var(--type-light-disabled);cursor:not-allowed}.trigger.warning{border-color:var(--surface-dark-caution)}.trigger.error{border-color:var(--surface-dark-danger);box-shadow:inset 0 0 0 var(--border-width-large) var(--surface-dark-danger)}.content{padding:var(--size-large)}.buttons{padding:var(--size-small);display:flex;justify-content:space-between}\n"] }]
|
|
147
|
+
}], ctorParameters: function () { return [{ type: i0.ChangeDetectorRef }, { type: i0.ElementRef }]; }, propDecorators: { min: [{
|
|
59
148
|
type: Input
|
|
60
149
|
}], max: [{
|
|
61
150
|
type: Input
|
|
@@ -76,6 +165,9 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.3.0", ngImpor
|
|
|
76
165
|
type: Input
|
|
77
166
|
}], valueChange: [{
|
|
78
167
|
type: Output
|
|
168
|
+
}], onDocumentMouseDown: [{
|
|
169
|
+
type: HostListener,
|
|
170
|
+
args: ['document:mousedown', ['$event.target']]
|
|
79
171
|
}] } });
|
|
80
172
|
(function (DateComponent) {
|
|
81
173
|
DateComponent.Sizes = [
|
|
@@ -85,5 +177,30 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.3.0", ngImpor
|
|
|
85
177
|
'large',
|
|
86
178
|
'xlarge',
|
|
87
179
|
];
|
|
180
|
+
// Accepts MM/DD/YYYY, M/D/YY, and YYYY-MM-DD with /, -, or . separators.
|
|
181
|
+
// A 4-digit leading segment is treated as year.
|
|
182
|
+
function parseDate(input) {
|
|
183
|
+
const parts = input.trim().split(/[/.-]/);
|
|
184
|
+
if (parts.length !== 3)
|
|
185
|
+
return undefined;
|
|
186
|
+
const nums = parts.map(p => parseInt(p, 10));
|
|
187
|
+
if (nums.some(isNaN))
|
|
188
|
+
return undefined;
|
|
189
|
+
let [year, month, day] = parts[0].length === 4 ? nums : [nums[2], nums[0], nums[1]];
|
|
190
|
+
if (parts[0].length !== 4 && year < 100)
|
|
191
|
+
year += year < 50 ? 2000 : 1900;
|
|
192
|
+
const date = new Date(year, month - 1, day);
|
|
193
|
+
return date.getFullYear() === year &&
|
|
194
|
+
date.getMonth() === month - 1 &&
|
|
195
|
+
date.getDate() === day
|
|
196
|
+
? date
|
|
197
|
+
: undefined;
|
|
198
|
+
}
|
|
199
|
+
DateComponent.parseDate = parseDate;
|
|
200
|
+
function isValidDate(date, min, max) {
|
|
201
|
+
const time = date.getTime();
|
|
202
|
+
return time >= min.getTime() && time <= max.getTime();
|
|
203
|
+
}
|
|
204
|
+
DateComponent.isValidDate = isValidDate;
|
|
88
205
|
})(DateComponent || (DateComponent = {}));
|
|
89
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGF0ZS5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9yaXYvc3JjL2xpYi9pbnB1dC9kYXRlL2RhdGUuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvcml2L3NyYy9saWIvaW5wdXQvZGF0ZS9kYXRlLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFDTCx1QkFBdUIsRUFDdkIsU0FBUyxFQUNULFlBQVksRUFDWixZQUFZLEVBQ1osS0FBSyxFQUNMLE1BQU0sR0FFUCxNQUFNLGVBQWUsQ0FBQztBQUN2QixPQUFPLEVBQUUsU0FBUyxFQUFFLE1BQU0sU0FBUyxDQUFDO0FBQ3BDLE9BQU8sRUFBRSxlQUFlLEVBQUUsTUFBTSxNQUFNLENBQUM7QUFDdkMsT0FBTyxFQUFFLGlCQUFpQixFQUFFLE1BQU0sZ0NBQWdDLENBQUM7QUFDbkUsT0FBTyxFQUFFLG1CQUFtQixFQUFFLE1BQU0sc0NBQXNDLENBQUM7Ozs7Ozs7Ozs7QUFRM0UsTUFBTSxPQUFPLGFBQWMsU0FBUSxtQkFBbUI7SUFOdEQ7O1FBUUUsUUFBRyxHQUFTLGlCQUFpQixDQUFDLFVBQVUsQ0FBQztRQUd6QyxRQUFHLEdBQVMsaUJBQWlCLENBQUMsVUFBVSxDQUFDO1FBbUJ6QyxnQkFBVyxHQUFXLGFBQWEsQ0FBQztRQUdwQyxhQUFRLEdBQVksS0FBSyxDQUFDO1FBRzFCLFNBQUksR0FBdUIsUUFBUSxDQUFDO1FBR3BDLG9CQUFlLEdBQVksSUFBSSxDQUFDO1FBS2hDLG9CQUFlLEdBQUcsU0FBUyxDQUFDLEtBQUssQ0FBQyxJQUFJLElBQUksRUFBRSxDQUFDLENBQUM7UUFFckMsVUFBSyxHQUFHLElBQUksZUFBZSxDQUFVLEtBQUssQ0FBQyxDQUFDO1FBVXJELGdCQUFXLEdBQUcsSUFBSSxZQUFZLEVBQW9CLENBQUM7S0FNcEQ7SUFqREMsSUFDSSxLQUFLLENBQUMsQ0FBbUI7UUFDM0IsSUFBSSxJQUFJLENBQUMsTUFBTSxFQUFFLE9BQU8sRUFBRSxLQUFLLENBQUMsRUFBRSxPQUFPLEVBQUU7WUFBRSxPQUFPO1FBQ3BELElBQUksQ0FBQyxNQUFNLEdBQUcsQ0FBQyxDQUFDO1FBQ2hCLElBQUksQ0FBQyxFQUFFO1lBQ0wsTUFBTSxLQUFLLEdBQUcsU0FBUyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQztZQUNqQyxJQUFJLEtBQUssQ0FBQyxPQUFPLEVBQUUsS0FBSyxJQUFJLENBQUMsZUFBZSxDQUFDLE9BQU8sRUFBRSxFQUFFO2dCQUN0RCxJQUFJLENBQUMsZUFBZSxHQUFHLEtBQUssQ0FBQzthQUM5QjtTQUNGO0lBQ0gsQ0FBQztJQUNELElBQUksS0FBSztRQUNQLE9BQU8sSUFBSSxDQUFDLE1BQU0sQ0FBQztJQUNyQixDQUFDO0lBcUJELElBQ0ksSUFBSSxDQUFDLENBQVU7UUFDakIsSUFBSSxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDckIsQ0FBQztJQUNELElBQUksSUFBSTtRQUNOLE9BQU8sSUFBSSxDQUFDLEtBQUssQ0FBQyxRQUFRLEVBQUUsQ0FBQztJQUMvQixDQUFDO0lBS0QsVUFBVTtRQUNSLElBQUksQ0FBQyxXQUFXLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxDQUFDO1FBQ2pDLElBQUksQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDO0lBQ3pCLENBQUM7OzBHQXZEVSxhQUFhOzhGQUFiLGFBQWEsNFhDcEIxQix5ckVBNEVBOzJGRHhEYSxhQUFhO2tCQU56QixTQUFTOytCQUNFLFVBQVUsbUJBR0gsdUJBQXVCLENBQUMsTUFBTTs4QkFJL0MsR0FBRztzQkFERixLQUFLO2dCQUlOLEdBQUc7c0JBREYsS0FBSztnQkFJRixLQUFLO3NCQURSLEtBQUs7Z0JBaUJOLFdBQVc7c0JBRFYsS0FBSztnQkFJTixRQUFRO3NCQURQLEtBQUs7Z0JBSU4sSUFBSTtzQkFESCxLQUFLO2dCQUlOLGVBQWU7c0JBRGQsS0FBSztnQkFJTixjQUFjO3NCQURiLFlBQVk7dUJBQUMsUUFBUTtnQkFPbEIsSUFBSTtzQkFEUCxLQUFLO2dCQVNOLFdBQVc7c0JBRFYsTUFBTTs7QUFTVCxXQUFpQixhQUFhO0lBQ2YsbUJBQUssR0FBRztRQUNuQixRQUFRO1FBQ1IsT0FBTztRQUNQLFFBQVE7UUFDUixPQUFPO1FBQ1AsUUFBUTtLQUNBLENBQUM7QUFFYixDQUFDLEVBVGdCLGFBQWEsS0FBYixhQUFhLFFBUzdCIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtcbiAgQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3ksXG4gIENvbXBvbmVudCxcbiAgQ29udGVudENoaWxkLFxuICBFdmVudEVtaXR0ZXIsXG4gIElucHV0LFxuICBPdXRwdXQsXG4gIFRlbXBsYXRlUmVmLFxufSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IHRpbWVNb250aCB9IGZyb20gJ2QzLXRpbWUnO1xuaW1wb3J0IHsgQmVoYXZpb3JTdWJqZWN0IH0gZnJvbSAncnhqcyc7XG5pbXBvcnQgeyBDYWxlbmRhckNvbXBvbmVudCB9IGZyb20gJy4uL2NhbGVuZGFyL2NhbGVuZGFyLmNvbXBvbmVudCc7XG5pbXBvcnQgeyBJbnB1dExhYmVsQ29tcG9uZW50IH0gZnJvbSAnLi4vaW5wdXQtbGFiZWwvaW5wdXQtbGFiZWwuY29tcG9uZW50JztcblxuQENvbXBvbmVudCh7XG4gIHNlbGVjdG9yOiAncml2LWRhdGUnLFxuICB0ZW1wbGF0ZVVybDogJy4vZGF0ZS5jb21wb25lbnQuaHRtbCcsXG4gIHN0eWxlVXJsczogWycuL2RhdGUuY29tcG9uZW50LmNzcyddLFxuICBjaGFuZ2VEZXRlY3Rpb246IENoYW5nZURldGVjdGlvblN0cmF0ZWd5Lk9uUHVzaCxcbn0pXG5leHBvcnQgY2xhc3MgRGF0ZUNvbXBvbmVudCBleHRlbmRzIElucHV0TGFiZWxDb21wb25lbnQge1xuICBASW5wdXQoKVxuICBtaW46IERhdGUgPSBDYWxlbmRhckNvbXBvbmVudC5kZWZhdWx0TWluO1xuXG4gIEBJbnB1dCgpXG4gIG1heDogRGF0ZSA9IENhbGVuZGFyQ29tcG9uZW50LmRlZmF1bHRNYXg7XG5cbiAgQElucHV0KClcbiAgc2V0IHZhbHVlKHY6IERhdGUgfCB1bmRlZmluZWQpIHtcbiAgICBpZiAodGhpcy5fdmFsdWU/LmdldFRpbWUoKSA9PT0gdj8uZ2V0VGltZSgpKSByZXR1cm47XG4gICAgdGhpcy5fdmFsdWUgPSB2O1xuICAgIGlmICh2KSB7XG4gICAgICBjb25zdCBtb250aCA9IHRpbWVNb250aC5mbG9vcih2KTtcbiAgICAgIGlmIChtb250aC5nZXRUaW1lKCkgIT09IHRoaXMuYWN0aXZlWWVhck1vbnRoLmdldFRpbWUoKSkge1xuICAgICAgICB0aGlzLmFjdGl2ZVllYXJNb250aCA9IG1vbnRoO1xuICAgICAgfVxuICAgIH1cbiAgfVxuICBnZXQgdmFsdWUoKTogRGF0ZSB8IHVuZGVmaW5lZCB7XG4gICAgcmV0dXJuIHRoaXMuX3ZhbHVlO1xuICB9XG4gIHByaXZhdGUgX3ZhbHVlPzogRGF0ZTtcblxuICBASW5wdXQoKVxuICBwbGFjZWhvbGRlcjogc3RyaW5nID0gJ1NlbGVjdCBkYXRlJztcblxuICBASW5wdXQoKVxuICBkaXNhYmxlZDogYm9vbGVhbiA9IGZhbHNlO1xuXG4gIEBJbnB1dCgpXG4gIHNpemU6IERhdGVDb21wb25lbnQuU2l6ZSA9ICdtZWRpdW0nO1xuXG4gIEBJbnB1dCgpXG4gIHNob3dDbGVhckJ1dHRvbjogYm9vbGVhbiA9IHRydWU7XG5cbiAgQENvbnRlbnRDaGlsZCgnaGVhZGVyJylcbiAgaGVhZGVyVGVtcGxhdGU/OiBUZW1wbGF0ZVJlZjx2b2lkPjtcblxuICBhY3RpdmVZZWFyTW9udGggPSB0aW1lTW9udGguZmxvb3IobmV3IERhdGUoKSk7XG5cbiAgcmVhZG9ubHkgb3BlbiQgPSBuZXcgQmVoYXZpb3JTdWJqZWN0PGJvb2xlYW4+KGZhbHNlKTtcbiAgQElucHV0KClcbiAgc2V0IG9wZW4odjogYm9vbGVhbikge1xuICAgIHRoaXMub3BlbiQubmV4dCh2KTtcbiAgfVxuICBnZXQgb3BlbigpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdGhpcy5vcGVuJC5nZXRWYWx1ZSgpO1xuICB9XG5cbiAgQE91dHB1dCgpXG4gIHZhbHVlQ2hhbmdlID0gbmV3IEV2ZW50RW1pdHRlcjxEYXRlIHwgdW5kZWZpbmVkPigpO1xuXG4gIGNsZWFyVmFsdWUoKTogdm9pZCB7XG4gICAgdGhpcy52YWx1ZUNoYW5nZS5lbWl0KHVuZGVmaW5lZCk7XG4gICAgdGhpcy5vcGVuJC5uZXh0KGZhbHNlKTtcbiAgfVxufVxuXG5leHBvcnQgbmFtZXNwYWNlIERhdGVDb21wb25lbnQge1xuICBleHBvcnQgY29uc3QgU2l6ZXMgPSBbXG4gICAgJ3hzbWFsbCcsXG4gICAgJ3NtYWxsJyxcbiAgICAnbWVkaXVtJyxcbiAgICAnbGFyZ2UnLFxuICAgICd4bGFyZ2UnLFxuICBdIGFzIGNvbnN0O1xuICBleHBvcnQgdHlwZSBTaXplID0gKHR5cGVvZiBTaXplcylbbnVtYmVyXTtcbn1cbiIsIjxyaXYtaW5wdXQtbGFiZWxcbiAgW2xhYmVsXT1cImxhYmVsXCJcbiAgW2hlbHBdPVwiaGVscFwiXG4gIFtyZXF1aXJlZF09XCJyZXF1aXJlZFwiXG4gIFtzdGF0ZV09XCJzdGF0ZVwiXG4gIFtlcnJvck1lc3NhZ2VdPVwiZXJyb3JNZXNzYWdlXCJcbiAgW2xhYmVsQWN0aW9uVGV4dF09XCJsYWJlbEFjdGlvblRleHRcIlxuICAobGFiZWxBY3Rpb24pPVwibGFiZWxBY3Rpb24uZW1pdCgkZXZlbnQpXCJcbj5cbiAgPGJ1dHRvblxuICAgICN0cmlnZ2VyXG4gICAgY2xhc3M9XCJ0cmlnZ2VyXCJcbiAgICBbY2xhc3MueHNtYWxsXT1cInNpemUgPT09ICd4c21hbGwnXCJcbiAgICBbY2xhc3Muc21hbGxdPVwic2l6ZSA9PT0gJ3NtYWxsJ1wiXG4gICAgW2NsYXNzLmxhcmdlXT1cInNpemUgPT09ICdsYXJnZSdcIlxuICAgIFtjbGFzcy54bGFyZ2VdPVwic2l6ZSA9PT0gJ3hsYXJnZSdcIlxuICAgIFtjbGFzcy53YXJuaW5nXT1cInN0YXRlID09PSAnd2FybmluZydcIlxuICAgIFtjbGFzcy5lcnJvcl09XCJzdGF0ZSA9PT0gJ2Vycm9yJ1wiXG4gICAgKGNsaWNrKT1cIm9wZW4kLm5leHQodHJ1ZSlcIlxuICAgIFtkaXNhYmxlZF09XCJkaXNhYmxlZFwiXG4gICAgdHlwZT1cImJ1dHRvblwiXG4gID5cbiAgICA8bmctY29udGFpbmVyICpuZ0lmPVwidmFsdWU7IGVsc2UgcGxhY2Vob2xkZXJWYWx1ZVwiPlxuICAgICAgPHNwYW4gY2xhc3M9XCJ2YWx1ZVwiPnt7IHZhbHVlIHwgcml2RGF0ZSB9fTwvc3Bhbj5cbiAgICA8L25nLWNvbnRhaW5lcj5cbiAgICA8bmctdGVtcGxhdGUgI3BsYWNlaG9sZGVyVmFsdWU+XG4gICAgICA8c3BhbiBjbGFzcz1cInZhbHVlIHBsYWNlaG9sZGVyXCI+e3sgcGxhY2Vob2xkZXIgfX08L3NwYW4+XG4gICAgPC9uZy10ZW1wbGF0ZT5cbiAgICA8c3BhbiBjbGFzcz1cImNoZXZyb25cIj5cbiAgICAgIDxyaXYtaWNvbiBbbmFtZV09XCInQ2FsZW5kYXInXCIgW3NpemVdPVwiMTZcIj48L3Jpdi1pY29uPlxuICAgIDwvc3Bhbj5cbiAgPC9idXR0b24+XG48L3Jpdi1pbnB1dC1sYWJlbD5cbjxuZy1jb250YWluZXIgKm5nSWY9XCJvcGVuJCB8IGFzeW5jXCI+XG4gIDxyaXYtY2FsbG91dFxuICAgICpyaXYtb3ZlcmxheVxuICAgIFthbmNob3JdPVwidHJpZ2dlclwiXG4gICAgW3Nob3dDYXJldF09XCJmYWxzZVwiXG4gICAgW3RoZW1lXT1cIidsaWdodCdcIlxuICAgIFthbGxvd2VkUG9zaXRpb25zXT1cIltcbiAgICAgICd0b3AtbGVmdCcsXG4gICAgICAndG9wLXJpZ2h0JyxcbiAgICAgICdib3R0b20tcmlnaHQnLFxuICAgICAgJ2JvdHRvbS1sZWZ0J1xuICAgIF1cIlxuICAgIFtwcmVmZXJyZWRQb3NpdGlvbl09XCInYm90dG9tLXJpZ2h0J1wiXG4gICAgKGNsb3NlKT1cIm9wZW4kLm5leHQoZmFsc2UpXCJcbiAgPlxuICAgIDxoZWFkZXIgKm5nSWY9XCJoZWFkZXJUZW1wbGF0ZVwiPlxuICAgICAgPG5nLWNvbnRhaW5lciAqbmdUZW1wbGF0ZU91dGxldD1cImhlYWRlclRlbXBsYXRlXCI+PC9uZy1jb250YWluZXI+XG4gICAgPC9oZWFkZXI+XG4gICAgPGRpdiBjbGFzcz1cImNvbnRlbnRcIj5cbiAgICAgIDxyaXYtY2FsZW5kYXJcbiAgICAgICAgW2FjdGl2ZVllYXJNb250aF09XCJhY3RpdmVZZWFyTW9udGhcIlxuICAgICAgICAoYWN0aXZlWWVhck1vbnRoQ2hhbmdlKT1cImFjdGl2ZVllYXJNb250aCA9ICRldmVudFwiXG4gICAgICAgIFtkaXNwbGF5TWluXT1cIm1pblwiXG4gICAgICAgIFtkaXNwbGF5TWF4XT1cIm1heFwiXG4gICAgICAgIFtzZWxlY3RhYmxlTWluXT1cIm1pblwiXG4gICAgICAgIFtzZWxlY3RhYmxlTWF4XT1cIm1heFwiXG4gICAgICAgIFtzZWxlY3RlZFZhbHVlXT1cInZhbHVlXCJcbiAgICAgICAgKGRhdGVTZWxlY3QpPVwidmFsdWVDaGFuZ2UubmV4dCgkZXZlbnQpOyBvcGVuJC5uZXh0KGZhbHNlKVwiXG4gICAgICA+PC9yaXYtY2FsZW5kYXI+XG4gICAgPC9kaXY+XG4gICAgPGZvb3RlciAqbmdJZj1cInNob3dDbGVhckJ1dHRvblwiIGNsYXNzPVwiYnV0dG9uc1wiPlxuICAgICAgPGJ1dHRvblxuICAgICAgICByaXZCdXR0b25cbiAgICAgICAgW3NpemVdPVwiJ3NtYWxsJ1wiXG4gICAgICAgIFt2YXJpYW50XT1cIidnaG9zdCdcIlxuICAgICAgICAoY2xpY2spPVwiY2xlYXJWYWx1ZSgpXCJcbiAgICAgICAgdHlwZT1cImJ1dHRvblwiXG4gICAgICA+XG4gICAgICAgIENsZWFyXG4gICAgICA8L2J1dHRvbj5cbiAgICA8L2Zvb3Rlcj5cbiAgPC9yaXYtY2FsbG91dD5cbjwvbmctY29udGFpbmVyPlxuIl19
|
|
206
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGF0ZS5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9yaXYvc3JjL2xpYi9pbnB1dC9kYXRlL2RhdGUuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvcml2L3NyYy9saWIvaW5wdXQvZGF0ZS9kYXRlLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFDTCx1QkFBdUIsRUFFdkIsU0FBUyxFQUNULFlBQVksRUFFWixZQUFZLEVBQ1osWUFBWSxFQUNaLEtBQUssRUFDTCxNQUFNLEdBRVAsTUFBTSxlQUFlLENBQUM7QUFDdkIsT0FBTyxFQUFFLE9BQU8sRUFBRSxTQUFTLEVBQUUsTUFBTSxTQUFTLENBQUM7QUFDN0MsT0FBTyxFQUFFLGVBQWUsRUFBRSxNQUFNLE1BQU0sQ0FBQztBQUN2QyxPQUFPLEVBQUUsUUFBUSxFQUFFLE1BQU0sOEJBQThCLENBQUM7QUFDeEQsT0FBTyxFQUFFLGlCQUFpQixFQUFFLE1BQU0sZ0NBQWdDLENBQUM7QUFDbkUsT0FBTyxFQUFFLG1CQUFtQixFQUFFLE1BQU0sc0NBQXNDLENBQUM7Ozs7Ozs7OztBQVEzRSxNQUFNLE9BQU8sYUFBYyxTQUFRLG1CQUFtQjtJQXVEcEQsWUFDbUIsR0FBc0IsRUFDdEIsSUFBNkI7UUFFOUMsS0FBSyxFQUFFLENBQUM7UUFIUyxRQUFHLEdBQUgsR0FBRyxDQUFtQjtRQUN0QixTQUFJLEdBQUosSUFBSSxDQUF5QjtRQXZEaEQsUUFBRyxHQUFTLGlCQUFpQixDQUFDLFVBQVUsQ0FBQztRQUd6QyxRQUFHLEdBQVMsaUJBQWlCLENBQUMsVUFBVSxDQUFDO1FBaUJ6QyxnQkFBVyxHQUFXLGFBQWEsQ0FBQztRQUdwQyxhQUFRLEdBQVksS0FBSyxDQUFDO1FBRzFCLFNBQUksR0FBdUIsUUFBUSxDQUFDO1FBR3BDLG9CQUFlLEdBQVksSUFBSSxDQUFDO1FBS2hDLG9C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QUMsT0FBTyxFQUFFLENBQUM7SUFDeEQsQ0FBQztJQUhlLHlCQUFXLGNBRzFCLENBQUE7QUFDSCxDQUFDLEVBbkNnQixhQUFhLEtBQWIsYUFBYSxRQW1DN0IiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge1xuICBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneSxcbiAgQ2hhbmdlRGV0ZWN0b3JSZWYsXG4gIENvbXBvbmVudCxcbiAgQ29udGVudENoaWxkLFxuICBFbGVtZW50UmVmLFxuICBFdmVudEVtaXR0ZXIsXG4gIEhvc3RMaXN0ZW5lcixcbiAgSW5wdXQsXG4gIE91dHB1dCxcbiAgVGVtcGxhdGVSZWYsXG59IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgdGltZURheSwgdGltZU1vbnRoIH0gZnJvbSAnZDMtdGltZSc7XG5pbXBvcnQgeyBCZWhhdmlvclN1YmplY3QgfSBmcm9tICdyeGpzJztcbmltcG9ydCB7IERhdGVQaXBlIH0gZnJvbSAnLi4vLi4vZm9ybWF0L3BpcGVzL2RhdGUucGlwZSc7XG5pbXBvcnQgeyBDYWxlbmRhckNvbXBvbmVudCB9IGZyb20gJy4uL2NhbGVuZGFyL2NhbGVuZGFyLmNvbXBvbmVudCc7XG5pbXBvcnQgeyBJbnB1dExhYmVsQ29tcG9uZW50IH0gZnJvbSAnLi4vaW5wdXQtbGFiZWwvaW5wdXQtbGFiZWwuY29tcG9uZW50JztcblxuQENvbXBvbmVudCh7XG4gIHNlbGVjdG9yOiAncml2LWRhdGUnLFxuICB0ZW1wbGF0ZVVybDogJy4vZGF0ZS5jb21wb25lbnQuaHRtbCcsXG4gIHN0eWxlVXJsczogWycuL2RhdGUuY29tcG9uZW50LmNzcyddLFxuICBjaGFuZ2VEZXRlY3Rpb246IENoYW5nZURldGVjdGlvblN0cmF0ZWd5Lk9uUHVzaCxcbn0pXG5leHBvcnQgY2xhc3MgRGF0ZUNvbXBvbmVudCBleHRlbmRzIElucHV0TGFiZWxDb21wb25lbnQge1xuICBASW5wdXQoKVxuICBtaW46IERhdGUgPSBDYWxlbmRhckNvbXBvbmVudC5kZWZhdWx0TWluO1xuXG4gIEBJbnB1dCgpXG4gIG1heDogRGF0ZSA9IENhbGVuZGFyQ29tcG9uZW50LmRlZmF1bHRNYXg7XG5cbiAgQElucHV0KClcbiAgc2V0IHZhbHVlKHY6IERhdGUgfCB1bmRlZmluZWQpIHtcbiAgICBpZiAodGhpcy5fdmFsdWU/LmdldFRpbWUoKSA9PT0gdj8uZ2V0VGltZSgpKSByZXR1cm47XG4gICAgdGhpcy5fdmFsdWUgPSB2O1xuICAgIC8vIFNraXAgdGV4dCBzeW5jIHdoaWxlIHR5cGluZyBzbyB3ZSBkb24ndCBzdG9tcCB0aGUgdXNlcidzIGluLXByb2dyZXNzIGlucHV0LlxuICAgIGlmICghdGhpcy5oYXNGb2N1cykgdGhpcy5pbnB1dFRleHQgPSB2ID8gdGhpcy5mb3JtYXRWYWx1ZSh2KSA6ICcnO1xuICAgIGlmICh2KSB0aGlzLnNldEFjdGl2ZU1vbnRoKHYpO1xuICAgIHRoaXMuY2RyLm1hcmtGb3JDaGVjaygpO1xuICB9XG4gIGdldCB2YWx1ZSgpOiBEYXRlIHwgdW5kZWZpbmVkIHtcbiAgICByZXR1cm4gdGhpcy5fdmFsdWU7XG4gIH1cbiAgcHJpdmF0ZSBfdmFsdWU/OiBEYXRlO1xuXG4gIEBJbnB1dCgpXG4gIHBsYWNlaG9sZGVyOiBzdHJpbmcgPSAnU2VsZWN0IGRhdGUnO1xuXG4gIEBJbnB1dCgpXG4gIGRpc2FibGVkOiBib29sZWFuID0gZmFsc2U7XG5cbiAgQElucHV0KClcbiAgc2l6ZTogRGF0ZUNvbXBvbmVudC5TaXplID0gJ21lZGl1bSc7XG5cbiAgQElucHV0KClcbiAgc2hvd0NsZWFyQnV0dG9uOiBib29sZWFuID0gdHJ1ZTtcblxuICBAQ29udGVudENoaWxkKCdoZWFkZXInKVxuICBoZWFkZXJUZW1wbGF0ZT86IFRlbXBsYXRlUmVmPHZvaWQ+O1xuXG4gIGFjdGl2ZVllYXJNb250aCA9IHRpbWVNb250aC5mbG9vcihuZXcgRGF0ZSgpKTtcblxuICByZWFkb25seSBvcGVuJCA9IG5ldyBCZWhhdmlvclN1YmplY3Q8Ym9vbGVhbj4oZmFsc2UpO1xuICBASW5wdXQoKVxuICBzZXQgb3Blbih2OiBib29sZWFuKSB7XG4gICAgdGhpcy5vcGVuJC5uZXh0KHYpO1xuICB9XG4gIGdldCBvcGVuKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0aGlzLm9wZW4kLmdldFZhbHVlKCk7XG4gIH1cblxuICBAT3V0cHV0KClcbiAgdmFsdWVDaGFuZ2UgPSBuZXcgRXZlbnRFbWl0dGVyPERhdGUgfCB1bmRlZmluZWQ+KCk7XG5cbiAgaW5wdXRUZXh0OiBzdHJpbmcgPSAnJztcbiAgcHJldmlld1ZhbHVlPzogRGF0ZTtcbiAgcHJpdmF0ZSBoYXNGb2N1czogYm9vbGVhbiA9IGZhbHNlO1xuICBwcml2YXRlIHJlYWRvbmx5IGRhdGVQaXBlID0gbmV3IERhdGVQaXBlKCk7XG5cbiAgY29uc3RydWN0b3IoXG4gICAgcHJpdmF0ZSByZWFkb25seSBjZHI6IENoYW5nZURldGVjdG9yUmVmLFxuICAgIHByaXZhdGUgcmVhZG9ubHkgaG9zdDogRWxlbWVudFJlZjxIVE1MRWxlbWVudD4sXG4gICkge1xuICAgIHN1cGVyKCk7XG4gIH1cblxuICAvLyBUaGUgY2FsbG91dCByZW5kZXJzIHdpdGggaXNNb2RhbD1mYWxzZSAobm8gZnVsbC12aWV3cG9ydCBzY3JpbSkgYW5kIGNhbid0XG4gIC8vIHNlbGYtY2xvc2Ugb24gb3V0c2lkZSBjbGlja3MuIEFueSBvdmVybGF5IGxheWVyIOKAlCBpbmNsdWRpbmcgc2libGluZ1xuICAvLyBvdmVybGF5cyBsaWtlIHRoZSBtb250aC95ZWFyIHNlbGVjdHMg4oCUIGNvdW50cyBhcyBcImluc2lkZVwiIHRoZSBwaWNrZXIuXG4gIEBIb3N0TGlzdGVuZXIoJ2RvY3VtZW50Om1vdXNlZG93bicsIFsnJGV2ZW50LnRhcmdldCddKVxuICBvbkRvY3VtZW50TW91c2VEb3duKHRhcmdldDogRXZlbnRUYXJnZXQgfCBudWxsKTogdm9pZCB7XG4gICAgaWYgKCF0aGlzLm9wZW4kLmdldFZhbHVlKCkgfHwgISh0YXJnZXQgaW5zdGFuY2VvZiBFbGVtZW50KSkgcmV0dXJuO1xuICAgIGlmICh0aGlzLmhvc3QubmF0aXZlRWxlbWVudC5jb250YWlucyh0YXJnZXQpKSByZXR1cm47XG4gICAgaWYgKHRhcmdldC5jbG9zZXN0KCcuY2FsbG91dCwgLnNjcmltLCAub3ZlcmxheS1jb250YWluZXInKSkgcmV0dXJuO1xuICAgIHRoaXMub3BlbiQubmV4dChmYWxzZSk7XG4gICAgdGhpcy5jZHIubWFya0ZvckNoZWNrKCk7XG4gIH1cblxuICBjbGVhclZhbHVlKCk6IHZvaWQge1xuICAgIHRoaXMuY29tbWl0KHVuZGVmaW5lZCk7XG4gICAgdGhpcy5vcGVuJC5uZXh0KGZhbHNlKTtcbiAgfVxuXG4gIG9uSW5wdXRDaGFuZ2UodmFsdWU6IHN0cmluZyk6IHZvaWQge1xuICAgIHRoaXMuaW5wdXRUZXh0ID0gdmFsdWU7XG4gICAgY29uc3QgcGFyc2VkID0gdGhpcy5wYXJzZUlucHV0KHZhbHVlKTtcbiAgICB0aGlzLnByZXZpZXdWYWx1ZSA9IHBhcnNlZDtcbiAgICBpZiAocGFyc2VkKSB0aGlzLnNldEFjdGl2ZU1vbnRoKHBhcnNlZCk7XG4gICAgdGhpcy5jZHIubWFya0ZvckNoZWNrKCk7XG4gIH1cblxuICBvbklucHV0Qmx1cihldmVudD86IEZvY3VzRXZlbnQpOiB2b2lkIHtcbiAgICB0aGlzLmhhc0ZvY3VzID0gZmFsc2U7XG4gICAgY29uc3QgcGFyc2VkID0gdGhpcy5wYXJzZUlucHV0KHRoaXMuaW5wdXRUZXh0KTtcbiAgICBpZiAocGFyc2VkKSB7XG4gICAgICB0aGlzLmNvbW1pdChwYXJzZWQpO1xuICAgIH0gZWxzZSBpZiAoIXRoaXMuaW5wdXRUZXh0LnRyaW0oKSkge1xuICAgICAgdGhpcy5jb21taXQodW5kZWZpbmVkKTtcbiAgICB9IGVsc2Uge1xuICAgICAgLy8gSW52YWxpZCB0ZXh0IOKAlCByZXZlcnQgdG8gd2hhdGV2ZXIgdGhlIGNvbW1pdHRlZCB2YWx1ZSB3YXMuXG4gICAgICB0aGlzLmlucHV0VGV4dCA9IHRoaXMuX3ZhbHVlID8gdGhpcy5mb3JtYXRWYWx1ZSh0aGlzLl92YWx1ZSkgOiAnJztcbiAgICB9XG4gICAgdGhpcy5wcmV2aWV3VmFsdWUgPSB1bmRlZmluZWQ7XG4gICAgLy8gQ2xvc2Ugb24ga2V5Ym9hcmQtZHJpdmVuIGZvY3VzIGNoYW5nZXMgKFRhYiBvdXQpLiBTdGF5IG9wZW4gaWYgZm9jdXNcbiAgICAvLyBtb3ZlZCBpbnRvIGEgbmVzdGVkIG92ZXJsYXkgKGUuZy4gdGhlIGNhbGVuZGFyJ3MgbW9udGgveWVhciBzZWxlY3QpLlxuICAgIC8vIE1vdXNlIGNsaWNrcyBpbnNpZGUgdGhlIGNhbGVuZGFyIHByZXZlbnREZWZhdWx0IG1vdXNlZG93biBzbyB0aGlzXG4gICAgLy8gaGFuZGxlciBuZXZlciBydW5zIGZvciB0aGVtLlxuICAgIGNvbnN0IG5leHRUYXJnZXQgPSBldmVudD8ucmVsYXRlZFRhcmdldDtcbiAgICBjb25zdCBzdGF5T3BlbiA9XG4gICAgICBuZXh0VGFyZ2V0IGluc3RhbmNlb2YgRWxlbWVudCAmJlxuICAgICAgKHRoaXMuaG9zdC5uYXRpdmVFbGVtZW50LmNvbnRhaW5zKG5leHRUYXJnZXQpIHx8XG4gICAgICAgICEhbmV4dFRhcmdldC5jbG9zZXN0KCcuY2FsbG91dCwgLnNjcmltLCAub3ZlcmxheS1jb250YWluZXInKSk7XG4gICAgaWYgKCFzdGF5T3BlbikgdGhpcy5vcGVuJC5uZXh0KGZhbHNlKTtcbiAgICB0aGlzLmNkci5tYXJrRm9yQ2hlY2soKTtcbiAgfVxuXG4gIG9uRGF0ZVNlbGVjdChkYXRlOiBEYXRlKTogdm9pZCB7XG4gICAgdGhpcy5jb21taXQodGltZURheS5mbG9vcihkYXRlKSk7XG4gICAgdGhpcy5vcGVuJC5uZXh0KGZhbHNlKTtcbiAgfVxuXG4gIG9uSW5wdXRGb2N1cygpOiB2b2lkIHtcbiAgICB0aGlzLmhhc0ZvY3VzID0gdHJ1ZTtcbiAgICB0aGlzLm9wZW4kLm5leHQodHJ1ZSk7XG4gIH1cblxuICB0b2dnbGVDYWxlbmRhcigpOiB2b2lkIHtcbiAgICB0aGlzLm9wZW4kLm5leHQoIXRoaXMub3BlbiQuZ2V0VmFsdWUoKSk7XG4gIH1cblxuICBwcml2YXRlIGZvcm1hdFZhbHVlKGRhdGU6IERhdGUpOiBzdHJpbmcge1xuICAgIHJldHVybiB0aGlzLmRhdGVQaXBlLnRyYW5zZm9ybShkYXRlKTtcbiAgfVxuXG4gIHByaXZhdGUgcGFyc2VJbnB1dCh0ZXh0OiBzdHJpbmcpOiBEYXRlIHwgdW5kZWZpbmVkIHtcbiAgICBjb25zdCBwYXJzZWQgPSBEYXRlQ29tcG9uZW50LnBhcnNlRGF0ZSh0ZXh0KTtcbiAgICByZXR1cm4gcGFyc2VkICYmIERhdGVDb21wb25lbnQuaXNWYWxpZERhdGUocGFyc2VkLCB0aGlzLm1pbiwgdGhpcy5tYXgpXG4gICAgICA/IHRpbWVEYXkuZmxvb3IocGFyc2VkKVxuICAgICAgOiB1bmRlZmluZWQ7XG4gIH1cblxuICBwcml2YXRlIHNldEFjdGl2ZU1vbnRoKGRhdGU6IERhdGUpOiB2b2lkIHtcbiAgICBjb25zdCBtb250aCA9IHRpbWVNb250aC5mbG9vcihkYXRlKTtcbiAgICBpZiAobW9udGguZ2V0VGltZSgpICE9PSB0aGlzLmFjdGl2ZVllYXJNb250aC5nZXRUaW1lKCkpIHtcbiAgICAgIHRoaXMuYWN0aXZlWWVhck1vbnRoID0gbW9udGg7XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBjb21taXQobmV4dDogRGF0ZSB8IHVuZGVmaW5lZCk6IHZvaWQge1xuICAgIGNvbnN0IHVuY2hhbmdlZCA9IG5leHQ/LmdldFRpbWUoKSA9PT0gdGhpcy5fdmFsdWU/LmdldFRpbWUoKTtcbiAgICB0aGlzLl92YWx1ZSA9IG5leHQ7XG4gICAgdGhpcy5pbnB1dFRleHQgPSBuZXh0ID8gdGhpcy5mb3JtYXRWYWx1ZShuZXh0KSA6ICcnO1xuICAgIHRoaXMucHJldmlld1ZhbHVlID0gdW5kZWZpbmVkO1xuICAgIGlmIChuZXh0KSB0aGlzLnNldEFjdGl2ZU1vbnRoKG5leHQpO1xuICAgIGlmICghdW5jaGFuZ2VkKSB0aGlzLnZhbHVlQ2hhbmdlLmVtaXQobmV4dCk7XG4gICAgdGhpcy5jZHIubWFya0ZvckNoZWNrKCk7XG4gIH1cbn1cblxuZXhwb3J0IG5hbWVzcGFjZSBEYXRlQ29tcG9uZW50IHtcbiAgZXhwb3J0IGNvbnN0IFNpemVzID0gW1xuICAgICd4c21hbGwnLFxuICAgICdzbWFsbCcsXG4gICAgJ21lZGl1bScsXG4gICAgJ2xhcmdlJyxcbiAgICAneGxhcmdlJyxcbiAgXSBhcyBjb25zdDtcbiAgZXhwb3J0IHR5cGUgU2l6ZSA9ICh0eXBlb2YgU2l6ZXMpW251bWJlcl07XG5cbiAgLy8gQWNjZXB0cyBNTS9ERC9ZWVlZLCBNL0QvWVksIGFuZCBZWVlZLU1NLUREIHdpdGggLywgLSwgb3IgLiBzZXBhcmF0b3JzLlxuICAvLyBBIDQtZGlnaXQgbGVhZGluZyBzZWdtZW50IGlzIHRyZWF0ZWQgYXMgeWVhci5cbiAgZXhwb3J0IGZ1bmN0aW9uIHBhcnNlRGF0ZShpbnB1dDogc3RyaW5nKTogRGF0ZSB8IHVuZGVmaW5lZCB7XG4gICAgY29uc3QgcGFydHMgPSBpbnB1dC50cmltKCkuc3BsaXQoL1svLi1dLyk7XG4gICAgaWYgKHBhcnRzLmxlbmd0aCAhPT0gMykgcmV0dXJuIHVuZGVmaW5lZDtcblxuICAgIGNvbnN0IG51bXMgPSBwYXJ0cy5tYXAocCA9PiBwYXJzZUludChwLCAxMCkpO1xuICAgIGlmIChudW1zLnNvbWUoaXNOYU4pKSByZXR1cm4gdW5kZWZpbmVkO1xuXG4gICAgbGV0IFt5ZWFyLCBtb250aCwgZGF5XSA9XG4gICAgICBwYXJ0c1swXS5sZW5ndGggPT09IDQgPyBudW1zIDogW251bXNbMl0sIG51bXNbMF0sIG51bXNbMV1dO1xuICAgIGlmIChwYXJ0c1swXS5sZW5ndGggIT09IDQgJiYgeWVhciA8IDEwMCkgeWVhciArPSB5ZWFyIDwgNTAgPyAyMDAwIDogMTkwMDtcblxuICAgIGNvbnN0IGRhdGUgPSBuZXcgRGF0ZSh5ZWFyLCBtb250aCAtIDEsIGRheSk7XG4gICAgcmV0dXJuIGRhdGUuZ2V0RnVsbFllYXIoKSA9PT0geWVhciAmJlxuICAgICAgZGF0ZS5nZXRNb250aCgpID09PSBtb250aCAtIDEgJiZcbiAgICAgIGRhdGUuZ2V0RGF0ZSgpID09PSBkYXlcbiAgICAgID8gZGF0ZVxuICAgICAgOiB1bmRlZmluZWQ7XG4gIH1cblxuICBleHBvcnQgZnVuY3Rpb24gaXNWYWxpZERhdGUoZGF0ZTogRGF0ZSwgbWluOiBEYXRlLCBtYXg6IERhdGUpOiBib29sZWFuIHtcbiAgICBjb25zdCB0aW1lID0gZGF0ZS5nZXRUaW1lKCk7XG4gICAgcmV0dXJuIHRpbWUgPj0gbWluLmdldFRpbWUoKSAmJiB0aW1lIDw9IG1heC5nZXRUaW1lKCk7XG4gIH1cbn1cbiIsIjxyaXYtaW5wdXQtbGFiZWxcbiAgW2xhYmVsXT1cImxhYmVsXCJcbiAgW2hlbHBdPVwiaGVscFwiXG4gIFtyZXF1aXJlZF09XCJyZXF1aXJlZFwiXG4gIFtzdGF0ZV09XCJzdGF0ZVwiXG4gIFtlcnJvck1lc3NhZ2VdPVwiZXJyb3JNZXNzYWdlXCJcbiAgW2xhYmVsQWN0aW9uVGV4dF09XCJsYWJlbEFjdGlvblRleHRcIlxuICAobGFiZWxBY3Rpb24pPVwibGFiZWxBY3Rpb24uZW1pdCgkZXZlbnQpXCJcbj5cbiAgPGRpdlxuICAgICN0cmlnZ2VyXG4gICAgY2xhc3M9XCJ0cmlnZ2VyXCJcbiAgICBbY2xhc3MueHNtYWxsXT1cInNpemUgPT09ICd4c21hbGwnXCJcbiAgICBbY2xhc3Muc21hbGxdPVwic2l6ZSA9PT0gJ3NtYWxsJ1wiXG4gICAgW2NsYXNzLmxhcmdlXT1cInNpemUgPT09ICdsYXJnZSdcIlxuICAgIFtjbGFzcy54bGFyZ2VdPVwic2l6ZSA9PT0gJ3hsYXJnZSdcIlxuICAgIFtjbGFzcy53YXJuaW5nXT1cInN0YXRlID09PSAnd2FybmluZydcIlxuICAgIFtjbGFzcy5lcnJvcl09XCJzdGF0ZSA9PT0gJ2Vycm9yJ1wiXG4gICAgW2NsYXNzLmRpc2FibGVkXT1cImRpc2FibGVkXCJcbiAgPlxuICAgIDxpbnB1dFxuICAgICAgI2lucHV0XG4gICAgICBjbGFzcz1cInZhbHVlXCJcbiAgICAgIFtwbGFjZWhvbGRlcl09XCJwbGFjZWhvbGRlclwiXG4gICAgICBbdmFsdWVdPVwiaW5wdXRUZXh0XCJcbiAgICAgIFtkaXNhYmxlZF09XCJkaXNhYmxlZFwiXG4gICAgICBbYXR0ci5hcmlhLWxhYmVsXT1cImxhYmVsIHx8IG51bGxcIlxuICAgICAgW2F0dHIuYXJpYS1leHBhbmRlZF09XCJvcGVuJCB8IGFzeW5jXCJcbiAgICAgIHJvbGU9XCJjb21ib2JveFwiXG4gICAgICBhcmlhLWhhc3BvcHVwPVwiZGlhbG9nXCJcbiAgICAgIGFyaWEtYXV0b2NvbXBsZXRlPVwibm9uZVwiXG4gICAgICAoaW5wdXQpPVwib25JbnB1dENoYW5nZShpbnB1dC52YWx1ZSlcIlxuICAgICAgKGJsdXIpPVwib25JbnB1dEJsdXIoJGV2ZW50KVwiXG4gICAgICAoZm9jdXMpPVwib25JbnB1dEZvY3VzKClcIlxuICAgICAgKGtleWRvd24uZW50ZXIpPVwiaW5wdXQuYmx1cigpOyBvcGVuJC5uZXh0KGZhbHNlKTsgJGV2ZW50LnByZXZlbnREZWZhdWx0KClcIlxuICAgICAgdHlwZT1cInRleHRcIlxuICAgICAgYXV0b2NvbXBsZXRlPVwib2ZmXCJcbiAgICAgIHNwZWxsY2hlY2s9XCJmYWxzZVwiXG4gICAgLz5cbiAgICA8YnV0dG9uXG4gICAgICBjbGFzcz1cImNoZXZyb25cIlxuICAgICAgKG1vdXNlZG93bik9XCIkZXZlbnQucHJldmVudERlZmF1bHQoKVwiXG4gICAgICAoY2xpY2spPVwidG9nZ2xlQ2FsZW5kYXIoKVwiXG4gICAgICBbZGlzYWJsZWRdPVwiZGlzYWJsZWRcIlxuICAgICAgW2F0dHIuYXJpYS1sYWJlbF09XCIob3BlbiQgfCBhc3luYykgPyAnQ2xvc2UgY2FsZW5kYXInIDogJ09wZW4gY2FsZW5kYXInXCJcbiAgICAgIHR5cGU9XCJidXR0b25cIlxuICAgICAgdGFiaW5kZXg9XCItMVwiXG4gICAgPlxuICAgICAgPHJpdi1pY29uIFtuYW1lXT1cIidDYWxlbmRhcidcIiBbc2l6ZV09XCIxNlwiPjwvcml2LWljb24+XG4gICAgPC9idXR0b24+XG4gIDwvZGl2PlxuPC9yaXYtaW5wdXQtbGFiZWw+XG48bmctY29udGFpbmVyICpuZ0lmPVwib3BlbiQgfCBhc3luY1wiPlxuICA8cml2LWNhbGxvdXRcbiAgICAqcml2LW92ZXJsYXlcbiAgICBbYW5jaG9yXT1cInRyaWdnZXJcIlxuICAgIFtpc01vZGFsXT1cImZhbHNlXCJcbiAgICBbc2hvd0NhcmV0XT1cImZhbHNlXCJcbiAgICBbdGhlbWVdPVwiJ2xpZ2h0J1wiXG4gICAgW2FsbG93ZWRQb3NpdGlvbnNdPVwiW1xuICAgICAgJ3RvcC1sZWZ0JyxcbiAgICAgICd0b3AtcmlnaHQnLFxuICAgICAgJ2JvdHRvbS1yaWdodCcsXG4gICAgICAnYm90dG9tLWxlZnQnXG4gICAgXVwiXG4gICAgW3ByZWZlcnJlZFBvc2l0aW9uXT1cIidib3R0b20tcmlnaHQnXCJcbiAgICAoY2xvc2UpPVwib3BlbiQubmV4dChmYWxzZSlcIlxuICA+XG4gICAgPGRpdiAobW91c2Vkb3duKT1cIiRldmVudC5wcmV2ZW50RGVmYXVsdCgpXCI+XG4gICAgICA8aGVhZGVyICpuZ0lmPVwiaGVhZGVyVGVtcGxhdGVcIj5cbiAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdUZW1wbGF0ZU91dGxldD1cImhlYWRlclRlbXBsYXRlXCI+PC9uZy1jb250YWluZXI+XG4gICAgICA8L2hlYWRlcj5cbiAgICAgIDxkaXYgY2xhc3M9XCJjb250ZW50XCI+XG4gICAgICAgIDxyaXYtY2FsZW5kYXJcbiAgICAgICAgICBbYWN0aXZlWWVhck1vbnRoXT1cImFjdGl2ZVllYXJNb250aFwiXG4gICAgICAgICAgKGFjdGl2ZVllYXJNb250aENoYW5nZSk9XCJhY3RpdmVZZWFyTW9udGggPSAkZXZlbnRcIlxuICAgICAgICAgIFtkaXNwbGF5TWluXT1cIm1pblwiXG4gICAgICAgICAgW2Rpc3BsYXlNYXhdPVwibWF4XCJcbiAgICAgICAgICBbc2VsZWN0YWJsZU1pbl09XCJtaW5cIlxuICAgICAgICAgIFtzZWxlY3RhYmxlTWF4XT1cIm1heFwiXG4gICAgICAgICAgW3NlbGVjdGVkVmFsdWVdPVwicHJldmlld1ZhbHVlID8/IHZhbHVlXCJcbiAgICAgICAgICAoZGF0ZVNlbGVjdCk9XCJvbkRhdGVTZWxlY3QoJGV2ZW50KTsgaW5wdXQuYmx1cigpXCJcbiAgICAgICAgPjwvcml2LWNhbGVuZGFyPlxuICAgICAgPC9kaXY+XG4gICAgICA8Zm9vdGVyICpuZ0lmPVwic2hvd0NsZWFyQnV0dG9uXCIgY2xhc3M9XCJidXR0b25zXCI+XG4gICAgICAgIDxidXR0b25cbiAgICAgICAgICByaXZCdXR0b25cbiAgICAgICAgICBbc2l6ZV09XCInc21hbGwnXCJcbiAgICAgICAgICBbdmFyaWFudF09XCInZ2hvc3QnXCJcbiAgICAgICAgICAoY2xpY2spPVwiY2xlYXJWYWx1ZSgpOyBpbnB1dC5ibHVyKClcIlxuICAgICAgICAgIHR5cGU9XCJidXR0b25cIlxuICAgICAgICA+XG4gICAgICAgICAgQ2xlYXJcbiAgICAgICAgPC9idXR0b24+XG4gICAgICA8L2Zvb3Rlcj5cbiAgICA8L2Rpdj5cbiAgPC9yaXYtY2FsbG91dD5cbjwvbmctY29udGFpbmVyPlxuIl19
|
|
@@ -13,7 +13,7 @@ export class ViewMenuComponent {
|
|
|
13
13
|
}
|
|
14
14
|
}
|
|
15
15
|
ViewMenuComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.3.0", ngImport: i0, type: ViewMenuComponent, deps: [{ token: i0.ElementRef }], target: i0.ɵɵFactoryTarget.Component });
|
|
16
|
-
ViewMenuComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "14.3.0", type: ViewMenuComponent, selector: "riv-view-menu", inputs: { manager: "manager", view: "view", menuContext: "menuContext" }, queries: [{ propertyName: "triggerTemplate", first: true, predicate: ["menuTrigger"], descendants: true }], ngImport: i0, template: "<ng-container *ngIf=\"view\">\n <riv-menu\n #menu\n [preferredPosition]=\"'bottom-right'\"\n (click)=\"$event.stopPropagation()\"\n >\n <ng-container *ngIf=\"triggerTemplate\">\n <ng-template #trigger>\n <ng-container [ngTemplateOutlet]=\"triggerTemplate\"></ng-container>\n </ng-template>\n </ng-container>\n <button\n riv-menu-item\n (click)=\"\n manager?.actions?.next({\n type: 'setEnabled',\n id: view.id,\n enabled: !view.enabled,\n source: 'menu'\n })\n \"\n [disabled]=\"view.system || view.temporary\"\n >\n {{ view.enabled ? 'Hide tab' : 'Show tab' }}\n </button>\n <div class=\"riv-divider\"></div>\n <button\n riv-menu-item\n (click)=\"\n manager?.actions?.next({\n type: 'setEditingView',\n context: { id: view.id, autoRename: false, menuContext }\n })\n \"\n [disabled]=\"view.system\"\n >\n Edit view\n </button>\n <button\n riv-menu-item\n (click)=\"\n manager?.actions?.next({\n type: 'setEditingView',\n context: { id: view.id, autoRename: true, menuContext }\n })\n \"\n [disabled]=\"view.system\"\n >\n Rename view\n </button>\n <button\n riv-menu-item\n (click)=\"\n manager?.actions?.next({ type: 'duplicateView', view, menuContext })\n \"\n [disabled]=\"view.temporary\"\n >\n Duplicate view\n </button>\n <button\n riv-menu-item\n (click)=\"\n manager?.actions?.next({\n type: 'setDeletingView',\n context: { id: view.id, menuContext }\n })\n \"\n [disabled]=\"view.system\"\n >\n Delete view\n </button>\n <div class=\"riv-divider\"></div>\n <button\n riv-menu-item\n (click)=\"manager?.actions?.next({ type: 'copyLinkToView', view })\"\n [disabled]=\"view.temporary\"\n >\n Copy link to view\n </button>\n </riv-menu>\n\n <ng-container *ngIf=\"manager?.state | async; let state\">\n <ng-container *ngIf=\"state.editingViewContext; let editingViewContext\">\n <riv-edit-view\n *ngIf=\"\n editingViewContext.id === view.id &&\n editingViewContext.menuContext === menuContext\n \"\n [view]=\"view\"\n [userSource]=\"state.userSource\"\n [userSelectMode]=\"state.userSelectMode\"\n [onAddUser]=\"state.onAddUser\"\n [newTooltip]=\"state.newTooltip\"\n [autoSelectName]=\"editingViewContext.autoRename\"\n [anchor]=\"el.nativeElement\"\n (save)=\"manager?.actions?.next({ type: 'updateView', view: $event })\"\n (delete)=\"manager?.actions?.next({ type: 'deleteView', view: $event })\"\n (close)=\"\n manager?.actions?.next({ type: 'setEditingView', context: null })\n \"\n ></riv-edit-view>\n </ng-container>\n\n <ng-container *ngIf=\"state.deletingViewContext; let deletingViewContext\">\n <riv-dialog\n *ngIf=\"\n deletingViewContext.id === view.id &&\n deletingViewContext.menuContext === menuContext\n \"\n [title]=\"'Delete view'\"\n (close)=\"\n manager?.actions?.next({ type: 'setDeletingView', context: null })\n \"\n >\n <div class=\"delete-dialog\">\n <div class=\"delete-title\">\n Are you sure you want to delete the following view?\n </div>\n <p>{{ view.title }}</p>\n </div>\n <footer class=\"delete-footer\">\n <button\n rivButton\n (click)=\"\n manager?.actions?.next({ type: 'setDeletingView', context: null })\n \"\n >\n Cancel\n </button>\n <button\n rivButton\n [variant]=\"'danger'\"\n (click)=\"\n manager?.actions?.next({\n type: 'deleteView',\n view\n })\n \"\n >\n Delete view\n </button>\n </footer>\n </riv-dialog>\n </ng-container>\n </ng-container>\n</ng-container>\n", styles: [":host{display:inline-flex;align-items:stretch}riv-menu{width:100%;max-width:100%;height:100%;max-height:100%}.delete-dialog{padding:var(--size-xlarge);display:flex;flex-direction:column;gap:var(--size-large);width:calc(var(--base-grid-size) * 120);max-width:100%}.delete-title{font:var(--title-02)}.delete-footer{padding:var(--size-medium);display:flex;justify-content:space-between;gap:var(--size-medium)}\n"], dependencies: [{ kind: "directive", type: i1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i1.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "component", type: i2.ButtonComponent, selector: "[rivButton]", inputs: ["locked", "disabled", "loading", "full", "size", "variant", "icon", "iconPosition", "current"] }, { kind: "component", type: i3.DialogComponent, selector: "riv-dialog", inputs: ["title", "minWidth"], outputs: ["close"] }, { kind: "component", type: i4.EditViewComponent, selector: "riv-edit-view", inputs: ["anchor", "autoSelectName", "view", "userSource", "userSelectMode", "onAddUser", "newTooltip", "mode"], outputs: ["save", "delete", "close"] }, { kind: "component", type: i5.MenuComponent, selector: "riv-menu", inputs: ["preferredPosition"] }, { kind: "component", type: i6.MenuItemComponent, selector: "[riv-menu-item]", inputs: ["locked", "disabled", "variant"] }, { kind: "pipe", type: i1.AsyncPipe, name: "async" }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
|
|
16
|
+
ViewMenuComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "14.3.0", type: ViewMenuComponent, selector: "riv-view-menu", inputs: { manager: "manager", view: "view", menuContext: "menuContext" }, queries: [{ propertyName: "triggerTemplate", first: true, predicate: ["menuTrigger"], descendants: true }], ngImport: i0, template: "<ng-container *ngIf=\"view\">\n <riv-menu\n #menu\n [preferredPosition]=\"'bottom-right'\"\n (click)=\"$event.stopPropagation()\"\n >\n <ng-container *ngIf=\"triggerTemplate\">\n <ng-template #trigger>\n <ng-container [ngTemplateOutlet]=\"triggerTemplate\"></ng-container>\n </ng-template>\n </ng-container>\n <button\n riv-menu-item\n (click)=\"\n manager?.actions?.next({\n type: 'setEnabled',\n id: view.id,\n enabled: !view.enabled,\n source: 'menu'\n })\n \"\n [disabled]=\"view.system || view.temporary\"\n >\n {{ view.enabled ? 'Hide tab' : 'Show tab' }}\n </button>\n <div class=\"riv-divider\"></div>\n <button\n riv-menu-item\n (click)=\"\n manager?.actions?.next({\n type: 'setEditingView',\n context: { id: view.id, autoRename: false, menuContext }\n })\n \"\n [disabled]=\"view.system\"\n >\n Edit view\n </button>\n <button\n riv-menu-item\n (click)=\"\n manager?.actions?.next({\n type: 'setEditingView',\n context: { id: view.id, autoRename: true, menuContext }\n })\n \"\n [disabled]=\"view.system\"\n >\n Rename view\n </button>\n <button\n riv-menu-item\n (click)=\"\n manager?.actions?.next({ type: 'duplicateView', view, menuContext })\n \"\n [disabled]=\"view.temporary\"\n >\n Duplicate view\n </button>\n <button\n riv-menu-item\n (click)=\"\n manager?.actions?.next({\n type: 'setDeletingView',\n context: { id: view.id, menuContext }\n })\n \"\n [disabled]=\"view.system\"\n >\n Delete view\n </button>\n <div class=\"riv-divider\"></div>\n <button\n riv-menu-item\n (click)=\"manager?.actions?.next({ type: 'copyLinkToView', view })\"\n [disabled]=\"view.temporary\"\n >\n Copy link to view\n </button>\n </riv-menu>\n\n <ng-container *ngIf=\"manager?.state | async; let state\">\n <ng-container *ngIf=\"state.editingViewContext; let editingViewContext\">\n <riv-edit-view\n *ngIf=\"\n editingViewContext.id === view.id &&\n editingViewContext.menuContext === menuContext\n \"\n [view]=\"view\"\n [userSource]=\"state.userSource\"\n [userSelectMode]=\"state.userSelectMode\"\n [onAddUser]=\"state.onAddUser\"\n [newTooltip]=\"state.newTooltip\"\n [autoSelectName]=\"editingViewContext.autoRename\"\n [anchor]=\"el.nativeElement\"\n (save)=\"manager?.actions?.next({ type: 'updateView', view: $event })\"\n (delete)=\"manager?.actions?.next({ type: 'deleteView', view: $event })\"\n (close)=\"\n manager?.actions?.next({ type: 'setEditingView', context: null })\n \"\n ></riv-edit-view>\n </ng-container>\n\n <ng-container *ngIf=\"state.deletingViewContext; let deletingViewContext\">\n <riv-dialog\n *ngIf=\"\n deletingViewContext.id === view.id &&\n deletingViewContext.menuContext === menuContext\n \"\n [title]=\"'Delete view'\"\n (close)=\"\n manager?.actions?.next({ type: 'setDeletingView', context: null })\n \"\n >\n <div class=\"delete-dialog\">\n <div class=\"delete-title\">\n Are you sure you want to delete the following view?\n </div>\n <p>{{ view.title }}</p>\n </div>\n <footer class=\"delete-footer\">\n <button\n rivButton\n (click)=\"\n manager?.actions?.next({ type: 'setDeletingView', context: null })\n \"\n >\n Cancel\n </button>\n <button\n rivButton\n [variant]=\"'danger'\"\n (click)=\"\n manager?.actions?.next({\n type: 'deleteView',\n view\n })\n \"\n >\n Delete view\n </button>\n </footer>\n </riv-dialog>\n </ng-container>\n </ng-container>\n</ng-container>\n", styles: [":host{display:inline-flex;align-items:stretch}riv-menu{width:100%;max-width:100%;height:100%;max-height:100%}.delete-dialog{padding:var(--size-xlarge);display:flex;flex-direction:column;gap:var(--size-large);width:calc(var(--base-grid-size) * 120);max-width:100%}.delete-title{font:var(--title-02)}.delete-footer{padding:var(--size-medium);display:flex;justify-content:space-between;gap:var(--size-medium)}\n"], dependencies: [{ kind: "directive", type: i1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i1.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "component", type: i2.ButtonComponent, selector: "[rivButton]", inputs: ["locked", "disabled", "loading", "full", "size", "variant", "icon", "iconPosition", "current"] }, { kind: "component", type: i3.DialogComponent, selector: "riv-dialog", inputs: ["title", "minWidth", "customBody", "customFooter"], outputs: ["close"] }, { kind: "component", type: i4.EditViewComponent, selector: "riv-edit-view", inputs: ["anchor", "autoSelectName", "view", "userSource", "userSelectMode", "onAddUser", "newTooltip", "mode"], outputs: ["save", "delete", "close"] }, { kind: "component", type: i5.MenuComponent, selector: "riv-menu", inputs: ["preferredPosition"] }, { kind: "component", type: i6.MenuItemComponent, selector: "[riv-menu-item]", inputs: ["locked", "disabled", "variant"] }, { kind: "pipe", type: i1.AsyncPipe, name: "async" }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
|
|
17
17
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.3.0", ngImport: i0, type: ViewMenuComponent, decorators: [{
|
|
18
18
|
type: Component,
|
|
19
19
|
args: [{ selector: 'riv-view-menu', changeDetection: ChangeDetectionStrategy.OnPush, template: "<ng-container *ngIf=\"view\">\n <riv-menu\n #menu\n [preferredPosition]=\"'bottom-right'\"\n (click)=\"$event.stopPropagation()\"\n >\n <ng-container *ngIf=\"triggerTemplate\">\n <ng-template #trigger>\n <ng-container [ngTemplateOutlet]=\"triggerTemplate\"></ng-container>\n </ng-template>\n </ng-container>\n <button\n riv-menu-item\n (click)=\"\n manager?.actions?.next({\n type: 'setEnabled',\n id: view.id,\n enabled: !view.enabled,\n source: 'menu'\n })\n \"\n [disabled]=\"view.system || view.temporary\"\n >\n {{ view.enabled ? 'Hide tab' : 'Show tab' }}\n </button>\n <div class=\"riv-divider\"></div>\n <button\n riv-menu-item\n (click)=\"\n manager?.actions?.next({\n type: 'setEditingView',\n context: { id: view.id, autoRename: false, menuContext }\n })\n \"\n [disabled]=\"view.system\"\n >\n Edit view\n </button>\n <button\n riv-menu-item\n (click)=\"\n manager?.actions?.next({\n type: 'setEditingView',\n context: { id: view.id, autoRename: true, menuContext }\n })\n \"\n [disabled]=\"view.system\"\n >\n Rename view\n </button>\n <button\n riv-menu-item\n (click)=\"\n manager?.actions?.next({ type: 'duplicateView', view, menuContext })\n \"\n [disabled]=\"view.temporary\"\n >\n Duplicate view\n </button>\n <button\n riv-menu-item\n (click)=\"\n manager?.actions?.next({\n type: 'setDeletingView',\n context: { id: view.id, menuContext }\n })\n \"\n [disabled]=\"view.system\"\n >\n Delete view\n </button>\n <div class=\"riv-divider\"></div>\n <button\n riv-menu-item\n (click)=\"manager?.actions?.next({ type: 'copyLinkToView', view })\"\n [disabled]=\"view.temporary\"\n >\n Copy link to view\n </button>\n </riv-menu>\n\n <ng-container *ngIf=\"manager?.state | async; let state\">\n <ng-container *ngIf=\"state.editingViewContext; let editingViewContext\">\n <riv-edit-view\n *ngIf=\"\n editingViewContext.id === view.id &&\n editingViewContext.menuContext === menuContext\n \"\n [view]=\"view\"\n [userSource]=\"state.userSource\"\n [userSelectMode]=\"state.userSelectMode\"\n [onAddUser]=\"state.onAddUser\"\n [newTooltip]=\"state.newTooltip\"\n [autoSelectName]=\"editingViewContext.autoRename\"\n [anchor]=\"el.nativeElement\"\n (save)=\"manager?.actions?.next({ type: 'updateView', view: $event })\"\n (delete)=\"manager?.actions?.next({ type: 'deleteView', view: $event })\"\n (close)=\"\n manager?.actions?.next({ type: 'setEditingView', context: null })\n \"\n ></riv-edit-view>\n </ng-container>\n\n <ng-container *ngIf=\"state.deletingViewContext; let deletingViewContext\">\n <riv-dialog\n *ngIf=\"\n deletingViewContext.id === view.id &&\n deletingViewContext.menuContext === menuContext\n \"\n [title]=\"'Delete view'\"\n (close)=\"\n manager?.actions?.next({ type: 'setDeletingView', context: null })\n \"\n >\n <div class=\"delete-dialog\">\n <div class=\"delete-title\">\n Are you sure you want to delete the following view?\n </div>\n <p>{{ view.title }}</p>\n </div>\n <footer class=\"delete-footer\">\n <button\n rivButton\n (click)=\"\n manager?.actions?.next({ type: 'setDeletingView', context: null })\n \"\n >\n Cancel\n </button>\n <button\n rivButton\n [variant]=\"'danger'\"\n (click)=\"\n manager?.actions?.next({\n type: 'deleteView',\n view\n })\n \"\n >\n Delete view\n </button>\n </footer>\n </riv-dialog>\n </ng-container>\n </ng-container>\n</ng-container>\n", styles: [":host{display:inline-flex;align-items:stretch}riv-menu{width:100%;max-width:100%;height:100%;max-height:100%}.delete-dialog{padding:var(--size-xlarge);display:flex;flex-direction:column;gap:var(--size-large);width:calc(var(--base-grid-size) * 120);max-width:100%}.delete-title{font:var(--title-02)}.delete-footer{padding:var(--size-medium);display:flex;justify-content:space-between;gap:var(--size-medium)}\n"] }]
|
|
@@ -32,10 +32,10 @@ export class BannerComponent {
|
|
|
32
32
|
}
|
|
33
33
|
}
|
|
34
34
|
BannerComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.3.0", ngImport: i0, type: BannerComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
|
|
35
|
-
BannerComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "14.3.0", type: BannerComponent, selector: "riv-banner", inputs: { variant: "variant", icon: "icon", iconTooltip: "iconTooltip", heading: "heading", dismissable: "dismissable" }, outputs: { dismiss: "dismiss" }, host: { properties: { "class": "this.variant", "class.has-heading": "this.hasHeading" } }, ngImport: i0, template: "<riv-icon\n *ngIf=\"getResolvedIcon(); let icon\"\n [name]=\"icon\"\n [rivTooltip]=\"iconTooltip\"\n [size]=\"20\"\n class=\"icon\"\n></riv-icon>\n<div *ngIf=\"hasHeading\" class=\"heading\">{{ heading }}</div>\n<div class=\"content\">\n <ng-content></ng-content>\n</div>\n<button *ngIf=\"dismissable\" class=\"dismiss\" (click)=\"dismiss.emit()\">\n <riv-icon [name]=\"'X'\" [size]=\"20\"></riv-icon>\n</button>\n", styles: [":host{display:flex;align-items:flex-start;gap:var(--size-large);padding:var(--size-large);border-radius:var(--border-radius-medium);box-shadow:var(--depth-1);color:var(--type-light-high-contrast);border-left-style:solid;border-left-width:var(--size-small);border-left-color:var(--banner-accent)
|
|
35
|
+
BannerComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "14.3.0", type: BannerComponent, selector: "riv-banner", inputs: { variant: "variant", icon: "icon", iconTooltip: "iconTooltip", heading: "heading", dismissable: "dismissable" }, outputs: { dismiss: "dismiss" }, host: { properties: { "class": "this.variant", "class.has-heading": "this.hasHeading" } }, ngImport: i0, template: "<riv-icon\n *ngIf=\"getResolvedIcon(); let icon\"\n [name]=\"icon\"\n [rivTooltip]=\"iconTooltip\"\n [size]=\"20\"\n class=\"icon\"\n></riv-icon>\n<div *ngIf=\"hasHeading\" class=\"heading\">{{ heading }}</div>\n<div class=\"content\">\n <ng-content></ng-content>\n</div>\n<button *ngIf=\"dismissable\" class=\"dismiss\" (click)=\"dismiss.emit()\">\n <riv-icon [name]=\"'X'\" [size]=\"20\"></riv-icon>\n</button>\n", styles: [":host{display:flex;align-items:flex-start;gap:var(--size-large);padding:var(--size-large);border-radius:var(--border-radius-medium);box-shadow:var(--depth-1);color:var(--type-light-high-contrast);border-left-style:solid;border-left-width:var(--size-small);border-left-color:var(--banner-accent)}:host .icon{color:var(--banner-accent)}:host.has-heading{display:grid;grid-template-columns:auto 1fr auto;grid-template-areas:\"icon heading close\" \". content .\";column-gap:var(--size-large);row-gap:0;align-items:start}:host.has-heading .icon{grid-area:icon}:host.has-heading .heading{grid-area:heading}:host.has-heading .content{grid-area:content}:host.has-heading .dismiss{grid-area:close}.heading{font:var(--body-medium);font-weight:var(--font-weight-heavy);line-height:var(--type-2-line-height-2)}:host.info{background-color:var(--purp-10);--banner-accent: var(--purp-80)}:host.safety{background-color:var(--safety-light);--banner-accent: var(--safety-dark)}:host.warning{background-color:var(--caution-light);--banner-accent: var(--tang-70)}:host.danger{background-color:var(--danger-light);--banner-accent: var(--danger-main)}.icon{margin:var(--size-xxsmall);flex-shrink:0}.content{flex-grow:1;font:var(--body-medium)}.dismiss{flex-shrink:0;display:inline-flex;align-items:center;justify-content:center;padding:var(--size-xxsmall);cursor:pointer;transition:background-color var(--short-transition);border-radius:var(--border-radius-small);color:var(--type-light-high-contrast)}.dismiss:hover{background-color:var(--black-20)}.dismiss:active{background-color:var(--black-30)}\n"], dependencies: [{ kind: "directive", type: i1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "component", type: i2.IconComponent, selector: "riv-icon", inputs: ["name", "fillColor", "size", "customSize", "strokeWidth"] }, { kind: "directive", type: i3.TooltipDirective, selector: "[rivTooltip]", inputs: ["rivTooltip", "rivTooltipTheme", "rivTooltipMaxWidth", "rivTooltipPreferredPosition", "rivTooltipCloseDelay", "rivTooltipOpenDelay"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
|
|
36
36
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.3.0", ngImport: i0, type: BannerComponent, decorators: [{
|
|
37
37
|
type: Component,
|
|
38
|
-
args: [{ selector: 'riv-banner', changeDetection: ChangeDetectionStrategy.OnPush, template: "<riv-icon\n *ngIf=\"getResolvedIcon(); let icon\"\n [name]=\"icon\"\n [rivTooltip]=\"iconTooltip\"\n [size]=\"20\"\n class=\"icon\"\n></riv-icon>\n<div *ngIf=\"hasHeading\" class=\"heading\">{{ heading }}</div>\n<div class=\"content\">\n <ng-content></ng-content>\n</div>\n<button *ngIf=\"dismissable\" class=\"dismiss\" (click)=\"dismiss.emit()\">\n <riv-icon [name]=\"'X'\" [size]=\"20\"></riv-icon>\n</button>\n", styles: [":host{display:flex;align-items:flex-start;gap:var(--size-large);padding:var(--size-large);border-radius:var(--border-radius-medium);box-shadow:var(--depth-1);color:var(--type-light-high-contrast);border-left-style:solid;border-left-width:var(--size-small);border-left-color:var(--banner-accent)
|
|
38
|
+
args: [{ selector: 'riv-banner', changeDetection: ChangeDetectionStrategy.OnPush, template: "<riv-icon\n *ngIf=\"getResolvedIcon(); let icon\"\n [name]=\"icon\"\n [rivTooltip]=\"iconTooltip\"\n [size]=\"20\"\n class=\"icon\"\n></riv-icon>\n<div *ngIf=\"hasHeading\" class=\"heading\">{{ heading }}</div>\n<div class=\"content\">\n <ng-content></ng-content>\n</div>\n<button *ngIf=\"dismissable\" class=\"dismiss\" (click)=\"dismiss.emit()\">\n <riv-icon [name]=\"'X'\" [size]=\"20\"></riv-icon>\n</button>\n", styles: [":host{display:flex;align-items:flex-start;gap:var(--size-large);padding:var(--size-large);border-radius:var(--border-radius-medium);box-shadow:var(--depth-1);color:var(--type-light-high-contrast);border-left-style:solid;border-left-width:var(--size-small);border-left-color:var(--banner-accent)}:host .icon{color:var(--banner-accent)}:host.has-heading{display:grid;grid-template-columns:auto 1fr auto;grid-template-areas:\"icon heading close\" \". content .\";column-gap:var(--size-large);row-gap:0;align-items:start}:host.has-heading .icon{grid-area:icon}:host.has-heading .heading{grid-area:heading}:host.has-heading .content{grid-area:content}:host.has-heading .dismiss{grid-area:close}.heading{font:var(--body-medium);font-weight:var(--font-weight-heavy);line-height:var(--type-2-line-height-2)}:host.info{background-color:var(--purp-10);--banner-accent: var(--purp-80)}:host.safety{background-color:var(--safety-light);--banner-accent: var(--safety-dark)}:host.warning{background-color:var(--caution-light);--banner-accent: var(--tang-70)}:host.danger{background-color:var(--danger-light);--banner-accent: var(--danger-main)}.icon{margin:var(--size-xxsmall);flex-shrink:0}.content{flex-grow:1;font:var(--body-medium)}.dismiss{flex-shrink:0;display:inline-flex;align-items:center;justify-content:center;padding:var(--size-xxsmall);cursor:pointer;transition:background-color var(--short-transition);border-radius:var(--border-radius-small);color:var(--type-light-high-contrast)}.dismiss:hover{background-color:var(--black-20)}.dismiss:active{background-color:var(--black-30)}\n"] }]
|
|
39
39
|
}], propDecorators: { variant: [{
|
|
40
40
|
type: Input
|
|
41
41
|
}, {
|
|
@@ -5,6 +5,8 @@ import * as i1 from "../../../input/button/button.component";
|
|
|
5
5
|
import * as i2 from "../modal.component";
|
|
6
6
|
export class DialogComponent {
|
|
7
7
|
constructor() {
|
|
8
|
+
this.customBody = false;
|
|
9
|
+
this.customFooter = false;
|
|
8
10
|
this.close = new EventEmitter();
|
|
9
11
|
this.hook = ANIMATION_CONSTANTS.DIALOG.HOOK;
|
|
10
12
|
}
|
|
@@ -16,18 +18,22 @@ export class DialogComponent {
|
|
|
16
18
|
}
|
|
17
19
|
}
|
|
18
20
|
DialogComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.3.0", ngImport: i0, type: DialogComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
|
|
19
|
-
DialogComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "14.3.0", type: DialogComponent, selector: "riv-dialog", inputs: { title: "title", minWidth: "minWidth" }, outputs: { close: "close" }, host: { listeners: { "document:keydown": "handleKeydown($event)" } }, ngImport: i0, template: "<riv-modal (close)=\"close.emit()\" [obscure]=\"true\">\n <div [attr.data-animation-hook]=\"hook\" class=\"wrapper\">\n <div class=\"dialog\" [style.min-width]=\"minWidth\">\n <header>\n <span class=\"title\">\n {{ title }}\n </span>\n <button\n rivButton\n [variant]=\"'ghost'\"\n [icon]=\"'X'\"\n (click)=\"close.emit()\"\n ></button>\n </header>\n <div class=\"body\">\n <ng-content></ng-content>\n </div>\n <div class=\"footer\">\n <ng-content select=\"footer\"></ng-content>\n </div>\n </div>\n </div>\n</riv-modal>\n", styles: [".wrapper{position:absolute;top:50%;left:50%}.dialog{transform:translate(-50%,-50%);border-radius:var(--border-radius-medium);border:var(--border-width) solid var(--border-light);display:flex;flex-direction:column;max-width:calc(100vw - var(--size-xlarge) * 2);max-height:calc(100vh - var(--size-xlarge) * 2);overflow:hidden}header{display:flex;justify-content:space-between;align-items:center;padding:0 var(--size-medium);gap:var(--size-medium);border-bottom:var(--border-width) solid var(--border-light);background-color:var(--surface-light-1);flex-shrink:0}.title{font:var(--title-04);padding:var(--size-large) 0}.body{background-color:var(--surface-light-0);overflow-y:auto;min-height:0}.footer{border-top:var(--border-width) solid var(--border-light);background-color:var(--surface-light-1);flex-shrink:0}\n"], dependencies: [{ kind: "component", type: i1.ButtonComponent, selector: "[rivButton]", inputs: ["locked", "disabled", "loading", "full", "size", "variant", "icon", "iconPosition", "current"] }, { kind: "component", type: i2.ModalComponent, selector: "riv-modal", inputs: ["obscure", "topOffset"], outputs: ["close"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
|
|
21
|
+
DialogComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "14.3.0", type: DialogComponent, selector: "riv-dialog", inputs: { title: "title", minWidth: "minWidth", customBody: "customBody", customFooter: "customFooter" }, outputs: { close: "close" }, host: { listeners: { "document:keydown": "handleKeydown($event)" } }, ngImport: i0, template: "<riv-modal (close)=\"close.emit()\" [obscure]=\"true\">\n <div [attr.data-animation-hook]=\"hook\" class=\"wrapper\">\n <div class=\"dialog\" [style.min-width]=\"minWidth\">\n <header>\n <span class=\"title\">\n {{ title }}\n </span>\n <button\n rivButton\n [variant]=\"'ghost'\"\n [icon]=\"'X'\"\n (click)=\"close.emit()\"\n ></button>\n </header>\n <div class=\"body\" [class.custom]=\"customBody\">\n <ng-content></ng-content>\n </div>\n <div class=\"footer riv-dialog-footer\" [class.custom]=\"customFooter\">\n <ng-content select=\"footer\"></ng-content>\n </div>\n </div>\n </div>\n</riv-modal>\n", styles: [".wrapper{position:absolute;top:50%;left:50%}.dialog{transform:translate(-50%,-50%);border-radius:var(--border-radius-medium);border:var(--border-width) solid var(--border-light);display:flex;flex-direction:column;max-width:calc(100vw - var(--size-xlarge) * 2);max-height:calc(100vh - var(--size-xlarge) * 2);overflow:hidden}header{display:flex;justify-content:space-between;align-items:center;padding:0 var(--size-medium);gap:var(--size-medium);border-bottom:var(--border-width) solid var(--border-light);background-color:var(--surface-light-1);flex-shrink:0}.title{font:var(--title-04);padding:var(--size-large) 0}.body{background-color:var(--surface-light-0);overflow-y:auto;min-height:0}.body:not(.custom){padding:var(--size-large)}.footer{border-top:var(--border-width) solid var(--border-light);background-color:var(--surface-light-1);flex-shrink:0}.footer:not(:has(> footer)){display:none}\n"], dependencies: [{ kind: "component", type: i1.ButtonComponent, selector: "[rivButton]", inputs: ["locked", "disabled", "loading", "full", "size", "variant", "icon", "iconPosition", "current"] }, { kind: "component", type: i2.ModalComponent, selector: "riv-modal", inputs: ["obscure", "topOffset"], outputs: ["close"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
|
|
20
22
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.3.0", ngImport: i0, type: DialogComponent, decorators: [{
|
|
21
23
|
type: Component,
|
|
22
|
-
args: [{ selector: 'riv-dialog', changeDetection: ChangeDetectionStrategy.OnPush, template: "<riv-modal (close)=\"close.emit()\" [obscure]=\"true\">\n <div [attr.data-animation-hook]=\"hook\" class=\"wrapper\">\n <div class=\"dialog\" [style.min-width]=\"minWidth\">\n <header>\n <span class=\"title\">\n {{ title }}\n </span>\n <button\n rivButton\n [variant]=\"'ghost'\"\n [icon]=\"'X'\"\n (click)=\"close.emit()\"\n ></button>\n </header>\n <div class=\"body\">\n <ng-content></ng-content>\n </div>\n <div class=\"footer\">\n <ng-content select=\"footer\"></ng-content>\n </div>\n </div>\n </div>\n</riv-modal>\n", styles: [".wrapper{position:absolute;top:50%;left:50%}.dialog{transform:translate(-50%,-50%);border-radius:var(--border-radius-medium);border:var(--border-width) solid var(--border-light);display:flex;flex-direction:column;max-width:calc(100vw - var(--size-xlarge) * 2);max-height:calc(100vh - var(--size-xlarge) * 2);overflow:hidden}header{display:flex;justify-content:space-between;align-items:center;padding:0 var(--size-medium);gap:var(--size-medium);border-bottom:var(--border-width) solid var(--border-light);background-color:var(--surface-light-1);flex-shrink:0}.title{font:var(--title-04);padding:var(--size-large) 0}.body{background-color:var(--surface-light-0);overflow-y:auto;min-height:0}.footer{border-top:var(--border-width) solid var(--border-light);background-color:var(--surface-light-1);flex-shrink:0}\n"] }]
|
|
24
|
+
args: [{ selector: 'riv-dialog', changeDetection: ChangeDetectionStrategy.OnPush, template: "<riv-modal (close)=\"close.emit()\" [obscure]=\"true\">\n <div [attr.data-animation-hook]=\"hook\" class=\"wrapper\">\n <div class=\"dialog\" [style.min-width]=\"minWidth\">\n <header>\n <span class=\"title\">\n {{ title }}\n </span>\n <button\n rivButton\n [variant]=\"'ghost'\"\n [icon]=\"'X'\"\n (click)=\"close.emit()\"\n ></button>\n </header>\n <div class=\"body\" [class.custom]=\"customBody\">\n <ng-content></ng-content>\n </div>\n <div class=\"footer riv-dialog-footer\" [class.custom]=\"customFooter\">\n <ng-content select=\"footer\"></ng-content>\n </div>\n </div>\n </div>\n</riv-modal>\n", styles: [".wrapper{position:absolute;top:50%;left:50%}.dialog{transform:translate(-50%,-50%);border-radius:var(--border-radius-medium);border:var(--border-width) solid var(--border-light);display:flex;flex-direction:column;max-width:calc(100vw - var(--size-xlarge) * 2);max-height:calc(100vh - var(--size-xlarge) * 2);overflow:hidden}header{display:flex;justify-content:space-between;align-items:center;padding:0 var(--size-medium);gap:var(--size-medium);border-bottom:var(--border-width) solid var(--border-light);background-color:var(--surface-light-1);flex-shrink:0}.title{font:var(--title-04);padding:var(--size-large) 0}.body{background-color:var(--surface-light-0);overflow-y:auto;min-height:0}.body:not(.custom){padding:var(--size-large)}.footer{border-top:var(--border-width) solid var(--border-light);background-color:var(--surface-light-1);flex-shrink:0}.footer:not(:has(> footer)){display:none}\n"] }]
|
|
23
25
|
}], propDecorators: { title: [{
|
|
24
26
|
type: Input
|
|
25
27
|
}], minWidth: [{
|
|
26
28
|
type: Input
|
|
29
|
+
}], customBody: [{
|
|
30
|
+
type: Input
|
|
31
|
+
}], customFooter: [{
|
|
32
|
+
type: Input
|
|
27
33
|
}], close: [{
|
|
28
34
|
type: Output
|
|
29
35
|
}], handleKeydown: [{
|
|
30
36
|
type: HostListener,
|
|
31
37
|
args: ['document:keydown', ['$event']]
|
|
32
38
|
}] } });
|
|
33
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
39
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGlhbG9nLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL3Jpdi9zcmMvbGliL292ZXJsYXkvbW9kYWwvZGlhbG9nL2RpYWxvZy5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9yaXYvc3JjL2xpYi9vdmVybGF5L21vZGFsL2RpYWxvZy9kaWFsb2cuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUNMLHVCQUF1QixFQUN2QixTQUFTLEVBQ1QsWUFBWSxFQUNaLFlBQVksRUFDWixLQUFLLEVBQ0wsTUFBTSxHQUNQLE1BQU0sZUFBZSxDQUFDO0FBQ3ZCLE9BQU8sRUFBRSxtQkFBbUIsRUFBRSxNQUFNLGdDQUFnQyxDQUFDOzs7O0FBUXJFLE1BQU0sT0FBTyxlQUFlO0lBTjVCO1FBY0UsZUFBVSxHQUFHLEtBQUssQ0FBQztRQUduQixpQkFBWSxHQUFHLEtBQUssQ0FBQztRQUdyQixVQUFLLEdBQUcsSUFBSSxZQUFZLEVBQVEsQ0FBQztRQVV4QixTQUFJLEdBQUcsbUJBQW1CLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQztLQUNqRDtJQVJDLGFBQWEsQ0FBQyxLQUFvQjtRQUNoQyxJQUFJLEtBQUssQ0FBQyxHQUFHLEtBQUssUUFBUSxFQUFFO1lBQzFCLEtBQUssQ0FBQyxjQUFjLEVBQUUsQ0FBQztZQUN2QixJQUFJLENBQUMsS0FBSyxDQUFDLElBQUksRUFBRSxDQUFDO1NBQ25CO0lBQ0gsQ0FBQzs7NEdBdEJVLGVBQWU7Z0dBQWYsZUFBZSwrUENoQjVCLHl0QkF1QkE7MkZEUGEsZUFBZTtrQkFOM0IsU0FBUzsrQkFDRSxZQUFZLG1CQUdMLHVCQUF1QixDQUFDLE1BQU07OEJBSS9DLEtBQUs7c0JBREosS0FBSztnQkFJTixRQUFRO3NCQURQLEtBQUs7Z0JBSU4sVUFBVTtzQkFEVCxLQUFLO2dCQUlOLFlBQVk7c0JBRFgsS0FBSztnQkFJTixLQUFLO3NCQURKLE1BQU07Z0JBSVAsYUFBYTtzQkFEWixZQUFZO3VCQUFDLGtCQUFrQixFQUFFLENBQUMsUUFBUSxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtcbiAgQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3ksXG4gIENvbXBvbmVudCxcbiAgRXZlbnRFbWl0dGVyLFxuICBIb3N0TGlzdGVuZXIsXG4gIElucHV0LFxuICBPdXRwdXQsXG59IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgQU5JTUFUSU9OX0NPTlNUQU5UUyB9IGZyb20gJy4uLy4uL292ZXJsYXktb3V0bGV0LmNvbXBvbmVudCc7XG5cbkBDb21wb25lbnQoe1xuICBzZWxlY3RvcjogJ3Jpdi1kaWFsb2cnLFxuICB0ZW1wbGF0ZVVybDogJy4vZGlhbG9nLmNvbXBvbmVudC5odG1sJyxcbiAgc3R5bGVVcmxzOiBbJy4vZGlhbG9nLmNvbXBvbmVudC5jc3MnXSxcbiAgY2hhbmdlRGV0ZWN0aW9uOiBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneS5PblB1c2gsXG59KVxuZXhwb3J0IGNsYXNzIERpYWxvZ0NvbXBvbmVudCB7XG4gIEBJbnB1dCgpXG4gIHRpdGxlPzogc3RyaW5nO1xuXG4gIEBJbnB1dCgpXG4gIG1pbldpZHRoPzogc3RyaW5nO1xuXG4gIEBJbnB1dCgpXG4gIGN1c3RvbUJvZHkgPSBmYWxzZTtcblxuICBASW5wdXQoKVxuICBjdXN0b21Gb290ZXIgPSBmYWxzZTtcblxuICBAT3V0cHV0KClcbiAgY2xvc2UgPSBuZXcgRXZlbnRFbWl0dGVyPHZvaWQ+KCk7XG5cbiAgQEhvc3RMaXN0ZW5lcignZG9jdW1lbnQ6a2V5ZG93bicsIFsnJGV2ZW50J10pXG4gIGhhbmRsZUtleWRvd24oZXZlbnQ6IEtleWJvYXJkRXZlbnQpIHtcbiAgICBpZiAoZXZlbnQua2V5ID09PSAnRXNjYXBlJykge1xuICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgICAgIHRoaXMuY2xvc2UuZW1pdCgpO1xuICAgIH1cbiAgfVxuXG4gIHJlYWRvbmx5IGhvb2sgPSBBTklNQVRJT05fQ09OU1RBTlRTLkRJQUxPRy5IT09LO1xufVxuIiwiPHJpdi1tb2RhbCAoY2xvc2UpPVwiY2xvc2UuZW1pdCgpXCIgW29ic2N1cmVdPVwidHJ1ZVwiPlxuICA8ZGl2IFthdHRyLmRhdGEtYW5pbWF0aW9uLWhvb2tdPVwiaG9va1wiIGNsYXNzPVwid3JhcHBlclwiPlxuICAgIDxkaXYgY2xhc3M9XCJkaWFsb2dcIiBbc3R5bGUubWluLXdpZHRoXT1cIm1pbldpZHRoXCI+XG4gICAgICA8aGVhZGVyPlxuICAgICAgICA8c3BhbiBjbGFzcz1cInRpdGxlXCI+XG4gICAgICAgICAge3sgdGl0bGUgfX1cbiAgICAgICAgPC9zcGFuPlxuICAgICAgICA8YnV0dG9uXG4gICAgICAgICAgcml2QnV0dG9uXG4gICAgICAgICAgW3ZhcmlhbnRdPVwiJ2dob3N0J1wiXG4gICAgICAgICAgW2ljb25dPVwiJ1gnXCJcbiAgICAgICAgICAoY2xpY2spPVwiY2xvc2UuZW1pdCgpXCJcbiAgICAgICAgPjwvYnV0dG9uPlxuICAgICAgPC9oZWFkZXI+XG4gICAgICA8ZGl2IGNsYXNzPVwiYm9keVwiIFtjbGFzcy5jdXN0b21dPVwiY3VzdG9tQm9keVwiPlxuICAgICAgICA8bmctY29udGVudD48L25nLWNvbnRlbnQ+XG4gICAgICA8L2Rpdj5cbiAgICAgIDxkaXYgY2xhc3M9XCJmb290ZXIgcml2LWRpYWxvZy1mb290ZXJcIiBbY2xhc3MuY3VzdG9tXT1cImN1c3RvbUZvb3RlclwiPlxuICAgICAgICA8bmctY29udGVudCBzZWxlY3Q9XCJmb290ZXJcIj48L25nLWNvbnRlbnQ+XG4gICAgICA8L2Rpdj5cbiAgICA8L2Rpdj5cbiAgPC9kaXY+XG48L3Jpdi1tb2RhbD5cbiJdfQ==
|
|
@@ -45,10 +45,10 @@ export class TableSearchColumnsComponent {
|
|
|
45
45
|
}
|
|
46
46
|
}
|
|
47
47
|
TableSearchColumnsComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.3.0", ngImport: i0, type: TableSearchColumnsComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
|
|
48
|
-
TableSearchColumnsComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "14.3.0", type: TableSearchColumnsComponent, selector: "riv-table-search-columns", inputs: { manager: "manager", disabled: "disabled" }, ngImport: i0, template: "<ng-container *ngIf=\"columnList | async; let s\">\n <button #trigger class=\"trigger-button\" (click)=\"open.next(true)\">\n <riv-icon [name]=\"'MoreVertical'\" [size]=\"16\"></riv-icon>\n </button>\n <ng-container *ngIf=\"open | async\">\n <riv-callout\n *riv-overlay\n [anchor]=\"trigger\"\n [showCaret]=\"false\"\n [preferredPosition]=\"'bottom-left'\"\n [theme]=\"'light'\"\n (close)=\"open.next(false)\"\n >\n <div class=\"content-body\">\n <div class=\"header-container\">\n <riv-help\n [size]=\"12\"\n [help]=\"'Toggle which columns are included in table search results'\"\n ></riv-help\n ><span class=\"header-text\">Search in</span>\n </div>\n\n <ng-container\n [ngTemplateOutlet]=\"optionList\"\n [ngTemplateOutletContext]=\"{ columns: s.activeSearchColumns }\"\n ></ng-container>\n\n <div *ngIf=\"s.hiddenSearchColumns.length > 0\" class=\"column-header\">\n Hidden columns\n </div>\n\n <ng-container\n *ngIf=\"s.hiddenSearchColumns.length > 0\"\n [ngTemplateOutlet]=\"optionList\"\n [ngTemplateOutletContext]=\"{ columns: s.hiddenSearchColumns }\"\n ></ng-container>\n\n <ng-template #optionList let-columns=\"columns\">\n <ng-container *ngFor=\"let column of columns\">\n <ng-container\n [ngTemplateOutlet]=\"option\"\n [ngTemplateOutletContext]=\"{ node: column }\"\n ></ng-container>\n </ng-container>\n </ng-template>\n\n <ng-template #option let-node=\"node\">\n <div class=\"node-container\">\n <span class=\"node-text\">{{ node.title }}</span>\n <riv-switch-checkbox\n [size]=\"'small'\"\n [value]=\"node.searchEnabled\"\n [disabled]=\"s.searchEnabledCount === 1 && node.searchEnabled\"\n [rivTooltip]=\"\n s.searchEnabledCount === 1 && node.searchEnabled\n ? 'At least one search field is required'\n : undefined\n \"\n (valueChange)=\"updateColumns(node.id, $event)\"\n ></riv-switch-checkbox>\n </div>\n </ng-template>\n </div>\n </riv-callout>\n </ng-container>\n</ng-container>\n", styles: [".node-container{display:flex;justify-content:space-between;margin:var(--size-small) var(--size-medium)}.node-text{font:var(--input-medium)}.header-container{margin:calc(var(--base-grid-size) * .75) var(--size-medium);padding-bottom:var(--size-small)}.header-text{font:var(--input-medium);margin-left:var(--size-small)}.footer-container{display:flex;justify-content:end}.trigger-button{margin-top:var(--size-small);border-radius:var(--border-radius-small)}.trigger-button:hover{background-color:var(--black-20);cursor:pointer;transition:background-color var(--short-transition)}.column-header{margin:var(--size-small) var(--size-medium);font:var(--input-medium);color:var(--type-light-low-contrast)}.content-body{display:flex;max-height:50vh;overflow-y:auto;flex-direction:column;align-items:stretch;gap:var(--size-small);padding:var(--size-large);min-width:calc(var(--base-grid-size) * 75)}\n"], dependencies: [{ kind: "directive", type: i1.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i1.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "component", type: i2.CalloutComponent, selector: "riv-callout", inputs: ["anchor", "isModal", "preferredPosition", "allowedPositions", "fallbackDirection", "showCaret", "theme"], outputs: ["close"] }, { kind: "component", type: i3.HelpComponent, selector: "riv-help", inputs: ["help", "size"] }, { kind: "component", type: i4.IconComponent, selector: "riv-icon", inputs: ["name", "fillColor", "size", "customSize", "strokeWidth"] }, { kind: "directive", type: i5.OverlayDirective, selector: "[riv-overlay]" }, { kind: "component", type: i6.SwitchCheckboxComponent, selector: "riv-switch-checkbox", inputs: ["size"] }, { kind: "directive", type: i7.TooltipDirective, selector: "[rivTooltip]", inputs: ["rivTooltip", "rivTooltipTheme", "rivTooltipMaxWidth", "rivTooltipPreferredPosition", "rivTooltipCloseDelay", "rivTooltipOpenDelay"] }, { kind: "pipe", type: i1.AsyncPipe, name: "async" }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
|
|
48
|
+
TableSearchColumnsComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "14.3.0", type: TableSearchColumnsComponent, selector: "riv-table-search-columns", inputs: { manager: "manager", disabled: "disabled" }, ngImport: i0, template: "<ng-container *ngIf=\"columnList | async; let s\">\n <button #trigger class=\"trigger-button\" (click)=\"open.next(true)\">\n <riv-icon [name]=\"'MoreVertical'\" [size]=\"16\"></riv-icon>\n </button>\n <ng-container *ngIf=\"open | async\">\n <riv-callout\n *riv-overlay\n [anchor]=\"trigger\"\n [showCaret]=\"false\"\n [preferredPosition]=\"'bottom-left'\"\n [theme]=\"'light'\"\n (close)=\"open.next(false)\"\n >\n <div class=\"content-body\">\n <div class=\"header-container\">\n <riv-help\n [size]=\"12\"\n [help]=\"'Toggle which columns are included in table search results'\"\n ></riv-help\n ><span class=\"header-text\">Search in</span>\n </div>\n\n <ng-container\n [ngTemplateOutlet]=\"optionList\"\n [ngTemplateOutletContext]=\"{ columns: s.activeSearchColumns }\"\n ></ng-container>\n\n <div *ngIf=\"s.hiddenSearchColumns.length > 0\" class=\"column-header\">\n Hidden columns\n </div>\n\n <ng-container\n *ngIf=\"s.hiddenSearchColumns.length > 0\"\n [ngTemplateOutlet]=\"optionList\"\n [ngTemplateOutletContext]=\"{ columns: s.hiddenSearchColumns }\"\n ></ng-container>\n\n <ng-template #optionList let-columns=\"columns\">\n <ng-container *ngFor=\"let column of columns\">\n <ng-container\n [ngTemplateOutlet]=\"option\"\n [ngTemplateOutletContext]=\"{ node: column }\"\n ></ng-container>\n </ng-container>\n </ng-template>\n\n <ng-template #option let-node=\"node\">\n <div class=\"node-container\">\n <span class=\"node-text\">{{ node.title }}</span>\n <riv-switch-checkbox\n [size]=\"'small'\"\n [value]=\"node.searchEnabled\"\n [disabled]=\"s.searchEnabledCount === 1 && node.searchEnabled\"\n [rivTooltip]=\"\n s.searchEnabledCount === 1 && node.searchEnabled\n ? 'At least one search field is required'\n : undefined\n \"\n (valueChange)=\"updateColumns(node.id, $event)\"\n ></riv-switch-checkbox>\n </div>\n </ng-template>\n </div>\n </riv-callout>\n </ng-container>\n</ng-container>\n", styles: [".node-container{display:flex;justify-content:space-between;margin:var(--size-small) var(--size-medium)}.node-text{font:var(--input-medium)}.header-container{margin:calc(var(--base-grid-size) * .75) var(--size-medium);padding-bottom:var(--size-small)}.header-text{font:var(--input-medium);margin-left:var(--size-small)}.footer-container{display:flex;justify-content:flex-end}.trigger-button{margin-top:var(--size-small);border-radius:var(--border-radius-small)}.trigger-button:hover{background-color:var(--black-20);cursor:pointer;transition:background-color var(--short-transition)}.column-header{margin:var(--size-small) var(--size-medium);font:var(--input-medium);color:var(--type-light-low-contrast)}.content-body{display:flex;max-height:50vh;overflow-y:auto;flex-direction:column;align-items:stretch;gap:var(--size-small);padding:var(--size-large);min-width:calc(var(--base-grid-size) * 75)}\n"], dependencies: [{ kind: "directive", type: i1.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i1.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "component", type: i2.CalloutComponent, selector: "riv-callout", inputs: ["anchor", "isModal", "preferredPosition", "allowedPositions", "fallbackDirection", "showCaret", "theme"], outputs: ["close"] }, { kind: "component", type: i3.HelpComponent, selector: "riv-help", inputs: ["help", "size"] }, { kind: "component", type: i4.IconComponent, selector: "riv-icon", inputs: ["name", "fillColor", "size", "customSize", "strokeWidth"] }, { kind: "directive", type: i5.OverlayDirective, selector: "[riv-overlay]" }, { kind: "component", type: i6.SwitchCheckboxComponent, selector: "riv-switch-checkbox", inputs: ["size"] }, { kind: "directive", type: i7.TooltipDirective, selector: "[rivTooltip]", inputs: ["rivTooltip", "rivTooltipTheme", "rivTooltipMaxWidth", "rivTooltipPreferredPosition", "rivTooltipCloseDelay", "rivTooltipOpenDelay"] }, { kind: "pipe", type: i1.AsyncPipe, name: "async" }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
|
|
49
49
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.3.0", ngImport: i0, type: TableSearchColumnsComponent, decorators: [{
|
|
50
50
|
type: Component,
|
|
51
|
-
args: [{ selector: 'riv-table-search-columns', changeDetection: ChangeDetectionStrategy.OnPush, template: "<ng-container *ngIf=\"columnList | async; let s\">\n <button #trigger class=\"trigger-button\" (click)=\"open.next(true)\">\n <riv-icon [name]=\"'MoreVertical'\" [size]=\"16\"></riv-icon>\n </button>\n <ng-container *ngIf=\"open | async\">\n <riv-callout\n *riv-overlay\n [anchor]=\"trigger\"\n [showCaret]=\"false\"\n [preferredPosition]=\"'bottom-left'\"\n [theme]=\"'light'\"\n (close)=\"open.next(false)\"\n >\n <div class=\"content-body\">\n <div class=\"header-container\">\n <riv-help\n [size]=\"12\"\n [help]=\"'Toggle which columns are included in table search results'\"\n ></riv-help\n ><span class=\"header-text\">Search in</span>\n </div>\n\n <ng-container\n [ngTemplateOutlet]=\"optionList\"\n [ngTemplateOutletContext]=\"{ columns: s.activeSearchColumns }\"\n ></ng-container>\n\n <div *ngIf=\"s.hiddenSearchColumns.length > 0\" class=\"column-header\">\n Hidden columns\n </div>\n\n <ng-container\n *ngIf=\"s.hiddenSearchColumns.length > 0\"\n [ngTemplateOutlet]=\"optionList\"\n [ngTemplateOutletContext]=\"{ columns: s.hiddenSearchColumns }\"\n ></ng-container>\n\n <ng-template #optionList let-columns=\"columns\">\n <ng-container *ngFor=\"let column of columns\">\n <ng-container\n [ngTemplateOutlet]=\"option\"\n [ngTemplateOutletContext]=\"{ node: column }\"\n ></ng-container>\n </ng-container>\n </ng-template>\n\n <ng-template #option let-node=\"node\">\n <div class=\"node-container\">\n <span class=\"node-text\">{{ node.title }}</span>\n <riv-switch-checkbox\n [size]=\"'small'\"\n [value]=\"node.searchEnabled\"\n [disabled]=\"s.searchEnabledCount === 1 && node.searchEnabled\"\n [rivTooltip]=\"\n s.searchEnabledCount === 1 && node.searchEnabled\n ? 'At least one search field is required'\n : undefined\n \"\n (valueChange)=\"updateColumns(node.id, $event)\"\n ></riv-switch-checkbox>\n </div>\n </ng-template>\n </div>\n </riv-callout>\n </ng-container>\n</ng-container>\n", styles: [".node-container{display:flex;justify-content:space-between;margin:var(--size-small) var(--size-medium)}.node-text{font:var(--input-medium)}.header-container{margin:calc(var(--base-grid-size) * .75) var(--size-medium);padding-bottom:var(--size-small)}.header-text{font:var(--input-medium);margin-left:var(--size-small)}.footer-container{display:flex;justify-content:end}.trigger-button{margin-top:var(--size-small);border-radius:var(--border-radius-small)}.trigger-button:hover{background-color:var(--black-20);cursor:pointer;transition:background-color var(--short-transition)}.column-header{margin:var(--size-small) var(--size-medium);font:var(--input-medium);color:var(--type-light-low-contrast)}.content-body{display:flex;max-height:50vh;overflow-y:auto;flex-direction:column;align-items:stretch;gap:var(--size-small);padding:var(--size-large);min-width:calc(var(--base-grid-size) * 75)}\n"] }]
|
|
51
|
+
args: [{ selector: 'riv-table-search-columns', changeDetection: ChangeDetectionStrategy.OnPush, template: "<ng-container *ngIf=\"columnList | async; let s\">\n <button #trigger class=\"trigger-button\" (click)=\"open.next(true)\">\n <riv-icon [name]=\"'MoreVertical'\" [size]=\"16\"></riv-icon>\n </button>\n <ng-container *ngIf=\"open | async\">\n <riv-callout\n *riv-overlay\n [anchor]=\"trigger\"\n [showCaret]=\"false\"\n [preferredPosition]=\"'bottom-left'\"\n [theme]=\"'light'\"\n (close)=\"open.next(false)\"\n >\n <div class=\"content-body\">\n <div class=\"header-container\">\n <riv-help\n [size]=\"12\"\n [help]=\"'Toggle which columns are included in table search results'\"\n ></riv-help\n ><span class=\"header-text\">Search in</span>\n </div>\n\n <ng-container\n [ngTemplateOutlet]=\"optionList\"\n [ngTemplateOutletContext]=\"{ columns: s.activeSearchColumns }\"\n ></ng-container>\n\n <div *ngIf=\"s.hiddenSearchColumns.length > 0\" class=\"column-header\">\n Hidden columns\n </div>\n\n <ng-container\n *ngIf=\"s.hiddenSearchColumns.length > 0\"\n [ngTemplateOutlet]=\"optionList\"\n [ngTemplateOutletContext]=\"{ columns: s.hiddenSearchColumns }\"\n ></ng-container>\n\n <ng-template #optionList let-columns=\"columns\">\n <ng-container *ngFor=\"let column of columns\">\n <ng-container\n [ngTemplateOutlet]=\"option\"\n [ngTemplateOutletContext]=\"{ node: column }\"\n ></ng-container>\n </ng-container>\n </ng-template>\n\n <ng-template #option let-node=\"node\">\n <div class=\"node-container\">\n <span class=\"node-text\">{{ node.title }}</span>\n <riv-switch-checkbox\n [size]=\"'small'\"\n [value]=\"node.searchEnabled\"\n [disabled]=\"s.searchEnabledCount === 1 && node.searchEnabled\"\n [rivTooltip]=\"\n s.searchEnabledCount === 1 && node.searchEnabled\n ? 'At least one search field is required'\n : undefined\n \"\n (valueChange)=\"updateColumns(node.id, $event)\"\n ></riv-switch-checkbox>\n </div>\n </ng-template>\n </div>\n </riv-callout>\n </ng-container>\n</ng-container>\n", styles: [".node-container{display:flex;justify-content:space-between;margin:var(--size-small) var(--size-medium)}.node-text{font:var(--input-medium)}.header-container{margin:calc(var(--base-grid-size) * .75) var(--size-medium);padding-bottom:var(--size-small)}.header-text{font:var(--input-medium);margin-left:var(--size-small)}.footer-container{display:flex;justify-content:flex-end}.trigger-button{margin-top:var(--size-small);border-radius:var(--border-radius-small)}.trigger-button:hover{background-color:var(--black-20);cursor:pointer;transition:background-color var(--short-transition)}.column-header{margin:var(--size-small) var(--size-medium);font:var(--input-medium);color:var(--type-light-low-contrast)}.content-body{display:flex;max-height:50vh;overflow-y:auto;flex-direction:column;align-items:stretch;gap:var(--size-small);padding:var(--size-large);min-width:calc(var(--base-grid-size) * 75)}\n"] }]
|
|
52
52
|
}], propDecorators: { manager: [{
|
|
53
53
|
type: Input
|
|
54
54
|
}], disabled: [{
|