@magicx-eng/ai-autocomplete-angular 0.11.1 → 0.12.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 +99 -2
- package/esm2020/lib/ai-autocomplete-dropdown/ai-autocomplete-dropdown.component.mjs +25 -6
- package/esm2020/lib/controller/ai-autocomplete.controller.mjs +36 -4
- package/esm2020/lib/internal/date-grid/date-grid.component.mjs +95 -0
- package/esm2020/lib/internal/editor-host/editor-host.directive.mjs +12 -3
- package/esm2020/lib/shared/types.mjs +1 -1
- package/esm2020/public-api.mjs +23 -2
- package/fesm2015/magicx-eng-ai-autocomplete-angular.mjs +189 -20
- package/fesm2015/magicx-eng-ai-autocomplete-angular.mjs.map +1 -1
- package/fesm2020/magicx-eng-ai-autocomplete-angular.mjs +183 -14
- package/fesm2020/magicx-eng-ai-autocomplete-angular.mjs.map +1 -1
- package/lib/ai-autocomplete-dropdown/ai-autocomplete-dropdown.component.d.ts +9 -1
- package/lib/ai-autocomplete-dropdown/ai-autocomplete-dropdown.component.d.ts.map +1 -1
- package/lib/controller/ai-autocomplete.controller.d.ts +4 -0
- package/lib/controller/ai-autocomplete.controller.d.ts.map +1 -1
- package/lib/internal/date-grid/date-grid.component.d.ts +46 -0
- package/lib/internal/date-grid/date-grid.component.d.ts.map +1 -0
- package/lib/internal/editor-host/editor-host.directive.d.ts +6 -0
- package/lib/internal/editor-host/editor-host.directive.d.ts.map +1 -1
- package/lib/shared/types.d.ts +24 -1
- package/lib/shared/types.d.ts.map +1 -1
- package/package.json +2 -2
- package/public-api.d.ts +21 -2
- package/public-api.d.ts.map +1 -1
package/README.md
CHANGED
|
@@ -18,6 +18,7 @@ An Angular SDK that provides a guided AI-powered autocomplete experience with pi
|
|
|
18
18
|
- **Keyboard navigation** — arrow keys, enter to submit, tab to autocomplete, backspace to un-bold the last completed param
|
|
19
19
|
- **IME-safe** — composition events are buffered so input text is committed once, after composition ends
|
|
20
20
|
- **Client-side filtering** — instant substring filtering on every keystroke
|
|
21
|
+
- **Datepicker** — date parameters are answered with a calendar instead of an option list. Click a day or navigate with the arrow keys; the date is committed as `MONTH DAY YEAR` (e.g. `March 23 2026`). Tapping a committed date re-opens the calendar on the month it holds.
|
|
21
22
|
- **Option overrides** — inject or dynamically generate client-side options per suggestion type
|
|
22
23
|
- **Product strip (opt-in)** — plug in any platform's product search and the dropdown renders a horizontal row of product cards below the options; the SDK owns the UI, your integration owns only `fetch` and `transform`
|
|
23
24
|
- **Controlled & uncontrolled** — works out of the box or integrates with external state, including **Reactive Forms** via `ControlValueAccessor`
|
|
@@ -171,6 +172,74 @@ After a completed param is added (by any means — option click, exact-match typ
|
|
|
171
172
|
|
|
172
173
|
---
|
|
173
174
|
|
|
175
|
+
### Datepicker
|
|
176
|
+
|
|
177
|
+
When the next parameter is a date, the dropdown shows a calendar instead of a
|
|
178
|
+
list of options. A parameter counts as a date when its name says so, or when at
|
|
179
|
+
least three of the options it offers are themselves written as dates — so a
|
|
180
|
+
parameter called `when` or `arrival` still gets a calendar. Options written as
|
|
181
|
+
relative phrases (`today`, `next week`) are not read as dates; a parameter
|
|
182
|
+
offering those needs a name that says date.
|
|
183
|
+
|
|
184
|
+
Nothing is required to switch it on — a date parameter renders this way
|
|
185
|
+
automatically, and every other parameter is unaffected. Tier 1 and Tier 2
|
|
186
|
+
render the calendar for you; in Tier 3 the same data reaches `dropdown$` so you
|
|
187
|
+
can render your own (see [Tier 3](#tier-3-headless)).
|
|
188
|
+
|
|
189
|
+
**What the user can do**
|
|
190
|
+
|
|
191
|
+
| Input | Result |
|
|
192
|
+
|---|---|
|
|
193
|
+
| Click a day | Commits that date |
|
|
194
|
+
| <kbd>↓</kbd> | Moves into the calendar, starting on today |
|
|
195
|
+
| <kbd>←</kbd> / <kbd>→</kbd> | Previous / next day, crossing week boundaries |
|
|
196
|
+
| <kbd>↑</kbd> / <kbd>↓</kbd> | Previous / next week. Past either end of the month, focus returns to the input |
|
|
197
|
+
| <kbd>Enter</kbd> | Commits the highlighted day |
|
|
198
|
+
| Month arrows | Page the calendar. Paging never commits anything |
|
|
199
|
+
| <kbd>→</kbd> at the end of the input | Skips the parameter, same as any other pill |
|
|
200
|
+
|
|
201
|
+
**The committed value** is always `MONTH DAY YEAR` in English — `March 23 2026`
|
|
202
|
+
— regardless of the visitor's locale, so the value you receive has one shape
|
|
203
|
+
everywhere. It arrives as an ordinary completed parameter: bold in the input,
|
|
204
|
+
and present in `completed_params` on submit like any other answer.
|
|
205
|
+
|
|
206
|
+
**Re-editing** a committed date re-opens the calendar on that date's month with
|
|
207
|
+
the day marked, so changing an answer takes one click.
|
|
208
|
+
|
|
209
|
+
**Reading the value back.** The date arrives as text, so if you need a `Date`
|
|
210
|
+
object, `parseDate` is exported for it:
|
|
211
|
+
|
|
212
|
+
```ts
|
|
213
|
+
import { parseDate } from "@magicx-eng/ai-autocomplete-angular";
|
|
214
|
+
|
|
215
|
+
const due = parseDate("March 23 2026"); // Date, or null if the text isn't one of ours
|
|
216
|
+
```
|
|
217
|
+
|
|
218
|
+
`parseLooseDate` is exported too, for the looser shapes a person types into a
|
|
219
|
+
query — it reads `september 5th`, `5th September`, `Sept 5` and `2026-09-05`,
|
|
220
|
+
and answers `null` for anything ambiguous rather than guessing.
|
|
221
|
+
|
|
222
|
+
**Dates the user writes themselves.** When someone types a date into their query
|
|
223
|
+
— "fly to vegas on september 5th" — the parameter it answers is recognised in
|
|
224
|
+
place and the date becomes tappable. Tapping it opens the calendar on that
|
|
225
|
+
month with the day already marked, so confirming or changing it takes one tap,
|
|
226
|
+
and the picked date replaces their words with the canonical form.
|
|
227
|
+
|
|
228
|
+
The written date is read where it can be: `september 5th`, `5th September`,
|
|
229
|
+
`Sept 5`, `September 5, 2026` and `2026-09-05` all resolve, in any of those
|
|
230
|
+
orders and with or without the year (a date with no year means its next
|
|
231
|
+
occurrence). Two cases deliberately don't pre-select — a numeric date like
|
|
232
|
+
`09/05`, which is September 5th in the US and May 9th elsewhere with nothing to
|
|
233
|
+
say which, and phrases like `next friday`. Those still open the calendar, just
|
|
234
|
+
on the current month with nothing marked, so the user picks rather than being
|
|
235
|
+
shown a guess that might be wrong.
|
|
236
|
+
|
|
237
|
+
**Typing** while the calendar is open does not filter it. The text is treated as
|
|
238
|
+
a new query, so suggestions refresh as the user types — useful when someone
|
|
239
|
+
would rather describe what they want than pick a day.
|
|
240
|
+
|
|
241
|
+
---
|
|
242
|
+
|
|
174
243
|
## Tier 2: Controller + Dropdown
|
|
175
244
|
|
|
176
245
|
Drive state with the controller and render our dropdown; you own the input element and layout:
|
|
@@ -271,6 +340,8 @@ export class SearchComponent implements OnInit, OnDestroy {
|
|
|
271
340
|
|
|
272
341
|
---
|
|
273
342
|
|
|
343
|
+
|
|
344
|
+
> **Datepicker in a custom UI.** For a date parameter, `dd.formatType` is `"date"` and `dd.suggestions[0].options` holds that month's day cells. Each cell's `text` is the date it commits (`"March 23 2026"`), so the list above already works — `selectOption(cell)` behaves exactly as it does for an option. To draw an actual calendar, read `dd.dateView` for the month on show, `cellDay(cell)` for the number to paint, and call `ac.showPreviousMonth()` / `ac.showNextMonth()` to page. Cells that pad the start and end of the month have `is_tappable: false`.
|
|
274
345
|
## Convenience NgModule
|
|
275
346
|
|
|
276
347
|
For codebases that prefer the older NgModule pattern, an `AIAutocompleteModule` re-exports every public component and directive:
|
|
@@ -543,7 +614,7 @@ Accepts the same shape as `<ai-autocomplete>`'s inputs (`apiConfig`, `additional
|
|
|
543
614
|
| `editingAnchor$` | `Observable<number \| null>` | Plain-text offset where the edit region starts. |
|
|
544
615
|
| `caretOffset$` | `Observable<number \| null>` | Live caret offset within the editor. |
|
|
545
616
|
| `state$` | `Observable<AIAutocompleteControllerState>` | Composite snapshot of every public field. |
|
|
546
|
-
| `dropdown$` | `Observable<AIAutocompleteDropdownState>` | Composite snapshot for the dropdown (suggestions, `activeIndex`, `isOpen`, pills, `optionsPosition`, …). Bound to `<ai-autocomplete-dropdown>`, or subscribe directly to render your own dropdown in Tier 3. |
|
|
617
|
+
| `dropdown$` | `Observable<AIAutocompleteDropdownState>` | Composite snapshot for the dropdown (suggestions, `activeIndex`, `isOpen`, pills, `optionsPosition`, `formatType`, `dateView`, …). Bound to `<ai-autocomplete-dropdown>`, or subscribe directly to render your own dropdown in Tier 3. For a date parameter, `formatType` is `"date"` and `suggestions[0].options` holds that month's day cells — each cell's `text` is the date it commits, and cells padding the start/end of the month have `is_tappable: false`. See [Datepicker](#datepicker). |
|
|
547
618
|
|
|
548
619
|
Every observable is gated by `distinctUntilChanged` + `shareReplay({ bufferSize: 1, refCount: true })`, so multiple `async`-pipe subscriptions share one upstream subscription and dedupe identical emissions.
|
|
549
620
|
|
|
@@ -555,6 +626,7 @@ Every observable is gated by `distinctUntilChanged` + `shareReplay({ bufferSize:
|
|
|
555
626
|
| `selectOption(option)` | Pick a dropdown option (or replace the re-edited param if in re-edit mode). |
|
|
556
627
|
| `selectProduct(product)` | Announce a product selection (fires `onProductSelect`). `<ai-autocomplete-dropdown>` calls this for you; hand-rolled strips call it themselves. Never navigates. |
|
|
557
628
|
| `setActivePill(index)` | Promote the pill at `index` to active. |
|
|
629
|
+
| `showPreviousMonth()` / `showNextMonth()` | Page the calendar a month at a time; paging never commits anything. `<ai-autocomplete-dropdown>` wires its own month arrows to these, so you only need them for a hand-rolled calendar. No-ops unless the active parameter is a date. |
|
|
558
630
|
| `skipActivePill()` | Skip the active pill — same action as → / the dropdown's skip button. Records it in `skippedParams$`; no-ops during re-edit and the post-selection window. Use it to drive a custom skip affordance (e.g. with `[showSkipButton]="false"`). Also exposed as a Tier 1 component method. |
|
|
559
631
|
| `removeLastParam()` | Drop the last completed param's "completed" status. |
|
|
560
632
|
| `clearNewParamId()` | Clear the shimmer-animation state. |
|
|
@@ -673,6 +745,13 @@ Override on the host element (via `class`). All defaults use `:where()` (zero sp
|
|
|
673
745
|
| `--aia-product-price-font-size` | `11px` | `11px` | Product price font size. |
|
|
674
746
|
| `--aia-product-vendor-font-size` | `10px` | `10px` | Product vendor font size. |
|
|
675
747
|
| `--aia-products-label-font-size` | `11px` | `11px` | Section label font size. |
|
|
748
|
+
| `--aia-date-cell-size` | `36px` | `36px` | Size of a day's square — the box that carries the highlight, the today ring and the selected fill. |
|
|
749
|
+
| `--aia-date-row-height` | `40px` | `40px` | Height of one week row. Lower it to fit a 6-week month in a shorter dropdown. |
|
|
750
|
+
| `--aia-date-cell-font-size` | `14px` | `14px` | Day-number font size. |
|
|
751
|
+
| `--aia-date-month-font-size` | `14px` | `14px` | Font size of the "March 2026" header. |
|
|
752
|
+
| `--aia-date-weekday-font-size` | `11px` | `11px` | Font size of the S/M/T/W/T/F/S column letters. |
|
|
753
|
+
| `--aia-date-today-ring` | `--aia-option-color` | `--aia-option-color` | Outline drawn around today's date. |
|
|
754
|
+
| `--aia-date-selected-bg` | white at 12% | white at 12% | Fill behind the date a re-edited parameter already holds. |
|
|
676
755
|
| `--aia-skeleton-bg` | `rgba(189, 189, 189, 0.25)` | `#1a1b1d` | Fill color for the loading skeleton bars and masked text in cached pills/options. |
|
|
677
756
|
| `--aia-footer-chip-bg` | `--aia-surface` at 65% | `--aia-surface` at 65% | Fill behind the footer's keyboard hint and AI-Autocomplete badge. The option list scrolls under the footer, so this keeps both legible over the row passing behind them. `transparent` on the glass surface. |
|
|
678
757
|
|
|
@@ -703,6 +782,11 @@ For styling beyond the CSS variables, target these stable `data-aia-*` attribute
|
|
|
703
782
|
| `[data-aia-skip]` | The pill bar's trailing "skip" button. Tune via `--aia-skip-font-size` / `--aia-skip-color` / `--aia-skip-color-hover` / `--aia-skip-hover-bg` |
|
|
704
783
|
| `[data-aia-option]` | Each suggestion option |
|
|
705
784
|
| `[data-aia-dropdown]` | The dropdown root (listbox). Carries `data-aia-has-products` while the product strip has cards. |
|
|
785
|
+
| `[data-aia-datepicker]` | The calendar, rendered in place of the option list for a date parameter |
|
|
786
|
+
| `[data-aia-date-month]` | The "March 2026" header label |
|
|
787
|
+
| `[data-aia-date-prev]` / `[data-aia-date-next]` | The month arrows |
|
|
788
|
+
| `[data-aia-date-grid]` | The 7-column grid of day cells |
|
|
789
|
+
| `[data-aia-date-cell]` | Each day cell. Also carries `[data-aia-option]`, so option-level styling applies to both bodies |
|
|
706
790
|
| `[data-aia-products]` | Product strip section (label + row) |
|
|
707
791
|
| `[data-aia-products-row]` | The horizontally scrolling row of cards |
|
|
708
792
|
| `[data-aia-product]` | Each product card |
|
|
@@ -727,11 +811,24 @@ Every `/api/suggest` request carries a `meta.session_id` UUID. A session runs fr
|
|
|
727
811
|
|
|
728
812
|
The contract is simple: **after the user submits the query, call `reset()`**. That clears the input and rotates `session_id` so the next session begins clean.
|
|
729
813
|
|
|
730
|
-
> **Why it matters:**
|
|
814
|
+
> **Why it matters:** suggestions get sharper as a query develops. Each one
|
|
815
|
+
> takes account of what the user has already answered, so the parameters offered
|
|
816
|
+
> late in a query are shaped by the choices made early in it — that is what makes
|
|
817
|
+
> the experience feel guided rather than like a static list. `session_id` is what
|
|
818
|
+
> ties those requests together into one query.
|
|
819
|
+
>
|
|
820
|
+
> So `reset()` is not bookkeeping: it is how you say "that query is finished".
|
|
821
|
+
> Skip it and the next query is treated as a continuation of the last one, and
|
|
822
|
+
> its suggestions keep being shaped by answers the user has already moved on
|
|
823
|
+
> from — the failure is quiet, and shows up as steadily less relevant options
|
|
824
|
+
> rather than as an error.
|
|
731
825
|
|
|
732
826
|
- **Tier 1 `<ai-autocomplete>`** does this automatically — it calls `reset()` for you after `submitted` fires, for both Enter-key and built-in-button submits.
|
|
733
827
|
- **Tier 2 `AIAutocompleteController`** — you own the submit flow, so call `controller.reset()` from your `onSubmit` handler (see the Tier 2 example above) or from your custom button after firing your submit handler.
|
|
734
828
|
|
|
829
|
+
The id is a plain UUID. Log it next to your own request logs if you want to
|
|
830
|
+
correlate a user's report with the query that produced it.
|
|
831
|
+
|
|
735
832
|
## Option Overrides
|
|
736
833
|
|
|
737
834
|
```ts
|
|
@@ -3,6 +3,7 @@ import { ChangeDetectionStrategy, ChangeDetectorRef, Component, Input, inject, V
|
|
|
3
3
|
import { buildAttributionUrl, getFooterHint, } from "@magicx-eng/ai-autocomplete-vanilla";
|
|
4
4
|
import { BehaviorSubject, combineLatest } from "rxjs";
|
|
5
5
|
import { map } from "rxjs/operators";
|
|
6
|
+
import { DateGridComponent } from "../internal/date-grid/date-grid.component";
|
|
6
7
|
import { ClusterComponent } from "../internal/layout/cluster.component";
|
|
7
8
|
import { StackComponent } from "../internal/layout/stack.component";
|
|
8
9
|
import { PillListComponent } from "../internal/pill-list/pill-list.component";
|
|
@@ -153,11 +154,19 @@ export class AIAutocompleteDropdownComponent {
|
|
|
153
154
|
// footer hint doesn't advertise "→ to skip" until the user has typed,
|
|
154
155
|
// so the pristine starting state stays free of the affordance too.
|
|
155
156
|
const showsSkip = dd.pills.length > 0 && showSkipButton && !dd.isEditing && !dd.isInputEmpty;
|
|
156
|
-
|
|
157
|
-
|
|
157
|
+
// Exactly one body renders. `options` above already holds the visible
|
|
158
|
+
// month's cells when this is a date — the core swapped them in its
|
|
159
|
+
// derive layer — so the two are the same list drawn two different
|
|
160
|
+
// ways, and never both at once (two elements answering to the same
|
|
161
|
+
// option id would break keyboard commit).
|
|
162
|
+
const isDate = dd.formatType === "date" && dd.dateView != null;
|
|
163
|
+
const showsOptions = options.length > 0 && !isDate;
|
|
164
|
+
const showsDateGrid = options.length > 0 && isDate;
|
|
165
|
+
const showsFallbackSkeleton = dd.isLoading && !showsOptions && !showsDateGrid;
|
|
158
166
|
// Either half is enough to keep the panel up: products render with no
|
|
159
167
|
// suggestions, suggestions render with no products.
|
|
160
|
-
const isVisible = dd.isOpen &&
|
|
168
|
+
const isVisible = dd.isOpen &&
|
|
169
|
+
(showsOptions || showsDateGrid || showsPills || dd.isLoading || dd.products.length > 0);
|
|
161
170
|
// While closing, reuse the last visible content so the populated
|
|
162
171
|
// dropdown fades out as one. Otherwise the pills/options vanish the
|
|
163
172
|
// instant the state empties (e.g. skipping the last pill with →),
|
|
@@ -180,6 +189,9 @@ export class AIAutocompleteDropdownComponent {
|
|
|
180
189
|
skipDisabled: dd.isLoading || Boolean(dd.inSelectionAnimation),
|
|
181
190
|
activePillLabel: dd.pills[0]?.text ?? "",
|
|
182
191
|
showsOptions,
|
|
192
|
+
showsDateGrid,
|
|
193
|
+
dateView: dd.dateView ?? null,
|
|
194
|
+
selectedDateIso: dd.selectedDateIso ?? null,
|
|
183
195
|
showsFallbackSkeleton,
|
|
184
196
|
products: dd.products,
|
|
185
197
|
groupKey: activeSuggestion ? `${activeSuggestion.type} ${activeSuggestion.text}` : "",
|
|
@@ -201,6 +213,12 @@ export class AIAutocompleteDropdownComponent {
|
|
|
201
213
|
onSelect(option) {
|
|
202
214
|
this.controller.selectOption(option);
|
|
203
215
|
}
|
|
216
|
+
onPreviousMonth() {
|
|
217
|
+
this.controller.showPreviousMonth();
|
|
218
|
+
}
|
|
219
|
+
onNextMonth() {
|
|
220
|
+
this.controller.showNextMonth();
|
|
221
|
+
}
|
|
204
222
|
onHighlight(index) {
|
|
205
223
|
this.controller.setActiveDropdownIndex(index);
|
|
206
224
|
}
|
|
@@ -220,7 +238,7 @@ export class AIAutocompleteDropdownComponent {
|
|
|
220
238
|
}
|
|
221
239
|
}
|
|
222
240
|
AIAutocompleteDropdownComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.2.10", ngImport: i0, type: AIAutocompleteDropdownComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
|
|
223
|
-
AIAutocompleteDropdownComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "15.2.10", type: AIAutocompleteDropdownComponent, isStandalone: true, selector: "ai-autocomplete-dropdown", inputs: { controller: "controller", showPills: "showPills", showSkipButton: "showSkipButton", className: "className", mode: "mode" }, usesOnChanges: true, ngImport: i0, template: "<div\n *ngIf=\"vm$ | async as vm\"\n [id]=\"controller.listboxId\"\n role=\"listbox\"\n data-aia-dropdown=\"\"\n [attr.data-aia-loading]=\"vm.isLoading ? '' : null\"\n [attr.data-mode]=\"resolvedMode\"\n [attr.data-options-position]=\"vm.optionsPosition\"\n [attr.data-aia-has-products]=\"vm.products.length > 0 ? '' : null\"\n [class]=\"rootClass\"\n [class.magicx-aia-dropdown-visible]=\"vm.isVisible\"\n (mousedown)=\"preventBlur($event)\"\n>\n <aia-stack space=\"8px\">\n <aia-cluster\n *ngIf=\"vm.showsPills || vm.showsSkip\"\n class=\"magicx-aia-dropdown-pillbar\"\n data-aia-pillbar=\"\"\n [noWrap]=\"true\"\n >\n <!-- The scroll + right-edge fade live on this wrapper (not the bar) so\n the skip button stays outside the masked region \u2014 pinned and fully\n opaque while overflowing pills fade under it. Absent in a skip-only\n row (pills rendered elsewhere via pillPlacement inline/hidden). -->\n <span *ngIf=\"vm.showsPills\" class=\"magicx-aia-pill-scroll\" data-aia-pill-scroll=\"\">\n <aia-pill-list\n [pills]=\"vm.pills\"\n [activePillIndex]=\"0\"\n [activeSelected]=\"vm.isActivePillSelected\"\n [rounded]=\"true\"\n [loading]=\"vm.isLoading\"\n (selectPill)=\"onPillClick($event)\"\n ></aia-pill-list>\n </span>\n <button\n *ngIf=\"vm.showsSkip\"\n type=\"button\"\n tabindex=\"-1\"\n class=\"magicx-aia-skip\"\n data-aia-skip=\"\"\n [disabled]=\"vm.skipDisabled\"\n [attr.aria-label]=\"vm.activePillLabel ? 'Skip ' + vm.activePillLabel : 'Skip'\"\n (click)=\"onSkip()\"\n >\n skip\n </button>\n </aia-cluster>\n\n <aia-suggestion-grid\n *ngIf=\"vm.showsOptions\"\n [options]=\"vm.options\"\n [activeIndex]=\"vm.activeIndex\"\n [listboxId]=\"controller.listboxId\"\n [loading]=\"vm.isLoading\"\n [groupKey]=\"vm.groupKey\"\n (select)=\"onSelect($event)\"\n (highlight)=\"onHighlight($event)\"\n ></aia-suggestion-grid>\n\n <div\n *ngIf=\"vm.showsFallbackSkeleton\"\n class=\"magicx-aia-dropdown-skeleton-bars\"\n data-aia-skeleton-bars=\"\"\n >\n <span\n *ngFor=\"let w of fallbackSkeletonBarWidths; trackBy: trackByWidth\"\n class=\"magicx-aia-dropdown-skeleton-bar\"\n [style.width.px]=\"w\"\n ></span>\n </div>\n\n <!-- *ngIf, not just the section's own guard inside the component: the host\n element is an in-flow child of .aia-stack (display:flex; gap:8px), so\n an always-instantiated zero-height host would add a SECOND 8px gap\n between the grid and the footer \u2014 in every dropdown, products or not.\n The grid's --aia-grid-overlap-bottom is tuned for exactly one gap, so\n the footer would land 8px below the band it is meant to cover. -->\n <aia-product-strip\n *ngIf=\"vm.products.length > 0\"\n [products]=\"vm.products\"\n [listboxId]=\"controller.listboxId\"\n [focusable]=\"vm.isVisible\"\n (select)=\"onProductSelect($event)\"\n (focusChange)=\"onProductFocusChange($event)\"\n ></aia-product-strip>\n\n <footer class=\"magicx-aia-footer\" data-aia-footer=\"\">\n <div class=\"magicx-aia-footer-row\">\n <span class=\"magicx-aia-footer-hint-group\">\n <kbd class=\"magicx-aia-footer-key\">{{ vm.footerKey }}</kbd>\n <span class=\"magicx-aia-footer-hint\">{{ vm.footerHint }}</span>\n </span>\n <a\n class=\"magicx-aia-footer-brand-link\"\n [href]=\"brandHref\"\n target=\"_blank\"\n rel=\"noopener noreferrer\"\n >\n <span class=\"magicx-aia-footer-brand\">AI</span>\n <span class=\"magicx-aia-footer-badge\">Autocomplete</span>\n </a>\n </div>\n </footer>\n </aia-stack>\n</div>\n", styles: [":where(.magicx-aia,.magicx-aia *,.magicx-aia *::before,.magicx-aia *::after){box-sizing:border-box}:where(.magicx-aia){--aia-primitive-neutral-0: #000000;--aia-primitive-neutral-150: #1a1b1d;--aia-primitive-neutral-250: #323232;--aia-primitive-neutral-300: #333539;--aia-primitive-neutral-400: #4a4a4a;--aia-primitive-neutral-500: #505050;--aia-primitive-neutral-700: #b0b0b0;--aia-primitive-neutral-750: #bdbdbd;--aia-primitive-neutral-900: #e7e7e7;--aia-primitive-neutral-1000: #ffffff;--aia-primitive-blue-50: #eef2ff;--aia-primitive-neutral-750-a50: rgba(189, 189, 189, .51);--aia-primitive-neutral-750-a25: rgba(189, 189, 189, .25);--aia-primitive-neutral-750-a35: rgba(189, 189, 189, .35);--aia-primitive-neutral-750-a30: rgba(189, 189, 189, .3);--aia-primitive-neutral-750-a15: rgba(189, 189, 189, .15);--aia-primitive-neutral-750-a105: rgba(189, 189, 189, .105);--aia-primitive-neutral-700-a40: rgba(176, 176, 176, .4);--aia-primitive-neutral-900-a50: rgba(231, 231, 231, .5);--aia-primitive-neutral-400-a50: rgba(74, 74, 74, .5)}:where(.magicx-aia),:where(.magicx-aia[data-mode=\"light\"]){--aia-surface: var(--aia-primitive-neutral-1000);--aia-border: var(--aia-primitive-neutral-700);--aia-dropdown-border: var(--aia-primitive-neutral-900-a50);--aia-dropdown-shadow: 0 8px 12px rgba(0, 0, 0, .05);--aia-pill-bg: var(--aia-primitive-neutral-750);--aia-pill-color: var(--aia-primitive-neutral-300);--aia-pill-font-size: 16px;--aia-completed-pill-bg: var(--aia-primitive-neutral-750-a105);--aia-completed-pill-bg-active: var(--aia-primitive-neutral-750-a35);--aia-completed-pill-color: var(--aia-primitive-neutral-0);--aia-option-bg: var(--aia-primitive-blue-50);--aia-option-color: var(--aia-primitive-neutral-150);--aia-option-color-selected: var(--aia-primitive-neutral-0);--aia-option-font-size: 16px;--aia-written-text-color: var(--aia-primitive-neutral-0);--aia-written-text-font-size: 16px;--aia-caret-color: var(--aia-written-text-color, #000000);--aia-submit-bg: var(--aia-primitive-neutral-0);--aia-submit-color: var(--aia-primitive-neutral-1000);--aia-color-text-muted: #6b7280;--aia-skeleton-bg: var(--aia-primitive-neutral-750-a25);--aia-streak-rgb: 99, 102, 241;--aia-streak-glass-bg: rgba(99, 102, 241, .1);--aia-footer-hint-color: var(--aia-primitive-neutral-500);--aia-footer-brand-color: var(--aia-primitive-neutral-700);--aia-footer-badge-border: var(--aia-primitive-neutral-750-a50)}:where(.magicx-aia[data-mode=\"dark\"]){--aia-surface: var(--aia-primitive-neutral-0);--aia-border: var(--aia-primitive-neutral-500);--aia-dropdown-border: var(--aia-primitive-neutral-400-a50);--aia-dropdown-shadow: 0 8px 12px rgba(0, 0, 0, .05);--aia-pill-bg: var(--aia-primitive-neutral-750);--aia-pill-color: var(--aia-primitive-neutral-700);--aia-pill-font-size: 16px;--aia-completed-pill-bg: var(--aia-primitive-neutral-750-a15);--aia-completed-pill-bg-active: var(--aia-primitive-neutral-750-a35);--aia-completed-pill-color: var(--aia-primitive-neutral-1000);--aia-option-bg: var(--aia-primitive-neutral-250);--aia-option-color: var(--aia-primitive-neutral-900);--aia-option-color-selected: var(--aia-primitive-neutral-1000);--aia-option-font-size: 16px;--aia-written-text-color: var(--aia-primitive-neutral-1000);--aia-written-text-font-size: 16px;--aia-caret-color: var(--aia-written-text-color, #ffffff);--aia-submit-bg: var(--aia-primitive-neutral-1000);--aia-submit-color: var(--aia-primitive-neutral-0);--aia-color-text-muted: #c1c4cb;--aia-skeleton-bg: var(--aia-primitive-neutral-150);--aia-streak-rgb: 255, 255, 255;--aia-streak-glass-bg: rgba(255, 255, 255, .1);--aia-footer-hint-color: var(--aia-primitive-neutral-700);--aia-footer-brand-color: var(--aia-primitive-neutral-500);--aia-footer-badge-border: var(--aia-primitive-neutral-500)}[data-aia-dropdown]{--aia-footer-row-height: 23px;--aia-footer-band: calc(var(--aia-footer-gap, 8px) + var(--aia-footer-row-height, 23px));--aia-grid-scroll-bottom: var(--aia-footer-band);--aia-grid-overlap-bottom: calc(-1 * (var(--aia-footer-band) + 8px));--aia-footer-fade-lead: 20px;--aia-footer-fade-inset: calc(-1 * var(--aia-footer-fade-lead)) 0 0}[data-aia-dropdown] [data-aia-pillbar] .aia-pill-list{padding-inline:10px}[data-aia-dropdown] [data-aia-pillbar] .aia-pill{justify-content:flex-start;border-inline-width:0;padding-inline:0}[data-aia-dropdown] .aia-grid[data-scroll]{padding-top:var(--aia-grid-scroll-top, 0);padding-bottom:var(--aia-grid-scroll-bottom, 0);margin-top:var(--aia-grid-overlap-top, 0);margin-bottom:var(--aia-grid-overlap-bottom, 0)}[data-aia-dropdown] [data-aia-footer]:before{content:\"\";position:absolute;inset:var(--aia-footer-fade-inset, -20px 0 0);z-index:-1;pointer-events:none;background:linear-gradient(to bottom,transparent,var(--aia-surface, #ffffff))}[data-aia-dropdown][data-aia-surface=glass]{--aia-footer-chip-bg: transparent}[data-aia-dropdown][data-aia-surface=glass] [data-aia-footer]:before{display:none}:where(.magicx-aia[data-options-position=\"above\"]) [data-aia-dropdown],[data-aia-dropdown][data-options-position=above]{--aia-grid-scroll-bottom: 0px;--aia-grid-overlap-bottom: 0px;--aia-grid-scroll-top: var(--aia-footer-band);--aia-grid-overlap-top: calc(-1 * (var(--aia-footer-band) + 8px));--aia-footer-fade-inset: 0 0 calc(-1 * var(--aia-footer-fade-lead));top:auto;bottom:100%;margin-top:0;margin-bottom:6px}[data-aia-dropdown][data-aia-has-products]{--aia-grid-scroll-bottom: 0px;--aia-grid-overlap-bottom: 0px;--aia-grid-scroll-top: 0px;--aia-grid-overlap-top: 0px;--aia-footer-fade-lead: 0px}:where(.magicx-aia[data-options-position=\"above\"]) [data-aia-dropdown] .aia-stack,[data-aia-dropdown][data-options-position=above] .aia-stack{flex-direction:column-reverse}:where(.magicx-aia[data-options-position=\"above\"]) [data-aia-dropdown] [data-aia-footer],[data-aia-dropdown][data-options-position=above] [data-aia-footer]{padding:0 8px var(--aia-footer-gap, 8px)}:where(.magicx-aia[data-options-position=\"above\"]) [data-aia-dropdown] [data-aia-footer]:before,[data-aia-dropdown][data-options-position=above] [data-aia-footer]:before{background:linear-gradient(to top,transparent,var(--aia-surface, #ffffff))}:where(.magicx-aia[data-options-position=\"above\"]) [data-aia-dropdown] .magicx-aia-footer,[data-aia-dropdown][data-options-position=above] .magicx-aia-footer{flex-direction:column-reverse}\n", ".magicx-aia-dropdown{position:absolute;left:0;right:0;top:100%;max-width:544px;margin-top:6px;display:flex;flex-direction:column;box-sizing:border-box;padding:10px 8px;overflow:hidden;container-type:inline-size;z-index:10;opacity:0;pointer-events:none;transition:opacity .4s cubic-bezier(.4,0,.2,1);background:var(--aia-surface, #ffffff);border:1px solid var(--aia-dropdown-border, rgba(231, 231, 231, .5));border-radius:18px;box-shadow:var(--aia-dropdown-shadow, 0 8px 12px rgba(0, 0, 0, .05))}.magicx-aia-dropdown[data-aia-surface=glass]{background:transparent;border-color:transparent;box-shadow:#fff -3.2px -3.2px 3.2px -3.2px inset,#fff 6.4px 6.4px 1.6px -8px inset,var(--aia-dropdown-bg, transparent) -6.4px 6.4px 1.6px -8px inset,var(--aia-dropdown-bg, transparent) 6.4px -6.4px 1.6px -8px inset,#ffffff26 -1.6px 0 0 -1.6px inset,#ffffff26 0 -1.6px 0 -1.6px inset,#ffffff4d 0 1.6px inset,#ffffff4d 1.6px 0 inset,inset 0 0 30px 5px #0000000d,#00000014 0 0 30px 2px;backdrop-filter:blur(30px)}.magicx-aia-dropdown-visible{opacity:1;pointer-events:auto}.magicx-aia-dropdown-pillbar{overflow:hidden}.magicx-aia-pill-scroll{display:inline-flex;align-items:center;flex:1 1 auto;min-width:0;overflow-x:auto;overflow-y:hidden;scrollbar-width:none;mask-image:linear-gradient(to right,#000 0,#000 calc(100% - 48px),transparent 100%);-webkit-mask-image:linear-gradient(to right,#000 0,#000 calc(100% - 48px),transparent 100%)}.magicx-aia-pill-scroll::-webkit-scrollbar{display:none}.magicx-aia-skip{display:inline-flex;align-items:center;margin-inline-start:auto;flex-shrink:0;padding:5px 8px;border:none;border-radius:6px;background:transparent;font-family:inherit;font-size:var(--aia-skip-font-size, 10px);line-height:18px;color:var(--aia-skip-color, var(--aia-footer-hint-color, #505050));cursor:pointer;white-space:nowrap;transition:color .15s ease-out,background-color .15s ease-out}.magicx-aia-skip:hover{color:var(--aia-skip-color-hover, var(--aia-pill-color, var(--aia-color-text-muted, #c1c4cb)));background:var(--aia-skip-hover-bg, var(--aia-option-bg, transparent))}.magicx-aia-skip:disabled{pointer-events:none;cursor:default;opacity:.5}.magicx-aia-footer{display:flex;flex-direction:column;gap:8px;padding:var(--aia-footer-gap, 8px) 8px 0;position:relative;z-index:3;pointer-events:none}.magicx-aia-footer-row{display:flex;align-items:center;justify-content:space-between}.magicx-aia-footer-hint-group{display:inline-flex;align-items:center;gap:5px}.magicx-aia-footer-hint-group,.magicx-aia-footer-brand-link{pointer-events:auto}.magicx-aia-footer-brand-link{display:inline-flex;align-items:center;gap:2px;text-decoration:none;cursor:pointer;transition:opacity .15s ease-out}.magicx-aia-footer-hint-group,.magicx-aia-footer-brand-link{background:var( --aia-footer-chip-bg, color-mix(in srgb, var(--aia-surface, #ffffff) 65%, transparent) );padding-inline:4px;border-radius:6px}.magicx-aia-footer-brand-link{background:var(--aia-footer-brand-pill-bg, var(--aia-surface, #ffffff));border-radius:999px;padding:2px 7px;gap:4px}.magicx-aia-footer-brand-link:hover{opacity:.7}.magicx-aia-footer-key{display:inline-flex;align-items:center;justify-content:center;min-width:30px;height:22px;padding:2px 6px;border:.5px solid var(--aia-footer-hint-color, #505050);border-radius:5px;font-family:inherit;font-size:11px;line-height:18px;color:var(--aia-footer-hint-color, #505050)}.magicx-aia-footer-hint{font-family:inherit;font-size:11px;line-height:18px;color:var(--aia-footer-hint-color, #505050)}.magicx-aia-footer-brand{font-family:inherit;font-size:10px;line-height:18px;color:var(--aia-footer-brand-color, #b0b0b0)}.magicx-aia-footer-badge{display:inline-flex;align-items:center;height:var(--aia-footer-row-height, 23px);padding:2.5px 5.5px;border:.5px solid var(--aia-footer-badge-border, rgba(189, 189, 189, .51));border-radius:999px;font-family:inherit;font-size:10px;line-height:18px;color:var(--aia-footer-brand-color, #b0b0b0)}@media (max-width: 768px){.magicx-aia-footer-hint-group{display:none}.magicx-aia-footer-row{justify-content:flex-end}}.magicx-aia-dropdown-skeleton-bars{display:flex;flex-direction:column;gap:20px;padding:7px 8px}.magicx-aia-dropdown-skeleton-bar{display:block;height:14px;border-radius:999px;background:var(--aia-skeleton-bg, var(--aia-pill-bg, rgba(189, 189, 189, .25)));opacity:.5;animation:aiaDropdownSkeletonPulse 1.4s ease-in-out infinite}.magicx-aia-dropdown-skeleton-bar:nth-child(2){animation-delay:.15s}.magicx-aia-dropdown-skeleton-bar:nth-child(3){animation-delay:.3s}@keyframes aiaDropdownSkeletonPulse{0%,to{opacity:.5}50%{opacity:.25}}\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"] }, { kind: "pipe", type: i1.AsyncPipe, name: "async" }, { kind: "component", type: PillListComponent, selector: "aia-pill-list", inputs: ["pills", "activePillIndex", "rounded", "loading", "activeSelected"], outputs: ["selectPill"] }, { kind: "component", type: ProductStripComponent, selector: "aia-product-strip", inputs: ["products", "listboxId", "focusable"], outputs: ["select", "focusChange"] }, { kind: "component", type: SuggestionGridComponent, selector: "aia-suggestion-grid", inputs: ["options", "activeIndex", "listboxId", "loading", "groupKey"], outputs: ["select", "highlight"] }, { kind: "component", type: StackComponent, selector: "aia-stack", inputs: ["space", "align"] }, { kind: "component", type: ClusterComponent, selector: "aia-cluster", inputs: ["gap", "align", "justify", "noWrap", "inline"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None });
|
|
241
|
+
AIAutocompleteDropdownComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "15.2.10", type: AIAutocompleteDropdownComponent, isStandalone: true, selector: "ai-autocomplete-dropdown", inputs: { controller: "controller", showPills: "showPills", showSkipButton: "showSkipButton", className: "className", mode: "mode" }, usesOnChanges: true, ngImport: i0, template: "<div\n *ngIf=\"vm$ | async as vm\"\n [id]=\"controller.listboxId\"\n role=\"listbox\"\n data-aia-dropdown=\"\"\n [attr.data-aia-loading]=\"vm.isLoading ? '' : null\"\n [attr.data-mode]=\"resolvedMode\"\n [attr.data-options-position]=\"vm.optionsPosition\"\n [attr.data-aia-has-products]=\"vm.products.length > 0 ? '' : null\"\n [class]=\"rootClass\"\n [class.magicx-aia-dropdown-visible]=\"vm.isVisible\"\n (mousedown)=\"preventBlur($event)\"\n>\n <aia-stack space=\"8px\">\n <aia-cluster\n *ngIf=\"vm.showsPills || vm.showsSkip\"\n class=\"magicx-aia-dropdown-pillbar\"\n data-aia-pillbar=\"\"\n [noWrap]=\"true\"\n >\n <!-- The scroll + right-edge fade live on this wrapper (not the bar) so\n the skip button stays outside the masked region \u2014 pinned and fully\n opaque while overflowing pills fade under it. Absent in a skip-only\n row (pills rendered elsewhere via pillPlacement inline/hidden). -->\n <span *ngIf=\"vm.showsPills\" class=\"magicx-aia-pill-scroll\" data-aia-pill-scroll=\"\">\n <aia-pill-list\n [pills]=\"vm.pills\"\n [activePillIndex]=\"0\"\n [activeSelected]=\"vm.isActivePillSelected\"\n [rounded]=\"true\"\n [loading]=\"vm.isLoading\"\n (selectPill)=\"onPillClick($event)\"\n ></aia-pill-list>\n </span>\n <button\n *ngIf=\"vm.showsSkip\"\n type=\"button\"\n tabindex=\"-1\"\n class=\"magicx-aia-skip\"\n data-aia-skip=\"\"\n [disabled]=\"vm.skipDisabled\"\n [attr.aria-label]=\"vm.activePillLabel ? 'Skip ' + vm.activePillLabel : 'Skip'\"\n (click)=\"onSkip()\"\n >\n skip\n </button>\n </aia-cluster>\n\n <aia-suggestion-grid\n *ngIf=\"vm.showsOptions\"\n [options]=\"vm.options\"\n [activeIndex]=\"vm.activeIndex\"\n [listboxId]=\"controller.listboxId\"\n [loading]=\"vm.isLoading\"\n [groupKey]=\"vm.groupKey\"\n (select)=\"onSelect($event)\"\n (highlight)=\"onHighlight($event)\"\n ></aia-suggestion-grid>\n\n <aia-date-grid\n *ngIf=\"vm.showsDateGrid\"\n [options]=\"vm.options\"\n [activeIndex]=\"vm.activeIndex\"\n [listboxId]=\"controller.listboxId\"\n [view]=\"vm.dateView\"\n [selectedIso]=\"vm.selectedDateIso\"\n (select)=\"onSelect($event)\"\n (highlight)=\"onHighlight($event)\"\n (previousMonth)=\"onPreviousMonth()\"\n (nextMonth)=\"onNextMonth()\"\n ></aia-date-grid>\n\n <div\n *ngIf=\"vm.showsFallbackSkeleton\"\n class=\"magicx-aia-dropdown-skeleton-bars\"\n data-aia-skeleton-bars=\"\"\n >\n <span\n *ngFor=\"let w of fallbackSkeletonBarWidths; trackBy: trackByWidth\"\n class=\"magicx-aia-dropdown-skeleton-bar\"\n [style.width.px]=\"w\"\n ></span>\n </div>\n\n <!-- *ngIf, not just the section's own guard inside the component: the host\n element is an in-flow child of .aia-stack (display:flex; gap:8px), so\n an always-instantiated zero-height host would add a SECOND 8px gap\n between the grid and the footer \u2014 in every dropdown, products or not.\n The grid's --aia-grid-overlap-bottom is tuned for exactly one gap, so\n the footer would land 8px below the band it is meant to cover. -->\n <aia-product-strip\n *ngIf=\"vm.products.length > 0\"\n [products]=\"vm.products\"\n [listboxId]=\"controller.listboxId\"\n [focusable]=\"vm.isVisible\"\n (select)=\"onProductSelect($event)\"\n (focusChange)=\"onProductFocusChange($event)\"\n ></aia-product-strip>\n\n <footer class=\"magicx-aia-footer\" data-aia-footer=\"\">\n <div class=\"magicx-aia-footer-row\">\n <span class=\"magicx-aia-footer-hint-group\">\n <kbd class=\"magicx-aia-footer-key\">{{ vm.footerKey }}</kbd>\n <span class=\"magicx-aia-footer-hint\">{{ vm.footerHint }}</span>\n </span>\n <a\n class=\"magicx-aia-footer-brand-link\"\n [href]=\"brandHref\"\n target=\"_blank\"\n rel=\"noopener noreferrer\"\n >\n <span class=\"magicx-aia-footer-brand\">AI</span>\n <span class=\"magicx-aia-footer-badge\">Autocomplete</span>\n </a>\n </div>\n </footer>\n </aia-stack>\n</div>\n", styles: [":where(.magicx-aia,.magicx-aia *,.magicx-aia *::before,.magicx-aia *::after){box-sizing:border-box}:where(.magicx-aia){--aia-primitive-neutral-0: #000000;--aia-primitive-neutral-150: #1a1b1d;--aia-primitive-neutral-250: #323232;--aia-primitive-neutral-300: #333539;--aia-primitive-neutral-400: #4a4a4a;--aia-primitive-neutral-500: #505050;--aia-primitive-neutral-700: #b0b0b0;--aia-primitive-neutral-750: #bdbdbd;--aia-primitive-neutral-900: #e7e7e7;--aia-primitive-neutral-1000: #ffffff;--aia-primitive-blue-50: #eef2ff;--aia-primitive-neutral-750-a50: rgba(189, 189, 189, .51);--aia-primitive-neutral-750-a25: rgba(189, 189, 189, .25);--aia-primitive-neutral-750-a35: rgba(189, 189, 189, .35);--aia-primitive-neutral-750-a30: rgba(189, 189, 189, .3);--aia-primitive-neutral-750-a15: rgba(189, 189, 189, .15);--aia-primitive-neutral-750-a105: rgba(189, 189, 189, .105);--aia-primitive-neutral-700-a40: rgba(176, 176, 176, .4);--aia-primitive-neutral-900-a50: rgba(231, 231, 231, .5);--aia-primitive-neutral-400-a50: rgba(74, 74, 74, .5)}:where(.magicx-aia),:where(.magicx-aia[data-mode=\"light\"]){--aia-surface: var(--aia-primitive-neutral-1000);--aia-border: var(--aia-primitive-neutral-700);--aia-dropdown-border: var(--aia-primitive-neutral-900-a50);--aia-dropdown-shadow: 0 8px 12px rgba(0, 0, 0, .05);--aia-pill-bg: var(--aia-primitive-neutral-750);--aia-pill-color: var(--aia-primitive-neutral-300);--aia-pill-font-size: 16px;--aia-completed-pill-bg: var(--aia-primitive-neutral-750-a105);--aia-completed-pill-bg-active: var(--aia-primitive-neutral-750-a35);--aia-completed-pill-color: var(--aia-primitive-neutral-0);--aia-option-bg: var(--aia-primitive-blue-50);--aia-option-color: var(--aia-primitive-neutral-150);--aia-option-color-selected: var(--aia-primitive-neutral-0);--aia-option-font-size: 16px;--aia-written-text-color: var(--aia-primitive-neutral-0);--aia-written-text-font-size: 16px;--aia-caret-color: var(--aia-written-text-color, #000000);--aia-submit-bg: var(--aia-primitive-neutral-0);--aia-submit-color: var(--aia-primitive-neutral-1000);--aia-color-text-muted: #6b7280;--aia-skeleton-bg: var(--aia-primitive-neutral-750-a25);--aia-streak-rgb: 99, 102, 241;--aia-streak-glass-bg: rgba(99, 102, 241, .1);--aia-footer-hint-color: var(--aia-primitive-neutral-500);--aia-footer-brand-color: var(--aia-primitive-neutral-700);--aia-footer-badge-border: var(--aia-primitive-neutral-750-a50)}:where(.magicx-aia[data-mode=\"dark\"]){--aia-surface: var(--aia-primitive-neutral-0);--aia-border: var(--aia-primitive-neutral-500);--aia-dropdown-border: var(--aia-primitive-neutral-400-a50);--aia-dropdown-shadow: 0 8px 12px rgba(0, 0, 0, .05);--aia-pill-bg: var(--aia-primitive-neutral-750);--aia-pill-color: var(--aia-primitive-neutral-700);--aia-pill-font-size: 16px;--aia-completed-pill-bg: var(--aia-primitive-neutral-750-a15);--aia-completed-pill-bg-active: var(--aia-primitive-neutral-750-a35);--aia-completed-pill-color: var(--aia-primitive-neutral-1000);--aia-option-bg: var(--aia-primitive-neutral-250);--aia-option-color: var(--aia-primitive-neutral-900);--aia-option-color-selected: var(--aia-primitive-neutral-1000);--aia-option-font-size: 16px;--aia-written-text-color: var(--aia-primitive-neutral-1000);--aia-written-text-font-size: 16px;--aia-caret-color: var(--aia-written-text-color, #ffffff);--aia-submit-bg: var(--aia-primitive-neutral-1000);--aia-submit-color: var(--aia-primitive-neutral-0);--aia-color-text-muted: #c1c4cb;--aia-skeleton-bg: var(--aia-primitive-neutral-150);--aia-streak-rgb: 255, 255, 255;--aia-streak-glass-bg: rgba(255, 255, 255, .1);--aia-footer-hint-color: var(--aia-primitive-neutral-700);--aia-footer-brand-color: var(--aia-primitive-neutral-500);--aia-footer-badge-border: var(--aia-primitive-neutral-500)}[data-aia-dropdown]{--aia-footer-row-height: 23px;--aia-footer-band: calc(var(--aia-footer-gap, 8px) + var(--aia-footer-row-height, 23px));--aia-grid-scroll-bottom: var(--aia-footer-band);--aia-grid-overlap-bottom: calc(-1 * (var(--aia-footer-band) + 8px));--aia-footer-fade-lead: 20px;--aia-footer-fade-inset: calc(-1 * var(--aia-footer-fade-lead)) 0 0}[data-aia-dropdown] [data-aia-pillbar] .aia-pill-list{padding-inline:10px}[data-aia-dropdown] [data-aia-pillbar] .aia-pill{justify-content:flex-start;border-inline-width:0;padding-inline:0}[data-aia-dropdown] .aia-grid[data-scroll]{padding-top:var(--aia-grid-scroll-top, 0);padding-bottom:var(--aia-grid-scroll-bottom, 0);margin-top:var(--aia-grid-overlap-top, 0);margin-bottom:var(--aia-grid-overlap-bottom, 0)}[data-aia-dropdown] [data-aia-footer]:before{content:\"\";position:absolute;inset:var(--aia-footer-fade-inset, -20px 0 0);z-index:-1;pointer-events:none;background:linear-gradient(to bottom,transparent,var(--aia-surface, #ffffff))}[data-aia-dropdown][data-aia-surface=glass]{--aia-footer-chip-bg: transparent}[data-aia-dropdown][data-aia-surface=glass] [data-aia-footer]:before{display:none}:where(.magicx-aia[data-options-position=\"above\"]) [data-aia-dropdown],[data-aia-dropdown][data-options-position=above]{--aia-grid-scroll-bottom: 0px;--aia-grid-overlap-bottom: 0px;--aia-grid-scroll-top: var(--aia-footer-band);--aia-grid-overlap-top: calc(-1 * (var(--aia-footer-band) + 8px));--aia-footer-fade-inset: 0 0 calc(-1 * var(--aia-footer-fade-lead));top:auto;bottom:100%;margin-top:0;margin-bottom:6px}[data-aia-dropdown][data-aia-has-products]{--aia-grid-scroll-bottom: 0px;--aia-grid-overlap-bottom: 0px;--aia-grid-scroll-top: 0px;--aia-grid-overlap-top: 0px;--aia-footer-fade-lead: 0px}:where(.magicx-aia[data-options-position=\"above\"]) [data-aia-dropdown] .aia-stack,[data-aia-dropdown][data-options-position=above] .aia-stack{flex-direction:column-reverse}:where(.magicx-aia[data-options-position=\"above\"]) [data-aia-dropdown] [data-aia-footer],[data-aia-dropdown][data-options-position=above] [data-aia-footer]{padding:0 8px var(--aia-footer-gap, 8px)}:where(.magicx-aia[data-options-position=\"above\"]) [data-aia-dropdown] [data-aia-footer]:before,[data-aia-dropdown][data-options-position=above] [data-aia-footer]:before{background:linear-gradient(to top,transparent,var(--aia-surface, #ffffff))}:where(.magicx-aia[data-options-position=\"above\"]) [data-aia-dropdown] .magicx-aia-footer,[data-aia-dropdown][data-options-position=above] .magicx-aia-footer{flex-direction:column-reverse}\n", ".magicx-aia-dropdown{position:absolute;left:0;right:0;top:100%;max-width:544px;margin-top:6px;display:flex;flex-direction:column;box-sizing:border-box;padding:10px 8px;overflow:hidden;container-type:inline-size;z-index:10;opacity:0;pointer-events:none;transition:opacity .4s cubic-bezier(.4,0,.2,1);background:var(--aia-surface, #ffffff);border:1px solid var(--aia-dropdown-border, rgba(231, 231, 231, .5));border-radius:18px;box-shadow:var(--aia-dropdown-shadow, 0 8px 12px rgba(0, 0, 0, .05))}.magicx-aia-dropdown[data-aia-surface=glass]{background:transparent;border-color:transparent;box-shadow:#fff -3.2px -3.2px 3.2px -3.2px inset,#fff 6.4px 6.4px 1.6px -8px inset,var(--aia-dropdown-bg, transparent) -6.4px 6.4px 1.6px -8px inset,var(--aia-dropdown-bg, transparent) 6.4px -6.4px 1.6px -8px inset,#ffffff26 -1.6px 0 0 -1.6px inset,#ffffff26 0 -1.6px 0 -1.6px inset,#ffffff4d 0 1.6px inset,#ffffff4d 1.6px 0 inset,inset 0 0 30px 5px #0000000d,#00000014 0 0 30px 2px;backdrop-filter:blur(30px)}.magicx-aia-dropdown-visible{opacity:1;pointer-events:auto}.magicx-aia-dropdown-pillbar{overflow:hidden}.magicx-aia-pill-scroll{display:inline-flex;align-items:center;flex:1 1 auto;min-width:0;overflow-x:auto;overflow-y:hidden;scrollbar-width:none;mask-image:linear-gradient(to right,#000 0,#000 calc(100% - 48px),transparent 100%);-webkit-mask-image:linear-gradient(to right,#000 0,#000 calc(100% - 48px),transparent 100%)}.magicx-aia-pill-scroll::-webkit-scrollbar{display:none}.magicx-aia-skip{display:inline-flex;align-items:center;margin-inline-start:auto;flex-shrink:0;padding:5px 8px;border:none;border-radius:6px;background:transparent;font-family:inherit;font-size:var(--aia-skip-font-size, 10px);line-height:18px;color:var(--aia-skip-color, var(--aia-footer-hint-color, #505050));cursor:pointer;white-space:nowrap;transition:color .15s ease-out,background-color .15s ease-out}.magicx-aia-skip:hover{color:var(--aia-skip-color-hover, var(--aia-pill-color, var(--aia-color-text-muted, #c1c4cb)));background:var(--aia-skip-hover-bg, var(--aia-option-bg, transparent))}.magicx-aia-skip:disabled{pointer-events:none;cursor:default;opacity:.5}.magicx-aia-footer{display:flex;flex-direction:column;gap:8px;padding:var(--aia-footer-gap, 8px) 8px 0;position:relative;z-index:3;pointer-events:none}.magicx-aia-footer-row{display:flex;align-items:center;justify-content:space-between}.magicx-aia-footer-hint-group{display:inline-flex;align-items:center;gap:5px}.magicx-aia-footer-hint-group,.magicx-aia-footer-brand-link{pointer-events:auto}.magicx-aia-footer-brand-link{display:inline-flex;align-items:center;gap:2px;text-decoration:none;cursor:pointer;transition:opacity .15s ease-out}.magicx-aia-footer-hint-group,.magicx-aia-footer-brand-link{background:var( --aia-footer-chip-bg, color-mix(in srgb, var(--aia-surface, #ffffff) 65%, transparent) );padding-inline:4px;border-radius:6px}.magicx-aia-footer-brand-link{background:var(--aia-footer-brand-pill-bg, var(--aia-surface, #ffffff));border-radius:999px;padding:2px 7px;gap:4px}.magicx-aia-footer-brand-link:hover{opacity:.7}.magicx-aia-footer-key{display:inline-flex;align-items:center;justify-content:center;min-width:30px;height:22px;padding:2px 6px;border:.5px solid var(--aia-footer-hint-color, #505050);border-radius:5px;font-family:inherit;font-size:11px;line-height:18px;color:var(--aia-footer-hint-color, #505050)}.magicx-aia-footer-hint{font-family:inherit;font-size:11px;line-height:18px;color:var(--aia-footer-hint-color, #505050)}.magicx-aia-footer-brand{font-family:inherit;font-size:10px;line-height:18px;color:var(--aia-footer-brand-color, #b0b0b0)}.magicx-aia-footer-badge{display:inline-flex;align-items:center;height:var(--aia-footer-row-height, 23px);padding:2.5px 5.5px;border:.5px solid var(--aia-footer-badge-border, rgba(189, 189, 189, .51));border-radius:999px;font-family:inherit;font-size:10px;line-height:18px;color:var(--aia-footer-brand-color, #b0b0b0)}@media (max-width: 768px){.magicx-aia-footer-hint-group{display:none}.magicx-aia-footer-row{justify-content:flex-end}}.magicx-aia-dropdown-skeleton-bars{display:flex;flex-direction:column;gap:20px;padding:7px 8px}.magicx-aia-dropdown-skeleton-bar{display:block;height:14px;border-radius:999px;background:var(--aia-skeleton-bg, var(--aia-pill-bg, rgba(189, 189, 189, .25)));opacity:.5;animation:aiaDropdownSkeletonPulse 1.4s ease-in-out infinite}.magicx-aia-dropdown-skeleton-bar:nth-child(2){animation-delay:.15s}.magicx-aia-dropdown-skeleton-bar:nth-child(3){animation-delay:.3s}@keyframes aiaDropdownSkeletonPulse{0%,to{opacity:.5}50%{opacity:.25}}\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"] }, { kind: "pipe", type: i1.AsyncPipe, name: "async" }, { kind: "component", type: PillListComponent, selector: "aia-pill-list", inputs: ["pills", "activePillIndex", "rounded", "loading", "activeSelected"], outputs: ["selectPill"] }, { kind: "component", type: ProductStripComponent, selector: "aia-product-strip", inputs: ["products", "listboxId", "focusable"], outputs: ["select", "focusChange"] }, { kind: "component", type: SuggestionGridComponent, selector: "aia-suggestion-grid", inputs: ["options", "activeIndex", "listboxId", "loading", "groupKey"], outputs: ["select", "highlight"] }, { kind: "component", type: DateGridComponent, selector: "aia-date-grid", inputs: ["options", "activeIndex", "listboxId", "view", "selectedIso"], outputs: ["select", "highlight", "previousMonth", "nextMonth"] }, { kind: "component", type: StackComponent, selector: "aia-stack", inputs: ["space", "align"] }, { kind: "component", type: ClusterComponent, selector: "aia-cluster", inputs: ["gap", "align", "justify", "noWrap", "inline"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None });
|
|
224
242
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.10", ngImport: i0, type: AIAutocompleteDropdownComponent, decorators: [{
|
|
225
243
|
type: Component,
|
|
226
244
|
args: [{ selector: "ai-autocomplete-dropdown", standalone: true, imports: [
|
|
@@ -228,9 +246,10 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.10", ngImpo
|
|
|
228
246
|
PillListComponent,
|
|
229
247
|
ProductStripComponent,
|
|
230
248
|
SuggestionGridComponent,
|
|
249
|
+
DateGridComponent,
|
|
231
250
|
StackComponent,
|
|
232
251
|
ClusterComponent,
|
|
233
|
-
], changeDetection: ChangeDetectionStrategy.OnPush, encapsulation: ViewEncapsulation.None, template: "<div\n *ngIf=\"vm$ | async as vm\"\n [id]=\"controller.listboxId\"\n role=\"listbox\"\n data-aia-dropdown=\"\"\n [attr.data-aia-loading]=\"vm.isLoading ? '' : null\"\n [attr.data-mode]=\"resolvedMode\"\n [attr.data-options-position]=\"vm.optionsPosition\"\n [attr.data-aia-has-products]=\"vm.products.length > 0 ? '' : null\"\n [class]=\"rootClass\"\n [class.magicx-aia-dropdown-visible]=\"vm.isVisible\"\n (mousedown)=\"preventBlur($event)\"\n>\n <aia-stack space=\"8px\">\n <aia-cluster\n *ngIf=\"vm.showsPills || vm.showsSkip\"\n class=\"magicx-aia-dropdown-pillbar\"\n data-aia-pillbar=\"\"\n [noWrap]=\"true\"\n >\n <!-- The scroll + right-edge fade live on this wrapper (not the bar) so\n the skip button stays outside the masked region \u2014 pinned and fully\n opaque while overflowing pills fade under it. Absent in a skip-only\n row (pills rendered elsewhere via pillPlacement inline/hidden). -->\n <span *ngIf=\"vm.showsPills\" class=\"magicx-aia-pill-scroll\" data-aia-pill-scroll=\"\">\n <aia-pill-list\n [pills]=\"vm.pills\"\n [activePillIndex]=\"0\"\n [activeSelected]=\"vm.isActivePillSelected\"\n [rounded]=\"true\"\n [loading]=\"vm.isLoading\"\n (selectPill)=\"onPillClick($event)\"\n ></aia-pill-list>\n </span>\n <button\n *ngIf=\"vm.showsSkip\"\n type=\"button\"\n tabindex=\"-1\"\n class=\"magicx-aia-skip\"\n data-aia-skip=\"\"\n [disabled]=\"vm.skipDisabled\"\n [attr.aria-label]=\"vm.activePillLabel ? 'Skip ' + vm.activePillLabel : 'Skip'\"\n (click)=\"onSkip()\"\n >\n skip\n </button>\n </aia-cluster>\n\n <aia-suggestion-grid\n *ngIf=\"vm.showsOptions\"\n [options]=\"vm.options\"\n [activeIndex]=\"vm.activeIndex\"\n [listboxId]=\"controller.listboxId\"\n [loading]=\"vm.isLoading\"\n [groupKey]=\"vm.groupKey\"\n (select)=\"onSelect($event)\"\n (highlight)=\"onHighlight($event)\"\n ></aia-suggestion-grid>\n\n <div\n *ngIf=\"vm.showsFallbackSkeleton\"\n class=\"magicx-aia-dropdown-skeleton-bars\"\n data-aia-skeleton-bars=\"\"\n >\n <span\n *ngFor=\"let w of fallbackSkeletonBarWidths; trackBy: trackByWidth\"\n class=\"magicx-aia-dropdown-skeleton-bar\"\n [style.width.px]=\"w\"\n ></span>\n </div>\n\n <!-- *ngIf, not just the section's own guard inside the component: the host\n element is an in-flow child of .aia-stack (display:flex; gap:8px), so\n an always-instantiated zero-height host would add a SECOND 8px gap\n between the grid and the footer \u2014 in every dropdown, products or not.\n The grid's --aia-grid-overlap-bottom is tuned for exactly one gap, so\n the footer would land 8px below the band it is meant to cover. -->\n <aia-product-strip\n *ngIf=\"vm.products.length > 0\"\n [products]=\"vm.products\"\n [listboxId]=\"controller.listboxId\"\n [focusable]=\"vm.isVisible\"\n (select)=\"onProductSelect($event)\"\n (focusChange)=\"onProductFocusChange($event)\"\n ></aia-product-strip>\n\n <footer class=\"magicx-aia-footer\" data-aia-footer=\"\">\n <div class=\"magicx-aia-footer-row\">\n <span class=\"magicx-aia-footer-hint-group\">\n <kbd class=\"magicx-aia-footer-key\">{{ vm.footerKey }}</kbd>\n <span class=\"magicx-aia-footer-hint\">{{ vm.footerHint }}</span>\n </span>\n <a\n class=\"magicx-aia-footer-brand-link\"\n [href]=\"brandHref\"\n target=\"_blank\"\n rel=\"noopener noreferrer\"\n >\n <span class=\"magicx-aia-footer-brand\">AI</span>\n <span class=\"magicx-aia-footer-badge\">Autocomplete</span>\n </a>\n </div>\n </footer>\n </aia-stack>\n</div>\n", styles: [":where(.magicx-aia,.magicx-aia *,.magicx-aia *::before,.magicx-aia *::after){box-sizing:border-box}:where(.magicx-aia){--aia-primitive-neutral-0: #000000;--aia-primitive-neutral-150: #1a1b1d;--aia-primitive-neutral-250: #323232;--aia-primitive-neutral-300: #333539;--aia-primitive-neutral-400: #4a4a4a;--aia-primitive-neutral-500: #505050;--aia-primitive-neutral-700: #b0b0b0;--aia-primitive-neutral-750: #bdbdbd;--aia-primitive-neutral-900: #e7e7e7;--aia-primitive-neutral-1000: #ffffff;--aia-primitive-blue-50: #eef2ff;--aia-primitive-neutral-750-a50: rgba(189, 189, 189, .51);--aia-primitive-neutral-750-a25: rgba(189, 189, 189, .25);--aia-primitive-neutral-750-a35: rgba(189, 189, 189, .35);--aia-primitive-neutral-750-a30: rgba(189, 189, 189, .3);--aia-primitive-neutral-750-a15: rgba(189, 189, 189, .15);--aia-primitive-neutral-750-a105: rgba(189, 189, 189, .105);--aia-primitive-neutral-700-a40: rgba(176, 176, 176, .4);--aia-primitive-neutral-900-a50: rgba(231, 231, 231, .5);--aia-primitive-neutral-400-a50: rgba(74, 74, 74, .5)}:where(.magicx-aia),:where(.magicx-aia[data-mode=\"light\"]){--aia-surface: var(--aia-primitive-neutral-1000);--aia-border: var(--aia-primitive-neutral-700);--aia-dropdown-border: var(--aia-primitive-neutral-900-a50);--aia-dropdown-shadow: 0 8px 12px rgba(0, 0, 0, .05);--aia-pill-bg: var(--aia-primitive-neutral-750);--aia-pill-color: var(--aia-primitive-neutral-300);--aia-pill-font-size: 16px;--aia-completed-pill-bg: var(--aia-primitive-neutral-750-a105);--aia-completed-pill-bg-active: var(--aia-primitive-neutral-750-a35);--aia-completed-pill-color: var(--aia-primitive-neutral-0);--aia-option-bg: var(--aia-primitive-blue-50);--aia-option-color: var(--aia-primitive-neutral-150);--aia-option-color-selected: var(--aia-primitive-neutral-0);--aia-option-font-size: 16px;--aia-written-text-color: var(--aia-primitive-neutral-0);--aia-written-text-font-size: 16px;--aia-caret-color: var(--aia-written-text-color, #000000);--aia-submit-bg: var(--aia-primitive-neutral-0);--aia-submit-color: var(--aia-primitive-neutral-1000);--aia-color-text-muted: #6b7280;--aia-skeleton-bg: var(--aia-primitive-neutral-750-a25);--aia-streak-rgb: 99, 102, 241;--aia-streak-glass-bg: rgba(99, 102, 241, .1);--aia-footer-hint-color: var(--aia-primitive-neutral-500);--aia-footer-brand-color: var(--aia-primitive-neutral-700);--aia-footer-badge-border: var(--aia-primitive-neutral-750-a50)}:where(.magicx-aia[data-mode=\"dark\"]){--aia-surface: var(--aia-primitive-neutral-0);--aia-border: var(--aia-primitive-neutral-500);--aia-dropdown-border: var(--aia-primitive-neutral-400-a50);--aia-dropdown-shadow: 0 8px 12px rgba(0, 0, 0, .05);--aia-pill-bg: var(--aia-primitive-neutral-750);--aia-pill-color: var(--aia-primitive-neutral-700);--aia-pill-font-size: 16px;--aia-completed-pill-bg: var(--aia-primitive-neutral-750-a15);--aia-completed-pill-bg-active: var(--aia-primitive-neutral-750-a35);--aia-completed-pill-color: var(--aia-primitive-neutral-1000);--aia-option-bg: var(--aia-primitive-neutral-250);--aia-option-color: var(--aia-primitive-neutral-900);--aia-option-color-selected: var(--aia-primitive-neutral-1000);--aia-option-font-size: 16px;--aia-written-text-color: var(--aia-primitive-neutral-1000);--aia-written-text-font-size: 16px;--aia-caret-color: var(--aia-written-text-color, #ffffff);--aia-submit-bg: var(--aia-primitive-neutral-1000);--aia-submit-color: var(--aia-primitive-neutral-0);--aia-color-text-muted: #c1c4cb;--aia-skeleton-bg: var(--aia-primitive-neutral-150);--aia-streak-rgb: 255, 255, 255;--aia-streak-glass-bg: rgba(255, 255, 255, .1);--aia-footer-hint-color: var(--aia-primitive-neutral-700);--aia-footer-brand-color: var(--aia-primitive-neutral-500);--aia-footer-badge-border: var(--aia-primitive-neutral-500)}[data-aia-dropdown]{--aia-footer-row-height: 23px;--aia-footer-band: calc(var(--aia-footer-gap, 8px) + var(--aia-footer-row-height, 23px));--aia-grid-scroll-bottom: var(--aia-footer-band);--aia-grid-overlap-bottom: calc(-1 * (var(--aia-footer-band) + 8px));--aia-footer-fade-lead: 20px;--aia-footer-fade-inset: calc(-1 * var(--aia-footer-fade-lead)) 0 0}[data-aia-dropdown] [data-aia-pillbar] .aia-pill-list{padding-inline:10px}[data-aia-dropdown] [data-aia-pillbar] .aia-pill{justify-content:flex-start;border-inline-width:0;padding-inline:0}[data-aia-dropdown] .aia-grid[data-scroll]{padding-top:var(--aia-grid-scroll-top, 0);padding-bottom:var(--aia-grid-scroll-bottom, 0);margin-top:var(--aia-grid-overlap-top, 0);margin-bottom:var(--aia-grid-overlap-bottom, 0)}[data-aia-dropdown] [data-aia-footer]:before{content:\"\";position:absolute;inset:var(--aia-footer-fade-inset, -20px 0 0);z-index:-1;pointer-events:none;background:linear-gradient(to bottom,transparent,var(--aia-surface, #ffffff))}[data-aia-dropdown][data-aia-surface=glass]{--aia-footer-chip-bg: transparent}[data-aia-dropdown][data-aia-surface=glass] [data-aia-footer]:before{display:none}:where(.magicx-aia[data-options-position=\"above\"]) [data-aia-dropdown],[data-aia-dropdown][data-options-position=above]{--aia-grid-scroll-bottom: 0px;--aia-grid-overlap-bottom: 0px;--aia-grid-scroll-top: var(--aia-footer-band);--aia-grid-overlap-top: calc(-1 * (var(--aia-footer-band) + 8px));--aia-footer-fade-inset: 0 0 calc(-1 * var(--aia-footer-fade-lead));top:auto;bottom:100%;margin-top:0;margin-bottom:6px}[data-aia-dropdown][data-aia-has-products]{--aia-grid-scroll-bottom: 0px;--aia-grid-overlap-bottom: 0px;--aia-grid-scroll-top: 0px;--aia-grid-overlap-top: 0px;--aia-footer-fade-lead: 0px}:where(.magicx-aia[data-options-position=\"above\"]) [data-aia-dropdown] .aia-stack,[data-aia-dropdown][data-options-position=above] .aia-stack{flex-direction:column-reverse}:where(.magicx-aia[data-options-position=\"above\"]) [data-aia-dropdown] [data-aia-footer],[data-aia-dropdown][data-options-position=above] [data-aia-footer]{padding:0 8px var(--aia-footer-gap, 8px)}:where(.magicx-aia[data-options-position=\"above\"]) [data-aia-dropdown] [data-aia-footer]:before,[data-aia-dropdown][data-options-position=above] [data-aia-footer]:before{background:linear-gradient(to top,transparent,var(--aia-surface, #ffffff))}:where(.magicx-aia[data-options-position=\"above\"]) [data-aia-dropdown] .magicx-aia-footer,[data-aia-dropdown][data-options-position=above] .magicx-aia-footer{flex-direction:column-reverse}\n", ".magicx-aia-dropdown{position:absolute;left:0;right:0;top:100%;max-width:544px;margin-top:6px;display:flex;flex-direction:column;box-sizing:border-box;padding:10px 8px;overflow:hidden;container-type:inline-size;z-index:10;opacity:0;pointer-events:none;transition:opacity .4s cubic-bezier(.4,0,.2,1);background:var(--aia-surface, #ffffff);border:1px solid var(--aia-dropdown-border, rgba(231, 231, 231, .5));border-radius:18px;box-shadow:var(--aia-dropdown-shadow, 0 8px 12px rgba(0, 0, 0, .05))}.magicx-aia-dropdown[data-aia-surface=glass]{background:transparent;border-color:transparent;box-shadow:#fff -3.2px -3.2px 3.2px -3.2px inset,#fff 6.4px 6.4px 1.6px -8px inset,var(--aia-dropdown-bg, transparent) -6.4px 6.4px 1.6px -8px inset,var(--aia-dropdown-bg, transparent) 6.4px -6.4px 1.6px -8px inset,#ffffff26 -1.6px 0 0 -1.6px inset,#ffffff26 0 -1.6px 0 -1.6px inset,#ffffff4d 0 1.6px inset,#ffffff4d 1.6px 0 inset,inset 0 0 30px 5px #0000000d,#00000014 0 0 30px 2px;backdrop-filter:blur(30px)}.magicx-aia-dropdown-visible{opacity:1;pointer-events:auto}.magicx-aia-dropdown-pillbar{overflow:hidden}.magicx-aia-pill-scroll{display:inline-flex;align-items:center;flex:1 1 auto;min-width:0;overflow-x:auto;overflow-y:hidden;scrollbar-width:none;mask-image:linear-gradient(to right,#000 0,#000 calc(100% - 48px),transparent 100%);-webkit-mask-image:linear-gradient(to right,#000 0,#000 calc(100% - 48px),transparent 100%)}.magicx-aia-pill-scroll::-webkit-scrollbar{display:none}.magicx-aia-skip{display:inline-flex;align-items:center;margin-inline-start:auto;flex-shrink:0;padding:5px 8px;border:none;border-radius:6px;background:transparent;font-family:inherit;font-size:var(--aia-skip-font-size, 10px);line-height:18px;color:var(--aia-skip-color, var(--aia-footer-hint-color, #505050));cursor:pointer;white-space:nowrap;transition:color .15s ease-out,background-color .15s ease-out}.magicx-aia-skip:hover{color:var(--aia-skip-color-hover, var(--aia-pill-color, var(--aia-color-text-muted, #c1c4cb)));background:var(--aia-skip-hover-bg, var(--aia-option-bg, transparent))}.magicx-aia-skip:disabled{pointer-events:none;cursor:default;opacity:.5}.magicx-aia-footer{display:flex;flex-direction:column;gap:8px;padding:var(--aia-footer-gap, 8px) 8px 0;position:relative;z-index:3;pointer-events:none}.magicx-aia-footer-row{display:flex;align-items:center;justify-content:space-between}.magicx-aia-footer-hint-group{display:inline-flex;align-items:center;gap:5px}.magicx-aia-footer-hint-group,.magicx-aia-footer-brand-link{pointer-events:auto}.magicx-aia-footer-brand-link{display:inline-flex;align-items:center;gap:2px;text-decoration:none;cursor:pointer;transition:opacity .15s ease-out}.magicx-aia-footer-hint-group,.magicx-aia-footer-brand-link{background:var( --aia-footer-chip-bg, color-mix(in srgb, var(--aia-surface, #ffffff) 65%, transparent) );padding-inline:4px;border-radius:6px}.magicx-aia-footer-brand-link{background:var(--aia-footer-brand-pill-bg, var(--aia-surface, #ffffff));border-radius:999px;padding:2px 7px;gap:4px}.magicx-aia-footer-brand-link:hover{opacity:.7}.magicx-aia-footer-key{display:inline-flex;align-items:center;justify-content:center;min-width:30px;height:22px;padding:2px 6px;border:.5px solid var(--aia-footer-hint-color, #505050);border-radius:5px;font-family:inherit;font-size:11px;line-height:18px;color:var(--aia-footer-hint-color, #505050)}.magicx-aia-footer-hint{font-family:inherit;font-size:11px;line-height:18px;color:var(--aia-footer-hint-color, #505050)}.magicx-aia-footer-brand{font-family:inherit;font-size:10px;line-height:18px;color:var(--aia-footer-brand-color, #b0b0b0)}.magicx-aia-footer-badge{display:inline-flex;align-items:center;height:var(--aia-footer-row-height, 23px);padding:2.5px 5.5px;border:.5px solid var(--aia-footer-badge-border, rgba(189, 189, 189, .51));border-radius:999px;font-family:inherit;font-size:10px;line-height:18px;color:var(--aia-footer-brand-color, #b0b0b0)}@media (max-width: 768px){.magicx-aia-footer-hint-group{display:none}.magicx-aia-footer-row{justify-content:flex-end}}.magicx-aia-dropdown-skeleton-bars{display:flex;flex-direction:column;gap:20px;padding:7px 8px}.magicx-aia-dropdown-skeleton-bar{display:block;height:14px;border-radius:999px;background:var(--aia-skeleton-bg, var(--aia-pill-bg, rgba(189, 189, 189, .25)));opacity:.5;animation:aiaDropdownSkeletonPulse 1.4s ease-in-out infinite}.magicx-aia-dropdown-skeleton-bar:nth-child(2){animation-delay:.15s}.magicx-aia-dropdown-skeleton-bar:nth-child(3){animation-delay:.3s}@keyframes aiaDropdownSkeletonPulse{0%,to{opacity:.5}50%{opacity:.25}}\n"] }]
|
|
252
|
+
], changeDetection: ChangeDetectionStrategy.OnPush, encapsulation: ViewEncapsulation.None, template: "<div\n *ngIf=\"vm$ | async as vm\"\n [id]=\"controller.listboxId\"\n role=\"listbox\"\n data-aia-dropdown=\"\"\n [attr.data-aia-loading]=\"vm.isLoading ? '' : null\"\n [attr.data-mode]=\"resolvedMode\"\n [attr.data-options-position]=\"vm.optionsPosition\"\n [attr.data-aia-has-products]=\"vm.products.length > 0 ? '' : null\"\n [class]=\"rootClass\"\n [class.magicx-aia-dropdown-visible]=\"vm.isVisible\"\n (mousedown)=\"preventBlur($event)\"\n>\n <aia-stack space=\"8px\">\n <aia-cluster\n *ngIf=\"vm.showsPills || vm.showsSkip\"\n class=\"magicx-aia-dropdown-pillbar\"\n data-aia-pillbar=\"\"\n [noWrap]=\"true\"\n >\n <!-- The scroll + right-edge fade live on this wrapper (not the bar) so\n the skip button stays outside the masked region \u2014 pinned and fully\n opaque while overflowing pills fade under it. Absent in a skip-only\n row (pills rendered elsewhere via pillPlacement inline/hidden). -->\n <span *ngIf=\"vm.showsPills\" class=\"magicx-aia-pill-scroll\" data-aia-pill-scroll=\"\">\n <aia-pill-list\n [pills]=\"vm.pills\"\n [activePillIndex]=\"0\"\n [activeSelected]=\"vm.isActivePillSelected\"\n [rounded]=\"true\"\n [loading]=\"vm.isLoading\"\n (selectPill)=\"onPillClick($event)\"\n ></aia-pill-list>\n </span>\n <button\n *ngIf=\"vm.showsSkip\"\n type=\"button\"\n tabindex=\"-1\"\n class=\"magicx-aia-skip\"\n data-aia-skip=\"\"\n [disabled]=\"vm.skipDisabled\"\n [attr.aria-label]=\"vm.activePillLabel ? 'Skip ' + vm.activePillLabel : 'Skip'\"\n (click)=\"onSkip()\"\n >\n skip\n </button>\n </aia-cluster>\n\n <aia-suggestion-grid\n *ngIf=\"vm.showsOptions\"\n [options]=\"vm.options\"\n [activeIndex]=\"vm.activeIndex\"\n [listboxId]=\"controller.listboxId\"\n [loading]=\"vm.isLoading\"\n [groupKey]=\"vm.groupKey\"\n (select)=\"onSelect($event)\"\n (highlight)=\"onHighlight($event)\"\n ></aia-suggestion-grid>\n\n <aia-date-grid\n *ngIf=\"vm.showsDateGrid\"\n [options]=\"vm.options\"\n [activeIndex]=\"vm.activeIndex\"\n [listboxId]=\"controller.listboxId\"\n [view]=\"vm.dateView\"\n [selectedIso]=\"vm.selectedDateIso\"\n (select)=\"onSelect($event)\"\n (highlight)=\"onHighlight($event)\"\n (previousMonth)=\"onPreviousMonth()\"\n (nextMonth)=\"onNextMonth()\"\n ></aia-date-grid>\n\n <div\n *ngIf=\"vm.showsFallbackSkeleton\"\n class=\"magicx-aia-dropdown-skeleton-bars\"\n data-aia-skeleton-bars=\"\"\n >\n <span\n *ngFor=\"let w of fallbackSkeletonBarWidths; trackBy: trackByWidth\"\n class=\"magicx-aia-dropdown-skeleton-bar\"\n [style.width.px]=\"w\"\n ></span>\n </div>\n\n <!-- *ngIf, not just the section's own guard inside the component: the host\n element is an in-flow child of .aia-stack (display:flex; gap:8px), so\n an always-instantiated zero-height host would add a SECOND 8px gap\n between the grid and the footer \u2014 in every dropdown, products or not.\n The grid's --aia-grid-overlap-bottom is tuned for exactly one gap, so\n the footer would land 8px below the band it is meant to cover. -->\n <aia-product-strip\n *ngIf=\"vm.products.length > 0\"\n [products]=\"vm.products\"\n [listboxId]=\"controller.listboxId\"\n [focusable]=\"vm.isVisible\"\n (select)=\"onProductSelect($event)\"\n (focusChange)=\"onProductFocusChange($event)\"\n ></aia-product-strip>\n\n <footer class=\"magicx-aia-footer\" data-aia-footer=\"\">\n <div class=\"magicx-aia-footer-row\">\n <span class=\"magicx-aia-footer-hint-group\">\n <kbd class=\"magicx-aia-footer-key\">{{ vm.footerKey }}</kbd>\n <span class=\"magicx-aia-footer-hint\">{{ vm.footerHint }}</span>\n </span>\n <a\n class=\"magicx-aia-footer-brand-link\"\n [href]=\"brandHref\"\n target=\"_blank\"\n rel=\"noopener noreferrer\"\n >\n <span class=\"magicx-aia-footer-brand\">AI</span>\n <span class=\"magicx-aia-footer-badge\">Autocomplete</span>\n </a>\n </div>\n </footer>\n </aia-stack>\n</div>\n", styles: [":where(.magicx-aia,.magicx-aia *,.magicx-aia *::before,.magicx-aia *::after){box-sizing:border-box}:where(.magicx-aia){--aia-primitive-neutral-0: #000000;--aia-primitive-neutral-150: #1a1b1d;--aia-primitive-neutral-250: #323232;--aia-primitive-neutral-300: #333539;--aia-primitive-neutral-400: #4a4a4a;--aia-primitive-neutral-500: #505050;--aia-primitive-neutral-700: #b0b0b0;--aia-primitive-neutral-750: #bdbdbd;--aia-primitive-neutral-900: #e7e7e7;--aia-primitive-neutral-1000: #ffffff;--aia-primitive-blue-50: #eef2ff;--aia-primitive-neutral-750-a50: rgba(189, 189, 189, .51);--aia-primitive-neutral-750-a25: rgba(189, 189, 189, .25);--aia-primitive-neutral-750-a35: rgba(189, 189, 189, .35);--aia-primitive-neutral-750-a30: rgba(189, 189, 189, .3);--aia-primitive-neutral-750-a15: rgba(189, 189, 189, .15);--aia-primitive-neutral-750-a105: rgba(189, 189, 189, .105);--aia-primitive-neutral-700-a40: rgba(176, 176, 176, .4);--aia-primitive-neutral-900-a50: rgba(231, 231, 231, .5);--aia-primitive-neutral-400-a50: rgba(74, 74, 74, .5)}:where(.magicx-aia),:where(.magicx-aia[data-mode=\"light\"]){--aia-surface: var(--aia-primitive-neutral-1000);--aia-border: var(--aia-primitive-neutral-700);--aia-dropdown-border: var(--aia-primitive-neutral-900-a50);--aia-dropdown-shadow: 0 8px 12px rgba(0, 0, 0, .05);--aia-pill-bg: var(--aia-primitive-neutral-750);--aia-pill-color: var(--aia-primitive-neutral-300);--aia-pill-font-size: 16px;--aia-completed-pill-bg: var(--aia-primitive-neutral-750-a105);--aia-completed-pill-bg-active: var(--aia-primitive-neutral-750-a35);--aia-completed-pill-color: var(--aia-primitive-neutral-0);--aia-option-bg: var(--aia-primitive-blue-50);--aia-option-color: var(--aia-primitive-neutral-150);--aia-option-color-selected: var(--aia-primitive-neutral-0);--aia-option-font-size: 16px;--aia-written-text-color: var(--aia-primitive-neutral-0);--aia-written-text-font-size: 16px;--aia-caret-color: var(--aia-written-text-color, #000000);--aia-submit-bg: var(--aia-primitive-neutral-0);--aia-submit-color: var(--aia-primitive-neutral-1000);--aia-color-text-muted: #6b7280;--aia-skeleton-bg: var(--aia-primitive-neutral-750-a25);--aia-streak-rgb: 99, 102, 241;--aia-streak-glass-bg: rgba(99, 102, 241, .1);--aia-footer-hint-color: var(--aia-primitive-neutral-500);--aia-footer-brand-color: var(--aia-primitive-neutral-700);--aia-footer-badge-border: var(--aia-primitive-neutral-750-a50)}:where(.magicx-aia[data-mode=\"dark\"]){--aia-surface: var(--aia-primitive-neutral-0);--aia-border: var(--aia-primitive-neutral-500);--aia-dropdown-border: var(--aia-primitive-neutral-400-a50);--aia-dropdown-shadow: 0 8px 12px rgba(0, 0, 0, .05);--aia-pill-bg: var(--aia-primitive-neutral-750);--aia-pill-color: var(--aia-primitive-neutral-700);--aia-pill-font-size: 16px;--aia-completed-pill-bg: var(--aia-primitive-neutral-750-a15);--aia-completed-pill-bg-active: var(--aia-primitive-neutral-750-a35);--aia-completed-pill-color: var(--aia-primitive-neutral-1000);--aia-option-bg: var(--aia-primitive-neutral-250);--aia-option-color: var(--aia-primitive-neutral-900);--aia-option-color-selected: var(--aia-primitive-neutral-1000);--aia-option-font-size: 16px;--aia-written-text-color: var(--aia-primitive-neutral-1000);--aia-written-text-font-size: 16px;--aia-caret-color: var(--aia-written-text-color, #ffffff);--aia-submit-bg: var(--aia-primitive-neutral-1000);--aia-submit-color: var(--aia-primitive-neutral-0);--aia-color-text-muted: #c1c4cb;--aia-skeleton-bg: var(--aia-primitive-neutral-150);--aia-streak-rgb: 255, 255, 255;--aia-streak-glass-bg: rgba(255, 255, 255, .1);--aia-footer-hint-color: var(--aia-primitive-neutral-700);--aia-footer-brand-color: var(--aia-primitive-neutral-500);--aia-footer-badge-border: var(--aia-primitive-neutral-500)}[data-aia-dropdown]{--aia-footer-row-height: 23px;--aia-footer-band: calc(var(--aia-footer-gap, 8px) + var(--aia-footer-row-height, 23px));--aia-grid-scroll-bottom: var(--aia-footer-band);--aia-grid-overlap-bottom: calc(-1 * (var(--aia-footer-band) + 8px));--aia-footer-fade-lead: 20px;--aia-footer-fade-inset: calc(-1 * var(--aia-footer-fade-lead)) 0 0}[data-aia-dropdown] [data-aia-pillbar] .aia-pill-list{padding-inline:10px}[data-aia-dropdown] [data-aia-pillbar] .aia-pill{justify-content:flex-start;border-inline-width:0;padding-inline:0}[data-aia-dropdown] .aia-grid[data-scroll]{padding-top:var(--aia-grid-scroll-top, 0);padding-bottom:var(--aia-grid-scroll-bottom, 0);margin-top:var(--aia-grid-overlap-top, 0);margin-bottom:var(--aia-grid-overlap-bottom, 0)}[data-aia-dropdown] [data-aia-footer]:before{content:\"\";position:absolute;inset:var(--aia-footer-fade-inset, -20px 0 0);z-index:-1;pointer-events:none;background:linear-gradient(to bottom,transparent,var(--aia-surface, #ffffff))}[data-aia-dropdown][data-aia-surface=glass]{--aia-footer-chip-bg: transparent}[data-aia-dropdown][data-aia-surface=glass] [data-aia-footer]:before{display:none}:where(.magicx-aia[data-options-position=\"above\"]) [data-aia-dropdown],[data-aia-dropdown][data-options-position=above]{--aia-grid-scroll-bottom: 0px;--aia-grid-overlap-bottom: 0px;--aia-grid-scroll-top: var(--aia-footer-band);--aia-grid-overlap-top: calc(-1 * (var(--aia-footer-band) + 8px));--aia-footer-fade-inset: 0 0 calc(-1 * var(--aia-footer-fade-lead));top:auto;bottom:100%;margin-top:0;margin-bottom:6px}[data-aia-dropdown][data-aia-has-products]{--aia-grid-scroll-bottom: 0px;--aia-grid-overlap-bottom: 0px;--aia-grid-scroll-top: 0px;--aia-grid-overlap-top: 0px;--aia-footer-fade-lead: 0px}:where(.magicx-aia[data-options-position=\"above\"]) [data-aia-dropdown] .aia-stack,[data-aia-dropdown][data-options-position=above] .aia-stack{flex-direction:column-reverse}:where(.magicx-aia[data-options-position=\"above\"]) [data-aia-dropdown] [data-aia-footer],[data-aia-dropdown][data-options-position=above] [data-aia-footer]{padding:0 8px var(--aia-footer-gap, 8px)}:where(.magicx-aia[data-options-position=\"above\"]) [data-aia-dropdown] [data-aia-footer]:before,[data-aia-dropdown][data-options-position=above] [data-aia-footer]:before{background:linear-gradient(to top,transparent,var(--aia-surface, #ffffff))}:where(.magicx-aia[data-options-position=\"above\"]) [data-aia-dropdown] .magicx-aia-footer,[data-aia-dropdown][data-options-position=above] .magicx-aia-footer{flex-direction:column-reverse}\n", ".magicx-aia-dropdown{position:absolute;left:0;right:0;top:100%;max-width:544px;margin-top:6px;display:flex;flex-direction:column;box-sizing:border-box;padding:10px 8px;overflow:hidden;container-type:inline-size;z-index:10;opacity:0;pointer-events:none;transition:opacity .4s cubic-bezier(.4,0,.2,1);background:var(--aia-surface, #ffffff);border:1px solid var(--aia-dropdown-border, rgba(231, 231, 231, .5));border-radius:18px;box-shadow:var(--aia-dropdown-shadow, 0 8px 12px rgba(0, 0, 0, .05))}.magicx-aia-dropdown[data-aia-surface=glass]{background:transparent;border-color:transparent;box-shadow:#fff -3.2px -3.2px 3.2px -3.2px inset,#fff 6.4px 6.4px 1.6px -8px inset,var(--aia-dropdown-bg, transparent) -6.4px 6.4px 1.6px -8px inset,var(--aia-dropdown-bg, transparent) 6.4px -6.4px 1.6px -8px inset,#ffffff26 -1.6px 0 0 -1.6px inset,#ffffff26 0 -1.6px 0 -1.6px inset,#ffffff4d 0 1.6px inset,#ffffff4d 1.6px 0 inset,inset 0 0 30px 5px #0000000d,#00000014 0 0 30px 2px;backdrop-filter:blur(30px)}.magicx-aia-dropdown-visible{opacity:1;pointer-events:auto}.magicx-aia-dropdown-pillbar{overflow:hidden}.magicx-aia-pill-scroll{display:inline-flex;align-items:center;flex:1 1 auto;min-width:0;overflow-x:auto;overflow-y:hidden;scrollbar-width:none;mask-image:linear-gradient(to right,#000 0,#000 calc(100% - 48px),transparent 100%);-webkit-mask-image:linear-gradient(to right,#000 0,#000 calc(100% - 48px),transparent 100%)}.magicx-aia-pill-scroll::-webkit-scrollbar{display:none}.magicx-aia-skip{display:inline-flex;align-items:center;margin-inline-start:auto;flex-shrink:0;padding:5px 8px;border:none;border-radius:6px;background:transparent;font-family:inherit;font-size:var(--aia-skip-font-size, 10px);line-height:18px;color:var(--aia-skip-color, var(--aia-footer-hint-color, #505050));cursor:pointer;white-space:nowrap;transition:color .15s ease-out,background-color .15s ease-out}.magicx-aia-skip:hover{color:var(--aia-skip-color-hover, var(--aia-pill-color, var(--aia-color-text-muted, #c1c4cb)));background:var(--aia-skip-hover-bg, var(--aia-option-bg, transparent))}.magicx-aia-skip:disabled{pointer-events:none;cursor:default;opacity:.5}.magicx-aia-footer{display:flex;flex-direction:column;gap:8px;padding:var(--aia-footer-gap, 8px) 8px 0;position:relative;z-index:3;pointer-events:none}.magicx-aia-footer-row{display:flex;align-items:center;justify-content:space-between}.magicx-aia-footer-hint-group{display:inline-flex;align-items:center;gap:5px}.magicx-aia-footer-hint-group,.magicx-aia-footer-brand-link{pointer-events:auto}.magicx-aia-footer-brand-link{display:inline-flex;align-items:center;gap:2px;text-decoration:none;cursor:pointer;transition:opacity .15s ease-out}.magicx-aia-footer-hint-group,.magicx-aia-footer-brand-link{background:var( --aia-footer-chip-bg, color-mix(in srgb, var(--aia-surface, #ffffff) 65%, transparent) );padding-inline:4px;border-radius:6px}.magicx-aia-footer-brand-link{background:var(--aia-footer-brand-pill-bg, var(--aia-surface, #ffffff));border-radius:999px;padding:2px 7px;gap:4px}.magicx-aia-footer-brand-link:hover{opacity:.7}.magicx-aia-footer-key{display:inline-flex;align-items:center;justify-content:center;min-width:30px;height:22px;padding:2px 6px;border:.5px solid var(--aia-footer-hint-color, #505050);border-radius:5px;font-family:inherit;font-size:11px;line-height:18px;color:var(--aia-footer-hint-color, #505050)}.magicx-aia-footer-hint{font-family:inherit;font-size:11px;line-height:18px;color:var(--aia-footer-hint-color, #505050)}.magicx-aia-footer-brand{font-family:inherit;font-size:10px;line-height:18px;color:var(--aia-footer-brand-color, #b0b0b0)}.magicx-aia-footer-badge{display:inline-flex;align-items:center;height:var(--aia-footer-row-height, 23px);padding:2.5px 5.5px;border:.5px solid var(--aia-footer-badge-border, rgba(189, 189, 189, .51));border-radius:999px;font-family:inherit;font-size:10px;line-height:18px;color:var(--aia-footer-brand-color, #b0b0b0)}@media (max-width: 768px){.magicx-aia-footer-hint-group{display:none}.magicx-aia-footer-row{justify-content:flex-end}}.magicx-aia-dropdown-skeleton-bars{display:flex;flex-direction:column;gap:20px;padding:7px 8px}.magicx-aia-dropdown-skeleton-bar{display:block;height:14px;border-radius:999px;background:var(--aia-skeleton-bg, var(--aia-pill-bg, rgba(189, 189, 189, .25)));opacity:.5;animation:aiaDropdownSkeletonPulse 1.4s ease-in-out infinite}.magicx-aia-dropdown-skeleton-bar:nth-child(2){animation-delay:.15s}.magicx-aia-dropdown-skeleton-bar:nth-child(3){animation-delay:.3s}@keyframes aiaDropdownSkeletonPulse{0%,to{opacity:.5}50%{opacity:.25}}\n"] }]
|
|
234
253
|
}], propDecorators: { controller: [{
|
|
235
254
|
type: Input
|
|
236
255
|
}], showPills: [{
|
|
@@ -242,4 +261,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.10", ngImpo
|
|
|
242
261
|
}], mode: [{
|
|
243
262
|
type: Input
|
|
244
263
|
}] } });
|
|
245
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYWktYXV0b2NvbXBsZXRlLWRyb3Bkb3duLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3NyYy9saWIvYWktYXV0b2NvbXBsZXRlLWRyb3Bkb3duL2FpLWF1dG9jb21wbGV0ZS1kcm9wZG93bi5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi9zcmMvbGliL2FpLWF1dG9jb21wbGV0ZS1kcm9wZG93bi9haS1hdXRvY29tcGxldGUtZHJvcGRvd24uY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBQy9DLE9BQU8sRUFDTCx1QkFBdUIsRUFDdkIsaUJBQWlCLEVBQ2pCLFNBQVMsRUFDVCxLQUFLLEVBQ0wsTUFBTSxFQUtOLGlCQUFpQixHQUNsQixNQUFNLGVBQWUsQ0FBQztBQUN2QixPQUFPLEVBRUwsbUJBQW1CLEVBQ25CLGFBQWEsR0FJZCxNQUFNLHFDQUFxQyxDQUFDO0FBQzdDLE9BQU8sRUFBRSxlQUFlLEVBQUUsYUFBYSxFQUFtQixNQUFNLE1BQU0sQ0FBQztBQUN2RSxPQUFPLEVBQUUsR0FBRyxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFFckMsT0FBTyxFQUFFLGdCQUFnQixFQUFFLE1BQU0sc0NBQXNDLENBQUM7QUFDeEUsT0FBTyxFQUFFLGNBQWMsRUFBRSxNQUFNLG9DQUFvQyxDQUFDO0FBQ3BFLE9BQU8sRUFBRSxpQkFBaUIsRUFBRSxNQUFNLDJDQUEyQyxDQUFDO0FBQzlFLE9BQU8sRUFBRSxxQkFBcUIsRUFBRSxNQUFNLG1EQUFtRCxDQUFDO0FBQzFGLE9BQU8sRUFBRSx1QkFBdUIsRUFBRSxNQUFNLHVEQUF1RCxDQUFDOzs7QUFpQ2hHOzs7Ozs7Ozs7Ozs7OztHQWNHO0FBb0JILE1BQU0sT0FBTywrQkFBK0I7SUFuQjVDO1FBc0JFLDJFQUEyRTtRQUNsRSxjQUFTLEdBQUcsSUFBSSxDQUFDO1FBQzFC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V0FDUDt3QkFDUCxZQUFZO3dCQUNaLGlCQUFpQjt3QkFDakIscUJBQXFCO3dCQUNyQix1QkFBdUI7d0JBQ3ZCLGNBQWM7d0JBQ2QsZ0JBQWdCO3FCQUNqQixtQkFDZ0IsdUJBQXVCLENBQUMsTUFBTSxpQkFDaEMsaUJBQWlCLENBQUMsSUFBSTs4QkFTNUIsVUFBVTtzQkFBbEIsS0FBSztnQkFFRyxTQUFTO3NCQUFqQixLQUFLO2dCQVNHLGNBQWM7c0JBQXRCLEtBQUs7Z0JBRUcsU0FBUztzQkFBakIsS0FBSztnQkFPRyxJQUFJO3NCQUFaLEtBQUsiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDb21tb25Nb2R1bGUgfSBmcm9tIFwiQGFuZ3VsYXIvY29tbW9uXCI7XG5pbXBvcnQge1xuICBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneSxcbiAgQ2hhbmdlRGV0ZWN0b3JSZWYsXG4gIENvbXBvbmVudCxcbiAgSW5wdXQsXG4gIGluamVjdCxcbiAgdHlwZSBPbkNoYW5nZXMsXG4gIHR5cGUgT25EZXN0cm95LFxuICB0eXBlIE9uSW5pdCxcbiAgdHlwZSBTaW1wbGVDaGFuZ2VzLFxuICBWaWV3RW5jYXBzdWxhdGlvbixcbn0gZnJvbSBcIkBhbmd1bGFyL2NvcmVcIjtcbmltcG9ydCB7XG4gIHR5cGUgQXBwZWFyYW5jZU1vZGUsXG4gIGJ1aWxkQXR0cmlidXRpb25VcmwsXG4gIGdldEZvb3RlckhpbnQsXG4gIHR5cGUgUHJvZHVjdCxcbiAgdHlwZSBTdWdnZXN0aW9uLFxuICB0eXBlIFN1Z2dlc3Rpb25PcHRpb24sXG59IGZyb20gXCJAbWFnaWN4LWVuZy9haS1hdXRvY29tcGxldGUtdmFuaWxsYVwiO1xuaW1wb3J0IHsgQmVoYXZpb3JTdWJqZWN0LCBjb21iaW5lTGF0ZXN0LCB0eXBlIE9ic2VydmFibGUgfSBmcm9tIFwicnhqc1wiO1xuaW1wb3J0IHsgbWFwIH0gZnJvbSBcInJ4anMvb3BlcmF0b3JzXCI7XG5pbXBvcnQgdHlwZSB7IEFJQXV0b2NvbXBsZXRlQ29udHJvbGxlciB9IGZyb20gXCIuLi9jb250cm9sbGVyL2FpLWF1dG9jb21wbGV0ZS5jb250cm9sbGVyXCI7XG5pbXBvcnQgeyBDbHVzdGVyQ29tcG9uZW50IH0gZnJvbSBcIi4uL2ludGVybmFsL2xheW91dC9jbHVzdGVyLmNvbXBvbmVudFwiO1xuaW1wb3J0IHsgU3RhY2tDb21wb25lbnQgfSBmcm9tIFwiLi4vaW50ZXJuYWwvbGF5b3V0L3N0YWNrLmNvbXBvbmVudFwiO1xuaW1wb3J0IHsgUGlsbExpc3RDb21wb25lbnQgfSBmcm9tIFwiLi4vaW50ZXJuYWwvcGlsbC1saXN0L3BpbGwtbGlzdC5jb21wb25lbnRcIjtcbmltcG9ydCB7IFByb2R1Y3RTdHJpcENvbXBvbmVudCB9IGZyb20gXCIuLi9pbnRlcm5hbC9wcm9kdWN0LXN0cmlwL3Byb2R1Y3Qtc3RyaXAuY29tcG9uZW50XCI7XG5pbXBvcnQgeyBTdWdnZXN0aW9uR3JpZENvbXBvbmVudCB9IGZyb20gXCIuLi9pbnRlcm5hbC9zdWdnZXN0aW9uLWdyaWQvc3VnZ2VzdGlvbi1ncmlkLmNvbXBvbmVudFwiO1xuXG5pbnRlcmZhY2UgRHJvcGRvd25WbSB7XG4gIHBpbGxzOiBTdWdnZXN0aW9uW107XG4gIG9wdGlvbnM6IFN1Z2dlc3Rpb25PcHRpb25bXTtcbiAgYWN0aXZlSW5kZXg6IG51bWJlcjtcbiAgaXNBY3RpdmVQaWxsU2VsZWN0ZWQ6IGJvb2xlYW47XG4gIGlzTG9hZGluZzogYm9vbGVhbjtcbiAgc2hvd3NQaWxsczogYm9vbGVhbjtcbiAgLyoqIFdoZXRoZXIgdGhlIHBpbGxiYXIgZW5kcyBpbiB0aGUgdHJhaWxpbmcgXCJza2lwXCIgYnV0dG9uLiAqL1xuICBzaG93c1NraXA6IGJvb2xlYW47XG4gIC8qKlxuICAgKiBEaXNhYmxlZCBzdGF0ZSBmb3IgdGhlIHNraXAgYnV0dG9uOiBsb2FkaW5nLCBvciB0aGUgcG9zdC1zZWxlY3Rpb24gd2luZG93XG4gICAqIHdoZXJlIGlzTG9hZGluZyBpcyBzdXBwcmVzc2VkIGJ1dCB0aGUgY29yZSdzIHNraXBBY3RpdmVQaWxsKCkgbm8tb3BzLlxuICAgKi9cbiAgc2tpcERpc2FibGVkOiBib29sZWFuO1xuICAvKiogQWN0aXZlIHBpbGwncyBsYWJlbCwgZm9yIHRoZSBza2lwIGJ1dHRvbidzIGFyaWEtbGFiZWwuICovXG4gIGFjdGl2ZVBpbGxMYWJlbDogc3RyaW5nO1xuICBzaG93c09wdGlvbnM6IGJvb2xlYW47XG4gIHNob3dzRmFsbGJhY2tTa2VsZXRvbjogYm9vbGVhbjtcbiAgaXNWaXNpYmxlOiBib29sZWFuO1xuICAvKiogUHJvZHVjdCBjYXJkcyBmb3IgdGhlIHN0cmlwLiBFbXB0eSB1bmxlc3MgYHByb2R1Y3RzYCBpcyBjb25maWd1cmVkLiAqL1xuICBwcm9kdWN0czogUHJvZHVjdFtdO1xuICAvKiogSWRlbnRpdHkgb2YgdGhlIHN1Z2dlc3Rpb24gdGhlIG9wdGlvbnMgYmVsb25nIHRvIOKAlCBkcml2ZXMgdGhlIGdyaWQncyBzY3JvbGwgcmVzZXQuICovXG4gIGdyb3VwS2V5OiBzdHJpbmc7XG4gIGZvb3RlcktleTogc3RyaW5nO1xuICBmb290ZXJIaW50OiBzdHJpbmc7XG4gIG9wdGlvbnNQb3NpdGlvbjogXCJhYm92ZVwiIHwgXCJiZWxvd1wiO1xufVxuXG4vKiogVGhlIGNvbnRlbnQtYmVhcmluZyBmaWVsZHMgb2YgdGhlIHZpZXctbW9kZWwgKGV2ZXJ5dGhpbmcgYnV0IGBpc1Zpc2libGVgKS4gKi9cbnR5cGUgRHJvcGRvd25Db250ZW50ID0gT21pdDxEcm9wZG93blZtLCBcImlzVmlzaWJsZVwiPjtcblxuLyoqXG4gKiBUaWVyIDIgZHJvcGRvd24gY29tcG9uZW50IOKAlCB0aGUgQW5ndWxhciBlcXVpdmFsZW50IG9mIFJlYWN0J3NcbiAqIGA8QUlBdXRvY29tcGxldGVEcm9wZG93biAvPmAuIFJlbmRlcnMgdGhlIHBpbGxiYXIsIG9wdGlvbnMgZ3JpZCwgYW5kXG4gKiBsb2FkaW5nIHNrZWxldG9uIGJhc2VkIG9uIHRoZSBzdXBwbGllZCBjb250cm9sbGVyJ3MgYGRyb3Bkb3duJGAgc25hcHNob3QuXG4gKlxuICogYGBgaHRtbFxuICogPGFpLWF1dG9jb21wbGV0ZS1kcm9wZG93biBbY29udHJvbGxlcl09XCJhY1wiPjwvYWktYXV0b2NvbXBsZXRlLWRyb3Bkb3duPlxuICogYGBgXG4gKlxuICogQWxsIGFjdGlvbnMgKHBpbGwgY2xpY2ssIG9wdGlvbiBzZWxlY3QsIG9wdGlvbiBoaWdobGlnaHQpIGFyZSBmb3J3YXJkZWQgdG9cbiAqIHRoZSBjb250cm9sbGVyLiBDb25zdW1lcnMgd2hvIG5lZWQgdG8gb2JzZXJ2ZSB0aGVzZSBldmVudHMgY2FuIHN1YnNjcmliZVxuICogdG8gdGhlIGNvbnRyb2xsZXIncyBwZXItZmllbGQgb2JzZXJ2YWJsZXMuXG4gKlxuICogQHB1YmxpY1xuICovXG5AQ29tcG9uZW50KHtcbiAgc2VsZWN0b3I6IFwiYWktYXV0b2NvbXBsZXRlLWRyb3Bkb3duXCIsXG4gIHN0YW5kYWxvbmU6IHRydWUsXG4gIGltcG9ydHM6IFtcbiAgICBDb21tb25Nb2R1bGUsXG4gICAgUGlsbExpc3RDb21wb25lbnQsXG4gICAgUHJvZHVjdFN0cmlwQ29tcG9uZW50LFxuICAgIFN1Z2dlc3Rpb25HcmlkQ29tcG9uZW50LFxuICAgIFN0YWNrQ29tcG9uZW50LFxuICAgIENsdXN0ZXJDb21wb25lbnQsXG4gIF0sXG4gIGNoYW5nZURldGVjdGlvbjogQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3kuT25QdXNoLFxuICBlbmNhcHN1bGF0aW9uOiBWaWV3RW5jYXBzdWxhdGlvbi5Ob25lLFxuICB0ZW1wbGF0ZVVybDogXCIuL2FpLWF1dG9jb21wbGV0ZS1kcm9wZG93bi5jb21wb25lbnQuaHRtbFwiLFxuICAvLyBUaGUgc2hhcmVkIGFwcGVhcmFuY2UgbGF5ZXIgY2FycmllcyB0aGUgZGVzaWduIHRva2VucyArIGJveC1zaXppbmcgcmVzZXQgK1xuICAvLyBvcHRpb25zUG9zaXRpb24gcmV2ZXJzYWwsIHNvIGEgc3RhbmRhbG9uZSBkcm9wZG93biAobm8gVGllciAxIGNvbXBvbmVudCBvblxuICAvLyB0aGUgcGFnZSkgaXMgZnVsbHkgc3R5bGVkIG9uY2UgYG1vZGVgIGlzIHNldC5cbiAgc3R5bGVVcmxzOiBbXCIuLi9zaGFyZWQvYXBwZWFyYW5jZS5jc3NcIiwgXCIuL2FpLWF1dG9jb21wbGV0ZS1kcm9wZG93bi5jb21wb25lbnQuY3NzXCJdLFxufSlcbmV4cG9ydCBjbGFzcyBBSUF1dG9jb21wbGV0ZURyb3Bkb3duQ29tcG9uZW50IGltcGxlbWVudHMgT25Jbml0LCBPbkNoYW5nZXMsIE9uRGVzdHJveSB7XG4gIC8qKiBUaGUgY29udHJvbGxlciB0aGF0IG93bnMgdGhlIGF1dG9jb21wbGV0ZSBzdGF0ZS4gUmVxdWlyZWQuICovXG4gIEBJbnB1dCgpIGNvbnRyb2xsZXIhOiBBSUF1dG9jb21wbGV0ZUNvbnRyb2xsZXI7XG4gIC8qKiBXaGV0aGVyIHRvIHJlbmRlciB0aGUgcGlsbGJhciBhYm92ZSB0aGUgb3B0aW9ucyBncmlkLiBEZWZhdWx0OiB0cnVlLiAqL1xuICBASW5wdXQoKSBzaG93UGlsbHMgPSB0cnVlO1xuICAvKipcbiAgICogV2hldGhlciB0aGUgcGlsbGJhciBlbmRzIGluIGEgc21hbGwgXCJza2lwXCIgYnV0dG9uIHRoYXQgZGlzbWlzc2VzIHRoZVxuICAgKiBhY3RpdmUgcGlsbCDigJQgc2FtZSBhY3Rpb24gYXMgcHJlc3Npbmcg4oaSIGF0IHRoZSBlbmQgb2YgdGhlIGlucHV0LiBJdCBzaXRzXG4gICAqIGF0IHRoZSB0cmFpbGluZyBlZGdlIG9mIHRoZSBiYXI6IHZpc3VhbGx5IHRvcC1yaWdodCB3aGVuIHRoZSBkcm9wZG93blxuICAgKiBvcGVucyBiZWxvdyB0aGUgaW5wdXQsIGJvdHRvbS1yaWdodCB3aGVuIGBvcHRpb25zUG9zaXRpb25gIGlzIFwiYWJvdmVcIi5cbiAgICogRGVmYXVsdDogdHJ1ZS4gSGlkZGVuIGF1dG9tYXRpY2FsbHkgZHVyaW5nIHJlLWVkaXQgYW5kIHdoaWxlIHRoZSBmYWxsYmFja1xuICAgKiBza2VsZXRvbiByZW5kZXJzLlxuICAgKi9cbiAgQElucHV0KCkgc2hvd1NraXBCdXR0b24gPSB0cnVlO1xuICAvKiogT3B0aW9uYWwgQ1NTIGNsYXNzIGFwcGxpZWQgdG8gdGhlIGRyb3Bkb3duIHJvb3QuICovXG4gIEBJbnB1dCgpIGNsYXNzTmFtZT86IHN0cmluZztcbiAgLyoqXG4gICAqIENvbG9yIG1vZGUgZm9yIGEgc3RhbmRhbG9uZSBkcm9wZG93bi4gV2hlbiBzZXQsIHRoZSBkcm9wZG93biBzZWxmLXNjb3BlcyB0aGVcbiAgICogZGVzaWduIHRva2VucyB0byBpdHMgb3duIHJvb3QgKGFkZHMgYG1hZ2ljeC1haWFgICsgYGRhdGEtbW9kZWApLCBzbyBpdCBuZWVkc1xuICAgKiBubyBgLm1hZ2ljeC1haWFgIHdyYXBwZXIuIGBcImF1dG9cImAgZm9sbG93cyBgcHJlZmVycy1jb2xvci1zY2hlbWVgLiBMZWF2ZSBpdFxuICAgKiB1bnNldCB3aGVuIHRoZSBkcm9wZG93biBzaXRzIGluc2lkZSBhIGAubWFnaWN4LWFpYWAgYW5jZXN0b3IgKGUuZy4gVGllciAxKS5cbiAgICovXG4gIEBJbnB1dCgpIG1vZGU/OiBBcHBlYXJhbmNlTW9kZTtcblxuICAvKiogQ29uY3JldGUgcmVzb2x2ZWQgbW9kZSwgb3IgbnVsbCB3aGVuIGBtb2RlYCBpcyB1bnNldCAoaW5oZXJpdCBmcm9tIGFuY2VzdG9yKS4gKi9cbiAgcmVzb2x2ZWRNb2RlOiBcImxpZ2h0XCIgfCBcImRhcmtcIiB8IG51bGwgPSBudWxsO1xuICBwcml2YXRlIG1vZGVNcWw/OiBNZWRpYVF1ZXJ5TGlzdDtcbiAgcHJpdmF0ZSBtb2RlTGlzdGVuZXI/OiAoKSA9PiB2b2lkO1xuICBwcml2YXRlIHJlYWRvbmx5IGNkciA9IGluamVjdChDaGFuZ2VEZXRlY3RvclJlZik7XG5cbiAgLyoqIFJvb3QgY2xhc3MgbGlzdCDigJQgYWRkcyBgbWFnaWN4LWFpYWAgb25seSB3aGVuIHNlbGYtc2NvcGluZyB2aWEgYG1vZGVgLiAqL1xuICBnZXQgcm9vdENsYXNzKCk6IHN0cmluZyB7XG4gICAgbGV0IGNscyA9IFwibWFnaWN4LWFpYS1kcm9wZG93blwiO1xuICAgIGlmICh0aGlzLnJlc29sdmVkTW9kZSkgY2xzICs9IFwiIG1hZ2ljeC1haWFcIjtcbiAgICBpZiAodGhpcy5jbGFzc05hbWUpIGNscyArPSBgICR7dGhpcy5jbGFzc05hbWV9YDtcbiAgICByZXR1cm4gY2xzO1xuICB9XG5cbiAgLyoqIEZhbGxiYWNrIHNrZWxldG9uLWJhciB3aWR0aHMgdXNlZCB3aGVuIGxvYWRpbmcgd2l0aCB6ZXJvIGNhY2hlZCBvcHRpb25zLiAqL1xuICByZWFkb25seSBmYWxsYmFja1NrZWxldG9uQmFyV2lkdGhzID0gWzE1OSwgMTE5LCAxNjRdO1xuXG4gIC8qKlxuICAgKiBBdHRyaWJ1dGlvbi9icmFuZGluZyBsaW5rIFVSTCBmb3IgdGhlIGZvb3Rlciwgd2l0aCBhIGB1dG1fc291cmNlYCBkZXJpdmVkXG4gICAqIGZyb20gdGhlIGVtYmVkZGluZyBwYWdlJ3MgaG9zdG5hbWUgKHNlZSB7QGxpbmsgYnVpbGRBdHRyaWJ1dGlvblVybH0pLlxuICAgKi9cbiAgcmVhZG9ubHkgYnJhbmRIcmVmID0gYnVpbGRBdHRyaWJ1dGlvblVybCgpO1xuXG4gIC8qKlxuICAgKiBWaWV3LW1vZGVsIGRlcml2ZWQgZnJvbSB0aGUgY29udHJvbGxlcidzIGBkcm9wZG93biRgLiBBZGRzIHRocmVlIGJvb2xlYW5zXG4gICAqIChgc2hvd3NQaWxsc2AsIGBzaG93c09wdGlvbnNgLCBgc2hvd3NGYWxsYmFja1NrZWxldG9uYCwgYGlzVmlzaWJsZWApIHRoYXRcbiAgICoga2VlcCB0ZW1wbGF0ZS1sZXZlbCBsb2dpYyB0byBhIHByb3BlcnR5IHJlYWQgcGVyIMKnMTkuNi5cbiAgICpcbiAgICogSW5pdGlhbGl6ZWQgb25jZSBpbiBgbmdPbkluaXRgIOKAlCBtdXN0IE5PVCBiZSBhIGdldHRlci4gQSBnZXR0ZXIgcmV0dXJucyBhXG4gICAqIGZyZXNoIGBPYnNlcnZhYmxlYCBpbnN0YW5jZSBvbiBldmVyeSBwcm9wZXJ0eSByZWFkOyB3aXRoIE9uUHVzaCArIGBhc3luY2BcbiAgICogcGlwZSB0aGF0IG1lYW5zIGVhY2ggY2hhbmdlLWRldGVjdGlvbiBjeWNsZSB1bnN1YnNjcmliZXMvcmVzdWJzY3JpYmVzLFxuICAgKiBjYXVzaW5nIHRoZSBgKm5nSWY9XCJ2bSQgfCBhc3luYyBhcyB2bVwiYCByb290IHRvIGJyaWVmbHkgcmVzb2x2ZSBgbnVsbGBcbiAgICogYW5kIGZsaWNrZXIgdGhlIGVudGlyZSBkcm9wZG93biBET00uXG4gICAqL1xuICB2bSQhOiBPYnNlcnZhYmxlPERyb3Bkb3duVm0+O1xuXG4gIC8vIEJyaWRnZSBmb3IgdGhlIEBJbnB1dCBgc2hvd1BpbGxzYCBpbnRvIHRoZSByZWFjdGl2ZSBwaXBlbGluZS4gV2l0aG91dCB0aGlzLFxuICAvLyBjaGFuZ2luZyB0aGUgaW5wdXQgYWZ0ZXIgaW5pdCB3b3VsZG4ndCB0cmlnZ2VyIGEgbmV3IHZtIGVtaXNzaW9uIHVudGlsIHRoZVxuICAvLyBuZXh0IGNvbnRyb2xsZXIuZHJvcGRvd24kIHRpY2sg4oCUIGFuZCB3ZSdkIGxvc2UgdGhlIHNob3dQaWxscyB1cGRhdGUgZW50aXJlbHlcbiAgLy8gaWYgdGhlIGNvbnRyb2xsZXIgaXMgaWRsZS4gVXBkYXRlZCBmcm9tIG5nT25DaGFuZ2VzIGJlbG93LlxuICBwcml2YXRlIHJlYWRvbmx5IHNob3dQaWxscyQgPSBuZXcgQmVoYXZpb3JTdWJqZWN0PGJvb2xlYW4+KHRydWUpO1xuICAvLyBTYW1lIGJyaWRnZSwgZm9yIGBzaG93U2tpcEJ1dHRvbmAuXG4gIHByaXZhdGUgcmVhZG9ubHkgc2hvd1NraXBCdXR0b24kID0gbmV3IEJlaGF2aW9yU3ViamVjdDxib29sZWFuPih0cnVlKTtcblxuICAvLyBMYXN0IGNvbnRlbnQgZW1pdHRlZCB3aGlsZSB0aGUgZHJvcGRvd24gd2FzIHZpc2libGUuIFJldXNlZCBkdXJpbmcgdGhlXG4gIC8vIGNsb3NlIGZhZGUgc28gdGhlIHBvcHVsYXRlZCBkcm9wZG93biBmYWRlcyBvdXQgYXMgb25lIOKAlCBzZWUgaW5pdFZtLlxuICBwcml2YXRlIGxhc3RWaXNpYmxlQ29udGVudDogRHJvcGRvd25Db250ZW50IHwgbnVsbCA9IG51bGw7XG5cbiAgbmdPbkluaXQoKTogdm9pZCB7XG4gICAgLy8gU2VlZCB0aGUgaW5wdXQgYnJpZGdlcyBmcm9tIHRoZWlyIHJlc29sdmVkIHZhbHVlcyBhdCBpbml0IHRpbWUuXG4gICAgdGhpcy5zaG93UGlsbHMkLm5leHQodGhpcy5zaG93UGlsbHMpO1xuICAgIHRoaXMuc2hvd1NraXBCdXR0b24kLm5leHQodGhpcy5zaG93U2tpcEJ1dHRvbik7XG4gICAgdGhpcy5hcHBseU1vZGUoKTtcbiAgICB0aGlzLmluaXRWbSgpO1xuICB9XG5cbiAgbmdPbkNoYW5nZXMoY2hhbmdlczogU2ltcGxlQ2hhbmdlcyk6IHZvaWQge1xuICAgIGlmIChjaGFuZ2VzW1wic2hvd1BpbGxzXCJdKSB7XG4gICAgICB0aGlzLnNob3dQaWxscyQubmV4dCh0aGlzLnNob3dQaWxscyk7XG4gICAgfVxuICAgIGlmIChjaGFuZ2VzW1wic2hvd1NraXBCdXR0b25cIl0pIHtcbiAgICAgIHRoaXMuc2hvd1NraXBCdXR0b24kLm5leHQodGhpcy5zaG93U2tpcEJ1dHRvbik7XG4gICAgfVxuICAgIGlmIChjaGFuZ2VzW1wibW9kZVwiXSAmJiAhY2hhbmdlc1tcIm1vZGVcIl0uZmlyc3RDaGFuZ2UpIHtcbiAgICAgIHRoaXMuYXBwbHlNb2RlKCk7XG4gICAgfVxuICAgIC8vIFJlLWJpbmQgdm0kIHdoZW4gdGhlIGNvbnRyb2xsZXIgQElucHV0IGlzIHN3YXBwZWQgKGUuZy4gYSBtdWx0aS1zdGVwIGZvcm1cbiAgICAvLyB0b2dnbGluZyBiZXR3ZWVuIGNvbnRyb2xsZXJzKS4gV2l0aG91dCB0aGlzLCB2bSQgc3RheXMgc3Vic2NyaWJlZCB0byB0aGVcbiAgICAvLyBwcmV2aW91cyBjb250cm9sbGVyJ3MgZHJvcGRvd24kIOKAlCByZW5kZXJpbmcgc3RhbGUgb3B0aW9ucywgb3IsIGlmIHRoYXRcbiAgICAvLyBjb250cm9sbGVyIHdhcyBkZXN0cm95KCktZWQsIHJlY2VpdmluZyBhIGNvbXBsZXRpb24gdGhhdCBjb2xsYXBzZXMgdGhlXG4gICAgLy8gZHJvcGRvd24gcGVybWFuZW50bHkuIFNraXAgdGhlIGZpcnN0IGNoYW5nZTogbmdPbkNoYW5nZXMgZmlyZXMgYmVmb3JlXG4gICAgLy8gbmdPbkluaXQsIHdoaWNoIG93bnMgdGhlIGluaXRpYWwgY3JlYXRpb24uXG4gICAgaWYgKGNoYW5nZXNbXCJjb250cm9sbGVyXCJdICYmICFjaGFuZ2VzW1wiY29udHJvbGxlclwiXS5maXJzdENoYW5nZSAmJiB0aGlzLmNvbnRyb2xsZXIpIHtcbiAgICAgIHRoaXMuaW5pdFZtKCk7XG4gICAgfVxuICB9XG5cbiAgbmdPbkRlc3Ryb3koKTogdm9pZCB7XG4gICAgdGhpcy50ZWFyZG93bk1vZGVMaXN0ZW5lcigpO1xuICB9XG5cbiAgLyoqXG4gICAqIFJlc29sdmUgdGhlIGBtb2RlYCBpbnB1dCBpbnRvIGByZXNvbHZlZE1vZGVgLiBVbnNldCDihpIgbnVsbCAodGhlIGRyb3Bkb3duXG4gICAqIHN0YXlzIGNsYXNzLWxlc3MgYW5kIGluaGVyaXRzIGZyb20gYSBgLm1hZ2ljeC1haWFgIGFuY2VzdG9yKS4gYFwiYXV0b1wiYCByZWFkc1xuICAgKiBgcHJlZmVycy1jb2xvci1zY2hlbWVgIGFuZCB0cmFja3MgaXQgbGl2ZSB2aWEgYSBtZWRpYS1xdWVyeSBsaXN0ZW5lci5cbiAgICovXG4gIHByaXZhdGUgYXBwbHlNb2RlKCk6IHZvaWQge1xuICAgIHRoaXMudGVhcmRvd25Nb2RlTGlzdGVuZXIoKTtcbiAgICBpZiAodGhpcy5tb2RlID09PSB1bmRlZmluZWQpIHtcbiAgICAgIHRoaXMucmVzb2x2ZWRNb2RlID0gbnVsbDtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgaWYgKHRoaXMubW9kZSA9PT0gXCJsaWdodFwiIHx8IHRoaXMubW9kZSA9PT0gXCJkYXJrXCIpIHtcbiAgICAgIHRoaXMucmVzb2x2ZWRNb2RlID0gdGhpcy5tb2RlO1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICAvLyBcImF1dG9cIlxuICAgIGlmICh0eXBlb2Ygd2luZG93ID09PSBcInVuZGVmaW5lZFwiIHx8IHR5cGVvZiB3aW5kb3cubWF0Y2hNZWRpYSAhPT0gXCJmdW5jdGlvblwiKSB7XG4gICAgICB0aGlzLnJlc29sdmVkTW9kZSA9IFwibGlnaHRcIjtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgdGhpcy5tb2RlTXFsID0gd2luZG93Lm1hdGNoTWVkaWEoXCIocHJlZmVycy1jb2xvci1zY2hlbWU6IGRhcmspXCIpO1xuICAgIHRoaXMucmVzb2x2ZWRNb2RlID0gdGhpcy5tb2RlTXFsLm1hdGNoZXMgPyBcImRhcmtcIiA6IFwibGlnaHRcIjtcbiAgICB0aGlzLm1vZGVMaXN0ZW5lciA9ICgpID0+IHtcbiAgICAgIHRoaXMucmVzb2x2ZWRNb2RlID0gdGhpcy5tb2RlTXFsPy5tYXRjaGVzID8gXCJkYXJrXCIgOiBcImxpZ2h0XCI7XG4gICAgICB0aGlzLmNkci5tYXJrRm9yQ2hlY2soKTtcbiAgICB9O1xuICAgIHRoaXMubW9kZU1xbC5hZGRFdmVudExpc3RlbmVyKFwiY2hhbmdlXCIsIHRoaXMubW9kZUxpc3RlbmVyKTtcbiAgfVxuXG4gIHByaXZhdGUgdGVhcmRvd25Nb2RlTGlzdGVuZXIoKTogdm9pZCB7XG4gICAgaWYgKHRoaXMubW9kZU1xbCAmJiB0aGlzLm1vZGVMaXN0ZW5lcikge1xuICAgICAgdGhpcy5tb2RlTXFsLnJlbW92ZUV2ZW50TGlzdGVuZXIoXCJjaGFuZ2VcIiwgdGhpcy5tb2RlTGlzdGVuZXIpO1xuICAgIH1cbiAgICB0aGlzLm1vZGVNcWwgPSB1bmRlZmluZWQ7XG4gICAgdGhpcy5tb2RlTGlzdGVuZXIgPSB1bmRlZmluZWQ7XG4gIH1cblxuICAvKiogQnVpbGQgdGhlIHZpZXctbW9kZWwgc3RyZWFtIGZyb20gdGhlIGN1cnJlbnQgY29udHJvbGxlciArIHNob3dQaWxscyQuICovXG4gIHByaXZhdGUgaW5pdFZtKCk6IHZvaWQge1xuICAgIHRoaXMudm0kID0gY29tYmluZUxhdGVzdChbXG4gICAgICB0aGlzLmNvbnRyb2xsZXIuZHJvcGRvd24kLFxuICAgICAgdGhpcy5zaG93UGlsbHMkLFxuICAgICAgdGhpcy5zaG93U2tpcEJ1dHRvbiQsXG4gICAgXSkucGlwZShcbiAgICAgIG1hcCgoW2RkLCBzaG93UGlsbHMsIHNob3dTa2lwQnV0dG9uXSkgPT4ge1xuICAgICAgICBjb25zdCBhY3RpdmVTdWdnZXN0aW9uID0gZGQuc3VnZ2VzdGlvbnNbMF07XG4gICAgICAgIGNvbnN0IG9wdGlvbnMgPSBhY3RpdmVTdWdnZXN0aW9uPy5vcHRpb25zID8/IFtdO1xuICAgICAgICBjb25zdCBzaG93c1BpbGxzID0gc2hvd1BpbGxzICYmIChkZC5waWxscy5sZW5ndGggPiAwIHx8IGRkLmlzTG9hZGluZyk7XG4gICAgICAgIC8vIFRoZSB0cmFpbGluZyBcInNraXBcIiBidXR0b24gb25seSBtYWtlcyBzZW5zZSBuZXh0IHRvIGEgcmVhbCxcbiAgICAgICAgLy8gc2tpcHBhYmxlIHBpbGwg4oCUIG5ldmVyIG9uIHRoZSBmYWxsYmFjayBza2VsZXRvbiBiYXIsIGFuZCBuZXZlclxuICAgICAgICAvLyBkdXJpbmcgcmUtZWRpdCAodGhlIGJhciB0aGVuIHNob3dzIGFuIGFscmVhZHkgYW5zd2VyZWQgcGFyYW0pLlxuICAgICAgICAvLyBEZWxpYmVyYXRlbHkgTk9UIGdhdGVkIG9uIHNob3dzUGlsbHM6IHdpdGggcGlsbHMgcmVuZGVyZWQgZWxzZXdoZXJlXG4gICAgICAgIC8vIChwaWxsUGxhY2VtZW50IFwiaW5saW5lXCIvXCJoaWRkZW5cIikgdGhlIGJhciByZW5kZXJzIGFzIGEgc2tpcC1vbmx5XG4gICAgICAgIC8vIHJvdyBob2xkaW5nIGp1c3QgdGhlIGJ1dHRvbi4gSGlkZGVuIHdoaWxlIHRoZSBpbnB1dCBpcyBlbXB0eSDigJQgdGhlXG4gICAgICAgIC8vIGZvb3RlciBoaW50IGRvZXNuJ3QgYWR2ZXJ0aXNlIFwi4oaSIHRvIHNraXBcIiB1bnRpbCB0aGUgdXNlciBoYXMgdHlwZWQsXG4gICAgICAgIC8vIHNvIHRoZSBwcmlzdGluZSBzdGFydGluZyBzdGF0ZSBzdGF5cyBmcmVlIG9mIHRoZSBhZmZvcmRhbmNlIHRvby5cbiAgICAgICAgY29uc3Qgc2hvd3NTa2lwID1cbiAgICAgICAgICBkZC5waWxscy5sZW5ndGggPiAwICYmIHNob3dTa2lwQnV0dG9uICYmICFkZC5pc0VkaXRpbmcgJiYgIWRkLmlzSW5wdXRFbXB0eTtcbiAgICAgICAgY29uc3Qgc2hvd3NPcHRpb25zID0gb3B0aW9ucy5sZW5ndGggPiAwO1xuICAgICAgICBjb25zdCBzaG93c0ZhbGxiYWNrU2tlbGV0b24gPSBkZC5pc0xvYWRpbmcgJiYgIXNob3dzT3B0aW9ucztcbiAgICAgICAgLy8gRWl0aGVyIGhhbGYgaXMgZW5vdWdoIHRvIGtlZXAgdGhlIHBhbmVsIHVwOiBwcm9kdWN0cyByZW5kZXIgd2l0aCBub1xuICAgICAgICAvLyBzdWdnZXN0aW9ucywgc3VnZ2VzdGlvbnMgcmVuZGVyIHdpdGggbm8gcHJvZHVjdHMuXG4gICAgICAgIGNvbnN0IGlzVmlzaWJsZSA9XG4gICAgICAgICAgZGQuaXNPcGVuICYmIChzaG93c09wdGlvbnMgfHwgc2hvd3NQaWxscyB8fCBkZC5pc0xvYWRpbmcgfHwgZGQucHJvZHVjdHMubGVuZ3RoID4gMCk7XG5cbiAgICAgICAgLy8gV2hpbGUgY2xvc2luZywgcmV1c2UgdGhlIGxhc3QgdmlzaWJsZSBjb250ZW50IHNvIHRoZSBwb3B1bGF0ZWRcbiAgICAgICAgLy8gZHJvcGRvd24gZmFkZXMgb3V0IGFzIG9uZS4gT3RoZXJ3aXNlIHRoZSBwaWxscy9vcHRpb25zIHZhbmlzaCB0aGVcbiAgICAgICAgLy8gaW5zdGFudCB0aGUgc3RhdGUgZW1wdGllcyAoZS5nLiBza2lwcGluZyB0aGUgbGFzdCBwaWxsIHdpdGgg4oaSKSxcbiAgICAgICAgLy8gbGVhdmluZyB0aGUgYWx3YXlzLXByZXNlbnQgZm9vdGVyIGFsb25lIGZvciBhIGZsYXNoIG9mIGEgZm9vdGVyLW9ubHlcbiAgICAgICAgLy8gXCJubyBvcHRpb25zXCIgYm94IG1pZC1mYWRlLiBPbmx5IGBpc1Zpc2libGVgIHRyYWNrcyBsaXZlIHN0YXRlIHRvXG4gICAgICAgIC8vIGRyaXZlIHRoZSBvcGFjaXR5IHRyYW5zaXRpb24uXG4gICAgICAgIGlmICghaXNWaXNpYmxlICYmIHRoaXMubGFzdFZpc2libGVDb250ZW50KSB7XG4gICAgICAgICAgcmV0dXJuIHsgLi4udGhpcy5sYXN0VmlzaWJsZUNvbnRlbnQsIGlzVmlzaWJsZTogZmFsc2UgfTtcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IG9wdGlvbkhpZ2hsaWdodGVkID1cbiAgICAgICAgICBkZC5hY3RpdmVJbmRleCA+PSAwICYmIEJvb2xlYW4ob3B0aW9uc1tkZC5hY3RpdmVJbmRleF0/LmlzX3RhcHBhYmxlKTtcbiAgICAgICAgY29uc3QgeyBrZXk6IGZvb3RlcktleSwgaGludDogZm9vdGVySGludCB9ID0gZ2V0Rm9vdGVySGludChcbiAgICAgICAgICBvcHRpb25IaWdobGlnaHRlZCxcbiAgICAgICAgICBkZC5pc0lucHV0RW1wdHksXG4gICAgICAgICk7XG4gICAgICAgIGNvbnN0IGNvbnRlbnQ6IERyb3Bkb3duQ29udGVudCA9IHtcbiAgICAgICAgICBwaWxsczogZGQucGlsbHMsXG4gICAgICAgICAgb3B0aW9ucyxcbiAgICAgICAgICBhY3RpdmVJbmRleDogZGQuYWN0aXZlSW5kZXgsXG4gICAgICAgICAgaXNBY3RpdmVQaWxsU2VsZWN0ZWQ6IGRkLmlzQWN0aXZlUGlsbFNlbGVjdGVkLFxuICAgICAgICAgIGlzTG9hZGluZzogZGQuaXNMb2FkaW5nLFxuICAgICAgICAgIHNob3dzUGlsbHMsXG4gICAgICAgICAgc2hvd3NTa2lwLFxuICAgICAgICAgIHNraXBEaXNhYmxlZDogZGQuaXNMb2FkaW5nIHx8IEJvb2xlYW4oZGQuaW5TZWxlY3Rpb25BbmltYXRpb24pLFxuICAgICAgICAgIGFjdGl2ZVBpbGxMYWJlbDogZGQucGlsbHNbMF0/LnRleHQgPz8gXCJcIixcbiAgICAgICAgICBzaG93c09wdGlvbnMsXG4gICAgICAgICAgc2hvd3NGYWxsYmFja1NrZWxldG9uLFxuICAgICAgICAgIHByb2R1Y3RzOiBkZC5wcm9kdWN0cyxcbiAgICAgICAgICBncm91cEtleTogYWN0aXZlU3VnZ2VzdGlvbiA/IGAke2FjdGl2ZVN1Z2dlc3Rpb24udHlwZX0gJHthY3RpdmVTdWdnZXN0aW9uLnRleHR9YCA6IFwiXCIsXG4gICAgICAgICAgZm9vdGVyS2V5LFxuICAgICAgICAgIGZvb3RlckhpbnQsXG4gICAgICAgICAgb3B0aW9uc1Bvc2l0aW9uOiBkZC5vcHRpb25zUG9zaXRpb24sXG4gICAgICAgIH07XG4gICAgICAgIGlmIChpc1Zpc2libGUpIHRoaXMubGFzdFZpc2libGVDb250ZW50ID0gY29udGVudDtcbiAgICAgICAgcmV0dXJuIHsgLi4uY29udGVudCwgaXNWaXNpYmxlIH07XG4gICAgICB9KSxcbiAgICApO1xuICB9XG5cbiAgdHJhY2tCeVdpZHRoID0gKF86IG51bWJlciwgdzogbnVtYmVyKTogbnVtYmVyID0+IHc7XG5cbiAgb25QaWxsQ2xpY2soaW5kZXg6IG51bWJlcik6IHZvaWQge1xuICAgIHRoaXMuY29udHJvbGxlci5zZXRBY3RpdmVQaWxsKGluZGV4KTtcbiAgfVxuXG4gIG9uU2tpcCgpOiB2b2lkIHtcbiAgICB0aGlzLmNvbnRyb2xsZXIuc2tpcEFjdGl2ZVBpbGwoKTtcbiAgfVxuXG4gIG9uU2VsZWN0KG9wdGlvbjogU3VnZ2VzdGlvbk9wdGlvbik6IHZvaWQge1xuICAgIHRoaXMuY29udHJvbGxlci5zZWxlY3RPcHRpb24ob3B0aW9uKTtcbiAgfVxuXG4gIG9uSGlnaGxpZ2h0KGluZGV4OiBudW1iZXIpOiB2b2lkIHtcbiAgICB0aGlzLmNvbnRyb2xsZXIuc2V0QWN0aXZlRHJvcGRvd25JbmRleChpbmRleCk7XG4gIH1cblxuICBvblByb2R1Y3RTZWxlY3QocHJvZHVjdDogUHJvZHVjdCk6IHZvaWQge1xuICAgIHRoaXMuY29udHJvbGxlci5zZWxlY3RQcm9kdWN0KHByb2R1Y3QpO1xuICB9XG5cbiAgLyoqXG4gICAqIEEgY2FyZCB0YWtpbmcgZm9jdXMgYmx1cnMgdGhlIGVkaXRvciwgd2hpY2ggd291bGQgb3RoZXJ3aXNlIGNsb3NlIHRoZVxuICAgKiBwYW5lbCBvdXQgZnJvbSB1bmRlciB0aGUgY2FyZCB0aGUgdXNlciBqdXN0IHRhYmJlZCB0by5cbiAgICovXG4gIG9uUHJvZHVjdEZvY3VzQ2hhbmdlKGZvY3VzZWQ6IGJvb2xlYW4pOiB2b2lkIHtcbiAgICB0aGlzLmNvbnRyb2xsZXIuc2V0Rm9jdXNlZChmb2N1c2VkKTtcbiAgfVxuXG4gIHByZXZlbnRCbHVyKGV2ZW50OiBFdmVudCk6IHZvaWQge1xuICAgIC8vIFByZXZlbnQgdGhlIGVkaXRvciBmcm9tIGxvc2luZyBmb2N1cyB3aGVuIGludGVyYWN0aW5nIHdpdGggdGhlIGRyb3Bkb3duLlxuICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gIH1cbn1cbiIsIjxkaXZcbiAgKm5nSWY9XCJ2bSQgfCBhc3luYyBhcyB2bVwiXG4gIFtpZF09XCJjb250cm9sbGVyLmxpc3Rib3hJZFwiXG4gIHJvbGU9XCJsaXN0Ym94XCJcbiAgZGF0YS1haWEtZHJvcGRvd249XCJcIlxuICBbYXR0ci5kYXRhLWFpYS1sb2FkaW5nXT1cInZtLmlzTG9hZGluZyA/ICcnIDogbnVsbFwiXG4gIFthdHRyLmRhdGEtbW9kZV09XCJyZXNvbHZlZE1vZGVcIlxuICBbYXR0ci5kYXRhLW9wdGlvbnMtcG9zaXRpb25dPVwidm0ub3B0aW9uc1Bvc2l0aW9uXCJcbiAgW2F0dHIuZGF0YS1haWEtaGFzLXByb2R1Y3RzXT1cInZtLnByb2R1Y3RzLmxlbmd0aCA+IDAgPyAnJyA6IG51bGxcIlxuICBbY2xhc3NdPVwicm9vdENsYXNzXCJcbiAgW2NsYXNzLm1hZ2ljeC1haWEtZHJvcGRvd24tdmlzaWJsZV09XCJ2bS5pc1Zpc2libGVcIlxuICAobW91c2Vkb3duKT1cInByZXZlbnRCbHVyKCRldmVudClcIlxuPlxuICA8YWlhLXN0YWNrIHNwYWNlPVwiOHB4XCI+XG4gICAgPGFpYS1jbHVzdGVyXG4gICAgICAqbmdJZj1cInZtLnNob3dzUGlsbHMgfHwgdm0uc2hvd3NTa2lwXCJcbiAgICAgIGNsYXNzPVwibWFnaWN4LWFpYS1kcm9wZG93bi1waWxsYmFyXCJcbiAgICAgIGRhdGEtYWlhLXBpbGxiYXI9XCJcIlxuICAgICAgW25vV3JhcF09XCJ0cnVlXCJcbiAgICA+XG4gICAgICA8IS0tIFRoZSBzY3JvbGwgKyByaWdodC1lZGdlIGZhZGUgbGl2ZSBvbiB0aGlzIHdyYXBwZXIgKG5vdCB0aGUgYmFyKSBzb1xuICAgICAgICAgICB0aGUgc2tpcCBidXR0b24gc3RheXMgb3V0c2lkZSB0aGUgbWFza2VkIHJlZ2lvbiDigJQgcGlubmVkIGFuZCBmdWxseVxuICAgICAgICAgICBvcGFxdWUgd2hpbGUgb3ZlcmZsb3dpbmcgcGlsbHMgZmFkZSB1bmRlciBpdC4gQWJzZW50IGluIGEgc2tpcC1vbmx5XG4gICAgICAgICAgIHJvdyAocGlsbHMgcmVuZGVyZWQgZWxzZXdoZXJlIHZpYSBwaWxsUGxhY2VtZW50IGlubGluZS9oaWRkZW4pLiAtLT5cbiAgICAgIDxzcGFuICpuZ0lmPVwidm0uc2hvd3NQaWxsc1wiIGNsYXNzPVwibWFnaWN4LWFpYS1waWxsLXNjcm9sbFwiIGRhdGEtYWlhLXBpbGwtc2Nyb2xsPVwiXCI+XG4gICAgICAgIDxhaWEtcGlsbC1saXN0XG4gICAgICAgICAgW3BpbGxzXT1cInZtLnBpbGxzXCJcbiAgICAgICAgICBbYWN0aXZlUGlsbEluZGV4XT1cIjBcIlxuICAgICAgICAgIFthY3RpdmVTZWxlY3RlZF09XCJ2bS5pc0FjdGl2ZVBpbGxTZWxlY3RlZFwiXG4gICAgICAgICAgW3JvdW5kZWRdPVwidHJ1ZVwiXG4gICAgICAgICAgW2xvYWRpbmddPVwidm0uaXNMb2FkaW5nXCJcbiAgICAgICAgICAoc2VsZWN0UGlsbCk9XCJvblBpbGxDbGljaygkZXZlbnQpXCJcbiAgICAgICAgPjwvYWlhLXBpbGwtbGlzdD5cbiAgICAgIDwvc3Bhbj5cbiAgICAgIDxidXR0b25cbiAgICAgICAgKm5nSWY9XCJ2bS5zaG93c1NraXBcIlxuICAgICAgICB0eXBlPVwiYnV0dG9uXCJcbiAgICAgICAgdGFiaW5kZXg9XCItMVwiXG4gICAgICAgIGNsYXNzPVwibWFnaWN4LWFpYS1za2lwXCJcbiAgICAgICAgZGF0YS1haWEtc2tpcD1cIlwiXG4gICAgICAgIFtkaXNhYmxlZF09XCJ2bS5za2lwRGlzYWJsZWRcIlxuICAgICAgICBbYXR0ci5hcmlhLWxhYmVsXT1cInZtLmFjdGl2ZVBpbGxMYWJlbCA/ICdTa2lwICcgKyB2bS5hY3RpdmVQaWxsTGFiZWwgOiAnU2tpcCdcIlxuICAgICAgICAoY2xpY2spPVwib25Ta2lwKClcIlxuICAgICAgPlxuICAgICAgICBza2lwXG4gICAgICA8L2J1dHRvbj5cbiAgICA8L2FpYS1jbHVzdGVyPlxuXG4gICAgPGFpYS1zdWdnZXN0aW9uLWdyaWRcbiAgICAgICpuZ0lmPVwidm0uc2hvd3NPcHRpb25zXCJcbiAgICAgIFtvcHRpb25zXT1cInZtLm9wdGlvbnNcIlxuICAgICAgW2FjdGl2ZUluZGV4XT1cInZtLmFjdGl2ZUluZGV4XCJcbiAgICAgIFtsaXN0Ym94SWRdPVwiY29udHJvbGxlci5saXN0Ym94SWRcIlxuICAgICAgW2xvYWRpbmddPVwidm0uaXNMb2FkaW5nXCJcbiAgICAgIFtncm91cEtleV09XCJ2bS5ncm91cEtleVwiXG4gICAgICAoc2VsZWN0KT1cIm9uU2VsZWN0KCRldmVudClcIlxuICAgICAgKGhpZ2hsaWdodCk9XCJvbkhpZ2hsaWdodCgkZXZlbnQpXCJcbiAgICA+PC9haWEtc3VnZ2VzdGlvbi1ncmlkPlxuXG4gICAgPGRpdlxuICAgICAgKm5nSWY9XCJ2bS5zaG93c0ZhbGxiYWNrU2tlbGV0b25cIlxuICAgICAgY2xhc3M9XCJtYWdpY3gtYWlhLWRyb3Bkb3duLXNrZWxldG9uLWJhcnNcIlxuICAgICAgZGF0YS1haWEtc2tlbGV0b24tYmFycz1cIlwiXG4gICAgPlxuICAgICAgPHNwYW5cbiAgICAgICAgKm5nRm9yPVwibGV0IHcgb2YgZmFsbGJhY2tTa2VsZXRvbkJhcldpZHRoczsgdHJhY2tCeTogdHJhY2tCeVdpZHRoXCJcbiAgICAgICAgY2xhc3M9XCJtYWdpY3gtYWlhLWRyb3Bkb3duLXNrZWxldG9uLWJhclwiXG4gICAgICAgIFtzdHlsZS53aWR0aC5weF09XCJ3XCJcbiAgICAgID48L3NwYW4+XG4gICAgPC9kaXY+XG5cbiAgICA8IS0tICpuZ0lmLCBub3QganVzdCB0aGUgc2VjdGlvbidzIG93biBndWFyZCBpbnNpZGUgdGhlIGNvbXBvbmVudDogdGhlIGhvc3RcbiAgICAgICAgIGVsZW1lbnQgaXMgYW4gaW4tZmxvdyBjaGlsZCBvZiAuYWlhLXN0YWNrIChkaXNwbGF5OmZsZXg7IGdhcDo4cHgpLCBzb1xuICAgICAgICAgYW4gYWx3YXlzLWluc3RhbnRpYXRlZCB6ZXJvLWhlaWdodCBob3N0IHdvdWxkIGFkZCBhIFNFQ09ORCA4cHggZ2FwXG4gICAgICAgICBiZXR3ZWVuIHRoZSBncmlkIGFuZCB0aGUgZm9vdGVyIOKAlCBpbiBldmVyeSBkcm9wZG93biwgcHJvZHVjdHMgb3Igbm90LlxuICAgICAgICAgVGhlIGdyaWQncyAtLWFpYS1ncmlkLW92ZXJsYXAtYm90dG9tIGlzIHR1bmVkIGZvciBleGFjdGx5IG9uZSBnYXAsIHNvXG4gICAgICAgICB0aGUgZm9vdGVyIHdvdWxkIGxhbmQgOHB4IGJlbG93IHRoZSBiYW5kIGl0IGlzIG1lYW50IHRvIGNvdmVyLiAtLT5cbiAgICA8YWlhLXByb2R1Y3Qtc3RyaXBcbiAgICAgICpuZ0lmPVwidm0ucHJvZHVjdHMubGVuZ3RoID4gMFwiXG4gICAgICBbcHJvZHVjdHNdPVwidm0ucHJvZHVjdHNcIlxuICAgICAgW2xpc3Rib3hJZF09XCJjb250cm9sbGVyLmxpc3Rib3hJZFwiXG4gICAgICBbZm9jdXNhYmxlXT1cInZtLmlzVmlzaWJsZVwiXG4gICAgICAoc2VsZWN0KT1cIm9uUHJvZHVjdFNlbGVjdCgkZXZlbnQpXCJcbiAgICAgIChmb2N1c0NoYW5nZSk9XCJvblByb2R1Y3RGb2N1c0NoYW5nZSgkZXZlbnQpXCJcbiAgICA+PC9haWEtcHJvZHVjdC1zdHJpcD5cblxuICAgIDxmb290ZXIgY2xhc3M9XCJtYWdpY3gtYWlhLWZvb3RlclwiIGRhdGEtYWlhLWZvb3Rlcj1cIlwiPlxuICAgICAgPGRpdiBjbGFzcz1cIm1hZ2ljeC1haWEtZm9vdGVyLXJvd1wiPlxuICAgICAgICA8c3BhbiBjbGFzcz1cIm1hZ2ljeC1haWEtZm9vdGVyLWhpbnQtZ3JvdXBcIj5cbiAgICAgICAgICA8a2JkIGNsYXNzPVwibWFnaWN4LWFpYS1mb290ZXIta2V5XCI+e3sgdm0uZm9vdGVyS2V5IH19PC9rYmQ+XG4gICAgICAgICAgPHNwYW4gY2xhc3M9XCJtYWdpY3gtYWlhLWZvb3Rlci1oaW50XCI+e3sgdm0uZm9vdGVySGludCB9fTwvc3Bhbj5cbiAgICAgICAgPC9zcGFuPlxuICAgICAgICA8YVxuICAgICAgICAgIGNsYXNzPVwibWFnaWN4LWFpYS1mb290ZXItYnJhbmQtbGlua1wiXG4gICAgICAgICAgW2hyZWZdPVwiYnJhbmRIcmVmXCJcbiAgICAgICAgICB0YXJnZXQ9XCJfYmxhbmtcIlxuICAgICAgICAgIHJlbD1cIm5vb3BlbmVyIG5vcmVmZXJyZXJcIlxuICAgICAgICA+XG4gICAgICAgICAgPHNwYW4gY2xhc3M9XCJtYWdpY3gtYWlhLWZvb3Rlci1icmFuZFwiPkFJPC9zcGFuPlxuICAgICAgICAgIDxzcGFuIGNsYXNzPVwibWFnaWN4LWFpYS1mb290ZXItYmFkZ2VcIj5BdXRvY29tcGxldGU8L3NwYW4+XG4gICAgICAgIDwvYT5cbiAgICAgIDwvZGl2PlxuICAgIDwvZm9vdGVyPlxuICA8L2FpYS1zdGFjaz5cbjwvZGl2PlxuIl19
|
|
264
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYWktYXV0b2NvbXBsZXRlLWRyb3Bkb3duLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3NyYy9saWIvYWktYXV0b2NvbXBsZXRlLWRyb3Bkb3duL2FpLWF1dG9jb21wbGV0ZS1kcm9wZG93bi5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi9zcmMvbGliL2FpLWF1dG9jb21wbGV0ZS1kcm9wZG93bi9haS1hdXRvY29tcGxldGUtZHJvcGRvd24uY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBQy9DLE9BQU8sRUFDTCx1QkFBdUIsRUFDdkIsaUJBQWlCLEVBQ2pCLFNBQVMsRUFDVCxLQUFLLEVBQ0wsTUFBTSxFQUtOLGlCQUFpQixHQUNsQixNQUFNLGVBQWUsQ0FBQztBQUN2QixPQUFPLEVBRUwsbUJBQW1CLEVBRW5CLGFBQWEsR0FJZCxNQUFNLHFDQUFxQyxDQUFDO0FBQzdDLE9BQU8sRUFBRSxlQUFlLEVBQUUsYUFBYSxFQUFtQixNQUFNLE1BQU0sQ0FBQztBQUN2RSxPQUFPLEVBQUUsR0FBRyxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFFckMsT0FBTyxFQUFFLGlCQUFpQixFQUFFLE1BQU0sMkNBQTJDLENBQUM7QUFDOUUsT0FBTyxFQUFFLGdCQUFnQixFQUFFLE1BQU0sc0NBQXNDLENBQUM7QUFDeEUsT0FBTyxFQUFFLGNBQWMsRUFBRSxNQUFNLG9DQUFvQyxDQUFDO0FBQ3BFLE9BQU8sRUFBRSxpQkFBaUIsRUFBRSxNQUFNLDJDQUEyQyxDQUFDO0FBQzlFLE9BQU8sRUFBRSxxQkFBcUIsRUFBRSxNQUFNLG1EQUFtRCxDQUFDO0FBQzFGLE9BQU8sRUFBRSx1QkFBdUIsRUFBRSxNQUFNLHVEQUF1RCxDQUFDOzs7QUF1Q2hHOzs7Ozs7Ozs7Ozs7OztHQWNHO0FBcUJILE1BQU0sT0FBTywrQkFBK0I7SUFwQjVD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QUVELFdBQVcsQ0FBQyxLQUFhO1FBQ3ZCLElBQUksQ0FBQyxVQUFVLENBQUMsc0JBQXNCLENBQUMsS0FBSyxDQUFDLENBQUM7SUFDaEQsQ0FBQztJQUVELGVBQWUsQ0FBQyxPQUFnQjtRQUM5QixJQUFJLENBQUMsVUFBVSxDQUFDLGFBQWEsQ0FBQyxPQUFPLENBQUMsQ0FBQztJQUN6QyxDQUFDO0lBRUQ7OztPQUdHO0lBQ0gsb0JBQW9CLENBQUMsT0FBZ0I7UUFDbkMsSUFBSSxDQUFDLFVBQVUsQ0FBQyxVQUFVLENBQUMsT0FBTyxDQUFDLENBQUM7SUFDdEMsQ0FBQztJQUVELFdBQVcsQ0FBQyxLQUFZO1FBQ3RCLDJFQUEyRTtRQUMzRSxLQUFLLENBQUMsY0FBYyxFQUFFLENBQUM7SUFDekIsQ0FBQzs7NkhBdFFVLCtCQUErQjtpSEFBL0IsK0JBQStCLCtPQ3hHNUMscXlJQXNIQSwydVZEOUJJLFlBQVkscVRBQ1osaUJBQWlCLGlLQUNqQixxQkFBcUIsa0pBQ3JCLHVCQUF1QiwwS0FDdkIsaUJBQWlCLGtNQUNqQixjQUFjLGtGQUNkLGdCQUFnQjs0RkFVUCwrQkFBK0I7a0JBcEIzQyxTQUFTOytCQUNFLDBCQUEwQixjQUN4QixJQUFJLFdBQ1A7d0JBQ1AsWUFBWTt3QkFDWixpQkFBaUI7d0JBQ2pCLHFCQUFxQjt3QkFDckIsdUJBQXVCO3dCQUN2QixpQkFBaUI7d0JBQ2pCLGNBQWM7d0JBQ2QsZ0JBQWdCO3FCQUNqQixtQkFDZ0IsdUJBQXVCLENBQUMsTUFBTSxpQkFDaEMsaUJBQWlCLENBQUMsSUFBSTs4QkFTNUIsVUFBVTtzQkFBbEIsS0FBSztnQkFFRyxTQUFTO3NCQUFqQixLQUFLO2dCQVNHLGNBQWM7c0JBQXRCLEtBQUs7Z0JBRUcsU0FBUztzQkFBakIsS0FBSztnQkFPRyxJQUFJO3NCQUFaLEtBQUsiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDb21tb25Nb2R1bGUgfSBmcm9tIFwiQGFuZ3VsYXIvY29tbW9uXCI7XG5pbXBvcnQge1xuICBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneSxcbiAgQ2hhbmdlRGV0ZWN0b3JSZWYsXG4gIENvbXBvbmVudCxcbiAgSW5wdXQsXG4gIGluamVjdCxcbiAgdHlwZSBPbkNoYW5nZXMsXG4gIHR5cGUgT25EZXN0cm95LFxuICB0eXBlIE9uSW5pdCxcbiAgdHlwZSBTaW1wbGVDaGFuZ2VzLFxuICBWaWV3RW5jYXBzdWxhdGlvbixcbn0gZnJvbSBcIkBhbmd1bGFyL2NvcmVcIjtcbmltcG9ydCB7XG4gIHR5cGUgQXBwZWFyYW5jZU1vZGUsXG4gIGJ1aWxkQXR0cmlidXRpb25VcmwsXG4gIHR5cGUgRGF0ZU1vbnRoVmlldyxcbiAgZ2V0Rm9vdGVySGludCxcbiAgdHlwZSBQcm9kdWN0LFxuICB0eXBlIFN1Z2dlc3Rpb24sXG4gIHR5cGUgU3VnZ2VzdGlvbk9wdGlvbixcbn0gZnJvbSBcIkBtYWdpY3gtZW5nL2FpLWF1dG9jb21wbGV0ZS12YW5pbGxhXCI7XG5pbXBvcnQgeyBCZWhhdmlvclN1YmplY3QsIGNvbWJpbmVMYXRlc3QsIHR5cGUgT2JzZXJ2YWJsZSB9IGZyb20gXCJyeGpzXCI7XG5pbXBvcnQgeyBtYXAgfSBmcm9tIFwicnhqcy9vcGVyYXRvcnNcIjtcbmltcG9ydCB0eXBlIHsgQUlBdXRvY29tcGxldGVDb250cm9sbGVyIH0gZnJvbSBcIi4uL2NvbnRyb2xsZXIvYWktYXV0b2NvbXBsZXRlLmNvbnRyb2xsZXJcIjtcbmltcG9ydCB7IERhdGVHcmlkQ29tcG9uZW50IH0gZnJvbSBcIi4uL2ludGVybmFsL2RhdGUtZ3JpZC9kYXRlLWdyaWQuY29tcG9uZW50XCI7XG5pbXBvcnQgeyBDbHVzdGVyQ29tcG9uZW50IH0gZnJvbSBcIi4uL2ludGVybmFsL2xheW91dC9jbHVzdGVyLmNvbXBvbmVudFwiO1xuaW1wb3J0IHsgU3RhY2tDb21wb25lbnQgfSBmcm9tIFwiLi4vaW50ZXJuYWwvbGF5b3V0L3N0YWNrLmNvbXBvbmVudFwiO1xuaW1wb3J0IHsgUGlsbExpc3RDb21wb25lbnQgfSBmcm9tIFwiLi4vaW50ZXJuYWwvcGlsbC1saXN0L3BpbGwtbGlzdC5jb21wb25lbnRcIjtcbmltcG9ydCB7IFByb2R1Y3RTdHJpcENvbXBvbmVudCB9IGZyb20gXCIuLi9pbnRlcm5hbC9wcm9kdWN0LXN0cmlwL3Byb2R1Y3Qtc3RyaXAuY29tcG9uZW50XCI7XG5pbXBvcnQgeyBTdWdnZXN0aW9uR3JpZENvbXBvbmVudCB9IGZyb20gXCIuLi9pbnRlcm5hbC9zdWdnZXN0aW9uLWdyaWQvc3VnZ2VzdGlvbi1ncmlkLmNvbXBvbmVudFwiO1xuXG5pbnRlcmZhY2UgRHJvcGRvd25WbSB7XG4gIHBpbGxzOiBTdWdnZXN0aW9uW107XG4gIG9wdGlvbnM6IFN1Z2dlc3Rpb25PcHRpb25bXTtcbiAgYWN0aXZlSW5kZXg6IG51bWJlcjtcbiAgaXNBY3RpdmVQaWxsU2VsZWN0ZWQ6IGJvb2xlYW47XG4gIGlzTG9hZGluZzogYm9vbGVhbjtcbiAgc2hvd3NQaWxsczogYm9vbGVhbjtcbiAgLyoqIFdoZXRoZXIgdGhlIHBpbGxiYXIgZW5kcyBpbiB0aGUgdHJhaWxpbmcgXCJza2lwXCIgYnV0dG9uLiAqL1xuICBzaG93c1NraXA6IGJvb2xlYW47XG4gIC8qKlxuICAgKiBEaXNhYmxlZCBzdGF0ZSBmb3IgdGhlIHNraXAgYnV0dG9uOiBsb2FkaW5nLCBvciB0aGUgcG9zdC1zZWxlY3Rpb24gd2luZG93XG4gICAqIHdoZXJlIGlzTG9hZGluZyBpcyBzdXBwcmVzc2VkIGJ1dCB0aGUgY29yZSdzIHNraXBBY3RpdmVQaWxsKCkgbm8tb3BzLlxuICAgKi9cbiAgc2tpcERpc2FibGVkOiBib29sZWFuO1xuICAvKiogQWN0aXZlIHBpbGwncyBsYWJlbCwgZm9yIHRoZSBza2lwIGJ1dHRvbidzIGFyaWEtbGFiZWwuICovXG4gIGFjdGl2ZVBpbGxMYWJlbDogc3RyaW5nO1xuICBzaG93c09wdGlvbnM6IGJvb2xlYW47XG4gIC8qKiBXaGV0aGVyIHRoZSBjYWxlbmRhciBib2R5IHJlbmRlcnMgaW4gcGxhY2Ugb2YgdGhlIG9wdGlvbnMgZ3JpZC4gKi9cbiAgc2hvd3NEYXRlR3JpZDogYm9vbGVhbjtcbiAgLyoqIFRoZSBtb250aCB0aGUgY2FsZW5kYXIgc2hvd3MuIE51bGwgdW5sZXNzIGBzaG93c0RhdGVHcmlkYC4gKi9cbiAgZGF0ZVZpZXc6IERhdGVNb250aFZpZXcgfCBudWxsO1xuICAvKiogYFlZWVktTU0tRERgIHRoZSBwYXJhbSBiZWluZyByZS1lZGl0ZWQgYWxyZWFkeSBob2xkcywgb3IgbnVsbC4gKi9cbiAgc2VsZWN0ZWREYXRlSXNvOiBzdHJpbmcgfCBudWxsO1xuICBzaG93c0ZhbGxiYWNrU2tlbGV0b246IGJvb2xlYW47XG4gIGlzVmlzaWJsZTogYm9vbGVhbjtcbiAgLyoqIFByb2R1Y3QgY2FyZHMgZm9yIHRoZSBzdHJpcC4gRW1wdHkgdW5sZXNzIGBwcm9kdWN0c2AgaXMgY29uZmlndXJlZC4gKi9cbiAgcHJvZHVjdHM6IFByb2R1Y3RbXTtcbiAgLyoqIElkZW50aXR5IG9mIHRoZSBzdWdnZXN0aW9uIHRoZSBvcHRpb25zIGJlbG9uZyB0byDigJQgZHJpdmVzIHRoZSBncmlkJ3Mgc2Nyb2xsIHJlc2V0LiAqL1xuICBncm91cEtleTogc3RyaW5nO1xuICBmb290ZXJLZXk6IHN0cmluZztcbiAgZm9vdGVySGludDogc3RyaW5nO1xuICBvcHRpb25zUG9zaXRpb246IFwiYWJvdmVcIiB8IFwiYmVsb3dcIjtcbn1cblxuLyoqIFRoZSBjb250ZW50LWJlYXJpbmcgZmllbGRzIG9mIHRoZSB2aWV3LW1vZGVsIChldmVyeXRoaW5nIGJ1dCBgaXNWaXNpYmxlYCkuICovXG50eXBlIERyb3Bkb3duQ29udGVudCA9IE9taXQ8RHJvcGRvd25WbSwgXCJpc1Zpc2libGVcIj47XG5cbi8qKlxuICogVGllciAyIGRyb3Bkb3duIGNvbXBvbmVudCDigJQgdGhlIEFuZ3VsYXIgZXF1aXZhbGVudCBvZiBSZWFjdCdzXG4gKiBgPEFJQXV0b2NvbXBsZXRlRHJvcGRvd24gLz5gLiBSZW5kZXJzIHRoZSBwaWxsYmFyLCBvcHRpb25zIGdyaWQsIGFuZFxuICogbG9hZGluZyBza2VsZXRvbiBiYXNlZCBvbiB0aGUgc3VwcGxpZWQgY29udHJvbGxlcidzIGBkcm9wZG93biRgIHNuYXBzaG90LlxuICpcbiAqIGBgYGh0bWxcbiAqIDxhaS1hdXRvY29tcGxldGUtZHJvcGRvd24gW2NvbnRyb2xsZXJdPVwiYWNcIj48L2FpLWF1dG9jb21wbGV0ZS1kcm9wZG93bj5cbiAqIGBgYFxuICpcbiAqIEFsbCBhY3Rpb25zIChwaWxsIGNsaWNrLCBvcHRpb24gc2VsZWN0LCBvcHRpb24gaGlnaGxpZ2h0KSBhcmUgZm9yd2FyZGVkIHRvXG4gKiB0aGUgY29udHJvbGxlci4gQ29uc3VtZXJzIHdobyBuZWVkIHRvIG9ic2VydmUgdGhlc2UgZXZlbnRzIGNhbiBzdWJzY3JpYmVcbiAqIHRvIHRoZSBjb250cm9sbGVyJ3MgcGVyLWZpZWxkIG9ic2VydmFibGVzLlxuICpcbiAqIEBwdWJsaWNcbiAqL1xuQENvbXBvbmVudCh7XG4gIHNlbGVjdG9yOiBcImFpLWF1dG9jb21wbGV0ZS1kcm9wZG93blwiLFxuICBzdGFuZGFsb25lOiB0cnVlLFxuICBpbXBvcnRzOiBbXG4gICAgQ29tbW9uTW9kdWxlLFxuICAgIFBpbGxMaXN0Q29tcG9uZW50LFxuICAgIFByb2R1Y3RTdHJpcENvbXBvbmVudCxcbiAgICBTdWdnZXN0aW9uR3JpZENvbXBvbmVudCxcbiAgICBEYXRlR3JpZENvbXBvbmVudCxcbiAgICBTdGFja0NvbXBvbmVudCxcbiAgICBDbHVzdGVyQ29tcG9uZW50LFxuICBdLFxuICBjaGFuZ2VEZXRlY3Rpb246IENoYW5nZURldGVjdGlvblN0cmF0ZWd5Lk9uUHVzaCxcbiAgZW5jYXBzdWxhdGlvbjogVmlld0VuY2Fwc3VsYXRpb24uTm9uZSxcbiAgdGVtcGxhdGVVcmw6IFwiLi9haS1hdXRvY29tcGxldGUtZHJvcGRvd24uY29tcG9uZW50Lmh0bWxcIixcbiAgLy8gVGhlIHNoYXJlZCBhcHBlYXJhbmNlIGxheWVyIGNhcnJpZXMgdGhlIGRlc2lnbiB0b2tlbnMgKyBib3gtc2l6aW5nIHJlc2V0ICtcbiAgLy8gb3B0aW9uc1Bvc2l0aW9uIHJldmVyc2FsLCBzbyBhIHN0YW5kYWxvbmUgZHJvcGRvd24gKG5vIFRpZXIgMSBjb21wb25lbnQgb25cbiAgLy8gdGhlIHBhZ2UpIGlzIGZ1bGx5IHN0eWxlZCBvbmNlIGBtb2RlYCBpcyBzZXQuXG4gIHN0eWxlVXJsczogW1wiLi4vc2hhcmVkL2FwcGVhcmFuY2UuY3NzXCIsIFwiLi9haS1hdXRvY29tcGxldGUtZHJvcGRvd24uY29tcG9uZW50LmNzc1wiXSxcbn0pXG5leHBvcnQgY2xhc3MgQUlBdXRvY29tcGxldGVEcm9wZG93bkNvbXBvbmVudCBpbXBsZW1lbnRzIE9uSW5pdCwgT25DaGFuZ2VzLCBPbkRlc3Ryb3kge1xuICAvKiogVGhlIGNvbnRyb2xsZXIgdGhhdCBvd25zIHRoZSBhdXRvY29tcGxldGUgc3RhdGUuIFJlcXVpcmVkLiAqL1xuICBASW5wdXQoKSBjb250cm9sbGVyITogQUlBdXRvY29tcGxldGVDb250cm9sbGVyO1xuICAvKiogV2hldGhlciB0byByZW5kZXIgdGhlIHBpbGxiYXIgYWJvdmUgdGhlIG9wdGlvbnMgZ3JpZC4gRGVmYXVsdDogdHJ1ZS4gKi9cbiAgQElucHV0KCkgc2hvd1BpbGxzID0gdHJ1ZTtcbiAgLyoqXG4gICAqIFdoZXRoZXIgdGhlIHBpbGxiYXIgZW5kcyBpbiBhIHNtYWxsIFwic2tpcFwiIGJ1dHRvbiB0aGF0IGRpc21pc3NlcyB0aGVcbiAgICogYWN0aXZlIHBpbGwg4oCUIHNhbWUgYWN0aW9uIGFzIHByZXNzaW5nIOKGkiBhdCB0aGUgZW5kIG9mIHRoZSBpbnB1dC4gSXQgc2l0c1xuICAgKiBhdCB0aGUgdHJhaWxpbmcgZWRnZSBvZiB0aGUgYmFyOiB2aXN1YWxseSB0b3AtcmlnaHQgd2hlbiB0aGUgZHJvcGRvd25cbiAgICogb3BlbnMgYmVsb3cgdGhlIGlucHV0LCBib3R0b20tcmlnaHQgd2hlbiBgb3B0aW9uc1Bvc2l0aW9uYCBpcyBcImFib3ZlXCIuXG4gICAqIERlZmF1bHQ6IHRydWUuIEhpZGRlbiBhdXRvbWF0aWNhbGx5IGR1cmluZyByZS1lZGl0IGFuZCB3aGlsZSB0aGUgZmFsbGJhY2tcbiAgICogc2tlbGV0b24gcmVuZGVycy5cbiAgICovXG4gIEBJbnB1dCgpIHNob3dTa2lwQnV0dG9uID0gdHJ1ZTtcbiAgLyoqIE9wdGlvbmFsIENTUyBjbGFzcyBhcHBsaWVkIHRvIHRoZSBkcm9wZG93biByb290LiAqL1xuICBASW5wdXQoKSBjbGFzc05hbWU/OiBzdHJpbmc7XG4gIC8qKlxuICAgKiBDb2xvciBtb2RlIGZvciBhIHN0YW5kYWxvbmUgZHJvcGRvd24uIFdoZW4gc2V0LCB0aGUgZHJvcGRvd24gc2VsZi1zY29wZXMgdGhlXG4gICAqIGRlc2lnbiB0b2tlbnMgdG8gaXRzIG93biByb290IChhZGRzIGBtYWdpY3gtYWlhYCArIGBkYXRhLW1vZGVgKSwgc28gaXQgbmVlZHNcbiAgICogbm8gYC5tYWdpY3gtYWlhYCB3cmFwcGVyLiBgXCJhdXRvXCJgIGZvbGxvd3MgYHByZWZlcnMtY29sb3Itc2NoZW1lYC4gTGVhdmUgaXRcbiAgICogdW5zZXQgd2hlbiB0aGUgZHJvcGRvd24gc2l0cyBpbnNpZGUgYSBgLm1hZ2ljeC1haWFgIGFuY2VzdG9yIChlLmcuIFRpZXIgMSkuXG4gICAqL1xuICBASW5wdXQoKSBtb2RlPzogQXBwZWFyYW5jZU1vZGU7XG5cbiAgLyoqIENvbmNyZXRlIHJlc29sdmVkIG1vZGUsIG9yIG51bGwgd2hlbiBgbW9kZWAgaXMgdW5zZXQgKGluaGVyaXQgZnJvbSBhbmNlc3RvcikuICovXG4gIHJlc29sdmVkTW9kZTogXCJsaWdodFwiIHwgXCJkYXJrXCIgfCBudWxsID0gbnVsbDtcbiAgcHJpdmF0ZSBtb2RlTXFsPzogTWVkaWFRdWVyeUxpc3Q7XG4gIHByaXZhdGUgbW9kZUxpc3RlbmVyPzogKCkgPT4gdm9pZDtcbiAgcHJpdmF0ZSByZWFkb25seSBjZHIgPSBpbmplY3QoQ2hhbmdlRGV0ZWN0b3JSZWYpO1xuXG4gIC8qKiBSb290IGNsYXNzIGxpc3Qg4oCUIGFkZHMgYG1hZ2ljeC1haWFgIG9ubHkgd2hlbiBzZWxmLXNjb3BpbmcgdmlhIGBtb2RlYC4gKi9cbiAgZ2V0IHJvb3RDbGFzcygpOiBzdHJpbmcge1xuICAgIGxldCBjbHMgPSBcIm1hZ2ljeC1haWEtZHJvcGRvd25cIjtcbiAgICBpZiAodGhpcy5yZXNvbHZlZE1vZGUpIGNscyArPSBcIiBtYWdpY3gtYWlhXCI7XG4gICAgaWYgKHRoaXMuY2xhc3NOYW1lKSBjbHMgKz0gYCAke3RoaXMuY2xhc3NOYW1lfWA7XG4gICAgcmV0dXJuIGNscztcbiAgfVxuXG4gIC8qKiBGYWxsYmFjayBza2VsZXRvbi1iYXIgd2lkdGhzIHVzZWQgd2hlbiBsb2FkaW5nIHdpdGggemVybyBjYWNoZWQgb3B0aW9ucy4gKi9cbiAgcmVhZG9ubHkgZmFsbGJhY2tTa2VsZXRvbkJhcldpZHRocyA9IFsxNTksIDExOSwgMTY0XTtcblxuICAvKipcbiAgICogQXR0cmlidXRpb24vYnJhbmRpbmcgbGluayBVUkwgZm9yIHRoZSBmb290ZXIsIHdpdGggYSBgdXRtX3NvdXJjZWAgZGVyaXZlZFxuICAgKiBmcm9tIHRoZSBlbWJlZGRpbmcgcGFnZSdzIGhvc3RuYW1lIChzZWUge0BsaW5rIGJ1aWxkQXR0cmlidXRpb25Vcmx9KS5cbiAgICovXG4gIHJlYWRvbmx5IGJyYW5kSHJlZiA9IGJ1aWxkQXR0cmlidXRpb25VcmwoKTtcblxuICAvKipcbiAgICogVmlldy1tb2RlbCBkZXJpdmVkIGZyb20gdGhlIGNvbnRyb2xsZXIncyBgZHJvcGRvd24kYC4gQWRkcyB0aHJlZSBib29sZWFuc1xuICAgKiAoYHNob3dzUGlsbHNgLCBgc2hvd3NPcHRpb25zYCwgYHNob3dzRmFsbGJhY2tTa2VsZXRvbmAsIGBpc1Zpc2libGVgKSB0aGF0XG4gICAqIGtlZXAgdGVtcGxhdGUtbGV2ZWwgbG9naWMgdG8gYSBwcm9wZXJ0eSByZWFkIHBlciDCpzE5LjYuXG4gICAqXG4gICAqIEluaXRpYWxpemVkIG9uY2UgaW4gYG5nT25Jbml0YCDigJQgbXVzdCBOT1QgYmUgYSBnZXR0ZXIuIEEgZ2V0dGVyIHJldHVybnMgYVxuICAgKiBmcmVzaCBgT2JzZXJ2YWJsZWAgaW5zdGFuY2Ugb24gZXZlcnkgcHJvcGVydHkgcmVhZDsgd2l0aCBPblB1c2ggKyBgYXN5bmNgXG4gICAqIHBpcGUgdGhhdCBtZWFucyBlYWNoIGNoYW5nZS1kZXRlY3Rpb24gY3ljbGUgdW5zdWJzY3JpYmVzL3Jlc3Vic2NyaWJlcyxcbiAgICogY2F1c2luZyB0aGUgYCpuZ0lmPVwidm0kIHwgYXN5bmMgYXMgdm1cImAgcm9vdCB0byBicmllZmx5IHJlc29sdmUgYG51bGxgXG4gICAqIGFuZCBmbGlja2VyIHRoZSBlbnRpcmUgZHJvcGRvd24gRE9NLlxuICAgKi9cbiAgdm0kITogT2JzZXJ2YWJsZTxEcm9wZG93blZtPjtcblxuICAvLyBCcmlkZ2UgZm9yIHRoZSBASW5wdXQgYHNob3dQaWxsc2AgaW50byB0aGUgcmVhY3RpdmUgcGlwZWxpbmUuIFdpdGhvdXQgdGhpcyxcbiAgLy8gY2hhbmdpbmcgdGhlIGlucHV0IGFmdGVyIGluaXQgd291bGRuJ3QgdHJpZ2dlciBhIG5ldyB2bSBlbWlzc2lvbiB1bnRpbCB0aGVcbiAgLy8gbmV4dCBjb250cm9sbGVyLmRyb3Bkb3duJCB0aWNrIOKAlCBhbmQgd2UnZCBsb3NlIHRoZSBzaG93UGlsbHMgdXBkYXRlIGVudGlyZWx5XG4gIC8vIGlmIHRoZSBjb250cm9sbGVyIGlzIGlkbGUuIFVwZGF0ZWQgZnJvbSBuZ09uQ2hhbmdlcyBiZWxvdy5cbiAgcHJpdmF0ZSByZWFkb25seSBzaG93UGlsbHMkID0gbmV3IEJlaGF2aW9yU3ViamVjdDxib29sZWFuPih0cnVlKTtcbiAgLy8gU2FtZSBicmlkZ2UsIGZvciBgc2hvd1NraXBCdXR0b25gLlxuICBwcml2YXRlIHJlYWRvbmx5IHNob3dTa2lwQnV0dG9uJCA9IG5ldyBCZWhhdmlvclN1YmplY3Q8Ym9vbGVhbj4odHJ1ZSk7XG5cbiAgLy8gTGFzdCBjb250ZW50IGVtaXR0ZWQgd2hpbGUgdGhlIGRyb3Bkb3duIHdhcyB2aXNpYmxlLiBSZXVzZWQgZHVyaW5nIHRoZVxuICAvLyBjbG9zZSBmYWRlIHNvIHRoZSBwb3B1bGF0ZWQgZHJvcGRvd24gZmFkZXMgb3V0IGFzIG9uZSDigJQgc2VlIGluaXRWbS5cbiAgcHJpdmF0ZSBsYXN0VmlzaWJsZUNvbnRlbnQ6IERyb3Bkb3duQ29udGVudCB8IG51bGwgPSBudWxsO1xuXG4gIG5nT25Jbml0KCk6IHZvaWQge1xuICAgIC8vIFNlZWQgdGhlIGlucHV0IGJyaWRnZXMgZnJvbSB0aGVpciByZXNvbHZlZCB2YWx1ZXMgYXQgaW5pdCB0aW1lLlxuICAgIHRoaXMuc2hvd1BpbGxzJC5uZXh0KHRoaXMuc2hvd1BpbGxzKTtcbiAgICB0aGlzLnNob3dTa2lwQnV0dG9uJC5uZXh0KHRoaXMuc2hvd1NraXBCdXR0b24pO1xuICAgIHRoaXMuYXBwbHlNb2RlKCk7XG4gICAgdGhpcy5pbml0Vm0oKTtcbiAgfVxuXG4gIG5nT25DaGFuZ2VzKGNoYW5nZXM6IFNpbXBsZUNoYW5nZXMpOiB2b2lkIHtcbiAgICBpZiAoY2hhbmdlc1tcInNob3dQaWxsc1wiXSkge1xuICAgICAgdGhpcy5zaG93UGlsbHMkLm5leHQodGhpcy5zaG93UGlsbHMpO1xuICAgIH1cbiAgICBpZiAoY2hhbmdlc1tcInNob3dTa2lwQnV0dG9uXCJdKSB7XG4gICAgICB0aGlzLnNob3dTa2lwQnV0dG9uJC5uZXh0KHRoaXMuc2hvd1NraXBCdXR0b24pO1xuICAgIH1cbiAgICBpZiAoY2hhbmdlc1tcIm1vZGVcIl0gJiYgIWNoYW5nZXNbXCJtb2RlXCJdLmZpcnN0Q2hhbmdlKSB7XG4gICAgICB0aGlzLmFwcGx5TW9kZSgpO1xuICAgIH1cbiAgICAvLyBSZS1iaW5kIHZtJCB3aGVuIHRoZSBjb250cm9sbGVyIEBJbnB1dCBpcyBzd2FwcGVkIChlLmcuIGEgbXVsdGktc3RlcCBmb3JtXG4gICAgLy8gdG9nZ2xpbmcgYmV0d2VlbiBjb250cm9sbGVycykuIFdpdGhvdXQgdGhpcywgdm0kIHN0YXlzIHN1YnNjcmliZWQgdG8gdGhlXG4gICAgLy8gcHJldmlvdXMgY29udHJvbGxlcidzIGRyb3Bkb3duJCDigJQgcmVuZGVyaW5nIHN0YWxlIG9wdGlvbnMsIG9yLCBpZiB0aGF0XG4gICAgLy8gY29udHJvbGxlciB3YXMgZGVzdHJveSgpLWVkLCByZWNlaXZpbmcgYSBjb21wbGV0aW9uIHRoYXQgY29sbGFwc2VzIHRoZVxuICAgIC8vIGRyb3Bkb3duIHBlcm1hbmVudGx5LiBTa2lwIHRoZSBmaXJzdCBjaGFuZ2U6IG5nT25DaGFuZ2VzIGZpcmVzIGJlZm9yZVxuICAgIC8vIG5nT25Jbml0LCB3aGljaCBvd25zIHRoZSBpbml0aWFsIGNyZWF0aW9uLlxuICAgIGlmIChjaGFuZ2VzW1wiY29udHJvbGxlclwiXSAmJiAhY2hhbmdlc1tcImNvbnRyb2xsZXJcIl0uZmlyc3RDaGFuZ2UgJiYgdGhpcy5jb250cm9sbGVyKSB7XG4gICAgICB0aGlzLmluaXRWbSgpO1xuICAgIH1cbiAgfVxuXG4gIG5nT25EZXN0cm95KCk6IHZvaWQge1xuICAgIHRoaXMudGVhcmRvd25Nb2RlTGlzdGVuZXIoKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZXNvbHZlIHRoZSBgbW9kZWAgaW5wdXQgaW50byBgcmVzb2x2ZWRNb2RlYC4gVW5zZXQg4oaSIG51bGwgKHRoZSBkcm9wZG93blxuICAgKiBzdGF5cyBjbGFzcy1sZXNzIGFuZCBpbmhlcml0cyBmcm9tIGEgYC5tYWdpY3gtYWlhYCBhbmNlc3RvcikuIGBcImF1dG9cImAgcmVhZHNcbiAgICogYHByZWZlcnMtY29sb3Itc2NoZW1lYCBhbmQgdHJhY2tzIGl0IGxpdmUgdmlhIGEgbWVkaWEtcXVlcnkgbGlzdGVuZXIuXG4gICAqL1xuICBwcml2YXRlIGFwcGx5TW9kZSgpOiB2b2lkIHtcbiAgICB0aGlzLnRlYXJkb3duTW9kZUxpc3RlbmVyKCk7XG4gICAgaWYgKHRoaXMubW9kZSA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICB0aGlzLnJlc29sdmVkTW9kZSA9IG51bGw7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIGlmICh0aGlzLm1vZGUgPT09IFwibGlnaHRcIiB8fCB0aGlzLm1vZGUgPT09IFwiZGFya1wiKSB7XG4gICAgICB0aGlzLnJlc29sdmVkTW9kZSA9IHRoaXMubW9kZTtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgLy8gXCJhdXRvXCJcbiAgICBpZiAodHlwZW9mIHdpbmRvdyA9PT0gXCJ1bmRlZmluZWRcIiB8fCB0eXBlb2Ygd2luZG93Lm1hdGNoTWVkaWEgIT09IFwiZnVuY3Rpb25cIikge1xuICAgICAgdGhpcy5yZXNvbHZlZE1vZGUgPSBcImxpZ2h0XCI7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIHRoaXMubW9kZU1xbCA9IHdpbmRvdy5tYXRjaE1lZGlhKFwiKHByZWZlcnMtY29sb3Itc2NoZW1lOiBkYXJrKVwiKTtcbiAgICB0aGlzLnJlc29sdmVkTW9kZSA9IHRoaXMubW9kZU1xbC5tYXRjaGVzID8gXCJkYXJrXCIgOiBcImxpZ2h0XCI7XG4gICAgdGhpcy5tb2RlTGlzdGVuZXIgPSAoKSA9PiB7XG4gICAgICB0aGlzLnJlc29sdmVkTW9kZSA9IHRoaXMubW9kZU1xbD8ubWF0Y2hlcyA/IFwiZGFya1wiIDogXCJsaWdodFwiO1xuICAgICAgdGhpcy5jZHIubWFya0ZvckNoZWNrKCk7XG4gICAgfTtcbiAgICB0aGlzLm1vZGVNcWwuYWRkRXZlbnRMaXN0ZW5lcihcImNoYW5nZVwiLCB0aGlzLm1vZGVMaXN0ZW5lcik7XG4gIH1cblxuICBwcml2YXRlIHRlYXJkb3duTW9kZUxpc3RlbmVyKCk6IHZvaWQge1xuICAgIGlmICh0aGlzLm1vZGVNcWwgJiYgdGhpcy5tb2RlTGlzdGVuZXIpIHtcbiAgICAgIHRoaXMubW9kZU1xbC5yZW1vdmVFdmVudExpc3RlbmVyKFwiY2hhbmdlXCIsIHRoaXMubW9kZUxpc3RlbmVyKTtcbiAgICB9XG4gICAgdGhpcy5tb2RlTXFsID0gdW5kZWZpbmVkO1xuICAgIHRoaXMubW9kZUxpc3RlbmVyID0gdW5kZWZpbmVkO1xuICB9XG5cbiAgLyoqIEJ1aWxkIHRoZSB2aWV3LW1vZGVsIHN0cmVhbSBmcm9tIHRoZSBjdXJyZW50IGNvbnRyb2xsZXIgKyBzaG93UGlsbHMkLiAqL1xuICBwcml2YXRlIGluaXRWbSgpOiB2b2lkIHtcbiAgICB0aGlzLnZtJCA9IGNvbWJpbmVMYXRlc3QoW1xuICAgICAgdGhpcy5jb250cm9sbGVyLmRyb3Bkb3duJCxcbiAgICAgIHRoaXMuc2hvd1BpbGxzJCxcbiAgICAgIHRoaXMuc2hvd1NraXBCdXR0b24kLFxuICAgIF0pLnBpcGUoXG4gICAgICBtYXAoKFtkZCwgc2hvd1BpbGxzLCBzaG93U2tpcEJ1dHRvbl0pID0+IHtcbiAgICAgICAgY29uc3QgYWN0aXZlU3VnZ2VzdGlvbiA9IGRkLnN1Z2dlc3Rpb25zWzBdO1xuICAgICAgICBjb25zdCBvcHRpb25zID0gYWN0aXZlU3VnZ2VzdGlvbj8ub3B0aW9ucyA/PyBbXTtcbiAgICAgICAgY29uc3Qgc2hvd3NQaWxscyA9IHNob3dQaWxscyAmJiAoZGQucGlsbHMubGVuZ3RoID4gMCB8fCBkZC5pc0xvYWRpbmcpO1xuICAgICAgICAvLyBUaGUgdHJhaWxpbmcgXCJza2lwXCIgYnV0dG9uIG9ubHkgbWFrZXMgc2Vuc2UgbmV4dCB0byBhIHJlYWwsXG4gICAgICAgIC8vIHNraXBwYWJsZSBwaWxsIOKAlCBuZXZlciBvbiB0aGUgZmFsbGJhY2sgc2tlbGV0b24gYmFyLCBhbmQgbmV2ZXJcbiAgICAgICAgLy8gZHVyaW5nIHJlLWVkaXQgKHRoZSBiYXIgdGhlbiBzaG93cyBhbiBhbHJlYWR5IGFuc3dlcmVkIHBhcmFtKS5cbiAgICAgICAgLy8gRGVsaWJlcmF0ZWx5IE5PVCBnYXRlZCBvbiBzaG93c1BpbGxzOiB3aXRoIHBpbGxzIHJlbmRlcmVkIGVsc2V3aGVyZVxuICAgICAgICAvLyAocGlsbFBsYWNlbWVudCBcImlubGluZVwiL1wiaGlkZGVuXCIpIHRoZSBiYXIgcmVuZGVycyBhcyBhIHNraXAtb25seVxuICAgICAgICAvLyByb3cgaG9sZGluZyBqdXN0IHRoZSBidXR0b24uIEhpZGRlbiB3aGlsZSB0aGUgaW5wdXQgaXMgZW1wdHkg4oCUIHRoZVxuICAgICAgICAvLyBmb290ZXIgaGludCBkb2Vzbid0IGFkdmVydGlzZSBcIuKGkiB0byBza2lwXCIgdW50aWwgdGhlIHVzZXIgaGFzIHR5cGVkLFxuICAgICAgICAvLyBzbyB0aGUgcHJpc3RpbmUgc3RhcnRpbmcgc3RhdGUgc3RheXMgZnJlZSBvZiB0aGUgYWZmb3JkYW5jZSB0b28uXG4gICAgICAgIGNvbnN0IHNob3dzU2tpcCA9XG4gICAgICAgICAgZGQucGlsbHMubGVuZ3RoID4gMCAmJiBzaG93U2tpcEJ1dHRvbiAmJiAhZGQuaXNFZGl0aW5nICYmICFkZC5pc0lucHV0RW1wdHk7XG4gICAgICAgIC8vIEV4YWN0bHkgb25lIGJvZHkgcmVuZGVycy4gYG9wdGlvbnNgIGFib3ZlIGFscmVhZHkgaG9sZHMgdGhlIHZpc2libGVcbiAgICAgICAgLy8gbW9udGgncyBjZWxscyB3aGVuIHRoaXMgaXMgYSBkYXRlIOKAlCB0aGUgY29yZSBzd2FwcGVkIHRoZW0gaW4gaXRzXG4gICAgICAgIC8vIGRlcml2ZSBsYXllciDigJQgc28gdGhlIHR3byBhcmUgdGhlIHNhbWUgbGlzdCBkcmF3biB0d28gZGlmZmVyZW50XG4gICAgICAgIC8vIHdheXMsIGFuZCBuZXZlciBib3RoIGF0IG9uY2UgKHR3byBlbGVtZW50cyBhbnN3ZXJpbmcgdG8gdGhlIHNhbWVcbiAgICAgICAgLy8gb3B0aW9uIGlkIHdvdWxkIGJyZWFrIGtleWJvYXJkIGNvbW1pdCkuXG4gICAgICAgIGNvbnN0IGlzRGF0ZSA9IGRkLmZvcm1hdFR5cGUgPT09IFwiZGF0ZVwiICYmIGRkLmRhdGVWaWV3ICE9IG51bGw7XG4gICAgICAgIGNvbnN0IHNob3dzT3B0aW9ucyA9IG9wdGlvbnMubGVuZ3RoID4gMCAmJiAhaXNEYXRlO1xuICAgICAgICBjb25zdCBzaG93c0RhdGVHcmlkID0gb3B0aW9ucy5sZW5ndGggPiAwICYmIGlzRGF0ZTtcbiAgICAgICAgY29uc3Qgc2hvd3NGYWxsYmFja1NrZWxldG9uID0gZGQuaXNMb2FkaW5nICYmICFzaG93c09wdGlvbnMgJiYgIXNob3dzRGF0ZUdyaWQ7XG4gICAgICAgIC8vIEVpdGhlciBoYWxmIGlzIGVub3VnaCB0byBrZWVwIHRoZSBwYW5lbCB1cDogcHJvZHVjdHMgcmVuZGVyIHdpdGggbm9cbiAgICAgICAgLy8gc3VnZ2VzdGlvbnMsIHN1Z2dlc3Rpb25zIHJlbmRlciB3aXRoIG5vIHByb2R1Y3RzLlxuICAgICAgICBjb25zdCBpc1Zpc2libGUgPVxuICAgICAgICAgIGRkLmlzT3BlbiAmJlxuICAgICAgICAgIChzaG93c09wdGlvbnMgfHwgc2hvd3NEYXRlR3JpZCB8fCBzaG93c1BpbGxzIHx8IGRkLmlzTG9hZGluZyB8fCBkZC5wcm9kdWN0cy5sZW5ndGggPiAwKTtcblxuICAgICAgICAvLyBXaGlsZSBjbG9zaW5nLCByZXVzZSB0aGUgbGFzdCB2aXNpYmxlIGNvbnRlbnQgc28gdGhlIHBvcHVsYXRlZFxuICAgICAgICAvLyBkcm9wZG93biBmYWRlcyBvdXQgYXMgb25lLiBPdGhlcndpc2UgdGhlIHBpbGxzL29wdGlvbnMgdmFuaXNoIHRoZVxuICAgICAgICAvLyBpbnN0YW50IHRoZSBzdGF0ZSBlbXB0aWVzIChlLmcuIHNraXBwaW5nIHRoZSBsYXN0IHBpbGwgd2l0aCDihpIpLFxuICAgICAgICAvLyBsZWF2aW5nIHRoZSBhbHdheXMtcHJlc2VudCBmb290ZXIgYWxvbmUgZm9yIGEgZmxhc2ggb2YgYSBmb290ZXItb25seVxuICAgICAgICAvLyBcIm5vIG9wdGlvbnNcIiBib3ggbWlkLWZhZGUuIE9ubHkgYGlzVmlzaWJsZWAgdHJhY2tzIGxpdmUgc3RhdGUgdG9cbiAgICAgICAgLy8gZHJpdmUgdGhlIG9wYWNpdHkgdHJhbnNpdGlvbi5cbiAgICAgICAgaWYgKCFpc1Zpc2libGUgJiYgdGhpcy5sYXN0VmlzaWJsZUNvbnRlbnQpIHtcbiAgICAgICAgICByZXR1cm4geyAuLi50aGlzLmxhc3RWaXNpYmxlQ29udGVudCwgaXNWaXNpYmxlOiBmYWxzZSB9O1xuICAgICAgICB9XG5cbiAgICAgICAgY29uc3Qgb3B0aW9uSGlnaGxpZ2h0ZWQgPVxuICAgICAgICAgIGRkLmFjdGl2ZUluZGV4ID49IDAgJiYgQm9vbGVhbihvcHRpb25zW2RkLmFjdGl2ZUluZGV4XT8uaXNfdGFwcGFibGUpO1xuICAgICAgICBjb25zdCB7IGtleTogZm9vdGVyS2V5LCBoaW50OiBmb290ZXJIaW50IH0gPSBnZXRGb290ZXJIaW50KFxuICAgICAgICAgIG9wdGlvbkhpZ2hsaWdodGVkLFxuICAgICAgICAgIGRkLmlzSW5wdXRFbXB0eSxcbiAgICAgICAgKTtcbiAgICAgICAgY29uc3QgY29udGVudDogRHJvcGRvd25Db250ZW50ID0ge1xuICAgICAgICAgIHBpbGxzOiBkZC5waWxscyxcbiAgICAgICAgICBvcHRpb25zLFxuICAgICAgICAgIGFjdGl2ZUluZGV4OiBkZC5hY3RpdmVJbmRleCxcbiAgICAgICAgICBpc0FjdGl2ZVBpbGxTZWxlY3RlZDogZGQuaXNBY3RpdmVQaWxsU2VsZWN0ZWQsXG4gICAgICAgICAgaXNMb2FkaW5nOiBkZC5pc0xvYWRpbmcsXG4gICAgICAgICAgc2hvd3NQaWxscyxcbiAgICAgICAgICBzaG93c1NraXAsXG4gICAgICAgICAgc2tpcERpc2FibGVkOiBkZC5pc0xvYWRpbmcgfHwgQm9vbGVhbihkZC5pblNlbGVjdGlvbkFuaW1hdGlvbiksXG4gICAgICAgICAgYWN0aXZlUGlsbExhYmVsOiBkZC5waWxsc1swXT8udGV4dCA/PyBcIlwiLFxuICAgICAgICAgIHNob3dzT3B0aW9ucyxcbiAgICAgICAgICBzaG93c0RhdGVHcmlkLFxuICAgICAgICAgIGRhdGVWaWV3OiBkZC5kYXRlVmlldyA/PyBudWxsLFxuICAgICAgICAgIHNlbGVjdGVkRGF0ZUlzbzogZGQuc2VsZWN0ZWREYXRlSXNvID8/IG51bGwsXG4gICAgICAgICAgc2hvd3NGYWxsYmFja1NrZWxldG9uLFxuICAgICAgICAgIHByb2R1Y3RzOiBkZC5wcm9kdWN0cyxcbiAgICAgICAgICBncm91cEtleTogYWN0aXZlU3VnZ2VzdGlvbiA/IGAke2FjdGl2ZVN1Z2dlc3Rpb24udHlwZX0gJHthY3RpdmVTdWdnZXN0aW9uLnRleHR9YCA6IFwiXCIsXG4gICAgICAgICAgZm9vdGVyS2V5LFxuICAgICAgICAgIGZvb3RlckhpbnQsXG4gICAgICAgICAgb3B0aW9uc1Bvc2l0aW9uOiBkZC5vcHRpb25zUG9zaXRpb24sXG4gICAgICAgIH07XG4gICAgICAgIGlmIChpc1Zpc2libGUpIHRoaXMubGFzdFZpc2libGVDb250ZW50ID0gY29udGVudDtcbiAgICAgICAgcmV0dXJuIHsgLi4uY29udGVudCwgaXNWaXNpYmxlIH07XG4gICAgICB9KSxcbiAgICApO1xuICB9XG5cbiAgdHJhY2tCeVdpZHRoID0gKF86IG51bWJlciwgdzogbnVtYmVyKTogbnVtYmVyID0+IHc7XG5cbiAgb25QaWxsQ2xpY2soaW5kZXg6IG51bWJlcik6IHZvaWQge1xuICAgIHRoaXMuY29udHJvbGxlci5zZXRBY3RpdmVQaWxsKGluZGV4KTtcbiAgfVxuXG4gIG9uU2tpcCgpOiB2b2lkIHtcbiAgICB0aGlzLmNvbnRyb2xsZXIuc2tpcEFjdGl2ZVBpbGwoKTtcbiAgfVxuXG4gIG9uU2VsZWN0KG9wdGlvbjogU3VnZ2VzdGlvbk9wdGlvbik6IHZvaWQge1xuICAgIHRoaXMuY29udHJvbGxlci5zZWxlY3RPcHRpb24ob3B0aW9uKTtcbiAgfVxuXG4gIG9uUHJldmlvdXNNb250aCgpOiB2b2lkIHtcbiAgICB0aGlzLmNvbnRyb2xsZXIuc2hvd1ByZXZpb3VzTW9udGgoKTtcbiAgfVxuXG4gIG9uTmV4dE1vbnRoKCk6IHZvaWQge1xuICAgIHRoaXMuY29udHJvbGxlci5zaG93TmV4dE1vbnRoKCk7XG4gIH1cblxuICBvbkhpZ2hsaWdodChpbmRleDogbnVtYmVyKTogdm9pZCB7XG4gICAgdGhpcy5jb250cm9sbGVyLnNldEFjdGl2ZURyb3Bkb3duSW5kZXgoaW5kZXgpO1xuICB9XG5cbiAgb25Qcm9kdWN0U2VsZWN0KHByb2R1Y3Q6IFByb2R1Y3QpOiB2b2lkIHtcbiAgICB0aGlzLmNvbnRyb2xsZXIuc2VsZWN0UHJvZHVjdChwcm9kdWN0KTtcbiAgfVxuXG4gIC8qKlxuICAgKiBBIGNhcmQgdGFraW5nIGZvY3VzIGJsdXJzIHRoZSBlZGl0b3IsIHdoaWNoIHdvdWxkIG90aGVyd2lzZSBjbG9zZSB0aGVcbiAgICogcGFuZWwgb3V0IGZyb20gdW5kZXIgdGhlIGNhcmQgdGhlIHVzZXIganVzdCB0YWJiZWQgdG8uXG4gICAqL1xuICBvblByb2R1Y3RGb2N1c0NoYW5nZShmb2N1c2VkOiBib29sZWFuKTogdm9pZCB7XG4gICAgdGhpcy5jb250cm9sbGVyLnNldEZvY3VzZWQoZm9jdXNlZCk7XG4gIH1cblxuICBwcmV2ZW50Qmx1cihldmVudDogRXZlbnQpOiB2b2lkIHtcbiAgICAvLyBQcmV2ZW50IHRoZSBlZGl0b3IgZnJvbSBsb3NpbmcgZm9jdXMgd2hlbiBpbnRlcmFjdGluZyB3aXRoIHRoZSBkcm9wZG93bi5cbiAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICB9XG59XG4iLCI8ZGl2XG4gICpuZ0lmPVwidm0kIHwgYXN5bmMgYXMgdm1cIlxuICBbaWRdPVwiY29udHJvbGxlci5saXN0Ym94SWRcIlxuICByb2xlPVwibGlzdGJveFwiXG4gIGRhdGEtYWlhLWRyb3Bkb3duPVwiXCJcbiAgW2F0dHIuZGF0YS1haWEtbG9hZGluZ109XCJ2bS5pc0xvYWRpbmcgPyAnJyA6IG51bGxcIlxuICBbYXR0ci5kYXRhLW1vZGVdPVwicmVzb2x2ZWRNb2RlXCJcbiAgW2F0dHIuZGF0YS1vcHRpb25zLXBvc2l0aW9uXT1cInZtLm9wdGlvbnNQb3NpdGlvblwiXG4gIFthdHRyLmRhdGEtYWlhLWhhcy1wcm9kdWN0c109XCJ2bS5wcm9kdWN0cy5sZW5ndGggPiAwID8gJycgOiBudWxsXCJcbiAgW2NsYXNzXT1cInJvb3RDbGFzc1wiXG4gIFtjbGFzcy5tYWdpY3gtYWlhLWRyb3Bkb3duLXZpc2libGVdPVwidm0uaXNWaXNpYmxlXCJcbiAgKG1vdXNlZG93bik9XCJwcmV2ZW50Qmx1cigkZXZlbnQpXCJcbj5cbiAgPGFpYS1zdGFjayBzcGFjZT1cIjhweFwiPlxuICAgIDxhaWEtY2x1c3RlclxuICAgICAgKm5nSWY9XCJ2bS5zaG93c1BpbGxzIHx8IHZtLnNob3dzU2tpcFwiXG4gICAgICBjbGFzcz1cIm1hZ2ljeC1haWEtZHJvcGRvd24tcGlsbGJhclwiXG4gICAgICBkYXRhLWFpYS1waWxsYmFyPVwiXCJcbiAgICAgIFtub1dyYXBdPVwidHJ1ZVwiXG4gICAgPlxuICAgICAgPCEtLSBUaGUgc2Nyb2xsICsgcmlnaHQtZWRnZSBmYWRlIGxpdmUgb24gdGhpcyB3cmFwcGVyIChub3QgdGhlIGJhcikgc29cbiAgICAgICAgICAgdGhlIHNraXAgYnV0dG9uIHN0YXlzIG91dHNpZGUgdGhlIG1hc2tlZCByZWdpb24g4oCUIHBpbm5lZCBhbmQgZnVsbHlcbiAgICAgICAgICAgb3BhcXVlIHdoaWxlIG92ZXJmbG93aW5nIHBpbGxzIGZhZGUgdW5kZXIgaXQuIEFic2VudCBpbiBhIHNraXAtb25seVxuICAgICAgICAgICByb3cgKHBpbGxzIHJlbmRlcmVkIGVsc2V3aGVyZSB2aWEgcGlsbFBsYWNlbWVudCBpbmxpbmUvaGlkZGVuKS4gLS0+XG4gICAgICA8c3BhbiAqbmdJZj1cInZtLnNob3dzUGlsbHNcIiBjbGFzcz1cIm1hZ2ljeC1haWEtcGlsbC1zY3JvbGxcIiBkYXRhLWFpYS1waWxsLXNjcm9sbD1cIlwiPlxuICAgICAgICA8YWlhLXBpbGwtbGlzdFxuICAgICAgICAgIFtwaWxsc109XCJ2bS5waWxsc1wiXG4gICAgICAgICAgW2FjdGl2ZVBpbGxJbmRleF09XCIwXCJcbiAgICAgICAgICBbYWN0aXZlU2VsZWN0ZWRdPVwidm0uaXNBY3RpdmVQaWxsU2VsZWN0ZWRcIlxuICAgICAgICAgIFtyb3VuZGVkXT1cInRydWVcIlxuICAgICAgICAgIFtsb2FkaW5nXT1cInZtLmlzTG9hZGluZ1wiXG4gICAgICAgICAgKHNlbGVjdFBpbGwpPVwib25QaWxsQ2xpY2soJGV2ZW50KVwiXG4gICAgICAgID48L2FpYS1waWxsLWxpc3Q+XG4gICAgICA8L3NwYW4+XG4gICAgICA8YnV0dG9uXG4gICAgICAgICpuZ0lmPVwidm0uc2hvd3NTa2lwXCJcbiAgICAgICAgdHlwZT1cImJ1dHRvblwiXG4gICAgICAgIHRhYmluZGV4PVwiLTFcIlxuICAgICAgICBjbGFzcz1cIm1hZ2ljeC1haWEtc2tpcFwiXG4gICAgICAgIGRhdGEtYWlhLXNraXA9XCJcIlxuICAgICAgICBbZGlzYWJsZWRdPVwidm0uc2tpcERpc2FibGVkXCJcbiAgICAgICAgW2F0dHIuYXJpYS1sYWJlbF09XCJ2bS5hY3RpdmVQaWxsTGFiZWwgPyAnU2tpcCAnICsgdm0uYWN0aXZlUGlsbExhYmVsIDogJ1NraXAnXCJcbiAgICAgICAgKGNsaWNrKT1cIm9uU2tpcCgpXCJcbiAgICAgID5cbiAgICAgICAgc2tpcFxuICAgICAgPC9idXR0b24+XG4gICAgPC9haWEtY2x1c3Rlcj5cblxuICAgIDxhaWEtc3VnZ2VzdGlvbi1ncmlkXG4gICAgICAqbmdJZj1cInZtLnNob3dzT3B0aW9uc1wiXG4gICAgICBbb3B0aW9uc109XCJ2bS5vcHRpb25zXCJcbiAgICAgIFthY3RpdmVJbmRleF09XCJ2bS5hY3RpdmVJbmRleFwiXG4gICAgICBbbGlzdGJveElkXT1cImNvbnRyb2xsZXIubGlzdGJveElkXCJcbiAgICAgIFtsb2FkaW5nXT1cInZtLmlzTG9hZGluZ1wiXG4gICAgICBbZ3JvdXBLZXldPVwidm0uZ3JvdXBLZXlcIlxuICAgICAgKHNlbGVjdCk9XCJvblNlbGVjdCgkZXZlbnQpXCJcbiAgICAgIChoaWdobGlnaHQpPVwib25IaWdobGlnaHQoJGV2ZW50KVwiXG4gICAgPjwvYWlhLXN1Z2dlc3Rpb24tZ3JpZD5cblxuICAgIDxhaWEtZGF0ZS1ncmlkXG4gICAgICAqbmdJZj1cInZtLnNob3dzRGF0ZUdyaWRcIlxuICAgICAgW29wdGlvbnNdPVwidm0ub3B0aW9uc1wiXG4gICAgICBbYWN0aXZlSW5kZXhdPVwidm0uYWN0aXZlSW5kZXhcIlxuICAgICAgW2xpc3Rib3hJZF09XCJjb250cm9sbGVyLmxpc3Rib3hJZFwiXG4gICAgICBbdmlld109XCJ2bS5kYXRlVmlld1wiXG4gICAgICBbc2VsZWN0ZWRJc29dPVwidm0uc2VsZWN0ZWREYXRlSXNvXCJcbiAgICAgIChzZWxlY3QpPVwib25TZWxlY3QoJGV2ZW50KVwiXG4gICAgICAoaGlnaGxpZ2h0KT1cIm9uSGlnaGxpZ2h0KCRldmVudClcIlxuICAgICAgKHByZXZpb3VzTW9udGgpPVwib25QcmV2aW91c01vbnRoKClcIlxuICAgICAgKG5leHRNb250aCk9XCJvbk5leHRNb250aCgpXCJcbiAgICA+PC9haWEtZGF0ZS1ncmlkPlxuXG4gICAgPGRpdlxuICAgICAgKm5nSWY9XCJ2bS5zaG93c0ZhbGxiYWNrU2tlbGV0b25cIlxuICAgICAgY2xhc3M9XCJtYWdpY3gtYWlhLWRyb3Bkb3duLXNrZWxldG9uLWJhcnNcIlxuICAgICAgZGF0YS1haWEtc2tlbGV0b24tYmFycz1cIlwiXG4gICAgPlxuICAgICAgPHNwYW5cbiAgICAgICAgKm5nRm9yPVwibGV0IHcgb2YgZmFsbGJhY2tTa2VsZXRvbkJhcldpZHRoczsgdHJhY2tCeTogdHJhY2tCeVdpZHRoXCJcbiAgICAgICAgY2xhc3M9XCJtYWdpY3gtYWlhLWRyb3Bkb3duLXNrZWxldG9uLWJhclwiXG4gICAgICAgIFtzdHlsZS53aWR0aC5weF09XCJ3XCJcbiAgICAgID48L3NwYW4+XG4gICAgPC9kaXY+XG5cbiAgICA8IS0tICpuZ0lmLCBub3QganVzdCB0aGUgc2VjdGlvbidzIG93biBndWFyZCBpbnNpZGUgdGhlIGNvbXBvbmVudDogdGhlIGhvc3RcbiAgICAgICAgIGVsZW1lbnQgaXMgYW4gaW4tZmxvdyBjaGlsZCBvZiAuYWlhLXN0YWNrIChkaXNwbGF5OmZsZXg7IGdhcDo4cHgpLCBzb1xuICAgICAgICAgYW4gYWx3YXlzLWluc3RhbnRpYXRlZCB6ZXJvLWhlaWdodCBob3N0IHdvdWxkIGFkZCBhIFNFQ09ORCA4cHggZ2FwXG4gICAgICAgICBiZXR3ZWVuIHRoZSBncmlkIGFuZCB0aGUgZm9vdGVyIOKAlCBpbiBldmVyeSBkcm9wZG93biwgcHJvZHVjdHMgb3Igbm90LlxuICAgICAgICAgVGhlIGdyaWQncyAtLWFpYS1ncmlkLW92ZXJsYXAtYm90dG9tIGlzIHR1bmVkIGZvciBleGFjdGx5IG9uZSBnYXAsIHNvXG4gICAgICAgICB0aGUgZm9vdGVyIHdvdWxkIGxhbmQgOHB4IGJlbG93IHRoZSBiYW5kIGl0IGlzIG1lYW50IHRvIGNvdmVyLiAtLT5cbiAgICA8YWlhLXByb2R1Y3Qtc3RyaXBcbiAgICAgICpuZ0lmPVwidm0ucHJvZHVjdHMubGVuZ3RoID4gMFwiXG4gICAgICBbcHJvZHVjdHNdPVwidm0ucHJvZHVjdHNcIlxuICAgICAgW2xpc3Rib3hJZF09XCJjb250cm9sbGVyLmxpc3Rib3hJZFwiXG4gICAgICBbZm9jdXNhYmxlXT1cInZtLmlzVmlzaWJsZVwiXG4gICAgICAoc2VsZWN0KT1cIm9uUHJvZHVjdFNlbGVjdCgkZXZlbnQpXCJcbiAgICAgIChmb2N1c0NoYW5nZSk9XCJvblByb2R1Y3RGb2N1c0NoYW5nZSgkZXZlbnQpXCJcbiAgICA+PC9haWEtcHJvZHVjdC1zdHJpcD5cblxuICAgIDxmb290ZXIgY2xhc3M9XCJtYWdpY3gtYWlhLWZvb3RlclwiIGRhdGEtYWlhLWZvb3Rlcj1cIlwiPlxuICAgICAgPGRpdiBjbGFzcz1cIm1hZ2ljeC1haWEtZm9vdGVyLXJvd1wiPlxuICAgICAgICA8c3BhbiBjbGFzcz1cIm1hZ2ljeC1haWEtZm9vdGVyLWhpbnQtZ3JvdXBcIj5cbiAgICAgICAgICA8a2JkIGNsYXNzPVwibWFnaWN4LWFpYS1mb290ZXIta2V5XCI+e3sgdm0uZm9vdGVyS2V5IH19PC9rYmQ+XG4gICAgICAgICAgPHNwYW4gY2xhc3M9XCJtYWdpY3gtYWlhLWZvb3Rlci1oaW50XCI+e3sgdm0uZm9vdGVySGludCB9fTwvc3Bhbj5cbiAgICAgICAgPC9zcGFuPlxuICAgICAgICA8YVxuICAgICAgICAgIGNsYXNzPVwibWFnaWN4LWFpYS1mb290ZXItYnJhbmQtbGlua1wiXG4gICAgICAgICAgW2hyZWZdPVwiYnJhbmRIcmVmXCJcbiAgICAgICAgICB0YXJnZXQ9XCJfYmxhbmtcIlxuICAgICAgICAgIHJlbD1cIm5vb3BlbmVyIG5vcmVmZXJyZXJcIlxuICAgICAgICA+XG4gICAgICAgICAgPHNwYW4gY2xhc3M9XCJtYWdpY3gtYWlhLWZvb3Rlci1icmFuZFwiPkFJPC9zcGFuPlxuICAgICAgICAgIDxzcGFuIGNsYXNzPVwibWFnaWN4LWFpYS1mb290ZXItYmFkZ2VcIj5BdXRvY29tcGxldGU8L3NwYW4+XG4gICAgICAgIDwvYT5cbiAgICAgIDwvZGl2PlxuICAgIDwvZm9vdGVyPlxuICA8L2FpYS1zdGFjaz5cbjwvZGl2PlxuIl19
|