@magicx-eng/ai-autocomplete-angular 0.43.0 → 0.45.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 +67 -2
- package/esm2020/lib/ai-autocomplete/ai-autocomplete.component.mjs +3 -3
- package/esm2020/lib/ai-autocomplete-dropdown/ai-autocomplete-dropdown.component.mjs +30 -5
- package/esm2020/lib/controller/ai-autocomplete.controller.mjs +30 -1
- package/esm2020/lib/internal/product-strip/product-strip.component.mjs +43 -30
- package/esm2020/lib/internal/suggestion-grid/suggestion-grid.component.mjs +5 -3
- package/esm2020/lib/internal/suggestion-item/suggestion-item.component.mjs +6 -4
- package/esm2020/lib/internal/time-wheel/time-wheel.component.mjs +147 -0
- package/esm2020/lib/shared/types.mjs +1 -1
- package/esm2020/public-api.mjs +7 -2
- package/fesm2015/magicx-eng-ai-autocomplete-angular.mjs +262 -45
- package/fesm2015/magicx-eng-ai-autocomplete-angular.mjs.map +1 -1
- package/fesm2020/magicx-eng-ai-autocomplete-angular.mjs +260 -43
- package/fesm2020/magicx-eng-ai-autocomplete-angular.mjs.map +1 -1
- package/lib/ai-autocomplete/ai-autocomplete.component.d.ts +3 -1
- package/lib/ai-autocomplete/ai-autocomplete.component.d.ts.map +1 -1
- package/lib/ai-autocomplete-dropdown/ai-autocomplete-dropdown.component.d.ts +10 -1
- package/lib/ai-autocomplete-dropdown/ai-autocomplete-dropdown.component.d.ts.map +1 -1
- package/lib/controller/ai-autocomplete.controller.d.ts +9 -0
- package/lib/controller/ai-autocomplete.controller.d.ts.map +1 -1
- package/lib/internal/product-strip/product-strip.component.d.ts +11 -6
- package/lib/internal/product-strip/product-strip.component.d.ts.map +1 -1
- package/lib/internal/suggestion-grid/suggestion-grid.component.d.ts +2 -1
- package/lib/internal/suggestion-grid/suggestion-grid.component.d.ts.map +1 -1
- package/lib/internal/suggestion-item/suggestion-item.component.d.ts +2 -1
- package/lib/internal/suggestion-item/suggestion-item.component.d.ts.map +1 -1
- package/lib/internal/time-wheel/time-wheel.component.d.ts +53 -0
- package/lib/internal/time-wheel/time-wheel.component.d.ts.map +1 -0
- package/lib/shared/types.d.ts +12 -4
- package/lib/shared/types.d.ts.map +1 -1
- package/package.json +2 -2
- package/public-api.d.ts +5 -2
- package/public-api.d.ts.map +1 -1
|
@@ -3,8 +3,15 @@ import { ChangeDetectionStrategy, ChangeDetectorRef, Component, EventEmitter, In
|
|
|
3
3
|
import { attachProductRowWheel, productImageSources, productInitial, productPhotoFill, uiStringsFor, } from "@magicx-eng/ai-autocomplete-vanilla";
|
|
4
4
|
import * as i0 from "@angular/core";
|
|
5
5
|
import * as i1 from "@angular/common";
|
|
6
|
-
/**
|
|
7
|
-
|
|
6
|
+
/**
|
|
7
|
+
* What makes a card's product "the same" for its cart button: every field
|
|
8
|
+
* vanilla's `cardKey` rebuilds the card on. A price-only change keeps it.
|
|
9
|
+
*/
|
|
10
|
+
function cartIdentity(product) {
|
|
11
|
+
return [product.id, product.title, product.url, product.imageUrl, product.vendor]
|
|
12
|
+
.map((field) => field ?? "")
|
|
13
|
+
.join("\0");
|
|
14
|
+
}
|
|
8
15
|
/**
|
|
9
16
|
* Internal product strip rendered below the dropdown's options grid. Mirrors
|
|
10
17
|
* `packages/react/src/components/ProductStrip.tsx` and the vanilla core's
|
|
@@ -67,10 +74,12 @@ export class ProductStripComponent {
|
|
|
67
74
|
this.focusChange = new EventEmitter();
|
|
68
75
|
this.detachWheel = null;
|
|
69
76
|
this.cdr = inject(ChangeDetectorRef);
|
|
70
|
-
/**
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
77
|
+
/**
|
|
78
|
+
* Per product id, the cart button's state while it isn't at rest, with the
|
|
79
|
+
* product identity it belongs to and the press that set it (a settle from an
|
|
80
|
+
* earlier press, or for a card since reset, is dropped).
|
|
81
|
+
*/
|
|
82
|
+
this.carts = new Map();
|
|
74
83
|
this.destroyed = false;
|
|
75
84
|
this.trackByProduct = (_, product) => product.id;
|
|
76
85
|
}
|
|
@@ -81,6 +90,15 @@ export class ProductStripComponent {
|
|
|
81
90
|
if (!failed.every((src) => current.includes(src)))
|
|
82
91
|
this.failedImages.delete(id);
|
|
83
92
|
}
|
|
93
|
+
// A card whose product changed, left the strip or lost its button puts the
|
|
94
|
+
// button back at rest — what rebuilding the card does in vanilla.
|
|
95
|
+
const byId = new Map(this.products.map((product) => [product.id, product]));
|
|
96
|
+
for (const [id, cart] of this.carts) {
|
|
97
|
+
const product = byId.get(id);
|
|
98
|
+
if (!product || !this.hasCart(product) || cartIdentity(product) !== cart.identity) {
|
|
99
|
+
this.carts.delete(id);
|
|
100
|
+
}
|
|
101
|
+
}
|
|
84
102
|
}
|
|
85
103
|
imageSource(product) {
|
|
86
104
|
const failed = this.failedImages.get(product.id) ?? [];
|
|
@@ -134,16 +152,13 @@ export class ProductStripComponent {
|
|
|
134
152
|
this.destroyed = true;
|
|
135
153
|
this.detachWheel?.();
|
|
136
154
|
this.detachWheel = null;
|
|
137
|
-
for (const timer of this.cartTimers.values())
|
|
138
|
-
clearTimeout(timer);
|
|
139
|
-
this.cartTimers.clear();
|
|
140
155
|
}
|
|
141
156
|
/** A sold-out product can't be added, so its card has no button at all. */
|
|
142
157
|
hasCart(product) {
|
|
143
158
|
return this.addToCart !== null && product.available !== false;
|
|
144
159
|
}
|
|
145
160
|
cartState(product) {
|
|
146
|
-
return this.
|
|
161
|
+
return this.carts.get(product.id)?.state ?? null;
|
|
147
162
|
}
|
|
148
163
|
onCartKeyDown(event, product) {
|
|
149
164
|
// Keys never reach the card, whose own Enter / Space would select it.
|
|
@@ -151,17 +166,20 @@ export class ProductStripComponent {
|
|
|
151
166
|
return;
|
|
152
167
|
this.onCartPress(event, product);
|
|
153
168
|
}
|
|
154
|
-
/**
|
|
169
|
+
/**
|
|
170
|
+
* Mirrors vanilla's `buildCartButton` press: adding → added, or rest on a
|
|
171
|
+
* rejection. The check stays until the product changes; another press adds again.
|
|
172
|
+
*/
|
|
155
173
|
onCartPress(event, product) {
|
|
156
174
|
event.preventDefault();
|
|
157
175
|
event.stopPropagation();
|
|
158
176
|
const handler = this.addToCart;
|
|
159
|
-
if (!handler || this.
|
|
177
|
+
if (!handler || this.cartState(product) === "adding")
|
|
160
178
|
return;
|
|
161
179
|
const id = product.id;
|
|
162
|
-
|
|
163
|
-
this.
|
|
164
|
-
this.
|
|
180
|
+
const press = {};
|
|
181
|
+
this.carts.set(id, { state: "adding", identity: cartIdentity(product), press });
|
|
182
|
+
this.cdr.markForCheck();
|
|
165
183
|
let pending;
|
|
166
184
|
try {
|
|
167
185
|
pending = Promise.resolve(handler(product));
|
|
@@ -169,21 +187,16 @@ export class ProductStripComponent {
|
|
|
169
187
|
catch (error) {
|
|
170
188
|
pending = Promise.reject(error);
|
|
171
189
|
}
|
|
172
|
-
pending.then(() =>
|
|
173
|
-
|
|
174
|
-
|
|
175
|
-
|
|
176
|
-
|
|
177
|
-
}, CART_ADDED_MS));
|
|
178
|
-
}, () => this.setCartState(id, null));
|
|
179
|
-
}
|
|
180
|
-
setCartState(id, state) {
|
|
181
|
-
if (this.destroyed)
|
|
190
|
+
pending.then(() => this.settleCart(id, press, "added"), () => this.settleCart(id, press, null));
|
|
191
|
+
}
|
|
192
|
+
settleCart(id, press, state) {
|
|
193
|
+
const cart = this.carts.get(id);
|
|
194
|
+
if (this.destroyed || cart?.press !== press)
|
|
182
195
|
return;
|
|
183
196
|
if (state)
|
|
184
|
-
|
|
197
|
+
cart.state = state;
|
|
185
198
|
else
|
|
186
|
-
this.
|
|
199
|
+
this.carts.delete(id);
|
|
187
200
|
this.cdr.markForCheck();
|
|
188
201
|
}
|
|
189
202
|
get labelId() {
|
|
@@ -219,10 +232,10 @@ export class ProductStripComponent {
|
|
|
219
232
|
}
|
|
220
233
|
}
|
|
221
234
|
ProductStripComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.2.10", ngImport: i0, type: ProductStripComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
|
|
222
|
-
ProductStripComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "15.2.10", type: ProductStripComponent, isStandalone: true, selector: "aia-product-strip", inputs: { products: "products", listboxId: "listboxId", focusable: "focusable", layout: "layout", imageFallback: "imageFallback", strings: "strings", addToCart: "addToCart" }, outputs: { select: "select", focusChange: "focusChange" }, viewQueries: [{ propertyName: "row", first: true, predicate: ["row"], descendants: true }], usesOnChanges: true, ngImport: i0, template: "<!-- `group` is the one role a listbox accepts around a set of options, so the\n strip stays inside the listbox without breaking its content model. -->\n<section\n *ngIf=\"products.length > 0\"\n class=\"aia-products\"\n data-aia-products=\"\"\n [attr.data-aia-products-layout]=\"layout\"\n role=\"group\"\n [attr.aria-labelledby]=\"labelId\"\n>\n <!-- data-aia-products-label: the scroll arrow centres itself on this row. -->\n <div class=\"aia-products-label\" [id]=\"labelId\" data-aia-products-label=\"\">{{ strings.products }}</div>\n\n <!-- #row: the component binds wheel-to-sideways scrolling on it. -->\n <div #row class=\"aia-products-row\" data-aia-products-row=\"\">\n <!-- A real <a href> rather than a <div>: it keeps the browser's own link\n affordances \u2014 cmd/ctrl-click for a new tab, middle-click, right-click \u2192\n \"copy link address\". role=\"option\" overrides how assistive tech\n announces it, which is correct inside a listbox; the deliberate trade\n is that AT no longer calls it a link. An attribute binding, so a\n product without a url gets no href at all rather than \"null\". -->\n <a\n *ngFor=\"let product of products; let i = index; trackBy: trackByProduct\"\n [id]=\"cardId(i)\"\n class=\"aia-product\"\n data-aia-product=\"\"\n [attr.data-aia-product-sold-out]=\"product.available === false ? '' : null\"\n [attr.data-aia-product-has-cart]=\"hasCart(product) ? '' : null\"\n [style]=\"photoFillStyle(product)\"\n role=\"option\"\n [attr.aria-selected]=\"false\"\n [attr.href]=\"product.url ?? null\"\n [attr.tabindex]=\"focusable ? 0 : -1\"\n (click)=\"onClick($event, product)\"\n (keydown)=\"onKeyDown($event, product)\"\n (focus)=\"onCardFocus()\"\n (blur)=\"onCardBlur($event)\"\n >\n <span\n class=\"aia-product-media\"\n aria-hidden=\"true\"\n [attr.data-aia-product-placeholder]=\"!imageSource(product) && imageFallback === 'image' ? '' : null\"\n [attr.data-aia-product-initial]=\"!imageSource(product) && imageFallback === 'initial' ? '' : null\"\n [attr.data-aia-image-loaded]=\"imageLoaded(product) ? '' : null\"\n >\n <!-- alt=\"\" on purpose: the title is already the card's accessible\n name, and repeating it would have a screen reader read it twice. -->\n <img\n *ngIf=\"imageSource(product) as src\"\n class=\"aia-product-image\"\n [src]=\"src\"\n (load)=\"onImageLoad(product, src, $event)\"\n (error)=\"onImageError(product)\"\n alt=\"\"\n loading=\"lazy\"\n decoding=\"async\"\n />\n <ng-container *ngIf=\"!imageSource(product) && imageFallback === 'initial'\">{{ initial(product.title) }}</ng-container>\n </span>\n\n <!-- Every field but the title is optional, so absent ones render no\n element at all \u2014 the column gap can't leave a hole for a box that\n isn't there. -->\n <span class=\"aia-product-body\">\n <span *ngIf=\"product.vendor\" class=\"aia-product-vendor\">{{ product.vendor }}</span>\n <span class=\"aia-product-title\">{{ product.title }}</span>\n <span *ngIf=\"product.price\" class=\"aia-product-price\">{{ product.price }}</span>\n <!-- In the text column rather than the aria-hidden media tile, so the\n card's accessible name says it; the stylesheet lifts it over the\n image. -->\n <span *ngIf=\"product.available === false\" class=\"aia-product-badge\">{{ strings.soldOut }}</span>\n </span>\n\n <!-- The add-to-cart button: a child of the card rather than of the\n aria-hidden media tile; the stylesheet lifts it over the tile's\n bottom right corner. A role=\"button\" span, not a <button>:\n interactive content inside an <a> is invalid HTML. Its press never\n reaches the card, so it never selects. Sold-out cards have none. -->\n <span\n *ngIf=\"hasCart(product)\"\n class=\"aia-product-cart\"\n data-aia-product-cart=\"\"\n role=\"button\"\n [attr.aria-label]=\"strings.addToCart + ': ' + product.title\"\n [attr.tabindex]=\"focusable ? 0 : -1\"\n [attr.data-aia-cart-state]=\"cartState(product)\"\n [attr.aria-busy]=\"cartState(product) === 'adding' ? 'true' : null\"\n (click)=\"onCartPress($event, product)\"\n (keydown)=\"onCartKeyDown($event, product)\"\n (focus)=\"onCardFocus()\"\n (blur)=\"onCardBlur($event)\"\n >\n <svg viewBox=\"0 0 24 24\" aria-hidden=\"true\" focusable=\"false\">\n <path class=\"aia-product-cart-glyph\" d=\"M2 3h2.2l2.4 11.2a2 2 0 0 0 2 1.6h8.9a2 2 0 0 0 1.9-1.5L21 8H6\" />\n <path class=\"aia-product-cart-glyph\" d=\"M13.5 6.5v-4M11.5 4.5h4\" />\n <path class=\"aia-product-cart-check\" d=\"M5 12.5l4.5 4.5L19 7.5\" />\n <circle class=\"aia-product-cart-glyph\" cx=\"9\" cy=\"20\" r=\"1.3\" />\n <circle class=\"aia-product-cart-glyph\" cx=\"17.5\" cy=\"20\" r=\"1.3\" />\n </svg>\n </span>\n </a>\n </div>\n</section>\n", styles: [".aia-products{display:flex;flex-direction:column;gap:6px;padding:0 10px;min-width:0}.aia-products-label{font-family:inherit;font-size:var(--aia-products-label-font-size, 11px);font-weight:500;line-height:18px;letter-spacing:.02em;color:var( --aia-products-label-color, var(--aia-option-color, var(--aia-color-text-muted, #c1c4cb)) )}.aia-products-row{display:flex;gap:var(--aia-product-gap, 8px);min-width:0;overflow-x:auto;overflow-y:hidden;overscroll-behavior-x:contain;padding-bottom:2px;margin-inline:-6px;scrollbar-width:none;-ms-overflow-style:none}.aia-products-row::-webkit-scrollbar{display:none}.aia-product{flex:0 0 auto;display:flex;flex-direction:column;gap:6px;width:var(--aia-product-card-width, 116px);padding:6px;border-radius:10px;background:var(--aia-product-bg, transparent);color:var(--aia-option-color, var(--aia-color-text-muted, #c1c4cb));text-decoration:none;cursor:pointer;transition:background-color .15s ease;position:relative}.aia-product:hover{background:var(--aia-product-bg-active, var(--aia-option-bg, transparent))}.aia-product:focus-visible{outline:2px solid var(--aia-product-focus-ring, var(--aia-option-color-selected, currentColor));outline-offset:-2px}.aia-product-media{display:block;position:relative;width:100%;aspect-ratio:1 / 1;border-radius:8px;overflow:hidden;background:var(--aia-product-media-bg, var(--aia-skeleton-bg, rgba(189, 189, 189, .25)))}.aia-product-media[data-aia-image-loaded]{background:transparent}.aia-product-image{display:block;width:auto;max-width:100%;height:100%;margin:0 auto;border-radius:var(--aia-product-image-radius, 8px);object-fit:contain}.aia-product-media:where([data-aia-product-initial]){display:flex;align-items:center;justify-content:center;color:var(--aia-product-title-color, var(--aia-option-color-selected, currentColor));font-size:24px;font-weight:600;line-height:1}.aia-product-media[data-aia-product-placeholder]:after{content:\"\";position:absolute;inset:22%;background:var( --aia-product-placeholder-image, url(\"data:image/svg+xml,%3Csvg viewBox='0 -0.5 32 32' fill-rule='evenodd' xmlns='http://www.w3.org/2000/svg'%3E%3Cg transform='matrix(1,0,0,1,-384,-144)'%3E%3Cg transform='matrix(0.875,0,0,0.875,90.25,19.125)'%3E%3Cpath d='M340.924,147.74C341.224,146.789 342.107,146.143 343.104,146.143C347.705,146.143 360.491,146.143 364.985,146.143C365.965,146.143 366.836,146.768 367.15,147.697C368.119,150.386 370,155.73 370,157C370,159.208 368.208,161 366,161C363.792,161 362,159.208 362,157C362,159.208 360.208,161 358,161C355.792,161 354,159.208 354,157C354,159.208 352.208,161 350,161C347.792,161 346,159.208 346,157C346,159.208 344.208,161 342,161C340.53,161 339.244,160.205 338.549,159.022C338.057,158.185 337.944,157.179 338.236,156.254C338.787,154.507 340.172,150.121 340.924,147.74Z' fill='%2390e0ef'%3E%3C/path%3E%3C/g%3E%3Cg transform='matrix(1,0,0,1.32454,48,-56.1457)'%3E%3Cpath d='M341.026,160.675C341.026,160.675 341.01,168.196 341.003,171.488C341.002,171.889 341.213,172.273 341.588,172.557C341.963,172.841 342.472,173 343.003,173C347.188,173 356.817,173 361,173C361.53,173 362.039,172.841 362.414,172.558C362.789,172.275 363,171.891 363,171.49C363,168.2 363,160.675 363,160.675' fill='%2390e0ef'%3E%3C/path%3E%3C/g%3E%3Cg transform='matrix(1,0,0,1,48,0)'%3E%3Cpath d='M355,168C355,166.895 354.105,166 353,166C352.356,166 351.644,166 351,166C349.895,166 349,166.895 349,168C349,170.069 349,173 349,173L355,173L355,168Z' fill='%2390e0ef'%3E%3C/path%3E%3C/g%3E%3Cg transform='matrix(1.11111,0,0,1.11111,-47.2678,-87.5361)'%3E%3Ccircle cx='411.5' cy='213.5' r='4.5' fill='%2390e0ef'%3E%3C/circle%3E%3C/g%3E%3Cpath d='M405.529,146C406.628,144.773 408.225,144 410,144C413.311,144 416,146.689 416,150C416,151.549 415.412,152.962 414.446,154.027C414.775,155.15 415,156.076 415,156.5C415,158.459 413.746,160.127 411.998,160.744L411.998,171C411.998,171.796 411.682,172.559 411.119,173.121C410.557,173.684 409.794,174 408.998,174L391.002,174C390.205,174 389.441,173.683 388.879,173.119C388.316,172.555 388,171.79 388.002,170.994L388.024,160.752C387.007,160.399 386.155,159.691 385.618,158.776L385.618,158.776C385.044,157.799 384.912,156.626 385.253,155.546L387.605,148.097C387.999,146.849 389.157,146 390.466,146L405.529,146ZM409.998,160.972C408.79,160.838 407.726,160.225 407,159.327C406.175,160.347 404.913,161 403.5,161C402.087,161 400.825,160.347 400,159.327C399.175,160.347 397.913,161 396.5,161C395.087,161 393.825,160.347 393,159.327C392.278,160.219 391.222,160.831 390.023,160.97L390.002,170.998C390.002,171.263 390.107,171.518 390.294,171.706C390.482,171.894 390.736,172 391.002,172L396,172L396,168C396,166.343 397.343,165 399,165L401,165C402.657,165 404,166.343 404,168L404,172L408.998,172C409.263,172 409.517,171.895 409.705,171.707C409.893,171.52 409.998,171.265 409.998,171L409.998,160.972ZM402,172L398,172L398,168C398,167.448 398.448,167 399,167C399,167 401,167 401,167C401.552,167 402,167.448 402,168L402,172ZM404.342,148L390.466,148C390.03,148 389.644,148.283 389.512,148.699L387.16,156.148C386.99,156.688 387.056,157.275 387.342,157.763C387.777,158.503 388.581,159 389.5,159C390.88,159 392,157.88 392,156.5C392,155.003 394,155.003 394,156.5C394,157.88 395.12,159 396.5,159C397.88,159 399,157.88 399,156.5C399,155.004 401,155.004 401,156.5C401,157.88 402.12,159 403.5,159C404.88,159 406,157.88 406,156.5C406,154.986 408,154.986 408,156.5C408,157.88 409.12,159 410.5,159C411.88,159 413,157.88 413,156.5C413,156.259 412.917,155.843 412.779,155.318C411.948,155.753 411.003,156 410,156C406.689,156 404,153.311 404,150C404,149.299 404.12,148.626 404.342,148ZM410,146C412.208,146 414,147.792 414,150C414,152.208 412.208,154 410,154C407.792,154 406,152.208 406,150C406,147.792 407.792,146 410,146ZM407.543,151.207L408.546,152.21C408.733,152.397 408.988,152.503 409.253,152.503C409.519,152.503 409.773,152.397 409.961,152.209L412.458,149.706C412.848,149.316 412.847,148.682 412.456,148.292C412.066,147.902 411.432,147.903 411.042,148.294L409.252,150.088C409.252,150.088 408.957,149.793 408.957,149.793C408.567,149.403 407.933,149.403 407.543,149.793C407.153,150.183 407.153,150.817 407.543,151.207Z' fill='%231990a7'%3E%3C/path%3E%3C/g%3E%3C/svg%3E\") ) center / contain no-repeat}.aia-product-body{display:flex;flex-direction:column;gap:2px;min-width:0}.aia-product-vendor{font-family:inherit;font-size:var(--aia-product-vendor-font-size, 10px);line-height:14px;color:var( --aia-product-vendor-color, var(--aia-option-color, var(--aia-color-text-muted, #c1c4cb)) );opacity:.8;overflow:hidden;white-space:nowrap;text-overflow:ellipsis}.aia-product-title{font-family:inherit;font-size:var(--aia-product-title-font-size, 12px);font-weight:400;line-height:16px;color:var( --aia-product-title-color, var(--aia-option-color-selected, var(--aia-color-text-default, #fff)) );display:-webkit-box;-webkit-line-clamp:2;line-clamp:2;-webkit-box-orient:vertical;overflow:hidden}.aia-product-price{font-family:inherit;font-size:var(--aia-product-price-font-size, 11px);font-weight:500;line-height:15px;color:var( --aia-product-price-color, var(--aia-option-color-selected, var(--aia-color-text-default, #fff)) )}.aia-product-badge{position:absolute;top:var(--aia-product-badge-inset, 12px);left:var(--aia-product-badge-inset, 12px);padding:3px 6px;border-radius:4px;background:var(--aia-product-badge-bg, rgba(255, 255, 255, .94));color:var(--aia-product-badge-color, #1f2328);box-shadow:0 0 0 1px #00000014,0 1px 2px #0000002e;font-family:inherit;font-size:var(--aia-product-badge-font-size, 9px);font-weight:600;line-height:1;letter-spacing:.08em;text-transform:uppercase;white-space:nowrap;pointer-events:none}.aia-product-cart{position:absolute;top:calc(var(--aia-product-card-width, 116px) - 12px - var(--aia-product-cart-size, 28px) - (var(--aia-product-card-width, 116px) - 12px) * (1 - var(--aia-product-photo-fill-y, 1)) / 2);right:calc(12px + (var(--aia-product-card-width, 116px) - 12px) * (1 - var(--aia-product-photo-fill-x, 1)) / 2);display:flex;align-items:center;justify-content:center;width:var(--aia-product-cart-size, 28px);height:var(--aia-product-cart-size, 28px);border-radius:999px;background:var(--aia-product-cart-bg, rgba(255, 255, 255, .94));color:var(--aia-product-cart-color, #1f2328);box-shadow:0 0 0 1px #00000014,0 1px 3px #00000038;cursor:pointer;transition:transform .15s ease,opacity .15s ease}.aia-product-cart:hover{transform:scale(1.08)}.aia-product-cart:focus-visible{outline:2px solid var(--aia-product-focus-ring, var(--aia-option-color-selected, currentColor));outline-offset:2px}.aia-product-cart svg{display:block;width:16px;height:16px;fill:none;stroke:currentColor;stroke-width:2;stroke-linecap:round;stroke-linejoin:round}.aia-product-cart svg path{fill:none;stroke:currentColor}.aia-product-cart svg circle{fill:none;stroke:currentColor}.aia-product-cart-check{display:none}.aia-product-cart[data-aia-cart-state=adding]{opacity:.6;cursor:progress}.aia-product-cart[data-aia-cart-state=added] .aia-product-cart-glyph{display:none}.aia-product-cart[data-aia-cart-state=added] .aia-product-cart-check{display:inline}.aia-product[data-aia-product-sold-out] .aia-product-image{filter:grayscale(.55)}.aia-products[data-aia-products-layout=list] .aia-products-row{flex-direction:column;gap:var(--aia-product-list-gap, 2px);max-height:var(--aia-product-list-max-height, 320px);overflow-x:hidden;overflow-y:auto;overscroll-behavior-y:contain}.aia-products[data-aia-products-layout=list] .aia-product{flex-direction:row;align-items:center;gap:10px;width:auto;padding:6px 8px}.aia-products[data-aia-products-layout=list] .aia-product-media{flex:0 0 auto;width:var(--aia-product-list-media-size, 44px);height:var(--aia-product-list-media-size, 44px)}.aia-products[data-aia-products-layout=list] .aia-product-body{flex:1 1 auto}.aia-products[data-aia-products-layout=list] .aia-product-badge{top:calc(50% + var(--aia-product-list-media-size, 44px) / 2);left:8px;width:var(--aia-product-list-media-size, 44px);transform:translateY(-100%);padding:2px 0;border-radius:0 0 8px 8px;background:var(--aia-product-badge-list-bg, rgba(17, 17, 17, .72));color:var(--aia-product-badge-list-color, #fff);box-shadow:none;font-size:var(--aia-product-badge-list-font-size, 7px);letter-spacing:.02em;text-align:center}.aia-products[data-aia-products-layout=list] .aia-product-cart{top:50%;right:8px;transform:translateY(-50%)}.aia-products[data-aia-products-layout=list] .aia-product-cart:hover{transform:translateY(-50%) scale(1.08)}.aia-products[data-aia-products-layout=list] .aia-product[data-aia-product-has-cart]{padding-right:calc(var(--aia-product-cart-size, 28px) + 16px)}\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i1.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None });
|
|
235
|
+
ProductStripComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "15.2.10", type: ProductStripComponent, isStandalone: true, selector: "aia-product-strip", inputs: { products: "products", listboxId: "listboxId", focusable: "focusable", layout: "layout", imageFallback: "imageFallback", strings: "strings", addToCart: "addToCart" }, outputs: { select: "select", focusChange: "focusChange" }, viewQueries: [{ propertyName: "row", first: true, predicate: ["row"], descendants: true }], usesOnChanges: true, ngImport: i0, template: "<!-- `group` is the one role a listbox accepts around a set of options, so the\n strip stays inside the listbox without breaking its content model. -->\n<section\n *ngIf=\"products.length > 0\"\n class=\"aia-products\"\n data-aia-products=\"\"\n [attr.data-aia-products-layout]=\"layout\"\n role=\"group\"\n [attr.aria-labelledby]=\"labelId\"\n>\n <!-- data-aia-products-label: the scroll arrow centres itself on this row. -->\n <div class=\"aia-products-label\" [id]=\"labelId\" data-aia-products-label=\"\">{{ strings.products }}</div>\n\n <!-- #row: the component binds wheel-to-sideways scrolling on it. -->\n <div #row class=\"aia-products-row\" data-aia-products-row=\"\">\n <!-- A real <a href> rather than a <div>: it keeps the browser's own link\n affordances \u2014 cmd/ctrl-click for a new tab, middle-click, right-click \u2192\n \"copy link address\". role=\"option\" overrides how assistive tech\n announces it, which is correct inside a listbox; the deliberate trade\n is that AT no longer calls it a link. An attribute binding, so a\n product without a url gets no href at all rather than \"null\". -->\n <a\n *ngFor=\"let product of products; let i = index; trackBy: trackByProduct\"\n [id]=\"cardId(i)\"\n class=\"aia-product\"\n data-aia-product=\"\"\n [attr.data-aia-product-sold-out]=\"product.available === false ? '' : null\"\n [attr.data-aia-product-has-cart]=\"hasCart(product) ? '' : null\"\n [style]=\"photoFillStyle(product)\"\n role=\"option\"\n [attr.aria-selected]=\"false\"\n [attr.href]=\"product.url ?? null\"\n [attr.tabindex]=\"focusable ? 0 : -1\"\n (click)=\"onClick($event, product)\"\n (keydown)=\"onKeyDown($event, product)\"\n (focus)=\"onCardFocus()\"\n (blur)=\"onCardBlur($event)\"\n >\n <span\n class=\"aia-product-media\"\n aria-hidden=\"true\"\n [attr.data-aia-product-placeholder]=\"!imageSource(product) && imageFallback === 'image' ? '' : null\"\n [attr.data-aia-product-initial]=\"!imageSource(product) && imageFallback === 'initial' ? '' : null\"\n [attr.data-aia-image-loaded]=\"imageLoaded(product) ? '' : null\"\n >\n <!-- alt=\"\" on purpose: the title is already the card's accessible\n name, and repeating it would have a screen reader read it twice. -->\n <img\n *ngIf=\"imageSource(product) as src\"\n class=\"aia-product-image\"\n [src]=\"src\"\n (load)=\"onImageLoad(product, src, $event)\"\n (error)=\"onImageError(product)\"\n alt=\"\"\n loading=\"lazy\"\n decoding=\"async\"\n />\n <ng-container *ngIf=\"!imageSource(product) && imageFallback === 'initial'\">{{ initial(product.title) }}</ng-container>\n </span>\n\n <!-- Every field but the title is optional, so absent ones render no\n element at all \u2014 the column gap can't leave a hole for a box that\n isn't there. -->\n <span class=\"aia-product-body\">\n <span *ngIf=\"product.vendor\" class=\"aia-product-vendor\">{{ product.vendor }}</span>\n <span class=\"aia-product-title\">{{ product.title }}</span>\n <span *ngIf=\"product.price\" class=\"aia-product-price\">{{ product.price }}</span>\n <!-- In the text column rather than the aria-hidden media tile, so the\n card's accessible name says it; the stylesheet lifts it over the\n image. -->\n <span *ngIf=\"product.available === false\" class=\"aia-product-badge\">{{ strings.soldOut }}</span>\n </span>\n\n <!-- The add-to-cart button: a child of the card rather than of the\n aria-hidden media tile; the stylesheet lifts it over the tile's\n bottom right corner. A role=\"button\" span, not a <button>:\n interactive content inside an <a> is invalid HTML. Its press never\n reaches the card, so it never selects. Sold-out cards have none. -->\n <span\n *ngIf=\"hasCart(product)\"\n class=\"aia-product-cart\"\n data-aia-product-cart=\"\"\n role=\"button\"\n [attr.aria-label]=\"strings.addToCart + ': ' + product.title\"\n [attr.tabindex]=\"focusable ? 0 : -1\"\n [attr.data-aia-cart-state]=\"cartState(product)\"\n [attr.aria-busy]=\"cartState(product) === 'adding' ? 'true' : null\"\n (click)=\"onCartPress($event, product)\"\n (keydown)=\"onCartKeyDown($event, product)\"\n (focus)=\"onCardFocus()\"\n (blur)=\"onCardBlur($event)\"\n >\n <svg viewBox=\"0 0 24 24\" aria-hidden=\"true\" focusable=\"false\">\n <path class=\"aia-product-cart-glyph\" d=\"M2 3h2.2l2.4 11.2a2 2 0 0 0 2 1.6h8.9a2 2 0 0 0 1.9-1.5L21 8H6\" />\n <path class=\"aia-product-cart-glyph\" d=\"M13.5 6.5v-4M11.5 4.5h4\" />\n <path class=\"aia-product-cart-check\" d=\"M5 12.5l4.5 4.5L19 7.5\" />\n <path class=\"aia-product-cart-spinner\" d=\"M12 4a8 8 0 1 0 8 8\" />\n <circle class=\"aia-product-cart-glyph\" cx=\"9\" cy=\"20\" r=\"1.3\" />\n <circle class=\"aia-product-cart-glyph\" cx=\"17.5\" cy=\"20\" r=\"1.3\" />\n </svg>\n </span>\n </a>\n </div>\n</section>\n", styles: [".aia-products{display:flex;flex-direction:column;gap:6px;padding:0 10px;min-width:0}.aia-products-label{font-family:inherit;font-size:var(--aia-products-label-font-size, 11px);font-weight:500;line-height:18px;letter-spacing:.02em;color:var( --aia-products-label-color, var(--aia-option-color, var(--aia-color-text-muted, #c1c4cb)) )}.aia-products-row{display:flex;gap:var(--aia-product-gap, 8px);min-width:0;overflow-x:auto;overflow-y:hidden;overscroll-behavior-x:contain;padding-bottom:2px;margin-inline:-6px;scrollbar-width:none;-ms-overflow-style:none}.aia-products-row::-webkit-scrollbar{display:none}.aia-product{flex:0 0 auto;display:flex;flex-direction:column;gap:6px;width:var(--aia-product-card-width, 116px);padding:6px;border-radius:10px;background:var(--aia-product-bg, transparent);color:var(--aia-option-color, var(--aia-color-text-muted, #c1c4cb));text-decoration:none;cursor:pointer;transition:background-color .15s ease;position:relative}.aia-product:hover{background:var(--aia-product-bg-active, var(--aia-option-bg, transparent))}.aia-product:focus-visible{outline:2px solid var(--aia-product-focus-ring, var(--aia-option-color-selected, currentColor));outline-offset:-2px}.aia-product-media{display:block;position:relative;width:100%;aspect-ratio:1 / 1;border-radius:8px;overflow:hidden;background:var(--aia-product-media-bg, var(--aia-skeleton-bg, rgba(189, 189, 189, .25)))}.aia-product-media[data-aia-image-loaded]{background:transparent}.aia-product-image{display:block;width:auto;max-width:100%;height:100%;margin:0 auto;border-radius:var(--aia-product-image-radius, 8px);object-fit:contain}.aia-product-media:where([data-aia-product-initial]){display:flex;align-items:center;justify-content:center;color:var(--aia-product-title-color, var(--aia-option-color-selected, currentColor));font-size:24px;font-weight:600;line-height:1}.aia-product-media[data-aia-product-placeholder]:after{content:\"\";position:absolute;inset:22%;background:var( --aia-product-placeholder-image, url(\"data:image/svg+xml,%3Csvg viewBox='0 -0.5 32 32' fill-rule='evenodd' xmlns='http://www.w3.org/2000/svg'%3E%3Cg transform='matrix(1,0,0,1,-384,-144)'%3E%3Cg transform='matrix(0.875,0,0,0.875,90.25,19.125)'%3E%3Cpath d='M340.924,147.74C341.224,146.789 342.107,146.143 343.104,146.143C347.705,146.143 360.491,146.143 364.985,146.143C365.965,146.143 366.836,146.768 367.15,147.697C368.119,150.386 370,155.73 370,157C370,159.208 368.208,161 366,161C363.792,161 362,159.208 362,157C362,159.208 360.208,161 358,161C355.792,161 354,159.208 354,157C354,159.208 352.208,161 350,161C347.792,161 346,159.208 346,157C346,159.208 344.208,161 342,161C340.53,161 339.244,160.205 338.549,159.022C338.057,158.185 337.944,157.179 338.236,156.254C338.787,154.507 340.172,150.121 340.924,147.74Z' fill='%2390e0ef'%3E%3C/path%3E%3C/g%3E%3Cg transform='matrix(1,0,0,1.32454,48,-56.1457)'%3E%3Cpath d='M341.026,160.675C341.026,160.675 341.01,168.196 341.003,171.488C341.002,171.889 341.213,172.273 341.588,172.557C341.963,172.841 342.472,173 343.003,173C347.188,173 356.817,173 361,173C361.53,173 362.039,172.841 362.414,172.558C362.789,172.275 363,171.891 363,171.49C363,168.2 363,160.675 363,160.675' fill='%2390e0ef'%3E%3C/path%3E%3C/g%3E%3Cg transform='matrix(1,0,0,1,48,0)'%3E%3Cpath d='M355,168C355,166.895 354.105,166 353,166C352.356,166 351.644,166 351,166C349.895,166 349,166.895 349,168C349,170.069 349,173 349,173L355,173L355,168Z' fill='%2390e0ef'%3E%3C/path%3E%3C/g%3E%3Cg transform='matrix(1.11111,0,0,1.11111,-47.2678,-87.5361)'%3E%3Ccircle cx='411.5' cy='213.5' r='4.5' fill='%2390e0ef'%3E%3C/circle%3E%3C/g%3E%3Cpath d='M405.529,146C406.628,144.773 408.225,144 410,144C413.311,144 416,146.689 416,150C416,151.549 415.412,152.962 414.446,154.027C414.775,155.15 415,156.076 415,156.5C415,158.459 413.746,160.127 411.998,160.744L411.998,171C411.998,171.796 411.682,172.559 411.119,173.121C410.557,173.684 409.794,174 408.998,174L391.002,174C390.205,174 389.441,173.683 388.879,173.119C388.316,172.555 388,171.79 388.002,170.994L388.024,160.752C387.007,160.399 386.155,159.691 385.618,158.776L385.618,158.776C385.044,157.799 384.912,156.626 385.253,155.546L387.605,148.097C387.999,146.849 389.157,146 390.466,146L405.529,146ZM409.998,160.972C408.79,160.838 407.726,160.225 407,159.327C406.175,160.347 404.913,161 403.5,161C402.087,161 400.825,160.347 400,159.327C399.175,160.347 397.913,161 396.5,161C395.087,161 393.825,160.347 393,159.327C392.278,160.219 391.222,160.831 390.023,160.97L390.002,170.998C390.002,171.263 390.107,171.518 390.294,171.706C390.482,171.894 390.736,172 391.002,172L396,172L396,168C396,166.343 397.343,165 399,165L401,165C402.657,165 404,166.343 404,168L404,172L408.998,172C409.263,172 409.517,171.895 409.705,171.707C409.893,171.52 409.998,171.265 409.998,171L409.998,160.972ZM402,172L398,172L398,168C398,167.448 398.448,167 399,167C399,167 401,167 401,167C401.552,167 402,167.448 402,168L402,172ZM404.342,148L390.466,148C390.03,148 389.644,148.283 389.512,148.699L387.16,156.148C386.99,156.688 387.056,157.275 387.342,157.763C387.777,158.503 388.581,159 389.5,159C390.88,159 392,157.88 392,156.5C392,155.003 394,155.003 394,156.5C394,157.88 395.12,159 396.5,159C397.88,159 399,157.88 399,156.5C399,155.004 401,155.004 401,156.5C401,157.88 402.12,159 403.5,159C404.88,159 406,157.88 406,156.5C406,154.986 408,154.986 408,156.5C408,157.88 409.12,159 410.5,159C411.88,159 413,157.88 413,156.5C413,156.259 412.917,155.843 412.779,155.318C411.948,155.753 411.003,156 410,156C406.689,156 404,153.311 404,150C404,149.299 404.12,148.626 404.342,148ZM410,146C412.208,146 414,147.792 414,150C414,152.208 412.208,154 410,154C407.792,154 406,152.208 406,150C406,147.792 407.792,146 410,146ZM407.543,151.207L408.546,152.21C408.733,152.397 408.988,152.503 409.253,152.503C409.519,152.503 409.773,152.397 409.961,152.209L412.458,149.706C412.848,149.316 412.847,148.682 412.456,148.292C412.066,147.902 411.432,147.903 411.042,148.294L409.252,150.088C409.252,150.088 408.957,149.793 408.957,149.793C408.567,149.403 407.933,149.403 407.543,149.793C407.153,150.183 407.153,150.817 407.543,151.207Z' fill='%231990a7'%3E%3C/path%3E%3C/g%3E%3C/svg%3E\") ) center / contain no-repeat}.aia-product-body{display:flex;flex-direction:column;gap:2px;min-width:0}.aia-product-vendor{font-family:inherit;font-size:var(--aia-product-vendor-font-size, 10px);line-height:14px;color:var( --aia-product-vendor-color, var(--aia-option-color, var(--aia-color-text-muted, #c1c4cb)) );opacity:.8;overflow:hidden;white-space:nowrap;text-overflow:ellipsis}.aia-product-title{font-family:inherit;font-size:var(--aia-product-title-font-size, 12px);font-weight:400;line-height:16px;color:var( --aia-product-title-color, var(--aia-option-color-selected, var(--aia-color-text-default, #fff)) );display:-webkit-box;-webkit-line-clamp:2;line-clamp:2;-webkit-box-orient:vertical;overflow:hidden}.aia-product-price{font-family:inherit;font-size:var(--aia-product-price-font-size, 11px);font-weight:500;line-height:15px;color:var( --aia-product-price-color, var(--aia-option-color-selected, var(--aia-color-text-default, #fff)) )}.aia-product-badge{position:absolute;top:var(--aia-product-badge-inset, 12px);left:var(--aia-product-badge-inset, 12px);padding:3px 6px;border-radius:4px;background:var(--aia-product-badge-bg, rgba(255, 255, 255, .94));color:var(--aia-product-badge-color, #1f2328);box-shadow:0 0 0 1px #00000014,0 1px 2px #0000002e;font-family:inherit;font-size:var(--aia-product-badge-font-size, 9px);font-weight:600;line-height:1;letter-spacing:.08em;text-transform:uppercase;white-space:nowrap;pointer-events:none}.aia-product-cart{position:absolute;top:calc(var(--aia-product-card-width, 116px) - 12px - var(--aia-product-cart-size, 28px) - (var(--aia-product-card-width, 116px) - 12px) * (1 - var(--aia-product-photo-fill-y, 1)) / 2);right:calc(12px + (var(--aia-product-card-width, 116px) - 12px) * (1 - var(--aia-product-photo-fill-x, 1)) / 2);display:flex;align-items:center;justify-content:center;width:var(--aia-product-cart-size, 28px);height:var(--aia-product-cart-size, 28px);border-radius:999px;background:var(--aia-product-cart-bg, rgba(255, 255, 255, .94));color:var(--aia-product-cart-color, #1f2328);box-shadow:0 0 0 1px #00000014,0 1px 3px #00000038;cursor:pointer;transition:transform .15s ease,opacity .15s ease}.aia-product-cart:hover{transform:scale(1.08)}.aia-product-cart:focus-visible{outline:2px solid var(--aia-product-focus-ring, var(--aia-option-color-selected, currentColor));outline-offset:2px}.aia-product-cart svg{display:block;width:16px;height:16px;fill:none;stroke:currentColor;stroke-width:2;stroke-linecap:round;stroke-linejoin:round}.aia-product-cart svg path{fill:none;stroke:currentColor}.aia-product-cart svg circle{fill:none;stroke:currentColor}.aia-product-cart-check{display:none}.aia-product-cart[data-aia-cart-state=adding]{cursor:progress}.aia-product-cart[data-aia-cart-state=added] .aia-product-cart-glyph{display:none}.aia-product-cart[data-aia-cart-state=added] .aia-product-cart-check{display:inline}.aia-product-cart-spinner,.aia-product-cart[data-aia-cart-state=adding] .aia-product-cart-glyph{display:none}.aia-product-cart[data-aia-cart-state=adding] .aia-product-cart-spinner{display:inline}.aia-product-cart[data-aia-cart-state=adding] svg{animation:magicx-aia-product-cart-spin .8s linear infinite}@keyframes magicx-aia-product-cart-spin{to{transform:rotate(360deg)}}@media (prefers-reduced-motion: reduce){.aia-product-cart[data-aia-cart-state=adding] svg{animation-duration:2s}}.aia-product[data-aia-product-sold-out] .aia-product-image{filter:grayscale(.55)}.aia-products[data-aia-products-layout=list] .aia-products-row{flex-direction:column;gap:var(--aia-product-list-gap, 2px);max-height:var(--aia-product-list-max-height, 320px);overflow-x:hidden;overflow-y:auto;overscroll-behavior-y:contain}.aia-products[data-aia-products-layout=list] .aia-product{flex-direction:row;align-items:center;gap:10px;width:auto;padding:6px 8px}.aia-products[data-aia-products-layout=list] .aia-product-media{flex:0 0 auto;width:var(--aia-product-list-media-size, 44px);height:var(--aia-product-list-media-size, 44px)}.aia-products[data-aia-products-layout=list] .aia-product-body{flex:1 1 auto}.aia-products[data-aia-products-layout=list] .aia-product-badge{top:calc(50% + var(--aia-product-list-media-size, 44px) / 2);left:8px;width:var(--aia-product-list-media-size, 44px);transform:translateY(-100%);padding:2px 0;border-radius:0 0 8px 8px;background:var(--aia-product-badge-list-bg, rgba(17, 17, 17, .72));color:var(--aia-product-badge-list-color, #fff);box-shadow:none;font-size:var(--aia-product-badge-list-font-size, 7px);letter-spacing:.02em;text-align:center}.aia-products[data-aia-products-layout=list] .aia-product-cart{top:50%;right:8px;transform:translateY(-50%)}.aia-products[data-aia-products-layout=list] .aia-product-cart:hover{transform:translateY(-50%) scale(1.08)}.aia-products[data-aia-products-layout=list] .aia-product[data-aia-product-has-cart]{padding-right:calc(var(--aia-product-cart-size, 28px) + 16px)}\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i1.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None });
|
|
223
236
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.10", ngImport: i0, type: ProductStripComponent, decorators: [{
|
|
224
237
|
type: Component,
|
|
225
|
-
args: [{ selector: "aia-product-strip", standalone: true, imports: [CommonModule], changeDetection: ChangeDetectionStrategy.OnPush, encapsulation: ViewEncapsulation.None, template: "<!-- `group` is the one role a listbox accepts around a set of options, so the\n strip stays inside the listbox without breaking its content model. -->\n<section\n *ngIf=\"products.length > 0\"\n class=\"aia-products\"\n data-aia-products=\"\"\n [attr.data-aia-products-layout]=\"layout\"\n role=\"group\"\n [attr.aria-labelledby]=\"labelId\"\n>\n <!-- data-aia-products-label: the scroll arrow centres itself on this row. -->\n <div class=\"aia-products-label\" [id]=\"labelId\" data-aia-products-label=\"\">{{ strings.products }}</div>\n\n <!-- #row: the component binds wheel-to-sideways scrolling on it. -->\n <div #row class=\"aia-products-row\" data-aia-products-row=\"\">\n <!-- A real <a href> rather than a <div>: it keeps the browser's own link\n affordances \u2014 cmd/ctrl-click for a new tab, middle-click, right-click \u2192\n \"copy link address\". role=\"option\" overrides how assistive tech\n announces it, which is correct inside a listbox; the deliberate trade\n is that AT no longer calls it a link. An attribute binding, so a\n product without a url gets no href at all rather than \"null\". -->\n <a\n *ngFor=\"let product of products; let i = index; trackBy: trackByProduct\"\n [id]=\"cardId(i)\"\n class=\"aia-product\"\n data-aia-product=\"\"\n [attr.data-aia-product-sold-out]=\"product.available === false ? '' : null\"\n [attr.data-aia-product-has-cart]=\"hasCart(product) ? '' : null\"\n [style]=\"photoFillStyle(product)\"\n role=\"option\"\n [attr.aria-selected]=\"false\"\n [attr.href]=\"product.url ?? null\"\n [attr.tabindex]=\"focusable ? 0 : -1\"\n (click)=\"onClick($event, product)\"\n (keydown)=\"onKeyDown($event, product)\"\n (focus)=\"onCardFocus()\"\n (blur)=\"onCardBlur($event)\"\n >\n <span\n class=\"aia-product-media\"\n aria-hidden=\"true\"\n [attr.data-aia-product-placeholder]=\"!imageSource(product) && imageFallback === 'image' ? '' : null\"\n [attr.data-aia-product-initial]=\"!imageSource(product) && imageFallback === 'initial' ? '' : null\"\n [attr.data-aia-image-loaded]=\"imageLoaded(product) ? '' : null\"\n >\n <!-- alt=\"\" on purpose: the title is already the card's accessible\n name, and repeating it would have a screen reader read it twice. -->\n <img\n *ngIf=\"imageSource(product) as src\"\n class=\"aia-product-image\"\n [src]=\"src\"\n (load)=\"onImageLoad(product, src, $event)\"\n (error)=\"onImageError(product)\"\n alt=\"\"\n loading=\"lazy\"\n decoding=\"async\"\n />\n <ng-container *ngIf=\"!imageSource(product) && imageFallback === 'initial'\">{{ initial(product.title) }}</ng-container>\n </span>\n\n <!-- Every field but the title is optional, so absent ones render no\n element at all \u2014 the column gap can't leave a hole for a box that\n isn't there. -->\n <span class=\"aia-product-body\">\n <span *ngIf=\"product.vendor\" class=\"aia-product-vendor\">{{ product.vendor }}</span>\n <span class=\"aia-product-title\">{{ product.title }}</span>\n <span *ngIf=\"product.price\" class=\"aia-product-price\">{{ product.price }}</span>\n <!-- In the text column rather than the aria-hidden media tile, so the\n card's accessible name says it; the stylesheet lifts it over the\n image. -->\n <span *ngIf=\"product.available === false\" class=\"aia-product-badge\">{{ strings.soldOut }}</span>\n </span>\n\n <!-- The add-to-cart button: a child of the card rather than of the\n aria-hidden media tile; the stylesheet lifts it over the tile's\n bottom right corner. A role=\"button\" span, not a <button>:\n interactive content inside an <a> is invalid HTML. Its press never\n reaches the card, so it never selects. Sold-out cards have none. -->\n <span\n *ngIf=\"hasCart(product)\"\n class=\"aia-product-cart\"\n data-aia-product-cart=\"\"\n role=\"button\"\n [attr.aria-label]=\"strings.addToCart + ': ' + product.title\"\n [attr.tabindex]=\"focusable ? 0 : -1\"\n [attr.data-aia-cart-state]=\"cartState(product)\"\n [attr.aria-busy]=\"cartState(product) === 'adding' ? 'true' : null\"\n (click)=\"onCartPress($event, product)\"\n (keydown)=\"onCartKeyDown($event, product)\"\n (focus)=\"onCardFocus()\"\n (blur)=\"onCardBlur($event)\"\n >\n <svg viewBox=\"0 0 24 24\" aria-hidden=\"true\" focusable=\"false\">\n <path class=\"aia-product-cart-glyph\" d=\"M2 3h2.2l2.4 11.2a2 2 0 0 0 2 1.6h8.9a2 2 0 0 0 1.9-1.5L21 8H6\" />\n <path class=\"aia-product-cart-glyph\" d=\"M13.5 6.5v-4M11.5 4.5h4\" />\n <path class=\"aia-product-cart-check\" d=\"M5 12.5l4.5 4.5L19 7.5\" />\n <circle class=\"aia-product-cart-glyph\" cx=\"9\" cy=\"20\" r=\"1.3\" />\n <circle class=\"aia-product-cart-glyph\" cx=\"17.5\" cy=\"20\" r=\"1.3\" />\n </svg>\n </span>\n </a>\n </div>\n</section>\n", styles: [".aia-products{display:flex;flex-direction:column;gap:6px;padding:0 10px;min-width:0}.aia-products-label{font-family:inherit;font-size:var(--aia-products-label-font-size, 11px);font-weight:500;line-height:18px;letter-spacing:.02em;color:var( --aia-products-label-color, var(--aia-option-color, var(--aia-color-text-muted, #c1c4cb)) )}.aia-products-row{display:flex;gap:var(--aia-product-gap, 8px);min-width:0;overflow-x:auto;overflow-y:hidden;overscroll-behavior-x:contain;padding-bottom:2px;margin-inline:-6px;scrollbar-width:none;-ms-overflow-style:none}.aia-products-row::-webkit-scrollbar{display:none}.aia-product{flex:0 0 auto;display:flex;flex-direction:column;gap:6px;width:var(--aia-product-card-width, 116px);padding:6px;border-radius:10px;background:var(--aia-product-bg, transparent);color:var(--aia-option-color, var(--aia-color-text-muted, #c1c4cb));text-decoration:none;cursor:pointer;transition:background-color .15s ease;position:relative}.aia-product:hover{background:var(--aia-product-bg-active, var(--aia-option-bg, transparent))}.aia-product:focus-visible{outline:2px solid var(--aia-product-focus-ring, var(--aia-option-color-selected, currentColor));outline-offset:-2px}.aia-product-media{display:block;position:relative;width:100%;aspect-ratio:1 / 1;border-radius:8px;overflow:hidden;background:var(--aia-product-media-bg, var(--aia-skeleton-bg, rgba(189, 189, 189, .25)))}.aia-product-media[data-aia-image-loaded]{background:transparent}.aia-product-image{display:block;width:auto;max-width:100%;height:100%;margin:0 auto;border-radius:var(--aia-product-image-radius, 8px);object-fit:contain}.aia-product-media:where([data-aia-product-initial]){display:flex;align-items:center;justify-content:center;color:var(--aia-product-title-color, var(--aia-option-color-selected, currentColor));font-size:24px;font-weight:600;line-height:1}.aia-product-media[data-aia-product-placeholder]:after{content:\"\";position:absolute;inset:22%;background:var( --aia-product-placeholder-image, url(\"data:image/svg+xml,%3Csvg viewBox='0 -0.5 32 32' fill-rule='evenodd' xmlns='http://www.w3.org/2000/svg'%3E%3Cg transform='matrix(1,0,0,1,-384,-144)'%3E%3Cg transform='matrix(0.875,0,0,0.875,90.25,19.125)'%3E%3Cpath d='M340.924,147.74C341.224,146.789 342.107,146.143 343.104,146.143C347.705,146.143 360.491,146.143 364.985,146.143C365.965,146.143 366.836,146.768 367.15,147.697C368.119,150.386 370,155.73 370,157C370,159.208 368.208,161 366,161C363.792,161 362,159.208 362,157C362,159.208 360.208,161 358,161C355.792,161 354,159.208 354,157C354,159.208 352.208,161 350,161C347.792,161 346,159.208 346,157C346,159.208 344.208,161 342,161C340.53,161 339.244,160.205 338.549,159.022C338.057,158.185 337.944,157.179 338.236,156.254C338.787,154.507 340.172,150.121 340.924,147.74Z' fill='%2390e0ef'%3E%3C/path%3E%3C/g%3E%3Cg transform='matrix(1,0,0,1.32454,48,-56.1457)'%3E%3Cpath d='M341.026,160.675C341.026,160.675 341.01,168.196 341.003,171.488C341.002,171.889 341.213,172.273 341.588,172.557C341.963,172.841 342.472,173 343.003,173C347.188,173 356.817,173 361,173C361.53,173 362.039,172.841 362.414,172.558C362.789,172.275 363,171.891 363,171.49C363,168.2 363,160.675 363,160.675' fill='%2390e0ef'%3E%3C/path%3E%3C/g%3E%3Cg transform='matrix(1,0,0,1,48,0)'%3E%3Cpath d='M355,168C355,166.895 354.105,166 353,166C352.356,166 351.644,166 351,166C349.895,166 349,166.895 349,168C349,170.069 349,173 349,173L355,173L355,168Z' fill='%2390e0ef'%3E%3C/path%3E%3C/g%3E%3Cg transform='matrix(1.11111,0,0,1.11111,-47.2678,-87.5361)'%3E%3Ccircle cx='411.5' cy='213.5' r='4.5' fill='%2390e0ef'%3E%3C/circle%3E%3C/g%3E%3Cpath d='M405.529,146C406.628,144.773 408.225,144 410,144C413.311,144 416,146.689 416,150C416,151.549 415.412,152.962 414.446,154.027C414.775,155.15 415,156.076 415,156.5C415,158.459 413.746,160.127 411.998,160.744L411.998,171C411.998,171.796 411.682,172.559 411.119,173.121C410.557,173.684 409.794,174 408.998,174L391.002,174C390.205,174 389.441,173.683 388.879,173.119C388.316,172.555 388,171.79 388.002,170.994L388.024,160.752C387.007,160.399 386.155,159.691 385.618,158.776L385.618,158.776C385.044,157.799 384.912,156.626 385.253,155.546L387.605,148.097C387.999,146.849 389.157,146 390.466,146L405.529,146ZM409.998,160.972C408.79,160.838 407.726,160.225 407,159.327C406.175,160.347 404.913,161 403.5,161C402.087,161 400.825,160.347 400,159.327C399.175,160.347 397.913,161 396.5,161C395.087,161 393.825,160.347 393,159.327C392.278,160.219 391.222,160.831 390.023,160.97L390.002,170.998C390.002,171.263 390.107,171.518 390.294,171.706C390.482,171.894 390.736,172 391.002,172L396,172L396,168C396,166.343 397.343,165 399,165L401,165C402.657,165 404,166.343 404,168L404,172L408.998,172C409.263,172 409.517,171.895 409.705,171.707C409.893,171.52 409.998,171.265 409.998,171L409.998,160.972ZM402,172L398,172L398,168C398,167.448 398.448,167 399,167C399,167 401,167 401,167C401.552,167 402,167.448 402,168L402,172ZM404.342,148L390.466,148C390.03,148 389.644,148.283 389.512,148.699L387.16,156.148C386.99,156.688 387.056,157.275 387.342,157.763C387.777,158.503 388.581,159 389.5,159C390.88,159 392,157.88 392,156.5C392,155.003 394,155.003 394,156.5C394,157.88 395.12,159 396.5,159C397.88,159 399,157.88 399,156.5C399,155.004 401,155.004 401,156.5C401,157.88 402.12,159 403.5,159C404.88,159 406,157.88 406,156.5C406,154.986 408,154.986 408,156.5C408,157.88 409.12,159 410.5,159C411.88,159 413,157.88 413,156.5C413,156.259 412.917,155.843 412.779,155.318C411.948,155.753 411.003,156 410,156C406.689,156 404,153.311 404,150C404,149.299 404.12,148.626 404.342,148ZM410,146C412.208,146 414,147.792 414,150C414,152.208 412.208,154 410,154C407.792,154 406,152.208 406,150C406,147.792 407.792,146 410,146ZM407.543,151.207L408.546,152.21C408.733,152.397 408.988,152.503 409.253,152.503C409.519,152.503 409.773,152.397 409.961,152.209L412.458,149.706C412.848,149.316 412.847,148.682 412.456,148.292C412.066,147.902 411.432,147.903 411.042,148.294L409.252,150.088C409.252,150.088 408.957,149.793 408.957,149.793C408.567,149.403 407.933,149.403 407.543,149.793C407.153,150.183 407.153,150.817 407.543,151.207Z' fill='%231990a7'%3E%3C/path%3E%3C/g%3E%3C/svg%3E\") ) center / contain no-repeat}.aia-product-body{display:flex;flex-direction:column;gap:2px;min-width:0}.aia-product-vendor{font-family:inherit;font-size:var(--aia-product-vendor-font-size, 10px);line-height:14px;color:var( --aia-product-vendor-color, var(--aia-option-color, var(--aia-color-text-muted, #c1c4cb)) );opacity:.8;overflow:hidden;white-space:nowrap;text-overflow:ellipsis}.aia-product-title{font-family:inherit;font-size:var(--aia-product-title-font-size, 12px);font-weight:400;line-height:16px;color:var( --aia-product-title-color, var(--aia-option-color-selected, var(--aia-color-text-default, #fff)) );display:-webkit-box;-webkit-line-clamp:2;line-clamp:2;-webkit-box-orient:vertical;overflow:hidden}.aia-product-price{font-family:inherit;font-size:var(--aia-product-price-font-size, 11px);font-weight:500;line-height:15px;color:var( --aia-product-price-color, var(--aia-option-color-selected, var(--aia-color-text-default, #fff)) )}.aia-product-badge{position:absolute;top:var(--aia-product-badge-inset, 12px);left:var(--aia-product-badge-inset, 12px);padding:3px 6px;border-radius:4px;background:var(--aia-product-badge-bg, rgba(255, 255, 255, .94));color:var(--aia-product-badge-color, #1f2328);box-shadow:0 0 0 1px #00000014,0 1px 2px #0000002e;font-family:inherit;font-size:var(--aia-product-badge-font-size, 9px);font-weight:600;line-height:1;letter-spacing:.08em;text-transform:uppercase;white-space:nowrap;pointer-events:none}.aia-product-cart{position:absolute;top:calc(var(--aia-product-card-width, 116px) - 12px - var(--aia-product-cart-size, 28px) - (var(--aia-product-card-width, 116px) - 12px) * (1 - var(--aia-product-photo-fill-y, 1)) / 2);right:calc(12px + (var(--aia-product-card-width, 116px) - 12px) * (1 - var(--aia-product-photo-fill-x, 1)) / 2);display:flex;align-items:center;justify-content:center;width:var(--aia-product-cart-size, 28px);height:var(--aia-product-cart-size, 28px);border-radius:999px;background:var(--aia-product-cart-bg, rgba(255, 255, 255, .94));color:var(--aia-product-cart-color, #1f2328);box-shadow:0 0 0 1px #00000014,0 1px 3px #00000038;cursor:pointer;transition:transform .15s ease,opacity .15s ease}.aia-product-cart:hover{transform:scale(1.08)}.aia-product-cart:focus-visible{outline:2px solid var(--aia-product-focus-ring, var(--aia-option-color-selected, currentColor));outline-offset:2px}.aia-product-cart svg{display:block;width:16px;height:16px;fill:none;stroke:currentColor;stroke-width:2;stroke-linecap:round;stroke-linejoin:round}.aia-product-cart svg path{fill:none;stroke:currentColor}.aia-product-cart svg circle{fill:none;stroke:currentColor}.aia-product-cart-check{display:none}.aia-product-cart[data-aia-cart-state=adding]{opacity:.6;cursor:progress}.aia-product-cart[data-aia-cart-state=added] .aia-product-cart-glyph{display:none}.aia-product-cart[data-aia-cart-state=added] .aia-product-cart-check{display:inline}.aia-product[data-aia-product-sold-out] .aia-product-image{filter:grayscale(.55)}.aia-products[data-aia-products-layout=list] .aia-products-row{flex-direction:column;gap:var(--aia-product-list-gap, 2px);max-height:var(--aia-product-list-max-height, 320px);overflow-x:hidden;overflow-y:auto;overscroll-behavior-y:contain}.aia-products[data-aia-products-layout=list] .aia-product{flex-direction:row;align-items:center;gap:10px;width:auto;padding:6px 8px}.aia-products[data-aia-products-layout=list] .aia-product-media{flex:0 0 auto;width:var(--aia-product-list-media-size, 44px);height:var(--aia-product-list-media-size, 44px)}.aia-products[data-aia-products-layout=list] .aia-product-body{flex:1 1 auto}.aia-products[data-aia-products-layout=list] .aia-product-badge{top:calc(50% + var(--aia-product-list-media-size, 44px) / 2);left:8px;width:var(--aia-product-list-media-size, 44px);transform:translateY(-100%);padding:2px 0;border-radius:0 0 8px 8px;background:var(--aia-product-badge-list-bg, rgba(17, 17, 17, .72));color:var(--aia-product-badge-list-color, #fff);box-shadow:none;font-size:var(--aia-product-badge-list-font-size, 7px);letter-spacing:.02em;text-align:center}.aia-products[data-aia-products-layout=list] .aia-product-cart{top:50%;right:8px;transform:translateY(-50%)}.aia-products[data-aia-products-layout=list] .aia-product-cart:hover{transform:translateY(-50%) scale(1.08)}.aia-products[data-aia-products-layout=list] .aia-product[data-aia-product-has-cart]{padding-right:calc(var(--aia-product-cart-size, 28px) + 16px)}\n"] }]
|
|
238
|
+
args: [{ selector: "aia-product-strip", standalone: true, imports: [CommonModule], changeDetection: ChangeDetectionStrategy.OnPush, encapsulation: ViewEncapsulation.None, template: "<!-- `group` is the one role a listbox accepts around a set of options, so the\n strip stays inside the listbox without breaking its content model. -->\n<section\n *ngIf=\"products.length > 0\"\n class=\"aia-products\"\n data-aia-products=\"\"\n [attr.data-aia-products-layout]=\"layout\"\n role=\"group\"\n [attr.aria-labelledby]=\"labelId\"\n>\n <!-- data-aia-products-label: the scroll arrow centres itself on this row. -->\n <div class=\"aia-products-label\" [id]=\"labelId\" data-aia-products-label=\"\">{{ strings.products }}</div>\n\n <!-- #row: the component binds wheel-to-sideways scrolling on it. -->\n <div #row class=\"aia-products-row\" data-aia-products-row=\"\">\n <!-- A real <a href> rather than a <div>: it keeps the browser's own link\n affordances \u2014 cmd/ctrl-click for a new tab, middle-click, right-click \u2192\n \"copy link address\". role=\"option\" overrides how assistive tech\n announces it, which is correct inside a listbox; the deliberate trade\n is that AT no longer calls it a link. An attribute binding, so a\n product without a url gets no href at all rather than \"null\". -->\n <a\n *ngFor=\"let product of products; let i = index; trackBy: trackByProduct\"\n [id]=\"cardId(i)\"\n class=\"aia-product\"\n data-aia-product=\"\"\n [attr.data-aia-product-sold-out]=\"product.available === false ? '' : null\"\n [attr.data-aia-product-has-cart]=\"hasCart(product) ? '' : null\"\n [style]=\"photoFillStyle(product)\"\n role=\"option\"\n [attr.aria-selected]=\"false\"\n [attr.href]=\"product.url ?? null\"\n [attr.tabindex]=\"focusable ? 0 : -1\"\n (click)=\"onClick($event, product)\"\n (keydown)=\"onKeyDown($event, product)\"\n (focus)=\"onCardFocus()\"\n (blur)=\"onCardBlur($event)\"\n >\n <span\n class=\"aia-product-media\"\n aria-hidden=\"true\"\n [attr.data-aia-product-placeholder]=\"!imageSource(product) && imageFallback === 'image' ? '' : null\"\n [attr.data-aia-product-initial]=\"!imageSource(product) && imageFallback === 'initial' ? '' : null\"\n [attr.data-aia-image-loaded]=\"imageLoaded(product) ? '' : null\"\n >\n <!-- alt=\"\" on purpose: the title is already the card's accessible\n name, and repeating it would have a screen reader read it twice. -->\n <img\n *ngIf=\"imageSource(product) as src\"\n class=\"aia-product-image\"\n [src]=\"src\"\n (load)=\"onImageLoad(product, src, $event)\"\n (error)=\"onImageError(product)\"\n alt=\"\"\n loading=\"lazy\"\n decoding=\"async\"\n />\n <ng-container *ngIf=\"!imageSource(product) && imageFallback === 'initial'\">{{ initial(product.title) }}</ng-container>\n </span>\n\n <!-- Every field but the title is optional, so absent ones render no\n element at all \u2014 the column gap can't leave a hole for a box that\n isn't there. -->\n <span class=\"aia-product-body\">\n <span *ngIf=\"product.vendor\" class=\"aia-product-vendor\">{{ product.vendor }}</span>\n <span class=\"aia-product-title\">{{ product.title }}</span>\n <span *ngIf=\"product.price\" class=\"aia-product-price\">{{ product.price }}</span>\n <!-- In the text column rather than the aria-hidden media tile, so the\n card's accessible name says it; the stylesheet lifts it over the\n image. -->\n <span *ngIf=\"product.available === false\" class=\"aia-product-badge\">{{ strings.soldOut }}</span>\n </span>\n\n <!-- The add-to-cart button: a child of the card rather than of the\n aria-hidden media tile; the stylesheet lifts it over the tile's\n bottom right corner. A role=\"button\" span, not a <button>:\n interactive content inside an <a> is invalid HTML. Its press never\n reaches the card, so it never selects. Sold-out cards have none. -->\n <span\n *ngIf=\"hasCart(product)\"\n class=\"aia-product-cart\"\n data-aia-product-cart=\"\"\n role=\"button\"\n [attr.aria-label]=\"strings.addToCart + ': ' + product.title\"\n [attr.tabindex]=\"focusable ? 0 : -1\"\n [attr.data-aia-cart-state]=\"cartState(product)\"\n [attr.aria-busy]=\"cartState(product) === 'adding' ? 'true' : null\"\n (click)=\"onCartPress($event, product)\"\n (keydown)=\"onCartKeyDown($event, product)\"\n (focus)=\"onCardFocus()\"\n (blur)=\"onCardBlur($event)\"\n >\n <svg viewBox=\"0 0 24 24\" aria-hidden=\"true\" focusable=\"false\">\n <path class=\"aia-product-cart-glyph\" d=\"M2 3h2.2l2.4 11.2a2 2 0 0 0 2 1.6h8.9a2 2 0 0 0 1.9-1.5L21 8H6\" />\n <path class=\"aia-product-cart-glyph\" d=\"M13.5 6.5v-4M11.5 4.5h4\" />\n <path class=\"aia-product-cart-check\" d=\"M5 12.5l4.5 4.5L19 7.5\" />\n <path class=\"aia-product-cart-spinner\" d=\"M12 4a8 8 0 1 0 8 8\" />\n <circle class=\"aia-product-cart-glyph\" cx=\"9\" cy=\"20\" r=\"1.3\" />\n <circle class=\"aia-product-cart-glyph\" cx=\"17.5\" cy=\"20\" r=\"1.3\" />\n </svg>\n </span>\n </a>\n </div>\n</section>\n", styles: [".aia-products{display:flex;flex-direction:column;gap:6px;padding:0 10px;min-width:0}.aia-products-label{font-family:inherit;font-size:var(--aia-products-label-font-size, 11px);font-weight:500;line-height:18px;letter-spacing:.02em;color:var( --aia-products-label-color, var(--aia-option-color, var(--aia-color-text-muted, #c1c4cb)) )}.aia-products-row{display:flex;gap:var(--aia-product-gap, 8px);min-width:0;overflow-x:auto;overflow-y:hidden;overscroll-behavior-x:contain;padding-bottom:2px;margin-inline:-6px;scrollbar-width:none;-ms-overflow-style:none}.aia-products-row::-webkit-scrollbar{display:none}.aia-product{flex:0 0 auto;display:flex;flex-direction:column;gap:6px;width:var(--aia-product-card-width, 116px);padding:6px;border-radius:10px;background:var(--aia-product-bg, transparent);color:var(--aia-option-color, var(--aia-color-text-muted, #c1c4cb));text-decoration:none;cursor:pointer;transition:background-color .15s ease;position:relative}.aia-product:hover{background:var(--aia-product-bg-active, var(--aia-option-bg, transparent))}.aia-product:focus-visible{outline:2px solid var(--aia-product-focus-ring, var(--aia-option-color-selected, currentColor));outline-offset:-2px}.aia-product-media{display:block;position:relative;width:100%;aspect-ratio:1 / 1;border-radius:8px;overflow:hidden;background:var(--aia-product-media-bg, var(--aia-skeleton-bg, rgba(189, 189, 189, .25)))}.aia-product-media[data-aia-image-loaded]{background:transparent}.aia-product-image{display:block;width:auto;max-width:100%;height:100%;margin:0 auto;border-radius:var(--aia-product-image-radius, 8px);object-fit:contain}.aia-product-media:where([data-aia-product-initial]){display:flex;align-items:center;justify-content:center;color:var(--aia-product-title-color, var(--aia-option-color-selected, currentColor));font-size:24px;font-weight:600;line-height:1}.aia-product-media[data-aia-product-placeholder]:after{content:\"\";position:absolute;inset:22%;background:var( --aia-product-placeholder-image, url(\"data:image/svg+xml,%3Csvg viewBox='0 -0.5 32 32' fill-rule='evenodd' xmlns='http://www.w3.org/2000/svg'%3E%3Cg transform='matrix(1,0,0,1,-384,-144)'%3E%3Cg transform='matrix(0.875,0,0,0.875,90.25,19.125)'%3E%3Cpath d='M340.924,147.74C341.224,146.789 342.107,146.143 343.104,146.143C347.705,146.143 360.491,146.143 364.985,146.143C365.965,146.143 366.836,146.768 367.15,147.697C368.119,150.386 370,155.73 370,157C370,159.208 368.208,161 366,161C363.792,161 362,159.208 362,157C362,159.208 360.208,161 358,161C355.792,161 354,159.208 354,157C354,159.208 352.208,161 350,161C347.792,161 346,159.208 346,157C346,159.208 344.208,161 342,161C340.53,161 339.244,160.205 338.549,159.022C338.057,158.185 337.944,157.179 338.236,156.254C338.787,154.507 340.172,150.121 340.924,147.74Z' fill='%2390e0ef'%3E%3C/path%3E%3C/g%3E%3Cg transform='matrix(1,0,0,1.32454,48,-56.1457)'%3E%3Cpath d='M341.026,160.675C341.026,160.675 341.01,168.196 341.003,171.488C341.002,171.889 341.213,172.273 341.588,172.557C341.963,172.841 342.472,173 343.003,173C347.188,173 356.817,173 361,173C361.53,173 362.039,172.841 362.414,172.558C362.789,172.275 363,171.891 363,171.49C363,168.2 363,160.675 363,160.675' fill='%2390e0ef'%3E%3C/path%3E%3C/g%3E%3Cg transform='matrix(1,0,0,1,48,0)'%3E%3Cpath d='M355,168C355,166.895 354.105,166 353,166C352.356,166 351.644,166 351,166C349.895,166 349,166.895 349,168C349,170.069 349,173 349,173L355,173L355,168Z' fill='%2390e0ef'%3E%3C/path%3E%3C/g%3E%3Cg transform='matrix(1.11111,0,0,1.11111,-47.2678,-87.5361)'%3E%3Ccircle cx='411.5' cy='213.5' r='4.5' fill='%2390e0ef'%3E%3C/circle%3E%3C/g%3E%3Cpath d='M405.529,146C406.628,144.773 408.225,144 410,144C413.311,144 416,146.689 416,150C416,151.549 415.412,152.962 414.446,154.027C414.775,155.15 415,156.076 415,156.5C415,158.459 413.746,160.127 411.998,160.744L411.998,171C411.998,171.796 411.682,172.559 411.119,173.121C410.557,173.684 409.794,174 408.998,174L391.002,174C390.205,174 389.441,173.683 388.879,173.119C388.316,172.555 388,171.79 388.002,170.994L388.024,160.752C387.007,160.399 386.155,159.691 385.618,158.776L385.618,158.776C385.044,157.799 384.912,156.626 385.253,155.546L387.605,148.097C387.999,146.849 389.157,146 390.466,146L405.529,146ZM409.998,160.972C408.79,160.838 407.726,160.225 407,159.327C406.175,160.347 404.913,161 403.5,161C402.087,161 400.825,160.347 400,159.327C399.175,160.347 397.913,161 396.5,161C395.087,161 393.825,160.347 393,159.327C392.278,160.219 391.222,160.831 390.023,160.97L390.002,170.998C390.002,171.263 390.107,171.518 390.294,171.706C390.482,171.894 390.736,172 391.002,172L396,172L396,168C396,166.343 397.343,165 399,165L401,165C402.657,165 404,166.343 404,168L404,172L408.998,172C409.263,172 409.517,171.895 409.705,171.707C409.893,171.52 409.998,171.265 409.998,171L409.998,160.972ZM402,172L398,172L398,168C398,167.448 398.448,167 399,167C399,167 401,167 401,167C401.552,167 402,167.448 402,168L402,172ZM404.342,148L390.466,148C390.03,148 389.644,148.283 389.512,148.699L387.16,156.148C386.99,156.688 387.056,157.275 387.342,157.763C387.777,158.503 388.581,159 389.5,159C390.88,159 392,157.88 392,156.5C392,155.003 394,155.003 394,156.5C394,157.88 395.12,159 396.5,159C397.88,159 399,157.88 399,156.5C399,155.004 401,155.004 401,156.5C401,157.88 402.12,159 403.5,159C404.88,159 406,157.88 406,156.5C406,154.986 408,154.986 408,156.5C408,157.88 409.12,159 410.5,159C411.88,159 413,157.88 413,156.5C413,156.259 412.917,155.843 412.779,155.318C411.948,155.753 411.003,156 410,156C406.689,156 404,153.311 404,150C404,149.299 404.12,148.626 404.342,148ZM410,146C412.208,146 414,147.792 414,150C414,152.208 412.208,154 410,154C407.792,154 406,152.208 406,150C406,147.792 407.792,146 410,146ZM407.543,151.207L408.546,152.21C408.733,152.397 408.988,152.503 409.253,152.503C409.519,152.503 409.773,152.397 409.961,152.209L412.458,149.706C412.848,149.316 412.847,148.682 412.456,148.292C412.066,147.902 411.432,147.903 411.042,148.294L409.252,150.088C409.252,150.088 408.957,149.793 408.957,149.793C408.567,149.403 407.933,149.403 407.543,149.793C407.153,150.183 407.153,150.817 407.543,151.207Z' fill='%231990a7'%3E%3C/path%3E%3C/g%3E%3C/svg%3E\") ) center / contain no-repeat}.aia-product-body{display:flex;flex-direction:column;gap:2px;min-width:0}.aia-product-vendor{font-family:inherit;font-size:var(--aia-product-vendor-font-size, 10px);line-height:14px;color:var( --aia-product-vendor-color, var(--aia-option-color, var(--aia-color-text-muted, #c1c4cb)) );opacity:.8;overflow:hidden;white-space:nowrap;text-overflow:ellipsis}.aia-product-title{font-family:inherit;font-size:var(--aia-product-title-font-size, 12px);font-weight:400;line-height:16px;color:var( --aia-product-title-color, var(--aia-option-color-selected, var(--aia-color-text-default, #fff)) );display:-webkit-box;-webkit-line-clamp:2;line-clamp:2;-webkit-box-orient:vertical;overflow:hidden}.aia-product-price{font-family:inherit;font-size:var(--aia-product-price-font-size, 11px);font-weight:500;line-height:15px;color:var( --aia-product-price-color, var(--aia-option-color-selected, var(--aia-color-text-default, #fff)) )}.aia-product-badge{position:absolute;top:var(--aia-product-badge-inset, 12px);left:var(--aia-product-badge-inset, 12px);padding:3px 6px;border-radius:4px;background:var(--aia-product-badge-bg, rgba(255, 255, 255, .94));color:var(--aia-product-badge-color, #1f2328);box-shadow:0 0 0 1px #00000014,0 1px 2px #0000002e;font-family:inherit;font-size:var(--aia-product-badge-font-size, 9px);font-weight:600;line-height:1;letter-spacing:.08em;text-transform:uppercase;white-space:nowrap;pointer-events:none}.aia-product-cart{position:absolute;top:calc(var(--aia-product-card-width, 116px) - 12px - var(--aia-product-cart-size, 28px) - (var(--aia-product-card-width, 116px) - 12px) * (1 - var(--aia-product-photo-fill-y, 1)) / 2);right:calc(12px + (var(--aia-product-card-width, 116px) - 12px) * (1 - var(--aia-product-photo-fill-x, 1)) / 2);display:flex;align-items:center;justify-content:center;width:var(--aia-product-cart-size, 28px);height:var(--aia-product-cart-size, 28px);border-radius:999px;background:var(--aia-product-cart-bg, rgba(255, 255, 255, .94));color:var(--aia-product-cart-color, #1f2328);box-shadow:0 0 0 1px #00000014,0 1px 3px #00000038;cursor:pointer;transition:transform .15s ease,opacity .15s ease}.aia-product-cart:hover{transform:scale(1.08)}.aia-product-cart:focus-visible{outline:2px solid var(--aia-product-focus-ring, var(--aia-option-color-selected, currentColor));outline-offset:2px}.aia-product-cart svg{display:block;width:16px;height:16px;fill:none;stroke:currentColor;stroke-width:2;stroke-linecap:round;stroke-linejoin:round}.aia-product-cart svg path{fill:none;stroke:currentColor}.aia-product-cart svg circle{fill:none;stroke:currentColor}.aia-product-cart-check{display:none}.aia-product-cart[data-aia-cart-state=adding]{cursor:progress}.aia-product-cart[data-aia-cart-state=added] .aia-product-cart-glyph{display:none}.aia-product-cart[data-aia-cart-state=added] .aia-product-cart-check{display:inline}.aia-product-cart-spinner,.aia-product-cart[data-aia-cart-state=adding] .aia-product-cart-glyph{display:none}.aia-product-cart[data-aia-cart-state=adding] .aia-product-cart-spinner{display:inline}.aia-product-cart[data-aia-cart-state=adding] svg{animation:magicx-aia-product-cart-spin .8s linear infinite}@keyframes magicx-aia-product-cart-spin{to{transform:rotate(360deg)}}@media (prefers-reduced-motion: reduce){.aia-product-cart[data-aia-cart-state=adding] svg{animation-duration:2s}}.aia-product[data-aia-product-sold-out] .aia-product-image{filter:grayscale(.55)}.aia-products[data-aia-products-layout=list] .aia-products-row{flex-direction:column;gap:var(--aia-product-list-gap, 2px);max-height:var(--aia-product-list-max-height, 320px);overflow-x:hidden;overflow-y:auto;overscroll-behavior-y:contain}.aia-products[data-aia-products-layout=list] .aia-product{flex-direction:row;align-items:center;gap:10px;width:auto;padding:6px 8px}.aia-products[data-aia-products-layout=list] .aia-product-media{flex:0 0 auto;width:var(--aia-product-list-media-size, 44px);height:var(--aia-product-list-media-size, 44px)}.aia-products[data-aia-products-layout=list] .aia-product-body{flex:1 1 auto}.aia-products[data-aia-products-layout=list] .aia-product-badge{top:calc(50% + var(--aia-product-list-media-size, 44px) / 2);left:8px;width:var(--aia-product-list-media-size, 44px);transform:translateY(-100%);padding:2px 0;border-radius:0 0 8px 8px;background:var(--aia-product-badge-list-bg, rgba(17, 17, 17, .72));color:var(--aia-product-badge-list-color, #fff);box-shadow:none;font-size:var(--aia-product-badge-list-font-size, 7px);letter-spacing:.02em;text-align:center}.aia-products[data-aia-products-layout=list] .aia-product-cart{top:50%;right:8px;transform:translateY(-50%)}.aia-products[data-aia-products-layout=list] .aia-product-cart:hover{transform:translateY(-50%) scale(1.08)}.aia-products[data-aia-products-layout=list] .aia-product[data-aia-product-has-cart]{padding-right:calc(var(--aia-product-cart-size, 28px) + 16px)}\n"] }]
|
|
226
239
|
}], propDecorators: { products: [{
|
|
227
240
|
type: Input
|
|
228
241
|
}], listboxId: [{
|
|
@@ -245,4 +258,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.10", ngImpo
|
|
|
245
258
|
type: ViewChild,
|
|
246
259
|
args: ["row"]
|
|
247
260
|
}] } });
|
|
248
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicHJvZHVjdC1zdHJpcC5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9zcmMvbGliL2ludGVybmFsL3Byb2R1Y3Qtc3RyaXAvcHJvZHVjdC1zdHJpcC5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi9zcmMvbGliL2ludGVybmFsL3Byb2R1Y3Qtc3RyaXAvcHJvZHVjdC1zdHJpcC5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFDL0MsT0FBTyxFQUNMLHVCQUF1QixFQUN2QixpQkFBaUIsRUFDakIsU0FBUyxFQUVULFlBQVksRUFDWixLQUFLLEVBQ0wsTUFBTSxFQUdOLE1BQU0sRUFDTixTQUFTLEVBQ1QsaUJBQWlCLEdBQ2xCLE1BQU0sZUFBZSxDQUFDO0FBQ3ZCLE9BQU8sRUFDTCxxQkFBcUIsRUFJckIsbUJBQW1CLEVBQ25CLGNBQWMsRUFDZCxnQkFBZ0IsRUFFaEIsWUFBWSxHQUNiLE1BQU0scUNBQXFDLENBQUM7OztBQUU3QyxrR0FBa0c7QUFDbEcsTUFBTSxhQUFhLEdBQUcsSUFBSSxDQUFDO0FBSTNCOzs7Ozs7Ozs7Ozs7Ozs7Ozs7O0dBbUJHO0FBVUgsTUFBTSxPQUFPLHFCQUFxQjtJQVRsQztRQVVXLGFBQVEsR0FBYyxFQUFFLENBQUM7UUFDbEMsMkRBQTJEO1FBQ2xELGNBQVMsR0FBRyxFQUFFLENBQUM7UUFDeEI7Ozs7V0FJRztRQUNNLGNBQVMsR0FBRyxJQUFJLENBQUM7UUFDMUIsOEZBQThGO1FBQ3JGLFdBQU0sR0FBbUIsS0FBSyxDQUFDO1FBQy9CLGtCQUFhLEdBQXlCLE9BQU8sQ0FBQztRQUN2RCwwREFBMEQ7UUFDakQsWUFBTyxHQUFjLFlBQVksRUFBRSxDQUFDO1FBQzdDOzs7V0FHRztRQUNNLGNBQVMsR0FBK0QsSUFBSSxDQUFDO1FBQzdFLFlBQU8sR0FBRyxjQUFjLENBQUM7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aUI7UUFDMUIsTUFBTSxJQUFJLEdBQUcsS0FBSyxDQUFDLGFBQW1DLENBQUM7UUFDdkQsSUFBSSxJQUFJLEVBQUUsT0FBTyxDQUFDLHFCQUFxQixDQUFDO1lBQUUsT0FBTztRQUNqRCxJQUFJLENBQUMsV0FBVyxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQztJQUMvQixDQUFDOzttSEEvTVUscUJBQXFCO3VHQUFyQixxQkFBcUIseWFDN0RsQyx5b0tBdUdBLHc1VURoRFksWUFBWTs0RkFNWCxxQkFBcUI7a0JBVGpDLFNBQVM7K0JBQ0UsbUJBQW1CLGNBQ2pCLElBQUksV0FDUCxDQUFDLFlBQVksQ0FBQyxtQkFDTix1QkFBdUIsQ0FBQyxNQUFNLGlCQUNoQyxpQkFBaUIsQ0FBQyxJQUFJOzhCQUs1QixRQUFRO3NCQUFoQixLQUFLO2dCQUVHLFNBQVM7c0JBQWpCLEtBQUs7Z0JBTUcsU0FBUztzQkFBakIsS0FBSztnQkFFRyxNQUFNO3NCQUFkLEtBQUs7Z0JBQ0csYUFBYTtzQkFBckIsS0FBSztnQkFFRyxPQUFPO3NCQUFmLEtBQUs7Z0JBS0csU0FBUztzQkFBakIsS0FBSztnQkFnRWEsTUFBTTtzQkFBeEIsTUFBTTtnQkFPWSxXQUFXO3NCQUE3QixNQUFNO2dCQWdCSCxHQUFHO3NCQUROLFNBQVM7dUJBQUMsS0FBSyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENvbW1vbk1vZHVsZSB9IGZyb20gXCJAYW5ndWxhci9jb21tb25cIjtcbmltcG9ydCB7XG4gIENoYW5nZURldGVjdGlvblN0cmF0ZWd5LFxuICBDaGFuZ2VEZXRlY3RvclJlZixcbiAgQ29tcG9uZW50LFxuICB0eXBlIEVsZW1lbnRSZWYsXG4gIEV2ZW50RW1pdHRlcixcbiAgSW5wdXQsXG4gIGluamVjdCxcbiAgdHlwZSBPbkNoYW5nZXMsXG4gIHR5cGUgT25EZXN0cm95LFxuICBPdXRwdXQsXG4gIFZpZXdDaGlsZCxcbiAgVmlld0VuY2Fwc3VsYXRpb24sXG59IGZyb20gXCJAYW5ndWxhci9jb3JlXCI7XG5pbXBvcnQge1xuICBhdHRhY2hQcm9kdWN0Um93V2hlZWwsXG4gIHR5cGUgUHJvZHVjdCxcbiAgdHlwZSBQcm9kdWN0SW1hZ2VGYWxsYmFjayxcbiAgdHlwZSBQcm9kdWN0c0xheW91dCxcbiAgcHJvZHVjdEltYWdlU291cmNlcyxcbiAgcHJvZHVjdEluaXRpYWwsXG4gIHByb2R1Y3RQaG90b0ZpbGwsXG4gIHR5cGUgVUlTdHJpbmdzLFxuICB1aVN0cmluZ3NGb3IsXG59IGZyb20gXCJAbWFnaWN4LWVuZy9haS1hdXRvY29tcGxldGUtdmFuaWxsYVwiO1xuXG4vKiogSG93IGxvbmcgdGhlIGNhcnQgYnV0dG9uIHNob3dzIGl0cyBjaGVjayBhZnRlciBhbiBhZGQgcmVzb2x2ZXMg4oCUIHZhbmlsbGEncyBgQ0FSVF9BRERFRF9NU2AuICovXG5jb25zdCBDQVJUX0FEREVEX01TID0gMTUwMDtcblxudHlwZSBDYXJ0U3RhdGUgPSBcImFkZGluZ1wiIHwgXCJhZGRlZFwiO1xuXG4vKipcbiAqIEludGVybmFsIHByb2R1Y3Qgc3RyaXAgcmVuZGVyZWQgYmVsb3cgdGhlIGRyb3Bkb3duJ3Mgb3B0aW9ucyBncmlkLiBNaXJyb3JzXG4gKiBgcGFja2FnZXMvcmVhY3Qvc3JjL2NvbXBvbmVudHMvUHJvZHVjdFN0cmlwLnRzeGAgYW5kIHRoZSB2YW5pbGxhIGNvcmUnc1xuICogYHJlbmRlclByb2R1Y3RTdHJpcGAsIHNvIGFsbCB0aHJlZSBwYWNrYWdlcyBlbWl0IHRoZSBzYW1lIHN0cnVjdHVyZSBhbmRcbiAqIHRoZW1lIGlkZW50aWNhbGx5LlxuICpcbiAqIFR3byBsYXlvdXQgbm90ZXMgY2FycmllZCBvdmVyIGZyb20gdGhlIHZhbmlsbGEgaW1wbGVtZW50YXRpb246XG4gKlxuICogLSBUaGUgZHJvcGRvd24gcGFpbnRzIGEgYmFja2dyb3VuZCBidXQgbmV2ZXIgc2V0cyBgY29sb3JgLCBzbyBhbnl0aGluZyBoZXJlXG4gKiAgIHJlbHlpbmcgb24gYGNvbG9yOiBpbmhlcml0YCB3b3VsZCBwaWNrIHVwIHRoZSAqaG9zdCBwYWdlJ3MqIHRleHQgY29sb3VyIOKAlFxuICogICBibGFjayB0ZXh0IG9uIGEgZGFyayBwYW5lbC4gRXZlcnkgdGV4dCBub2RlIHJlc29sdmVzIGl0cyBjb2xvdXIgdGhyb3VnaFxuICogICB0aGUgc2FtZSBgLS1haWEtb3B0aW9uLSpgIGNoYWluIHRoZSBvcHRpb25zIHVzZS5cbiAqIC0gVGhlIG9wdGlvbnMgZ3JpZCBjYXJyaWVzIGEgbmVnYXRpdmUgYm90dG9tIG1hcmdpbiBzbyB0aGUgZm9vdGVyIHJpZGVzIHVwXG4gKiAgIG92ZXIgaXRzIHJlc2VydmVkIGJhbmQsIGFuZCB3aGF0ZXZlciBmb2xsb3dzIHRoZSBncmlkIGluaGVyaXRzIHRoYXQgcHVsbC5cbiAqICAgVGhlIGRyb3Bkb3duIHJvb3QgaXMgbWFya2VkIGBkYXRhLWFpYS1oYXMtcHJvZHVjdHNgIGFuZCB0aGUgYXBwZWFyYW5jZVxuICogICBsYXllciB6ZXJvZXMgdGhlIGJhbmQgYXQgaXRzIHNvdXJjZSByYXRoZXIgdGhhbiB0aGUgc3RyaXAgY2FuY2VsbGluZyBpdFxuICogICBmcm9tIGhlcmUuXG4gKlxuICogQGludGVybmFsXG4gKi9cbkBDb21wb25lbnQoe1xuICBzZWxlY3RvcjogXCJhaWEtcHJvZHVjdC1zdHJpcFwiLFxuICBzdGFuZGFsb25lOiB0cnVlLFxuICBpbXBvcnRzOiBbQ29tbW9uTW9kdWxlXSxcbiAgY2hhbmdlRGV0ZWN0aW9uOiBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneS5PblB1c2gsXG4gIGVuY2Fwc3VsYXRpb246IFZpZXdFbmNhcHN1bGF0aW9uLk5vbmUsXG4gIHRlbXBsYXRlVXJsOiBcIi4vcHJvZHVjdC1zdHJpcC5jb21wb25lbnQuaHRtbFwiLFxuICBzdHlsZVVybHM6IFtcIi4vcHJvZHVjdC1zdHJpcC5jb21wb25lbnQuY3NzXCJdLFxufSlcbmV4cG9ydCBjbGFzcyBQcm9kdWN0U3RyaXBDb21wb25lbnQgaW1wbGVtZW50cyBPbkRlc3Ryb3ksIE9uQ2hhbmdlcyB7XG4gIEBJbnB1dCgpIHByb2R1Y3RzOiBQcm9kdWN0W10gPSBbXTtcbiAgLyoqIFNjb3BlcyB0aGUgc2VjdGlvbiBsYWJlbCdzIGlkIHRvIHRoZSBvd25pbmcgbGlzdGJveC4gKi9cbiAgQElucHV0KCkgbGlzdGJveElkID0gXCJcIjtcbiAgLyoqXG4gICAqIEZhbHNlIHdoaWxlIHRoZSBwYW5lbCBpcyBmYWRpbmcgb3V0LiBUaGUgY2xvc2VkIGRyb3Bkb3duIGtlZXBzIHJlbmRlcmluZ1xuICAgKiBpdHMgbGFzdCBjb250ZW50IGZvciB0aGUgZmFkZSwgYW5kIGZvY3VzYWJsZSBjYXJkcyBpbnNpZGUgaXQgd291bGQgc3RpbGxcbiAgICogYW5zd2VyIFRhYi5cbiAgICovXG4gIEBJbnB1dCgpIGZvY3VzYWJsZSA9IHRydWU7XG4gIC8qKiBIb3cgdGhlIGNhcmRzIGxheSBvdXQg4oCUIGEgc2Nyb2xsaW5nIHJvdywgb3Igc3RhY2tlZCBhcyBmdWxsLXdpZHRoIHJvd3MuIERlZmF1bHQ6IFwicm93XCIuICovXG4gIEBJbnB1dCgpIGxheW91dDogUHJvZHVjdHNMYXlvdXQgPSBcInJvd1wiO1xuICBASW5wdXQoKSBpbWFnZUZhbGxiYWNrOiBQcm9kdWN0SW1hZ2VGYWxsYmFjayA9IFwiaW1hZ2VcIjtcbiAgLyoqIFRoZSB3b3JkcyBvZiB0aGUgd2lkZ2V0IGxhbmd1YWdlLiBEZWZhdWx0OiBFbmdsaXNoLiAqL1xuICBASW5wdXQoKSBzdHJpbmdzOiBVSVN0cmluZ3MgPSB1aVN0cmluZ3NGb3IoKTtcbiAgLyoqXG4gICAqIFNldCB3aGVuIHRoZSBpbnRlZ3JhdGlvbiBhZGRzIHRvIGNhcnQ6IGVhY2ggY2FyZCB0aGF0IGlzIG5vdCBzb2xkIG91dFxuICAgKiBkcmF3cyBhIGNhcnQgYnV0dG9uLCB3aG9zZSBwcmVzcyBjYWxscyB0aGlzIGluc3RlYWQgb2YgZW1pdHRpbmcgYHNlbGVjdGAuXG4gICAqL1xuICBASW5wdXQoKSBhZGRUb0NhcnQ6ICgocHJvZHVjdDogUHJvZHVjdCkgPT4gdm9pZCB8IFByb21pc2VMaWtlPHVua25vd24+KSB8IG51bGwgPSBudWxsO1xuICByZWFkb25seSBpbml0aWFsID0gcHJvZHVjdEluaXRpYWw7XG4gIC8qKlxuICAgKiBQZXIgcHJvZHVjdCBpZCwgdGhlIGBzcmNgcyB0aGF0IGZhaWxlZCB0byBsb2FkOiBhIGNhcmQgbW92ZXMgb24gdG8gdGhlXG4gICAqIG5leHQgc291cmNlIChhIFNob3BpZnkgdGh1bWJuYWlsIGZhbGxzIGJhY2sgdG8gdGhlIG9yaWdpbmFsKSBhbmQgc2hvd3MgaXRzXG4gICAqIHBsYWNlaG9sZGVyIG9uY2Ugbm9uZSBpcyBsZWZ0LlxuICAgKi9cbiAgcHJpdmF0ZSByZWFkb25seSBmYWlsZWRJbWFnZXMgPSBuZXcgTWFwPHN0cmluZywgc3RyaW5nW10+KCk7XG4gIC8qKiBQZXIgcHJvZHVjdCBpZCwgdGhlIGBzcmNgIHRoYXQgbGFzdCBmaW5pc2hlZCBsb2FkaW5nOyBpdHMgdGlsZSBkcm9wcyB0aGUgZmlsbC4gKi9cbiAgcHJpdmF0ZSByZWFkb25seSBsb2FkZWRJbWFnZXMgPSBuZXcgTWFwPHN0cmluZywgc3RyaW5nPigpO1xuXG4gIG5nT25DaGFuZ2VzKCk6IHZvaWQge1xuICAgIGNvbnN0IHNvdXJjZXMgPSBuZXcgTWFwKFxuICAgICAgdGhpcy5wcm9kdWN0cy5tYXAoKHByb2R1Y3QpID0+IFtwcm9kdWN0LmlkLCBwcm9kdWN0SW1hZ2VTb3VyY2VzKHByb2R1Y3QuaW1hZ2VVcmwpXSksXG4gICAgKTtcbiAgICBmb3IgKGNvbnN0IFtpZCwgZmFpbGVkXSBvZiB0aGlzLmZhaWxlZEltYWdlcykge1xuICAgICAgY29uc3QgY3VycmVudCA9IHNvdXJjZXMuZ2V0KGlkKSA/PyBbXTtcbiAgICAgIGlmICghZmFpbGVkLmV2ZXJ5KChzcmMpID0+IGN1cnJlbnQuaW5jbHVkZXMoc3JjKSkpIHRoaXMuZmFpbGVkSW1hZ2VzLmRlbGV0ZShpZCk7XG4gICAgfVxuICB9XG5cbiAgaW1hZ2VTb3VyY2UocHJvZHVjdDogUHJvZHVjdCk6IHN0cmluZyB8IG51bGwge1xuICAgIGNvbnN0IGZhaWxlZCA9IHRoaXMuZmFpbGVkSW1hZ2VzLmdldChwcm9kdWN0LmlkKSA/PyBbXTtcbiAgICByZXR1cm4gcHJvZHVjdEltYWdlU291cmNlcyhwcm9kdWN0LmltYWdlVXJsKS5maW5kKChzcmMpID0+ICFmYWlsZWQuaW5jbHVkZXMoc3JjKSkgPz8gbnVsbDtcbiAgfVxuXG4gIC8qKiBXaGV0aGVyIHRoZSBjYXJkJ3MgcGhvdG8gaGFzIGxvYWRlZCwgc28gdGhlIHBsYWNlaG9sZGVyIGZpbGwgc3RlcHMgYXNpZGUuICovXG4gIGltYWdlTG9hZGVkKHByb2R1Y3Q6IFByb2R1Y3QpOiBib29sZWFuIHtcbiAgICBjb25zdCBzcmMgPSB0aGlzLmltYWdlU291cmNlKHByb2R1Y3QpO1xuICAgIHJldHVybiBzcmMgIT09IG51bGwgJiYgdGhpcy5sb2FkZWRJbWFnZXMuZ2V0KHByb2R1Y3QuaWQpID09PSBzcmM7XG4gIH1cblxuICBvbkltYWdlTG9hZChwcm9kdWN0OiBQcm9kdWN0LCBzcmM6IHN0cmluZywgZXZlbnQ/OiBFdmVudCk6IHZvaWQge1xuICAgIHRoaXMubG9hZGVkSW1hZ2VzLnNldChwcm9kdWN0LmlkLCBzcmMpO1xuICAgIGNvbnN0IGltZyA9IGV2ZW50Py50YXJnZXQgYXMgSFRNTEltYWdlRWxlbWVudCB8IG51bGw7XG4gICAgY29uc3QgZmlsbCA9IGltZyA/IHByb2R1Y3RQaG90b0ZpbGwoaW1nLm5hdHVyYWxXaWR0aCwgaW1nLm5hdHVyYWxIZWlnaHQpIDogbnVsbDtcbiAgICBpZiAoZmlsbCkgdGhpcy5waG90b0ZpbGxzLnNldChwcm9kdWN0LmlkLCBmaWxsKTtcbiAgICBlbHNlIHRoaXMucGhvdG9GaWxscy5kZWxldGUocHJvZHVjdC5pZCk7XG4gIH1cblxuICBvbkltYWdlRXJyb3IocHJvZHVjdDogUHJvZHVjdCk6IHZvaWQge1xuICAgIGNvbnN0IHNyYyA9IHRoaXMuaW1hZ2VTb3VyY2UocHJvZHVjdCk7XG4gICAgaWYgKHNyYykgdGhpcy5mYWlsZWRJbWFnZXMuc2V0KHByb2R1Y3QuaWQsIFsuLi4odGhpcy5mYWlsZWRJbWFnZXMuZ2V0KHByb2R1Y3QuaWQpID8/IFtdKSwgc3JjXSk7XG4gICAgLy8gVGhlIG5leHQgc291cmNlLCBvciB0aGUgcGxhY2Vob2xkZXIsIGZpbGxzIHRoZSB0aWxlIHVudGlsIGl0IGxvYWRzLlxuICAgIHRoaXMucGhvdG9GaWxscy5kZWxldGUocHJvZHVjdC5pZCk7XG4gIH1cblxuICAvKiogUGVyIHByb2R1Y3QgaWQsIGhvdyBtdWNoIG9mIHRoZSB0aWxlIHRoZSBsb2FkZWQgcGhvdG8gZmlsbHMgKHByb2R1Y3RQaG90b0ZpbGwpLiAqL1xuICBwcml2YXRlIHJlYWRvbmx5IHBob3RvRmlsbHMgPSBuZXcgTWFwPHN0cmluZywgeyB4OiBudW1iZXI7IHk6IG51bWJlciB9PigpO1xuXG4gIC8qKlxuICAgKiBUaGUgY2FyZCdzIHBob3RvLWZpbGwgY3VzdG9tIHByb3BlcnRpZXMsIHdoaWNoIHB1dCB0aGUgY2FydCBidXR0b24gaW5zaWRlXG4gICAqIHRoZSBwaG90bydzIG93biBjb3JuZXIuIE51bGwgdW50aWwgdGhlIHBob3RvIGxvYWRzLlxuICAgKi9cbiAgcGhvdG9GaWxsU3R5bGUocHJvZHVjdDogUHJvZHVjdCk6IFJlY29yZDxzdHJpbmcsIHN0cmluZz4gfCBudWxsIHtcbiAgICBjb25zdCBmaWxsID0gdGhpcy5waG90b0ZpbGxzLmdldChwcm9kdWN0LmlkKTtcbiAgICAvLyBPbmx5IHRoZSBwaG90byBvbiBzY3JlZW4gY291bnRzOiBhIGNoYW5nZWQgb3IgcmVtb3ZlZCBpbWFnZSBkcm9wcyBpdC5cbiAgICBpZiAoIWZpbGwgfHwgIXRoaXMuaW1hZ2VMb2FkZWQocHJvZHVjdCkpIHJldHVybiBudWxsO1xuICAgIHJldHVybiB7XG4gICAgICBcIi0tYWlhLXByb2R1Y3QtcGhvdG8tZmlsbC14XCI6IFN0cmluZyhmaWxsLngpLFxuICAgICAgXCItLWFpYS1wcm9kdWN0LXBob3RvLWZpbGwteVwiOiBTdHJpbmcoZmlsbC55KSxcbiAgICB9O1xuICB9XG5cbiAgQE91dHB1dCgpIHJlYWRvbmx5IHNlbGVjdCA9IG5ldyBFdmVudEVtaXR0ZXI8UHJvZHVjdD4oKTtcbiAgLyoqXG4gICAqIEZvY3VzIG1vdmVkIGludG8gLyBvdXQgb2YgdGhlIHN0cmlwLiBUaGUgcGFuZWwgY2xvc2VzIG9uIGJsdXIgYnkgZGVmYXVsdFxuICAgKiBhbmQgdGhlIGVkaXRvciBibHVycyB0aGUgbW9tZW50IGEgY2FyZCB0YWtlcyBmb2N1cywgc28gdGhlIGRyb3Bkb3duXG4gICAqIHJlcG9ydHMgZm9jdXMgYXMgc3RpbGwtaW5zaWRlIHJhdGhlciB0aGFuIHNodXR0aW5nIG91dCBmcm9tIHVuZGVyIHRoZSBjYXJkXG4gICAqIHRoZSB1c2VyIGp1c3QgdGFiYmVkIHRvLlxuICAgKi9cbiAgQE91dHB1dCgpIHJlYWRvbmx5IGZvY3VzQ2hhbmdlID0gbmV3IEV2ZW50RW1pdHRlcjxib29sZWFuPigpO1xuXG4gIHByaXZhdGUgZGV0YWNoV2hlZWw6ICgoKSA9PiB2b2lkKSB8IG51bGwgPSBudWxsO1xuICBwcml2YXRlIHJlYWRvbmx5IGNkciA9IGluamVjdChDaGFuZ2VEZXRlY3RvclJlZik7XG4gIC8qKiBQZXIgcHJvZHVjdCBpZCwgdGhlIGNhcnQgYnV0dG9uJ3Mgc3RhdGUgd2hpbGUgaXQgaXNuJ3QgYXQgcmVzdC4gKi9cbiAgcHJpdmF0ZSByZWFkb25seSBjYXJ0U3RhdGVzID0gbmV3IE1hcDxzdHJpbmcsIENhcnRTdGF0ZT4oKTtcbiAgLyoqIFBlciBwcm9kdWN0IGlkLCB0aGUgdGltZXIgdGhhdCBwdXRzIGFuIFwiYWRkZWRcIiBidXR0b24gYmFjayBhdCByZXN0LiAqL1xuICBwcml2YXRlIHJlYWRvbmx5IGNhcnRUaW1lcnMgPSBuZXcgTWFwPHN0cmluZywgUmV0dXJuVHlwZTx0eXBlb2Ygc2V0VGltZW91dD4+KCk7XG4gIHByaXZhdGUgZGVzdHJveWVkID0gZmFsc2U7XG5cbiAgLyoqXG4gICAqIEEgbW91c2Ugd2hlZWwgb3ZlciB0aGUgcm93IHNjcm9sbHMgaXQgc2lkZXdheXMuIFRoZSByb3cgc2l0cyBpbnNpZGUgdGhlXG4gICAqIHNlY3Rpb24ncyBgKm5nSWZgLCBzbyB0aGUgcXVlcnkgZmlyZXMgd2l0aCB0aGUgZWxlbWVudCBhcyBwcm9kdWN0cyBhcnJpdmVcbiAgICogYW5kIHdpdGggYHVuZGVmaW5lZGAgYXMgdGhleSBnbzsgdGhlIGJpbmRpbmcgZm9sbG93cyBpdCBlaXRoZXIgd2F5LlxuICAgKi9cbiAgQFZpZXdDaGlsZChcInJvd1wiKVxuICBzZXQgcm93KHJlZjogRWxlbWVudFJlZjxIVE1MRWxlbWVudD4gfCB1bmRlZmluZWQpIHtcbiAgICB0aGlzLmRldGFjaFdoZWVsPy4oKTtcbiAgICB0aGlzLmRldGFjaFdoZWVsID0gcmVmID8gYXR0YWNoUHJvZHVjdFJvd1doZWVsKHJlZi5uYXRpdmVFbGVtZW50KSA6IG51bGw7XG4gIH1cblxuICBuZ09uRGVzdHJveSgpOiB2b2lkIHtcbiAgICB0aGlzLmRlc3Ryb3llZCA9IHRydWU7XG4gICAgdGhpcy5kZXRhY2hXaGVlbD8uKCk7XG4gICAgdGhpcy5kZXRhY2hXaGVlbCA9IG51bGw7XG4gICAgZm9yIChjb25zdCB0aW1lciBvZiB0aGlzLmNhcnRUaW1lcnMudmFsdWVzKCkpIGNsZWFyVGltZW91dCh0aW1lcik7XG4gICAgdGhpcy5jYXJ0VGltZXJzLmNsZWFyKCk7XG4gIH1cblxuICAvKiogQSBzb2xkLW91dCBwcm9kdWN0IGNhbid0IGJlIGFkZGVkLCBzbyBpdHMgY2FyZCBoYXMgbm8gYnV0dG9uIGF0IGFsbC4gKi9cbiAgaGFzQ2FydChwcm9kdWN0OiBQcm9kdWN0KTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHRoaXMuYWRkVG9DYXJ0ICE9PSBudWxsICYmIHByb2R1Y3QuYXZhaWxhYmxlICE9PSBmYWxzZTtcbiAgfVxuXG4gIGNhcnRTdGF0ZShwcm9kdWN0OiBQcm9kdWN0KTogQ2FydFN0YXRlIHwgbnVsbCB7XG4gICAgcmV0dXJuIHRoaXMuY2FydFN0YXRlcy5nZXQocHJvZHVjdC5pZCkgPz8gbnVsbDtcbiAgfVxuXG4gIG9uQ2FydEtleURvd24oZXZlbnQ6IEtleWJvYXJkRXZlbnQsIHByb2R1Y3Q6IFByb2R1Y3QpOiB2b2lkIHtcbiAgICAvLyBLZXlzIG5ldmVyIHJlYWNoIHRoZSBjYXJkLCB3aG9zZSBvd24gRW50ZXIgLyBTcGFjZSB3b3VsZCBzZWxlY3QgaXQuXG4gICAgaWYgKGV2ZW50LmtleSAhPT0gXCJFbnRlclwiICYmIGV2ZW50LmtleSAhPT0gXCIgXCIpIHJldHVybjtcbiAgICB0aGlzLm9uQ2FydFByZXNzKGV2ZW50LCBwcm9kdWN0KTtcbiAgfVxuXG4gIC8qKiBNaXJyb3JzIHZhbmlsbGEncyBgYnVpbGRDYXJ0QnV0dG9uYCBwcmVzczogYWRkaW5nIOKGkiBhZGRlZCDihpIgcmVzdCwgb3IgcmVzdCBvbiBhIHJlamVjdGlvbi4gKi9cbiAgb25DYXJ0UHJlc3MoZXZlbnQ6IEV2ZW50LCBwcm9kdWN0OiBQcm9kdWN0KTogdm9pZCB7XG4gICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgICBldmVudC5zdG9wUHJvcGFnYXRpb24oKTtcbiAgICBjb25zdCBoYW5kbGVyID0gdGhpcy5hZGRUb0NhcnQ7XG4gICAgaWYgKCFoYW5kbGVyIHx8IHRoaXMuY2FydFN0YXRlcy5nZXQocHJvZHVjdC5pZCkgPT09IFwiYWRkaW5nXCIpIHJldHVybjtcbiAgICBjb25zdCBpZCA9IHByb2R1Y3QuaWQ7XG4gICAgY2xlYXJUaW1lb3V0KHRoaXMuY2FydFRpbWVycy5nZXQoaWQpKTtcbiAgICB0aGlzLmNhcnRUaW1lcnMuZGVsZXRlKGlkKTtcbiAgICB0aGlzLnNldENhcnRTdGF0ZShpZCwgXCJhZGRpbmdcIik7XG4gICAgbGV0IHBlbmRpbmc6IFByb21pc2VMaWtlPHVua25vd24+O1xuICAgIHRyeSB7XG4gICAgICBwZW5kaW5nID0gUHJvbWlzZS5yZXNvbHZlKGhhbmRsZXIocHJvZHVjdCkpO1xuICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICBwZW5kaW5nID0gUHJvbWlzZS5yZWplY3QoZXJyb3IpO1xuICAgIH1cbiAgICBwZW5kaW5nLnRoZW4oXG4gICAgICAoKSA9PiB7XG4gICAgICAgIHRoaXMuc2V0Q2FydFN0YXRlKGlkLCBcImFkZGVkXCIpO1xuICAgICAgICB0aGlzLmNhcnRUaW1lcnMuc2V0KFxuICAgICAgICAgIGlkLFxuICAgICAgICAgIHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgICAgICAgdGhpcy5jYXJ0VGltZXJzLmRlbGV0ZShpZCk7XG4gICAgICAgICAgICB0aGlzLnNldENhcnRTdGF0ZShpZCwgbnVsbCk7XG4gICAgICAgICAgfSwgQ0FSVF9BRERFRF9NUyksXG4gICAgICAgICk7XG4gICAgICB9LFxuICAgICAgKCkgPT4gdGhpcy5zZXRDYXJ0U3RhdGUoaWQsIG51bGwpLFxuICAgICk7XG4gIH1cblxuICBwcml2YXRlIHNldENhcnRTdGF0ZShpZDogc3RyaW5nLCBzdGF0ZTogQ2FydFN0YXRlIHwgbnVsbCk6IHZvaWQge1xuICAgIGlmICh0aGlzLmRlc3Ryb3llZCkgcmV0dXJuO1xuICAgIGlmIChzdGF0ZSkgdGhpcy5jYXJ0U3RhdGVzLnNldChpZCwgc3RhdGUpO1xuICAgIGVsc2UgdGhpcy5jYXJ0U3RhdGVzLmRlbGV0ZShpZCk7XG4gICAgdGhpcy5jZHIubWFya0ZvckNoZWNrKCk7XG4gIH1cblxuICBnZXQgbGFiZWxJZCgpOiBzdHJpbmcge1xuICAgIHJldHVybiBgJHt0aGlzLmxpc3Rib3hJZH0tcHJvZHVjdHMtbGFiZWxgO1xuICB9XG5cbiAgY2FyZElkKGluZGV4OiBudW1iZXIpOiBzdHJpbmcge1xuICAgIHJldHVybiBgJHt0aGlzLmxpc3Rib3hJZH0tcHJvZHVjdC0ke2luZGV4fWA7XG4gIH1cblxuICB0cmFja0J5UHJvZHVjdCA9IChfOiBudW1iZXIsIHByb2R1Y3Q6IFByb2R1Y3QpOiBzdHJpbmcgPT4gcHJvZHVjdC5pZDtcblxuICBvbkNsaWNrKGV2ZW50OiBNb3VzZUV2ZW50LCBwcm9kdWN0OiBQcm9kdWN0KTogdm9pZCB7XG4gICAgLy8gTGV0IHRoZSBicm93c2VyIGtlZXAgdGhlIGNsaWNrcyB0aGF0IG1lYW4gXCJvcGVuIHRoaXMgc29tZXdoZXJlIGVsc2VcIiDigJRcbiAgICAvLyBpbnRlcmNlcHRpbmcgdGhlbSB3b3VsZCBkZWZlYXQgdGhlIHBvaW50IG9mIHJlbmRlcmluZyBhbiA8YT4uIFRob3NlIGFyZVxuICAgIC8vIG5hdmlnYXRpb25zIHRoZSB1c2VyIGFza2VkIGZvciBleHBsaWNpdGx5LCBzbyB0aGV5IGRvbid0IGVtaXQuXG4gICAgaWYgKGV2ZW50Lm1ldGFLZXkgfHwgZXZlbnQuY3RybEtleSB8fCBldmVudC5zaGlmdEtleSB8fCBldmVudC5hbHRLZXkgfHwgZXZlbnQuYnV0dG9uICE9PSAwKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gICAgdGhpcy5zZWxlY3QuZW1pdChwcm9kdWN0KTtcbiAgfVxuXG4gIG9uS2V5RG93bihldmVudDogS2V5Ym9hcmRFdmVudCwgcHJvZHVjdDogUHJvZHVjdCk6IHZvaWQge1xuICAgIGlmIChldmVudC5rZXkgIT09IFwiRW50ZXJcIiAmJiBldmVudC5rZXkgIT09IFwiIFwiKSByZXR1cm47XG4gICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgICB0aGlzLnNlbGVjdC5lbWl0KHByb2R1Y3QpO1xuICB9XG5cbiAgb25DYXJkRm9jdXMoKTogdm9pZCB7XG4gICAgdGhpcy5mb2N1c0NoYW5nZS5lbWl0KHRydWUpO1xuICB9XG5cbiAgb25DYXJkQmx1cihldmVudDogRm9jdXNFdmVudCk6IHZvaWQge1xuICAgIGNvbnN0IG5leHQgPSBldmVudC5yZWxhdGVkVGFyZ2V0IGFzIEhUTUxFbGVtZW50IHwgbnVsbDtcbiAgICBpZiAobmV4dD8uY2xvc2VzdChcIltkYXRhLWFpYS1kcm9wZG93bl1cIikpIHJldHVybjtcbiAgICB0aGlzLmZvY3VzQ2hhbmdlLmVtaXQoZmFsc2UpO1xuICB9XG59XG4iLCI8IS0tIGBncm91cGAgaXMgdGhlIG9uZSByb2xlIGEgbGlzdGJveCBhY2NlcHRzIGFyb3VuZCBhIHNldCBvZiBvcHRpb25zLCBzbyB0aGVcbiAgICAgc3RyaXAgc3RheXMgaW5zaWRlIHRoZSBsaXN0Ym94IHdpdGhvdXQgYnJlYWtpbmcgaXRzIGNvbnRlbnQgbW9kZWwuIC0tPlxuPHNlY3Rpb25cbiAgKm5nSWY9XCJwcm9kdWN0cy5sZW5ndGggPiAwXCJcbiAgY2xhc3M9XCJhaWEtcHJvZHVjdHNcIlxuICBkYXRhLWFpYS1wcm9kdWN0cz1cIlwiXG4gIFthdHRyLmRhdGEtYWlhLXByb2R1Y3RzLWxheW91dF09XCJsYXlvdXRcIlxuICByb2xlPVwiZ3JvdXBcIlxuICBbYXR0ci5hcmlhLWxhYmVsbGVkYnldPVwibGFiZWxJZFwiXG4+XG4gIDwhLS0gZGF0YS1haWEtcHJvZHVjdHMtbGFiZWw6IHRoZSBzY3JvbGwgYXJyb3cgY2VudHJlcyBpdHNlbGYgb24gdGhpcyByb3cuIC0tPlxuICA8ZGl2IGNsYXNzPVwiYWlhLXByb2R1Y3RzLWxhYmVsXCIgW2lkXT1cImxhYmVsSWRcIiBkYXRhLWFpYS1wcm9kdWN0cy1sYWJlbD1cIlwiPnt7IHN0cmluZ3MucHJvZHVjdHMgfX08L2Rpdj5cblxuICA8IS0tICNyb3c6IHRoZSBjb21wb25lbnQgYmluZHMgd2hlZWwtdG8tc2lkZXdheXMgc2Nyb2xsaW5nIG9uIGl0LiAtLT5cbiAgPGRpdiAjcm93IGNsYXNzPVwiYWlhLXByb2R1Y3RzLXJvd1wiIGRhdGEtYWlhLXByb2R1Y3RzLXJvdz1cIlwiPlxuICAgIDwhLS0gQSByZWFsIDxhIGhyZWY+IHJhdGhlciB0aGFuIGEgPGRpdj46IGl0IGtlZXBzIHRoZSBicm93c2VyJ3Mgb3duIGxpbmtcbiAgICAgICAgIGFmZm9yZGFuY2VzIOKAlCBjbWQvY3RybC1jbGljayBmb3IgYSBuZXcgdGFiLCBtaWRkbGUtY2xpY2ssIHJpZ2h0LWNsaWNrIOKGklxuICAgICAgICAgXCJjb3B5IGxpbmsgYWRkcmVzc1wiLiByb2xlPVwib3B0aW9uXCIgb3ZlcnJpZGVzIGhvdyBhc3Npc3RpdmUgdGVjaFxuICAgICAgICAgYW5ub3VuY2VzIGl0LCB3aGljaCBpcyBjb3JyZWN0IGluc2lkZSBhIGxpc3Rib3g7IHRoZSBkZWxpYmVyYXRlIHRyYWRlXG4gICAgICAgICBpcyB0aGF0IEFUIG5vIGxvbmdlciBjYWxscyBpdCBhIGxpbmsuIEFuIGF0dHJpYnV0ZSBiaW5kaW5nLCBzbyBhXG4gICAgICAgICBwcm9kdWN0IHdpdGhvdXQgYSB1cmwgZ2V0cyBubyBocmVmIGF0IGFsbCByYXRoZXIgdGhhbiBcIm51bGxcIi4gLS0+XG4gICAgPGFcbiAgICAgICpuZ0Zvcj1cImxldCBwcm9kdWN0IG9mIHByb2R1Y3RzOyBsZXQgaSA9IGluZGV4OyB0cmFja0J5OiB0cmFja0J5UHJvZHVjdFwiXG4gICAgICBbaWRdPVwiY2FyZElkKGkpXCJcbiAgICAgIGNsYXNzPVwiYWlhLXByb2R1Y3RcIlxuICAgICAgZGF0YS1haWEtcHJvZHVjdD1cIlwiXG4gICAgICBbYXR0ci5kYXRhLWFpYS1wcm9kdWN0LXNvbGQtb3V0XT1cInByb2R1Y3QuYXZhaWxhYmxlID09PSBmYWxzZSA/ICcnIDogbnVsbFwiXG4gICAgICBbYXR0ci5kYXRhLWFpYS1wcm9kdWN0LWhhcy1jYXJ0XT1cImhhc0NhcnQocHJvZHVjdCkgPyAnJyA6IG51bGxcIlxuICAgICAgW3N0eWxlXT1cInBob3RvRmlsbFN0eWxlKHByb2R1Y3QpXCJcbiAgICAgIHJvbGU9XCJvcHRpb25cIlxuICAgICAgW2F0dHIuYXJpYS1zZWxlY3RlZF09XCJmYWxzZVwiXG4gICAgICBbYXR0ci5ocmVmXT1cInByb2R1Y3QudXJsID8/IG51bGxcIlxuICAgICAgW2F0dHIudGFiaW5kZXhdPVwiZm9jdXNhYmxlID8gMCA6IC0xXCJcbiAgICAgIChjbGljayk9XCJvbkNsaWNrKCRldmVudCwgcHJvZHVjdClcIlxuICAgICAgKGtleWRvd24pPVwib25LZXlEb3duKCRldmVudCwgcHJvZHVjdClcIlxuICAgICAgKGZvY3VzKT1cIm9uQ2FyZEZvY3VzKClcIlxuICAgICAgKGJsdXIpPVwib25DYXJkQmx1cigkZXZlbnQpXCJcbiAgICA+XG4gICAgICA8c3BhblxuICAgICAgICBjbGFzcz1cImFpYS1wcm9kdWN0LW1lZGlhXCJcbiAgICAgICAgYXJpYS1oaWRkZW49XCJ0cnVlXCJcbiAgICAgICAgW2F0dHIuZGF0YS1haWEtcHJvZHVjdC1wbGFjZWhvbGRlcl09XCIhaW1hZ2VTb3VyY2UocHJvZHVjdCkgJiYgaW1hZ2VGYWxsYmFjayA9PT0gJ2ltYWdlJyA/ICcnIDogbnVsbFwiXG4gICAgICAgIFthdHRyLmRhdGEtYWlhLXByb2R1Y3QtaW5pdGlhbF09XCIhaW1hZ2VTb3VyY2UocHJvZHVjdCkgJiYgaW1hZ2VGYWxsYmFjayA9PT0gJ2luaXRpYWwnID8gJycgOiBudWxsXCJcbiAgICAgICAgW2F0dHIuZGF0YS1haWEtaW1hZ2UtbG9hZGVkXT1cImltYWdlTG9hZGVkKHByb2R1Y3QpID8gJycgOiBudWxsXCJcbiAgICAgID5cbiAgICAgICAgPCEtLSBhbHQ9XCJcIiBvbiBwdXJwb3NlOiB0aGUgdGl0bGUgaXMgYWxyZWFkeSB0aGUgY2FyZCdzIGFjY2Vzc2libGVcbiAgICAgICAgICAgICBuYW1lLCBhbmQgcmVwZWF0aW5nIGl0IHdvdWxkIGhhdmUgYSBzY3JlZW4gcmVhZGVyIHJlYWQgaXQgdHdpY2UuIC0tPlxuICAgICAgICA8aW1nXG4gICAgICAgICAgKm5nSWY9XCJpbWFnZVNvdXJjZShwcm9kdWN0KSBhcyBzcmNcIlxuICAgICAgICAgIGNsYXNzPVwiYWlhLXByb2R1Y3QtaW1hZ2VcIlxuICAgICAgICAgIFtzcmNdPVwic3JjXCJcbiAgICAgICAgICAobG9hZCk9XCJvbkltYWdlTG9hZChwcm9kdWN0LCBzcmMsICRldmVudClcIlxuICAgICAgICAgIChlcnJvcik9XCJvbkltYWdlRXJyb3IocHJvZHVjdClcIlxuICAgICAgICAgIGFsdD1cIlwiXG4gICAgICAgICAgbG9hZGluZz1cImxhenlcIlxuICAgICAgICAgIGRlY29kaW5nPVwiYXN5bmNcIlxuICAgICAgICAvPlxuICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwiIWltYWdlU291cmNlKHByb2R1Y3QpICYmIGltYWdlRmFsbGJhY2sgPT09ICdpbml0aWFsJ1wiPnt7IGluaXRpYWwocHJvZHVjdC50aXRsZSkgfX08L25nLWNvbnRhaW5lcj5cbiAgICAgIDwvc3Bhbj5cblxuICAgICAgPCEtLSBFdmVyeSBmaWVsZCBidXQgdGhlIHRpdGxlIGlzIG9wdGlvbmFsLCBzbyBhYnNlbnQgb25lcyByZW5kZXIgbm9cbiAgICAgICAgICAgZWxlbWVudCBhdCBhbGwg4oCUIHRoZSBjb2x1bW4gZ2FwIGNhbid0IGxlYXZlIGEgaG9sZSBmb3IgYSBib3ggdGhhdFxuICAgICAgICAgICBpc24ndCB0aGVyZS4gLS0+XG4gICAgICA8c3BhbiBjbGFzcz1cImFpYS1wcm9kdWN0LWJvZHlcIj5cbiAgICAgICAgPHNwYW4gKm5nSWY9XCJwcm9kdWN0LnZlbmRvclwiIGNsYXNzPVwiYWlhLXByb2R1Y3QtdmVuZG9yXCI+e3sgcHJvZHVjdC52ZW5kb3IgfX08L3NwYW4+XG4gICAgICAgIDxzcGFuIGNsYXNzPVwiYWlhLXByb2R1Y3QtdGl0bGVcIj57eyBwcm9kdWN0LnRpdGxlIH19PC9zcGFuPlxuICAgICAgICA8c3BhbiAqbmdJZj1cInByb2R1Y3QucHJpY2VcIiBjbGFzcz1cImFpYS1wcm9kdWN0LXByaWNlXCI+e3sgcHJvZHVjdC5wcmljZSB9fTwvc3Bhbj5cbiAgICAgICAgPCEtLSBJbiB0aGUgdGV4dCBjb2x1bW4gcmF0aGVyIHRoYW4gdGhlIGFyaWEtaGlkZGVuIG1lZGlhIHRpbGUsIHNvIHRoZVxuICAgICAgICAgICAgIGNhcmQncyBhY2Nlc3NpYmxlIG5hbWUgc2F5cyBpdDsgdGhlIHN0eWxlc2hlZXQgbGlmdHMgaXQgb3ZlciB0aGVcbiAgICAgICAgICAgICBpbWFnZS4gLS0+XG4gICAgICAgIDxzcGFuICpuZ0lmPVwicHJvZHVjdC5hdmFpbGFibGUgPT09IGZhbHNlXCIgY2xhc3M9XCJhaWEtcHJvZHVjdC1iYWRnZVwiPnt7IHN0cmluZ3Muc29sZE91dCB9fTwvc3Bhbj5cbiAgICAgIDwvc3Bhbj5cblxuICAgICAgPCEtLSBUaGUgYWRkLXRvLWNhcnQgYnV0dG9uOiBhIGNoaWxkIG9mIHRoZSBjYXJkIHJhdGhlciB0aGFuIG9mIHRoZVxuICAgICAgICAgICBhcmlhLWhpZGRlbiBtZWRpYSB0aWxlOyB0aGUgc3R5bGVzaGVldCBsaWZ0cyBpdCBvdmVyIHRoZSB0aWxlJ3NcbiAgICAgICAgICAgYm90dG9tIHJpZ2h0IGNvcm5lci4gQSByb2xlPVwiYnV0dG9uXCIgc3Bhbiwgbm90IGEgPGJ1dHRvbj46XG4gICAgICAgICAgIGludGVyYWN0aXZlIGNvbnRlbnQgaW5zaWRlIGFuIDxhPiBpcyBpbnZhbGlkIEhUTUwuIEl0cyBwcmVzcyBuZXZlclxuICAgICAgICAgICByZWFjaGVzIHRoZSBjYXJkLCBzbyBpdCBuZXZlciBzZWxlY3RzLiBTb2xkLW91dCBjYXJkcyBoYXZlIG5vbmUuIC0tPlxuICAgICAgPHNwYW5cbiAgICAgICAgKm5nSWY9XCJoYXNDYXJ0KHByb2R1Y3QpXCJcbiAgICAgICAgY2xhc3M9XCJhaWEtcHJvZHVjdC1jYXJ0XCJcbiAgICAgICAgZGF0YS1haWEtcHJvZHVjdC1jYXJ0PVwiXCJcbiAgICAgICAgcm9sZT1cImJ1dHRvblwiXG4gICAgICAgIFthdHRyLmFyaWEtbGFiZWxdPVwic3RyaW5ncy5hZGRUb0NhcnQgKyAnOiAnICsgcHJvZHVjdC50aXRsZVwiXG4gICAgICAgIFthdHRyLnRhYmluZGV4XT1cImZvY3VzYWJsZSA/IDAgOiAtMVwiXG4gICAgICAgIFthdHRyLmRhdGEtYWlhLWNhcnQtc3RhdGVdPVwiY2FydFN0YXRlKHByb2R1Y3QpXCJcbiAgICAgICAgW2F0dHIuYXJpYS1idXN5XT1cImNhcnRTdGF0ZShwcm9kdWN0KSA9PT0gJ2FkZGluZycgPyAndHJ1ZScgOiBudWxsXCJcbiAgICAgICAgKGNsaWNrKT1cIm9uQ2FydFByZXNzKCRldmVudCwgcHJvZHVjdClcIlxuICAgICAgICAoa2V5ZG93bik9XCJvbkNhcnRLZXlEb3duKCRldmVudCwgcHJvZHVjdClcIlxuICAgICAgICAoZm9jdXMpPVwib25DYXJkRm9jdXMoKVwiXG4gICAgICAgIChibHVyKT1cIm9uQ2FyZEJsdXIoJGV2ZW50KVwiXG4gICAgICA+XG4gICAgICAgIDxzdmcgdmlld0JveD1cIjAgMCAyNCAyNFwiIGFyaWEtaGlkZGVuPVwidHJ1ZVwiIGZvY3VzYWJsZT1cImZhbHNlXCI+XG4gICAgICAgICAgPHBhdGggY2xhc3M9XCJhaWEtcHJvZHVjdC1jYXJ0LWdseXBoXCIgZD1cIk0yIDNoMi4ybDIuNCAxMS4yYTIgMiAwIDAgMCAyIDEuNmg4LjlhMiAyIDAgMCAwIDEuOS0xLjVMMjEgOEg2XCIgLz5cbiAgICAgICAgICA8cGF0aCBjbGFzcz1cImFpYS1wcm9kdWN0LWNhcnQtZ2x5cGhcIiBkPVwiTTEzLjUgNi41di00TTExLjUgNC41aDRcIiAvPlxuICAgICAgICAgIDxwYXRoIGNsYXNzPVwiYWlhLXByb2R1Y3QtY2FydC1jaGVja1wiIGQ9XCJNNSAxMi41bDQuNSA0LjVMMTkgNy41XCIgLz5cbiAgICAgICAgICA8Y2lyY2xlIGNsYXNzPVwiYWlhLXByb2R1Y3QtY2FydC1nbHlwaFwiIGN4PVwiOVwiIGN5PVwiMjBcIiByPVwiMS4zXCIgLz5cbiAgICAgICAgICA8Y2lyY2xlIGNsYXNzPVwiYWlhLXByb2R1Y3QtY2FydC1nbHlwaFwiIGN4PVwiMTcuNVwiIGN5PVwiMjBcIiByPVwiMS4zXCIgLz5cbiAgICAgICAgPC9zdmc+XG4gICAgICA8L3NwYW4+XG4gICAgPC9hPlxuICA8L2Rpdj5cbjwvc2VjdGlvbj5cbiJdfQ==
|
|
261
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicHJvZHVjdC1zdHJpcC5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9zcmMvbGliL2ludGVybmFsL3Byb2R1Y3Qtc3RyaXAvcHJvZHVjdC1zdHJpcC5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi9zcmMvbGliL2ludGVybmFsL3Byb2R1Y3Qtc3RyaXAvcHJvZHVjdC1zdHJpcC5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFDL0MsT0FBTyxFQUNMLHVCQUF1QixFQUN2QixpQkFBaUIsRUFDakIsU0FBUyxFQUVULFlBQVksRUFDWixLQUFLLEVBQ0wsTUFBTSxFQUdOLE1BQU0sRUFDTixTQUFTLEVBQ1QsaUJBQWlCLEdBQ2xCLE1BQU0sZUFBZSxDQUFDO0FBQ3ZCLE9BQU8sRUFDTCxxQkFBcUIsRUFJckIsbUJBQW1CLEVBQ25CLGNBQWMsRUFDZCxnQkFBZ0IsRUFFaEIsWUFBWSxHQUNiLE1BQU0scUNBQXFDLENBQUM7OztBQUk3Qzs7O0dBR0c7QUFDSCxTQUFTLFlBQVksQ0FBQyxPQUFnQjtJQUNwQyxPQUFPLENBQUMsT0FBTyxDQUFDLEVBQUUsRUFBRSxPQUFPLENBQUMsS0FBSyxFQUFFLE9BQU8sQ0FBQyxHQUFHLEVBQUUsT0FBTyxDQUFDLFFBQVEsRUFBRSxPQUFPLENBQUMsTUFBTSxDQUFDO1NBQzlFLEdBQUcsQ0FBQyxDQUFDLEtBQUssRUFBRSxFQUFFLENBQUMsS0FBSyxJQUFJLEVBQUUsQ0FBQztTQUMzQixJQUFJLENBQUMsSUFBSSxDQUFDLENBQUM7QUFDaEIsQ0FBQztBQUVEOzs7Ozs7Ozs7Ozs7Ozs7Ozs7O0dBbUJHO0FBVUgsTUFBTSxPQUFPLHFCQUFxQjtJQVRsQztRQVVXLGFBQVEsR0FBYyxFQUFFLENBQUM7UUFDbEMsMkRBQTJEO1FBQ2xELGNBQVMsR0FBRyxFQUFFLENBQUM7UUFD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QU07c0JBQXhCLE1BQU07Z0JBT1ksV0FBVztzQkFBN0IsTUFBTTtnQkFrQkgsR0FBRztzQkFETixTQUFTO3VCQUFDLEtBQUsiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDb21tb25Nb2R1bGUgfSBmcm9tIFwiQGFuZ3VsYXIvY29tbW9uXCI7XG5pbXBvcnQge1xuICBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneSxcbiAgQ2hhbmdlRGV0ZWN0b3JSZWYsXG4gIENvbXBvbmVudCxcbiAgdHlwZSBFbGVtZW50UmVmLFxuICBFdmVudEVtaXR0ZXIsXG4gIElucHV0LFxuICBpbmplY3QsXG4gIHR5cGUgT25DaGFuZ2VzLFxuICB0eXBlIE9uRGVzdHJveSxcbiAgT3V0cHV0LFxuICBWaWV3Q2hpbGQsXG4gIFZpZXdFbmNhcHN1bGF0aW9uLFxufSBmcm9tIFwiQGFuZ3VsYXIvY29yZVwiO1xuaW1wb3J0IHtcbiAgYXR0YWNoUHJvZHVjdFJvd1doZWVsLFxuICB0eXBlIFByb2R1Y3QsXG4gIHR5cGUgUHJvZHVjdEltYWdlRmFsbGJhY2ssXG4gIHR5cGUgUHJvZHVjdHNMYXlvdXQsXG4gIHByb2R1Y3RJbWFnZVNvdXJjZXMsXG4gIHByb2R1Y3RJbml0aWFsLFxuICBwcm9kdWN0UGhvdG9GaWxsLFxuICB0eXBlIFVJU3RyaW5ncyxcbiAgdWlTdHJpbmdzRm9yLFxufSBmcm9tIFwiQG1hZ2ljeC1lbmcvYWktYXV0b2NvbXBsZXRlLXZhbmlsbGFcIjtcblxudHlwZSBDYXJ0U3RhdGUgPSBcImFkZGluZ1wiIHwgXCJhZGRlZFwiO1xuXG4vKipcbiAqIFdoYXQgbWFrZXMgYSBjYXJkJ3MgcHJvZHVjdCBcInRoZSBzYW1lXCIgZm9yIGl0cyBjYXJ0IGJ1dHRvbjogZXZlcnkgZmllbGRcbiAqIHZhbmlsbGEncyBgY2FyZEtleWAgcmVidWlsZHMgdGhlIGNhcmQgb24uIEEgcHJpY2Utb25seSBjaGFuZ2Uga2VlcHMgaXQuXG4gKi9cbmZ1bmN0aW9uIGNhcnRJZGVudGl0eShwcm9kdWN0OiBQcm9kdWN0KTogc3RyaW5nIHtcbiAgcmV0dXJuIFtwcm9kdWN0LmlkLCBwcm9kdWN0LnRpdGxlLCBwcm9kdWN0LnVybCwgcHJvZHVjdC5pbWFnZVVybCwgcHJvZHVjdC52ZW5kb3JdXG4gICAgLm1hcCgoZmllbGQpID0+IGZpZWxkID8/IFwiXCIpXG4gICAgLmpvaW4oXCJcXDBcIik7XG59XG5cbi8qKlxuICogSW50ZXJuYWwgcHJvZHVjdCBzdHJpcCByZW5kZXJlZCBiZWxvdyB0aGUgZHJvcGRvd24ncyBvcHRpb25zIGdyaWQuIE1pcnJvcnNcbiAqIGBwYWNrYWdlcy9yZWFjdC9zcmMvY29tcG9uZW50cy9Qcm9kdWN0U3RyaXAudHN4YCBhbmQgdGhlIHZhbmlsbGEgY29yZSdzXG4gKiBgcmVuZGVyUHJvZHVjdFN0cmlwYCwgc28gYWxsIHRocmVlIHBhY2thZ2VzIGVtaXQgdGhlIHNhbWUgc3RydWN0dXJlIGFuZFxuICogdGhlbWUgaWRlbnRpY2FsbHkuXG4gKlxuICogVHdvIGxheW91dCBub3RlcyBjYXJyaWVkIG92ZXIgZnJvbSB0aGUgdmFuaWxsYSBpbXBsZW1lbnRhdGlvbjpcbiAqXG4gKiAtIFRoZSBkcm9wZG93biBwYWludHMgYSBiYWNrZ3JvdW5kIGJ1dCBuZXZlciBzZXRzIGBjb2xvcmAsIHNvIGFueXRoaW5nIGhlcmVcbiAqICAgcmVseWluZyBvbiBgY29sb3I6IGluaGVyaXRgIHdvdWxkIHBpY2sgdXAgdGhlICpob3N0IHBhZ2UncyogdGV4dCBjb2xvdXIg4oCUXG4gKiAgIGJsYWNrIHRleHQgb24gYSBkYXJrIHBhbmVsLiBFdmVyeSB0ZXh0IG5vZGUgcmVzb2x2ZXMgaXRzIGNvbG91ciB0aHJvdWdoXG4gKiAgIHRoZSBzYW1lIGAtLWFpYS1vcHRpb24tKmAgY2hhaW4gdGhlIG9wdGlvbnMgdXNlLlxuICogLSBUaGUgb3B0aW9ucyBncmlkIGNhcnJpZXMgYSBuZWdhdGl2ZSBib3R0b20gbWFyZ2luIHNvIHRoZSBmb290ZXIgcmlkZXMgdXBcbiAqICAgb3ZlciBpdHMgcmVzZXJ2ZWQgYmFuZCwgYW5kIHdoYXRldmVyIGZvbGxvd3MgdGhlIGdyaWQgaW5oZXJpdHMgdGhhdCBwdWxsLlxuICogICBUaGUgZHJvcGRvd24gcm9vdCBpcyBtYXJrZWQgYGRhdGEtYWlhLWhhcy1wcm9kdWN0c2AgYW5kIHRoZSBhcHBlYXJhbmNlXG4gKiAgIGxheWVyIHplcm9lcyB0aGUgYmFuZCBhdCBpdHMgc291cmNlIHJhdGhlciB0aGFuIHRoZSBzdHJpcCBjYW5jZWxsaW5nIGl0XG4gKiAgIGZyb20gaGVyZS5cbiAqXG4gKiBAaW50ZXJuYWxcbiAqL1xuQENvbXBvbmVudCh7XG4gIHNlbGVjdG9yOiBcImFpYS1wcm9kdWN0LXN0cmlwXCIsXG4gIHN0YW5kYWxvbmU6IHRydWUsXG4gIGltcG9ydHM6IFtDb21tb25Nb2R1bGVdLFxuICBjaGFuZ2VEZXRlY3Rpb246IENoYW5nZURldGVjdGlvblN0cmF0ZWd5Lk9uUHVzaCxcbiAgZW5jYXBzdWxhdGlvbjogVmlld0VuY2Fwc3VsYXRpb24uTm9uZSxcbiAgdGVtcGxhdGVVcmw6IFwiLi9wcm9kdWN0LXN0cmlwLmNvbXBvbmVudC5odG1sXCIsXG4gIHN0eWxlVXJsczogW1wiLi9wcm9kdWN0LXN0cmlwLmNvbXBvbmVudC5jc3NcIl0sXG59KVxuZXhwb3J0IGNsYXNzIFByb2R1Y3RTdHJpcENvbXBvbmVudCBpbXBsZW1lbnRzIE9uRGVzdHJveSwgT25DaGFuZ2VzIHtcbiAgQElucHV0KCkgcHJvZHVjdHM6IFByb2R1Y3RbXSA9IFtdO1xuICAvKiogU2NvcGVzIHRoZSBzZWN0aW9uIGxhYmVsJ3MgaWQgdG8gdGhlIG93bmluZyBsaXN0Ym94LiAqL1xuICBASW5wdXQoKSBsaXN0Ym94SWQgPSBcIlwiO1xuICAvKipcbiAgICogRmFsc2Ugd2hpbGUgdGhlIHBhbmVsIGlzIGZhZGluZyBvdXQuIFRoZSBjbG9zZWQgZHJvcGRvd24ga2VlcHMgcmVuZGVyaW5nXG4gICAqIGl0cyBsYXN0IGNvbnRlbnQgZm9yIHRoZSBmYWRlLCBhbmQgZm9jdXNhYmxlIGNhcmRzIGluc2lkZSBpdCB3b3VsZCBzdGlsbFxuICAgKiBhbnN3ZXIgVGFiLlxuICAgKi9cbiAgQElucHV0KCkgZm9jdXNhYmxlID0gdHJ1ZTtcbiAgLyoqIEhvdyB0aGUgY2FyZHMgbGF5IG91dCDigJQgYSBzY3JvbGxpbmcgcm93LCBvciBzdGFja2VkIGFzIGZ1bGwtd2lkdGggcm93cy4gRGVmYXVsdDogXCJyb3dcIi4gKi9cbiAgQElucHV0KCkgbGF5b3V0OiBQcm9kdWN0c0xheW91dCA9IFwicm93XCI7XG4gIEBJbnB1dCgpIGltYWdlRmFsbGJhY2s6IFByb2R1Y3RJbWFnZUZhbGxiYWNrID0gXCJpbWFnZVwiO1xuICAvKiogVGhlIHdvcmRzIG9mIHRoZSB3aWRnZXQgbGFuZ3VhZ2UuIERlZmF1bHQ6IEVuZ2xpc2guICovXG4gIEBJbnB1dCgpIHN0cmluZ3M6IFVJU3RyaW5ncyA9IHVpU3RyaW5nc0ZvcigpO1xuICAvKipcbiAgICogU2V0IHdoZW4gdGhlIGludGVncmF0aW9uIGFkZHMgdG8gY2FydDogZWFjaCBjYXJkIHRoYXQgaXMgbm90IHNvbGQgb3V0XG4gICAqIGRyYXdzIGEgY2FydCBidXR0b24sIHdob3NlIHByZXNzIGNhbGxzIHRoaXMgaW5zdGVhZCBvZiBlbWl0dGluZyBgc2VsZWN0YC5cbiAgICovXG4gIEBJbnB1dCgpIGFkZFRvQ2FydDogKChwcm9kdWN0OiBQcm9kdWN0KSA9PiB2b2lkIHwgUHJvbWlzZUxpa2U8dW5rbm93bj4pIHwgbnVsbCA9IG51bGw7XG4gIHJlYWRvbmx5IGluaXRpYWwgPSBwcm9kdWN0SW5pdGlhbDtcbiAgLyoqXG4gICAqIFBlciBwcm9kdWN0IGlkLCB0aGUgYHNyY2BzIHRoYXQgZmFpbGVkIHRvIGxvYWQ6IGEgY2FyZCBtb3ZlcyBvbiB0byB0aGVcbiAgICogbmV4dCBzb3VyY2UgKGEgU2hvcGlmeSB0aHVtYm5haWwgZmFsbHMgYmFjayB0byB0aGUgb3JpZ2luYWwpIGFuZCBzaG93cyBpdHNcbiAgICogcGxhY2Vob2xkZXIgb25jZSBub25lIGlzIGxlZnQuXG4gICAqL1xuICBwcml2YXRlIHJlYWRvbmx5IGZhaWxlZEltYWdlcyA9IG5ldyBNYXA8c3RyaW5nLCBzdHJpbmdbXT4oKTtcbiAgLyoqIFBlciBwcm9kdWN0IGlkLCB0aGUgYHNyY2AgdGhhdCBsYXN0IGZpbmlzaGVkIGxvYWRpbmc7IGl0cyB0aWxlIGRyb3BzIHRoZSBmaWxsLiAqL1xuICBwcml2YXRlIHJlYWRvbmx5IGxvYWRlZEltYWdlcyA9IG5ldyBNYXA8c3RyaW5nLCBzdHJpbmc+KCk7XG5cbiAgbmdPbkNoYW5nZXMoKTogdm9pZCB7XG4gICAgY29uc3Qgc291cmNlcyA9IG5ldyBNYXAoXG4gICAgICB0aGlzLnByb2R1Y3RzLm1hcCgocHJvZHVjdCkgPT4gW3Byb2R1Y3QuaWQsIHByb2R1Y3RJbWFnZVNvdXJjZXMocHJvZHVjdC5pbWFnZVVybCldKSxcbiAgICApO1xuICAgIGZvciAoY29uc3QgW2lkLCBmYWlsZWRdIG9mIHRoaXMuZmFpbGVkSW1hZ2VzKSB7XG4gICAgICBjb25zdCBjdXJyZW50ID0gc291cmNlcy5nZXQoaWQpID8/IFtdO1xuICAgICAgaWYgKCFmYWlsZWQuZXZlcnkoKHNyYykgPT4gY3VycmVudC5pbmNsdWRlcyhzcmMpKSkgdGhpcy5mYWlsZWRJbWFnZXMuZGVsZXRlKGlkKTtcbiAgICB9XG4gICAgLy8gQSBjYXJkIHdob3NlIHByb2R1Y3QgY2hhbmdlZCwgbGVmdCB0aGUgc3RyaXAgb3IgbG9zdCBpdHMgYnV0dG9uIHB1dHMgdGhlXG4gICAgLy8gYnV0dG9uIGJhY2sgYXQgcmVzdCDigJQgd2hhdCByZWJ1aWxkaW5nIHRoZSBjYXJkIGRvZXMgaW4gdmFuaWxsYS5cbiAgICBjb25zdCBieUlkID0gbmV3IE1hcCh0aGlzLnByb2R1Y3RzLm1hcCgocHJvZHVjdCkgPT4gW3Byb2R1Y3QuaWQsIHByb2R1Y3RdKSk7XG4gICAgZm9yIChjb25zdCBbaWQsIGNhcnRdIG9mIHRoaXMuY2FydHMpIHtcbiAgICAgIGNvbnN0IHByb2R1Y3QgPSBieUlkLmdldChpZCk7XG4gICAgICBpZiAoIXByb2R1Y3QgfHwgIXRoaXMuaGFzQ2FydChwcm9kdWN0KSB8fCBjYXJ0SWRlbnRpdHkocHJvZHVjdCkgIT09IGNhcnQuaWRlbnRpdHkpIHtcbiAgICAgICAgdGhpcy5jYXJ0cy5kZWxldGUoaWQpO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIGltYWdlU291cmNlKHByb2R1Y3Q6IFByb2R1Y3QpOiBzdHJpbmcgfCBudWxsIHtcbiAgICBjb25zdCBmYWlsZWQgPSB0aGlzLmZhaWxlZEltYWdlcy5nZXQocHJvZHVjdC5pZCkgPz8gW107XG4gICAgcmV0dXJuIHByb2R1Y3RJbWFnZVNvdXJjZXMocHJvZHVjdC5pbWFnZVVybCkuZmluZCgoc3JjKSA9PiAhZmFpbGVkLmluY2x1ZGVzKHNyYykpID8/IG51bGw7XG4gIH1cblxuICAvKiogV2hldGhlciB0aGUgY2FyZCdzIHBob3RvIGhhcyBsb2FkZWQsIHNvIHRoZSBwbGFjZWhvbGRlciBmaWxsIHN0ZXBzIGFzaWRlLiAqL1xuICBpbWFnZUxvYWRlZChwcm9kdWN0OiBQcm9kdWN0KTogYm9vbGVhbiB7XG4gICAgY29uc3Qgc3JjID0gdGhpcy5pbWFnZVNvdXJjZShwcm9kdWN0KTtcbiAgICByZXR1cm4gc3JjICE9PSBudWxsICYmIHRoaXMubG9hZGVkSW1hZ2VzLmdldChwcm9kdWN0LmlkKSA9PT0gc3JjO1xuICB9XG5cbiAgb25JbWFnZUxvYWQocHJvZHVjdDogUHJvZHVjdCwgc3JjOiBzdHJpbmcsIGV2ZW50PzogRXZlbnQpOiB2b2lkIHtcbiAgICB0aGlzLmxvYWRlZEltYWdlcy5zZXQocHJvZHVjdC5pZCwgc3JjKTtcbiAgICBjb25zdCBpbWcgPSBldmVudD8udGFyZ2V0IGFzIEhUTUxJbWFnZUVsZW1lbnQgfCBudWxsO1xuICAgIGNvbnN0IGZpbGwgPSBpbWcgPyBwcm9kdWN0UGhvdG9GaWxsKGltZy5uYXR1cmFsV2lkdGgsIGltZy5uYXR1cmFsSGVpZ2h0KSA6IG51bGw7XG4gICAgaWYgKGZpbGwpIHRoaXMucGhvdG9GaWxscy5zZXQocHJvZHVjdC5pZCwgZmlsbCk7XG4gICAgZWxzZSB0aGlzLnBob3RvRmlsbHMuZGVsZXRlKHByb2R1Y3QuaWQpO1xuICB9XG5cbiAgb25JbWFnZUVycm9yKHByb2R1Y3Q6IFByb2R1Y3QpOiB2b2lkIHtcbiAgICBjb25zdCBzcmMgPSB0aGlzLmltYWdlU291cmNlKHByb2R1Y3QpO1xuICAgIGlmIChzcmMpIHRoaXMuZmFpbGVkSW1hZ2VzLnNldChwcm9kdWN0LmlkLCBbLi4uKHRoaXMuZmFpbGVkSW1hZ2VzLmdldChwcm9kdWN0LmlkKSA/PyBbXSksIHNyY10pO1xuICAgIC8vIFRoZSBuZXh0IHNvdXJjZSwgb3IgdGhlIHBsYWNlaG9sZGVyLCBmaWxscyB0aGUgdGlsZSB1bnRpbCBpdCBsb2Fkcy5cbiAgICB0aGlzLnBob3RvRmlsbHMuZGVsZXRlKHByb2R1Y3QuaWQpO1xuICB9XG5cbiAgLyoqIFBlciBwcm9kdWN0IGlkLCBob3cgbXVjaCBvZiB0aGUgdGlsZSB0aGUgbG9hZGVkIHBob3RvIGZpbGxzIChwcm9kdWN0UGhvdG9GaWxsKS4gKi9cbiAgcHJpdmF0ZSByZWFkb25seSBwaG90b0ZpbGxzID0gbmV3IE1hcDxzdHJpbmcsIHsgeDogbnVtYmVyOyB5OiBudW1iZXIgfT4oKTtcblxuICAvKipcbiAgICogVGhlIGNhcmQncyBwaG90by1maWxsIGN1c3RvbSBwcm9wZXJ0aWVzLCB3aGljaCBwdXQgdGhlIGNhcnQgYnV0dG9uIGluc2lkZVxuICAgKiB0aGUgcGhvdG8ncyBvd24gY29ybmVyLiBOdWxsIHVudGlsIHRoZSBwaG90byBsb2Fkcy5cbiAgICovXG4gIHBob3RvRmlsbFN0eWxlKHByb2R1Y3Q6IFByb2R1Y3QpOiBSZWNvcmQ8c3RyaW5nLCBzdHJpbmc+IHwgbnVsbCB7XG4gICAgY29uc3QgZmlsbCA9IHRoaXMucGhvdG9GaWxscy5nZXQocHJvZHVjdC5pZCk7XG4gICAgLy8gT25seSB0aGUgcGhvdG8gb24gc2NyZWVuIGNvdW50czogYSBjaGFuZ2VkIG9yIHJlbW92ZWQgaW1hZ2UgZHJvcHMgaXQuXG4gICAgaWYgKCFmaWxsIHx8ICF0aGlzLmltYWdlTG9hZGVkKHByb2R1Y3QpKSByZXR1cm4gbnVsbDtcbiAgICByZXR1cm4ge1xuICAgICAgXCItLWFpYS1wcm9kdWN0LXBob3RvLWZpbGwteFwiOiBTdHJpbmcoZmlsbC54KSxcbiAgICAgIFwiLS1haWEtcHJvZHVjdC1waG90by1maWxsLXlcIjogU3RyaW5nKGZpbGwueSksXG4gICAgfTtcbiAgfVxuXG4gIEBPdXRwdXQoKSByZWFkb25seSBzZWxlY3QgPSBuZXcgRXZlbnRFbWl0dGVyPFByb2R1Y3Q+KCk7XG4gIC8qKlxuICAgKiBGb2N1cyBtb3ZlZCBpbnRvIC8gb3V0IG9mIHRoZSBzdHJpcC4gVGhlIHBhbmVsIGNsb3NlcyBvbiBibHVyIGJ5IGRlZmF1bHRcbiAgICogYW5kIHRoZSBlZGl0b3IgYmx1cnMgdGhlIG1vbWVudCBhIGNhcmQgdGFrZXMgZm9jdXMsIHNvIHRoZSBkcm9wZG93blxuICAgKiByZXBvcnRzIGZvY3VzIGFzIHN0aWxsLWluc2lkZSByYXRoZXIgdGhhbiBzaHV0dGluZyBvdXQgZnJvbSB1bmRlciB0aGUgY2FyZFxuICAgKiB0aGUgdXNlciBqdXN0IHRhYmJlZCB0by5cbiAgICovXG4gIEBPdXRwdXQoKSByZWFkb25seSBmb2N1c0NoYW5nZSA9IG5ldyBFdmVudEVtaXR0ZXI8Ym9vbGVhbj4oKTtcblxuICBwcml2YXRlIGRldGFjaFdoZWVsOiAoKCkgPT4gdm9pZCkgfCBudWxsID0gbnVsbDtcbiAgcHJpdmF0ZSByZWFkb25seSBjZHIgPSBpbmplY3QoQ2hhbmdlRGV0ZWN0b3JSZWYpO1xuICAvKipcbiAgICogUGVyIHByb2R1Y3QgaWQsIHRoZSBjYXJ0IGJ1dHRvbidzIHN0YXRlIHdoaWxlIGl0IGlzbid0IGF0IHJlc3QsIHdpdGggdGhlXG4gICAqIHByb2R1Y3QgaWRlbnRpdHkgaXQgYmVsb25ncyB0byBhbmQgdGhlIHByZXNzIHRoYXQgc2V0IGl0IChhIHNldHRsZSBmcm9tIGFuXG4gICAqIGVhcmxpZXIgcHJlc3MsIG9yIGZvciBhIGNhcmQgc2luY2UgcmVzZXQsIGlzIGRyb3BwZWQpLlxuICAgKi9cbiAgcHJpdmF0ZSByZWFkb25seSBjYXJ0cyA9IG5ldyBNYXA8c3RyaW5nLCB7IHN0YXRlOiBDYXJ0U3RhdGU7IGlkZW50aXR5OiBzdHJpbmc7IHByZXNzOiBvYmplY3QgfT4oKTtcbiAgcHJpdmF0ZSBkZXN0cm95ZWQgPSBmYWxzZTtcblxuICAvKipcbiAgICogQSBtb3VzZSB3aGVlbCBvdmVyIHRoZSByb3cgc2Nyb2xscyBpdCBzaWRld2F5cy4gVGhlIHJvdyBzaXRzIGluc2lkZSB0aGVcbiAgICogc2VjdGlvbidzIGAqbmdJZmAsIHNvIHRoZSBxdWVyeSBmaXJlcyB3aXRoIHRoZSBlbGVtZW50IGFzIHByb2R1Y3RzIGFycml2ZVxuICAgKiBhbmQgd2l0aCBgdW5kZWZpbmVkYCBhcyB0aGV5IGdvOyB0aGUgYmluZGluZyBmb2xsb3dzIGl0IGVpdGhlciB3YXkuXG4gICAqL1xuICBAVmlld0NoaWxkKFwicm93XCIpXG4gIHNldCByb3cocmVmOiBFbGVtZW50UmVmPEhUTUxFbGVtZW50PiB8IHVuZGVmaW5lZCkge1xuICAgIHRoaXMuZGV0YWNoV2hlZWw/LigpO1xuICAgIHRoaXMuZGV0YWNoV2hlZWwgPSByZWYgPyBhdHRhY2hQcm9kdWN0Um93V2hlZWwocmVmLm5hdGl2ZUVsZW1lbnQpIDogbnVsbDtcbiAgfVxuXG4gIG5nT25EZXN0cm95KCk6IHZvaWQge1xuICAgIHRoaXMuZGVzdHJveWVkID0gdHJ1ZTtcbiAgICB0aGlzLmRldGFjaFdoZWVsPy4oKTtcbiAgICB0aGlzLmRldGFjaFdoZWVsID0gbnVsbDtcbiAgfVxuXG4gIC8qKiBBIHNvbGQtb3V0IHByb2R1Y3QgY2FuJ3QgYmUgYWRkZWQsIHNvIGl0cyBjYXJkIGhhcyBubyBidXR0b24gYXQgYWxsLiAqL1xuICBoYXNDYXJ0KHByb2R1Y3Q6IFByb2R1Y3QpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdGhpcy5hZGRUb0NhcnQgIT09IG51bGwgJiYgcHJvZHVjdC5hdmFpbGFibGUgIT09IGZhbHNlO1xuICB9XG5cbiAgY2FydFN0YXRlKHByb2R1Y3Q6IFByb2R1Y3QpOiBDYXJ0U3RhdGUgfCBudWxsIHtcbiAgICByZXR1cm4gdGhpcy5jYXJ0cy5nZXQocHJvZHVjdC5pZCk/LnN0YXRlID8/IG51bGw7XG4gIH1cblxuICBvbkNhcnRLZXlEb3duKGV2ZW50OiBLZXlib2FyZEV2ZW50LCBwcm9kdWN0OiBQcm9kdWN0KTogdm9pZCB7XG4gICAgLy8gS2V5cyBuZXZlciByZWFjaCB0aGUgY2FyZCwgd2hvc2Ugb3duIEVudGVyIC8gU3BhY2Ugd291bGQgc2VsZWN0IGl0LlxuICAgIGlmIChldmVudC5rZXkgIT09IFwiRW50ZXJcIiAmJiBldmVudC5rZXkgIT09IFwiIFwiKSByZXR1cm47XG4gICAgdGhpcy5vbkNhcnRQcmVzcyhldmVudCwgcHJvZHVjdCk7XG4gIH1cblxuICAvKipcbiAgICogTWlycm9ycyB2YW5pbGxhJ3MgYGJ1aWxkQ2FydEJ1dHRvbmAgcHJlc3M6IGFkZGluZyDihpIgYWRkZWQsIG9yIHJlc3Qgb24gYVxuICAgKiByZWplY3Rpb24uIFRoZSBjaGVjayBzdGF5cyB1bnRpbCB0aGUgcHJvZHVjdCBjaGFuZ2VzOyBhbm90aGVyIHByZXNzIGFkZHMgYWdhaW4uXG4gICAqL1xuICBvbkNhcnRQcmVzcyhldmVudDogRXZlbnQsIHByb2R1Y3Q6IFByb2R1Y3QpOiB2b2lkIHtcbiAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgIGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpO1xuICAgIGNvbnN0IGhhbmRsZXIgPSB0aGlzLmFkZFRvQ2FydDtcbiAgICBpZiAoIWhhbmRsZXIgfHwgdGhpcy5jYXJ0U3RhdGUocHJvZHVjdCkgPT09IFwiYWRkaW5nXCIpIHJldHVybjtcbiAgICBjb25zdCBpZCA9IHByb2R1Y3QuaWQ7XG4gICAgY29uc3QgcHJlc3MgPSB7fTtcbiAgICB0aGlzLmNhcnRzLnNldChpZCwgeyBzdGF0ZTogXCJhZGRpbmdcIiwgaWRlbnRpdHk6IGNhcnRJZGVudGl0eShwcm9kdWN0KSwgcHJlc3MgfSk7XG4gICAgdGhpcy5jZHIubWFya0ZvckNoZWNrKCk7XG4gICAgbGV0IHBlbmRpbmc6IFByb21pc2VMaWtlPHVua25vd24+O1xuICAgIHRyeSB7XG4gICAgICBwZW5kaW5nID0gUHJvbWlzZS5yZXNvbHZlKGhhbmRsZXIocHJvZHVjdCkpO1xuICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICBwZW5kaW5nID0gUHJvbWlzZS5yZWplY3QoZXJyb3IpO1xuICAgIH1cbiAgICBwZW5kaW5nLnRoZW4oXG4gICAgICAoKSA9PiB0aGlzLnNldHRsZUNhcnQoaWQsIHByZXNzLCBcImFkZGVkXCIpLFxuICAgICAgKCkgPT4gdGhpcy5zZXR0bGVDYXJ0KGlkLCBwcmVzcywgbnVsbCksXG4gICAgKTtcbiAgfVxuXG4gIHByaXZhdGUgc2V0dGxlQ2FydChpZDogc3RyaW5nLCBwcmVzczogb2JqZWN0LCBzdGF0ZTogQ2FydFN0YXRlIHwgbnVsbCk6IHZvaWQge1xuICAgIGNvbnN0IGNhcnQgPSB0aGlzLmNhcnRzLmdldChpZCk7XG4gICAgaWYgKHRoaXMuZGVzdHJveWVkIHx8IGNhcnQ/LnByZXNzICE9PSBwcmVzcykgcmV0dXJuO1xuICAgIGlmIChzdGF0ZSkgY2FydC5zdGF0ZSA9IHN0YXRlO1xuICAgIGVsc2UgdGhpcy5jYXJ0cy5kZWxldGUoaWQpO1xuICAgIHRoaXMuY2RyLm1hcmtGb3JDaGVjaygpO1xuICB9XG5cbiAgZ2V0IGxhYmVsSWQoKTogc3RyaW5nIHtcbiAgICByZXR1cm4gYCR7dGhpcy5saXN0Ym94SWR9LXByb2R1Y3RzLWxhYmVsYDtcbiAgfVxuXG4gIGNhcmRJZChpbmRleDogbnVtYmVyKTogc3RyaW5nIHtcbiAgICByZXR1cm4gYCR7dGhpcy5saXN0Ym94SWR9LXByb2R1Y3QtJHtpbmRleH1gO1xuICB9XG5cbiAgdHJhY2tCeVByb2R1Y3QgPSAoXzogbnVtYmVyLCBwcm9kdWN0OiBQcm9kdWN0KTogc3RyaW5nID0+IHByb2R1Y3QuaWQ7XG5cbiAgb25DbGljayhldmVudDogTW91c2VFdmVudCwgcHJvZHVjdDogUHJvZHVjdCk6IHZvaWQge1xuICAgIC8vIExldCB0aGUgYnJvd3NlciBrZWVwIHRoZSBjbGlja3MgdGhhdCBtZWFuIFwib3BlbiB0aGlzIHNvbWV3aGVyZSBlbHNlXCIg4oCUXG4gICAgLy8gaW50ZXJjZXB0aW5nIHRoZW0gd291bGQgZGVmZWF0IHRoZSBwb2ludCBvZiByZW5kZXJpbmcgYW4gPGE+LiBUaG9zZSBhcmVcbiAgICAvLyBuYXZpZ2F0aW9ucyB0aGUgdXNlciBhc2tlZCBmb3IgZXhwbGljaXRseSwgc28gdGhleSBkb24ndCBlbWl0LlxuICAgIGlmIChldmVudC5tZXRhS2V5IHx8IGV2ZW50LmN0cmxLZXkgfHwgZXZlbnQuc2hpZnRLZXkgfHwgZXZlbnQuYWx0S2V5IHx8IGV2ZW50LmJ1dHRvbiAhPT0gMCkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgIHRoaXMuc2VsZWN0LmVtaXQocHJvZHVjdCk7XG4gIH1cblxuICBvbktleURvd24oZXZlbnQ6IEtleWJvYXJkRXZlbnQsIHByb2R1Y3Q6IFByb2R1Y3QpOiB2b2lkIHtcbiAgICBpZiAoZXZlbnQua2V5ICE9PSBcIkVudGVyXCIgJiYgZXZlbnQua2V5ICE9PSBcIiBcIikgcmV0dXJuO1xuICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gICAgdGhpcy5zZWxlY3QuZW1pdChwcm9kdWN0KTtcbiAgfVxuXG4gIG9uQ2FyZEZvY3VzKCk6IHZvaWQge1xuICAgIHRoaXMuZm9jdXNDaGFuZ2UuZW1pdCh0cnVlKTtcbiAgfVxuXG4gIG9uQ2FyZEJsdXIoZXZlbnQ6IEZvY3VzRXZlbnQpOiB2b2lkIHtcbiAgICBjb25zdCBuZXh0ID0gZXZlbnQucmVsYXRlZFRhcmdldCBhcyBIVE1MRWxlbWVudCB8IG51bGw7XG4gICAgaWYgKG5leHQ/LmNsb3Nlc3QoXCJbZGF0YS1haWEtZHJvcGRvd25dXCIpKSByZXR1cm47XG4gICAgdGhpcy5mb2N1c0NoYW5nZS5lbWl0KGZhbHNlKTtcbiAgfVxufVxuIiwiPCEtLSBgZ3JvdXBgIGlzIHRoZSBvbmUgcm9sZSBhIGxpc3Rib3ggYWNjZXB0cyBhcm91bmQgYSBzZXQgb2Ygb3B0aW9ucywgc28gdGhlXG4gICAgIHN0cmlwIHN0YXlzIGluc2lkZSB0aGUgbGlzdGJveCB3aXRob3V0IGJyZWFraW5nIGl0cyBjb250ZW50IG1vZGVsLiAtLT5cbjxzZWN0aW9uXG4gICpuZ0lmPVwicHJvZHVjdHMubGVuZ3RoID4gMFwiXG4gIGNsYXNzPVwiYWlhLXByb2R1Y3RzXCJcbiAgZGF0YS1haWEtcHJvZHVjdHM9XCJcIlxuICBbYXR0ci5kYXRhLWFpYS1wcm9kdWN0cy1sYXlvdXRdPVwibGF5b3V0XCJcbiAgcm9sZT1cImdyb3VwXCJcbiAgW2F0dHIuYXJpYS1sYWJlbGxlZGJ5XT1cImxhYmVsSWRcIlxuPlxuICA8IS0tIGRhdGEtYWlhLXByb2R1Y3RzLWxhYmVsOiB0aGUgc2Nyb2xsIGFycm93IGNlbnRyZXMgaXRzZWxmIG9uIHRoaXMgcm93LiAtLT5cbiAgPGRpdiBjbGFzcz1cImFpYS1wcm9kdWN0cy1sYWJlbFwiIFtpZF09XCJsYWJlbElkXCIgZGF0YS1haWEtcHJvZHVjdHMtbGFiZWw9XCJcIj57eyBzdHJpbmdzLnByb2R1Y3RzIH19PC9kaXY+XG5cbiAgPCEtLSAjcm93OiB0aGUgY29tcG9uZW50IGJpbmRzIHdoZWVsLXRvLXNpZGV3YXlzIHNjcm9sbGluZyBvbiBpdC4gLS0+XG4gIDxkaXYgI3JvdyBjbGFzcz1cImFpYS1wcm9kdWN0cy1yb3dcIiBkYXRhLWFpYS1wcm9kdWN0cy1yb3c9XCJcIj5cbiAgICA8IS0tIEEgcmVhbCA8YSBocmVmPiByYXRoZXIgdGhhbiBhIDxkaXY+OiBpdCBrZWVwcyB0aGUgYnJvd3NlcidzIG93biBsaW5rXG4gICAgICAgICBhZmZvcmRhbmNlcyDigJQgY21kL2N0cmwtY2xpY2sgZm9yIGEgbmV3IHRhYiwgbWlkZGxlLWNsaWNrLCByaWdodC1jbGljayDihpJcbiAgICAgICAgIFwiY29weSBsaW5rIGFkZHJlc3NcIi4gcm9sZT1cIm9wdGlvblwiIG92ZXJyaWRlcyBob3cgYXNzaXN0aXZlIHRlY2hcbiAgICAgICAgIGFubm91bmNlcyBpdCwgd2hpY2ggaXMgY29ycmVjdCBpbnNpZGUgYSBsaXN0Ym94OyB0aGUgZGVsaWJlcmF0ZSB0cmFkZVxuICAgICAgICAgaXMgdGhhdCBBVCBubyBsb25nZXIgY2FsbHMgaXQgYSBsaW5rLiBBbiBhdHRyaWJ1dGUgYmluZGluZywgc28gYVxuICAgICAgICAgcHJvZHVjdCB3aXRob3V0IGEgdXJsIGdldHMgbm8gaHJlZiBhdCBhbGwgcmF0aGVyIHRoYW4gXCJudWxsXCIuIC0tPlxuICAgIDxhXG4gICAgICAqbmdGb3I9XCJsZXQgcHJvZHVjdCBvZiBwcm9kdWN0czsgbGV0IGkgPSBpbmRleDsgdHJhY2tCeTogdHJhY2tCeVByb2R1Y3RcIlxuICAgICAgW2lkXT1cImNhcmRJZChpKVwiXG4gICAgICBjbGFzcz1cImFpYS1wcm9kdWN0XCJcbiAgICAgIGRhdGEtYWlhLXByb2R1Y3Q9XCJcIlxuICAgICAgW2F0dHIuZGF0YS1haWEtcHJvZHVjdC1zb2xkLW91dF09XCJwcm9kdWN0LmF2YWlsYWJsZSA9PT0gZmFsc2UgPyAnJyA6IG51bGxcIlxuICAgICAgW2F0dHIuZGF0YS1haWEtcHJvZHVjdC1oYXMtY2FydF09XCJoYXNDYXJ0KHByb2R1Y3QpID8gJycgOiBudWxsXCJcbiAgICAgIFtzdHlsZV09XCJwaG90b0ZpbGxTdHlsZShwcm9kdWN0KVwiXG4gICAgICByb2xlPVwib3B0aW9uXCJcbiAgICAgIFthdHRyLmFyaWEtc2VsZWN0ZWRdPVwiZmFsc2VcIlxuICAgICAgW2F0dHIuaHJlZl09XCJwcm9kdWN0LnVybCA/PyBudWxsXCJcbiAgICAgIFthdHRyLnRhYmluZGV4XT1cImZvY3VzYWJsZSA/IDAgOiAtMVwiXG4gICAgICAoY2xpY2spPVwib25DbGljaygkZXZlbnQsIHByb2R1Y3QpXCJcbiAgICAgIChrZXlkb3duKT1cIm9uS2V5RG93bigkZXZlbnQsIHByb2R1Y3QpXCJcbiAgICAgIChmb2N1cyk9XCJvbkNhcmRGb2N1cygpXCJcbiAgICAgIChibHVyKT1cIm9uQ2FyZEJsdXIoJGV2ZW50KVwiXG4gICAgPlxuICAgICAgPHNwYW5cbiAgICAgICAgY2xhc3M9XCJhaWEtcHJvZHVjdC1tZWRpYVwiXG4gICAgICAgIGFyaWEtaGlkZGVuPVwidHJ1ZVwiXG4gICAgICAgIFthdHRyLmRhdGEtYWlhLXByb2R1Y3QtcGxhY2Vob2xkZXJdPVwiIWltYWdlU291cmNlKHByb2R1Y3QpICYmIGltYWdlRmFsbGJhY2sgPT09ICdpbWFnZScgPyAnJyA6IG51bGxcIlxuICAgICAgICBbYXR0ci5kYXRhLWFpYS1wcm9kdWN0LWluaXRpYWxdPVwiIWltYWdlU291cmNlKHByb2R1Y3QpICYmIGltYWdlRmFsbGJhY2sgPT09ICdpbml0aWFsJyA/ICcnIDogbnVsbFwiXG4gICAgICAgIFthdHRyLmRhdGEtYWlhLWltYWdlLWxvYWRlZF09XCJpbWFnZUxvYWRlZChwcm9kdWN0KSA/ICcnIDogbnVsbFwiXG4gICAgICA+XG4gICAgICAgIDwhLS0gYWx0PVwiXCIgb24gcHVycG9zZTogdGhlIHRpdGxlIGlzIGFscmVhZHkgdGhlIGNhcmQncyBhY2Nlc3NpYmxlXG4gICAgICAgICAgICAgbmFtZSwgYW5kIHJlcGVhdGluZyBpdCB3b3VsZCBoYXZlIGEgc2NyZWVuIHJlYWRlciByZWFkIGl0IHR3aWNlLiAtLT5cbiAgICAgICAgPGltZ1xuICAgICAgICAgICpuZ0lmPVwiaW1hZ2VTb3VyY2UocHJvZHVjdCkgYXMgc3JjXCJcbiAgICAgICAgICBjbGFzcz1cImFpYS1wcm9kdWN0LWltYWdlXCJcbiAgICAgICAgICBbc3JjXT1cInNyY1wiXG4gICAgICAgICAgKGxvYWQpPVwib25JbWFnZUxvYWQocHJvZHVjdCwgc3JjLCAkZXZlbnQpXCJcbiAgICAgICAgICAoZXJyb3IpPVwib25JbWFnZUVycm9yKHByb2R1Y3QpXCJcbiAgICAgICAgICBhbHQ9XCJcIlxuICAgICAgICAgIGxvYWRpbmc9XCJsYXp5XCJcbiAgICAgICAgICBkZWNvZGluZz1cImFzeW5jXCJcbiAgICAgICAgLz5cbiAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cIiFpbWFnZVNvdXJjZShwcm9kdWN0KSAmJiBpbWFnZUZhbGxiYWNrID09PSAnaW5pdGlhbCdcIj57eyBpbml0aWFsKHByb2R1Y3QudGl0bGUpIH19PC9uZy1jb250YWluZXI+XG4gICAgICA8L3NwYW4+XG5cbiAgICAgIDwhLS0gRXZlcnkgZmllbGQgYnV0IHRoZSB0aXRsZSBpcyBvcHRpb25hbCwgc28gYWJzZW50IG9uZXMgcmVuZGVyIG5vXG4gICAgICAgICAgIGVsZW1lbnQgYXQgYWxsIOKAlCB0aGUgY29sdW1uIGdhcCBjYW4ndCBsZWF2ZSBhIGhvbGUgZm9yIGEgYm94IHRoYXRcbiAgICAgICAgICAgaXNuJ3QgdGhlcmUuIC0tPlxuICAgICAgPHNwYW4gY2xhc3M9XCJhaWEtcHJvZHVjdC1ib2R5XCI+XG4gICAgICAgIDxzcGFuICpuZ0lmPVwicHJvZHVjdC52ZW5kb3JcIiBjbGFzcz1cImFpYS1wcm9kdWN0LXZlbmRvclwiPnt7IHByb2R1Y3QudmVuZG9yIH19PC9zcGFuPlxuICAgICAgICA8c3BhbiBjbGFzcz1cImFpYS1wcm9kdWN0LXRpdGxlXCI+e3sgcHJvZHVjdC50aXRsZSB9fTwvc3Bhbj5cbiAgICAgICAgPHNwYW4gKm5nSWY9XCJwcm9kdWN0LnByaWNlXCIgY2xhc3M9XCJhaWEtcHJvZHVjdC1wcmljZVwiPnt7IHByb2R1Y3QucHJpY2UgfX08L3NwYW4+XG4gICAgICAgIDwhLS0gSW4gdGhlIHRleHQgY29sdW1uIHJhdGhlciB0aGFuIHRoZSBhcmlhLWhpZGRlbiBtZWRpYSB0aWxlLCBzbyB0aGVcbiAgICAgICAgICAgICBjYXJkJ3MgYWNjZXNzaWJsZSBuYW1lIHNheXMgaXQ7IHRoZSBzdHlsZXNoZWV0IGxpZnRzIGl0IG92ZXIgdGhlXG4gICAgICAgICAgICAgaW1hZ2UuIC0tPlxuICAgICAgICA8c3BhbiAqbmdJZj1cInByb2R1Y3QuYXZhaWxhYmxlID09PSBmYWxzZVwiIGNsYXNzPVwiYWlhLXByb2R1Y3QtYmFkZ2VcIj57eyBzdHJpbmdzLnNvbGRPdXQgfX08L3NwYW4+XG4gICAgICA8L3NwYW4+XG5cbiAgICAgIDwhLS0gVGhlIGFkZC10by1jYXJ0IGJ1dHRvbjogYSBjaGlsZCBvZiB0aGUgY2FyZCByYXRoZXIgdGhhbiBvZiB0aGVcbiAgICAgICAgICAgYXJpYS1oaWRkZW4gbWVkaWEgdGlsZTsgdGhlIHN0eWxlc2hlZXQgbGlmdHMgaXQgb3ZlciB0aGUgdGlsZSdzXG4gICAgICAgICAgIGJvdHRvbSByaWdodCBjb3JuZXIuIEEgcm9sZT1cImJ1dHRvblwiIHNwYW4sIG5vdCBhIDxidXR0b24+OlxuICAgICAgICAgICBpbnRlcmFjdGl2ZSBjb250ZW50IGluc2lkZSBhbiA8YT4gaXMgaW52YWxpZCBIVE1MLiBJdHMgcHJlc3MgbmV2ZXJcbiAgICAgICAgICAgcmVhY2hlcyB0aGUgY2FyZCwgc28gaXQgbmV2ZXIgc2VsZWN0cy4gU29sZC1vdXQgY2FyZHMgaGF2ZSBub25lLiAtLT5cbiAgICAgIDxzcGFuXG4gICAgICAgICpuZ0lmPVwiaGFzQ2FydChwcm9kdWN0KVwiXG4gICAgICAgIGNsYXNzPVwiYWlhLXByb2R1Y3QtY2FydFwiXG4gICAgICAgIGRhdGEtYWlhLXByb2R1Y3QtY2FydD1cIlwiXG4gICAgICAgIHJvbGU9XCJidXR0b25cIlxuICAgICAgICBbYXR0ci5hcmlhLWxhYmVsXT1cInN0cmluZ3MuYWRkVG9DYXJ0ICsgJzogJyArIHByb2R1Y3QudGl0bGVcIlxuICAgICAgICBbYXR0ci50YWJpbmRleF09XCJmb2N1c2FibGUgPyAwIDogLTFcIlxuICAgICAgICBbYXR0ci5kYXRhLWFpYS1jYXJ0LXN0YXRlXT1cImNhcnRTdGF0ZShwcm9kdWN0KVwiXG4gICAgICAgIFthdHRyLmFyaWEtYnVzeV09XCJjYXJ0U3RhdGUocHJvZHVjdCkgPT09ICdhZGRpbmcnID8gJ3RydWUnIDogbnVsbFwiXG4gICAgICAgIChjbGljayk9XCJvbkNhcnRQcmVzcygkZXZlbnQsIHByb2R1Y3QpXCJcbiAgICAgICAgKGtleWRvd24pPVwib25DYXJ0S2V5RG93bigkZXZlbnQsIHByb2R1Y3QpXCJcbiAgICAgICAgKGZvY3VzKT1cIm9uQ2FyZEZvY3VzKClcIlxuICAgICAgICAoYmx1cik9XCJvbkNhcmRCbHVyKCRldmVudClcIlxuICAgICAgPlxuICAgICAgICA8c3ZnIHZpZXdCb3g9XCIwIDAgMjQgMjRcIiBhcmlhLWhpZGRlbj1cInRydWVcIiBmb2N1c2FibGU9XCJmYWxzZVwiPlxuICAgICAgICAgIDxwYXRoIGNsYXNzPVwiYWlhLXByb2R1Y3QtY2FydC1nbHlwaFwiIGQ9XCJNMiAzaDIuMmwyLjQgMTEuMmEyIDIgMCAwIDAgMiAxLjZoOC45YTIgMiAwIDAgMCAxLjktMS41TDIxIDhINlwiIC8+XG4gICAgICAgICAgPHBhdGggY2xhc3M9XCJhaWEtcHJvZHVjdC1jYXJ0LWdseXBoXCIgZD1cIk0xMy41IDYuNXYtNE0xMS41IDQuNWg0XCIgLz5cbiAgICAgICAgICA8cGF0aCBjbGFzcz1cImFpYS1wcm9kdWN0LWNhcnQtY2hlY2tcIiBkPVwiTTUgMTIuNWw0LjUgNC41TDE5IDcuNVwiIC8+XG4gICAgICAgICAgPHBhdGggY2xhc3M9XCJhaWEtcHJvZHVjdC1jYXJ0LXNwaW5uZXJcIiBkPVwiTTEyIDRhOCA4IDAgMSAwIDggOFwiIC8+XG4gICAgICAgICAgPGNpcmNsZSBjbGFzcz1cImFpYS1wcm9kdWN0LWNhcnQtZ2x5cGhcIiBjeD1cIjlcIiBjeT1cIjIwXCIgcj1cIjEuM1wiIC8+XG4gICAgICAgICAgPGNpcmNsZSBjbGFzcz1cImFpYS1wcm9kdWN0LWNhcnQtZ2x5cGhcIiBjeD1cIjE3LjVcIiBjeT1cIjIwXCIgcj1cIjEuM1wiIC8+XG4gICAgICAgIDwvc3ZnPlxuICAgICAgPC9zcGFuPlxuICAgIDwvYT5cbiAgPC9kaXY+XG48L3NlY3Rpb24+XG4iXX0=
|
|
@@ -130,12 +130,14 @@ export class SuggestionGridComponent {
|
|
|
130
130
|
}
|
|
131
131
|
}
|
|
132
132
|
SuggestionGridComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.2.10", ngImport: i0, type: SuggestionGridComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
|
|
133
|
-
SuggestionGridComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "15.2.10", type: SuggestionGridComponent, isStandalone: true, selector: "aia-suggestion-grid", inputs: { options: "options", activeIndex: "activeIndex", listboxId: "listboxId", loading: "loading", groupKey: "groupKey", optionsPosition: "optionsPosition", showIcons: "showIcons", showImages: "showImages", showCounts: "showCounts" }, outputs: { select: "select", highlight: "highlight", unhighlight: "unhighlight" }, host: { listeners: { "window:resize": "onResize()" } }, viewQueries: [{ propertyName: "gridComp", first: true, predicate: GridComponent, descendants: true }], usesOnChanges: true, ngImport: i0, template: "<!-- max=\"1fr\": columns share out the full width, so a lone column spans the\n whole options box instead of stopping at 250px. -->\n<aia-grid\n min=\"250px\"\n max=\"1fr\"\n gap=\"0\"\n [scroll]=\"true\"\n [scrollResetKey]=\"groupKey\"\n [template]=\"plan.template\"\n [maxHeight]=\"plan.maxHeight\"\n [group]=\"groupKey\"\n>\n <aia-suggestion-item\n *ngFor=\"let option of options; trackBy: trackByOptionText; let i = index\"\n [option]=\"option\"\n [isHighlighted]=\"i === activeIndex\"\n [id]=\"listboxId + '-option-' + i\"\n [loading]=\"loading\"\n [showIcon]=\"showIcons && leadingVisuals\"\n [showImage]=\"showImages && leadingVisuals\"\n [showCount]=\"showCounts\"\n [scrollHint]=\"isScrollHint(i)\"\n [enterDelayMs]=\"enterDelayMs(i)\"\n (select)=\"select.emit($event)\"\n (highlight)=\"highlight.emit(i)\"\n (unhighlight)=\"unhighlight.emit(i)\"\n ></aia-suggestion-item>\n</aia-grid>\n", dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i1.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "component", type: GridComponent, selector: "aia-grid", inputs: ["min", "max", "gap", "scroll", "maxHeight", "scrollResetKey", "cols", "template", "group"] }, { kind: "component", type: SuggestionItemComponent, selector: "aia-suggestion-item", inputs: ["option", "isHighlighted", "id", "loading", "showIcon", "showImage", "showCount", "scrollHint", "enterDelayMs"], outputs: ["select", "highlight", "unhighlight"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None });
|
|
133
|
+
SuggestionGridComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "15.2.10", type: SuggestionGridComponent, isStandalone: true, selector: "aia-suggestion-grid", inputs: { options: "options", picked: "picked", activeIndex: "activeIndex", listboxId: "listboxId", loading: "loading", groupKey: "groupKey", optionsPosition: "optionsPosition", showIcons: "showIcons", showImages: "showImages", showCounts: "showCounts" }, outputs: { select: "select", highlight: "highlight", unhighlight: "unhighlight" }, host: { listeners: { "window:resize": "onResize()" } }, viewQueries: [{ propertyName: "gridComp", first: true, predicate: GridComponent, descendants: true }], usesOnChanges: true, ngImport: i0, template: "<!-- max=\"1fr\": columns share out the full width, so a lone column spans the\n whole options box instead of stopping at 250px. -->\n<aia-grid\n min=\"250px\"\n max=\"1fr\"\n gap=\"0\"\n [scroll]=\"true\"\n [scrollResetKey]=\"groupKey\"\n [template]=\"plan.template\"\n [maxHeight]=\"plan.maxHeight\"\n [group]=\"groupKey\"\n>\n <aia-suggestion-item\n *ngFor=\"let option of options; trackBy: trackByOptionText; let i = index\"\n [option]=\"option\"\n [isHighlighted]=\"i === activeIndex\"\n [checked]=\"picked ? picked.includes(option.text) : undefined\"\n [id]=\"listboxId + '-option-' + i\"\n [loading]=\"loading\"\n [showIcon]=\"showIcons && leadingVisuals\"\n [showImage]=\"showImages && leadingVisuals\"\n [showCount]=\"showCounts\"\n [scrollHint]=\"isScrollHint(i)\"\n [enterDelayMs]=\"enterDelayMs(i)\"\n (select)=\"select.emit($event)\"\n (highlight)=\"highlight.emit(i)\"\n (unhighlight)=\"unhighlight.emit(i)\"\n ></aia-suggestion-item>\n</aia-grid>\n", dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i1.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "component", type: GridComponent, selector: "aia-grid", inputs: ["min", "max", "gap", "scroll", "maxHeight", "scrollResetKey", "cols", "template", "group"] }, { kind: "component", type: SuggestionItemComponent, selector: "aia-suggestion-item", inputs: ["option", "checked", "isHighlighted", "id", "loading", "showIcon", "showImage", "showCount", "scrollHint", "enterDelayMs"], outputs: ["select", "highlight", "unhighlight"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None });
|
|
134
134
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.10", ngImport: i0, type: SuggestionGridComponent, decorators: [{
|
|
135
135
|
type: Component,
|
|
136
|
-
args: [{ selector: "aia-suggestion-grid", standalone: true, imports: [CommonModule, GridComponent, SuggestionItemComponent], changeDetection: ChangeDetectionStrategy.OnPush, encapsulation: ViewEncapsulation.None, template: "<!-- max=\"1fr\": columns share out the full width, so a lone column spans the\n whole options box instead of stopping at 250px. -->\n<aia-grid\n min=\"250px\"\n max=\"1fr\"\n gap=\"0\"\n [scroll]=\"true\"\n [scrollResetKey]=\"groupKey\"\n [template]=\"plan.template\"\n [maxHeight]=\"plan.maxHeight\"\n [group]=\"groupKey\"\n>\n <aia-suggestion-item\n *ngFor=\"let option of options; trackBy: trackByOptionText; let i = index\"\n [option]=\"option\"\n [isHighlighted]=\"i === activeIndex\"\n [id]=\"listboxId + '-option-' + i\"\n [loading]=\"loading\"\n [showIcon]=\"showIcons && leadingVisuals\"\n [showImage]=\"showImages && leadingVisuals\"\n [showCount]=\"showCounts\"\n [scrollHint]=\"isScrollHint(i)\"\n [enterDelayMs]=\"enterDelayMs(i)\"\n (select)=\"select.emit($event)\"\n (highlight)=\"highlight.emit(i)\"\n (unhighlight)=\"unhighlight.emit(i)\"\n ></aia-suggestion-item>\n</aia-grid>\n" }]
|
|
136
|
+
args: [{ selector: "aia-suggestion-grid", standalone: true, imports: [CommonModule, GridComponent, SuggestionItemComponent], changeDetection: ChangeDetectionStrategy.OnPush, encapsulation: ViewEncapsulation.None, template: "<!-- max=\"1fr\": columns share out the full width, so a lone column spans the\n whole options box instead of stopping at 250px. -->\n<aia-grid\n min=\"250px\"\n max=\"1fr\"\n gap=\"0\"\n [scroll]=\"true\"\n [scrollResetKey]=\"groupKey\"\n [template]=\"plan.template\"\n [maxHeight]=\"plan.maxHeight\"\n [group]=\"groupKey\"\n>\n <aia-suggestion-item\n *ngFor=\"let option of options; trackBy: trackByOptionText; let i = index\"\n [option]=\"option\"\n [isHighlighted]=\"i === activeIndex\"\n [checked]=\"picked ? picked.includes(option.text) : undefined\"\n [id]=\"listboxId + '-option-' + i\"\n [loading]=\"loading\"\n [showIcon]=\"showIcons && leadingVisuals\"\n [showImage]=\"showImages && leadingVisuals\"\n [showCount]=\"showCounts\"\n [scrollHint]=\"isScrollHint(i)\"\n [enterDelayMs]=\"enterDelayMs(i)\"\n (select)=\"select.emit($event)\"\n (highlight)=\"highlight.emit(i)\"\n (unhighlight)=\"unhighlight.emit(i)\"\n ></aia-suggestion-item>\n</aia-grid>\n" }]
|
|
137
137
|
}], propDecorators: { options: [{
|
|
138
138
|
type: Input
|
|
139
|
+
}], picked: [{
|
|
140
|
+
type: Input
|
|
139
141
|
}], activeIndex: [{
|
|
140
142
|
type: Input
|
|
141
143
|
}], listboxId: [{
|
|
@@ -165,4 +167,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.10", ngImpo
|
|
|
165
167
|
type: HostListener,
|
|
166
168
|
args: ["window:resize"]
|
|
167
169
|
}] } });
|
|
168
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic3VnZ2VzdGlvbi1ncmlkLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3NyYy9saWIvaW50ZXJuYWwvc3VnZ2VzdGlvbi1ncmlkL3N1Z2dlc3Rpb24tZ3JpZC5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi9zcmMvbGliL2ludGVybmFsL3N1Z2dlc3Rpb24tZ3JpZC9zdWdnZXN0aW9uLWdyaWQuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBQy9DLE9BQU8sRUFFTCx1QkFBdUIsRUFDdkIsaUJBQWlCLEVBQ2pCLFNBQVMsRUFDVCxZQUFZLEVBQ1osWUFBWSxFQUNaLEtBQUssRUFDTCxNQUFNLEVBRU4sTUFBTSxFQUVOLFNBQVMsRUFDVCxpQkFBaUIsR0FDbEIsTUFBTSxlQUFlLENBQUM7QUFDdkIsT0FBTyxFQUNMLDJCQUEyQixFQUMzQixrQkFBa0IsRUFDbEIsMkJBQTJCLEVBRTNCLGtCQUFrQixFQUNsQix5QkFBeUIsRUFDekIsZUFBZSxFQUVmLGNBQWMsR0FDZixNQUFNLHFDQUFxQyxDQUFDO0FBQzdDLE9BQU8sRUFBRSxhQUFhLEVBQUUsTUFBTSwwQkFBMEIsQ0FBQztBQUN6RCxPQUFPLEVBQUUsdUJBQXVCLEVBQUUsTUFBTSw4Q0FBOEMsQ0FBQzs7O0FBRXZGOzs7Ozs7OztHQVFHO0FBU0gsTUFBTSxPQUFPLHVCQUF1QjtJQVJwQztRQVNXLFlBQU8sR0FBdUIsRUFBRSxDQUFDO1FBQ2pDLGdCQUFXLEdBQUcsQ0FBQyxDQUFDLENBQUM7UUFDakIsY0FBUyxHQUFHLEVBQUUsQ0FBQztRQUNmLFlBQU8sR0FBRyxLQUFLLENBQUM7UUFDekI7Ozs7V0FJRztRQUNNLGFBQVEsR0FBRyxFQUFFLENBQUM7UUFDdkI7OztXQUdHO1FBQ00sb0JBQWUsR0FBc0IsT0FBTyxDQUFDO1FBQ3RELHlFQUF5RTtR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SkFBRSx1QkFBdUI7NEZBS25ELHVCQUF1QjtrQkFSbkMsU0FBUzsrQkFDRSxxQkFBcUIsY0FDbkIsSUFBSSxXQUNQLENBQUMsWUFBWSxFQUFFLGFBQWEsRUFBRSx1QkFBdUIsQ0FBQyxtQkFDOUMsdUJBQXVCLENBQUMsTUFBTSxpQkFDaEMsaUJBQWlCLENBQUMsSUFBSTs4QkFJNUIsT0FBTztzQkFBZixLQUFLO2dCQUNHLFdBQVc7c0JBQW5CLEtBQUs7Z0JBQ0csU0FBUztzQkFBakIsS0FBSztnQkFDRyxPQUFPO3NCQUFmLEtBQUs7Z0JBTUcsUUFBUTtzQkFBaEIsS0FBSztnQkFLRyxlQUFlO3NCQUF2QixLQUFLO2dCQUVHLFNBQVM7c0JBQWpCLEtBQUs7Z0JBRUcsVUFBVTtzQkFBbEIsS0FBSztnQkFFRyxVQUFVO3NCQUFsQixLQUFLO2dCQVVhLE1BQU07c0JBQXhCLE1BQU07Z0JBQ1ksU0FBUztzQkFBM0IsTUFBTTtnQkFFWSxXQUFXO3NCQUE3QixNQUFNO2dCQUk4QyxRQUFRO3NCQUE1RCxTQUFTO3VCQUFDLGFBQWEsRUFBRSxFQUFFLE1BQU0sRUFBRSxLQUFLLEVBQUU7Z0JBbUIzQyxRQUFRO3NCQURQLFlBQVk7dUJBQUMsZUFBZSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENvbW1vbk1vZHVsZSB9IGZyb20gXCJAYW5ndWxhci9jb21tb25cIjtcbmltcG9ydCB7XG4gIHR5cGUgQWZ0ZXJWaWV3Q2hlY2tlZCxcbiAgQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3ksXG4gIENoYW5nZURldGVjdG9yUmVmLFxuICBDb21wb25lbnQsXG4gIEV2ZW50RW1pdHRlcixcbiAgSG9zdExpc3RlbmVyLFxuICBJbnB1dCxcbiAgaW5qZWN0LFxuICB0eXBlIE9uQ2hhbmdlcyxcbiAgT3V0cHV0LFxuICB0eXBlIFNpbXBsZUNoYW5nZXMsXG4gIFZpZXdDaGlsZCxcbiAgVmlld0VuY2Fwc3VsYXRpb24sXG59IGZyb20gXCJAYW5ndWxhci9jb3JlXCI7XG5pbXBvcnQge1xuICBpc09wdGlvbnNHcmlkTW9iaWxlVmlld3BvcnQsXG4gIG1lYXN1cmVPcHRpb25zR3JpZCxcbiAgbmVlZHNPcHRpb25zR3JpZE1lYXN1cmVtZW50LFxuICB0eXBlIE9wdGlvbnNHcmlkUGxhbixcbiAgb3B0aW9uRW50ZXJEZWxheU1zLFxuICBvcHRpb25zU2hvd0xlYWRpbmdWaXN1YWxzLFxuICBwbGFuT3B0aW9uc0dyaWQsXG4gIHR5cGUgU3VnZ2VzdGlvbk9wdGlvbixcbiAgc2FtZU9wdGlvblJvd3MsXG59IGZyb20gXCJAbWFnaWN4LWVuZy9haS1hdXRvY29tcGxldGUtdmFuaWxsYVwiO1xuaW1wb3J0IHsgR3JpZENvbXBvbmVudCB9IGZyb20gXCIuLi9sYXlvdXQvZ3JpZC5jb21wb25lbnRcIjtcbmltcG9ydCB7IFN1Z2dlc3Rpb25JdGVtQ29tcG9uZW50IH0gZnJvbSBcIi4uL3N1Z2dlc3Rpb24taXRlbS9zdWdnZXN0aW9uLWl0ZW0uY29tcG9uZW50XCI7XG5cbi8qKlxuICogSW50ZXJuYWwgZ3JpZCBvZiBzdWdnZXN0aW9uIG9wdGlvbnMuIE1pcnJvcnNcbiAqIGBwYWNrYWdlcy9yZWFjdC9zcmMvY29tcG9uZW50cy9TdWdnZXN0aW9uR3JpZC50c3hgIOKAlCBhIHRoaW4gd3JhcHBlciBvdmVyIHRoZVxuICogYEdyaWRgIGxheW91dCBwcmltaXRpdmUgKHdoaWNoIG93bnMgdGhlIGF1dG8tZml0IGNvbHVtbnMgYW5kIHRoZVxuICogY2FwcGVkLWhlaWdodCBzY3JvbGwpLiBJdCBvbmx5IHdpcmVzIGVhY2ggb3B0aW9uIHRvIGl0c1xuICogc2VsZWN0L2hpZ2hsaWdodCBoYW5kbGVycyBhbmQgbGlzdGJveC1zY29wZWQgaWQuXG4gKlxuICogQGludGVybmFsXG4gKi9cbkBDb21wb25lbnQoe1xuICBzZWxlY3RvcjogXCJhaWEtc3VnZ2VzdGlvbi1ncmlkXCIsXG4gIHN0YW5kYWxvbmU6IHRydWUsXG4gIGltcG9ydHM6IFtDb21tb25Nb2R1bGUsIEdyaWRDb21wb25lbnQsIFN1Z2dlc3Rpb25JdGVtQ29tcG9uZW50XSxcbiAgY2hhbmdlRGV0ZWN0aW9uOiBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneS5PblB1c2gsXG4gIGVuY2Fwc3VsYXRpb246IFZpZXdFbmNhcHN1bGF0aW9uLk5vbmUsXG4gIHRlbXBsYXRlVXJsOiBcIi4vc3VnZ2VzdGlvbi1ncmlkLmNvbXBvbmVudC5odG1sXCIsXG59KVxuZXhwb3J0IGNsYXNzIFN1Z2dlc3Rpb25HcmlkQ29tcG9uZW50IGltcGxlbWVudHMgT25DaGFuZ2VzLCBBZnRlclZpZXdDaGVja2VkIHtcbiAgQElucHV0KCkgb3B0aW9uczogU3VnZ2VzdGlvbk9wdGlvbltdID0gW107XG4gIEBJbnB1dCgpIGFjdGl2ZUluZGV4ID0gLTE7XG4gIEBJbnB1dCgpIGxpc3Rib3hJZCA9IFwiXCI7XG4gIEBJbnB1dCgpIGxvYWRpbmcgPSBmYWxzZTtcbiAgLyoqXG4gICAqIElkZW50aXR5IG9mIHRoZSBzdWdnZXN0aW9uIHRoZXNlIG9wdGlvbnMgYmVsb25nIHRvLiBXaGVuIGl0IGNoYW5nZXMgdGhlXG4gICAqIGdyaWQgc2Nyb2xscyBiYWNrIHRvIHRoZSB0b3AsIHNvIHRoZSBuZXh0IHBhcmFtZXRlcidzIG9wdGlvbnMgYXJlIHJlYWRcbiAgICogZnJvbSB0aGUgZmlyc3Qgb25lIGluc3RlYWQgb2YgZnJvbSB0aGUgcHJldmlvdXMgbGlzdCdzIHNjcm9sbCBvZmZzZXQuXG4gICAqL1xuICBASW5wdXQoKSBncm91cEtleSA9IFwiXCI7XG4gIC8qKlxuICAgKiBXaGljaCBzaWRlIG9mIHRoZSBpbnB1dCB0aGUgZHJvcGRvd24gb3BlbnMgb24uIFRoZSByb3dzJyBlbnRyYW5jZSBzdGFydHNcbiAgICogZnJvbSB0aGUgaW5wdXQncyBzaWRlIG91dHdhcmQsIHNvIFwiYWJvdmVcIiByZXZlcnNlcyB0aGUgb3JkZXIuXG4gICAqL1xuICBASW5wdXQoKSBvcHRpb25zUG9zaXRpb246IFwiYWJvdmVcIiB8IFwiYmVsb3dcIiA9IFwiYmVsb3dcIjtcbiAgLyoqIFdoZXRoZXIgcm93cyBkcmF3IHRoZWlyIGBpY29uX3N2Z2AgYmVmb3JlIHRoZSB0ZXh0LiBEZWZhdWx0OiB0cnVlLiAqL1xuICBASW5wdXQoKSBzaG93SWNvbnMgPSB0cnVlO1xuICAvKiogV2hldGhlciByb3dzIGRyYXcgdGhlaXIgYGltYWdlX3VybGAgYXMgYSB0aHVtYm5haWwgYmVmb3JlIHRoZSB0ZXh0LiBEZWZhdWx0OiB0cnVlLiAqL1xuICBASW5wdXQoKSBzaG93SW1hZ2VzID0gdHJ1ZTtcbiAgLyoqIFdoZXRoZXIgcm93cyBzaG93IHRoZWlyIGBpdGVtX2NvdW50YCBhdCB0aGUgdHJhaWxpbmcgZWRnZS4gRGVmYXVsdDogdHJ1ZS4gKi9cbiAgQElucHV0KCkgc2hvd0NvdW50cyA9IHRydWU7XG5cbiAgLyoqXG4gICAqIEljb25zIGFuZCBwaWN0dXJlcyBhcmUgYWxsLW9yLW5vdGhpbmcgYWNyb3NzIHRoZSBsaXN0IOKAlCBubyBzaW5nbGUgcm93IGNhblxuICAgKiBkZWNpZGUgaXRzIG93biAoc2VlIGBvcHRpb25zU2hvd0xlYWRpbmdWaXN1YWxzYCkuXG4gICAqL1xuICBnZXQgbGVhZGluZ1Zpc3VhbHMoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIG9wdGlvbnNTaG93TGVhZGluZ1Zpc3VhbHModGhpcy5vcHRpb25zLCB0aGlzLnNob3dJY29ucywgdGhpcy5zaG93SW1hZ2VzKTtcbiAgfVxuXG4gIEBPdXRwdXQoKSByZWFkb25seSBzZWxlY3QgPSBuZXcgRXZlbnRFbWl0dGVyPFN1Z2dlc3Rpb25PcHRpb24+KCk7XG4gIEBPdXRwdXQoKSByZWFkb25seSBoaWdobGlnaHQgPSBuZXcgRXZlbnRFbWl0dGVyPG51bWJlcj4oKTtcbiAgLyoqIFRoZSBwb2ludGVyIGxlZnQgb3B0aW9uIGBpbmRleGAg4oCUIHRoZSBkcm9wZG93biBjbGVhcnMgYSBoaWdobGlnaHQgc3RpbGwgb24gaXQuICovXG4gIEBPdXRwdXQoKSByZWFkb25seSB1bmhpZ2hsaWdodCA9IG5ldyBFdmVudEVtaXR0ZXI8bnVtYmVyPigpO1xuXG4gIHByaXZhdGUgcmVhZG9ubHkgY2RyID0gaW5qZWN0KENoYW5nZURldGVjdG9yUmVmKTtcblxuICBAVmlld0NoaWxkKEdyaWRDb21wb25lbnQsIHsgc3RhdGljOiBmYWxzZSB9KSBwcml2YXRlIGdyaWRDb21wPzogR3JpZENvbXBvbmVudDtcblxuICAvKipcbiAgICogVGhlIG1lYXN1cmVkIGxheW91dCBwbGFuLiBTdGFydHMgYXMgdGhlIG1lYXN1cmVtZW50LWZyZWUgYmFzZWxpbmUgKG9uZVxuICAgKiBjb2x1bW4pOyBhZnRlciBlYWNoIHZpZXcgdXBkYXRlIHRoZSByZW5kZXJlZCByb3dzIGFyZSBtZWFzdXJlZCBhbmQgdGhlXG4gICAqIHBsYW4gdXBncmFkZXMgdG8gdHdvIGNvbHVtbnMgd2hlbiB0aGV5IHByb3ZhYmx5IGZpdCDigJQgc2FtZSB0d28tcGFzcyB0aGVcbiAgICogUmVhY3QgZ3JpZCBkb2VzIHdpdGggaXRzIGxheW91dCBlZmZlY3QsIGFsbCB0aHJvdWdoIGBwbGFuT3B0aW9uc0dyaWRgLlxuICAgKi9cbiAgcGxhbjogT3B0aW9uc0dyaWRQbGFuID0gcGxhbk9wdGlvbnNHcmlkKDAsIGZhbHNlLCBudWxsLCBudWxsKTtcbiAgcHJpdmF0ZSBuZWVkc01lYXN1cmUgPSB0cnVlO1xuICAvKipcbiAgICogVGhlIHJvd3MgdGhlIGN1cnJlbnQgcGxhbiB3YXMgbWVhc3VyZWQgZnJvbS4gQSBza2VsZXRvbiBtaXJyb3JpbmcgdGhlbVxuICAgKiBrZWVwcyB0aGF0IHBsYW4g4oCUIHNlZSBgc2FtZU9wdGlvblJvd3NgLlxuICAgKi9cbiAgcHJpdmF0ZSBtZWFzdXJlZFJvd3M6IFN1Z2dlc3Rpb25PcHRpb25bXSB8IG51bGwgPSBudWxsO1xuXG4gIC8vIFJlLW1lYXN1cmUgd2hlbiB0aGUgdmlld3BvcnQgY2hhbmdlcyAoYnJlYWtwb2ludCBvciB3aWR0aCBib3RoIG1hdHRlciB0b1xuICAvLyB0aGUgdHdvLWNvbHVtbiBmaXQpLlxuICBASG9zdExpc3RlbmVyKFwid2luZG93OnJlc2l6ZVwiKVxuICBvblJlc2l6ZSgpOiB2b2lkIHtcbiAgICB0aGlzLm5lZWRzTWVhc3VyZSA9IHRydWU7XG4gICAgdGhpcy5jZHIubWFya0ZvckNoZWNrKCk7XG4gIH1cblxuICBuZ09uQ2hhbmdlcyhjaGFuZ2VzOiBTaW1wbGVDaGFuZ2VzKTogdm9pZCB7XG4gICAgLy8gT25seSB0aGUgaW5wdXRzIHRoZSBwbGFuIGRlcGVuZHMgb24gcmVzZXQgaXQg4oCUIGFjdGl2ZUluZGV4IGNoYW5nZXMgb25cbiAgICAvLyBldmVyeSBhcnJvdyBrZXkgYW5kIG11c3Qgbm90IGtub2NrIGEgbWVhc3VyZWQgdHdvLWNvbHVtbiBncmlkIGJhY2sgdG9cbiAgICAvLyB0aGUgYmFzZWxpbmUgKHRoZSBSZWFjdCBncmlkJ3MgbGF5b3V0IGVmZmVjdCBleGNsdWRlcyBpdCB0aGUgc2FtZSB3YXkpLlxuICAgIGlmICghY2hhbmdlc1tcIm9wdGlvbnNcIl0gJiYgIWNoYW5nZXNbXCJsb2FkaW5nXCJdKSByZXR1cm47XG4gICAgaWYgKHRoaXMubG9hZGluZyAmJiBzYW1lT3B0aW9uUm93cyh0aGlzLm1lYXN1cmVkUm93cywgdGhpcy5vcHRpb25zKSkgcmV0dXJuO1xuICAgIHRoaXMubWVhc3VyZWRSb3dzID0gdGhpcy5sb2FkaW5nID8gbnVsbCA6IHRoaXMub3B0aW9ucztcbiAgICB0aGlzLm5lZWRzTWVhc3VyZSA9IHRydWU7XG4gICAgLy8gVGhlIHByZS1tZWFzdXJlIGJhc2VsaW5lIGZvciB0aGUgbmV3IGlucHV0cywgc28gdGhlIGZpcnN0IHBhaW50IGlzIHRoZVxuICAgIC8vIHNhbWUgb25lLWNvbHVtbiBsYXlvdXQgdGhlIG90aGVyIHBhY2thZ2VzIHN0YXJ0IGZyb20uXG4gICAgdGhpcy5wbGFuID0gcGxhbk9wdGlvbnNHcmlkKHRoaXMub3B0aW9ucy5sZW5ndGgsIGlzT3B0aW9uc0dyaWRNb2JpbGVWaWV3cG9ydCgpLCBudWxsLCBudWxsKTtcbiAgfVxuXG4gIG5nQWZ0ZXJWaWV3Q2hlY2tlZCgpOiB2b2lkIHtcbiAgICBpZiAoIXRoaXMubmVlZHNNZWFzdXJlKSByZXR1cm47XG4gICAgdGhpcy5uZWVkc01lYXN1cmUgPSBmYWxzZTtcbiAgICBjb25zdCBpc01vYmlsZSA9IGlzT3B0aW9uc0dyaWRNb2JpbGVWaWV3cG9ydCgpO1xuICAgIGNvbnN0IGdyaWQgPSB0aGlzLmdyaWRDb21wPy5ncmlkUmVmPy5uYXRpdmVFbGVtZW50O1xuICAgIC8vIE1lYXN1cmluZyBjbG9uZXMgZXZlcnkgcm93IGFuZCBmb3JjZXMgYSBsYXlvdXQg4oCUIHNraXAgaXQgd2hlbmV2ZXIgdGhlXG4gICAgLy8gcGxhbiB3b3VsZCBpZ25vcmUgdGhlIHJlc3VsdCAobW9iaWxlLCBmZXdlciB0aGFuIGZpdmUgb3B0aW9ucykuXG4gICAgY29uc3Qgc2hvdWxkTWVhc3VyZSA9XG4gICAgICBncmlkICYmICF0aGlzLmxvYWRpbmcgJiYgbmVlZHNPcHRpb25zR3JpZE1lYXN1cmVtZW50KHRoaXMub3B0aW9ucy5sZW5ndGgsIGlzTW9iaWxlKTtcbiAgICBjb25zdCBtZWFzdXJlZCA9IHNob3VsZE1lYXN1cmUgPyBtZWFzdXJlT3B0aW9uc0dyaWQoZ3JpZCkgOiBudWxsO1xuICAgIGNvbnN0IG5leHQgPSBwbGFuT3B0aW9uc0dyaWQoXG4gICAgICB0aGlzLm9wdGlvbnMubGVuZ3RoLFxuICAgICAgaXNNb2JpbGUsXG4gICAgICBtZWFzdXJlZD8ucm93V2lkdGhzID8/IG51bGwsXG4gICAgICBtZWFzdXJlZD8uZ3JpZFdpZHRoID8/IG51bGwsXG4gICAgKTtcbiAgICBjb25zdCB1bmNoYW5nZWQgPVxuICAgICAgbmV4dC50ZW1wbGF0ZSA9PT0gdGhpcy5wbGFuLnRlbXBsYXRlICYmXG4gICAgICBuZXh0Lm1heEhlaWdodCA9PT0gdGhpcy5wbGFuLm1heEhlaWdodCAmJlxuICAgICAgbmV4dC5zY3JvbGxIaW50SW5kaWNlcy5qb2luKCkgPT09IHRoaXMucGxhbi5zY3JvbGxIaW50SW5kaWNlcy5qb2luKCk7XG4gICAgaWYgKHVuY2hhbmdlZCkgcmV0dXJuO1xuICAgIC8vIFRoZSB2aWV3IHdhcyBhbHJlYWR5IGNoZWNrZWQgdGhpcyBjeWNsZSDigJQgYXBwbHkgdGhlIG1lYXN1cmVkIHBsYW4gaW4gYVxuICAgIC8vIGZyZXNoIG1pY3JvdGFzayBzbyBPblB1c2ggcGlja3MgaXQgdXAgd2l0aG91dCBhblxuICAgIC8vIEV4cHJlc3Npb25DaGFuZ2VkQWZ0ZXJJdEhhc0JlZW5DaGVja2VkIGVycm9yLlxuICAgIHF1ZXVlTWljcm90YXNrKCgpID0+IHtcbiAgICAgIHRoaXMucGxhbiA9IG5leHQ7XG4gICAgICB0aGlzLmNkci5tYXJrRm9yQ2hlY2soKTtcbiAgICB9KTtcbiAgfVxuXG4gIGlzU2Nyb2xsSGludChpbmRleDogbnVtYmVyKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuICF0aGlzLmxvYWRpbmcgJiYgdGhpcy5wbGFuLnNjcm9sbEhpbnRJbmRpY2VzLmluY2x1ZGVzKGluZGV4KTtcbiAgfVxuXG4gIC8qKlxuICAgKiBTdGFydCBkZWxheSBvZiByb3cgYGluZGV4YCdzIGVudHJhbmNlIOKAlCBlYWNoIHJvdyByaXNlcyBpbiBhIGJlYXQgYWZ0ZXJcbiAgICogdGhlIG9uZSBuZWFyZXIgdGhlIGlucHV0LiBTa2VsZXRvbiByb3dzIGZhZGUgaW4gdG9nZXRoZXIgKHRoZXkncmVcbiAgICogcGxhY2Vob2xkZXJzLCBub3QgY29udGVudCBhcnJpdmluZykuXG4gICAqL1xuICBlbnRlckRlbGF5TXMoaW5kZXg6IG51bWJlcik6IG51bWJlciB7XG4gICAgaWYgKHRoaXMubG9hZGluZykgcmV0dXJuIDA7XG4gICAgLy8gQWNyb3NzIHRoZSBjb2x1bW5zIHRoZSBtZWFzdXJlZCBwbGFuIHNldHRsZWQgb24g4oCUIHRoZSB0d28tY29sdW1uXG4gICAgLy8gdXBncmFkZSBvbmx5IGRlY2lkZXMgdGhhdCBhZnRlciB0aGUgcm93cyBleGlzdC5cbiAgICByZXR1cm4gb3B0aW9uRW50ZXJEZWxheU1zKGluZGV4LCB0aGlzLnBsYW4uY29scywgdGhpcy5vcHRpb25zLmxlbmd0aCwgdGhpcy5vcHRpb25zUG9zaXRpb24pO1xuICB9XG5cbiAgLyoqXG4gICAqIFRoZSBncm91cCBpcyBwYXJ0IG9mIHRoZSBpZGVudGl0eTogYSBuZXcgc3VnZ2VzdGlvbidzIG9wdGlvbnMgYXJlIG5ld1xuICAgKiByb3dzIGFuZCBnZXQgdGhlIGVudHJhbmNlIGFuaW1hdGlvbiBldmVuIHdoZW4gb25lIHNwZWxscyB0aGUgc2FtZSBhcyBhXG4gICAqIHJvdyBhbHJlYWR5IG9uIHNjcmVlbi5cbiAgICovXG4gIHRyYWNrQnlPcHRpb25UZXh0ID0gKF86IG51bWJlciwgb3B0OiBTdWdnZXN0aW9uT3B0aW9uKTogc3RyaW5nID0+IGAke3RoaXMuZ3JvdXBLZXl9XFwwJHtvcHQudGV4dH1gO1xufVxuIiwiPCEtLSBtYXg9XCIxZnJcIjogY29sdW1ucyBzaGFyZSBvdXQgdGhlIGZ1bGwgd2lkdGgsIHNvIGEgbG9uZSBjb2x1bW4gc3BhbnMgdGhlXG4gICAgIHdob2xlIG9wdGlvbnMgYm94IGluc3RlYWQgb2Ygc3RvcHBpbmcgYXQgMjUwcHguIC0tPlxuPGFpYS1ncmlkXG4gIG1pbj1cIjI1MHB4XCJcbiAgbWF4PVwiMWZyXCJcbiAgZ2FwPVwiMFwiXG4gIFtzY3JvbGxdPVwidHJ1ZVwiXG4gIFtzY3JvbGxSZXNldEtleV09XCJncm91cEtleVwiXG4gIFt0ZW1wbGF0ZV09XCJwbGFuLnRlbXBsYXRlXCJcbiAgW21heEhlaWdodF09XCJwbGFuLm1heEhlaWdodFwiXG4gIFtncm91cF09XCJncm91cEtleVwiXG4+XG4gIDxhaWEtc3VnZ2VzdGlvbi1pdGVtXG4gICAgKm5nRm9yPVwibGV0IG9wdGlvbiBvZiBvcHRpb25zOyB0cmFja0J5OiB0cmFja0J5T3B0aW9uVGV4dDsgbGV0IGkgPSBpbmRleFwiXG4gICAgW29wdGlvbl09XCJvcHRpb25cIlxuICAgIFtpc0hpZ2hsaWdodGVkXT1cImkgPT09IGFjdGl2ZUluZGV4XCJcbiAgICBbaWRdPVwibGlzdGJveElkICsgJy1vcHRpb24tJyArIGlcIlxuICAgIFtsb2FkaW5nXT1cImxvYWRpbmdcIlxuICAgIFtzaG93SWNvbl09XCJzaG93SWNvbnMgJiYgbGVhZGluZ1Zpc3VhbHNcIlxuICAgIFtzaG93SW1hZ2VdPVwic2hvd0ltYWdlcyAmJiBsZWFkaW5nVmlzdWFsc1wiXG4gICAgW3Nob3dDb3VudF09XCJzaG93Q291bnRzXCJcbiAgICBbc2Nyb2xsSGludF09XCJpc1Njcm9sbEhpbnQoaSlcIlxuICAgIFtlbnRlckRlbGF5TXNdPVwiZW50ZXJEZWxheU1zKGkpXCJcbiAgICAoc2VsZWN0KT1cInNlbGVjdC5lbWl0KCRldmVudClcIlxuICAgIChoaWdobGlnaHQpPVwiaGlnaGxpZ2h0LmVtaXQoaSlcIlxuICAgICh1bmhpZ2hsaWdodCk9XCJ1bmhpZ2hsaWdodC5lbWl0KGkpXCJcbiAgPjwvYWlhLXN1Z2dlc3Rpb24taXRlbT5cbjwvYWlhLWdyaWQ+XG4iXX0=
|
|
170
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic3VnZ2VzdGlvbi1ncmlkLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3NyYy9saWIvaW50ZXJuYWwvc3VnZ2VzdGlvbi1ncmlkL3N1Z2dlc3Rpb24tZ3JpZC5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi9zcmMvbGliL2ludGVybmFsL3N1Z2dlc3Rpb24tZ3JpZC9zdWdnZXN0aW9uLWdyaWQuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBQy9DLE9BQU8sRUFFTCx1QkFBdUIsRUFDdkIsaUJBQWlCLEVBQ2pCLFNBQVMsRUFDVCxZQUFZLEVBQ1osWUFBWSxFQUNaLEtBQUssRUFDTCxNQUFNLEVBRU4sTUFBTSxFQUVOLFNBQVMsRUFDVCxpQkFBaUIsR0FDbEIsTUFBTSxlQUFlLENBQUM7QUFDdkIsT0FBTyxFQUNMLDJCQUEyQixFQUMzQixrQkFBa0IsRUFDbEIsMkJBQTJCLEVBRTNCLGtCQUFrQixFQUNsQix5QkFBeUIsRUFDekIsZUFBZSxFQUVmLGNBQWMsR0FDZixNQUFNLHFDQUFxQyxDQUFDO0FBQzdDLE9BQU8sRUFBRSxhQUFhLEVBQUUsTUFBTSwwQkFBMEIsQ0FBQztBQUN6RCxPQUFPLEVBQUUsdUJBQXVCLEVBQUUsTUFBTSw4Q0FBOEMsQ0FBQzs7O0FBRXZGOzs7Ozs7OztHQVFHO0FBU0gsTUFBTSxPQUFPLHVCQUF1QjtJQVJwQztRQVNXLFlBQU8sR0FBdUIsRUFBRSxDQUFDO1FBRWpDLGdCQUFXLEdBQUcsQ0FBQyxDQUFDLENBQUM7UUFDakIsY0FBUyxHQUFHLEVBQUUsQ0FBQztRQUNmLFlBQU8sR0FBRyxLQUFLLENBQUM7UUFDekI7Ozs7V0FJRztRQUNNLGFBQVEsR0FBRyxFQUFFLENBQUM7UUFDdkI7OztXQUdHO1FBQ00sb0JBQWUsR0FBc0IsT0FBTyxDQUFDO1FBQ3RELHlFQUF5RTtR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MEpBQUUsdUJBQXVCOzRGQUtuRCx1QkFBdUI7a0JBUm5DLFNBQVM7K0JBQ0UscUJBQXFCLGNBQ25CLElBQUksV0FDUCxDQUFDLFlBQVksRUFBRSxhQUFhLEVBQUUsdUJBQXVCLENBQUMsbUJBQzlDLHVCQUF1QixDQUFDLE1BQU0saUJBQ2hDLGlCQUFpQixDQUFDLElBQUk7OEJBSTVCLE9BQU87c0JBQWYsS0FBSztnQkFDRyxNQUFNO3NCQUFkLEtBQUs7Z0JBQ0csV0FBVztzQkFBbkIsS0FBSztnQkFDRyxTQUFTO3NCQUFqQixLQUFLO2dCQUNHLE9BQU87c0JBQWYsS0FBSztnQkFNRyxRQUFRO3NCQUFoQixLQUFLO2dCQUtHLGVBQWU7c0JBQXZCLEtBQUs7Z0JBRUcsU0FBUztzQkFBakIsS0FBSztnQkFFRyxVQUFVO3NCQUFsQixLQUFLO2dCQUVHLFVBQVU7c0JBQWxCLEtBQUs7Z0JBVWEsTUFBTTtzQkFBeEIsTUFBTTtnQkFDWSxTQUFTO3NCQUEzQixNQUFNO2dCQUVZLFdBQVc7c0JBQTdCLE1BQU07Z0JBSThDLFFBQVE7c0JBQTVELFNBQVM7dUJBQUMsYUFBYSxFQUFFLEVBQUUsTUFBTSxFQUFFLEtBQUssRUFBRTtnQkFtQjNDLFFBQVE7c0JBRFAsWUFBWTt1QkFBQyxlQUFlIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ29tbW9uTW9kdWxlIH0gZnJvbSBcIkBhbmd1bGFyL2NvbW1vblwiO1xuaW1wb3J0IHtcbiAgdHlwZSBBZnRlclZpZXdDaGVja2VkLFxuICBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneSxcbiAgQ2hhbmdlRGV0ZWN0b3JSZWYsXG4gIENvbXBvbmVudCxcbiAgRXZlbnRFbWl0dGVyLFxuICBIb3N0TGlzdGVuZXIsXG4gIElucHV0LFxuICBpbmplY3QsXG4gIHR5cGUgT25DaGFuZ2VzLFxuICBPdXRwdXQsXG4gIHR5cGUgU2ltcGxlQ2hhbmdlcyxcbiAgVmlld0NoaWxkLFxuICBWaWV3RW5jYXBzdWxhdGlvbixcbn0gZnJvbSBcIkBhbmd1bGFyL2NvcmVcIjtcbmltcG9ydCB7XG4gIGlzT3B0aW9uc0dyaWRNb2JpbGVWaWV3cG9ydCxcbiAgbWVhc3VyZU9wdGlvbnNHcmlkLFxuICBuZWVkc09wdGlvbnNHcmlkTWVhc3VyZW1lbnQsXG4gIHR5cGUgT3B0aW9uc0dyaWRQbGFuLFxuICBvcHRpb25FbnRlckRlbGF5TXMsXG4gIG9wdGlvbnNTaG93TGVhZGluZ1Zpc3VhbHMsXG4gIHBsYW5PcHRpb25zR3JpZCxcbiAgdHlwZSBTdWdnZXN0aW9uT3B0aW9uLFxuICBzYW1lT3B0aW9uUm93cyxcbn0gZnJvbSBcIkBtYWdpY3gtZW5nL2FpLWF1dG9jb21wbGV0ZS12YW5pbGxhXCI7XG5pbXBvcnQgeyBHcmlkQ29tcG9uZW50IH0gZnJvbSBcIi4uL2xheW91dC9ncmlkLmNvbXBvbmVudFwiO1xuaW1wb3J0IHsgU3VnZ2VzdGlvbkl0ZW1Db21wb25lbnQgfSBmcm9tIFwiLi4vc3VnZ2VzdGlvbi1pdGVtL3N1Z2dlc3Rpb24taXRlbS5jb21wb25lbnRcIjtcblxuLyoqXG4gKiBJbnRlcm5hbCBncmlkIG9mIHN1Z2dlc3Rpb24gb3B0aW9ucy4gTWlycm9yc1xuICogYHBhY2thZ2VzL3JlYWN0L3NyYy9jb21wb25lbnRzL1N1Z2dlc3Rpb25HcmlkLnRzeGAg4oCUIGEgdGhpbiB3cmFwcGVyIG92ZXIgdGhlXG4gKiBgR3JpZGAgbGF5b3V0IHByaW1pdGl2ZSAod2hpY2ggb3ducyB0aGUgYXV0by1maXQgY29sdW1ucyBhbmQgdGhlXG4gKiBjYXBwZWQtaGVpZ2h0IHNjcm9sbCkuIEl0IG9ubHkgd2lyZXMgZWFjaCBvcHRpb24gdG8gaXRzXG4gKiBzZWxlY3QvaGlnaGxpZ2h0IGhhbmRsZXJzIGFuZCBsaXN0Ym94LXNjb3BlZCBpZC5cbiAqXG4gKiBAaW50ZXJuYWxcbiAqL1xuQENvbXBvbmVudCh7XG4gIHNlbGVjdG9yOiBcImFpYS1zdWdnZXN0aW9uLWdyaWRcIixcbiAgc3RhbmRhbG9uZTogdHJ1ZSxcbiAgaW1wb3J0czogW0NvbW1vbk1vZHVsZSwgR3JpZENvbXBvbmVudCwgU3VnZ2VzdGlvbkl0ZW1Db21wb25lbnRdLFxuICBjaGFuZ2VEZXRlY3Rpb246IENoYW5nZURldGVjdGlvblN0cmF0ZWd5Lk9uUHVzaCxcbiAgZW5jYXBzdWxhdGlvbjogVmlld0VuY2Fwc3VsYXRpb24uTm9uZSxcbiAgdGVtcGxhdGVVcmw6IFwiLi9zdWdnZXN0aW9uLWdyaWQuY29tcG9uZW50Lmh0bWxcIixcbn0pXG5leHBvcnQgY2xhc3MgU3VnZ2VzdGlvbkdyaWRDb21wb25lbnQgaW1wbGVtZW50cyBPbkNoYW5nZXMsIEFmdGVyVmlld0NoZWNrZWQge1xuICBASW5wdXQoKSBvcHRpb25zOiBTdWdnZXN0aW9uT3B0aW9uW10gPSBbXTtcbiAgQElucHV0KCkgcGlja2VkPzogc3RyaW5nW107XG4gIEBJbnB1dCgpIGFjdGl2ZUluZGV4ID0gLTE7XG4gIEBJbnB1dCgpIGxpc3Rib3hJZCA9IFwiXCI7XG4gIEBJbnB1dCgpIGxvYWRpbmcgPSBmYWxzZTtcbiAgLyoqXG4gICAqIElkZW50aXR5IG9mIHRoZSBzdWdnZXN0aW9uIHRoZXNlIG9wdGlvbnMgYmVsb25nIHRvLiBXaGVuIGl0IGNoYW5nZXMgdGhlXG4gICAqIGdyaWQgc2Nyb2xscyBiYWNrIHRvIHRoZSB0b3AsIHNvIHRoZSBuZXh0IHBhcmFtZXRlcidzIG9wdGlvbnMgYXJlIHJlYWRcbiAgICogZnJvbSB0aGUgZmlyc3Qgb25lIGluc3RlYWQgb2YgZnJvbSB0aGUgcHJldmlvdXMgbGlzdCdzIHNjcm9sbCBvZmZzZXQuXG4gICAqL1xuICBASW5wdXQoKSBncm91cEtleSA9IFwiXCI7XG4gIC8qKlxuICAgKiBXaGljaCBzaWRlIG9mIHRoZSBpbnB1dCB0aGUgZHJvcGRvd24gb3BlbnMgb24uIFRoZSByb3dzJyBlbnRyYW5jZSBzdGFydHNcbiAgICogZnJvbSB0aGUgaW5wdXQncyBzaWRlIG91dHdhcmQsIHNvIFwiYWJvdmVcIiByZXZlcnNlcyB0aGUgb3JkZXIuXG4gICAqL1xuICBASW5wdXQoKSBvcHRpb25zUG9zaXRpb246IFwiYWJvdmVcIiB8IFwiYmVsb3dcIiA9IFwiYmVsb3dcIjtcbiAgLyoqIFdoZXRoZXIgcm93cyBkcmF3IHRoZWlyIGBpY29uX3N2Z2AgYmVmb3JlIHRoZSB0ZXh0LiBEZWZhdWx0OiB0cnVlLiAqL1xuICBASW5wdXQoKSBzaG93SWNvbnMgPSB0cnVlO1xuICAvKiogV2hldGhlciByb3dzIGRyYXcgdGhlaXIgYGltYWdlX3VybGAgYXMgYSB0aHVtYm5haWwgYmVmb3JlIHRoZSB0ZXh0LiBEZWZhdWx0OiB0cnVlLiAqL1xuICBASW5wdXQoKSBzaG93SW1hZ2VzID0gdHJ1ZTtcbiAgLyoqIFdoZXRoZXIgcm93cyBzaG93IHRoZWlyIGBpdGVtX2NvdW50YCBhdCB0aGUgdHJhaWxpbmcgZWRnZS4gRGVmYXVsdDogdHJ1ZS4gKi9cbiAgQElucHV0KCkgc2hvd0NvdW50cyA9IHRydWU7XG5cbiAgLyoqXG4gICAqIEljb25zIGFuZCBwaWN0dXJlcyBhcmUgYWxsLW9yLW5vdGhpbmcgYWNyb3NzIHRoZSBsaXN0IOKAlCBubyBzaW5nbGUgcm93IGNhblxuICAgKiBkZWNpZGUgaXRzIG93biAoc2VlIGBvcHRpb25zU2hvd0xlYWRpbmdWaXN1YWxzYCkuXG4gICAqL1xuICBnZXQgbGVhZGluZ1Zpc3VhbHMoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIG9wdGlvbnNTaG93TGVhZGluZ1Zpc3VhbHModGhpcy5vcHRpb25zLCB0aGlzLnNob3dJY29ucywgdGhpcy5zaG93SW1hZ2VzKTtcbiAgfVxuXG4gIEBPdXRwdXQoKSByZWFkb25seSBzZWxlY3QgPSBuZXcgRXZlbnRFbWl0dGVyPFN1Z2dlc3Rpb25PcHRpb24+KCk7XG4gIEBPdXRwdXQoKSByZWFkb25seSBoaWdobGlnaHQgPSBuZXcgRXZlbnRFbWl0dGVyPG51bWJlcj4oKTtcbiAgLyoqIFRoZSBwb2ludGVyIGxlZnQgb3B0aW9uIGBpbmRleGAg4oCUIHRoZSBkcm9wZG93biBjbGVhcnMgYSBoaWdobGlnaHQgc3RpbGwgb24gaXQuICovXG4gIEBPdXRwdXQoKSByZWFkb25seSB1bmhpZ2hsaWdodCA9IG5ldyBFdmVudEVtaXR0ZXI8bnVtYmVyPigpO1xuXG4gIHByaXZhdGUgcmVhZG9ubHkgY2RyID0gaW5qZWN0KENoYW5nZURldGVjdG9yUmVmKTtcblxuICBAVmlld0NoaWxkKEdyaWRDb21wb25lbnQsIHsgc3RhdGljOiBmYWxzZSB9KSBwcml2YXRlIGdyaWRDb21wPzogR3JpZENvbXBvbmVudDtcblxuICAvKipcbiAgICogVGhlIG1lYXN1cmVkIGxheW91dCBwbGFuLiBTdGFydHMgYXMgdGhlIG1lYXN1cmVtZW50LWZyZWUgYmFzZWxpbmUgKG9uZVxuICAgKiBjb2x1bW4pOyBhZnRlciBlYWNoIHZpZXcgdXBkYXRlIHRoZSByZW5kZXJlZCByb3dzIGFyZSBtZWFzdXJlZCBhbmQgdGhlXG4gICAqIHBsYW4gdXBncmFkZXMgdG8gdHdvIGNvbHVtbnMgd2hlbiB0aGV5IHByb3ZhYmx5IGZpdCDigJQgc2FtZSB0d28tcGFzcyB0aGVcbiAgICogUmVhY3QgZ3JpZCBkb2VzIHdpdGggaXRzIGxheW91dCBlZmZlY3QsIGFsbCB0aHJvdWdoIGBwbGFuT3B0aW9uc0dyaWRgLlxuICAgKi9cbiAgcGxhbjogT3B0aW9uc0dyaWRQbGFuID0gcGxhbk9wdGlvbnNHcmlkKDAsIGZhbHNlLCBudWxsLCBudWxsKTtcbiAgcHJpdmF0ZSBuZWVkc01lYXN1cmUgPSB0cnVlO1xuICAvKipcbiAgICogVGhlIHJvd3MgdGhlIGN1cnJlbnQgcGxhbiB3YXMgbWVhc3VyZWQgZnJvbS4gQSBza2VsZXRvbiBtaXJyb3JpbmcgdGhlbVxuICAgKiBrZWVwcyB0aGF0IHBsYW4g4oCUIHNlZSBgc2FtZU9wdGlvblJvd3NgLlxuICAgKi9cbiAgcHJpdmF0ZSBtZWFzdXJlZFJvd3M6IFN1Z2dlc3Rpb25PcHRpb25bXSB8IG51bGwgPSBudWxsO1xuXG4gIC8vIFJlLW1lYXN1cmUgd2hlbiB0aGUgdmlld3BvcnQgY2hhbmdlcyAoYnJlYWtwb2ludCBvciB3aWR0aCBib3RoIG1hdHRlciB0b1xuICAvLyB0aGUgdHdvLWNvbHVtbiBmaXQpLlxuICBASG9zdExpc3RlbmVyKFwid2luZG93OnJlc2l6ZVwiKVxuICBvblJlc2l6ZSgpOiB2b2lkIHtcbiAgICB0aGlzLm5lZWRzTWVhc3VyZSA9IHRydWU7XG4gICAgdGhpcy5jZHIubWFya0ZvckNoZWNrKCk7XG4gIH1cblxuICBuZ09uQ2hhbmdlcyhjaGFuZ2VzOiBTaW1wbGVDaGFuZ2VzKTogdm9pZCB7XG4gICAgLy8gT25seSB0aGUgaW5wdXRzIHRoZSBwbGFuIGRlcGVuZHMgb24gcmVzZXQgaXQg4oCUIGFjdGl2ZUluZGV4IGNoYW5nZXMgb25cbiAgICAvLyBldmVyeSBhcnJvdyBrZXkgYW5kIG11c3Qgbm90IGtub2NrIGEgbWVhc3VyZWQgdHdvLWNvbHVtbiBncmlkIGJhY2sgdG9cbiAgICAvLyB0aGUgYmFzZWxpbmUgKHRoZSBSZWFjdCBncmlkJ3MgbGF5b3V0IGVmZmVjdCBleGNsdWRlcyBpdCB0aGUgc2FtZSB3YXkpLlxuICAgIGlmICghY2hhbmdlc1tcIm9wdGlvbnNcIl0gJiYgIWNoYW5nZXNbXCJsb2FkaW5nXCJdKSByZXR1cm47XG4gICAgaWYgKHRoaXMubG9hZGluZyAmJiBzYW1lT3B0aW9uUm93cyh0aGlzLm1lYXN1cmVkUm93cywgdGhpcy5vcHRpb25zKSkgcmV0dXJuO1xuICAgIHRoaXMubWVhc3VyZWRSb3dzID0gdGhpcy5sb2FkaW5nID8gbnVsbCA6IHRoaXMub3B0aW9ucztcbiAgICB0aGlzLm5lZWRzTWVhc3VyZSA9IHRydWU7XG4gICAgLy8gVGhlIHByZS1tZWFzdXJlIGJhc2VsaW5lIGZvciB0aGUgbmV3IGlucHV0cywgc28gdGhlIGZpcnN0IHBhaW50IGlzIHRoZVxuICAgIC8vIHNhbWUgb25lLWNvbHVtbiBsYXlvdXQgdGhlIG90aGVyIHBhY2thZ2VzIHN0YXJ0IGZyb20uXG4gICAgdGhpcy5wbGFuID0gcGxhbk9wdGlvbnNHcmlkKHRoaXMub3B0aW9ucy5sZW5ndGgsIGlzT3B0aW9uc0dyaWRNb2JpbGVWaWV3cG9ydCgpLCBudWxsLCBudWxsKTtcbiAgfVxuXG4gIG5nQWZ0ZXJWaWV3Q2hlY2tlZCgpOiB2b2lkIHtcbiAgICBpZiAoIXRoaXMubmVlZHNNZWFzdXJlKSByZXR1cm47XG4gICAgdGhpcy5uZWVkc01lYXN1cmUgPSBmYWxzZTtcbiAgICBjb25zdCBpc01vYmlsZSA9IGlzT3B0aW9uc0dyaWRNb2JpbGVWaWV3cG9ydCgpO1xuICAgIGNvbnN0IGdyaWQgPSB0aGlzLmdyaWRDb21wPy5ncmlkUmVmPy5uYXRpdmVFbGVtZW50O1xuICAgIC8vIE1lYXN1cmluZyBjbG9uZXMgZXZlcnkgcm93IGFuZCBmb3JjZXMgYSBsYXlvdXQg4oCUIHNraXAgaXQgd2hlbmV2ZXIgdGhlXG4gICAgLy8gcGxhbiB3b3VsZCBpZ25vcmUgdGhlIHJlc3VsdCAobW9iaWxlLCBmZXdlciB0aGFuIGZpdmUgb3B0aW9ucykuXG4gICAgY29uc3Qgc2hvdWxkTWVhc3VyZSA9XG4gICAgICBncmlkICYmICF0aGlzLmxvYWRpbmcgJiYgbmVlZHNPcHRpb25zR3JpZE1lYXN1cmVtZW50KHRoaXMub3B0aW9ucy5sZW5ndGgsIGlzTW9iaWxlKTtcbiAgICBjb25zdCBtZWFzdXJlZCA9IHNob3VsZE1lYXN1cmUgPyBtZWFzdXJlT3B0aW9uc0dyaWQoZ3JpZCkgOiBudWxsO1xuICAgIGNvbnN0IG5leHQgPSBwbGFuT3B0aW9uc0dyaWQoXG4gICAgICB0aGlzLm9wdGlvbnMubGVuZ3RoLFxuICAgICAgaXNNb2JpbGUsXG4gICAgICBtZWFzdXJlZD8ucm93V2lkdGhzID8/IG51bGwsXG4gICAgICBtZWFzdXJlZD8uZ3JpZFdpZHRoID8/IG51bGwsXG4gICAgKTtcbiAgICBjb25zdCB1bmNoYW5nZWQgPVxuICAgICAgbmV4dC50ZW1wbGF0ZSA9PT0gdGhpcy5wbGFuLnRlbXBsYXRlICYmXG4gICAgICBuZXh0Lm1heEhlaWdodCA9PT0gdGhpcy5wbGFuLm1heEhlaWdodCAmJlxuICAgICAgbmV4dC5zY3JvbGxIaW50SW5kaWNlcy5qb2luKCkgPT09IHRoaXMucGxhbi5zY3JvbGxIaW50SW5kaWNlcy5qb2luKCk7XG4gICAgaWYgKHVuY2hhbmdlZCkgcmV0dXJuO1xuICAgIC8vIFRoZSB2aWV3IHdhcyBhbHJlYWR5IGNoZWNrZWQgdGhpcyBjeWNsZSDigJQgYXBwbHkgdGhlIG1lYXN1cmVkIHBsYW4gaW4gYVxuICAgIC8vIGZyZXNoIG1pY3JvdGFzayBzbyBPblB1c2ggcGlja3MgaXQgdXAgd2l0aG91dCBhblxuICAgIC8vIEV4cHJlc3Npb25DaGFuZ2VkQWZ0ZXJJdEhhc0JlZW5DaGVja2VkIGVycm9yLlxuICAgIHF1ZXVlTWljcm90YXNrKCgpID0+IHtcbiAgICAgIHRoaXMucGxhbiA9IG5leHQ7XG4gICAgICB0aGlzLmNkci5tYXJrRm9yQ2hlY2soKTtcbiAgICB9KTtcbiAgfVxuXG4gIGlzU2Nyb2xsSGludChpbmRleDogbnVtYmVyKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuICF0aGlzLmxvYWRpbmcgJiYgdGhpcy5wbGFuLnNjcm9sbEhpbnRJbmRpY2VzLmluY2x1ZGVzKGluZGV4KTtcbiAgfVxuXG4gIC8qKlxuICAgKiBTdGFydCBkZWxheSBvZiByb3cgYGluZGV4YCdzIGVudHJhbmNlIOKAlCBlYWNoIHJvdyByaXNlcyBpbiBhIGJlYXQgYWZ0ZXJcbiAgICogdGhlIG9uZSBuZWFyZXIgdGhlIGlucHV0LiBTa2VsZXRvbiByb3dzIGZhZGUgaW4gdG9nZXRoZXIgKHRoZXkncmVcbiAgICogcGxhY2Vob2xkZXJzLCBub3QgY29udGVudCBhcnJpdmluZykuXG4gICAqL1xuICBlbnRlckRlbGF5TXMoaW5kZXg6IG51bWJlcik6IG51bWJlciB7XG4gICAgaWYgKHRoaXMubG9hZGluZykgcmV0dXJuIDA7XG4gICAgLy8gQWNyb3NzIHRoZSBjb2x1bW5zIHRoZSBtZWFzdXJlZCBwbGFuIHNldHRsZWQgb24g4oCUIHRoZSB0d28tY29sdW1uXG4gICAgLy8gdXBncmFkZSBvbmx5IGRlY2lkZXMgdGhhdCBhZnRlciB0aGUgcm93cyBleGlzdC5cbiAgICByZXR1cm4gb3B0aW9uRW50ZXJEZWxheU1zKGluZGV4LCB0aGlzLnBsYW4uY29scywgdGhpcy5vcHRpb25zLmxlbmd0aCwgdGhpcy5vcHRpb25zUG9zaXRpb24pO1xuICB9XG5cbiAgLyoqXG4gICAqIFRoZSBncm91cCBpcyBwYXJ0IG9mIHRoZSBpZGVudGl0eTogYSBuZXcgc3VnZ2VzdGlvbidzIG9wdGlvbnMgYXJlIG5ld1xuICAgKiByb3dzIGFuZCBnZXQgdGhlIGVudHJhbmNlIGFuaW1hdGlvbiBldmVuIHdoZW4gb25lIHNwZWxscyB0aGUgc2FtZSBhcyBhXG4gICAqIHJvdyBhbHJlYWR5IG9uIHNjcmVlbi5cbiAgICovXG4gIHRyYWNrQnlPcHRpb25UZXh0ID0gKF86IG51bWJlciwgb3B0OiBTdWdnZXN0aW9uT3B0aW9uKTogc3RyaW5nID0+IGAke3RoaXMuZ3JvdXBLZXl9XFwwJHtvcHQudGV4dH1gO1xufVxuIiwiPCEtLSBtYXg9XCIxZnJcIjogY29sdW1ucyBzaGFyZSBvdXQgdGhlIGZ1bGwgd2lkdGgsIHNvIGEgbG9uZSBjb2x1bW4gc3BhbnMgdGhlXG4gICAgIHdob2xlIG9wdGlvbnMgYm94IGluc3RlYWQgb2Ygc3RvcHBpbmcgYXQgMjUwcHguIC0tPlxuPGFpYS1ncmlkXG4gIG1pbj1cIjI1MHB4XCJcbiAgbWF4PVwiMWZyXCJcbiAgZ2FwPVwiMFwiXG4gIFtzY3JvbGxdPVwidHJ1ZVwiXG4gIFtzY3JvbGxSZXNldEtleV09XCJncm91cEtleVwiXG4gIFt0ZW1wbGF0ZV09XCJwbGFuLnRlbXBsYXRlXCJcbiAgW21heEhlaWdodF09XCJwbGFuLm1heEhlaWdodFwiXG4gIFtncm91cF09XCJncm91cEtleVwiXG4+XG4gIDxhaWEtc3VnZ2VzdGlvbi1pdGVtXG4gICAgKm5nRm9yPVwibGV0IG9wdGlvbiBvZiBvcHRpb25zOyB0cmFja0J5OiB0cmFja0J5T3B0aW9uVGV4dDsgbGV0IGkgPSBpbmRleFwiXG4gICAgW29wdGlvbl09XCJvcHRpb25cIlxuICAgIFtpc0hpZ2hsaWdodGVkXT1cImkgPT09IGFjdGl2ZUluZGV4XCJcbiAgICBbY2hlY2tlZF09XCJwaWNrZWQgPyBwaWNrZWQuaW5jbHVkZXMob3B0aW9uLnRleHQpIDogdW5kZWZpbmVkXCJcbiAgICBbaWRdPVwibGlzdGJveElkICsgJy1vcHRpb24tJyArIGlcIlxuICAgIFtsb2FkaW5nXT1cImxvYWRpbmdcIlxuICAgIFtzaG93SWNvbl09XCJzaG93SWNvbnMgJiYgbGVhZGluZ1Zpc3VhbHNcIlxuICAgIFtzaG93SW1hZ2VdPVwic2hvd0ltYWdlcyAmJiBsZWFkaW5nVmlzdWFsc1wiXG4gICAgW3Nob3dDb3VudF09XCJzaG93Q291bnRzXCJcbiAgICBbc2Nyb2xsSGludF09XCJpc1Njcm9sbEhpbnQoaSlcIlxuICAgIFtlbnRlckRlbGF5TXNdPVwiZW50ZXJEZWxheU1zKGkpXCJcbiAgICAoc2VsZWN0KT1cInNlbGVjdC5lbWl0KCRldmVudClcIlxuICAgIChoaWdobGlnaHQpPVwiaGlnaGxpZ2h0LmVtaXQoaSlcIlxuICAgICh1bmhpZ2hsaWdodCk9XCJ1bmhpZ2hsaWdodC5lbWl0KGkpXCJcbiAgPjwvYWlhLXN1Z2dlc3Rpb24taXRlbT5cbjwvYWlhLWdyaWQ+XG4iXX0=
|