@almatar/smart-booking-dashboard 0.0.2-alpha.6 → 0.0.2-alpha.8

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.
Files changed (36) hide show
  1. package/esm2022/lib/components/booking-input/booking-input.component.mjs +16 -4
  2. package/esm2022/lib/components/flight-itinerary-card/flight-itinerary-card.component.mjs +3 -3
  3. package/esm2022/lib/components/hotel-cancel/components/almatar-hotel-auto-cancellation-result-overlay/almatar-hotel-auto-cancellation-result-overlay.component.mjs +16 -19
  4. package/esm2022/lib/components/hotel-cancel/components/almatar-hotel-auto-cancellation-select-rooms/almatar-hotel-auto-cancellation-select-rooms.component.mjs +3 -3
  5. package/esm2022/lib/components/hotel-cancel/components/almatar-hotel-auto-cancellation-select-rooms/components/almatar-hotel-auto-cancellation-non-refundable-room/almatar-hotel-auto-cancellation-non-refundable-room.component.mjs +4 -3
  6. package/esm2022/lib/components/reissue-dialog/reissue-dialog.component.mjs +3 -3
  7. package/esm2022/lib/components/reissue-dialog/steps/reissue-date-step/reissue-date-step.component.mjs +2 -2
  8. package/esm2022/lib/components/reissue-dialog/steps/reissue-legs-step/reissue-legs-step.component.mjs +3 -3
  9. package/esm2022/lib/components/reissue-dialog/steps/reissue-notice/reissue-notice.component.mjs +2 -2
  10. package/esm2022/lib/components/reissue-dialog/steps/reissue-route-step/reissue-route-step.component.mjs +3 -3
  11. package/esm2022/lib/components/reissue-dialog/steps/reissue-service-step/reissue-service-step.component.mjs +2 -2
  12. package/esm2022/lib/components/reissue-dialog/steps/reissue-upgrade-confirm-step/reissue-upgrade-confirm-step.component.mjs +3 -3
  13. package/esm2022/lib/components/reissue-dialog/steps/reissue-upgrade-step/reissue-upgrade-step.component.mjs +3 -5
  14. package/esm2022/lib/config/dashboard.config.mjs +6 -1
  15. package/esm2022/lib/pages/smart-booking-dashboard/smart-booking-dashboard.component.mjs +8 -3
  16. package/esm2022/lib/services/booking.service.mjs +3 -3
  17. package/esm2022/lib/services/brand.service.mjs +29 -0
  18. package/esm2022/lib/services/reissue.service.mjs +3 -3
  19. package/esm2022/lib/shared/services/api.service.mjs +3 -3
  20. package/esm2022/lib/shared/services/sbd-http.mjs +27 -0
  21. package/esm2022/public-api.mjs +2 -1
  22. package/fesm2022/almatar-smart-booking-dashboard.mjs +117 -51
  23. package/fesm2022/almatar-smart-booking-dashboard.mjs.map +1 -1
  24. package/lib/components/action-dialog/action-dialog.component.d.ts +1 -1
  25. package/lib/components/booking-input/booking-input.component.d.ts +7 -1
  26. package/lib/components/cancel-dialog/cancel-dialog.component.d.ts +4 -4
  27. package/lib/components/hotel-cancel/almatar-hotel-auto-cancellation.component.d.ts +1 -1
  28. package/lib/components/hotel-cancel/components/hotel-content/hotel-content.component.d.ts +1 -1
  29. package/lib/components/reissue-dialog/steps/reissue-notice/reissue-notice.component.d.ts +1 -1
  30. package/lib/components/result-panel/result-panel.component.d.ts +1 -1
  31. package/lib/config/dashboard.config.d.ts +12 -0
  32. package/lib/pages/smart-booking-dashboard/smart-booking-dashboard.component.d.ts +3 -1
  33. package/lib/services/brand.service.d.ts +14 -0
  34. package/lib/shared/services/sbd-http.d.ts +8 -0
  35. package/package.json +1 -1
  36. package/public-api.d.ts +2 -1
@@ -1,9 +1,10 @@
1
- import { Component, input, output, model } from '@angular/core';
1
+ import { Component, inject, input, output, model } from '@angular/core';
2
2
  import { FormsModule } from '@angular/forms';
3
3
  import { SelectButtonModule } from 'primeng/selectbutton';
4
4
  import { InputTextModule } from 'primeng/inputtext';
5
5
  import { ButtonModule } from 'primeng/button';
6
6
  import { TooltipModule } from 'primeng/tooltip';
7
+ import { SbdBrandService } from '../../services/brand.service';
7
8
  import * as i0 from "@angular/core";
8
9
  import * as i1 from "@angular/forms";
9
10
  import * as i2 from "primeng/selectbutton";
@@ -16,6 +17,11 @@ export class SbdBookingInputComponent {
16
17
  this.product = model('flight');
17
18
  this.bookingId = model('');
18
19
  this.lookup = output();
20
+ /** The agent picked another brand: the booking on screen belongs to the previous one. */
21
+ this.brandChanged = output();
22
+ this.brandService = inject(SbdBrandService);
23
+ this.brands = this.brandService.brands;
24
+ this.brand = this.brandService.brand;
19
25
  this.productOptions = [
20
26
  { label: '✈ Flight', value: 'flight' },
21
27
  { label: '🏨 Hotel', value: 'hotel' },
@@ -25,6 +31,12 @@ export class SbdBookingInputComponent {
25
31
  { label: 'Demo Hotel: ALM-HTL-9921', value: 'ALM-HTL-9921' },
26
32
  ];
27
33
  }
34
+ onBrand(value) {
35
+ if (value === this.brand())
36
+ return;
37
+ this.brandService.setBrand(value);
38
+ this.brandChanged.emit(value);
39
+ }
28
40
  fillDemo(id) {
29
41
  const product = id.includes('HTL') ? 'hotel' : 'flight';
30
42
  this.product.set(product);
@@ -35,10 +47,10 @@ export class SbdBookingInputComponent {
35
47
  this.lookup.emit();
36
48
  }
37
49
  static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: SbdBookingInputComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
38
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.1.0", version: "18.2.14", type: SbdBookingInputComponent, isStandalone: true, selector: "app-sbd-booking-input", inputs: { loading: { classPropertyName: "loading", publicName: "loading", isSignal: true, isRequired: false, transformFunction: null }, product: { classPropertyName: "product", publicName: "product", isSignal: true, isRequired: false, transformFunction: null }, bookingId: { classPropertyName: "bookingId", publicName: "bookingId", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { product: "productChange", bookingId: "bookingIdChange", lookup: "lookup" }, ngImport: i0, template: "<div class=\"sbd-booking-input\">\n <p-selectButton\n [(ngModel)]=\"product\"\n [options]=\"productOptions\"\n optionLabel=\"label\"\n optionValue=\"value\"\n optionDisabled=\"disabled\">\n <ng-template pTemplate=\"item\" let-item>\n <span\n [pTooltip]=\"item.disabled ? 'Coming soon' : null\"\n tooltipPosition=\"bottom\"\n style=\"pointer-events: auto; display: inline-block;\">\n {{ item.label }}\n </span>\n </ng-template>\n </p-selectButton>\n <div class=\"sbd-booking-input__row\">\n <div class=\"sbd-booking-input__field-wrap\">\n <i class=\"pi pi-search sbd-booking-input__icon\"></i>\n <input pInputText class=\"sbd-booking-input__field\" placeholder=\"Enter Booking ID\"\n [(ngModel)]=\"bookingId\" (keydown)=\"onKeydown($event)\" autocomplete=\"off\" spellcheck=\"false\" />\n </div>\n <button pButton label=\"Lookup \u2192\" [disabled]=\"!bookingId().trim()\" (click)=\"lookup.emit()\" class=\"sbd-booking-input__btn\"></button>\n </div>\n</div>\n", styles: [".sbd-booking-input{background:#fff;border-radius:12px;border:1px solid #e2e8f0;padding:20px;display:flex;flex-direction:column;gap:14px}.sbd-booking-input__row{display:flex;gap:10px;align-items:center}.sbd-booking-input__field-wrap{flex:1;position:relative;display:flex;align-items:center}.sbd-booking-input__icon{position:absolute;left:12px;color:#94a3b8;font-size:14px;pointer-events:none;z-index:1}.sbd-booking-input__field{width:100%!important;padding-left:36px!important;height:44px;font-size:14px!important}.sbd-booking-input__field:enabled:focus{border-color:var(--sbd-primary, #007ad9);box-shadow:0 0 0 .2em color-mix(in srgb,var(--sbd-primary, #007ad9) 45%,#fff)}.sbd-booking-input__btn{height:44px;white-space:nowrap;background:var(--sbd-primary, #007ad9);border-color:var(--sbd-primary, #007ad9)}.sbd-booking-input__btn:enabled:hover{background:color-mix(in srgb,var(--sbd-primary, #007ad9) 88%,#000);border-color:color-mix(in srgb,var(--sbd-primary, #007ad9) 88%,#000)}.sbd-booking-input__btn:enabled:focus{box-shadow:0 0 0 .2em color-mix(in srgb,var(--sbd-primary, #007ad9) 45%,#fff)}.sbd-booking-input__demos{display:flex;align-items:center;gap:8px;flex-wrap:wrap}.sbd-booking-input__demos-label{font-size:11.5px;color:#94a3b8}.sbd-booking-input__chip{padding:4px 10px;border-radius:20px;border:1px solid #e2e8f0;background:#f8fafc;color:#1e2e4a;font-size:11.5px;font-weight:500;cursor:pointer;transition:border-color .15s,background .15s}.sbd-booking-input__chip:hover{border-color:var(--sbd-primary, #3b82f6);background:var(--sbd-primary-soft, #eff6ff);color:var(--sbd-primary, #3b82f6)}:host ::ng-deep .p-selectbutton .p-button.p-highlight{background:var(--sbd-primary, #007ad9);border-color:var(--sbd-primary, #007ad9)}:host ::ng-deep .p-selectbutton .p-button.p-highlight:hover{background:color-mix(in srgb,var(--sbd-primary, #007ad9) 88%,#000);border-color:color-mix(in srgb,var(--sbd-primary, #007ad9) 88%,#000)}:host ::ng-deep .p-selectbutton .p-button.p-highlight:focus{box-shadow:0 0 0 .2em color-mix(in srgb,var(--sbd-primary, #007ad9) 45%,#fff)}\n"], dependencies: [{ kind: "ngmodule", type: FormsModule }, { kind: "directive", type: i1.DefaultValueAccessor, selector: "input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]" }, { kind: "directive", type: i1.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i1.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "ngmodule", type: SelectButtonModule }, { kind: "component", type: i2.SelectButton, selector: "p-selectButton", inputs: ["options", "optionLabel", "optionValue", "optionDisabled", "tabindex", "multiple", "style", "styleClass", "ariaLabelledBy", "disabled", "dataKey"], outputs: ["onOptionClick", "onChange"] }, { kind: "ngmodule", type: InputTextModule }, { kind: "directive", type: i3.InputText, selector: "[pInputText]" }, { kind: "ngmodule", type: ButtonModule }, { kind: "directive", type: i4.ButtonDirective, selector: "[pButton]", inputs: ["iconPos", "loadingIcon", "label", "icon", "loading"] }, { kind: "ngmodule", type: TooltipModule }, { kind: "directive", type: i5.Tooltip, selector: "[pTooltip]", inputs: ["tooltipPosition", "tooltipEvent", "appendTo", "positionStyle", "tooltipStyleClass", "tooltipZIndex", "escape", "showDelay", "hideDelay", "life", "positionTop", "positionLeft", "fitContent", "pTooltip", "tooltipDisabled", "tooltipOptions"] }] }); }
50
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "18.2.14", type: SbdBookingInputComponent, isStandalone: true, selector: "app-sbd-booking-input", inputs: { loading: { classPropertyName: "loading", publicName: "loading", isSignal: true, isRequired: false, transformFunction: null }, product: { classPropertyName: "product", publicName: "product", isSignal: true, isRequired: false, transformFunction: null }, bookingId: { classPropertyName: "bookingId", publicName: "bookingId", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { product: "productChange", bookingId: "bookingIdChange", lookup: "lookup", brandChanged: "brandChanged" }, ngImport: i0, template: "<div class=\"sbd-booking-input\">\n <div class=\"sbd-booking-input__top\">\n <p-selectButton\n [(ngModel)]=\"product\"\n [options]=\"productOptions\"\n optionLabel=\"label\"\n optionValue=\"value\"\n optionDisabled=\"disabled\">\n <ng-template pTemplate=\"item\" let-item>\n <span\n [pTooltip]=\"item.disabled ? 'Coming soon' : null\"\n tooltipPosition=\"bottom\"\n style=\"pointer-events: auto; display: inline-block;\">\n {{ item.label }}\n </span>\n </ng-template>\n </p-selectButton>\n </div>\n <div class=\"sbd-booking-input__row\">\n <div class=\"sbd-booking-input__field-wrap\">\n <i class=\"pi pi-search sbd-booking-input__icon\"></i>\n <input pInputText class=\"sbd-booking-input__field\" placeholder=\"Enter Booking ID\"\n [(ngModel)]=\"bookingId\" (keydown)=\"onKeydown($event)\" autocomplete=\"off\" spellcheck=\"false\" />\n </div>\n <!-- Brand: one radio per configured brand, between the Booking ID field and the Lookup button. -->\n <div class=\"sbd-booking-input__brands\" role=\"radiogroup\" aria-label=\"Brand\">\n @for (b of brands; track b.value) {\n <label class=\"sbd-booking-input__brand-option\">\n <input type=\"radio\" name=\"sbd-brand\" [value]=\"b.value\" [checked]=\"brand() === b.value\"\n (change)=\"onBrand(b.value)\" />\n <span>{{ b.label }}</span>\n </label>\n }\n </div>\n <button pButton label=\"Lookup \u2192\" [disabled]=\"!bookingId().trim()\" (click)=\"lookup.emit()\" class=\"sbd-booking-input__btn\"></button>\n </div>\n</div>\n", styles: [".sbd-booking-input{background:#fff;border-radius:12px;border:1px solid #e2e8f0;padding:20px;display:flex;flex-direction:column;gap:14px}.sbd-booking-input__top{display:flex;align-items:center;justify-content:space-between;gap:12px;flex-wrap:wrap}.sbd-booking-input__brands{display:flex;flex-direction:column;align-items:flex-start;gap:6px;flex-shrink:0}.sbd-booking-input__brand-option{display:inline-flex;align-items:center;gap:6px;margin:0;cursor:pointer;font-size:13.5px;font-weight:500;color:#1e2e4a}.sbd-booking-input__brand-option input{accent-color:var(--sbd-primary, #007ad9);width:16px;height:16px;margin:0;cursor:pointer}.sbd-booking-input__row{display:flex;gap:10px;align-items:center;flex-wrap:wrap}.sbd-booking-input__field-wrap{flex:1 1 220px;position:relative;display:flex;align-items:center}.sbd-booking-input__icon{position:absolute;left:12px;color:#94a3b8;font-size:14px;pointer-events:none;z-index:1}.sbd-booking-input__field{width:100%!important;padding-left:36px!important;height:44px;font-size:14px!important}.sbd-booking-input__field:enabled:focus{border-color:var(--sbd-primary, #007ad9);box-shadow:0 0 0 .2em color-mix(in srgb,var(--sbd-primary, #007ad9) 45%,#fff)}.sbd-booking-input__btn{height:44px;white-space:nowrap;background:var(--sbd-primary, #007ad9);border-color:var(--sbd-primary, #007ad9)}.sbd-booking-input__btn:enabled:hover{background:color-mix(in srgb,var(--sbd-primary, #007ad9) 88%,#000);border-color:color-mix(in srgb,var(--sbd-primary, #007ad9) 88%,#000)}.sbd-booking-input__btn:enabled:focus{box-shadow:0 0 0 .2em color-mix(in srgb,var(--sbd-primary, #007ad9) 45%,#fff)}.sbd-booking-input__demos{display:flex;align-items:center;gap:8px;flex-wrap:wrap}.sbd-booking-input__demos-label{font-size:11.5px;color:#94a3b8}.sbd-booking-input__chip{padding:4px 10px;border-radius:20px;border:1px solid #e2e8f0;background:#f8fafc;color:#1e2e4a;font-size:11.5px;font-weight:500;cursor:pointer;transition:border-color .15s,background .15s}.sbd-booking-input__chip:hover{border-color:var(--sbd-primary, #3b82f6);background:var(--sbd-primary-soft, #eff6ff);color:var(--sbd-primary, #3b82f6)}:host ::ng-deep .p-selectbutton .p-button.p-highlight{background:var(--sbd-primary, #007ad9);border-color:var(--sbd-primary, #007ad9)}:host ::ng-deep .p-selectbutton .p-button.p-highlight:hover{background:color-mix(in srgb,var(--sbd-primary, #007ad9) 88%,#000);border-color:color-mix(in srgb,var(--sbd-primary, #007ad9) 88%,#000)}:host ::ng-deep .p-selectbutton .p-button.p-highlight:focus{box-shadow:0 0 0 .2em color-mix(in srgb,var(--sbd-primary, #007ad9) 45%,#fff)}\n"], dependencies: [{ kind: "ngmodule", type: FormsModule }, { kind: "directive", type: i1.DefaultValueAccessor, selector: "input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]" }, { kind: "directive", type: i1.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i1.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "ngmodule", type: SelectButtonModule }, { kind: "component", type: i2.SelectButton, selector: "p-selectButton", inputs: ["options", "optionLabel", "optionValue", "optionDisabled", "tabindex", "multiple", "style", "styleClass", "ariaLabelledBy", "disabled", "dataKey"], outputs: ["onOptionClick", "onChange"] }, { kind: "ngmodule", type: InputTextModule }, { kind: "directive", type: i3.InputText, selector: "[pInputText]" }, { kind: "ngmodule", type: ButtonModule }, { kind: "directive", type: i4.ButtonDirective, selector: "[pButton]", inputs: ["iconPos", "loadingIcon", "label", "icon", "loading"] }, { kind: "ngmodule", type: TooltipModule }, { kind: "directive", type: i5.Tooltip, selector: "[pTooltip]", inputs: ["tooltipPosition", "tooltipEvent", "appendTo", "positionStyle", "tooltipStyleClass", "tooltipZIndex", "escape", "showDelay", "hideDelay", "life", "positionTop", "positionLeft", "fitContent", "pTooltip", "tooltipDisabled", "tooltipOptions"] }] }); }
39
51
  }
40
52
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: SbdBookingInputComponent, decorators: [{
41
53
  type: Component,
42
- args: [{ selector: 'app-sbd-booking-input', standalone: true, imports: [FormsModule, SelectButtonModule, InputTextModule, ButtonModule, TooltipModule], template: "<div class=\"sbd-booking-input\">\n <p-selectButton\n [(ngModel)]=\"product\"\n [options]=\"productOptions\"\n optionLabel=\"label\"\n optionValue=\"value\"\n optionDisabled=\"disabled\">\n <ng-template pTemplate=\"item\" let-item>\n <span\n [pTooltip]=\"item.disabled ? 'Coming soon' : null\"\n tooltipPosition=\"bottom\"\n style=\"pointer-events: auto; display: inline-block;\">\n {{ item.label }}\n </span>\n </ng-template>\n </p-selectButton>\n <div class=\"sbd-booking-input__row\">\n <div class=\"sbd-booking-input__field-wrap\">\n <i class=\"pi pi-search sbd-booking-input__icon\"></i>\n <input pInputText class=\"sbd-booking-input__field\" placeholder=\"Enter Booking ID\"\n [(ngModel)]=\"bookingId\" (keydown)=\"onKeydown($event)\" autocomplete=\"off\" spellcheck=\"false\" />\n </div>\n <button pButton label=\"Lookup \u2192\" [disabled]=\"!bookingId().trim()\" (click)=\"lookup.emit()\" class=\"sbd-booking-input__btn\"></button>\n </div>\n</div>\n", styles: [".sbd-booking-input{background:#fff;border-radius:12px;border:1px solid #e2e8f0;padding:20px;display:flex;flex-direction:column;gap:14px}.sbd-booking-input__row{display:flex;gap:10px;align-items:center}.sbd-booking-input__field-wrap{flex:1;position:relative;display:flex;align-items:center}.sbd-booking-input__icon{position:absolute;left:12px;color:#94a3b8;font-size:14px;pointer-events:none;z-index:1}.sbd-booking-input__field{width:100%!important;padding-left:36px!important;height:44px;font-size:14px!important}.sbd-booking-input__field:enabled:focus{border-color:var(--sbd-primary, #007ad9);box-shadow:0 0 0 .2em color-mix(in srgb,var(--sbd-primary, #007ad9) 45%,#fff)}.sbd-booking-input__btn{height:44px;white-space:nowrap;background:var(--sbd-primary, #007ad9);border-color:var(--sbd-primary, #007ad9)}.sbd-booking-input__btn:enabled:hover{background:color-mix(in srgb,var(--sbd-primary, #007ad9) 88%,#000);border-color:color-mix(in srgb,var(--sbd-primary, #007ad9) 88%,#000)}.sbd-booking-input__btn:enabled:focus{box-shadow:0 0 0 .2em color-mix(in srgb,var(--sbd-primary, #007ad9) 45%,#fff)}.sbd-booking-input__demos{display:flex;align-items:center;gap:8px;flex-wrap:wrap}.sbd-booking-input__demos-label{font-size:11.5px;color:#94a3b8}.sbd-booking-input__chip{padding:4px 10px;border-radius:20px;border:1px solid #e2e8f0;background:#f8fafc;color:#1e2e4a;font-size:11.5px;font-weight:500;cursor:pointer;transition:border-color .15s,background .15s}.sbd-booking-input__chip:hover{border-color:var(--sbd-primary, #3b82f6);background:var(--sbd-primary-soft, #eff6ff);color:var(--sbd-primary, #3b82f6)}:host ::ng-deep .p-selectbutton .p-button.p-highlight{background:var(--sbd-primary, #007ad9);border-color:var(--sbd-primary, #007ad9)}:host ::ng-deep .p-selectbutton .p-button.p-highlight:hover{background:color-mix(in srgb,var(--sbd-primary, #007ad9) 88%,#000);border-color:color-mix(in srgb,var(--sbd-primary, #007ad9) 88%,#000)}:host ::ng-deep .p-selectbutton .p-button.p-highlight:focus{box-shadow:0 0 0 .2em color-mix(in srgb,var(--sbd-primary, #007ad9) 45%,#fff)}\n"] }]
54
+ args: [{ selector: 'app-sbd-booking-input', standalone: true, imports: [FormsModule, SelectButtonModule, InputTextModule, ButtonModule, TooltipModule], template: "<div class=\"sbd-booking-input\">\n <div class=\"sbd-booking-input__top\">\n <p-selectButton\n [(ngModel)]=\"product\"\n [options]=\"productOptions\"\n optionLabel=\"label\"\n optionValue=\"value\"\n optionDisabled=\"disabled\">\n <ng-template pTemplate=\"item\" let-item>\n <span\n [pTooltip]=\"item.disabled ? 'Coming soon' : null\"\n tooltipPosition=\"bottom\"\n style=\"pointer-events: auto; display: inline-block;\">\n {{ item.label }}\n </span>\n </ng-template>\n </p-selectButton>\n </div>\n <div class=\"sbd-booking-input__row\">\n <div class=\"sbd-booking-input__field-wrap\">\n <i class=\"pi pi-search sbd-booking-input__icon\"></i>\n <input pInputText class=\"sbd-booking-input__field\" placeholder=\"Enter Booking ID\"\n [(ngModel)]=\"bookingId\" (keydown)=\"onKeydown($event)\" autocomplete=\"off\" spellcheck=\"false\" />\n </div>\n <!-- Brand: one radio per configured brand, between the Booking ID field and the Lookup button. -->\n <div class=\"sbd-booking-input__brands\" role=\"radiogroup\" aria-label=\"Brand\">\n @for (b of brands; track b.value) {\n <label class=\"sbd-booking-input__brand-option\">\n <input type=\"radio\" name=\"sbd-brand\" [value]=\"b.value\" [checked]=\"brand() === b.value\"\n (change)=\"onBrand(b.value)\" />\n <span>{{ b.label }}</span>\n </label>\n }\n </div>\n <button pButton label=\"Lookup \u2192\" [disabled]=\"!bookingId().trim()\" (click)=\"lookup.emit()\" class=\"sbd-booking-input__btn\"></button>\n </div>\n</div>\n", styles: [".sbd-booking-input{background:#fff;border-radius:12px;border:1px solid #e2e8f0;padding:20px;display:flex;flex-direction:column;gap:14px}.sbd-booking-input__top{display:flex;align-items:center;justify-content:space-between;gap:12px;flex-wrap:wrap}.sbd-booking-input__brands{display:flex;flex-direction:column;align-items:flex-start;gap:6px;flex-shrink:0}.sbd-booking-input__brand-option{display:inline-flex;align-items:center;gap:6px;margin:0;cursor:pointer;font-size:13.5px;font-weight:500;color:#1e2e4a}.sbd-booking-input__brand-option input{accent-color:var(--sbd-primary, #007ad9);width:16px;height:16px;margin:0;cursor:pointer}.sbd-booking-input__row{display:flex;gap:10px;align-items:center;flex-wrap:wrap}.sbd-booking-input__field-wrap{flex:1 1 220px;position:relative;display:flex;align-items:center}.sbd-booking-input__icon{position:absolute;left:12px;color:#94a3b8;font-size:14px;pointer-events:none;z-index:1}.sbd-booking-input__field{width:100%!important;padding-left:36px!important;height:44px;font-size:14px!important}.sbd-booking-input__field:enabled:focus{border-color:var(--sbd-primary, #007ad9);box-shadow:0 0 0 .2em color-mix(in srgb,var(--sbd-primary, #007ad9) 45%,#fff)}.sbd-booking-input__btn{height:44px;white-space:nowrap;background:var(--sbd-primary, #007ad9);border-color:var(--sbd-primary, #007ad9)}.sbd-booking-input__btn:enabled:hover{background:color-mix(in srgb,var(--sbd-primary, #007ad9) 88%,#000);border-color:color-mix(in srgb,var(--sbd-primary, #007ad9) 88%,#000)}.sbd-booking-input__btn:enabled:focus{box-shadow:0 0 0 .2em color-mix(in srgb,var(--sbd-primary, #007ad9) 45%,#fff)}.sbd-booking-input__demos{display:flex;align-items:center;gap:8px;flex-wrap:wrap}.sbd-booking-input__demos-label{font-size:11.5px;color:#94a3b8}.sbd-booking-input__chip{padding:4px 10px;border-radius:20px;border:1px solid #e2e8f0;background:#f8fafc;color:#1e2e4a;font-size:11.5px;font-weight:500;cursor:pointer;transition:border-color .15s,background .15s}.sbd-booking-input__chip:hover{border-color:var(--sbd-primary, #3b82f6);background:var(--sbd-primary-soft, #eff6ff);color:var(--sbd-primary, #3b82f6)}:host ::ng-deep .p-selectbutton .p-button.p-highlight{background:var(--sbd-primary, #007ad9);border-color:var(--sbd-primary, #007ad9)}:host ::ng-deep .p-selectbutton .p-button.p-highlight:hover{background:color-mix(in srgb,var(--sbd-primary, #007ad9) 88%,#000);border-color:color-mix(in srgb,var(--sbd-primary, #007ad9) 88%,#000)}:host ::ng-deep .p-selectbutton .p-button.p-highlight:focus{box-shadow:0 0 0 .2em color-mix(in srgb,var(--sbd-primary, #007ad9) 45%,#fff)}\n"] }]
43
55
  }] });
44
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYm9va2luZy1pbnB1dC5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9zbWFydC1ib29raW5nLWRhc2hib2FyZC9zcmMvbGliL2NvbXBvbmVudHMvYm9va2luZy1pbnB1dC9ib29raW5nLWlucHV0LmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL3NtYXJ0LWJvb2tpbmctZGFzaGJvYXJkL3NyYy9saWIvY29tcG9uZW50cy9ib29raW5nLWlucHV0L2Jvb2tpbmctaW5wdXQuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFNBQVMsRUFBRSxLQUFLLEVBQUUsTUFBTSxFQUFFLEtBQUssRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUNoRSxPQUFPLEVBQUUsV0FBVyxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFDN0MsT0FBTyxFQUFFLGtCQUFrQixFQUFFLE1BQU0sc0JBQXNCLENBQUM7QUFDMUQsT0FBTyxFQUFFLGVBQWUsRUFBRSxNQUFNLG1CQUFtQixDQUFDO0FBQ3BELE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUM5QyxPQUFPLEVBQUUsYUFBYSxFQUFFLE1BQU0saUJBQWlCLENBQUM7Ozs7Ozs7QUFZaEQsTUFBTSxPQUFPLHdCQUF3QjtJQVByQztRQVFFLFlBQU8sR0FBRyxLQUFLLENBQUMsS0FBSyxDQUFDLENBQUM7UUFDdkIsWUFBTyxHQUFHLEtBQUssQ0FBYyxRQUFRLENBQUMsQ0FBQztRQUN2QyxjQUFTLEdBQUcsS0FBSyxDQUFDLEVBQUUsQ0FBQyxDQUFDO1FBQ3RCLFdBQU0sR0FBRyxNQUFNLEVBQVEsQ0FBQztRQUVmLG1CQUFjLEdBQW9CO1lBQ3pDLEVBQUUsS0FBSyxFQUFFLFVBQVUsRUFBRSxLQUFLLEVBQUUsUUFBUSxFQUFFO1lBQ3RDLEVBQUUsS0FBSyxFQUFFLFVBQVUsRUFBRSxLQUFLLEVBQUUsT0FBTyxFQUFFO1NBQ3RDLENBQUM7UUFFTyxZQUFPLEdBQUc7WUFDakIsRUFBRSxLQUFLLEVBQUUsd0JBQXdCLEVBQUUsS0FBSyxFQUFFLFdBQVcsRUFBRTtZQUN2RCxFQUFFLEtBQUssRUFBRSwwQkFBMEIsRUFBRSxLQUFLLEVBQUUsY0FBYyxFQUFFO1NBQzdELENBQUM7S0FXSDtJQVRDLFFBQVEsQ0FBQyxFQUFVO1FBQ2pCLE1BQU0sT0FBTyxHQUFnQixFQUFFLENBQUMsUUFBUSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLFFBQVEsQ0FBQztRQUNyRSxJQUFJLENBQUMsT0FBTyxDQUFDLEdBQUcsQ0FBQyxPQUFPLENBQUMsQ0FBQztRQUMxQixJQUFJLENBQUMsU0FBUyxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsQ0FBQztJQUN6QixDQUFDO0lBRUQsU0FBUyxDQUFDLEtBQW9CO1FBQzVCLElBQUksS0FBSyxDQUFDLEdBQUcsS0FBSyxPQUFPO1lBQUUsSUFBSSxDQUFDLE1BQU0sQ0FBQyxJQUFJLEVBQUUsQ0FBQztJQUNoRCxDQUFDOytHQXhCVSx3QkFBd0I7bUdBQXhCLHdCQUF3QixvakJDakJyQywwaENBeUJBLGtsRURaWSxXQUFXLDhtQkFBRSxrQkFBa0IsNlNBQUUsZUFBZSxtR0FBRSxZQUFZLHNLQUFFLGFBQWE7OzRGQUk1RSx3QkFBd0I7a0JBUHBDLFNBQVM7K0JBQ0UsdUJBQXVCLGNBQ3JCLElBQUksV0FDUCxDQUFDLFdBQVcsRUFBRSxrQkFBa0IsRUFBRSxlQUFlLEVBQUUsWUFBWSxFQUFFLGFBQWEsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENvbXBvbmVudCwgaW5wdXQsIG91dHB1dCwgbW9kZWwgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IEZvcm1zTW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvZm9ybXMnO1xuaW1wb3J0IHsgU2VsZWN0QnV0dG9uTW9kdWxlIH0gZnJvbSAncHJpbWVuZy9zZWxlY3RidXR0b24nO1xuaW1wb3J0IHsgSW5wdXRUZXh0TW9kdWxlIH0gZnJvbSAncHJpbWVuZy9pbnB1dHRleHQnO1xuaW1wb3J0IHsgQnV0dG9uTW9kdWxlIH0gZnJvbSAncHJpbWVuZy9idXR0b24nO1xuaW1wb3J0IHsgVG9vbHRpcE1vZHVsZSB9IGZyb20gJ3ByaW1lbmcvdG9vbHRpcCc7XG5pbXBvcnQgeyBQcm9kdWN0VHlwZSB9IGZyb20gJy4uLy4uL21vZGVscy9ib29raW5nLnR5cGVzJztcblxuaW50ZXJmYWNlIFByb2R1Y3RPcHRpb24geyBsYWJlbDogc3RyaW5nOyB2YWx1ZTogUHJvZHVjdFR5cGU7IGRpc2FibGVkPzogYm9vbGVhbjsgfVxuXG5AQ29tcG9uZW50KHtcbiAgc2VsZWN0b3I6ICdhcHAtc2JkLWJvb2tpbmctaW5wdXQnLFxuICBzdGFuZGFsb25lOiB0cnVlLFxuICBpbXBvcnRzOiBbRm9ybXNNb2R1bGUsIFNlbGVjdEJ1dHRvbk1vZHVsZSwgSW5wdXRUZXh0TW9kdWxlLCBCdXR0b25Nb2R1bGUsIFRvb2x0aXBNb2R1bGVdLFxuICB0ZW1wbGF0ZVVybDogJy4vYm9va2luZy1pbnB1dC5jb21wb25lbnQuaHRtbCcsXG4gIHN0eWxlVXJsOiAnLi9ib29raW5nLWlucHV0LmNvbXBvbmVudC5zY3NzJyxcbn0pXG5leHBvcnQgY2xhc3MgU2JkQm9va2luZ0lucHV0Q29tcG9uZW50IHtcbiAgbG9hZGluZyA9IGlucHV0KGZhbHNlKTtcbiAgcHJvZHVjdCA9IG1vZGVsPFByb2R1Y3RUeXBlPignZmxpZ2h0Jyk7XG4gIGJvb2tpbmdJZCA9IG1vZGVsKCcnKTtcbiAgbG9va3VwID0gb3V0cHV0PHZvaWQ+KCk7XG5cbiAgcmVhZG9ubHkgcHJvZHVjdE9wdGlvbnM6IFByb2R1Y3RPcHRpb25bXSA9IFtcbiAgICB7IGxhYmVsOiAn4pyIIEZsaWdodCcsIHZhbHVlOiAnZmxpZ2h0JyB9LFxuICAgIHsgbGFiZWw6ICfwn4+oIEhvdGVsJywgdmFsdWU6ICdob3RlbCcgfSxcbiAgXTtcblxuICByZWFkb25seSBkZW1vSWRzID0gW1xuICAgIHsgbGFiZWw6ICdEZW1vIEZsaWdodDogQUxNLTIwNDgxJywgdmFsdWU6ICdBTE0tMjA0ODEnIH0sXG4gICAgeyBsYWJlbDogJ0RlbW8gSG90ZWw6IEFMTS1IVEwtOTkyMScsIHZhbHVlOiAnQUxNLUhUTC05OTIxJyB9LFxuICBdO1xuXG4gIGZpbGxEZW1vKGlkOiBzdHJpbmcpOiB2b2lkIHtcbiAgICBjb25zdCBwcm9kdWN0OiBQcm9kdWN0VHlwZSA9IGlkLmluY2x1ZGVzKCdIVEwnKSA/ICdob3RlbCcgOiAnZmxpZ2h0JztcbiAgICB0aGlzLnByb2R1Y3Quc2V0KHByb2R1Y3QpO1xuICAgIHRoaXMuYm9va2luZ0lkLnNldChpZCk7XG4gIH1cblxuICBvbktleWRvd24oZXZlbnQ6IEtleWJvYXJkRXZlbnQpOiB2b2lkIHtcbiAgICBpZiAoZXZlbnQua2V5ID09PSAnRW50ZXInKSB0aGlzLmxvb2t1cC5lbWl0KCk7XG4gIH1cbn1cbiIsIjxkaXYgY2xhc3M9XCJzYmQtYm9va2luZy1pbnB1dFwiPlxuICA8cC1zZWxlY3RCdXR0b25cbiAgICBbKG5nTW9kZWwpXT1cInByb2R1Y3RcIlxuICAgIFtvcHRpb25zXT1cInByb2R1Y3RPcHRpb25zXCJcbiAgICBvcHRpb25MYWJlbD1cImxhYmVsXCJcbiAgICBvcHRpb25WYWx1ZT1cInZhbHVlXCJcbiAgICBvcHRpb25EaXNhYmxlZD1cImRpc2FibGVkXCI+XG4gICAgPG5nLXRlbXBsYXRlIHBUZW1wbGF0ZT1cIml0ZW1cIiBsZXQtaXRlbT5cbiAgICAgIDxzcGFuXG4gICAgICAgIFtwVG9vbHRpcF09XCJpdGVtLmRpc2FibGVkID8gJ0NvbWluZyBzb29uJyA6IG51bGxcIlxuICAgICAgICB0b29sdGlwUG9zaXRpb249XCJib3R0b21cIlxuICAgICAgICBzdHlsZT1cInBvaW50ZXItZXZlbnRzOiBhdXRvOyBkaXNwbGF5OiBpbmxpbmUtYmxvY2s7XCI+XG4gICAgICAgIHt7IGl0ZW0ubGFiZWwgfX1cbiAgICAgIDwvc3Bhbj5cbiAgICA8L25nLXRlbXBsYXRlPlxuICA8L3Atc2VsZWN0QnV0dG9uPlxuICA8ZGl2IGNsYXNzPVwic2JkLWJvb2tpbmctaW5wdXRfX3Jvd1wiPlxuICAgIDxkaXYgY2xhc3M9XCJzYmQtYm9va2luZy1pbnB1dF9fZmllbGQtd3JhcFwiPlxuICAgICAgPGkgY2xhc3M9XCJwaSBwaS1zZWFyY2ggc2JkLWJvb2tpbmctaW5wdXRfX2ljb25cIj48L2k+XG4gICAgICA8aW5wdXQgcElucHV0VGV4dCBjbGFzcz1cInNiZC1ib29raW5nLWlucHV0X19maWVsZFwiIHBsYWNlaG9sZGVyPVwiRW50ZXIgQm9va2luZyBJRFwiXG4gICAgICAgIFsobmdNb2RlbCldPVwiYm9va2luZ0lkXCIgKGtleWRvd24pPVwib25LZXlkb3duKCRldmVudClcIiBhdXRvY29tcGxldGU9XCJvZmZcIiBzcGVsbGNoZWNrPVwiZmFsc2VcIiAvPlxuICAgIDwvZGl2PlxuICAgIDxidXR0b24gcEJ1dHRvbiBsYWJlbD1cIkxvb2t1cCDihpJcIiBbZGlzYWJsZWRdPVwiIWJvb2tpbmdJZCgpLnRyaW0oKVwiIChjbGljayk9XCJsb29rdXAuZW1pdCgpXCIgY2xhc3M9XCJzYmQtYm9va2luZy1pbnB1dF9fYnRuXCI+PC9idXR0b24+XG4gIDwvZGl2PlxuPC9kaXY+XG4iXX0=
56
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYm9va2luZy1pbnB1dC5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9zbWFydC1ib29raW5nLWRhc2hib2FyZC9zcmMvbGliL2NvbXBvbmVudHMvYm9va2luZy1pbnB1dC9ib29raW5nLWlucHV0LmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL3NtYXJ0LWJvb2tpbmctZGFzaGJvYXJkL3NyYy9saWIvY29tcG9uZW50cy9ib29raW5nLWlucHV0L2Jvb2tpbmctaW5wdXQuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFNBQVMsRUFBRSxNQUFNLEVBQUUsS0FBSyxFQUFFLE1BQU0sRUFBRSxLQUFLLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDeEUsT0FBTyxFQUFFLFdBQVcsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBQzdDLE9BQU8sRUFBRSxrQkFBa0IsRUFBRSxNQUFNLHNCQUFzQixDQUFDO0FBQzFELE9BQU8sRUFBRSxlQUFlLEVBQUUsTUFBTSxtQkFBbUIsQ0FBQztBQUNwRCxPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFDOUMsT0FBTyxFQUFFLGFBQWEsRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBQ2hELE9BQU8sRUFBRSxlQUFlLEVBQUUsTUFBTSw4QkFBOEIsQ0FBQzs7Ozs7OztBQVkvRCxNQUFNLE9BQU8sd0JBQXdCO0lBUHJDO1FBUUUsWUFBTyxHQUFHLEtBQUssQ0FBQyxLQUFLLENBQUMsQ0FBQztRQUN2QixZQUFPLEdBQUcsS0FBSyxDQUFjLFFBQVEsQ0FBQyxDQUFDO1FBQ3ZDLGNBQVMsR0FBRyxLQUFLLENBQUMsRUFBRSxDQUFDLENBQUM7UUFDdEIsV0FBTSxHQUFHLE1BQU0sRUFBUSxDQUFDO1FBQ3hCLHlGQUF5RjtRQUN6RixpQkFBWSxHQUFHLE1BQU0sRUFBVSxDQUFDO1FBRWYsaUJBQVksR0FBRyxNQUFNLENBQUMsZUFBZSxDQUFDLENBQUM7UUFDL0MsV0FBTSxHQUFHLElBQUksQ0FBQyxZQUFZLENBQUMsTUFBTSxDQUFDO1FBQ2xDLFVBQUssR0FBRyxJQUFJLENBQUMsWUFBWSxDQUFDLEtBQUssQ0FBQztRQVFoQyxtQkFBYyxHQUFvQjtZQUN6QyxFQUFFLEtBQUssRUFBRSxVQUFVLEVBQUUsS0FBSyxFQUFFLFFBQVEsRUFBRTtZQUN0QyxFQUFFLEtBQUssRUFBRSxVQUFVLEVBQUUsS0FBSyxFQUFFLE9BQU8sRUFBRTtTQUN0QyxDQUFDO1FBRU8sWUFBTyxHQUFHO1lBQ2pCLEVBQUUsS0FBSyxFQUFFLHdCQUF3QixFQUFFLEtBQUssRUFBRSxXQUFXLEVBQUU7WUFDdkQsRUFBRSxLQUFLLEVBQUUsMEJBQTBCLEVBQUUsS0FBSyxFQUFFLGNBQWMsRUFBRTtTQUM3RCxDQUFDO0tBV0g7SUF6QkMsT0FBTyxDQUFDLEtBQWE7UUFDbkIsSUFBSSxLQUFLLEtBQUssSUFBSSxDQUFDLEtBQUssRUFBRTtZQUFFLE9BQU87UUFDbkMsSUFBSSxDQUFDLFlBQVksQ0FBQyxRQUFRLENBQUMsS0FBSyxDQUFDLENBQUM7UUFDbEMsSUFBSSxDQUFDLFlBQVksQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUM7SUFDaEMsQ0FBQztJQVlELFFBQVEsQ0FBQyxFQUFVO1FBQ2pCLE1BQU0sT0FBTyxHQUFnQixFQUFFLENBQUMsUUFBUSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLFFBQVEsQ0FBQztRQUNyRSxJQUFJLENBQUMsT0FBTyxDQUFDLEdBQUcsQ0FBQyxPQUFPLENBQUMsQ0FBQztRQUMxQixJQUFJLENBQUMsU0FBUyxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsQ0FBQztJQUN6QixDQUFDO0lBRUQsU0FBUyxDQUFDLEtBQW9CO1FBQzVCLElBQUksS0FBSyxDQUFDLEdBQUcsS0FBSyxPQUFPO1lBQUUsSUFBSSxDQUFDLE1BQU0sQ0FBQyxJQUFJLEVBQUUsQ0FBQztJQUNoRCxDQUFDOytHQXBDVSx3QkFBd0I7bUdBQXhCLHdCQUF3QixrbEJDbEJyQywwbERBcUNBLHdsRkR2QlksV0FBVyw4bUJBQUUsa0JBQWtCLDZTQUFFLGVBQWUsbUdBQUUsWUFBWSxzS0FBRSxhQUFhOzs0RkFJNUUsd0JBQXdCO2tCQVBwQyxTQUFTOytCQUNFLHVCQUF1QixjQUNyQixJQUFJLFdBQ1AsQ0FBQyxXQUFXLEVBQUUsa0JBQWtCLEVBQUUsZUFBZSxFQUFFLFlBQVksRUFBRSxhQUFhLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDb21wb25lbnQsIGluamVjdCwgaW5wdXQsIG91dHB1dCwgbW9kZWwgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IEZvcm1zTW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvZm9ybXMnO1xuaW1wb3J0IHsgU2VsZWN0QnV0dG9uTW9kdWxlIH0gZnJvbSAncHJpbWVuZy9zZWxlY3RidXR0b24nO1xuaW1wb3J0IHsgSW5wdXRUZXh0TW9kdWxlIH0gZnJvbSAncHJpbWVuZy9pbnB1dHRleHQnO1xuaW1wb3J0IHsgQnV0dG9uTW9kdWxlIH0gZnJvbSAncHJpbWVuZy9idXR0b24nO1xuaW1wb3J0IHsgVG9vbHRpcE1vZHVsZSB9IGZyb20gJ3ByaW1lbmcvdG9vbHRpcCc7XG5pbXBvcnQgeyBTYmRCcmFuZFNlcnZpY2UgfSBmcm9tICcuLi8uLi9zZXJ2aWNlcy9icmFuZC5zZXJ2aWNlJztcbmltcG9ydCB7IFByb2R1Y3RUeXBlIH0gZnJvbSAnLi4vLi4vbW9kZWxzL2Jvb2tpbmcudHlwZXMnO1xuXG5pbnRlcmZhY2UgUHJvZHVjdE9wdGlvbiB7IGxhYmVsOiBzdHJpbmc7IHZhbHVlOiBQcm9kdWN0VHlwZTsgZGlzYWJsZWQ/OiBib29sZWFuOyB9XG5cbkBDb21wb25lbnQoe1xuICBzZWxlY3RvcjogJ2FwcC1zYmQtYm9va2luZy1pbnB1dCcsXG4gIHN0YW5kYWxvbmU6IHRydWUsXG4gIGltcG9ydHM6IFtGb3Jtc01vZHVsZSwgU2VsZWN0QnV0dG9uTW9kdWxlLCBJbnB1dFRleHRNb2R1bGUsIEJ1dHRvbk1vZHVsZSwgVG9vbHRpcE1vZHVsZV0sXG4gIHRlbXBsYXRlVXJsOiAnLi9ib29raW5nLWlucHV0LmNvbXBvbmVudC5odG1sJyxcbiAgc3R5bGVVcmw6ICcuL2Jvb2tpbmctaW5wdXQuY29tcG9uZW50LnNjc3MnLFxufSlcbmV4cG9ydCBjbGFzcyBTYmRCb29raW5nSW5wdXRDb21wb25lbnQge1xuICBsb2FkaW5nID0gaW5wdXQoZmFsc2UpO1xuICBwcm9kdWN0ID0gbW9kZWw8UHJvZHVjdFR5cGU+KCdmbGlnaHQnKTtcbiAgYm9va2luZ0lkID0gbW9kZWwoJycpO1xuICBsb29rdXAgPSBvdXRwdXQ8dm9pZD4oKTtcbiAgLyoqIFRoZSBhZ2VudCBwaWNrZWQgYW5vdGhlciBicmFuZDogdGhlIGJvb2tpbmcgb24gc2NyZWVuIGJlbG9uZ3MgdG8gdGhlIHByZXZpb3VzIG9uZS4gKi9cbiAgYnJhbmRDaGFuZ2VkID0gb3V0cHV0PHN0cmluZz4oKTtcblxuICBwcml2YXRlIHJlYWRvbmx5IGJyYW5kU2VydmljZSA9IGluamVjdChTYmRCcmFuZFNlcnZpY2UpO1xuICByZWFkb25seSBicmFuZHMgPSB0aGlzLmJyYW5kU2VydmljZS5icmFuZHM7XG4gIHJlYWRvbmx5IGJyYW5kID0gdGhpcy5icmFuZFNlcnZpY2UuYnJhbmQ7XG5cbiAgb25CcmFuZCh2YWx1ZTogc3RyaW5nKTogdm9pZCB7XG4gICAgaWYgKHZhbHVlID09PSB0aGlzLmJyYW5kKCkpIHJldHVybjtcbiAgICB0aGlzLmJyYW5kU2VydmljZS5zZXRCcmFuZCh2YWx1ZSk7XG4gICAgdGhpcy5icmFuZENoYW5nZWQuZW1pdCh2YWx1ZSk7XG4gIH1cblxuICByZWFkb25seSBwcm9kdWN0T3B0aW9uczogUHJvZHVjdE9wdGlvbltdID0gW1xuICAgIHsgbGFiZWw6ICfinIggRmxpZ2h0JywgdmFsdWU6ICdmbGlnaHQnIH0sXG4gICAgeyBsYWJlbDogJ/Cfj6ggSG90ZWwnLCB2YWx1ZTogJ2hvdGVsJyB9LFxuICBdO1xuXG4gIHJlYWRvbmx5IGRlbW9JZHMgPSBbXG4gICAgeyBsYWJlbDogJ0RlbW8gRmxpZ2h0OiBBTE0tMjA0ODEnLCB2YWx1ZTogJ0FMTS0yMDQ4MScgfSxcbiAgICB7IGxhYmVsOiAnRGVtbyBIb3RlbDogQUxNLUhUTC05OTIxJywgdmFsdWU6ICdBTE0tSFRMLTk5MjEnIH0sXG4gIF07XG5cbiAgZmlsbERlbW8oaWQ6IHN0cmluZyk6IHZvaWQge1xuICAgIGNvbnN0IHByb2R1Y3Q6IFByb2R1Y3RUeXBlID0gaWQuaW5jbHVkZXMoJ0hUTCcpID8gJ2hvdGVsJyA6ICdmbGlnaHQnO1xuICAgIHRoaXMucHJvZHVjdC5zZXQocHJvZHVjdCk7XG4gICAgdGhpcy5ib29raW5nSWQuc2V0KGlkKTtcbiAgfVxuXG4gIG9uS2V5ZG93bihldmVudDogS2V5Ym9hcmRFdmVudCk6IHZvaWQge1xuICAgIGlmIChldmVudC5rZXkgPT09ICdFbnRlcicpIHRoaXMubG9va3VwLmVtaXQoKTtcbiAgfVxufVxuIiwiPGRpdiBjbGFzcz1cInNiZC1ib29raW5nLWlucHV0XCI+XG4gIDxkaXYgY2xhc3M9XCJzYmQtYm9va2luZy1pbnB1dF9fdG9wXCI+XG4gIDxwLXNlbGVjdEJ1dHRvblxuICAgIFsobmdNb2RlbCldPVwicHJvZHVjdFwiXG4gICAgW29wdGlvbnNdPVwicHJvZHVjdE9wdGlvbnNcIlxuICAgIG9wdGlvbkxhYmVsPVwibGFiZWxcIlxuICAgIG9wdGlvblZhbHVlPVwidmFsdWVcIlxuICAgIG9wdGlvbkRpc2FibGVkPVwiZGlzYWJsZWRcIj5cbiAgICA8bmctdGVtcGxhdGUgcFRlbXBsYXRlPVwiaXRlbVwiIGxldC1pdGVtPlxuICAgICAgPHNwYW5cbiAgICAgICAgW3BUb29sdGlwXT1cIml0ZW0uZGlzYWJsZWQgPyAnQ29taW5nIHNvb24nIDogbnVsbFwiXG4gICAgICAgIHRvb2x0aXBQb3NpdGlvbj1cImJvdHRvbVwiXG4gICAgICAgIHN0eWxlPVwicG9pbnRlci1ldmVudHM6IGF1dG87IGRpc3BsYXk6IGlubGluZS1ibG9jaztcIj5cbiAgICAgICAge3sgaXRlbS5sYWJlbCB9fVxuICAgICAgPC9zcGFuPlxuICAgIDwvbmctdGVtcGxhdGU+XG4gIDwvcC1zZWxlY3RCdXR0b24+XG4gIDwvZGl2PlxuICA8ZGl2IGNsYXNzPVwic2JkLWJvb2tpbmctaW5wdXRfX3Jvd1wiPlxuICAgIDxkaXYgY2xhc3M9XCJzYmQtYm9va2luZy1pbnB1dF9fZmllbGQtd3JhcFwiPlxuICAgICAgPGkgY2xhc3M9XCJwaSBwaS1zZWFyY2ggc2JkLWJvb2tpbmctaW5wdXRfX2ljb25cIj48L2k+XG4gICAgICA8aW5wdXQgcElucHV0VGV4dCBjbGFzcz1cInNiZC1ib29raW5nLWlucHV0X19maWVsZFwiIHBsYWNlaG9sZGVyPVwiRW50ZXIgQm9va2luZyBJRFwiXG4gICAgICAgIFsobmdNb2RlbCldPVwiYm9va2luZ0lkXCIgKGtleWRvd24pPVwib25LZXlkb3duKCRldmVudClcIiBhdXRvY29tcGxldGU9XCJvZmZcIiBzcGVsbGNoZWNrPVwiZmFsc2VcIiAvPlxuICAgIDwvZGl2PlxuICAgIDwhLS0gQnJhbmQ6IG9uZSByYWRpbyBwZXIgY29uZmlndXJlZCBicmFuZCwgYmV0d2VlbiB0aGUgQm9va2luZyBJRCBmaWVsZCBhbmQgdGhlIExvb2t1cCBidXR0b24uIC0tPlxuICAgIDxkaXYgY2xhc3M9XCJzYmQtYm9va2luZy1pbnB1dF9fYnJhbmRzXCIgcm9sZT1cInJhZGlvZ3JvdXBcIiBhcmlhLWxhYmVsPVwiQnJhbmRcIj5cbiAgICAgIEBmb3IgKGIgb2YgYnJhbmRzOyB0cmFjayBiLnZhbHVlKSB7XG4gICAgICAgIDxsYWJlbCBjbGFzcz1cInNiZC1ib29raW5nLWlucHV0X19icmFuZC1vcHRpb25cIj5cbiAgICAgICAgICA8aW5wdXQgdHlwZT1cInJhZGlvXCIgbmFtZT1cInNiZC1icmFuZFwiIFt2YWx1ZV09XCJiLnZhbHVlXCIgW2NoZWNrZWRdPVwiYnJhbmQoKSA9PT0gYi52YWx1ZVwiXG4gICAgICAgICAgICAoY2hhbmdlKT1cIm9uQnJhbmQoYi52YWx1ZSlcIiAvPlxuICAgICAgICAgIDxzcGFuPnt7IGIubGFiZWwgfX08L3NwYW4+XG4gICAgICAgIDwvbGFiZWw+XG4gICAgICB9XG4gICAgPC9kaXY+XG4gICAgPGJ1dHRvbiBwQnV0dG9uIGxhYmVsPVwiTG9va3VwIOKGklwiIFtkaXNhYmxlZF09XCIhYm9va2luZ0lkKCkudHJpbSgpXCIgKGNsaWNrKT1cImxvb2t1cC5lbWl0KClcIiBjbGFzcz1cInNiZC1ib29raW5nLWlucHV0X19idG5cIj48L2J1dHRvbj5cbiAgPC9kaXY+XG48L2Rpdj5cbiJdfQ==
@@ -64,10 +64,10 @@ export class SbdFlightItineraryCardComponent {
64
64
  return `${Math.floor(mins / 60)}h ${mins % 60}m`;
65
65
  }
66
66
  static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: SbdFlightItineraryCardComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
67
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "18.2.14", type: SbdFlightItineraryCardComponent, isStandalone: true, selector: "app-sbd-flight-itinerary-card", inputs: { data: { classPropertyName: "data", publicName: "data", isSignal: true, isRequired: false, transformFunction: null }, product: { classPropertyName: "product", publicName: "product", isSignal: true, isRequired: true, transformFunction: null }, verified: { classPropertyName: "verified", publicName: "verified", isSignal: true, isRequired: false, transformFunction: null } }, ngImport: i0, template: "<div class=\"fic\">\n @if (product() === 'flight') {\n\n <!-- \u2500\u2500 Verified pill \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500 -->\n @if (verified()) {\n <div class=\"fic__verified-bar\">\n <span class=\"fic__verified-pill\">\n <i class=\"pi pi-verified\"></i> Verified with Airlines\n </span>\n </div>\n }\n\n <!-- \u2500\u2500 Legs \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500 -->\n @for (leg of legs(); track leg.direction + $index; let li = $index) {\n <div class=\"fic__leg\" [class.fic__leg--return]=\"leg.direction === 'Return'\">\n\n <!-- Leg header -->\n <div class=\"fic__leg-header\">\n <div class=\"fic__leg-direction\">\n <i class=\"pi\" [class.pi-arrow-right]=\"leg.direction !== 'Return'\" [class.pi-arrow-left]=\"leg.direction === 'Return'\"></i>\n <span>{{ leg.direction }}</span>\n </div>\n <div class=\"fic__leg-chips\">\n @if (leg.cabin) {\n <span class=\"fic__chip fic__chip--cabin\">{{ leg.cabin }}</span>\n }\n @if (leg.fareBrand) {\n <span class=\"fic__chip fic__chip--fare\">{{ leg.fareBrand }}</span>\n }\n </div>\n </div>\n\n <!-- Airline row -->\n @if (leg.airlineName) {\n <div class=\"fic__airline\">\n <i class=\"pi pi-send\"></i>\n <span>{{ leg.airlineName }}</span>\n </div>\n }\n\n <!-- Route timeline -->\n <div class=\"fic__route\">\n\n <!-- Origin -->\n <div class=\"fic__airport\">\n <div class=\"fic__airport-code\">{{ leg.from }}</div>\n <div class=\"fic__airport-time\">{{ fmtTime(leg.depTime) }}</div>\n <div class=\"fic__airport-date\">{{ fmtShortDate(leg.depTime) }}</div>\n </div>\n\n <!-- Segments + stops -->\n <div class=\"fic__timeline\">\n\n <!-- Top row: all labels -->\n <div class=\"fic__tl-top\">\n @for (seg of leg.durationSegments; track seg.DepartureAirportCode; let si = $index) {\n <div class=\"fic__tl-seg\">\n <span class=\"fic__tl-flt\">{{ leg.segments[si]?.AirlineCode }}{{ leg.segments[si]?.FlightNumber }}</span>\n <span class=\"fic__tl-dur\">{{ fmtMins(seg.SegmentElapsedTimeMinutes) }}</span>\n </div>\n @if (si < leg.stops.length) {\n <div class=\"fic__tl-stop\">\n <span class=\"fic__stop-dot\"></span>\n <span class=\"fic__stop-code\">{{ leg.stops[si].StopAirport }}</span>\n <span class=\"fic__stop-sep\">\u00B7</span>\n <span class=\"fic__stop-dur\">{{ fmtMins(leg.stops[si].LayoverDuration) }}</span>\n </div>\n }\n }\n </div>\n\n <!-- Bottom row: single continuous line + one arrow -->\n <div class=\"fic__tl-track\">\n <div class=\"fic__tl-line\"></div>\n <i class=\"pi pi-send fic__tl-plane\"></i>\n </div>\n\n </div>\n\n <!-- Destination -->\n <div class=\"fic__airport fic__airport--right\">\n <div class=\"fic__airport-code\">{{ leg.to }}</div>\n <div class=\"fic__airport-time\">{{ fmtTime(leg.arrTime) }}</div>\n <div class=\"fic__airport-date\">{{ fmtShortDate(leg.arrTime) }}</div>\n </div>\n\n </div>\n </div>\n }\n\n <!-- \u2500\u2500 Passengers \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500 -->\n @if (passengers().length > 0) {\n <div class=\"fic__section\">\n <div class=\"fic__section-label\">\n <i class=\"pi pi-users\"></i> Passengers\n <span class=\"fic__section-count\">{{ passengers().length }}</span>\n </div>\n <div class=\"fic__pax-list\">\n @for (p of passengers(); track p.passengerId) {\n <div class=\"fic__pax\">\n <div class=\"fic__pax-top\">\n <span class=\"fic__pax-badge fic__pax-badge--{{ p.type | lowercase }}\">{{ typeLabel[p.type] ?? p.type }}</span>\n <span class=\"fic__pax-name\">{{ p.name?.prefix }} {{ p.name?.givenName }} {{ p.name?.surName }}</span>\n </div>\n <div class=\"fic__pax-bottom\">\n @if (p.identity?.number) {\n <span class=\"fic__pax-doc\"><i class=\"pi pi-id-card\"></i> {{ p.identity?.number }}</span>\n }\n @if (p.email) {\n <span class=\"fic__pax-email\">{{ p.email }}</span>\n }\n </div>\n </div>\n }\n </div>\n </div>\n }\n\n <!-- \u2500\u2500 Payment \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500 -->\n @if (payment()) {\n <div class=\"fic__payment\">\n <div class=\"fic__payment-main\">\n <i class=\"pi pi-credit-card fic__payment-icon\"></i>\n <span class=\"fic__payment-amount\">{{ payment()?.amount }} {{ payment()?.currency }}</span>\n <span class=\"fic__payment-status\" [class.fic__payment-status--ok]=\"payment()?.status?.key === 'SUCCESS'\">\n <i class=\"pi\" [class.pi-check-circle]=\"payment()?.status?.key === 'SUCCESS'\" [class.pi-clock]=\"payment()?.status?.key !== 'SUCCESS'\"></i>\n {{ payment()?.status?.name }}\n </span>\n </div>\n @if (payment()?.method || payment()?.date) {\n <div class=\"fic__payment-sub\">\n @if (payment()?.method) { <span>{{ payment()?.method }}</span> }\n @if (payment()?.method && payment()?.date) { <span class=\"fic__dot\">\u00B7</span> }\n @if (payment()?.date) { <span>{{ payment()?.date }}</span> }\n </div>\n }\n </div>\n }\n\n\n }\n</div>\n", styles: [".fic{background:#fff;border:1px solid #e2e8f0;border-radius:12px;overflow:hidden;font-family:inherit}.fic__leg{padding:16px 16px 18px;border-bottom:1px solid #e2e8f0}.fic__leg--return{background:#fafbff}.fic__leg-header{display:flex;align-items:center;justify-content:space-between;margin-bottom:8px}.fic__leg-direction{display:flex;align-items:center;gap:6px;font-size:11px;font-weight:800;letter-spacing:.08em;text-transform:uppercase;color:#1e2e4a}.fic__leg-direction .pi{font-size:10px;color:#475569}.fic__leg-chips{display:flex;gap:5px}.fic__chip{font-size:10.5px;font-weight:600;padding:2px 8px;border-radius:12px;letter-spacing:.02em}.fic__chip--cabin{background:#eff6ff;color:#1d4ed8}.fic__chip--fare{background:#fef9c3;color:#854d0e}.fic__airline{display:flex;align-items:center;gap:5px;font-size:12px;color:#64748b;margin-bottom:14px}.fic__airline .pi{font-size:11px;color:#94a3b8;transform:rotate(45deg)}.fic__route{display:flex;align-items:flex-start;gap:0}.fic__airport{display:flex;flex-direction:column;align-items:flex-start;flex-shrink:0}.fic__airport--right{align-items:flex-end}.fic__airport-code{font-size:26px;font-weight:800;color:#1e2e4a;line-height:1}.fic__airport-time{font-size:13px;font-weight:600;color:#334155;margin-top:3px}.fic__airport-date{font-size:10.5px;color:#94a3b8;margin-top:1px}.fic__timeline{flex:1;display:flex;flex-direction:column;gap:4px;margin:0 4px}.fic__tl-top{display:flex;align-items:flex-end;gap:0}.fic__tl-seg{flex:1;display:flex;flex-direction:column;align-items:center;gap:1px}.fic__tl-flt{font-size:10px;font-weight:700;color:#1e2e4a;background:#f1f5f9;padding:1px 5px;border-radius:4px;white-space:nowrap}.fic__tl-dur{font-size:9.5px;color:#94a3b8;white-space:nowrap}.fic__tl-stop{flex-shrink:0;display:inline-flex;align-items:center;gap:4px;padding:0 8px 1px}.fic__tl-track{display:flex;align-items:center;height:22px}.fic__tl-line{flex:1;height:2px;background:#cbd5e1}.fic__tl-plane{font-size:13px;color:#475569;transform:rotate(45deg);flex-shrink:0;margin-left:-2px}.fic__stop-dot{width:7px;height:7px;border-radius:50%;background:#94a3b8;flex-shrink:0}.fic__stop-code{font-size:11px;font-weight:700;color:#334155}.fic__stop-sep{font-size:11px;color:#cbd5e1}.fic__stop-dur{font-size:11px;font-weight:600;color:#f59e0b}.fic__section{padding:14px 16px;border-bottom:1px solid #e2e8f0}.fic__section-label{display:flex;align-items:center;gap:5px;font-size:10.5px;font-weight:800;letter-spacing:.07em;text-transform:uppercase;color:#64748b;margin-bottom:10px}.fic__section-label .pi{font-size:11px}.fic__section-count{margin-left:auto;background:#f1f5f9;color:#475569;font-size:10px;font-weight:700;padding:1px 6px;border-radius:10px}.fic__pax-list{display:flex;flex-direction:column;gap:8px}.fic__pax{background:#f8fafc;border-radius:8px;padding:8px 10px;display:flex;flex-direction:column;gap:5px}.fic__pax-top{display:flex;align-items:center;gap:7px}.fic__pax-badge{font-size:9.5px;font-weight:700;letter-spacing:.04em;padding:2px 7px;border-radius:10px;flex-shrink:0;text-transform:uppercase}.fic__pax-badge--adt{background:#dbeafe;color:#1d4ed8}.fic__pax-badge--cnn{background:#dcfce7;color:#15803d}.fic__pax-badge--inf{background:#fce7f3;color:#9d174d}.fic__pax-name{font-size:12.5px;font-weight:600;color:#1e2e4a;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.fic__pax-bottom{display:flex;align-items:center;gap:8px;flex-wrap:wrap}.fic__pax-doc{display:inline-flex;align-items:center;gap:3px;font-size:11px;font-family:monospace;color:#475569;background:#f1f5f9;padding:1px 6px;border-radius:4px}.fic__pax-doc .pi{font-size:10px}.fic__pax-email{font-size:11px;color:#94a3b8;white-space:nowrap;overflow:hidden;text-overflow:ellipsis;max-width:180px}.fic__payment{padding:12px 16px;background:#f8fafc;display:flex;flex-direction:column;gap:4px}.fic__payment-main{display:flex;align-items:center;gap:8px}.fic__payment-icon{font-size:14px;color:#64748b}.fic__payment-amount{font-size:14px;font-weight:700;color:#1e2e4a}.fic__payment-status{display:flex;align-items:center;gap:4px;font-size:12px;font-weight:600;color:#64748b;margin-left:auto}.fic__payment-status .pi{font-size:12px}.fic__payment-status--ok{color:#16a34a}.fic__payment-sub{display:flex;align-items:center;gap:6px;font-size:11.5px;color:#94a3b8;padding-left:22px}.fic__dot{color:#cbd5e1}.fic__verified-bar{display:flex;align-items:center;padding:8px 12px;background:#f0fdf4;border-bottom:1px solid #bbf7d0}.fic__verified-pill{display:inline-flex;align-items:center;gap:5px;padding:3px 10px 3px 7px;background:#16a34a;color:#fff;font-size:11px;font-weight:700;border-radius:20px;letter-spacing:.02em}.fic__verified-pill .pi{font-size:12px}\n"], dependencies: [{ kind: "ngmodule", type: TagModule }, { kind: "pipe", type: LowerCasePipe, name: "lowercase" }] }); }
67
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "18.2.14", type: SbdFlightItineraryCardComponent, isStandalone: true, selector: "app-sbd-flight-itinerary-card", inputs: { data: { classPropertyName: "data", publicName: "data", isSignal: true, isRequired: false, transformFunction: null }, product: { classPropertyName: "product", publicName: "product", isSignal: true, isRequired: true, transformFunction: null }, verified: { classPropertyName: "verified", publicName: "verified", isSignal: true, isRequired: false, transformFunction: null } }, ngImport: i0, template: "<div class=\"fic\">\n @if (product() === 'flight') {\n\n <!-- \u2500\u2500 Verified pill \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500 -->\n @if (verified()) {\n <div class=\"fic__verified-bar\">\n <span class=\"fic__verified-pill\">\n <i class=\"pi pi-verified\"></i> Verified with Airlines\n </span>\n </div>\n }\n\n <!-- \u2500\u2500 Legs \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500 -->\n @for (leg of legs(); track leg.direction + $index; let li = $index) {\n <div class=\"fic__leg\" [class.fic__leg--return]=\"leg.direction === 'Return'\">\n\n <!-- Leg header -->\n <div class=\"fic__leg-header\">\n <div class=\"fic__leg-direction\">\n <i class=\"pi\" [class.pi-arrow-right]=\"leg.direction !== 'Return'\" [class.pi-arrow-left]=\"leg.direction === 'Return'\"></i>\n <span>{{ leg.direction }}</span>\n </div>\n <div class=\"fic__leg-chips\">\n @if (leg.cabin) {\n <span class=\"fic__chip fic__chip--cabin\">{{ leg.cabin }}</span>\n }\n @if (leg.fareBrand) {\n <span class=\"fic__chip fic__chip--fare\">{{ leg.fareBrand }}</span>\n }\n </div>\n </div>\n\n <!-- Airline row -->\n @if (leg.airlineName) {\n <div class=\"fic__airline\">\n <i class=\"pi pi-send\"></i>\n <span>{{ leg.airlineName }}</span>\n </div>\n }\n\n <!-- Route timeline -->\n <div class=\"fic__route\">\n\n <!-- Origin -->\n <div class=\"fic__airport\">\n <div class=\"fic__airport-code\">{{ leg.from }}</div>\n <div class=\"fic__airport-time\">{{ fmtTime(leg.depTime) }}</div>\n <div class=\"fic__airport-date\">{{ fmtShortDate(leg.depTime) }}</div>\n </div>\n\n <!-- Segments + stops -->\n <div class=\"fic__timeline\">\n\n <!-- Top row: all labels -->\n <div class=\"fic__tl-top\">\n @for (seg of leg.durationSegments; track seg.DepartureAirportCode; let si = $index) {\n <div class=\"fic__tl-seg\">\n <span class=\"fic__tl-flt\">{{ leg.segments[si]?.AirlineCode }}{{ leg.segments[si]?.FlightNumber }}</span>\n <span class=\"fic__tl-dur\">{{ fmtMins(seg.SegmentElapsedTimeMinutes) }}</span>\n </div>\n @if (si < leg.stops.length) {\n <div class=\"fic__tl-stop\">\n <span class=\"fic__stop-head\">\n <span class=\"fic__stop-dot\"></span>\n <span class=\"fic__stop-code\">{{ leg.stops[si].StopAirport }}</span>\n </span>\n <span class=\"fic__stop-dur\">{{ fmtMins(leg.stops[si].LayoverDuration) }}</span>\n </div>\n }\n }\n </div>\n\n <!-- Bottom row: single continuous line + one arrow -->\n <div class=\"fic__tl-track\">\n <div class=\"fic__tl-line\"></div>\n <i class=\"pi pi-send fic__tl-plane\"></i>\n </div>\n\n </div>\n\n <!-- Destination -->\n <div class=\"fic__airport fic__airport--right\">\n <div class=\"fic__airport-code\">{{ leg.to }}</div>\n <div class=\"fic__airport-time\">{{ fmtTime(leg.arrTime) }}</div>\n <div class=\"fic__airport-date\">{{ fmtShortDate(leg.arrTime) }}</div>\n </div>\n\n </div>\n </div>\n }\n\n <!-- \u2500\u2500 Passengers \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500 -->\n @if (passengers().length > 0) {\n <div class=\"fic__section\">\n <div class=\"fic__section-label\">\n <i class=\"pi pi-users\"></i> Passengers\n <span class=\"fic__section-count\">{{ passengers().length }}</span>\n </div>\n <div class=\"fic__pax-list\">\n @for (p of passengers(); track p.passengerId) {\n <div class=\"fic__pax\">\n <div class=\"fic__pax-top\">\n <span class=\"fic__pax-badge fic__pax-badge--{{ p.type | lowercase }}\">{{ typeLabel[p.type] ?? p.type }}</span>\n <span class=\"fic__pax-name\">{{ p.name?.prefix }} {{ p.name?.givenName }} {{ p.name?.surName }}</span>\n </div>\n <div class=\"fic__pax-bottom\">\n @if (p.identity?.number) {\n <span class=\"fic__pax-doc\"><i class=\"pi pi-id-card\"></i> {{ p.identity?.number }}</span>\n }\n @if (p.email) {\n <span class=\"fic__pax-email\">{{ p.email }}</span>\n }\n </div>\n </div>\n }\n </div>\n </div>\n }\n\n <!-- \u2500\u2500 Payment \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500 -->\n @if (payment()) {\n <div class=\"fic__payment\">\n <div class=\"fic__payment-main\">\n <i class=\"pi pi-credit-card fic__payment-icon\"></i>\n <span class=\"fic__payment-amount\">{{ payment()?.amount }} {{ payment()?.currency }}</span>\n <span class=\"fic__payment-status\" [class.fic__payment-status--ok]=\"payment()?.status?.key === 'SUCCESS'\">\n <i class=\"pi\" [class.pi-check-circle]=\"payment()?.status?.key === 'SUCCESS'\" [class.pi-clock]=\"payment()?.status?.key !== 'SUCCESS'\"></i>\n {{ payment()?.status?.name }}\n </span>\n </div>\n @if (payment()?.method || payment()?.date) {\n <div class=\"fic__payment-sub\">\n @if (payment()?.method) { <span>{{ payment()?.method }}</span> }\n @if (payment()?.method && payment()?.date) { <span class=\"fic__dot\">\u00B7</span> }\n @if (payment()?.date) { <span>{{ payment()?.date }}</span> }\n </div>\n }\n </div>\n }\n\n\n }\n</div>\n", styles: [".fic{background:#fff;border:1px solid #e2e8f0;border-radius:12px;overflow:hidden;font-family:inherit}.fic__leg{padding:16px 16px 18px;border-bottom:1px solid #e2e8f0}.fic__leg--return{background:#fafbff}.fic__leg-header{display:flex;align-items:center;justify-content:space-between;margin-bottom:8px}.fic__leg-direction{display:flex;align-items:center;gap:6px;font-size:11px;font-weight:800;letter-spacing:.08em;text-transform:uppercase;color:#1e2e4a}.fic__leg-direction .pi{font-size:10px;color:#475569}.fic__leg-chips{display:flex;gap:5px}.fic__chip{font-size:10.5px;font-weight:600;padding:2px 8px;border-radius:12px;letter-spacing:.02em}.fic__chip--cabin{background:#eff6ff;color:#1d4ed8}.fic__chip--fare{background:#fef9c3;color:#854d0e}.fic__airline{display:flex;align-items:center;gap:5px;font-size:12px;color:#64748b;margin-bottom:14px}.fic__airline .pi{font-size:11px;color:#94a3b8;transform:rotate(45deg)}.fic__route{display:flex;align-items:flex-start;gap:0}.fic__airport{display:flex;flex-direction:column;align-items:flex-start;flex-shrink:0}.fic__airport--right{align-items:flex-end}.fic__airport-code{font-size:26px;font-weight:800;color:#1e2e4a;line-height:1}.fic__airport-time{font-size:13px;font-weight:600;color:#334155;margin-top:3px}.fic__airport-date{font-size:10.5px;color:#94a3b8;margin-top:1px}.fic__timeline{flex:1;min-width:0;display:flex;flex-direction:column;gap:4px;margin:0 4px}.fic__tl-top{display:flex;align-items:flex-end;gap:0}.fic__tl-seg{flex:1 1 0;min-width:0;display:flex;flex-direction:column;align-items:center;gap:1px}.fic__tl-flt{font-size:10px;font-weight:700;color:#1e2e4a;background:#f1f5f9;padding:1px 5px;border-radius:4px;white-space:nowrap}.fic__tl-dur{font-size:9.5px;color:#94a3b8;white-space:nowrap}.fic__tl-stop{flex:0 0 auto;display:flex;flex-direction:column;align-items:center;gap:1px;padding:0 6px}.fic__stop-head{display:inline-flex;align-items:center;gap:4px}.fic__tl-track{display:flex;align-items:center;height:22px}.fic__tl-line{flex:1;height:2px;background:#cbd5e1}.fic__tl-plane{font-size:13px;color:#475569;transform:rotate(45deg);flex-shrink:0;margin-left:-2px}.fic__stop-dot{width:7px;height:7px;border-radius:50%;background:#94a3b8;flex-shrink:0}.fic__stop-code{font-size:11px;font-weight:700;color:#334155}.fic__stop-dur{font-size:10.5px;font-weight:600;color:#f59e0b;white-space:nowrap}.fic__section{padding:14px 16px;border-bottom:1px solid #e2e8f0}.fic__section-label{display:flex;align-items:center;gap:5px;font-size:10.5px;font-weight:800;letter-spacing:.07em;text-transform:uppercase;color:#64748b;margin-bottom:10px}.fic__section-label .pi{font-size:11px}.fic__section-count{margin-left:auto;background:#f1f5f9;color:#475569;font-size:10px;font-weight:700;padding:1px 6px;border-radius:10px}.fic__pax-list{display:flex;flex-direction:column;gap:8px}.fic__pax{background:#f8fafc;border-radius:8px;padding:8px 10px;display:flex;flex-direction:column;gap:5px}.fic__pax-top{display:flex;align-items:center;gap:7px}.fic__pax-badge{font-size:9.5px;font-weight:700;letter-spacing:.04em;padding:2px 7px;border-radius:10px;flex-shrink:0;text-transform:uppercase}.fic__pax-badge--adt{background:#dbeafe;color:#1d4ed8}.fic__pax-badge--cnn{background:#dcfce7;color:#15803d}.fic__pax-badge--inf{background:#fce7f3;color:#9d174d}.fic__pax-name{font-size:12.5px;font-weight:600;color:#1e2e4a;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.fic__pax-bottom{display:flex;align-items:center;gap:8px;flex-wrap:wrap}.fic__pax-doc{display:inline-flex;align-items:center;gap:3px;font-size:11px;font-family:monospace;color:#475569;background:#f1f5f9;padding:1px 6px;border-radius:4px}.fic__pax-doc .pi{font-size:10px}.fic__pax-email{font-size:11px;color:#94a3b8;white-space:nowrap;overflow:hidden;text-overflow:ellipsis;max-width:180px}.fic__payment{padding:12px 16px;background:#f8fafc;display:flex;flex-direction:column;gap:4px}.fic__payment-main{display:flex;align-items:center;gap:8px}.fic__payment-icon{font-size:14px;color:#64748b}.fic__payment-amount{font-size:14px;font-weight:700;color:#1e2e4a}.fic__payment-status{display:flex;align-items:center;gap:4px;font-size:12px;font-weight:600;color:#64748b;margin-left:auto}.fic__payment-status .pi{font-size:12px}.fic__payment-status--ok{color:#16a34a}.fic__payment-sub{display:flex;align-items:center;gap:6px;font-size:11.5px;color:#94a3b8;padding-left:22px}.fic__dot{color:#cbd5e1}.fic__verified-bar{display:flex;align-items:center;padding:8px 12px;background:#f0fdf4;border-bottom:1px solid #bbf7d0}.fic__verified-pill{display:inline-flex;align-items:center;gap:5px;padding:3px 10px 3px 7px;background:#16a34a;color:#fff;font-size:11px;font-weight:700;border-radius:20px;letter-spacing:.02em}.fic__verified-pill .pi{font-size:12px}\n"], dependencies: [{ kind: "ngmodule", type: TagModule }, { kind: "pipe", type: LowerCasePipe, name: "lowercase" }] }); }
68
68
  }
69
69
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: SbdFlightItineraryCardComponent, decorators: [{
70
70
  type: Component,
71
- args: [{ selector: 'app-sbd-flight-itinerary-card', standalone: true, imports: [TagModule, UpperCasePipe, LowerCasePipe], template: "<div class=\"fic\">\n @if (product() === 'flight') {\n\n <!-- \u2500\u2500 Verified pill \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500 -->\n @if (verified()) {\n <div class=\"fic__verified-bar\">\n <span class=\"fic__verified-pill\">\n <i class=\"pi pi-verified\"></i> Verified with Airlines\n </span>\n </div>\n }\n\n <!-- \u2500\u2500 Legs \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500 -->\n @for (leg of legs(); track leg.direction + $index; let li = $index) {\n <div class=\"fic__leg\" [class.fic__leg--return]=\"leg.direction === 'Return'\">\n\n <!-- Leg header -->\n <div class=\"fic__leg-header\">\n <div class=\"fic__leg-direction\">\n <i class=\"pi\" [class.pi-arrow-right]=\"leg.direction !== 'Return'\" [class.pi-arrow-left]=\"leg.direction === 'Return'\"></i>\n <span>{{ leg.direction }}</span>\n </div>\n <div class=\"fic__leg-chips\">\n @if (leg.cabin) {\n <span class=\"fic__chip fic__chip--cabin\">{{ leg.cabin }}</span>\n }\n @if (leg.fareBrand) {\n <span class=\"fic__chip fic__chip--fare\">{{ leg.fareBrand }}</span>\n }\n </div>\n </div>\n\n <!-- Airline row -->\n @if (leg.airlineName) {\n <div class=\"fic__airline\">\n <i class=\"pi pi-send\"></i>\n <span>{{ leg.airlineName }}</span>\n </div>\n }\n\n <!-- Route timeline -->\n <div class=\"fic__route\">\n\n <!-- Origin -->\n <div class=\"fic__airport\">\n <div class=\"fic__airport-code\">{{ leg.from }}</div>\n <div class=\"fic__airport-time\">{{ fmtTime(leg.depTime) }}</div>\n <div class=\"fic__airport-date\">{{ fmtShortDate(leg.depTime) }}</div>\n </div>\n\n <!-- Segments + stops -->\n <div class=\"fic__timeline\">\n\n <!-- Top row: all labels -->\n <div class=\"fic__tl-top\">\n @for (seg of leg.durationSegments; track seg.DepartureAirportCode; let si = $index) {\n <div class=\"fic__tl-seg\">\n <span class=\"fic__tl-flt\">{{ leg.segments[si]?.AirlineCode }}{{ leg.segments[si]?.FlightNumber }}</span>\n <span class=\"fic__tl-dur\">{{ fmtMins(seg.SegmentElapsedTimeMinutes) }}</span>\n </div>\n @if (si < leg.stops.length) {\n <div class=\"fic__tl-stop\">\n <span class=\"fic__stop-dot\"></span>\n <span class=\"fic__stop-code\">{{ leg.stops[si].StopAirport }}</span>\n <span class=\"fic__stop-sep\">\u00B7</span>\n <span class=\"fic__stop-dur\">{{ fmtMins(leg.stops[si].LayoverDuration) }}</span>\n </div>\n }\n }\n </div>\n\n <!-- Bottom row: single continuous line + one arrow -->\n <div class=\"fic__tl-track\">\n <div class=\"fic__tl-line\"></div>\n <i class=\"pi pi-send fic__tl-plane\"></i>\n </div>\n\n </div>\n\n <!-- Destination -->\n <div class=\"fic__airport fic__airport--right\">\n <div class=\"fic__airport-code\">{{ leg.to }}</div>\n <div class=\"fic__airport-time\">{{ fmtTime(leg.arrTime) }}</div>\n <div class=\"fic__airport-date\">{{ fmtShortDate(leg.arrTime) }}</div>\n </div>\n\n </div>\n </div>\n }\n\n <!-- \u2500\u2500 Passengers \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500 -->\n @if (passengers().length > 0) {\n <div class=\"fic__section\">\n <div class=\"fic__section-label\">\n <i class=\"pi pi-users\"></i> Passengers\n <span class=\"fic__section-count\">{{ passengers().length }}</span>\n </div>\n <div class=\"fic__pax-list\">\n @for (p of passengers(); track p.passengerId) {\n <div class=\"fic__pax\">\n <div class=\"fic__pax-top\">\n <span class=\"fic__pax-badge fic__pax-badge--{{ p.type | lowercase }}\">{{ typeLabel[p.type] ?? p.type }}</span>\n <span class=\"fic__pax-name\">{{ p.name?.prefix }} {{ p.name?.givenName }} {{ p.name?.surName }}</span>\n </div>\n <div class=\"fic__pax-bottom\">\n @if (p.identity?.number) {\n <span class=\"fic__pax-doc\"><i class=\"pi pi-id-card\"></i> {{ p.identity?.number }}</span>\n }\n @if (p.email) {\n <span class=\"fic__pax-email\">{{ p.email }}</span>\n }\n </div>\n </div>\n }\n </div>\n </div>\n }\n\n <!-- \u2500\u2500 Payment \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500 -->\n @if (payment()) {\n <div class=\"fic__payment\">\n <div class=\"fic__payment-main\">\n <i class=\"pi pi-credit-card fic__payment-icon\"></i>\n <span class=\"fic__payment-amount\">{{ payment()?.amount }} {{ payment()?.currency }}</span>\n <span class=\"fic__payment-status\" [class.fic__payment-status--ok]=\"payment()?.status?.key === 'SUCCESS'\">\n <i class=\"pi\" [class.pi-check-circle]=\"payment()?.status?.key === 'SUCCESS'\" [class.pi-clock]=\"payment()?.status?.key !== 'SUCCESS'\"></i>\n {{ payment()?.status?.name }}\n </span>\n </div>\n @if (payment()?.method || payment()?.date) {\n <div class=\"fic__payment-sub\">\n @if (payment()?.method) { <span>{{ payment()?.method }}</span> }\n @if (payment()?.method && payment()?.date) { <span class=\"fic__dot\">\u00B7</span> }\n @if (payment()?.date) { <span>{{ payment()?.date }}</span> }\n </div>\n }\n </div>\n }\n\n\n }\n</div>\n", styles: [".fic{background:#fff;border:1px solid #e2e8f0;border-radius:12px;overflow:hidden;font-family:inherit}.fic__leg{padding:16px 16px 18px;border-bottom:1px solid #e2e8f0}.fic__leg--return{background:#fafbff}.fic__leg-header{display:flex;align-items:center;justify-content:space-between;margin-bottom:8px}.fic__leg-direction{display:flex;align-items:center;gap:6px;font-size:11px;font-weight:800;letter-spacing:.08em;text-transform:uppercase;color:#1e2e4a}.fic__leg-direction .pi{font-size:10px;color:#475569}.fic__leg-chips{display:flex;gap:5px}.fic__chip{font-size:10.5px;font-weight:600;padding:2px 8px;border-radius:12px;letter-spacing:.02em}.fic__chip--cabin{background:#eff6ff;color:#1d4ed8}.fic__chip--fare{background:#fef9c3;color:#854d0e}.fic__airline{display:flex;align-items:center;gap:5px;font-size:12px;color:#64748b;margin-bottom:14px}.fic__airline .pi{font-size:11px;color:#94a3b8;transform:rotate(45deg)}.fic__route{display:flex;align-items:flex-start;gap:0}.fic__airport{display:flex;flex-direction:column;align-items:flex-start;flex-shrink:0}.fic__airport--right{align-items:flex-end}.fic__airport-code{font-size:26px;font-weight:800;color:#1e2e4a;line-height:1}.fic__airport-time{font-size:13px;font-weight:600;color:#334155;margin-top:3px}.fic__airport-date{font-size:10.5px;color:#94a3b8;margin-top:1px}.fic__timeline{flex:1;display:flex;flex-direction:column;gap:4px;margin:0 4px}.fic__tl-top{display:flex;align-items:flex-end;gap:0}.fic__tl-seg{flex:1;display:flex;flex-direction:column;align-items:center;gap:1px}.fic__tl-flt{font-size:10px;font-weight:700;color:#1e2e4a;background:#f1f5f9;padding:1px 5px;border-radius:4px;white-space:nowrap}.fic__tl-dur{font-size:9.5px;color:#94a3b8;white-space:nowrap}.fic__tl-stop{flex-shrink:0;display:inline-flex;align-items:center;gap:4px;padding:0 8px 1px}.fic__tl-track{display:flex;align-items:center;height:22px}.fic__tl-line{flex:1;height:2px;background:#cbd5e1}.fic__tl-plane{font-size:13px;color:#475569;transform:rotate(45deg);flex-shrink:0;margin-left:-2px}.fic__stop-dot{width:7px;height:7px;border-radius:50%;background:#94a3b8;flex-shrink:0}.fic__stop-code{font-size:11px;font-weight:700;color:#334155}.fic__stop-sep{font-size:11px;color:#cbd5e1}.fic__stop-dur{font-size:11px;font-weight:600;color:#f59e0b}.fic__section{padding:14px 16px;border-bottom:1px solid #e2e8f0}.fic__section-label{display:flex;align-items:center;gap:5px;font-size:10.5px;font-weight:800;letter-spacing:.07em;text-transform:uppercase;color:#64748b;margin-bottom:10px}.fic__section-label .pi{font-size:11px}.fic__section-count{margin-left:auto;background:#f1f5f9;color:#475569;font-size:10px;font-weight:700;padding:1px 6px;border-radius:10px}.fic__pax-list{display:flex;flex-direction:column;gap:8px}.fic__pax{background:#f8fafc;border-radius:8px;padding:8px 10px;display:flex;flex-direction:column;gap:5px}.fic__pax-top{display:flex;align-items:center;gap:7px}.fic__pax-badge{font-size:9.5px;font-weight:700;letter-spacing:.04em;padding:2px 7px;border-radius:10px;flex-shrink:0;text-transform:uppercase}.fic__pax-badge--adt{background:#dbeafe;color:#1d4ed8}.fic__pax-badge--cnn{background:#dcfce7;color:#15803d}.fic__pax-badge--inf{background:#fce7f3;color:#9d174d}.fic__pax-name{font-size:12.5px;font-weight:600;color:#1e2e4a;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.fic__pax-bottom{display:flex;align-items:center;gap:8px;flex-wrap:wrap}.fic__pax-doc{display:inline-flex;align-items:center;gap:3px;font-size:11px;font-family:monospace;color:#475569;background:#f1f5f9;padding:1px 6px;border-radius:4px}.fic__pax-doc .pi{font-size:10px}.fic__pax-email{font-size:11px;color:#94a3b8;white-space:nowrap;overflow:hidden;text-overflow:ellipsis;max-width:180px}.fic__payment{padding:12px 16px;background:#f8fafc;display:flex;flex-direction:column;gap:4px}.fic__payment-main{display:flex;align-items:center;gap:8px}.fic__payment-icon{font-size:14px;color:#64748b}.fic__payment-amount{font-size:14px;font-weight:700;color:#1e2e4a}.fic__payment-status{display:flex;align-items:center;gap:4px;font-size:12px;font-weight:600;color:#64748b;margin-left:auto}.fic__payment-status .pi{font-size:12px}.fic__payment-status--ok{color:#16a34a}.fic__payment-sub{display:flex;align-items:center;gap:6px;font-size:11.5px;color:#94a3b8;padding-left:22px}.fic__dot{color:#cbd5e1}.fic__verified-bar{display:flex;align-items:center;padding:8px 12px;background:#f0fdf4;border-bottom:1px solid #bbf7d0}.fic__verified-pill{display:inline-flex;align-items:center;gap:5px;padding:3px 10px 3px 7px;background:#16a34a;color:#fff;font-size:11px;font-weight:700;border-radius:20px;letter-spacing:.02em}.fic__verified-pill .pi{font-size:12px}\n"] }]
71
+ args: [{ selector: 'app-sbd-flight-itinerary-card', standalone: true, imports: [TagModule, UpperCasePipe, LowerCasePipe], template: "<div class=\"fic\">\n @if (product() === 'flight') {\n\n <!-- \u2500\u2500 Verified pill \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500 -->\n @if (verified()) {\n <div class=\"fic__verified-bar\">\n <span class=\"fic__verified-pill\">\n <i class=\"pi pi-verified\"></i> Verified with Airlines\n </span>\n </div>\n }\n\n <!-- \u2500\u2500 Legs \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500 -->\n @for (leg of legs(); track leg.direction + $index; let li = $index) {\n <div class=\"fic__leg\" [class.fic__leg--return]=\"leg.direction === 'Return'\">\n\n <!-- Leg header -->\n <div class=\"fic__leg-header\">\n <div class=\"fic__leg-direction\">\n <i class=\"pi\" [class.pi-arrow-right]=\"leg.direction !== 'Return'\" [class.pi-arrow-left]=\"leg.direction === 'Return'\"></i>\n <span>{{ leg.direction }}</span>\n </div>\n <div class=\"fic__leg-chips\">\n @if (leg.cabin) {\n <span class=\"fic__chip fic__chip--cabin\">{{ leg.cabin }}</span>\n }\n @if (leg.fareBrand) {\n <span class=\"fic__chip fic__chip--fare\">{{ leg.fareBrand }}</span>\n }\n </div>\n </div>\n\n <!-- Airline row -->\n @if (leg.airlineName) {\n <div class=\"fic__airline\">\n <i class=\"pi pi-send\"></i>\n <span>{{ leg.airlineName }}</span>\n </div>\n }\n\n <!-- Route timeline -->\n <div class=\"fic__route\">\n\n <!-- Origin -->\n <div class=\"fic__airport\">\n <div class=\"fic__airport-code\">{{ leg.from }}</div>\n <div class=\"fic__airport-time\">{{ fmtTime(leg.depTime) }}</div>\n <div class=\"fic__airport-date\">{{ fmtShortDate(leg.depTime) }}</div>\n </div>\n\n <!-- Segments + stops -->\n <div class=\"fic__timeline\">\n\n <!-- Top row: all labels -->\n <div class=\"fic__tl-top\">\n @for (seg of leg.durationSegments; track seg.DepartureAirportCode; let si = $index) {\n <div class=\"fic__tl-seg\">\n <span class=\"fic__tl-flt\">{{ leg.segments[si]?.AirlineCode }}{{ leg.segments[si]?.FlightNumber }}</span>\n <span class=\"fic__tl-dur\">{{ fmtMins(seg.SegmentElapsedTimeMinutes) }}</span>\n </div>\n @if (si < leg.stops.length) {\n <div class=\"fic__tl-stop\">\n <span class=\"fic__stop-head\">\n <span class=\"fic__stop-dot\"></span>\n <span class=\"fic__stop-code\">{{ leg.stops[si].StopAirport }}</span>\n </span>\n <span class=\"fic__stop-dur\">{{ fmtMins(leg.stops[si].LayoverDuration) }}</span>\n </div>\n }\n }\n </div>\n\n <!-- Bottom row: single continuous line + one arrow -->\n <div class=\"fic__tl-track\">\n <div class=\"fic__tl-line\"></div>\n <i class=\"pi pi-send fic__tl-plane\"></i>\n </div>\n\n </div>\n\n <!-- Destination -->\n <div class=\"fic__airport fic__airport--right\">\n <div class=\"fic__airport-code\">{{ leg.to }}</div>\n <div class=\"fic__airport-time\">{{ fmtTime(leg.arrTime) }}</div>\n <div class=\"fic__airport-date\">{{ fmtShortDate(leg.arrTime) }}</div>\n </div>\n\n </div>\n </div>\n }\n\n <!-- \u2500\u2500 Passengers \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500 -->\n @if (passengers().length > 0) {\n <div class=\"fic__section\">\n <div class=\"fic__section-label\">\n <i class=\"pi pi-users\"></i> Passengers\n <span class=\"fic__section-count\">{{ passengers().length }}</span>\n </div>\n <div class=\"fic__pax-list\">\n @for (p of passengers(); track p.passengerId) {\n <div class=\"fic__pax\">\n <div class=\"fic__pax-top\">\n <span class=\"fic__pax-badge fic__pax-badge--{{ p.type | lowercase }}\">{{ typeLabel[p.type] ?? p.type }}</span>\n <span class=\"fic__pax-name\">{{ p.name?.prefix }} {{ p.name?.givenName }} {{ p.name?.surName }}</span>\n </div>\n <div class=\"fic__pax-bottom\">\n @if (p.identity?.number) {\n <span class=\"fic__pax-doc\"><i class=\"pi pi-id-card\"></i> {{ p.identity?.number }}</span>\n }\n @if (p.email) {\n <span class=\"fic__pax-email\">{{ p.email }}</span>\n }\n </div>\n </div>\n }\n </div>\n </div>\n }\n\n <!-- \u2500\u2500 Payment \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500 -->\n @if (payment()) {\n <div class=\"fic__payment\">\n <div class=\"fic__payment-main\">\n <i class=\"pi pi-credit-card fic__payment-icon\"></i>\n <span class=\"fic__payment-amount\">{{ payment()?.amount }} {{ payment()?.currency }}</span>\n <span class=\"fic__payment-status\" [class.fic__payment-status--ok]=\"payment()?.status?.key === 'SUCCESS'\">\n <i class=\"pi\" [class.pi-check-circle]=\"payment()?.status?.key === 'SUCCESS'\" [class.pi-clock]=\"payment()?.status?.key !== 'SUCCESS'\"></i>\n {{ payment()?.status?.name }}\n </span>\n </div>\n @if (payment()?.method || payment()?.date) {\n <div class=\"fic__payment-sub\">\n @if (payment()?.method) { <span>{{ payment()?.method }}</span> }\n @if (payment()?.method && payment()?.date) { <span class=\"fic__dot\">\u00B7</span> }\n @if (payment()?.date) { <span>{{ payment()?.date }}</span> }\n </div>\n }\n </div>\n }\n\n\n }\n</div>\n", styles: [".fic{background:#fff;border:1px solid #e2e8f0;border-radius:12px;overflow:hidden;font-family:inherit}.fic__leg{padding:16px 16px 18px;border-bottom:1px solid #e2e8f0}.fic__leg--return{background:#fafbff}.fic__leg-header{display:flex;align-items:center;justify-content:space-between;margin-bottom:8px}.fic__leg-direction{display:flex;align-items:center;gap:6px;font-size:11px;font-weight:800;letter-spacing:.08em;text-transform:uppercase;color:#1e2e4a}.fic__leg-direction .pi{font-size:10px;color:#475569}.fic__leg-chips{display:flex;gap:5px}.fic__chip{font-size:10.5px;font-weight:600;padding:2px 8px;border-radius:12px;letter-spacing:.02em}.fic__chip--cabin{background:#eff6ff;color:#1d4ed8}.fic__chip--fare{background:#fef9c3;color:#854d0e}.fic__airline{display:flex;align-items:center;gap:5px;font-size:12px;color:#64748b;margin-bottom:14px}.fic__airline .pi{font-size:11px;color:#94a3b8;transform:rotate(45deg)}.fic__route{display:flex;align-items:flex-start;gap:0}.fic__airport{display:flex;flex-direction:column;align-items:flex-start;flex-shrink:0}.fic__airport--right{align-items:flex-end}.fic__airport-code{font-size:26px;font-weight:800;color:#1e2e4a;line-height:1}.fic__airport-time{font-size:13px;font-weight:600;color:#334155;margin-top:3px}.fic__airport-date{font-size:10.5px;color:#94a3b8;margin-top:1px}.fic__timeline{flex:1;min-width:0;display:flex;flex-direction:column;gap:4px;margin:0 4px}.fic__tl-top{display:flex;align-items:flex-end;gap:0}.fic__tl-seg{flex:1 1 0;min-width:0;display:flex;flex-direction:column;align-items:center;gap:1px}.fic__tl-flt{font-size:10px;font-weight:700;color:#1e2e4a;background:#f1f5f9;padding:1px 5px;border-radius:4px;white-space:nowrap}.fic__tl-dur{font-size:9.5px;color:#94a3b8;white-space:nowrap}.fic__tl-stop{flex:0 0 auto;display:flex;flex-direction:column;align-items:center;gap:1px;padding:0 6px}.fic__stop-head{display:inline-flex;align-items:center;gap:4px}.fic__tl-track{display:flex;align-items:center;height:22px}.fic__tl-line{flex:1;height:2px;background:#cbd5e1}.fic__tl-plane{font-size:13px;color:#475569;transform:rotate(45deg);flex-shrink:0;margin-left:-2px}.fic__stop-dot{width:7px;height:7px;border-radius:50%;background:#94a3b8;flex-shrink:0}.fic__stop-code{font-size:11px;font-weight:700;color:#334155}.fic__stop-dur{font-size:10.5px;font-weight:600;color:#f59e0b;white-space:nowrap}.fic__section{padding:14px 16px;border-bottom:1px solid #e2e8f0}.fic__section-label{display:flex;align-items:center;gap:5px;font-size:10.5px;font-weight:800;letter-spacing:.07em;text-transform:uppercase;color:#64748b;margin-bottom:10px}.fic__section-label .pi{font-size:11px}.fic__section-count{margin-left:auto;background:#f1f5f9;color:#475569;font-size:10px;font-weight:700;padding:1px 6px;border-radius:10px}.fic__pax-list{display:flex;flex-direction:column;gap:8px}.fic__pax{background:#f8fafc;border-radius:8px;padding:8px 10px;display:flex;flex-direction:column;gap:5px}.fic__pax-top{display:flex;align-items:center;gap:7px}.fic__pax-badge{font-size:9.5px;font-weight:700;letter-spacing:.04em;padding:2px 7px;border-radius:10px;flex-shrink:0;text-transform:uppercase}.fic__pax-badge--adt{background:#dbeafe;color:#1d4ed8}.fic__pax-badge--cnn{background:#dcfce7;color:#15803d}.fic__pax-badge--inf{background:#fce7f3;color:#9d174d}.fic__pax-name{font-size:12.5px;font-weight:600;color:#1e2e4a;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.fic__pax-bottom{display:flex;align-items:center;gap:8px;flex-wrap:wrap}.fic__pax-doc{display:inline-flex;align-items:center;gap:3px;font-size:11px;font-family:monospace;color:#475569;background:#f1f5f9;padding:1px 6px;border-radius:4px}.fic__pax-doc .pi{font-size:10px}.fic__pax-email{font-size:11px;color:#94a3b8;white-space:nowrap;overflow:hidden;text-overflow:ellipsis;max-width:180px}.fic__payment{padding:12px 16px;background:#f8fafc;display:flex;flex-direction:column;gap:4px}.fic__payment-main{display:flex;align-items:center;gap:8px}.fic__payment-icon{font-size:14px;color:#64748b}.fic__payment-amount{font-size:14px;font-weight:700;color:#1e2e4a}.fic__payment-status{display:flex;align-items:center;gap:4px;font-size:12px;font-weight:600;color:#64748b;margin-left:auto}.fic__payment-status .pi{font-size:12px}.fic__payment-status--ok{color:#16a34a}.fic__payment-sub{display:flex;align-items:center;gap:6px;font-size:11.5px;color:#94a3b8;padding-left:22px}.fic__dot{color:#cbd5e1}.fic__verified-bar{display:flex;align-items:center;padding:8px 12px;background:#f0fdf4;border-bottom:1px solid #bbf7d0}.fic__verified-pill{display:inline-flex;align-items:center;gap:5px;padding:3px 10px 3px 7px;background:#16a34a;color:#fff;font-size:11px;font-weight:700;border-radius:20px;letter-spacing:.02em}.fic__verified-pill .pi{font-size:12px}\n"] }]
72
72
  }] });
73
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZmxpZ2h0LWl0aW5lcmFyeS1jYXJkLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL3NtYXJ0LWJvb2tpbmctZGFzaGJvYXJkL3NyYy9saWIvY29tcG9uZW50cy9mbGlnaHQtaXRpbmVyYXJ5LWNhcmQvZmxpZ2h0LWl0aW5lcmFyeS1jYXJkLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL3NtYXJ0LWJvb2tpbmctZGFzaGJvYXJkL3NyYy9saWIvY29tcG9uZW50cy9mbGlnaHQtaXRpbmVyYXJ5LWNhcmQvZmxpZ2h0LWl0aW5lcmFyeS1jYXJkLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxTQUFTLEVBQUUsUUFBUSxFQUFFLEtBQUssRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUMzRCxPQUFPLEVBQUUsYUFBYSxFQUFFLGFBQWEsRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBQy9ELE9BQU8sRUFBRSxTQUFTLEVBQUUsTUFBTSxhQUFhLENBQUM7O0FBVXhDLE1BQU0sT0FBTywrQkFBK0I7SUFQNUM7UUFRRSw4REFBOEQ7UUFDOUQsU0FBSSxHQUFNLEtBQUssQ0FBTSxJQUFJLENBQUMsQ0FBQztRQUMzQixZQUFPLEdBQUcsS0FBSyxDQUFDLFFBQVEsRUFBZSxDQUFDO1FBQ3hDLGFBQVEsR0FBRyxLQUFLLENBQUMsS0FBSyxDQUFDLENBQUM7UUFFeEIsOERBQThEO1FBQ3RELE9BQUUsR0FBRyxRQUFRLENBQUMsR0FBRyxFQUFFLENBQUMsSUFBSSxDQUFDLElBQUksRUFBRSxFQUFFLElBQUksRUFBRSxZQUFZLENBQUMsQ0FBQztRQUU3RCxTQUFJLEdBQUcsUUFBUSxDQUFDLEdBQUcsRUFBRTtZQUNuQixNQUFNLENBQUMsR0FBRyxJQUFJLENBQUMsRUFBRSxFQUFFLENBQUM7WUFDcEIsSUFBSSxDQUFDLENBQUM7Z0JBQUUs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QXZEVSwrQkFBK0I7bUdBQS9CLCtCQUErQix3ZENaNUMsODBNQThJQSw0bkpEdElZLFNBQVMsMEJBQWlCLGFBQWE7OzRGQUl0QywrQkFBK0I7a0JBUDNDLFNBQVM7K0JBQ0UsK0JBQStCLGNBQzdCLElBQUksV0FDUCxDQUFDLFNBQVMsRUFBRSxhQUFhLEVBQUUsYUFBYSxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ29tcG9uZW50LCBjb21wdXRlZCwgaW5wdXQgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IFVwcGVyQ2FzZVBpcGUsIExvd2VyQ2FzZVBpcGUgfSBmcm9tICdAYW5ndWxhci9jb21tb24nO1xuaW1wb3J0IHsgVGFnTW9kdWxlIH0gZnJvbSAncHJpbWVuZy90YWcnO1xuaW1wb3J0IHsgUHJvZHVjdFR5cGUgfSBmcm9tICcuLi8uLi9tb2RlbHMvYm9va2luZy50eXBlcyc7XG5cbkBDb21wb25lbnQoe1xuICBzZWxlY3RvcjogJ2FwcC1zYmQtZmxpZ2h0LWl0aW5lcmFyeS1jYXJkJyxcbiAgc3RhbmRhbG9uZTogdHJ1ZSxcbiAgaW1wb3J0czogW1RhZ01vZHVsZSwgVXBwZXJDYXNlUGlwZSwgTG93ZXJDYXNlUGlwZV0sXG4gIHRlbXBsYXRlVXJsOiAnLi9mbGlnaHQtaXRpbmVyYXJ5LWNhcmQuY29tcG9uZW50Lmh0bWwnLFxuICBzdHlsZVVybDogJy4vZmxpZ2h0LWl0aW5lcmFyeS1jYXJkLmNvbXBvbmVudC5zY3NzJyxcbn0pXG5leHBvcnQgY2xhc3MgU2JkRmxpZ2h0SXRpbmVyYXJ5Q2FyZENvbXBvbmVudCB7XG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tZXhwbGljaXQtYW55XG4gIGRhdGEgICAgPSBpbnB1dDxhbnk+KG51bGwpO1xuICBwcm9kdWN0ID0gaW5wdXQucmVxdWlyZWQ8UHJvZHVjdFR5cGU+KCk7XG4gIHZlcmlmaWVkID0gaW5wdXQoZmFsc2UpO1xuXG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tZXhwbGljaXQtYW55XG4gIHByaXZhdGUgYmkgPSBjb21wdXRlZCgoKSA9PiB0aGlzLmRhdGEoKT8uZGF0YT8uYm9va2luZ19pbmZvKTtcblxuICBsZWdzID0gY29tcHV0ZWQoKCkgPT4ge1xuICAgIGNvbnN0IGQgPSB0aGlzLmJpKCk7XG4gICAgaWYgKCFkKSByZXR1cm4gW107XG4gICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby1leHBsaWNpdC1hbnlcbiAgICByZXR1cm4gKGQubGVnX2luZm8gPz8gW10pLm1hcCgobGVnOiBhbnksIGk6IG51bWJlcikgPT4gKHtcbiAgICAgIGRpcmVjdGlvbjogbGVnLkxlZ0RpcmVjdGlvbmFsaXR5IGFzIHN0cmluZyxcbiAgICAgIGFpcmxpbmVOYW1lOiAobGVnLkxlZ0FpcmxpbmVzTmFtZXMgPz8gW10pLmpvaW4oJywgJyksXG4gICAgICBjYWJpbjogbGVnLkxlZ0NhYmlucz8uWzBdPy5OYW1lID8/ICcnLFxuICAgICAgZmFyZUJyYW5kOiBsZWcuZmFyZUJyYW5kPy5uYW1lID8/ICcnLFxuICAgICAgZnJvbTogbGVnLkxlZ0RlcGFydHVyZUFpcnBvcnRDb2RlIGFzIHN0cmluZyxcbiAgICAgIHRvOiBsZWcuTGVnQXJyaXZhbEFpcnBvcnRDb2RlIGFzIHN0cmluZyxcbiAgICAgIGRlcFRpbWU6IGxlZy5MZWdEZXBhcnR1cmVEYXRlVGltZSBhcyBzdHJpbmcsXG4gICAgICBhcnJUaW1lOiBsZWcuTGVnQXJyaXZhbERhdGVUaW1lIGFzIHN0cmluZyxcbiAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tZXhwbGljaXQtYW55XG4gICAgICBzdG9wczogKGxlZy5TdG9wcyA/PyBbXSkgYXMgYW55W10sXG4gICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25vLWV4cGxpY2l0LWFueVxuICAgICAgc2VnbWVudHM6IChkLmFpcmxpbmVfaW5mbz8uW2ldPy5TZWdtZW50cyA/PyBbXSkgYXMgYW55W10sXG4gICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25vLWV4cGxpY2l0LWFueVxuICAgICAgZHVyYXRpb25TZWdtZW50czogKGQuZHVyYXRpb24/LmxlZ3M/LltpXT8uU2VnbWVudHMgPz8gW10pIGFzIGFueVtdLFxuICAgIH0pKTtcbiAgfSk7XG5cbiAgcGFzc2VuZ2VycyA9IGNvbXB1dGVkKCgpID0+XG4gICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby1leHBsaWNpdC1hbnlcbiAgICAodGhpcy5iaSgpPy5wYXNzZW5nZXJfaW5mbz8ucGFzc2VuZ2VycyA/PyBbXSkgYXMgYW55W11cbiAgKTtcblxuICBwYXltZW50ID0gY29tcHV0ZWQoKCkgPT4gdGhpcy5iaSgpPy5wYXltZW50X3N0YXR1cyk7XG5cbiAgcmVhZG9ubHkgdHlwZUxhYmVsOiBSZWNvcmQ8c3RyaW5nLCBzdHJpbmc+ID0geyBBRFQ6ICdBZHVsdCcsIENOTjogJ0NoaWxkJywgSU5GOiAnSW5mYW50JyB9O1xuXG4gIGZtdFRpbWUoZHQ6IHN0cmluZyk6IHN0cmluZyB7XG4gICAgaWYgKCFkdCkgcmV0dXJuICfigJQnO1xuICAgIHRyeSB7IHJldHVybiBuZXcgRGF0ZShkdCkudG9Mb2NhbGVUaW1lU3RyaW5nKCdlbi1HQicsIHsgaG91cjogJzItZGlnaXQnLCBtaW51dGU6ICcyLWRpZ2l0JyB9KTsgfVxuICAgIGNhdGNoIHsgcmV0dXJuIGR0OyB9XG4gIH1cblxuICBmbXRTaG9ydERhdGUoZHQ6IHN0cmluZyk6IHN0cmluZyB7XG4gICAgaWYgKCFkdCkgcmV0dXJuICfigJQnO1xuICAgIHRyeSB7IHJldHVybiBuZXcgRGF0ZShkdCkudG9Mb2NhbGVEYXRlU3RyaW5nKCdlbi1HQicsIHsgZGF5OiAnMi1kaWdpdCcsIG1vbnRoOiAnc2hvcnQnIH0pOyB9XG4gICAgY2F0Y2ggeyByZXR1cm4gZHQ7IH1cbiAgfVxuXG4gIGZtdE1pbnMobWluczogbnVtYmVyKTogc3RyaW5nIHtcbiAgICBpZiAobWlucyA9PSBudWxsKSByZXR1cm4gJ+KAlCc7XG4gICAgcmV0dXJuIGAke01hdGguZmxvb3IobWlucyAvIDYwKX1oICR7bWlucyAlIDYwfW1gO1xuICB9XG59XG4iLCI8ZGl2IGNsYXNzPVwiZmljXCI+XG4gIEBpZiAocHJvZHVjdCgpID09PSAnZmxpZ2h0Jykge1xuXG4gICAgPCEtLSDilIDilIAgVmVyaWZpZWQgcGlsbCDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIAgLS0+XG4gICAgQGlmICh2ZXJpZmllZCgpKSB7XG4gICAgICA8ZGl2IGNsYXNzPVwiZmljX192ZXJpZmllZC1iYXJcIj5cbiAgICAgICAgPHNwYW4gY2xhc3M9XCJmaWNfX3ZlcmlmaWVkLXBpbGxcIj5cbiAgICAgICAgICA8aSBjbGFzcz1cInBpIHBpLXZlcmlmaWVkXCI+PC9pPiBWZXJpZmllZCB3aXRoIEFpcmxpbmVzXG4gICAgICAgIDwvc3Bhbj5cbiAgICAgIDwvZGl2PlxuICAgIH1cblxuICAgIDwhLS0g4pSA4pSAIExlZ3Mg4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSAIC0tPlxuICAgIEBmb3IgKGxlZyBvZiBsZWdzKCk7IHRyYWNrIGxlZy5kaXJlY3Rpb24gKyAkaW5kZXg7IGxldCBsaSA9ICRpbmRleCkge1xuICAgICAgPGRpdiBjbGFzcz1cImZpY19fbGVnXCIgW2NsYXNzLmZpY19fbGVnLS1yZXR1cm5dPVwibGVnLmRpcmVjdGlvbiA9PT0gJ1JldHVybidcIj5cblxuICAgICAgICA8IS0tIExlZyBoZWFkZXIgLS0+XG4gICAgICAgIDxkaXYgY2xhc3M9XCJmaWNfX2xlZy1oZWFkZXJcIj5cbiAgICAgICAgICA8ZGl2IGNsYXNzPVwiZmljX19sZWctZGlyZWN0aW9uXCI+XG4gICAgICAgICAgICA8aSBjbGFzcz1cInBpXCIgW2NsYXNzLnBpLWFycm93LXJpZ2h0XT1cImxlZy5kaXJlY3Rpb24gIT09ICdSZXR1cm4nXCIgW2NsYXNzLnBpLWFycm93LWxlZnRdPVwibGVnLmRpcmVjdGlvbiA9PT0gJ1JldHVybidcIj48L2k+XG4gICAgICAgICAgICA8c3Bhbj57eyBsZWcuZGlyZWN0aW9uIH19PC9zcGFuPlxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgIDxkaXYgY2xhc3M9XCJmaWNfX2xlZy1jaGlwc1wiPlxuICAgICAgICAgICAgQGlmIChsZWcuY2FiaW4pIHtcbiAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJmaWNfX2NoaXAgZmljX19jaGlwLS1jYWJpblwiPnt7IGxlZy5jYWJpbiB9fTwvc3Bhbj5cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIEBpZiAobGVnLmZhcmVCcmFuZCkge1xuICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cImZpY19fY2hpcCBmaWNfX2NoaXAtLWZhcmVcIj57eyBsZWcuZmFyZUJyYW5kIH19PC9zcGFuPlxuICAgICAgICAgICAgfVxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICA8L2Rpdj5cblxuICAgICAgICA8IS0tIEFpcmxpbmUgcm93IC0tPlxuICAgICAgICBAaWYgKGxlZy5haXJsaW5lTmFtZSkge1xuICAgICAgICAgIDxkaXYgY2xhc3M9XCJmaWNfX2FpcmxpbmVcIj5cbiAgICAgICAgICAgIDxpIGNsYXNzPVwicGkgcGktc2VuZFwiPjwvaT5cbiAgICAgICAgICAgIDxzcGFuPnt7IGxlZy5haXJsaW5lTmFtZSB9fTwvc3Bhbj5cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgfVxuXG4gICAgICAgIDwhLS0gUm91dGUgdGltZWxpbmUgLS0+XG4gICAgICAgIDxkaXYgY2xhc3M9XCJmaWNfX3JvdXRlXCI+XG5cbiAgICAgICAgICA8IS0tIE9yaWdpbiAtLT5cbiAgICAgICAgICA8ZGl2IGNsYXNzPVwiZmljX19haXJwb3J0XCI+XG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZmljX19haXJwb3J0LWNvZGVcIj57eyBsZWcuZnJvbSB9fTwvZGl2PlxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cImZpY19fYWlycG9ydC10aW1lXCI+e3sgZm10VGltZShsZWcuZGVwVGltZSkgfX08L2Rpdj5cbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJmaWNfX2FpcnBvcnQtZGF0ZVwiPnt7IGZtdFNob3J0RGF0ZShsZWcuZGVwVGltZSkgfX08L2Rpdj5cbiAgICAgICAgICA8L2Rpdj5cblxuICAgICAgICAgIDwhLS0gU2VnbWVudHMgKyBzdG9wcyAtLT5cbiAgICAgICAgICA8ZGl2IGNsYXNzPVwiZmljX190aW1lbGluZVwiPlxuXG4gICAgICAgICAgICA8IS0tIFRvcCByb3c6IGFsbCBsYWJlbHMgLS0+XG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZmljX190bC10b3BcIj5cbiAgICAgICAgICAgICAgQGZvciAoc2VnIG9mIGxlZy5kdXJhdGlvblNlZ21lbnRzOyB0cmFjayBzZWcuRGVwYXJ0dXJlQWlycG9ydENvZGU7IGxldCBzaSA9ICRpbmRleCkge1xuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJmaWNfX3RsLXNlZ1wiPlxuICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJmaWNfX3RsLWZsdFwiPnt7IGxlZy5zZWdtZW50c1tzaV0/LkFpcmxpbmVDb2RlIH19e3sgbGVnLnNlZ21lbnRzW3NpXT8uRmxpZ2h0TnVtYmVyIH19PC9zcGFuPlxuICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJmaWNfX3RsLWR1clwiPnt7IGZtdE1pbnMoc2VnLlNlZ21lbnRFbGFwc2VkVGltZU1pbnV0ZXMpIH19PC9zcGFuPlxuICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgIEBpZiAoc2kgPCBsZWcuc3RvcHMubGVuZ3RoKSB7XG4gICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZmljX190bC1zdG9wXCI+XG4gICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwiZmljX19zdG9wLWRvdFwiPjwvc3Bhbj5cbiAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJmaWNfX3N0b3AtY29kZVwiPnt7IGxlZy5zdG9wc1tzaV0uU3RvcEFpcnBvcnQgfX08L3NwYW4+XG4gICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwiZmljX19zdG9wLXNlcFwiPsK3PC9zcGFuPlxuICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cImZpY19fc3RvcC1kdXJcIj57eyBmbXRNaW5zKGxlZy5zdG9wc1tzaV0uTGF5b3ZlckR1cmF0aW9uKSB9fTwvc3Bhbj5cbiAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgPC9kaXY+XG5cbiAgICAgICAgICAgIDwhLS0gQm90dG9tIHJvdzogc2luZ2xlIGNvbnRpbnVvdXMgbGluZSArIG9uZSBhcnJvdyAtLT5cbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJmaWNfX3RsLXRyYWNrXCI+XG4gICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJmaWNfX3RsLWxpbmVcIj48L2Rpdj5cbiAgICAgICAgICAgICAgPGkgY2xhc3M9XCJwaSBwaS1zZW5kIGZpY19fdGwtcGxhbmVcIj48L2k+XG4gICAgICAgICAgICA8L2Rpdj5cblxuICAgICAgICAgIDwvZGl2PlxuXG4gICAgICAgICAgPCEtLSBEZXN0aW5hdGlvbiAtLT5cbiAgICAgICAgICA8ZGl2IGNsYXNzPVwiZmljX19haXJwb3J0IGZpY19fYWlycG9ydC0tcmlnaHRcIj5cbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJmaWNfX2FpcnBvcnQtY29kZVwiPnt7IGxlZy50byB9fTwvZGl2PlxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cImZpY19fYWlycG9ydC10aW1lXCI+e3sgZm10VGltZShsZWcuYXJyVGltZSkgfX08L2Rpdj5cbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJmaWNfX2FpcnBvcnQtZGF0ZVwiPnt7IGZtdFNob3J0RGF0ZShsZWcuYXJyVGltZSkgfX08L2Rpdj5cbiAgICAgICAgICA8L2Rpdj5cblxuICAgICAgICA8L2Rpdj5cbiAgICAgIDwvZGl2PlxuICAgIH1cblxuICAgIDwhLS0g4pSA4pSAIFBhc3NlbmdlcnMg4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSAIC0tPlxuICAgIEBpZiAocGFzc2VuZ2VycygpLmxlbmd0aCA+IDApIHtcbiAgICAgIDxkaXYgY2xhc3M9XCJmaWNfX3NlY3Rpb25cIj5cbiAgICAgICAgPGRpdiBjbGFzcz1cImZpY19fc2VjdGlvbi1sYWJlbFwiPlxuICAgICAgICAgIDxpIGNsYXNzPVwicGkgcGktdXNlcnNcIj48L2k+IFBhc3NlbmdlcnNcbiAgICAgICAgICA8c3BhbiBjbGFzcz1cImZpY19fc2VjdGlvbi1jb3VudFwiPnt7IHBhc3NlbmdlcnMoKS5sZW5ndGggfX08L3NwYW4+XG4gICAgICAgIDwvZGl2PlxuICAgICAgICA8ZGl2IGNsYXNzPVwiZmljX19wYXgtbGlzdFwiPlxuICAgICAgICAgIEBmb3IgKHAgb2YgcGFzc2VuZ2VycygpOyB0cmFjayBwLnBhc3NlbmdlcklkKSB7XG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZmljX19wYXhcIj5cbiAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImZpY19fcGF4LXRvcFwiPlxuICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwiZmljX19wYXgtYmFkZ2UgZmljX19wYXgtYmFkZ2UtLXt7IHAudHlwZSB8IGxvd2VyY2FzZSB9fVwiPnt7IHR5cGVMYWJlbFtwLnR5cGVdID8/IHAudHlwZSB9fTwvc3Bhbj5cbiAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cImZpY19fcGF4LW5hbWVcIj57eyBwLm5hbWU/LnByZWZpeCB9fSB7eyBwLm5hbWU/LmdpdmVuTmFtZSB9fSB7eyBwLm5hbWU/LnN1ck5hbWUgfX08L3NwYW4+XG4gICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZmljX19wYXgtYm90dG9tXCI+XG4gICAgICAgICAgICAgICAgQGlmIChwLmlkZW50aXR5Py5udW1iZXIpIHtcbiAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwiZmljX19wYXgtZG9jXCI+PGkgY2xhc3M9XCJwaSBwaS1pZC1jYXJkXCI+PC9pPiB7eyBwLmlkZW50aXR5Py5udW1iZXIgfX08L3NwYW4+XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIEBpZiAocC5lbWFpbCkge1xuICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJmaWNfX3BheC1lbWFpbFwiPnt7IHAuZW1haWwgfX08L3NwYW4+XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgIH1cbiAgICAgICAgPC9kaXY+XG4gICAgICA8L2Rpdj5cbiAgICB9XG5cbiAgICA8IS0tIOKUgOKUgCBQYXltZW50IOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgCAtLT5cbiAgICBAaWYgKHBheW1lbnQoKSkge1xuICAgICAgPGRpdiBjbGFzcz1cImZpY19fcGF5bWVudFwiPlxuICAgICAgICA8ZGl2IGNsYXNzPVwiZmljX19wYXltZW50LW1haW5cIj5cbiAgICAgICAgICA8aSBjbGFzcz1cInBpIHBpLWNyZWRpdC1jYXJkIGZpY19fcGF5bWVudC1pY29uXCI+PC9pPlxuICAgICAgICAgIDxzcGFuIGNsYXNzPVwiZmljX19wYXltZW50LWFtb3VudFwiPnt7IHBheW1lbnQoKT8uYW1vdW50IH19IHt7IHBheW1lbnQoKT8uY3VycmVuY3kgfX08L3NwYW4+XG4gICAgICAgICAgPHNwYW4gY2xhc3M9XCJmaWNfX3BheW1lbnQtc3RhdHVzXCIgW2NsYXNzLmZpY19fcGF5bWVudC1zdGF0dXMtLW9rXT1cInBheW1lbnQoKT8uc3RhdHVzPy5rZXkgPT09ICdTVUNDRVNTJ1wiPlxuICAgICAgICAgICAgPGkgY2xhc3M9XCJwaVwiIFtjbGFzcy5waS1jaGVjay1jaXJjbGVdPVwicGF5bWVudCgpPy5zdGF0dXM/LmtleSA9PT0gJ1NVQ0NFU1MnXCIgW2NsYXNzLnBpLWNsb2NrXT1cInBheW1lbnQoKT8uc3RhdHVzPy5rZXkgIT09ICdTVUNDRVNTJ1wiPjwvaT5cbiAgICAgICAgICAgIHt7IHBheW1lbnQoKT8uc3RhdHVzPy5uYW1lIH19XG4gICAgICAgICAgPC9zcGFuPlxuICAgICAgICA8L2Rpdj5cbiAgICAgICAgQGlmIChwYXltZW50KCk/Lm1ldGhvZCB8fCBwYXltZW50KCk/LmRhdGUpIHtcbiAgICAgICAgICA8ZGl2IGNsYXNzPVwiZmljX19wYXltZW50LXN1YlwiPlxuICAgICAgICAgICAgQGlmIChwYXltZW50KCk/Lm1ldGhvZCkgeyA8c3Bhbj57eyBwYXltZW50KCk/Lm1ldGhvZCB9fTwvc3Bhbj4gfVxuICAgICAgICAgICAgQGlmIChwYXltZW50KCk/Lm1ldGhvZCAmJiBwYXltZW50KCk/LmRhdGUpIHsgPHNwYW4gY2xhc3M9XCJmaWNfX2RvdFwiPsK3PC9zcGFuPiB9XG4gICAgICAgICAgICBAaWYgKHBheW1lbnQoKT8uZGF0ZSkgeyA8c3Bhbj57eyBwYXltZW50KCk/LmRhdGUgfX08L3NwYW4+IH1cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgfVxuICAgICAgPC9kaXY+XG4gICAgfVxuXG5cbiAgfVxuPC9kaXY+XG4iXX0=
73
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZmxpZ2h0LWl0aW5lcmFyeS1jYXJkLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL3NtYXJ0LWJvb2tpbmctZGFzaGJvYXJkL3NyYy9saWIvY29tcG9uZW50cy9mbGlnaHQtaXRpbmVyYXJ5LWNhcmQvZmxpZ2h0LWl0aW5lcmFyeS1jYXJkLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL3NtYXJ0LWJvb2tpbmctZGFzaGJvYXJkL3NyYy9saWIvY29tcG9uZW50cy9mbGlnaHQtaXRpbmVyYXJ5LWNhcmQvZmxpZ2h0LWl0aW5lcmFyeS1jYXJkLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxTQUFTLEVBQUUsUUFBUSxFQUFFLEtBQUssRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUMzRCxPQUFPLEVBQUUsYUFBYSxFQUFFLGFBQWEsRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBQy9ELE9BQU8sRUFBRSxTQUFTLEVBQUUsTUFBTSxhQUFhLENBQUM7O0FBVXhDLE1BQU0sT0FBTywrQkFBK0I7SUFQNUM7UUFRRSw4REFBOEQ7UUFDOUQsU0FBSSxHQUFNLEtBQUssQ0FBTSxJQUFJLENBQUMsQ0FBQztRQUMzQixZQUFPLEdBQUcsS0FBSyxDQUFDLFFBQVEsRUFBZSxDQUFDO1FBQ3hDLGFBQVEsR0FBRyxLQUFLLENBQUMsS0FBSyxDQUFDLENBQUM7UUFFeEIsOERBQThEO1FBQ3RELE9BQUUsR0FBRyxRQUFRLENBQUMsR0FBRyxFQUFFLENBQUMsSUFBSSxDQUFDLElBQUksRUFBRSxFQUFFLElBQUksRUFBRSxZQUFZLENBQUMsQ0FBQztRQUU3RCxTQUFJLEdBQUcsUUFBUSxDQUFDLEdBQUcsRUFBRTtZQUNuQixNQUFNLENBQUMsR0FBRyxJQUFJLENBQUMsRUFBRSxFQUFFLENBQUM7WUFDcEIsSUFBSSxDQUFDLENBQUM7Z0JBQUUs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QXZEVSwrQkFBK0I7bUdBQS9CLCtCQUErQix3ZENaNUMsbTJNQStJQSwyc0pEdklZLFNBQVMsMEJBQWlCLGFBQWE7OzRGQUl0QywrQkFBK0I7a0JBUDNDLFNBQVM7K0JBQ0UsK0JBQStCLGNBQzdCLElBQUksV0FDUCxDQUFDLFNBQVMsRUFBRSxhQUFhLEVBQUUsYUFBYSxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ29tcG9uZW50LCBjb21wdXRlZCwgaW5wdXQgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IFVwcGVyQ2FzZVBpcGUsIExvd2VyQ2FzZVBpcGUgfSBmcm9tICdAYW5ndWxhci9jb21tb24nO1xuaW1wb3J0IHsgVGFnTW9kdWxlIH0gZnJvbSAncHJpbWVuZy90YWcnO1xuaW1wb3J0IHsgUHJvZHVjdFR5cGUgfSBmcm9tICcuLi8uLi9tb2RlbHMvYm9va2luZy50eXBlcyc7XG5cbkBDb21wb25lbnQoe1xuICBzZWxlY3RvcjogJ2FwcC1zYmQtZmxpZ2h0LWl0aW5lcmFyeS1jYXJkJyxcbiAgc3RhbmRhbG9uZTogdHJ1ZSxcbiAgaW1wb3J0czogW1RhZ01vZHVsZSwgVXBwZXJDYXNlUGlwZSwgTG93ZXJDYXNlUGlwZV0sXG4gIHRlbXBsYXRlVXJsOiAnLi9mbGlnaHQtaXRpbmVyYXJ5LWNhcmQuY29tcG9uZW50Lmh0bWwnLFxuICBzdHlsZVVybDogJy4vZmxpZ2h0LWl0aW5lcmFyeS1jYXJkLmNvbXBvbmVudC5zY3NzJyxcbn0pXG5leHBvcnQgY2xhc3MgU2JkRmxpZ2h0SXRpbmVyYXJ5Q2FyZENvbXBvbmVudCB7XG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tZXhwbGljaXQtYW55XG4gIGRhdGEgICAgPSBpbnB1dDxhbnk+KG51bGwpO1xuICBwcm9kdWN0ID0gaW5wdXQucmVxdWlyZWQ8UHJvZHVjdFR5cGU+KCk7XG4gIHZlcmlmaWVkID0gaW5wdXQoZmFsc2UpO1xuXG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tZXhwbGljaXQtYW55XG4gIHByaXZhdGUgYmkgPSBjb21wdXRlZCgoKSA9PiB0aGlzLmRhdGEoKT8uZGF0YT8uYm9va2luZ19pbmZvKTtcblxuICBsZWdzID0gY29tcHV0ZWQoKCkgPT4ge1xuICAgIGNvbnN0IGQgPSB0aGlzLmJpKCk7XG4gICAgaWYgKCFkKSByZXR1cm4gW107XG4gICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby1leHBsaWNpdC1hbnlcbiAgICByZXR1cm4gKGQubGVnX2luZm8gPz8gW10pLm1hcCgobGVnOiBhbnksIGk6IG51bWJlcikgPT4gKHtcbiAgICAgIGRpcmVjdGlvbjogbGVnLkxlZ0RpcmVjdGlvbmFsaXR5IGFzIHN0cmluZyxcbiAgICAgIGFpcmxpbmVOYW1lOiAobGVnLkxlZ0FpcmxpbmVzTmFtZXMgPz8gW10pLmpvaW4oJywgJyksXG4gICAgICBjYWJpbjogbGVnLkxlZ0NhYmlucz8uWzBdPy5OYW1lID8/ICcnLFxuICAgICAgZmFyZUJyYW5kOiBsZWcuZmFyZUJyYW5kPy5uYW1lID8/ICcnLFxuICAgICAgZnJvbTogbGVnLkxlZ0RlcGFydHVyZUFpcnBvcnRDb2RlIGFzIHN0cmluZyxcbiAgICAgIHRvOiBsZWcuTGVnQXJyaXZhbEFpcnBvcnRDb2RlIGFzIHN0cmluZyxcbiAgICAgIGRlcFRpbWU6IGxlZy5MZWdEZXBhcnR1cmVEYXRlVGltZSBhcyBzdHJpbmcsXG4gICAgICBhcnJUaW1lOiBsZWcuTGVnQXJyaXZhbERhdGVUaW1lIGFzIHN0cmluZyxcbiAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tZXhwbGljaXQtYW55XG4gICAgICBzdG9wczogKGxlZy5TdG9wcyA/PyBbXSkgYXMgYW55W10sXG4gICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25vLWV4cGxpY2l0LWFueVxuICAgICAgc2VnbWVudHM6IChkLmFpcmxpbmVfaW5mbz8uW2ldPy5TZWdtZW50cyA/PyBbXSkgYXMgYW55W10sXG4gICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25vLWV4cGxpY2l0LWFueVxuICAgICAgZHVyYXRpb25TZWdtZW50czogKGQuZHVyYXRpb24/LmxlZ3M/LltpXT8uU2VnbWVudHMgPz8gW10pIGFzIGFueVtdLFxuICAgIH0pKTtcbiAgfSk7XG5cbiAgcGFzc2VuZ2VycyA9IGNvbXB1dGVkKCgpID0+XG4gICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby1leHBsaWNpdC1hbnlcbiAgICAodGhpcy5iaSgpPy5wYXNzZW5nZXJfaW5mbz8ucGFzc2VuZ2VycyA/PyBbXSkgYXMgYW55W11cbiAgKTtcblxuICBwYXltZW50ID0gY29tcHV0ZWQoKCkgPT4gdGhpcy5iaSgpPy5wYXltZW50X3N0YXR1cyk7XG5cbiAgcmVhZG9ubHkgdHlwZUxhYmVsOiBSZWNvcmQ8c3RyaW5nLCBzdHJpbmc+ID0geyBBRFQ6ICdBZHVsdCcsIENOTjogJ0NoaWxkJywgSU5GOiAnSW5mYW50JyB9O1xuXG4gIGZtdFRpbWUoZHQ6IHN0cmluZyk6IHN0cmluZyB7XG4gICAgaWYgKCFkdCkgcmV0dXJuICfigJQnO1xuICAgIHRyeSB7IHJldHVybiBuZXcgRGF0ZShkdCkudG9Mb2NhbGVUaW1lU3RyaW5nKCdlbi1HQicsIHsgaG91cjogJzItZGlnaXQnLCBtaW51dGU6ICcyLWRpZ2l0JyB9KTsgfVxuICAgIGNhdGNoIHsgcmV0dXJuIGR0OyB9XG4gIH1cblxuICBmbXRTaG9ydERhdGUoZHQ6IHN0cmluZyk6IHN0cmluZyB7XG4gICAgaWYgKCFkdCkgcmV0dXJuICfigJQnO1xuICAgIHRyeSB7IHJldHVybiBuZXcgRGF0ZShkdCkudG9Mb2NhbGVEYXRlU3RyaW5nKCdlbi1HQicsIHsgZGF5OiAnMi1kaWdpdCcsIG1vbnRoOiAnc2hvcnQnIH0pOyB9XG4gICAgY2F0Y2ggeyByZXR1cm4gZHQ7IH1cbiAgfVxuXG4gIGZtdE1pbnMobWluczogbnVtYmVyKTogc3RyaW5nIHtcbiAgICBpZiAobWlucyA9PSBudWxsKSByZXR1cm4gJ+KAlCc7XG4gICAgcmV0dXJuIGAke01hdGguZmxvb3IobWlucyAvIDYwKX1oICR7bWlucyAlIDYwfW1gO1xuICB9XG59XG4iLCI8ZGl2IGNsYXNzPVwiZmljXCI+XG4gIEBpZiAocHJvZHVjdCgpID09PSAnZmxpZ2h0Jykge1xuXG4gICAgPCEtLSDilIDilIAgVmVyaWZpZWQgcGlsbCDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIAgLS0+XG4gICAgQGlmICh2ZXJpZmllZCgpKSB7XG4gICAgICA8ZGl2IGNsYXNzPVwiZmljX192ZXJpZmllZC1iYXJcIj5cbiAgICAgICAgPHNwYW4gY2xhc3M9XCJmaWNfX3ZlcmlmaWVkLXBpbGxcIj5cbiAgICAgICAgICA8aSBjbGFzcz1cInBpIHBpLXZlcmlmaWVkXCI+PC9pPiBWZXJpZmllZCB3aXRoIEFpcmxpbmVzXG4gICAgICAgIDwvc3Bhbj5cbiAgICAgIDwvZGl2PlxuICAgIH1cblxuICAgIDwhLS0g4pSA4pSAIExlZ3Mg4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSAIC0tPlxuICAgIEBmb3IgKGxlZyBvZiBsZWdzKCk7IHRyYWNrIGxlZy5kaXJlY3Rpb24gKyAkaW5kZXg7IGxldCBsaSA9ICRpbmRleCkge1xuICAgICAgPGRpdiBjbGFzcz1cImZpY19fbGVnXCIgW2NsYXNzLmZpY19fbGVnLS1yZXR1cm5dPVwibGVnLmRpcmVjdGlvbiA9PT0gJ1JldHVybidcIj5cblxuICAgICAgICA8IS0tIExlZyBoZWFkZXIgLS0+XG4gICAgICAgIDxkaXYgY2xhc3M9XCJmaWNfX2xlZy1oZWFkZXJcIj5cbiAgICAgICAgICA8ZGl2IGNsYXNzPVwiZmljX19sZWctZGlyZWN0aW9uXCI+XG4gICAgICAgICAgICA8aSBjbGFzcz1cInBpXCIgW2NsYXNzLnBpLWFycm93LXJpZ2h0XT1cImxlZy5kaXJlY3Rpb24gIT09ICdSZXR1cm4nXCIgW2NsYXNzLnBpLWFycm93LWxlZnRdPVwibGVnLmRpcmVjdGlvbiA9PT0gJ1JldHVybidcIj48L2k+XG4gICAgICAgICAgICA8c3Bhbj57eyBsZWcuZGlyZWN0aW9uIH19PC9zcGFuPlxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgIDxkaXYgY2xhc3M9XCJmaWNfX2xlZy1jaGlwc1wiPlxuICAgICAgICAgICAgQGlmIChsZWcuY2FiaW4pIHtcbiAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJmaWNfX2NoaXAgZmljX19jaGlwLS1jYWJpblwiPnt7IGxlZy5jYWJpbiB9fTwvc3Bhbj5cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIEBpZiAobGVnLmZhcmVCcmFuZCkge1xuICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cImZpY19fY2hpcCBmaWNfX2NoaXAtLWZhcmVcIj57eyBsZWcuZmFyZUJyYW5kIH19PC9zcGFuPlxuICAgICAgICAgICAgfVxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICA8L2Rpdj5cblxuICAgICAgICA8IS0tIEFpcmxpbmUgcm93IC0tPlxuICAgICAgICBAaWYgKGxlZy5haXJsaW5lTmFtZSkge1xuICAgICAgICAgIDxkaXYgY2xhc3M9XCJmaWNfX2FpcmxpbmVcIj5cbiAgICAgICAgICAgIDxpIGNsYXNzPVwicGkgcGktc2VuZFwiPjwvaT5cbiAgICAgICAgICAgIDxzcGFuPnt7IGxlZy5haXJsaW5lTmFtZSB9fTwvc3Bhbj5cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgfVxuXG4gICAgICAgIDwhLS0gUm91dGUgdGltZWxpbmUgLS0+XG4gICAgICAgIDxkaXYgY2xhc3M9XCJmaWNfX3JvdXRlXCI+XG5cbiAgICAgICAgICA8IS0tIE9yaWdpbiAtLT5cbiAgICAgICAgICA8ZGl2IGNsYXNzPVwiZmljX19haXJwb3J0XCI+XG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZmljX19haXJwb3J0LWNvZGVcIj57eyBsZWcuZnJvbSB9fTwvZGl2PlxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cImZpY19fYWlycG9ydC10aW1lXCI+e3sgZm10VGltZShsZWcuZGVwVGltZSkgfX08L2Rpdj5cbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJmaWNfX2FpcnBvcnQtZGF0ZVwiPnt7IGZtdFNob3J0RGF0ZShsZWcuZGVwVGltZSkgfX08L2Rpdj5cbiAgICAgICAgICA8L2Rpdj5cblxuICAgICAgICAgIDwhLS0gU2VnbWVudHMgKyBzdG9wcyAtLT5cbiAgICAgICAgICA8ZGl2IGNsYXNzPVwiZmljX190aW1lbGluZVwiPlxuXG4gICAgICAgICAgICA8IS0tIFRvcCByb3c6IGFsbCBsYWJlbHMgLS0+XG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZmljX190bC10b3BcIj5cbiAgICAgICAgICAgICAgQGZvciAoc2VnIG9mIGxlZy5kdXJhdGlvblNlZ21lbnRzOyB0cmFjayBzZWcuRGVwYXJ0dXJlQWlycG9ydENvZGU7IGxldCBzaSA9ICRpbmRleCkge1xuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJmaWNfX3RsLXNlZ1wiPlxuICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJmaWNfX3RsLWZsdFwiPnt7IGxlZy5zZWdtZW50c1tzaV0/LkFpcmxpbmVDb2RlIH19e3sgbGVnLnNlZ21lbnRzW3NpXT8uRmxpZ2h0TnVtYmVyIH19PC9zcGFuPlxuICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJmaWNfX3RsLWR1clwiPnt7IGZtdE1pbnMoc2VnLlNlZ21lbnRFbGFwc2VkVGltZU1pbnV0ZXMpIH19PC9zcGFuPlxuICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgIEBpZiAoc2kgPCBsZWcuc3RvcHMubGVuZ3RoKSB7XG4gICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZmljX190bC1zdG9wXCI+XG4gICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwiZmljX19zdG9wLWhlYWRcIj5cbiAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cImZpY19fc3RvcC1kb3RcIj48L3NwYW4+XG4gICAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJmaWNfX3N0b3AtY29kZVwiPnt7IGxlZy5zdG9wc1tzaV0uU3RvcEFpcnBvcnQgfX08L3NwYW4+XG4gICAgICAgICAgICAgICAgICAgIDwvc3Bhbj5cbiAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJmaWNfX3N0b3AtZHVyXCI+e3sgZm10TWlucyhsZWcuc3RvcHNbc2ldLkxheW92ZXJEdXJhdGlvbikgfX08L3NwYW4+XG4gICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIDwvZGl2PlxuXG4gICAgICAgICAgICA8IS0tIEJvdHRvbSByb3c6IHNpbmdsZSBjb250aW51b3VzIGxpbmUgKyBvbmUgYXJyb3cgLS0+XG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZmljX190bC10cmFja1wiPlxuICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZmljX190bC1saW5lXCI+PC9kaXY+XG4gICAgICAgICAgICAgIDxpIGNsYXNzPVwicGkgcGktc2VuZCBmaWNfX3RsLXBsYW5lXCI+PC9pPlxuICAgICAgICAgICAgPC9kaXY+XG5cbiAgICAgICAgICA8L2Rpdj5cblxuICAgICAgICAgIDwhLS0gRGVzdGluYXRpb24gLS0+XG4gICAgICAgICAgPGRpdiBjbGFzcz1cImZpY19fYWlycG9ydCBmaWNfX2FpcnBvcnQtLXJpZ2h0XCI+XG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZmljX19haXJwb3J0LWNvZGVcIj57eyBsZWcudG8gfX08L2Rpdj5cbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJmaWNfX2FpcnBvcnQtdGltZVwiPnt7IGZtdFRpbWUobGVnLmFyclRpbWUpIH19PC9kaXY+XG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZmljX19haXJwb3J0LWRhdGVcIj57eyBmbXRTaG9ydERhdGUobGVnLmFyclRpbWUpIH19PC9kaXY+XG4gICAgICAgICAgPC9kaXY+XG5cbiAgICAgICAgPC9kaXY+XG4gICAgICA8L2Rpdj5cbiAgICB9XG5cbiAgICA8IS0tIOKUgOKUgCBQYXNzZW5nZXJzIOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgCAtLT5cbiAgICBAaWYgKHBhc3NlbmdlcnMoKS5sZW5ndGggPiAwKSB7XG4gICAgICA8ZGl2IGNsYXNzPVwiZmljX19zZWN0aW9uXCI+XG4gICAgICAgIDxkaXYgY2xhc3M9XCJmaWNfX3NlY3Rpb24tbGFiZWxcIj5cbiAgICAgICAgICA8aSBjbGFzcz1cInBpIHBpLXVzZXJzXCI+PC9pPiBQYXNzZW5nZXJzXG4gICAgICAgICAgPHNwYW4gY2xhc3M9XCJmaWNfX3NlY3Rpb24tY291bnRcIj57eyBwYXNzZW5nZXJzKCkubGVuZ3RoIH19PC9zcGFuPlxuICAgICAgICA8L2Rpdj5cbiAgICAgICAgPGRpdiBjbGFzcz1cImZpY19fcGF4LWxpc3RcIj5cbiAgICAgICAgICBAZm9yIChwIG9mIHBhc3NlbmdlcnMoKTsgdHJhY2sgcC5wYXNzZW5nZXJJZCkge1xuICAgICAgICAgICAgPGRpdiBjbGFzcz1cImZpY19fcGF4XCI+XG4gICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJmaWNfX3BheC10b3BcIj5cbiAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cImZpY19fcGF4LWJhZGdlIGZpY19fcGF4LWJhZGdlLS17eyBwLnR5cGUgfCBsb3dlcmNhc2UgfX1cIj57eyB0eXBlTGFiZWxbcC50eXBlXSA/PyBwLnR5cGUgfX08L3NwYW4+XG4gICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJmaWNfX3BheC1uYW1lXCI+e3sgcC5uYW1lPy5wcmVmaXggfX0ge3sgcC5uYW1lPy5naXZlbk5hbWUgfX0ge3sgcC5uYW1lPy5zdXJOYW1lIH19PC9zcGFuPlxuICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImZpY19fcGF4LWJvdHRvbVwiPlxuICAgICAgICAgICAgICAgIEBpZiAocC5pZGVudGl0eT8ubnVtYmVyKSB7XG4gICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cImZpY19fcGF4LWRvY1wiPjxpIGNsYXNzPVwicGkgcGktaWQtY2FyZFwiPjwvaT4ge3sgcC5pZGVudGl0eT8ubnVtYmVyIH19PC9zcGFuPlxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBAaWYgKHAuZW1haWwpIHtcbiAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwiZmljX19wYXgtZW1haWxcIj57eyBwLmVtYWlsIH19PC9zcGFuPlxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICB9XG4gICAgICAgIDwvZGl2PlxuICAgICAgPC9kaXY+XG4gICAgfVxuXG4gICAgPCEtLSDilIDilIAgUGF5bWVudCDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIAgLS0+XG4gICAgQGlmIChwYXltZW50KCkpIHtcbiAgICAgIDxkaXYgY2xhc3M9XCJmaWNfX3BheW1lbnRcIj5cbiAgICAgICAgPGRpdiBjbGFzcz1cImZpY19fcGF5bWVudC1tYWluXCI+XG4gICAgICAgICAgPGkgY2xhc3M9XCJwaSBwaS1jcmVkaXQtY2FyZCBmaWNfX3BheW1lbnQtaWNvblwiPjwvaT5cbiAgICAgICAgICA8c3BhbiBjbGFzcz1cImZpY19fcGF5bWVudC1hbW91bnRcIj57eyBwYXltZW50KCk/LmFtb3VudCB9fSB7eyBwYXltZW50KCk/LmN1cnJlbmN5IH19PC9zcGFuPlxuICAgICAgICAgIDxzcGFuIGNsYXNzPVwiZmljX19wYXltZW50LXN0YXR1c1wiIFtjbGFzcy5maWNfX3BheW1lbnQtc3RhdHVzLS1va109XCJwYXltZW50KCk/LnN0YXR1cz8ua2V5ID09PSAnU1VDQ0VTUydcIj5cbiAgICAgICAgICAgIDxpIGNsYXNzPVwicGlcIiBbY2xhc3MucGktY2hlY2stY2lyY2xlXT1cInBheW1lbnQoKT8uc3RhdHVzPy5rZXkgPT09ICdTVUNDRVNTJ1wiIFtjbGFzcy5waS1jbG9ja109XCJwYXltZW50KCk/LnN0YXR1cz8ua2V5ICE9PSAnU1VDQ0VTUydcIj48L2k+XG4gICAgICAgICAgICB7eyBwYXltZW50KCk/LnN0YXR1cz8ubmFtZSB9fVxuICAgICAgICAgIDwvc3Bhbj5cbiAgICAgICAgPC9kaXY+XG4gICAgICAgIEBpZiAocGF5bWVudCgpPy5tZXRob2QgfHwgcGF5bWVudCgpPy5kYXRlKSB7XG4gICAgICAgICAgPGRpdiBjbGFzcz1cImZpY19fcGF5bWVudC1zdWJcIj5cbiAgICAgICAgICAgIEBpZiAocGF5bWVudCgpPy5tZXRob2QpIHsgPHNwYW4+e3sgcGF5bWVudCgpPy5tZXRob2QgfX08L3NwYW4+IH1cbiAgICAgICAgICAgIEBpZiAocGF5bWVudCgpPy5tZXRob2QgJiYgcGF5bWVudCgpPy5kYXRlKSB7IDxzcGFuIGNsYXNzPVwiZmljX19kb3RcIj7Ctzwvc3Bhbj4gfVxuICAgICAgICAgICAgQGlmIChwYXltZW50KCk/LmRhdGUpIHsgPHNwYW4+e3sgcGF5bWVudCgpPy5kYXRlIH19PC9zcGFuPiB9XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgIH1cbiAgICAgIDwvZGl2PlxuICAgIH1cblxuXG4gIH1cbjwvZGl2PlxuIl19