ngx-dynamic-entity 1.2.0 → 1.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/README.md CHANGED
@@ -25,7 +25,7 @@ No Angular Material required. This package has no dependency on Material or the
25
25
  - **`DynamicRecordFormComponent`** — record editor with summary drawer (`showOnMinimize`), profile header, and per-section saving.
26
26
  - **Reactive rules** — real-time condition evaluation driving field/tab visibility, validation errors and warnings, and info banners.
27
27
  - **Entity references & cascades** — consumer-registered loaders, parent→child dropdown filtering, and `autoPatch` record copying.
28
- - **19 field types** — each a standalone component, registered explicitly so unused types are never bundled.
28
+ - **20 field types** — each a standalone component, registered explicitly so unused types are never bundled.
29
29
 
30
30
  ---
31
31
 
@@ -0,0 +1,138 @@
1
+ import { Component, Input, ChangeDetectionStrategy } from '@angular/core';
2
+ import { ReactiveFormsModule } from '@angular/forms';
3
+ import { resolveLabel } from '@dynamic-entity/core';
4
+ import * as i0 from "@angular/core";
5
+ /**
6
+ * Reads a stored value into a `Date`.
7
+ *
8
+ * A bare calendar date is pinned to *local* midnight. `new Date('2020-01-01')` reads a
9
+ * date-only string as UTC midnight, which renders as the previous day anywhere west of
10
+ * Greenwich — and every legacy `datetime` value has exactly that shape, because the type
11
+ * used to render through `DateFieldComponent` and its `type="date"` input.
12
+ */
13
+ function parseStored(value) {
14
+ if (value === null || value === undefined || value === '')
15
+ return null;
16
+ if (value instanceof Date)
17
+ return Number.isNaN(value.getTime()) ? null : value;
18
+ const raw = String(value);
19
+ const dateOnly = /^(\d{4})-(\d{2})-(\d{2})$/.exec(raw);
20
+ if (dateOnly)
21
+ return new Date(+dateOnly[1], +dateOnly[2] - 1, +dateOnly[3]);
22
+ const parsed = new Date(raw);
23
+ return Number.isNaN(parsed.getTime()) ? null : parsed;
24
+ }
25
+ const pad = (n) => String(n).padStart(2, '0');
26
+ /**
27
+ * Date & Time field: a single `datetime-local` input.
28
+ *
29
+ * The type is stored as ISO 8601 UTC, per the same convention `date` follows, while the
30
+ * input works in the viewer's local zone — `datetime-local` has no offset, so the two
31
+ * conversions here are what keep a value stable across a round trip.
32
+ */
33
+ export class DateTimeFieldComponent {
34
+ field;
35
+ control;
36
+ language = 'en';
37
+ readonly = false;
38
+ masked = false;
39
+ get label() {
40
+ return resolveLabel(this.field?.label, this.language);
41
+ }
42
+ /** Stored ISO 8601 → the `YYYY-MM-DDTHH:mm` local form the input requires. */
43
+ get inputValue() {
44
+ const d = parseStored(this.control?.value);
45
+ if (!d)
46
+ return '';
47
+ return `${d.getFullYear()}-${pad(d.getMonth() + 1)}-${pad(d.getDate())}T${pad(d.getHours())}:${pad(d.getMinutes())}`;
48
+ }
49
+ /** The input's local `YYYY-MM-DDTHH:mm` → stored ISO 8601 UTC. */
50
+ onInput(value) {
51
+ if (!value) {
52
+ this.control.setValue(null);
53
+ this.control.markAsTouched();
54
+ return;
55
+ }
56
+ const d = new Date(value);
57
+ // An unparseable value is stored verbatim rather than silently discarded, so a validator
58
+ // sees what the user actually entered.
59
+ this.control.setValue(Number.isNaN(d.getTime()) ? value : d.toISOString());
60
+ this.control.markAsTouched();
61
+ }
62
+ /**
63
+ * Displays date *and* time. `DateFieldComponent` used `toLocaleDateString()` here, so a
64
+ * datetime read back through the field showed no time while the same value in the record
65
+ * summary — which goes through core's `formatDisplayValue` — showed it.
66
+ */
67
+ formatDateTime(value) {
68
+ const d = parseStored(value);
69
+ return d ? d.toLocaleString() : '—';
70
+ }
71
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: DateTimeFieldComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
72
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "17.3.12", type: DateTimeFieldComponent, isStandalone: true, selector: "ngx-date-time-field", inputs: { field: "field", control: "control", language: "language", readonly: "readonly", masked: "masked" }, ngImport: i0, template: `
73
+ <div class="ngx-field ngx-field--datetime"
74
+ [attr.data-testid]="'field-' + field.id" [attr.data-field-type]="field.type" [class.ngx-field--readonly]="readonly" [class.ngx-field--masked]="masked">
75
+ <label class="ngx-field__label" [attr.for]="field.id">{{ label }}</label>
76
+ @if (masked) {
77
+ <span class="ngx-field__value ngx-field__value--masked" [attr.data-testid]="'field-' + field.id + '-masked'">XXXXXXXXX</span>
78
+ } @else if (readonly) {
79
+ <span class="ngx-field__value" [attr.data-testid]="'field-' + field.id + '-value'">{{ formatDateTime(control.value) }}</span>
80
+ } @else {
81
+ <input
82
+ [id]="field.id"
83
+ class="ngx-field__input" [attr.data-testid]="'field-' + field.id + '-input'"
84
+ type="datetime-local"
85
+ [value]="inputValue"
86
+ (change)="onInput($any($event.target).value)"
87
+ [attr.disabled]="field.disabled ? true : null"
88
+ />
89
+ @if (control.invalid && control.touched) {
90
+ <span class="ngx-field__error" [attr.data-testid]="'field-' + field.id + '-error'">This field has an error</span>
91
+ }
92
+ }
93
+ </div>
94
+ `, isInline: true, dependencies: [{ kind: "ngmodule", type: ReactiveFormsModule }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
95
+ }
96
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: DateTimeFieldComponent, decorators: [{
97
+ type: Component,
98
+ args: [{
99
+ changeDetection: ChangeDetectionStrategy.OnPush,
100
+ selector: 'ngx-date-time-field',
101
+ standalone: true,
102
+ imports: [ReactiveFormsModule],
103
+ template: `
104
+ <div class="ngx-field ngx-field--datetime"
105
+ [attr.data-testid]="'field-' + field.id" [attr.data-field-type]="field.type" [class.ngx-field--readonly]="readonly" [class.ngx-field--masked]="masked">
106
+ <label class="ngx-field__label" [attr.for]="field.id">{{ label }}</label>
107
+ @if (masked) {
108
+ <span class="ngx-field__value ngx-field__value--masked" [attr.data-testid]="'field-' + field.id + '-masked'">XXXXXXXXX</span>
109
+ } @else if (readonly) {
110
+ <span class="ngx-field__value" [attr.data-testid]="'field-' + field.id + '-value'">{{ formatDateTime(control.value) }}</span>
111
+ } @else {
112
+ <input
113
+ [id]="field.id"
114
+ class="ngx-field__input" [attr.data-testid]="'field-' + field.id + '-input'"
115
+ type="datetime-local"
116
+ [value]="inputValue"
117
+ (change)="onInput($any($event.target).value)"
118
+ [attr.disabled]="field.disabled ? true : null"
119
+ />
120
+ @if (control.invalid && control.touched) {
121
+ <span class="ngx-field__error" [attr.data-testid]="'field-' + field.id + '-error'">This field has an error</span>
122
+ }
123
+ }
124
+ </div>
125
+ `,
126
+ }]
127
+ }], propDecorators: { field: [{
128
+ type: Input
129
+ }], control: [{
130
+ type: Input
131
+ }], language: [{
132
+ type: Input
133
+ }], readonly: [{
134
+ type: Input
135
+ }], masked: [{
136
+ type: Input
137
+ }] } });
138
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGF0ZS10aW1lLWZpZWxkLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3NyYy9saWIvZmllbGQtdHlwZXMvZGF0ZS10aW1lLWZpZWxkLmNvbXBvbmVudC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsU0FBUyxFQUFFLEtBQUssRUFBRSx1QkFBdUIsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUMxRSxPQUFPLEVBQW1CLG1CQUFtQixFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFFdEUsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLHNCQUFzQixDQUFDOztBQUVwRDs7Ozs7OztHQU9HO0FBQ0gsU0FBUyxXQUFXLENBQUMsS0FBYztJQUNqQyxJQUFJLEtBQUssS0FBSyxJQUFJLElBQUksS0FBSyxLQUFLLFNBQVMsSUFBSSxLQUFLLEtBQUssRUFBRTtRQUFFLE9BQU8sSUFBSSxDQUFDO0lBQ3ZFLElBQUksS0FBSyxZQUFZLElBQUk7UUFBRSxPQUFPLE1BQU0sQ0FBQyxLQUFLLENBQUMsS0FBSyxDQUFDLE9BQU8sRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDO0lBRS9FLE1BQU0sR0FBRyxHQUFHLE1BQU0sQ0FBQyxLQUFLLENBQUMsQ0FBQztJQUMxQixNQUFNLFFBQVEsR0FBRywyQkFBMkIsQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUM7SUFDdkQsSUFBSSxRQUFRO1FBQUUsT0FBTyxJQUFJLElBQUksQ0FBQyxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUU1RSxNQUFNLE1BQU0sR0FBRyxJQUFJLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQztJQUM3QixPQUFPLE1BQU0sQ0FBQyxLQUFLLENB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LEtBQUsiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDb21wb25lbnQsIElucHV0LCBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneSB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgQWJzdHJhY3RDb250cm9sLCBSZWFjdGl2ZUZvcm1zTW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvZm9ybXMnO1xuaW1wb3J0IHR5cGUgeyBOZXN0ZWRGaWVsZENvbmZpZyB9IGZyb20gJ0BkeW5hbWljLWVudGl0eS9jb3JlJztcbmltcG9ydCB7IHJlc29sdmVMYWJlbCB9IGZyb20gJ0BkeW5hbWljLWVudGl0eS9jb3JlJztcblxuLyoqXG4gKiBSZWFkcyBhIHN0b3JlZCB2YWx1ZSBpbnRvIGEgYERhdGVgLlxuICpcbiAqIEEgYmFyZSBjYWxlbmRhciBkYXRlIGlzIHBpbm5lZCB0byAqbG9jYWwqIG1pZG5pZ2h0LiBgbmV3IERhdGUoJzIwMjAtMDEtMDEnKWAgcmVhZHMgYVxuICogZGF0ZS1vbmx5IHN0cmluZyBhcyBVVEMgbWlkbmlnaHQsIHdoaWNoIHJlbmRlcnMgYXMgdGhlIHByZXZpb3VzIGRheSBhbnl3aGVyZSB3ZXN0IG9mXG4gKiBHcmVlbndpY2gg4oCUIGFuZCBldmVyeSBsZWdhY3kgYGRhdGV0aW1lYCB2YWx1ZSBoYXMgZXhhY3RseSB0aGF0IHNoYXBlLCBiZWNhdXNlIHRoZSB0eXBlXG4gKiB1c2VkIHRvIHJlbmRlciB0aHJvdWdoIGBEYXRlRmllbGRDb21wb25lbnRgIGFuZCBpdHMgYHR5cGU9XCJkYXRlXCJgIGlucHV0LlxuICovXG5mdW5jdGlvbiBwYXJzZVN0b3JlZCh2YWx1ZTogdW5rbm93bik6IERhdGUgfCBudWxsIHtcbiAgaWYgKHZhbHVlID09PSBudWxsIHx8IHZhbHVlID09PSB1bmRlZmluZWQgfHwgdmFsdWUgPT09ICcnKSByZXR1cm4gbnVsbDtcbiAgaWYgKHZhbHVlIGluc3RhbmNlb2YgRGF0ZSkgcmV0dXJuIE51bWJlci5pc05hTih2YWx1ZS5nZXRUaW1lKCkpID8gbnVsbCA6IHZhbHVlO1xuXG4gIGNvbnN0IHJhdyA9IFN0cmluZyh2YWx1ZSk7XG4gIGNvbnN0IGRhdGVPbmx5ID0gL14oXFxkezR9KS0oXFxkezJ9KS0oXFxkezJ9KSQvLmV4ZWMocmF3KTtcbiAgaWYgKGRhdGVPbmx5KSByZXR1cm4gbmV3IERhdGUoK2RhdGVPbmx5WzFdLCArZGF0ZU9ubHlbMl0gLSAxLCArZGF0ZU9ubHlbM10pO1xuXG4gIGNvbnN0IHBhcnNlZCA9IG5ldyBEYXRlKHJhdyk7XG4gIHJldHVybiBOdW1iZXIuaXNOYU4ocGFyc2VkLmdldFRpbWUoKSkgPyBudWxsIDogcGFyc2VkO1xufVxuXG5jb25zdCBwYWQgPSAobjogbnVtYmVyKTogc3RyaW5nID0+IFN0cmluZyhuKS5wYWRTdGFydCgyLCAnMCcpO1xuXG4vKipcbiAqIERhdGUgJiBUaW1lIGZpZWxkOiBhIHNpbmdsZSBgZGF0ZXRpbWUtbG9jYWxgIGlucHV0LlxuICpcbiAqIFRoZSB0eXBlIGlzIHN0b3JlZCBhcyBJU08gODYwMSBVVEMsIHBlciB0aGUgc2FtZSBjb252ZW50aW9uIGBkYXRlYCBmb2xsb3dzLCB3aGlsZSB0aGVcbiAqIGlucHV0IHdvcmtzIGluIHRoZSB2aWV3ZXIncyBsb2NhbCB6b25lIOKAlCBgZGF0ZXRpbWUtbG9jYWxgIGhhcyBubyBvZmZzZXQsIHNvIHRoZSB0d29cbiAqIGNvbnZlcnNpb25zIGhlcmUgYXJlIHdoYXQga2VlcCBhIHZhbHVlIHN0YWJsZSBhY3Jvc3MgYSByb3VuZCB0cmlwLlxuICovXG5AQ29tcG9uZW50KHtcbiAgY2hhbmdlRGV0ZWN0aW9uOiBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneS5PblB1c2gsXG4gIHNlbGVjdG9yOiAnbmd4LWRhdGUtdGltZS1maWVsZCcsXG4gIHN0YW5kYWxvbmU6IHRydWUsXG4gIGltcG9ydHM6IFtSZWFjdGl2ZUZvcm1zTW9kdWxlXSxcbiAgdGVtcGxhdGU6IGBcbiAgICA8ZGl2IGNsYXNzPVwibmd4LWZpZWxkIG5neC1maWVsZC0tZGF0ZXRpbWVcIlxuICAgICAgW2F0dHIuZGF0YS10ZXN0aWRdPVwiJ2ZpZWxkLScgKyBmaWVsZC5pZFwiIFthdHRyLmRhdGEtZmllbGQtdHlwZV09XCJmaWVsZC50eXBlXCIgW2NsYXNzLm5neC1maWVsZC0tcmVhZG9ubHldPVwicmVhZG9ubHlcIiBbY2xhc3Mubmd4LWZpZWxkLS1tYXNrZWRdPVwibWFza2VkXCI+XG4gICAgICA8bGFiZWwgY2xhc3M9XCJuZ3gtZmllbGRfX2xhYmVsXCIgW2F0dHIuZm9yXT1cImZpZWxkLmlkXCI+e3sgbGFiZWwgfX08L2xhYmVsPlxuICAgICAgQGlmIChtYXNrZWQpIHtcbiAgICAgICAgPHNwYW4gY2xhc3M9XCJuZ3gtZmllbGRfX3ZhbHVlIG5neC1maWVsZF9fdmFsdWUtLW1hc2tlZFwiIFthdHRyLmRhdGEtdGVzdGlkXT1cIidmaWVsZC0nICsgZmllbGQuaWQgKyAnLW1hc2tlZCdcIj5YWFhYWFhYWFg8L3NwYW4+XG4gICAgICB9IEBlbHNlIGlmIChyZWFkb25seSkge1xuICAgICAgICA8c3BhbiBjbGFzcz1cIm5neC1maWVsZF9fdmFsdWVcIiBbYXR0ci5kYXRhLXRlc3RpZF09XCInZmllbGQtJyArIGZpZWxkLmlkICsgJy12YWx1ZSdcIj57eyBmb3JtYXREYXRlVGltZShjb250cm9sLnZhbHVlKSB9fTwvc3Bhbj5cbiAgICAgIH0gQGVsc2Uge1xuICAgICAgICA8aW5wdXRcbiAgICAgICAgICBbaWRdPVwiZmllbGQuaWRcIlxuICAgICAgICAgIGNsYXNzPVwibmd4LWZpZWxkX19pbnB1dFwiIFthdHRyLmRhdGEtdGVzdGlkXT1cIidmaWVsZC0nICsgZmllbGQuaWQgKyAnLWlucHV0J1wiXG4gICAgICAgICAgdHlwZT1cImRhdGV0aW1lLWxvY2FsXCJcbiAgICAgICAgICBbdmFsdWVdPVwiaW5wdXRWYWx1ZVwiXG4gICAgICAgICAgKGNoYW5nZSk9XCJvbklucHV0KCRhbnkoJGV2ZW50LnRhcmdldCkudmFsdWUpXCJcbiAgICAgICAgICBbYXR0ci5kaXNhYmxlZF09XCJmaWVsZC5kaXNhYmxlZCA/IHRydWUgOiBudWxsXCJcbiAgICAgICAgLz5cbiAgICAgICAgQGlmIChjb250cm9sLmludmFsaWQgJiYgY29udHJvbC50b3VjaGVkKSB7XG4gICAgICAgICAgPHNwYW4gY2xhc3M9XCJuZ3gtZmllbGRfX2Vycm9yXCIgW2F0dHIuZGF0YS10ZXN0aWRdPVwiJ2ZpZWxkLScgKyBmaWVsZC5pZCArICctZXJyb3InXCI+VGhpcyBmaWVsZCBoYXMgYW4gZXJyb3I8L3NwYW4+XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICA8L2Rpdj5cbiAgYCxcbn0pXG5leHBvcnQgY2xhc3MgRGF0ZVRpbWVGaWVsZENvbXBvbmVudCB7XG4gIEBJbnB1dCgpIGZpZWxkITogTmVzdGVkRmllbGRDb25maWc7XG4gIEBJbnB1dCgpIGNvbnRyb2whOiBBYnN0cmFjdENvbnRyb2w7XG4gIEBJbnB1dCgpIGxhbmd1YWdlOiBzdHJpbmcgPSAnZW4nO1xuICBASW5wdXQoKSByZWFkb25seTogYm9vbGVhbiA9IGZhbHNlO1xuICBASW5wdXQoKSBtYXNrZWQ6IGJvb2xlYW4gPSBmYWxzZTtcblxuICBnZXQgbGFiZWwoKTogc3RyaW5nIHtcbiAgICByZXR1cm4gcmVzb2x2ZUxhYmVsKHRoaXMuZmllbGQ/LmxhYmVsLCB0aGlzLmxhbmd1YWdlKTtcbiAgfVxuXG4gIC8qKiBTdG9yZWQgSVNPIDg2MDEg4oaSIHRoZSBgWVlZWS1NTS1ERFRISDptbWAgbG9jYWwgZm9ybSB0aGUgaW5wdXQgcmVxdWlyZXMuICovXG4gIGdldCBpbnB1dFZhbHVlKCk6IHN0cmluZyB7XG4gICAgY29uc3QgZCA9IHBhcnNlU3RvcmVkKHRoaXMuY29udHJvbD8udmFsdWUpO1xuICAgIGlmICghZCkgcmV0dXJuICcnO1xuICAgIHJldHVybiBgJHtkLmdldEZ1bGxZZWFyKCl9LSR7cGFkKGQuZ2V0TW9udGgoKSArIDEpfS0ke3BhZChkLmdldERhdGUoKSl9VCR7cGFkKGQuZ2V0SG91cnMoKSl9OiR7cGFkKGQuZ2V0TWludXRlcygpKX1gO1xuICB9XG5cbiAgLyoqIFRoZSBpbnB1dCdzIGxvY2FsIGBZWVlZLU1NLUREVEhIOm1tYCDihpIgc3RvcmVkIElTTyA4NjAxIFVUQy4gKi9cbiAgb25JbnB1dCh2YWx1ZTogc3RyaW5nKTogdm9pZCB7XG4gICAgaWYgKCF2YWx1ZSkge1xuICAgICAgdGhpcy5jb250cm9sLnNldFZhbHVlKG51bGwpO1xuICAgICAgdGhpcy5jb250cm9sLm1hcmtBc1RvdWNoZWQoKTtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgY29uc3QgZCA9IG5ldyBEYXRlKHZhbHVlKTtcbiAgICAvLyBBbiB1bnBhcnNlYWJsZSB2YWx1ZSBpcyBzdG9yZWQgdmVyYmF0aW0gcmF0aGVyIHRoYW4gc2lsZW50bHkgZGlzY2FyZGVkLCBzbyBhIHZhbGlkYXRvclxuICAgIC8vIHNlZXMgd2hhdCB0aGUgdXNlciBhY3R1YWxseSBlbnRlcmVkLlxuICAgIHRoaXMuY29udHJvbC5zZXRWYWx1ZShOdW1iZXIuaXNOYU4oZC5nZXRUaW1lKCkpID8gdmFsdWUgOiBkLnRvSVNPU3RyaW5nKCkpO1xuICAgIHRoaXMuY29udHJvbC5tYXJrQXNUb3VjaGVkKCk7XG4gIH1cblxuICAvKipcbiAgICogRGlzcGxheXMgZGF0ZSAqYW5kKiB0aW1lLiBgRGF0ZUZpZWxkQ29tcG9uZW50YCB1c2VkIGB0b0xvY2FsZURhdGVTdHJpbmcoKWAgaGVyZSwgc28gYVxuICAgKiBkYXRldGltZSByZWFkIGJhY2sgdGhyb3VnaCB0aGUgZmllbGQgc2hvd2VkIG5vIHRpbWUgd2hpbGUgdGhlIHNhbWUgdmFsdWUgaW4gdGhlIHJlY29yZFxuICAgKiBzdW1tYXJ5IOKAlCB3aGljaCBnb2VzIHRocm91Z2ggY29yZSdzIGBmb3JtYXREaXNwbGF5VmFsdWVgIOKAlCBzaG93ZWQgaXQuXG4gICAqL1xuICBmb3JtYXREYXRlVGltZSh2YWx1ZTogdW5rbm93bik6IHN0cmluZyB7XG4gICAgY29uc3QgZCA9IHBhcnNlU3RvcmVkKHZhbHVlKTtcbiAgICByZXR1cm4gZCA/IGQudG9Mb2NhbGVTdHJpbmcoKSA6ICfigJQnO1xuICB9XG59XG4iXX0=
@@ -0,0 +1,96 @@
1
+ import { Component, Input, ChangeDetectionStrategy } from '@angular/core';
2
+ import { ReactiveFormsModule } from '@angular/forms';
3
+ import { formatDisplayValue, resolveLabel } from '@dynamic-entity/core';
4
+ import * as i0 from "@angular/core";
5
+ import * as i1 from "@angular/forms";
6
+ /**
7
+ * Time field: a bare time of day, with no date and no zone attached.
8
+ *
9
+ * Stored as `HH:mm` — exactly the value `<input type="time">` reads and writes, so the
10
+ * control binds straight through with no conversion. That is the whole reason this is a
11
+ * separate type from `datetime`: a recurring 09:00 opening time is not a moment in time,
12
+ * and converting it to UTC would move it whenever the offset changed.
13
+ */
14
+ export class TimeFieldComponent {
15
+ field;
16
+ control;
17
+ language = 'en';
18
+ readonly = false;
19
+ masked = false;
20
+ get label() {
21
+ return resolveLabel(this.field?.label, this.language);
22
+ }
23
+ /**
24
+ * Defers to core rather than parsing `HH:mm` locally. The other date-ish components each
25
+ * grew their own formatter, and `datetime` ended up showing one thing in the field and
26
+ * another in the record summary because the two drifted apart.
27
+ */
28
+ formatTime(value) {
29
+ return formatDisplayValue('time', undefined, value, this.language);
30
+ }
31
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: TimeFieldComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
32
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "17.3.12", type: TimeFieldComponent, isStandalone: true, selector: "ngx-time-field", inputs: { field: "field", control: "control", language: "language", readonly: "readonly", masked: "masked" }, ngImport: i0, template: `
33
+ <div class="ngx-field ngx-field--time"
34
+ [attr.data-testid]="'field-' + field.id" [attr.data-field-type]="field.type" [class.ngx-field--readonly]="readonly" [class.ngx-field--masked]="masked">
35
+ <label class="ngx-field__label" [attr.for]="field.id">{{ label }}</label>
36
+ @if (masked) {
37
+ <span class="ngx-field__value ngx-field__value--masked" [attr.data-testid]="'field-' + field.id + '-masked'">XXXXXXXXX</span>
38
+ } @else if (readonly) {
39
+ <span class="ngx-field__value" [attr.data-testid]="'field-' + field.id + '-value'">{{ formatTime(control.value) }}</span>
40
+ } @else {
41
+ <input
42
+ [id]="field.id"
43
+ class="ngx-field__input" [attr.data-testid]="'field-' + field.id + '-input'"
44
+ type="time"
45
+ [formControl]="$any(control)"
46
+ [attr.disabled]="field.disabled ? true : null"
47
+ />
48
+ @if (control.invalid && control.touched) {
49
+ <span class="ngx-field__error" [attr.data-testid]="'field-' + field.id + '-error'">This field has an error</span>
50
+ }
51
+ }
52
+ </div>
53
+ `, isInline: true, dependencies: [{ kind: "ngmodule", type: ReactiveFormsModule }, { kind: "directive", type: i1.DefaultValueAccessor, selector: "input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]" }, { kind: "directive", type: i1.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i1.FormControlDirective, selector: "[formControl]", inputs: ["formControl", "disabled", "ngModel"], outputs: ["ngModelChange"], exportAs: ["ngForm"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
54
+ }
55
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: TimeFieldComponent, decorators: [{
56
+ type: Component,
57
+ args: [{
58
+ changeDetection: ChangeDetectionStrategy.OnPush,
59
+ selector: 'ngx-time-field',
60
+ standalone: true,
61
+ imports: [ReactiveFormsModule],
62
+ template: `
63
+ <div class="ngx-field ngx-field--time"
64
+ [attr.data-testid]="'field-' + field.id" [attr.data-field-type]="field.type" [class.ngx-field--readonly]="readonly" [class.ngx-field--masked]="masked">
65
+ <label class="ngx-field__label" [attr.for]="field.id">{{ label }}</label>
66
+ @if (masked) {
67
+ <span class="ngx-field__value ngx-field__value--masked" [attr.data-testid]="'field-' + field.id + '-masked'">XXXXXXXXX</span>
68
+ } @else if (readonly) {
69
+ <span class="ngx-field__value" [attr.data-testid]="'field-' + field.id + '-value'">{{ formatTime(control.value) }}</span>
70
+ } @else {
71
+ <input
72
+ [id]="field.id"
73
+ class="ngx-field__input" [attr.data-testid]="'field-' + field.id + '-input'"
74
+ type="time"
75
+ [formControl]="$any(control)"
76
+ [attr.disabled]="field.disabled ? true : null"
77
+ />
78
+ @if (control.invalid && control.touched) {
79
+ <span class="ngx-field__error" [attr.data-testid]="'field-' + field.id + '-error'">This field has an error</span>
80
+ }
81
+ }
82
+ </div>
83
+ `,
84
+ }]
85
+ }], propDecorators: { field: [{
86
+ type: Input
87
+ }], control: [{
88
+ type: Input
89
+ }], language: [{
90
+ type: Input
91
+ }], readonly: [{
92
+ type: Input
93
+ }], masked: [{
94
+ type: Input
95
+ }] } });
96
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGltZS1maWVsZC5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9zcmMvbGliL2ZpZWxkLXR5cGVzL3RpbWUtZmllbGQuY29tcG9uZW50LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxTQUFTLEVBQUUsS0FBSyxFQUFFLHVCQUF1QixFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQzFFLE9BQU8sRUFBbUIsbUJBQW1CLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUV0RSxPQUFPLEVBQUUsa0JBQWtCLEVBQUUsWUFBWSxFQUFFLE1BQU0sc0JBQXNCLENBQUM7OztBQUV4RTs7Ozs7OztHQU9HO0FBNkJILE1BQU0sT0FBTyxrQkFBa0I7SUFDcEIsS0FBSyxDQUFxQjtJQUMxQixPQUFPLENBQW1CO0lBQzFCLFFBQVEsR0FBVyxJQUFJLENBQUM7SUFDeEIsUUFBUSxHQUFZLEtBQUssQ0FBQztJQUMxQixNQUFNLEdBQVksS0FBSyxDQUFDO0lBRWpDLElBQUksS0FBSztRQUNQLE9BQU8sWUFBWSxDQUFDLElBQUksQ0FBQyxLQUFLLEVBQUUsS0FBSyxFQUFFLElBQUksQ0FBQyxRQUFRLENBQUMsQ0FBQztJQUN4RCxDQUFDO0lBRUQ7Ozs7T0FJRztJQUNILFVBQVUsQ0FBQyxLQUFjO1FBQ3ZCLE9BQU8sa0JBQWtCLENBQUMsTUFBTSxFQUFFLFNBQVMsRUFBRSxLQUFLLEVBQUUsSUFBSSxDQUFDLFFBQVEsQ0FBQyxDQUFDO0lBQ3JFLENBQUM7d0dBbEJVLGtCQUFrQjs0RkFBbEIsa0JBQWtCLHdMQXZCbkI7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztHQXFCVCwyREF0QlMsbUJBQW1COzs0RkF3QmxCLGtCQUFrQjtrQkE1QjlCLFNBQVM7bUJBQUM7b0JBQ1QsZUFBZSxFQUFFLHVCQUF1QixDQUFDLE1BQU07b0JBQy9DLFFBQVEsRUFBRSxnQkFBZ0I7b0JBQzFCLFVBQVUsRUFBRSxJQUFJO29CQUNoQixPQUFPLEVBQUUsQ0FBQyxtQkFBbUIsQ0FBQztvQkFDOUIsUUFBUSxFQUFFOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7R0FxQlQ7aUJBQ0Y7OEJBRVUsS0FBSztzQkFBYixLQUFLO2dCQUNHLE9BQU87c0JBQWYsS0FBSztnQkFDRyxRQUFRO3NCQUFoQixLQUFLO2dCQUNHLFFBQVE7c0JBQWhCLEtBQUs7Z0JBQ0csTUFBTTtzQkFBZCxLQUFLIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ29tcG9uZW50LCBJbnB1dCwgQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3kgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IEFic3RyYWN0Q29udHJvbCwgUmVhY3RpdmVGb3Jtc01vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL2Zvcm1zJztcbmltcG9ydCB0eXBlIHsgTmVzdGVkRmllbGRDb25maWcgfSBmcm9tICdAZHluYW1pYy1lbnRpdHkvY29yZSc7XG5pbXBvcnQgeyBmb3JtYXREaXNwbGF5VmFsdWUsIHJlc29sdmVMYWJlbCB9IGZyb20gJ0BkeW5hbWljLWVudGl0eS9jb3JlJztcblxuLyoqXG4gKiBUaW1lIGZpZWxkOiBhIGJhcmUgdGltZSBvZiBkYXksIHdpdGggbm8gZGF0ZSBhbmQgbm8gem9uZSBhdHRhY2hlZC5cbiAqXG4gKiBTdG9yZWQgYXMgYEhIOm1tYCDigJQgZXhhY3RseSB0aGUgdmFsdWUgYDxpbnB1dCB0eXBlPVwidGltZVwiPmAgcmVhZHMgYW5kIHdyaXRlcywgc28gdGhlXG4gKiBjb250cm9sIGJpbmRzIHN0cmFpZ2h0IHRocm91Z2ggd2l0aCBubyBjb252ZXJzaW9uLiBUaGF0IGlzIHRoZSB3aG9sZSByZWFzb24gdGhpcyBpcyBhXG4gKiBzZXBhcmF0ZSB0eXBlIGZyb20gYGRhdGV0aW1lYDogYSByZWN1cnJpbmcgMDk6MDAgb3BlbmluZyB0aW1lIGlzIG5vdCBhIG1vbWVudCBpbiB0aW1lLFxuICogYW5kIGNvbnZlcnRpbmcgaXQgdG8gVVRDIHdvdWxkIG1vdmUgaXQgd2hlbmV2ZXIgdGhlIG9mZnNldCBjaGFuZ2VkLlxuICovXG5AQ29tcG9uZW50KHtcbiAgY2hhbmdlRGV0ZWN0aW9uOiBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneS5PblB1c2gsXG4gIHNlbGVjdG9yOiAnbmd4LXRpbWUtZmllbGQnLFxuICBzdGFuZGFsb25lOiB0cnVlLFxuICBpbXBvcnRzOiBbUmVhY3RpdmVGb3Jtc01vZHVsZV0sXG4gIHRlbXBsYXRlOiBgXG4gICAgPGRpdiBjbGFzcz1cIm5neC1maWVsZCBuZ3gtZmllbGQtLXRpbWVcIlxuICAgICAgW2F0dHIuZGF0YS10ZXN0aWRdPVwiJ2ZpZWxkLScgKyBmaWVsZC5pZFwiIFthdHRyLmRhdGEtZmllbGQtdHlwZV09XCJmaWVsZC50eXBlXCIgW2NsYXNzLm5neC1maWVsZC0tcmVhZG9ubHldPVwicmVhZG9ubHlcIiBbY2xhc3Mubmd4LWZpZWxkLS1tYXNrZWRdPVwibWFza2VkXCI+XG4gICAgICA8bGFiZWwgY2xhc3M9XCJuZ3gtZmllbGRfX2xhYmVsXCIgW2F0dHIuZm9yXT1cImZpZWxkLmlkXCI+e3sgbGFiZWwgfX08L2xhYmVsPlxuICAgICAgQGlmIChtYXNrZWQpIHtcbiAgICAgICAgPHNwYW4gY2xhc3M9XCJuZ3gtZmllbGRfX3ZhbHVlIG5neC1maWVsZF9fdmFsdWUtLW1hc2tlZFwiIFthdHRyLmRhdGEtdGVzdGlkXT1cIidmaWVsZC0nICsgZmllbGQuaWQgKyAnLW1hc2tlZCdcIj5YWFhYWFhYWFg8L3NwYW4+XG4gICAgICB9IEBlbHNlIGlmIChyZWFkb25seSkge1xuICAgICAgICA8c3BhbiBjbGFzcz1cIm5neC1maWVsZF9fdmFsdWVcIiBbYXR0ci5kYXRhLXRlc3RpZF09XCInZmllbGQtJyArIGZpZWxkLmlkICsgJy12YWx1ZSdcIj57eyBmb3JtYXRUaW1lKGNvbnRyb2wudmFsdWUpIH19PC9zcGFuPlxuICAgICAgfSBAZWxzZSB7XG4gICAgICAgIDxpbnB1dFxuICAgICAgICAgIFtpZF09XCJmaWVsZC5pZFwiXG4gICAgICAgICAgY2xhc3M9XCJuZ3gtZmllbGRfX2lucHV0XCIgW2F0dHIuZGF0YS10ZXN0aWRdPVwiJ2ZpZWxkLScgKyBmaWVsZC5pZCArICctaW5wdXQnXCJcbiAgICAgICAgICB0eXBlPVwidGltZVwiXG4gICAgICAgICAgW2Zvcm1Db250cm9sXT1cIiRhbnkoY29udHJvbClcIlxuICAgICAgICAgIFthdHRyLmRpc2FibGVkXT1cImZpZWxkLmRpc2FibGVkID8gdHJ1ZSA6IG51bGxcIlxuICAgICAgICAvPlxuICAgICAgICBAaWYgKGNvbnRyb2wuaW52YWxpZCAmJiBjb250cm9sLnRvdWNoZWQpIHtcbiAgICAgICAgICA8c3BhbiBjbGFzcz1cIm5neC1maWVsZF9fZXJyb3JcIiBbYXR0ci5kYXRhLXRlc3RpZF09XCInZmllbGQtJyArIGZpZWxkLmlkICsgJy1lcnJvcidcIj5UaGlzIGZpZWxkIGhhcyBhbiBlcnJvcjwvc3Bhbj5cbiAgICAgICAgfVxuICAgICAgfVxuICAgIDwvZGl2PlxuICBgLFxufSlcbmV4cG9ydCBjbGFzcyBUaW1lRmllbGRDb21wb25lbnQge1xuICBASW5wdXQoKSBmaWVsZCE6IE5lc3RlZEZpZWxkQ29uZmlnO1xuICBASW5wdXQoKSBjb250cm9sITogQWJzdHJhY3RDb250cm9sO1xuICBASW5wdXQoKSBsYW5ndWFnZTogc3RyaW5nID0gJ2VuJztcbiAgQElucHV0KCkgcmVhZG9ubHk6IGJvb2xlYW4gPSBmYWxzZTtcbiAgQElucHV0KCkgbWFza2VkOiBib29sZWFuID0gZmFsc2U7XG5cbiAgZ2V0IGxhYmVsKCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIHJlc29sdmVMYWJlbCh0aGlzLmZpZWxkPy5sYWJlbCwgdGhpcy5sYW5ndWFnZSk7XG4gIH1cblxuICAvKipcbiAgICogRGVmZXJzIHRvIGNvcmUgcmF0aGVyIHRoYW4gcGFyc2luZyBgSEg6bW1gIGxvY2FsbHkuIFRoZSBvdGhlciBkYXRlLWlzaCBjb21wb25lbnRzIGVhY2hcbiAgICogZ3JldyB0aGVpciBvd24gZm9ybWF0dGVyLCBhbmQgYGRhdGV0aW1lYCBlbmRlZCB1cCBzaG93aW5nIG9uZSB0aGluZyBpbiB0aGUgZmllbGQgYW5kXG4gICAqIGFub3RoZXIgaW4gdGhlIHJlY29yZCBzdW1tYXJ5IGJlY2F1c2UgdGhlIHR3byBkcmlmdGVkIGFwYXJ0LlxuICAgKi9cbiAgZm9ybWF0VGltZSh2YWx1ZTogdW5rbm93bik6IHN0cmluZyB7XG4gICAgcmV0dXJuIGZvcm1hdERpc3BsYXlWYWx1ZSgndGltZScsIHVuZGVmaW5lZCwgdmFsdWUsIHRoaXMubGFuZ3VhZ2UpO1xuICB9XG59XG4iXX0=
@@ -1,4 +1,4 @@
1
- import { Component, Injector, Input, ViewChild, ViewContainerRef, inject, isDevMode, } from '@angular/core';
1
+ import { ChangeDetectionStrategy, Component, Injector, Input, ViewChild, ViewContainerRef, inject, isDevMode, } from '@angular/core';
2
2
  import { findTab } from '@dynamic-entity/core';
3
3
  import { FieldRegistryService } from '../../services/field-registry.service';
4
4
  import { RbacService } from '../../services/rbac.service';
@@ -121,11 +121,12 @@ export class DynamicFieldComponent {
121
121
  ref.setInput('masked', masked);
122
122
  }
123
123
  static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: DynamicFieldComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
124
- static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "17.3.12", type: DynamicFieldComponent, isStandalone: true, selector: "ngx-dynamic-field", inputs: { field: "field", control: "control", config: "config", currentTabId: "currentTabId", language: "language", readonly: "readonly", userRoles: "userRoles" }, viewQueries: [{ propertyName: "fieldHost", first: true, predicate: ["fieldHost"], descendants: true, read: ViewContainerRef, static: true }], usesOnChanges: true, ngImport: i0, template: `<ng-container #fieldHost></ng-container>`, isInline: true });
124
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "17.3.12", type: DynamicFieldComponent, isStandalone: true, selector: "ngx-dynamic-field", inputs: { field: "field", control: "control", config: "config", currentTabId: "currentTabId", language: "language", readonly: "readonly", userRoles: "userRoles" }, viewQueries: [{ propertyName: "fieldHost", first: true, predicate: ["fieldHost"], descendants: true, read: ViewContainerRef, static: true }], usesOnChanges: true, ngImport: i0, template: `<ng-container #fieldHost></ng-container>`, isInline: true, changeDetection: i0.ChangeDetectionStrategy.OnPush });
125
125
  }
126
126
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: DynamicFieldComponent, decorators: [{
127
127
  type: Component,
128
128
  args: [{
129
+ changeDetection: ChangeDetectionStrategy.OnPush,
129
130
  selector: 'ngx-dynamic-field',
130
131
  standalone: true,
131
132
  template: `<ng-container #fieldHost></ng-container>`,
@@ -148,4 +149,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.12", ngImpo
148
149
  type: ViewChild,
149
150
  args: ['fieldHost', { read: ViewContainerRef, static: true }]
150
151
  }] } });
151
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZHluYW1pYy1maWVsZC5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9zcmMvbGliL2Zvcm0vZHluYW1pYy1maWVsZC9keW5hbWljLWZpZWxkLmNvbXBvbmVudC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQ0wsU0FBUyxFQUVULFFBQVEsRUFDUixLQUFLLEVBR0wsU0FBUyxFQUNULGdCQUFnQixFQUNoQixNQUFNLEVBQ04sU0FBUyxHQUNWLE1BQU0sZUFBZSxDQUFDO0FBSXZCLE9BQU8sRUFBRSxPQUFPLEVBQUUsTUFBTSxzQkFBc0IsQ0FBQztBQUMvQyxPQUFPLEVBQUUsb0JBQW9CLEVBQUUsTUFBTSx1Q0FBdUMsQ0FBQztBQUM3RSxPQUFPLEVBQUUsV0FBVyxFQUFFLE1BQU0sNkJBQTZCLENBQUM7O0FBRTFEOzs7Ozs7OztHQVFHO0FBTUgsTUFBTSxPQUFPLHFCQUFxQjtJQUN2QixLQUFLLENBQXFCO0lBQzFCLE9BQU8sQ0FBbUI7SUFDMUIsTUFBTSxDQUFvQjtJQUMxQixZQUFZLENBQVU7SUFDdEIsUUFBUSxHQUFXLElBQUksQ0FBQztJQUN4QixRQUFRLEdBQVksS0FBSyxDQUFDO0lBQzFCLFNBQVMsR0FBYSxFQUFFLENBQUM7SUFHakIsU0FBUyxDQUFvQjtJQUU3QixhQUFhLEdBQUcsTUFBTSxDQUFDLG9CQUFvQixDQUFDLENBQUM7SUFDN0MsV0FBVyxHQUFHLE1BQU0sQ0FBQyxXQUFXLENBQUMsQ0FBQztJQUNuRDs7OztPQUlHO0lBQ2MsUUFBUSxHQUFHLE1BQU0sQ0FBQyxRQUFRLENBQUMsQ0FBQztJQUVyQyxZQUFZLEdBQWlDLElBQUksQ0FBQztJQUUxRCxXQUFXLENBQUMsUUFBdUI7UUFDakMsSUFBSSxDQUFDLFVBQVUsRUFBRSxDQUFDO0lBQ3BCLENBQUM7SUFFTyxVQUFVO1FBQ2hCLElBQUksQ0FBQyxJQUFJLENBQUMsS0FBSyxJQUFJLENBQUMsSUFBSSxDQUFDLE9B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LENBQUM7UUFDbEMsR0FBRyxDQUFDLFFBQVEsQ0FBQyxTQUFTLEVBQUUsSUFBSSxDQUFDLE9BQU8sQ0FBQyxDQUFDO1FBQ3RDLEdBQUcsQ0FBQyxRQUFRLENBQUMsVUFBVSxFQUFFLElBQUksQ0FBQyxRQUFRLENBQUMsQ0FBQztRQUN4QyxHQUFHLENBQUMsUUFBUSxDQUFDLFVBQVUsRUFBRSxJQUFJLENBQUMsUUFBUSxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLFFBQVEsQ0FBQyxDQUFDO1FBQ2pFLEdBQUcsQ0FBQyxRQUFRLENBQUMsUUFBUSxFQUFFLE1BQU0sQ0FBQyxDQUFDO0lBQ2pDLENBQUM7d0dBNUhVLHFCQUFxQjs0RkFBckIscUJBQXFCLG9VQVNBLGdCQUFnQixnRUFYdEMsMENBQTBDOzs0RkFFekMscUJBQXFCO2tCQUxqQyxTQUFTO21CQUFDO29CQUNULFFBQVEsRUFBRSxtQkFBbUI7b0JBQzdCLFVBQVUsRUFBRSxJQUFJO29CQUNoQixRQUFRLEVBQUUsMENBQTBDO2lCQUNyRDs4QkFFVSxLQUFLO3NCQUFiLEtBQUs7Z0JBQ0csT0FBTztzQkFBZixLQUFLO2dCQUNHLE1BQU07c0JBQWQsS0FBSztnQkFDRyxZQUFZO3NCQUFwQixLQUFLO2dCQUNHLFFBQVE7c0JBQWhCLEtBQUs7Z0JBQ0csUUFBUTtzQkFBaEIsS0FBSztnQkFDRyxTQUFTO3NCQUFqQixLQUFLO2dCQUdXLFNBQVM7c0JBRHpCLFNBQVM7dUJBQUMsV0FBVyxFQUFFLEVBQUUsSUFBSSxFQUFFLGdCQUFnQixFQUFFLE1BQU0sRUFBRSxJQUFJLEVBQUUiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge1xuICBDb21wb25lbnQsXG4gIENvbXBvbmVudFJlZixcbiAgSW5qZWN0b3IsXG4gIElucHV0LFxuICBPbkNoYW5nZXMsIE9uRGVzdHJveSxcbiAgU2ltcGxlQ2hhbmdlcyxcbiAgVmlld0NoaWxkLFxuICBWaWV3Q29udGFpbmVyUmVmLFxuICBpbmplY3QsXG4gIGlzRGV2TW9kZSxcbn0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBBYnN0cmFjdENvbnRyb2wgfSBmcm9tICdAYW5ndWxhci9mb3Jtcyc7XG5pbXBvcnQgeyBTdWJzY3JpcHRpb24gfSBmcm9tICdyeGpzJztcbmltcG9ydCB0eXBlIHsgTmVzdGVkRmllbGRDb25maWcsIEVudGl0eUZvcm1Db25maWcsIE5lc3RlZFRhYkNvbmZpZyB9IGZyb20gJ0BkeW5hbWljLWVudGl0eS9jb3JlJztcbmltcG9ydCB7IGZpbmRUYWIgfSBmcm9tICdAZHluYW1pYy1lbnRpdHkvY29yZSc7XG5pbXBvcnQgeyBGaWVsZFJlZ2lzdHJ5U2VydmljZSB9IGZyb20gJy4uLy4uL3NlcnZpY2VzL2ZpZWxkLXJlZ2lzdHJ5LnNlcnZpY2UnO1xuaW1wb3J0IHsgUmJhY1NlcnZpY2UgfSBmcm9tICcuLi8uLi9zZXJ2aWNlcy9yYmFjLnNlcnZpY2UnO1xuXG4vKipcbiAqIER5bmFtaWNGaWVsZENvbXBvbmVudCDigJQgbW91bnRzIHRoZSBjb3JyZWN0IGZpZWxkIGNvbXBvbmVudCBmb3IgYSBnaXZlbiBOZXN0ZWRGaWVsZENvbmZpZy5cbiAqIFVzZXMgVmlld0NvbnRhaW5lclJlZi5jcmVhdGVDb21wb25lbnQoKSBhbmQgcGFzc2VzIGlucHV0cyB2aWEgc2V0SW5wdXQoKTsgc2VlXG4gKiBEeW5hbWljRmllbGRDb21wb25lbnRDb250cmFjdCBmb3IgdGhlIGZpdmUgaW5wdXRzIGV2ZXJ5IGZpZWxkIGNvbXBvbmVudCByZWNlaXZlcy5cbiAqIE5ldmVyIGFkZCBmaWVsZC10eXBlLXNwZWNpZmljIGxvZ2ljIGhlcmUg4oCUIHRoaXMgY29tcG9uZW50IG11c3QgcmVtYWluIGdlbmVyaWMuXG4gKlxuICogVGhlIDUgaW5wdXRzIChmaWVsZCwgY29udHJvbCwgbGFuZ3VhZ2UsIHJlYWRvbmx5LCBtYXNrZWQpIGFyZSBwYXNzZWQgdG8gZXZlcnkgbW91bnRlZFxuICogY29tcG9uZW50IHVuaWZvcm1seSDigJQgbm8gc3BlY2lhbC1jYXNpbmcgcGVyIHR5cGUuXG4gKi9cbkBDb21wb25lbnQoe1xuICBzZWxlY3RvcjogJ25neC1keW5hbWljLWZpZWxkJyxcbiAgc3RhbmRhbG9uZTogdHJ1ZSxcbiAgdGVtcGxhdGU6IGA8bmctY29udGFpbmVyICNmaWVsZEhvc3Q+PC9uZy1jb250YWluZXI+YCxcbn0pXG5leHBvcnQgY2xhc3MgRHluYW1pY0ZpZWxkQ29tcG9uZW50IGltcGxlbWVudHMgT25DaGFuZ2VzLCBPbkRlc3Ryb3kge1xuICBASW5wdXQoKSBmaWVsZCE6IE5lc3RlZEZpZWxkQ29uZmlnO1xuICBASW5wdXQoKSBjb250cm9sITogQWJzdHJhY3RDb250cm9sO1xuICBASW5wdXQoKSBjb25maWchOiBFbnRpdHlGb3JtQ29uZmlnO1xuICBASW5wdXQoKSBjdXJyZW50VGFiSWQ/OiBzdHJpbmc7XG4gIEBJbnB1dCgpIGxhbmd1YWdlOiBzdHJpbmcgPSAnZW4nO1xuICBASW5wdXQoKSByZWFkb25seTogYm9vbGVhbiA9IGZhbHNlO1xuICBASW5wdXQoKSB1c2VyUm9sZXM6IHN0cmluZ1tdID0gW107XG5cbiAgQFZpZXdDaGlsZCgnZmllbGRIb3N0JywgeyByZWFkOiBWaWV3Q29udGFpbmVyUmVmLCBzdGF0aWM6IHRydWUgfSlcbiAgcHJpdmF0ZSByZWFkb25seSBmaWVsZEhvc3QhOiBWaWV3Q29udGFpbmVyUmVmO1xuXG4gIHByaXZhdGUgcmVhZG9ubHkgZmllbGRSZWdpc3RyeSA9IGluamVjdChGaWVsZFJlZ2lzdHJ5U2VydmljZSk7XG4gIHByaXZhdGUgcmVhZG9ubHkgcmJhY1NlcnZpY2UgPSBpbmplY3QoUmJhY1NlcnZpY2UpO1xuICAvKipcbiAgICogUGFzc2VkIGludG8gYGNyZWF0ZUNvbXBvbmVudGAgc28gYSBob3N0ZWQgZmllbGQgc2VlcyB0aGlzIGhvc3QncyBpbmplY3RvciDigJQgaW5jbHVkaW5nXG4gICAqIGBEeW5hbWljRm9ybUNvbXBvbmVudGAncyBzY29wZWQgYEVudGl0eVJlZlNlbGVjdGlvblNlcnZpY2VgLiBXaXRob3V0IGl0LCBhIHN0YW5kYWxvbmVcbiAgICogZmllbGQgcmVzb2x2ZXMgdGhlIHJvb3QgYnVzIGFuZCBgYXV0b1BhdGNoYCBuZXZlciBydW5zLlxuICAgKi9cbiAgcHJpdmF0ZSByZWFkb25seSBpbmplY3RvciA9IGluamVjdChJbmplY3Rvcik7XG5cbiAgcHJpdmF0ZSBjb21wb25lbnRSZWY6IENvbXBvbmVudFJlZjx1bmtub3duPiB8IG51bGwgPSBudWxsO1xuXG4gIG5nT25DaGFuZ2VzKF9jaGFuZ2VzOiBTaW1wbGVDaGFuZ2VzKTogdm9pZCB7XG4gICAgdGhpcy5tb3VudEZpZWxkKCk7XG4gIH1cblxuICBwcml2YXRlIG1vdW50RmllbGQoKTogdm9pZCB7XG4gICAgaWYgKCF0aGlzLmZpZWxkIHx8ICF0aGlzLmNvbnRyb2wpIHJldHVybjtcblxuICAgIGNvbnN0IENvbXBvbmVudENsYXNzID0gdGhpcy5maWVsZFJlZ2lzdHJ5LnJlc29sdmUodGhpcy5maWVsZC50eXBlKTtcbiAgICBpZiAoIUNvbXBvbmVudENsYXNzKSB7XG4gICAgICB0aGlzLndhcm5VbnJlc29sdmVkKHRoaXMuZmllbGQudHlwZSk7XG4gICAgICByZXR1cm47IC8vIFVua25vd24gZmllbGQgdHlwZSDigJQgcmVuZGVyIG5vdGhpbmdcbiAgICB9XG5cbiAgICAvLyBEZXRlcm1pbmUgbWFza2luZyBmb3IgdGhpcyBzcGVjaWZpYyBmaWVsZFxuICAgIGNvbnN0IHRhYjogTmVzdGVkVGFiQ29uZmlnIHwgbnVsbCA9IHRoaXMuY3VycmVudFRhYklkID8gZmluZFRhYih0aGlzLmNvbmZpZz8udGFicywgdGhpcy5jdXJyZW50VGFiSWQpIDogbnVsbDtcbiAgICBjb25zdCBtYXNrZWQgPSB0aGlzLnJiYWNTZXJ2aWNlLnNob3VsZE1hc2tGaWVsZCh0aGlzLmZpZWxkLCB0YWIgPz8gdW5kZWZpbmVkLCB0aGlzLmNvbmZpZywgdGhpcy51c2VyUm9sZXMpO1xuXG4gICAgLy8gUmUtdXNlIGV4aXN0aW5nIGNvbXBvbmVudCBpZiBzYW1lIHR5cGUsIG90aGVyd2lzZSByZWNyZWF0ZVxuICAgIGlmICh0aGlzLmNvbXBvbmVudFJlZiAmJiB0aGlzLmNvbXBvbmVudFJlZi5pbnN0YW5jZSBpbnN0YW5jZW9mIENvbXBvbmVudENsYXNzKSB7XG4gICAgICB0aGlzLnNldElucHV0cyh0aGlzLmNvbXBvbmVudFJlZiwgbWFza2VkKTtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICB0aGlzLmZpZWxkSG9zdC5jbGVhcigpO1xuICAgIHRoaXMuY29tcG9uZW50UmVmID0gdGhpcy5maWVsZEhvc3QuY3JlYXRlQ29tcG9uZW50KENvbXBvbmVudENsYXNzLCB7XG4gICAgICBpbmplY3RvcjogdGhpcy5pbmplY3RvcixcbiAgICB9KTtcbiAgICB0aGlzLnNldElucHV0cyh0aGlzLmNvbXBvbmVudFJlZiwgbWFza2VkKTtcbiAgICB0aGlzLndhdGNoQ29udHJvbCgpO1xuICAgIHRoaXMuY29tcG9uZW50UmVmLmNoYW5nZURldGVjdG9yUmVmLmRldGVjdENoYW5nZXMoKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBGaWVsZCB0eXBlcyBhcmUgb3B0LWluIChzZWUgYHByb3ZpZGVGaWVsZFR5cGVzYCAvIGBwcm92aWRlQnVpbHRJbkZpZWxkVHlwZXNgKSwgc28gYW5cbiAgICogdW5yZWdpc3RlcmVkIHR5cGUgcmVuZGVycyBub3RoaW5nLiBTYXkgc28gb25jZSBwZXIgdHlwZSBpbiBkZXYgYnVpbGRzIHJhdGhlciB0aGFuXG4gICAqIGxlYXZpbmcgYSBzaWxlbnRseSBibGFuayBzbG90LlxuICAgKi9cbiAgcHJpdmF0ZSB3YXJuVW5yZXNvbHZlZCh0eXBlOiBzdHJpbmcpOiB2b2lkIHtcbiAgICBpZiAoIWlzRGV2TW9kZSgpIHx8IER5bmFtaWNGaWVsZENvbXBvbmVudC53YXJuZWRUeXBlcy5oYXModHlwZSkpIHJldHVybjtcbiAgICBEeW5hbWljRmllbGRDb21wb25lbnQud2FybmVkVHlwZXMuYWRkKHR5cGUpO1xuICAgIGNvbnNvbGUud2FybihcbiAgICAgIGBbbmd4LWR5bmFtaWMtZW50aXR5XSBObyBjb21wb25lbnQgcmVnaXN0ZXJlZCBmb3IgZmllbGQgdHlwZSBcIiR7dHlwZX1cIiDigJQgdGhlIGZpZWxkIHdhcyBub3QgcmVuZGVyZWQuIGAgK1xuICAgICAgICBgUmVnaXN0ZXIgaXQgd2l0aCBwcm92aWRlRmllbGRUeXBlcyh7ICcke3R5cGV9JzogTXlDb21wb25lbnQgfSkgb3IgcHJvdmlkZUJ1aWx0SW5GaWVsZFR5cGVzKCkuYCxcbiAgICApO1xuICB9XG5cbiAgcHJpdmF0ZSBzdGF0aWMgcmVhZG9ubHkgd2FybmVkVHlwZXMgPSBuZXcgU2V0PHN0cmluZz4oKTtcblxuICAvKipcbiAgICogUmUtY2hlY2sgdGhlIGhvc3RlZCBmaWVsZCBjb21wb25lbnQuXG4gICAqXG4gICAqIFRoZSBmaWVsZCBjb21wb25lbnRzIGFyZSBPblB1c2gsIHNvIHRoZXkgcmUtcmVuZGVyIG9uIGFuIGlucHV0IGNoYW5nZSwgYW4gZXZlbnQgZnJvbVxuICAgKiB0aGVpciBvd24gdGVtcGxhdGUsIG9yIGEgc2lnbmFsIHRoZXkgcmVhZC4gYGZvcm0ubWFya0FsbEFzVG91Y2hlZCgpYCBpcyBub25lIG9mIHRob3NlIOKAlFxuICAgKiBpdCBmbGlwcyBgdG91Y2hlZGAgZnJvbSBvdXRzaWRlLCBhbmQgZXZlcnkgZmllbGQncyBlcnJvciBtZXNzYWdlIGRlcGVuZHMgb24gaXQuIFdpdGhvdXRcbiAgICogdGhpcywgYSBibG9ja2VkIHN1Ym1pdCB3b3VsZCBtYXJrIHRoZSBmb3JtIHRvdWNoZWQgYW5kIG5vIGVycm9yIHdvdWxkIGFwcGVhci5cbiAgICovXG4gIHJlZnJlc2goKTogdm9pZCB7XG4gICAgdGhpcy5jb21wb25lbnRSZWY/LmNoYW5nZURldGVjdG9yUmVmLmRldGVjdENoYW5nZXMoKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZS1jaGVjayB0aGUgaG9zdGVkIGNvbXBvbmVudCB3aGVuZXZlciBpdHMgY29udHJvbCBjaGFuZ2VzIGZyb20gb3V0c2lkZS5cbiAgICpcbiAgICogVGhlIGZpZWxkIGNvbXBvbmVudHMgYXJlIE9uUHVzaCwgc28gdGhleSByZS1yZW5kZXIgb24gYW4gaW5wdXQgY2hhbmdlIG9yIGFuIGV2ZW50IGZyb21cbiAgICogdGhlaXIgb3duIHRlbXBsYXRlLiBBIGNvbnRyb2wgbXV0YXRlZCBleHRlcm5hbGx5IGlzIG5laXRoZXIg4oCUIGFuZCB0aGF0IGlzIG5vdCBhbiBlZGdlXG4gICAqIGNhc2U6IHBhdGNoRm9ybSwgcmVzZXQsIGF1dG9QYXRjaCBhbmQgcGF0Y2hPblRydWUgYWxsIGRvIGV4YWN0bHkgdGhhdC4gV2l0aG91dCB0aGlzLCBhXG4gICAqIGZpZWxkIHBhdGNoZWQgZnJvbSBhIHJlY29yZCB3b3VsZCBrZWVwIHJlbmRlcmluZyBpdHMgcHJldmlvdXMgdmFsdWUuXG4gICAqXG4gICAqIGBkZXRlY3RDaGFuZ2VzKClgIHJhdGhlciB0aGFuIGBtYXJrRm9yQ2hlY2soKWA6IGEgc2VsZWN0aW9uIHRoYXQgYXJyaXZlcyBmcm9tIGEgbmF0aXZlXG4gICAqIGBjaGFuZ2VgIGV2ZW50IChvciBQbGF5d3JpZ2h0KSBtYXkgbm90IGJlIGZvbGxvd2VkIGJ5IGFub3RoZXIgQW5ndWxhciB0aWNrLCBzbyBhIGRpcnR5XG4gICAqIGZsYWcgd291bGQgbmV2ZXIgYmUgZmx1c2hlZC4gUnVubmluZyBDRCBvbiB0aGUgaG9zdGVkIGNvbXBvbmVudCBub3cgaXMgdGhlIGNvcHkgc2hvd2luZyB1cC5cbiAgICpcbiAgICogRG9uZSBoZXJlIHJhdGhlciB0aGFuIGluIGVhY2ggb2YgdGhlIGVpZ2h0ZWVuIGZpZWxkIGNvbXBvbmVudHM6IHRoZSBob3N0IG93bnMgdGhlXG4gICAqIGNvbXBvbmVudCByZWZlcmVuY2UsIHNvIG9uZSBzdWJzY3JpcHRpb24gY292ZXJzIGV2ZXJ5IHR5cGUgaW5jbHVkaW5nIGN1c3RvbSBvbmVzLlxuICAgKi9cbiAgcHJpdmF0ZSB3YXRjaENvbnRyb2woKTogdm9pZCB7XG4gICAgdGhpcy5jb250cm9sU3ViPy51bnN1YnNjcmliZSgpO1xuICAgIGlmICghdGhpcy5jb250cm9sKSByZXR1cm47XG5cbiAgICB0aGlzLmNvbnRyb2xTdWIgPSB0aGlzLmNvbnRyb2wudmFsdWVDaGFuZ2VzLnN1YnNjcmliZSgoKSA9PiB0aGlzLnJlZnJlc2goKSk7XG4gIH1cblxuICBwcml2YXRlIGNvbnRyb2xTdWI/OiBTdWJzY3JpcHRpb247XG5cbiAgbmdPbkRlc3Ryb3koKTogdm9pZCB7XG4gICAgdGhpcy5jb250cm9sU3ViPy51bnN1YnNjcmliZSgpO1xuICB9XG5cbiAgLyoqXG4gICAqIFBhc3MgYWxsIDUgY29udHJhY3QgaW5wdXRzIHZpYSBDb21wb25lbnRSZWYuc2V0SW5wdXQoKSDigJQgdW5pZm9ybSBmb3IgYWxsIHR5cGVzLlxuICAgKiBUaGUgcHVibGljIHNoYXBlIGlzIER5bmFtaWNGaWVsZENvbXBvbmVudENvbnRyYWN0LlxuICAgKiBNdXN0IHVzZSBzZXRJbnB1dCgpLCBub3QgcHJvcGVydHkgYXNzaWdubWVudDogdGhlIGZpZWxkIGNvbXBvbmVudHMgZGVjbGFyZSBpbnB1dHMgd2l0aFxuICAgKiBkZWZpbml0ZSBhc3NpZ25tZW50IGFuZCBubyBpbml0aWFsaXplciwgYW5kIHRoZSBsaWIgY29tcGlsZXMgd2l0aFxuICAgKiB1c2VEZWZpbmVGb3JDbGFzc0ZpZWxkczpmYWxzZSwgc28gYCdmaWVsZCcgaW4gaW5zdGFuY2VgIGlzIGZhbHNlIHVudGlsIGZpcnN0IHNldC5cbiAgICovXG4gIHByaXZhdGUgc2V0SW5wdXRzKHJlZjogQ29tcG9uZW50UmVmPHVua25vd24+LCBtYXNrZWQ6IGJvb2xlYW4pOiB2b2lkIHtcbiAgICByZWYuc2V0SW5wdXQoJ2ZpZWxkJywgdGhpcy5maWVsZCk7XG4gICAgcmVmLnNldElucHV0KCdjb250cm9sJywgdGhpcy5jb250cm9sKTtcbiAgICByZWYuc2V0SW5wdXQoJ2xhbmd1YWdlJywgdGhpcy5sYW5ndWFnZSk7XG4gICAgcmVmLnNldElucHV0KCdyZWFkb25seScsIHRoaXMucmVhZG9ubHkgfHwgISF0aGlzLmZpZWxkLnJlYWRvbmx5KTtcbiAgICByZWYuc2V0SW5wdXQoJ21hc2tlZCcsIG1hc2tlZCk7XG4gIH1cbn1cbiJdfQ==
152
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZHluYW1pYy1maWVsZC5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9zcmMvbGliL2Zvcm0vZHluYW1pYy1maWVsZC9keW5hbWljLWZpZWxkLmNvbXBvbmVudC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQ0wsdUJBQXVCLEVBQ3ZCLFNBQVMsRUFFVCxRQUFRLEVBQ1IsS0FBSyxFQUdMLFNBQVMsRUFDVCxnQkFBZ0IsRUFDaEIsTUFBTSxFQUNOLFNBQVMsR0FDVixNQUFNLGVBQWUsQ0FBQztBQUl2QixPQUFPLEVBQUUsT0FBTyxFQUFFLE1BQU0sc0JBQXNCLENBQUM7QUFDL0MsT0FBTyxFQUFFLG9CQUFvQixFQUFFLE1BQU0sdUNBQXVDLENBQUM7QUFDN0UsT0FBTyxFQUFFLFdBQVcsRUFBRSxNQUFNLDZCQUE2QixDQUFDOztBQUUxRDs7Ozs7Ozs7R0FRRztBQU9ILE1BQU0sT0FBTyxxQkFBcUI7SUFDdkIsS0FBSyxDQUFxQjtJQUMxQixPQUFPLENBQW1CO0lBQzFCLE1BQU0sQ0FBb0I7SUFDMUIsWUFBWSxDQUFVO0lBQ3RCLFFBQVEsR0FBVyxJQUFJLENBQUM7SUFDeEIsUUFBUSxHQUFZLEtBQUssQ0FBQztJQUMxQixTQUFTLEdBQWEsRUFBRSxDQUFDO0lBR2pCLFNBQVMsQ0FBb0I7SUFFN0IsYUFBYSxHQUFHLE1BQU0sQ0FBQyxvQkFBb0IsQ0FBQyxDQUFDO0lBQzdDLFdBQVcsR0FBRyxNQUFNLENBQUMsV0FBVyxDQUFDLENBQUM7SUFDbkQ7Ozs7T0FJRztJQUNjLFFBQVEsR0FBRyxNQUFNLENBQUMsUUFBUSxDQUFDLENBQUM7SUFFckMsWUFBWSxHQUFpQyxJQUFJLENBQUM7SUFFMUQsV0FBVyxDQUFDLFFBQXVCO1FBQ2pDLElBQUksQ0FBQyxVQUFVLEVBQUUsQ0FBQztJQUNwQixDQUFDO0lBRU8sVUFBVTtRQUNoQixJQUFJLENBQUMsSUFBSSxDQUFDLEtBQUssSUFBSSxDQUFD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QUFDLEtBQUssQ0FBQyxDQUFDO1FBQ2xDLEdBQUcsQ0FBQyxRQUFRLENBQUMsU0FBUyxFQUFFLElBQUksQ0FBQyxPQUFPLENBQUMsQ0FBQztRQUN0QyxHQUFHLENBQUMsUUFBUSxDQUFDLFVBQVUsRUFBRSxJQUFJLENBQUMsUUFBUSxDQUFDLENBQUM7UUFDeEMsR0FBRyxDQUFDLFFBQVEsQ0FBQyxVQUFVLEVBQUUsSUFBSSxDQUFDLFFBQVEsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxRQUFRLENBQUMsQ0FBQztRQUNqRSxHQUFHLENBQUMsUUFBUSxDQUFDLFFBQVEsRUFBRSxNQUFNLENBQUMsQ0FBQztJQUNqQyxDQUFDO3dHQTVIVSxxQkFBcUI7NEZBQXJCLHFCQUFxQixvVUFTQSxnQkFBZ0IsZ0VBWHRDLDBDQUEwQzs7NEZBRXpDLHFCQUFxQjtrQkFOakMsU0FBUzttQkFBQztvQkFDVCxlQUFlLEVBQUUsdUJBQXVCLENBQUMsTUFBTTtvQkFDL0MsUUFBUSxFQUFFLG1CQUFtQjtvQkFDN0IsVUFBVSxFQUFFLElBQUk7b0JBQ2hCLFFBQVEsRUFBRSwwQ0FBMEM7aUJBQ3JEOzhCQUVVLEtBQUs7c0JBQWIsS0FBSztnQkFDRyxPQUFPO3NCQUFmLEtBQUs7Z0JBQ0csTUFBTTtzQkFBZCxLQUFLO2dCQUNHLFlBQVk7c0JBQXBCLEtBQUs7Z0JBQ0csUUFBUTtzQkFBaEIsS0FBSztnQkFDRyxRQUFRO3NCQUFoQixLQUFLO2dCQUNHLFNBQVM7c0JBQWpCLEtBQUs7Z0JBR1csU0FBUztzQkFEekIsU0FBUzt1QkFBQyxXQUFXLEVBQUUsRUFBRSxJQUFJLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSxFQUFFLElBQUksRUFBRSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7XG4gIENoYW5nZURldGVjdGlvblN0cmF0ZWd5LFxuICBDb21wb25lbnQsXG4gIENvbXBvbmVudFJlZixcbiAgSW5qZWN0b3IsXG4gIElucHV0LFxuICBPbkNoYW5nZXMsIE9uRGVzdHJveSxcbiAgU2ltcGxlQ2hhbmdlcyxcbiAgVmlld0NoaWxkLFxuICBWaWV3Q29udGFpbmVyUmVmLFxuICBpbmplY3QsXG4gIGlzRGV2TW9kZSxcbn0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBBYnN0cmFjdENvbnRyb2wgfSBmcm9tICdAYW5ndWxhci9mb3Jtcyc7XG5pbXBvcnQgeyBTdWJzY3JpcHRpb24gfSBmcm9tICdyeGpzJztcbmltcG9ydCB0eXBlIHsgTmVzdGVkRmllbGRDb25maWcsIEVudGl0eUZvcm1Db25maWcsIE5lc3RlZFRhYkNvbmZpZyB9IGZyb20gJ0BkeW5hbWljLWVudGl0eS9jb3JlJztcbmltcG9ydCB7IGZpbmRUYWIgfSBmcm9tICdAZHluYW1pYy1lbnRpdHkvY29yZSc7XG5pbXBvcnQgeyBGaWVsZFJlZ2lzdHJ5U2VydmljZSB9IGZyb20gJy4uLy4uL3NlcnZpY2VzL2ZpZWxkLXJlZ2lzdHJ5LnNlcnZpY2UnO1xuaW1wb3J0IHsgUmJhY1NlcnZpY2UgfSBmcm9tICcuLi8uLi9zZXJ2aWNlcy9yYmFjLnNlcnZpY2UnO1xuXG4vKipcbiAqIER5bmFtaWNGaWVsZENvbXBvbmVudCDigJQgbW91bnRzIHRoZSBjb3JyZWN0IGZpZWxkIGNvbXBvbmVudCBmb3IgYSBnaXZlbiBOZXN0ZWRGaWVsZENvbmZpZy5cbiAqIFVzZXMgVmlld0NvbnRhaW5lclJlZi5jcmVhdGVDb21wb25lbnQoKSBhbmQgcGFzc2VzIGlucHV0cyB2aWEgc2V0SW5wdXQoKTsgc2VlXG4gKiBEeW5hbWljRmllbGRDb21wb25lbnRDb250cmFjdCBmb3IgdGhlIGZpdmUgaW5wdXRzIGV2ZXJ5IGZpZWxkIGNvbXBvbmVudCByZWNlaXZlcy5cbiAqIE5ldmVyIGFkZCBmaWVsZC10eXBlLXNwZWNpZmljIGxvZ2ljIGhlcmUg4oCUIHRoaXMgY29tcG9uZW50IG11c3QgcmVtYWluIGdlbmVyaWMuXG4gKlxuICogVGhlIDUgaW5wdXRzIChmaWVsZCwgY29udHJvbCwgbGFuZ3VhZ2UsIHJlYWRvbmx5LCBtYXNrZWQpIGFyZSBwYXNzZWQgdG8gZXZlcnkgbW91bnRlZFxuICogY29tcG9uZW50IHVuaWZvcm1seSDigJQgbm8gc3BlY2lhbC1jYXNpbmcgcGVyIHR5cGUuXG4gKi9cbkBDb21wb25lbnQoe1xuICBjaGFuZ2VEZXRlY3Rpb246IENoYW5nZURldGVjdGlvblN0cmF0ZWd5Lk9uUHVzaCxcbiAgc2VsZWN0b3I6ICduZ3gtZHluYW1pYy1maWVsZCcsXG4gIHN0YW5kYWxvbmU6IHRydWUsXG4gIHRlbXBsYXRlOiBgPG5nLWNvbnRhaW5lciAjZmllbGRIb3N0PjwvbmctY29udGFpbmVyPmAsXG59KVxuZXhwb3J0IGNsYXNzIER5bmFtaWNGaWVsZENvbXBvbmVudCBpbXBsZW1lbnRzIE9uQ2hhbmdlcywgT25EZXN0cm95IHtcbiAgQElucHV0KCkgZmllbGQhOiBOZXN0ZWRGaWVsZENvbmZpZztcbiAgQElucHV0KCkgY29udHJvbCE6IEFic3RyYWN0Q29udHJvbDtcbiAgQElucHV0KCkgY29uZmlnITogRW50aXR5Rm9ybUNvbmZpZztcbiAgQElucHV0KCkgY3VycmVudFRhYklkPzogc3RyaW5nO1xuICBASW5wdXQoKSBsYW5ndWFnZTogc3RyaW5nID0gJ2VuJztcbiAgQElucHV0KCkgcmVhZG9ubHk6IGJvb2xlYW4gPSBmYWxzZTtcbiAgQElucHV0KCkgdXNlclJvbGVzOiBzdHJpbmdbXSA9IFtdO1xuXG4gIEBWaWV3Q2hpbGQoJ2ZpZWxkSG9zdCcsIHsgcmVhZDogVmlld0NvbnRhaW5lclJlZiwgc3RhdGljOiB0cnVlIH0pXG4gIHByaXZhdGUgcmVhZG9ubHkgZmllbGRIb3N0ITogVmlld0NvbnRhaW5lclJlZjtcblxuICBwcml2YXRlIHJlYWRvbmx5IGZpZWxkUmVnaXN0cnkgPSBpbmplY3QoRmllbGRSZWdpc3RyeVNlcnZpY2UpO1xuICBwcml2YXRlIHJlYWRvbmx5IHJiYWNTZXJ2aWNlID0gaW5qZWN0KFJiYWNTZXJ2aWNlKTtcbiAgLyoqXG4gICAqIFBhc3NlZCBpbnRvIGBjcmVhdGVDb21wb25lbnRgIHNvIGEgaG9zdGVkIGZpZWxkIHNlZXMgdGhpcyBob3N0J3MgaW5qZWN0b3Ig4oCUIGluY2x1ZGluZ1xuICAgKiBgRHluYW1pY0Zvcm1Db21wb25lbnRgJ3Mgc2NvcGVkIGBFbnRpdHlSZWZTZWxlY3Rpb25TZXJ2aWNlYC4gV2l0aG91dCBpdCwgYSBzdGFuZGFsb25lXG4gICAqIGZpZWxkIHJlc29sdmVzIHRoZSByb290IGJ1cyBhbmQgYGF1dG9QYXRjaGAgbmV2ZXIgcnVucy5cbiAgICovXG4gIHByaXZhdGUgcmVhZG9ubHkgaW5qZWN0b3IgPSBpbmplY3QoSW5qZWN0b3IpO1xuXG4gIHByaXZhdGUgY29tcG9uZW50UmVmOiBDb21wb25lbnRSZWY8dW5rbm93bj4gfCBudWxsID0gbnVsbDtcblxuICBuZ09uQ2hhbmdlcyhfY2hhbmdlczogU2ltcGxlQ2hhbmdlcyk6IHZvaWQge1xuICAgIHRoaXMubW91bnRGaWVsZCgpO1xuICB9XG5cbiAgcHJpdmF0ZSBtb3VudEZpZWxkKCk6IHZvaWQge1xuICAgIGlmICghdGhpcy5maWVsZCB8fCAhdGhpcy5jb250cm9sKSByZXR1cm47XG5cbiAgICBjb25zdCBDb21wb25lbnRDbGFzcyA9IHRoaXMuZmllbGRSZWdpc3RyeS5yZXNvbHZlKHRoaXMuZmllbGQudHlwZSk7XG4gICAgaWYgKCFDb21wb25lbnRDbGFzcykge1xuICAgICAgdGhpcy53YXJuVW5yZXNvbHZlZCh0aGlzLmZpZWxkLnR5cGUpO1xuICAgICAgcmV0dXJuOyAvLyBVbmtub3duIGZpZWxkIHR5cGUg4oCUIHJlbmRlciBub3RoaW5nXG4gICAgfVxuXG4gICAgLy8gRGV0ZXJtaW5lIG1hc2tpbmcgZm9yIHRoaXMgc3BlY2lmaWMgZmllbGRcbiAgICBjb25zdCB0YWI6IE5lc3RlZFRhYkNvbmZpZyB8IG51bGwgPSB0aGlzLmN1cnJlbnRUYWJJZCA/IGZpbmRUYWIodGhpcy5jb25maWc/LnRhYnMsIHRoaXMuY3VycmVudFRhYklkKSA6IG51bGw7XG4gICAgY29uc3QgbWFza2VkID0gdGhpcy5yYmFjU2VydmljZS5zaG91bGRNYXNrRmllbGQodGhpcy5maWVsZCwgdGFiID8/IHVuZGVmaW5lZCwgdGhpcy5jb25maWcsIHRoaXMudXNlclJvbGVzKTtcblxuICAgIC8vIFJlLXVzZSBleGlzdGluZyBjb21wb25lbnQgaWYgc2FtZSB0eXBlLCBvdGhlcndpc2UgcmVjcmVhdGVcbiAgICBpZiAodGhpcy5jb21wb25lbnRSZWYgJiYgdGhpcy5jb21wb25lbnRSZWYuaW5zdGFuY2UgaW5zdGFuY2VvZiBDb21wb25lbnRDbGFzcykge1xuICAgICAgdGhpcy5zZXRJbnB1dHModGhpcy5jb21wb25lbnRSZWYsIG1hc2tlZCk7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgdGhpcy5maWVsZEhvc3QuY2xlYXIoKTtcbiAgICB0aGlzLmNvbXBvbmVudFJlZiA9IHRoaXMuZmllbGRIb3N0LmNyZWF0ZUNvbXBvbmVudChDb21wb25lbnRDbGFzcywge1xuICAgICAgaW5qZWN0b3I6IHRoaXMuaW5qZWN0b3IsXG4gICAgfSk7XG4gICAgdGhpcy5zZXRJbnB1dHModGhpcy5jb21wb25lbnRSZWYsIG1hc2tlZCk7XG4gICAgdGhpcy53YXRjaENvbnRyb2woKTtcbiAgICB0aGlzLmNvbXBvbmVudFJlZi5jaGFuZ2VEZXRlY3RvclJlZi5kZXRlY3RDaGFuZ2VzKCk7XG4gIH1cblxuICAvKipcbiAgICogRmllbGQgdHlwZXMgYXJlIG9wdC1pbiAoc2VlIGBwcm92aWRlRmllbGRUeXBlc2AgLyBgcHJvdmlkZUJ1aWx0SW5GaWVsZFR5cGVzYCksIHNvIGFuXG4gICAqIHVucmVnaXN0ZXJlZCB0eXBlIHJlbmRlcnMgbm90aGluZy4gU2F5IHNvIG9uY2UgcGVyIHR5cGUgaW4gZGV2IGJ1aWxkcyByYXRoZXIgdGhhblxuICAgKiBsZWF2aW5nIGEgc2lsZW50bHkgYmxhbmsgc2xvdC5cbiAgICovXG4gIHByaXZhdGUgd2FyblVucmVzb2x2ZWQodHlwZTogc3RyaW5nKTogdm9pZCB7XG4gICAgaWYgKCFpc0Rldk1vZGUoKSB8fCBEeW5hbWljRmllbGRDb21wb25lbnQud2FybmVkVHlwZXMuaGFzKHR5cGUpKSByZXR1cm47XG4gICAgRHluYW1pY0ZpZWxkQ29tcG9uZW50Lndhcm5lZFR5cGVzLmFkZCh0eXBlKTtcbiAgICBjb25zb2xlLndhcm4oXG4gICAgICBgW25neC1keW5hbWljLWVudGl0eV0gTm8gY29tcG9uZW50IHJlZ2lzdGVyZWQgZm9yIGZpZWxkIHR5cGUgXCIke3R5cGV9XCIg4oCUIHRoZSBmaWVsZCB3YXMgbm90IHJlbmRlcmVkLiBgICtcbiAgICAgICAgYFJlZ2lzdGVyIGl0IHdpdGggcHJvdmlkZUZpZWxkVHlwZXMoeyAnJHt0eXBlfSc6IE15Q29tcG9uZW50IH0pIG9yIHByb3ZpZGVCdWlsdEluRmllbGRUeXBlcygpLmAsXG4gICAgKTtcbiAgfVxuXG4gIHByaXZhdGUgc3RhdGljIHJlYWRvbmx5IHdhcm5lZFR5cGVzID0gbmV3IFNldDxzdHJpbmc+KCk7XG5cbiAgLyoqXG4gICAqIFJlLWNoZWNrIHRoZSBob3N0ZWQgZmllbGQgY29tcG9uZW50LlxuICAgKlxuICAgKiBUaGUgZmllbGQgY29tcG9uZW50cyBhcmUgT25QdXNoLCBzbyB0aGV5IHJlLXJlbmRlciBvbiBhbiBpbnB1dCBjaGFuZ2UsIGFuIGV2ZW50IGZyb21cbiAgICogdGhlaXIgb3duIHRlbXBsYXRlLCBvciBhIHNpZ25hbCB0aGV5IHJlYWQuIGBmb3JtLm1hcmtBbGxBc1RvdWNoZWQoKWAgaXMgbm9uZSBvZiB0aG9zZSDigJRcbiAgICogaXQgZmxpcHMgYHRvdWNoZWRgIGZyb20gb3V0c2lkZSwgYW5kIGV2ZXJ5IGZpZWxkJ3MgZXJyb3IgbWVzc2FnZSBkZXBlbmRzIG9uIGl0LiBXaXRob3V0XG4gICAqIHRoaXMsIGEgYmxvY2tlZCBzdWJtaXQgd291bGQgbWFyayB0aGUgZm9ybSB0b3VjaGVkIGFuZCBubyBlcnJvciB3b3VsZCBhcHBlYXIuXG4gICAqL1xuICByZWZyZXNoKCk6IHZvaWQge1xuICAgIHRoaXMuY29tcG9uZW50UmVmPy5jaGFuZ2VEZXRlY3RvclJlZi5kZXRlY3RDaGFuZ2VzKCk7XG4gIH1cblxuICAvKipcbiAgICogUmUtY2hlY2sgdGhlIGhvc3RlZCBjb21wb25lbnQgd2hlbmV2ZXIgaXRzIGNvbnRyb2wgY2hhbmdlcyBmcm9tIG91dHNpZGUuXG4gICAqXG4gICAqIFRoZSBmaWVsZCBjb21wb25lbnRzIGFyZSBPblB1c2gsIHNvIHRoZXkgcmUtcmVuZGVyIG9uIGFuIGlucHV0IGNoYW5nZSBvciBhbiBldmVudCBmcm9tXG4gICAqIHRoZWlyIG93biB0ZW1wbGF0ZS4gQSBjb250cm9sIG11dGF0ZWQgZXh0ZXJuYWxseSBpcyBuZWl0aGVyIOKAlCBhbmQgdGhhdCBpcyBub3QgYW4gZWRnZVxuICAgKiBjYXNlOiBwYXRjaEZvcm0sIHJlc2V0LCBhdXRvUGF0Y2ggYW5kIHBhdGNoT25UcnVlIGFsbCBkbyBleGFjdGx5IHRoYXQuIFdpdGhvdXQgdGhpcywgYVxuICAgKiBmaWVsZCBwYXRjaGVkIGZyb20gYSByZWNvcmQgd291bGQga2VlcCByZW5kZXJpbmcgaXRzIHByZXZpb3VzIHZhbHVlLlxuICAgKlxuICAgKiBgZGV0ZWN0Q2hhbmdlcygpYCByYXRoZXIgdGhhbiBgbWFya0ZvckNoZWNrKClgOiBhIHNlbGVjdGlvbiB0aGF0IGFycml2ZXMgZnJvbSBhIG5hdGl2ZVxuICAgKiBgY2hhbmdlYCBldmVudCAob3IgUGxheXdyaWdodCkgbWF5IG5vdCBiZSBmb2xsb3dlZCBieSBhbm90aGVyIEFuZ3VsYXIgdGljaywgc28gYSBkaXJ0eVxuICAgKiBmbGFnIHdvdWxkIG5ldmVyIGJlIGZsdXNoZWQuIFJ1bm5pbmcgQ0Qgb24gdGhlIGhvc3RlZCBjb21wb25lbnQgbm93IGlzIHRoZSBjb3B5IHNob3dpbmcgdXAuXG4gICAqXG4gICAqIERvbmUgaGVyZSByYXRoZXIgdGhhbiBpbiBlYWNoIG9mIHRoZSBlaWdodGVlbiBmaWVsZCBjb21wb25lbnRzOiB0aGUgaG9zdCBvd25zIHRoZVxuICAgKiBjb21wb25lbnQgcmVmZXJlbmNlLCBzbyBvbmUgc3Vic2NyaXB0aW9uIGNvdmVycyBldmVyeSB0eXBlIGluY2x1ZGluZyBjdXN0b20gb25lcy5cbiAgICovXG4gIHByaXZhdGUgd2F0Y2hDb250cm9sKCk6IHZvaWQge1xuICAgIHRoaXMuY29udHJvbFN1Yj8udW5zdWJzY3JpYmUoKTtcbiAgICBpZiAoIXRoaXMuY29udHJvbCkgcmV0dXJuO1xuXG4gICAgdGhpcy5jb250cm9sU3ViID0gdGhpcy5jb250cm9sLnZhbHVlQ2hhbmdlcy5zdWJzY3JpYmUoKCkgPT4gdGhpcy5yZWZyZXNoKCkpO1xuICB9XG5cbiAgcHJpdmF0ZSBjb250cm9sU3ViPzogU3Vic2NyaXB0aW9uO1xuXG4gIG5nT25EZXN0cm95KCk6IHZvaWQge1xuICAgIHRoaXMuY29udHJvbFN1Yj8udW5zdWJzY3JpYmUoKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBQYXNzIGFsbCA1IGNvbnRyYWN0IGlucHV0cyB2aWEgQ29tcG9uZW50UmVmLnNldElucHV0KCkg4oCUIHVuaWZvcm0gZm9yIGFsbCB0eXBlcy5cbiAgICogVGhlIHB1YmxpYyBzaGFwZSBpcyBEeW5hbWljRmllbGRDb21wb25lbnRDb250cmFjdC5cbiAgICogTXVzdCB1c2Ugc2V0SW5wdXQoKSwgbm90IHByb3BlcnR5IGFzc2lnbm1lbnQ6IHRoZSBmaWVsZCBjb21wb25lbnRzIGRlY2xhcmUgaW5wdXRzIHdpdGhcbiAgICogZGVmaW5pdGUgYXNzaWdubWVudCBhbmQgbm8gaW5pdGlhbGl6ZXIsIGFuZCB0aGUgbGliIGNvbXBpbGVzIHdpdGhcbiAgICogdXNlRGVmaW5lRm9yQ2xhc3NGaWVsZHM6ZmFsc2UsIHNvIGAnZmllbGQnIGluIGluc3RhbmNlYCBpcyBmYWxzZSB1bnRpbCBmaXJzdCBzZXQuXG4gICAqL1xuICBwcml2YXRlIHNldElucHV0cyhyZWY6IENvbXBvbmVudFJlZjx1bmtub3duPiwgbWFza2VkOiBib29sZWFuKTogdm9pZCB7XG4gICAgcmVmLnNldElucHV0KCdmaWVsZCcsIHRoaXMuZmllbGQpO1xuICAgIHJlZi5zZXRJbnB1dCgnY29udHJvbCcsIHRoaXMuY29udHJvbCk7XG4gICAgcmVmLnNldElucHV0KCdsYW5ndWFnZScsIHRoaXMubGFuZ3VhZ2UpO1xuICAgIHJlZi5zZXRJbnB1dCgncmVhZG9ubHknLCB0aGlzLnJlYWRvbmx5IHx8ICEhdGhpcy5maWVsZC5yZWFkb25seSk7XG4gICAgcmVmLnNldElucHV0KCdtYXNrZWQnLCBtYXNrZWQpO1xuICB9XG59XG4iXX0=