@agnos-ui/angular
Version:
Bootstrap-based widget library for Angular.
501 lines • 58.6 kB
JavaScript
import { BaseWidgetDirective, ComponentTemplate, SlotDefaultDirective, SlotDirective, UseDirective, auBooleanAttribute, auNumberAttribute, callWidgetFactory, createSlider, useDirectiveForHost, } from '@agnos-ui/angular-headless';
import { writable } from '@amadeus-it-group/tansu';
import { ChangeDetectionStrategy, Component, ContentChild, Directive, EventEmitter, Input, NgZone, Output, TemplateRef, ViewChild, ViewEncapsulation, forwardRef, inject, } from '@angular/core';
import { NG_VALUE_ACCESSOR } from '@angular/forms';
import { take } from 'rxjs';
import * as i0 from "@angular/core";
const _c0 = ["handle"];
function SliderDefaultHandleSlotComponent_ng_template_0_Template(rf, ctx) { if (rf & 1) {
const _r6 = i0.ɵɵgetCurrentView();
i0.ɵɵelementStart(0, "button", 2);
i0.ɵɵlistener("keydown", function SliderDefaultHandleSlotComponent_ng_template_0_Template_button_keydown_0_listener($event) { const restoredCtx = i0.ɵɵrestoreView(_r6); const item_r4 = restoredCtx.item; const widget_r3 = restoredCtx.widget; const ctx_r5 = i0.ɵɵnextContext(); return i0.ɵɵresetView(ctx_r5.onKeyDown($event, item_r4.id, widget_r3.actions.keydown)); })("mousedown", function SliderDefaultHandleSlotComponent_ng_template_0_Template_button_mousedown_0_listener($event) { const restoredCtx = i0.ɵɵrestoreView(_r6); const item_r4 = restoredCtx.item; const widget_r3 = restoredCtx.widget; return i0.ɵɵresetView(widget_r3.actions.mouseDown($event, item_r4.id)); })("touchstart", function SliderDefaultHandleSlotComponent_ng_template_0_Template_button_touchstart_0_listener($event) { const restoredCtx = i0.ɵɵrestoreView(_r6); const item_r4 = restoredCtx.item; const widget_r3 = restoredCtx.widget; return i0.ɵɵresetView(widget_r3.actions.touchStart($event, item_r4.id)); });
i0.ɵɵtext(1, " \u00A0 ");
i0.ɵɵelementEnd();
} if (rf & 2) {
const state_r2 = ctx.state;
const item_r4 = ctx.item;
i0.ɵɵclassMap(state_r2.vertical ? "au-slider-handle-vertical" : "au-slider-handle-horizontal");
i0.ɵɵstyleProp("left", state_r2.handleDisplayOptions[item_r4.id].left, "%")("top", state_r2.handleDisplayOptions[item_r4.id].top, "%");
i0.ɵɵproperty("disabled", state_r2.disabled);
i0.ɵɵattribute("aria-valuemin", state_r2.min)("aria-valuemax", state_r2.max)("aria-readonly", state_r2.readonly ? true : null)("aria-disabled", state_r2.disabled ? true : null)("aria-valuenow", item_r4.value)("aria-valuetext", item_r4.ariaValueText)("aria-label", item_r4.ariaLabel)("aria-orientation", state_r2.vertical ? "vertical" : null);
} }
const _c1 = ["structure"];
const _forTrack0 = ($index, $item) => $item.id;
function SliderDefaultStructureSlotComponent_ng_template_0_For_1_Template(rf, ctx) { if (rf & 1) {
i0.ɵɵelement(0, "div", 4);
} if (rf & 2) {
const option_r8 = ctx.$implicit;
i0.ɵɵstyleProp("left", option_r8.left, "%")("right", option_r8.right, "%")("bottom", option_r8.bottom, "%")("top", option_r8.top, "%")("width", option_r8.width, "%")("height", option_r8.height, "%");
} }
function SliderDefaultStructureSlotComponent_ng_template_0_Conditional_3_ng_template_1_Template(rf, ctx) { }
function SliderDefaultStructureSlotComponent_ng_template_0_Conditional_3_ng_template_3_Template(rf, ctx) { }
const _c2 = (a0, a1, a2) => ({ state: a0, widget: a1, value: a2 });
function SliderDefaultStructureSlotComponent_ng_template_0_Conditional_3_Template(rf, ctx) { if (rf & 1) {
i0.ɵɵelementStart(0, "div", 5);
i0.ɵɵtemplate(1, SliderDefaultStructureSlotComponent_ng_template_0_Conditional_3_ng_template_1_Template, 0, 0, "ng-template", 6);
i0.ɵɵelementEnd();
i0.ɵɵelementStart(2, "div", 5);
i0.ɵɵtemplate(3, SliderDefaultStructureSlotComponent_ng_template_0_Conditional_3_ng_template_3_Template, 0, 0, "ng-template", 6);
i0.ɵɵelementEnd();
} if (rf & 2) {
const ctx_r15 = i0.ɵɵnextContext();
const state_r2 = ctx_r15.state;
const widget_r3 = ctx_r15.widget;
i0.ɵɵclassMap(state_r2.vertical ? "au-slider-label-vertical au-slider-label-vertical-min" : "au-slider-label au-slider-label-min");
i0.ɵɵclassProp("au-slider-rtl", state_r2.rtl)("invisible", !state_r2.minValueLabelDisplay);
i0.ɵɵproperty("auUse", widget_r3.directives.minLabelDirective);
i0.ɵɵadvance();
i0.ɵɵproperty("auSlot", state_r2.slotLabel)("auSlotProps", i0.ɵɵpureFunction3(18, _c2, state_r2, widget_r3, state_r2.min));
i0.ɵɵadvance();
i0.ɵɵclassMap(state_r2.vertical ? "au-slider-label-vertical au-slider-label-vertical-max" : "au-slider-label au-slider-label-max");
i0.ɵɵclassProp("au-slider-rtl", state_r2.rtl)("invisible", !state_r2.maxValueLabelDisplay);
i0.ɵɵproperty("auUse", widget_r3.directives.maxLabelDirective);
i0.ɵɵadvance();
i0.ɵɵproperty("auSlot", state_r2.slotLabel)("auSlotProps", i0.ɵɵpureFunction3(22, _c2, state_r2, widget_r3, state_r2.max));
} }
function SliderDefaultStructureSlotComponent_ng_template_0_Conditional_4_Conditional_1_ng_template_0_Template(rf, ctx) { }
function SliderDefaultStructureSlotComponent_ng_template_0_Conditional_4_Conditional_1_ng_template_2_Template(rf, ctx) { }
function SliderDefaultStructureSlotComponent_ng_template_0_Conditional_4_Conditional_1_Template(rf, ctx) { if (rf & 1) {
i0.ɵɵtemplate(0, SliderDefaultStructureSlotComponent_ng_template_0_Conditional_4_Conditional_1_ng_template_0_Template, 0, 0, "ng-template", 6);
i0.ɵɵtext(1, " - ");
i0.ɵɵtemplate(2, SliderDefaultStructureSlotComponent_ng_template_0_Conditional_4_Conditional_1_ng_template_2_Template, 0, 0, "ng-template", 6);
} if (rf & 2) {
const ctx_r20 = i0.ɵɵnextContext(2);
const state_r2 = ctx_r20.state;
const widget_r3 = ctx_r20.widget;
i0.ɵɵproperty("auSlot", state_r2.slotLabel)("auSlotProps", i0.ɵɵpureFunction3(4, _c2, state_r2, widget_r3, state_r2.sortedValues[1]));
i0.ɵɵadvance(2);
i0.ɵɵproperty("auSlot", state_r2.slotLabel)("auSlotProps", i0.ɵɵpureFunction3(8, _c2, state_r2, widget_r3, state_r2.sortedValues[0]));
} }
function SliderDefaultStructureSlotComponent_ng_template_0_Conditional_4_Conditional_2_ng_template_0_Template(rf, ctx) { }
function SliderDefaultStructureSlotComponent_ng_template_0_Conditional_4_Conditional_2_ng_template_2_Template(rf, ctx) { }
function SliderDefaultStructureSlotComponent_ng_template_0_Conditional_4_Conditional_2_Template(rf, ctx) { if (rf & 1) {
i0.ɵɵtemplate(0, SliderDefaultStructureSlotComponent_ng_template_0_Conditional_4_Conditional_2_ng_template_0_Template, 0, 0, "ng-template", 6);
i0.ɵɵtext(1, " - ");
i0.ɵɵtemplate(2, SliderDefaultStructureSlotComponent_ng_template_0_Conditional_4_Conditional_2_ng_template_2_Template, 0, 0, "ng-template", 6);
} if (rf & 2) {
const ctx_r23 = i0.ɵɵnextContext(2);
const state_r2 = ctx_r23.state;
const widget_r3 = ctx_r23.widget;
i0.ɵɵproperty("auSlot", state_r2.slotLabel)("auSlotProps", i0.ɵɵpureFunction3(4, _c2, state_r2, widget_r3, state_r2.sortedValues[0]));
i0.ɵɵadvance(2);
i0.ɵɵproperty("auSlot", state_r2.slotLabel)("auSlotProps", i0.ɵɵpureFunction3(8, _c2, state_r2, widget_r3, state_r2.sortedValues[1]));
} }
function SliderDefaultStructureSlotComponent_ng_template_0_Conditional_4_Template(rf, ctx) { if (rf & 1) {
i0.ɵɵelementStart(0, "div");
i0.ɵɵtemplate(1, SliderDefaultStructureSlotComponent_ng_template_0_Conditional_4_Conditional_1_Template, 3, 12)(2, SliderDefaultStructureSlotComponent_ng_template_0_Conditional_4_Conditional_2_Template, 3, 12);
i0.ɵɵelementEnd();
} if (rf & 2) {
const state_r2 = i0.ɵɵnextContext().state;
i0.ɵɵclassMap(state_r2.vertical ? "au-slider-label-vertical au-slider-label-vertical-now" : "au-slider-label au-slider-label-now");
i0.ɵɵstyleProp("left", state_r2.combinedLabelPositionLeft, "%")("top", state_r2.combinedLabelPositionTop, "%");
i0.ɵɵadvance();
i0.ɵɵconditional(1, state_r2.rtl ? 1 : 2);
} }
function SliderDefaultStructureSlotComponent_ng_template_0_For_6_ng_template_0_Template(rf, ctx) { }
function SliderDefaultStructureSlotComponent_ng_template_0_For_6_Conditional_1_ng_template_1_Template(rf, ctx) { }
function SliderDefaultStructureSlotComponent_ng_template_0_For_6_Conditional_1_Template(rf, ctx) { if (rf & 1) {
i0.ɵɵelementStart(0, "div");
i0.ɵɵtemplate(1, SliderDefaultStructureSlotComponent_ng_template_0_For_6_Conditional_1_ng_template_1_Template, 0, 0, "ng-template", 6);
i0.ɵɵelementEnd();
} if (rf & 2) {
const i_r26 = i0.ɵɵnextContext().$index;
const ctx_r33 = i0.ɵɵnextContext();
const state_r2 = ctx_r33.state;
const widget_r3 = ctx_r33.widget;
i0.ɵɵclassMap(state_r2.vertical ? "au-slider-label-vertical au-slider-label-vertical-now" : "au-slider-label au-slider-label-now");
i0.ɵɵstyleProp("left", state_r2.handleDisplayOptions[i_r26].left, "%")("top", state_r2.handleDisplayOptions[i_r26].top, "%");
i0.ɵɵadvance();
i0.ɵɵproperty("auSlot", state_r2.slotLabel)("auSlotProps", i0.ɵɵpureFunction3(8, _c2, state_r2, widget_r3, state_r2.values[i_r26]));
} }
const _c3 = (a0, a1, a2) => ({ state: a0, widget: a1, item: a2 });
function SliderDefaultStructureSlotComponent_ng_template_0_For_6_Template(rf, ctx) { if (rf & 1) {
i0.ɵɵtemplate(0, SliderDefaultStructureSlotComponent_ng_template_0_For_6_ng_template_0_Template, 0, 0, "ng-template", 6)(1, SliderDefaultStructureSlotComponent_ng_template_0_For_6_Conditional_1_Template, 2, 12, "div", 3);
} if (rf & 2) {
const item_r25 = ctx.$implicit;
const ctx_r35 = i0.ɵɵnextContext();
const state_r2 = ctx_r35.state;
const widget_r3 = ctx_r35.widget;
i0.ɵɵproperty("auSlot", state_r2.slotHandle)("auSlotProps", i0.ɵɵpureFunction3(3, _c3, state_r2, widget_r3, item_r25));
i0.ɵɵadvance();
i0.ɵɵconditional(1, state_r2.showValueLabels && !state_r2.combinedLabelDisplay ? 1 : -1);
} }
function SliderDefaultStructureSlotComponent_ng_template_0_Template(rf, ctx) { if (rf & 1) {
const _r37 = i0.ɵɵgetCurrentView();
i0.ɵɵrepeaterCreate(0, SliderDefaultStructureSlotComponent_ng_template_0_For_1_Template, 1, 12, "div", 7, i0.ɵɵrepeaterTrackByIdentity);
i0.ɵɵelementStart(2, "div", 2);
i0.ɵɵlistener("click", function SliderDefaultStructureSlotComponent_ng_template_0_Template_div_click_2_listener($event) { const restoredCtx = i0.ɵɵrestoreView(_r37); const widget_r3 = restoredCtx.widget; return i0.ɵɵresetView(widget_r3.actions.click($event)); });
i0.ɵɵelementEnd();
i0.ɵɵtemplate(3, SliderDefaultStructureSlotComponent_ng_template_0_Conditional_3_Template, 4, 26)(4, SliderDefaultStructureSlotComponent_ng_template_0_Conditional_4_Template, 3, 7, "div", 3);
i0.ɵɵrepeaterCreate(5, SliderDefaultStructureSlotComponent_ng_template_0_For_6_Template, 2, 7, null, null, _forTrack0);
} if (rf & 2) {
const state_r2 = ctx.state;
i0.ɵɵrepeater(state_r2.progressDisplayOptions);
i0.ɵɵadvance(2);
i0.ɵɵclassMap(state_r2.vertical ? "au-slider-clickable-area-vertical" : "au-slider-clickable-area");
i0.ɵɵadvance();
i0.ɵɵconditional(3, state_r2.showMinMaxLabels ? 3 : -1);
i0.ɵɵadvance();
i0.ɵɵconditional(4, state_r2.showValueLabels && state_r2.combinedLabelDisplay ? 4 : -1);
i0.ɵɵadvance();
i0.ɵɵrepeater(state_r2.sortedHandles);
} }
const _c4 = ["auSlider", ""];
function SliderComponent_ng_template_0_Template(rf, ctx) { }
const _c5 = (a0, a1) => ({ state: a0, widget: a1 });
export class SliderLabelDirective {
constructor() {
this.templateRef = inject((TemplateRef));
}
static ngTemplateContextGuard(_dir, context) {
return true;
}
static { this.ɵfac = function SliderLabelDirective_Factory(t) { return new (t || SliderLabelDirective)(); }; }
static { this.ɵdir = /*@__PURE__*/ i0.ɵɵdefineDirective({ type: SliderLabelDirective, selectors: [["ng-template", "auSliderLabel", ""]], standalone: true }); }
}
(() => { (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassMetadata(SliderLabelDirective, [{
type: Directive,
args: [{ selector: 'ng-template[auSliderLabel]', standalone: true }]
}], null, null); })();
export class SliderHandleDirective {
constructor() {
this.templateRef = inject((TemplateRef));
}
static ngTemplateContextGuard(_dir, context) {
return true;
}
static { this.ɵfac = function SliderHandleDirective_Factory(t) { return new (t || SliderHandleDirective)(); }; }
static { this.ɵdir = /*@__PURE__*/ i0.ɵɵdefineDirective({ type: SliderHandleDirective, selectors: [["ng-template", "auSliderHandle", ""]], standalone: true }); }
}
(() => { (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassMetadata(SliderHandleDirective, [{
type: Directive,
args: [{ selector: 'ng-template[auSliderHandle]', standalone: true }]
}], null, null); })();
export class SliderDefaultHandleSlotComponent {
constructor() {
this._zone = inject(NgZone);
}
onKeyDown(event, handleId, widgetOnKeyDownFn) {
widgetOnKeyDownFn(event, handleId);
this._zone.onStable.pipe(take(1)).subscribe(() => {
event.target.focus();
});
}
static { this.ɵfac = function SliderDefaultHandleSlotComponent_Factory(t) { return new (t || SliderDefaultHandleSlotComponent)(); }; }
static { this.ɵcmp = /*@__PURE__*/ i0.ɵɵdefineComponent({ type: SliderDefaultHandleSlotComponent, selectors: [["ng-component"]], viewQuery: function SliderDefaultHandleSlotComponent_Query(rf, ctx) { if (rf & 1) {
i0.ɵɵviewQuery(_c0, 7);
} if (rf & 2) {
let _t;
i0.ɵɵqueryRefresh(_t = i0.ɵɵloadQuery()) && (ctx.handle = _t.first);
} }, standalone: true, features: [i0.ɵɵStandaloneFeature], decls: 2, vars: 0, consts: [["auSliderHandle", ""], ["handle", ""], ["role", "slider", 1, "au-slider-handle", 3, "disabled", "keydown", "mousedown", "touchstart"]], template: function SliderDefaultHandleSlotComponent_Template(rf, ctx) { if (rf & 1) {
i0.ɵɵtemplate(0, SliderDefaultHandleSlotComponent_ng_template_0_Template, 2, 15, "ng-template", 0, 1, i0.ɵɵtemplateRefExtractor);
} }, dependencies: [SliderHandleDirective], encapsulation: 2, changeDetection: 0 }); }
}
(() => { (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassMetadata(SliderDefaultHandleSlotComponent, [{
type: Component,
args: [{
standalone: true,
changeDetection: ChangeDetectionStrategy.OnPush,
imports: [SliderHandleDirective],
template: `
<ng-template auSliderHandle #handle let-state="state" let-widget="widget" let-item="item">
<button
class="au-slider-handle"
role="slider"
[attr.aria-valuemin]="state.min"
[attr.aria-valuemax]="state.max"
[attr.aria-readonly]="state.readonly ? true : null"
[attr.aria-disabled]="state.disabled ? true : null"
[attr.aria-valuenow]="item.value"
[attr.aria-valuetext]="item.ariaValueText"
[attr.aria-label]="item.ariaLabel"
[attr.aria-orientation]="state.vertical ? 'vertical' : null"
[disabled]="state.disabled"
[class]="state.vertical ? 'au-slider-handle-vertical' : 'au-slider-handle-horizontal'"
[style.left.%]="state.handleDisplayOptions[item.id].left"
[style.top.%]="state.handleDisplayOptions[item.id].top"
(keydown)="onKeyDown($event, item.id, widget.actions.keydown)"
(mousedown)="widget.actions.mouseDown($event, item.id)"
(touchstart)="widget.actions.touchStart($event, item.id)"
>
</button>
</ng-template>
`,
}]
}], null, { handle: [{
type: ViewChild,
args: ['handle', { static: true }]
}] }); })();
(() => { (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassDebugInfo(SliderDefaultHandleSlotComponent, { className: "SliderDefaultHandleSlotComponent", filePath: "components/slider/slider.component.ts", lineNumber: 87 }); })();
export const sliderDefaultSlotHandle = new ComponentTemplate(SliderDefaultHandleSlotComponent, 'handle');
export class SliderStructureDirective {
constructor() {
this.templateRef = inject((TemplateRef));
}
static ngTemplateContextGuard(_dir, context) {
return true;
}
static { this.ɵfac = function SliderStructureDirective_Factory(t) { return new (t || SliderStructureDirective)(); }; }
static { this.ɵdir = /*@__PURE__*/ i0.ɵɵdefineDirective({ type: SliderStructureDirective, selectors: [["ng-template", "auSliderStructure", ""]], standalone: true }); }
}
(() => { (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassMetadata(SliderStructureDirective, [{
type: Directive,
args: [{ selector: 'ng-template[auSliderStructure]', standalone: true }]
}], null, null); })();
export class SliderDefaultStructureSlotComponent {
static { this.ɵfac = function SliderDefaultStructureSlotComponent_Factory(t) { return new (t || SliderDefaultStructureSlotComponent)(); }; }
static { this.ɵcmp = /*@__PURE__*/ i0.ɵɵdefineComponent({ type: SliderDefaultStructureSlotComponent, selectors: [["ng-component"]], viewQuery: function SliderDefaultStructureSlotComponent_Query(rf, ctx) { if (rf & 1) {
i0.ɵɵviewQuery(_c1, 7);
} if (rf & 2) {
let _t;
i0.ɵɵqueryRefresh(_t = i0.ɵɵloadQuery()) && (ctx.structure = _t.first);
} }, standalone: true, features: [i0.ɵɵStandaloneFeature], decls: 2, vars: 0, consts: [["auSliderStructure", ""], ["structure", ""], [3, "click"], [3, "class", "left", "top"], [1, "au-slider-progress"], [3, "auUse"], [3, "auSlot", "auSlotProps"], ["class", "au-slider-progress", 3, "left", "right", "bottom", "top", "width", "height"]], template: function SliderDefaultStructureSlotComponent_Template(rf, ctx) { if (rf & 1) {
i0.ɵɵtemplate(0, SliderDefaultStructureSlotComponent_ng_template_0_Template, 7, 4, "ng-template", 0, 1, i0.ɵɵtemplateRefExtractor);
} }, dependencies: [SlotDirective, SliderStructureDirective, UseDirective], encapsulation: 2, changeDetection: 0 }); }
}
(() => { (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassMetadata(SliderDefaultStructureSlotComponent, [{
type: Component,
args: [{
standalone: true,
changeDetection: ChangeDetectionStrategy.OnPush,
imports: [SlotDirective, SliderStructureDirective, UseDirective],
template: `
<ng-template auSliderStructure #structure let-state="state" let-widget="widget">
@for (option of state.progressDisplayOptions; track option) {
<div
class="au-slider-progress"
[style.left.%]="option.left"
[style.right.%]="option.right"
[style.bottom.%]="option.bottom"
[style.top.%]="option.top"
[style.width.%]="option.width"
[style.height.%]="option.height"
></div>
}
<div [class]="state.vertical ? 'au-slider-clickable-area-vertical' : 'au-slider-clickable-area'" (click)="widget.actions.click($event)"></div>
@if (state.showMinMaxLabels) {
<div
[class]="state.vertical ? 'au-slider-label-vertical au-slider-label-vertical-min' : 'au-slider-label au-slider-label-min'"
[class.au-slider-rtl]="state.rtl"
[class.invisible]="!state.minValueLabelDisplay"
[auUse]="widget.directives.minLabelDirective"
>
<ng-template [auSlot]="state.slotLabel" [auSlotProps]="{state, widget, value: state.min}"></ng-template>
</div>
<div
[class]="state.vertical ? 'au-slider-label-vertical au-slider-label-vertical-max' : 'au-slider-label au-slider-label-max'"
[class.au-slider-rtl]="state.rtl"
[class.invisible]="!state.maxValueLabelDisplay"
[auUse]="widget.directives.maxLabelDirective"
>
<ng-template [auSlot]="state.slotLabel" [auSlotProps]="{state, widget, value: state.max}"></ng-template>
</div>
}
@if (state.showValueLabels && state.combinedLabelDisplay) {
<div
[class]="state.vertical ? 'au-slider-label-vertical au-slider-label-vertical-now' : 'au-slider-label au-slider-label-now'"
[style.left.%]="state.combinedLabelPositionLeft"
[style.top.%]="state.combinedLabelPositionTop"
>
@if (state.rtl) {
<ng-template [auSlot]="state.slotLabel" [auSlotProps]="{state, widget, value: state.sortedValues[1]}"></ng-template> -
<ng-template [auSlot]="state.slotLabel" [auSlotProps]="{state, widget, value: state.sortedValues[0]}"></ng-template>
} @else {
<ng-template [auSlot]="state.slotLabel" [auSlotProps]="{state, widget, value: state.sortedValues[0]}"></ng-template> -
<ng-template [auSlot]="state.slotLabel" [auSlotProps]="{state, widget, value: state.sortedValues[1]}"></ng-template>
}
</div>
}
@for (item of state.sortedHandles; track item.id; let i = $index) {
<ng-template [auSlot]="state.slotHandle" [auSlotProps]="{state, widget, item}"></ng-template>
@if (state.showValueLabels && !state.combinedLabelDisplay) {
<div
[class]="state.vertical ? 'au-slider-label-vertical au-slider-label-vertical-now' : 'au-slider-label au-slider-label-now'"
[style.left.%]="state.handleDisplayOptions[i].left"
[style.top.%]="state.handleDisplayOptions[i].top"
>
<ng-template [auSlot]="state.slotLabel" [auSlotProps]="{state, widget, value: state.values[i]}"></ng-template>
</div>
}
}
</ng-template>
`,
}]
}], null, { structure: [{
type: ViewChild,
args: ['structure', { static: true }]
}] }); })();
(() => { (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassDebugInfo(SliderDefaultStructureSlotComponent, { className: "SliderDefaultStructureSlotComponent", filePath: "components/slider/slider.component.ts", lineNumber: 176 }); })();
export const sliderDefaultSlotStructure = new ComponentTemplate(SliderDefaultStructureSlotComponent, 'structure');
const defaultConfig = {
slotStructure: sliderDefaultSlotStructure,
slotHandle: sliderDefaultSlotHandle,
};
export class SliderComponent extends BaseWidgetDirective {
constructor() {
super(...arguments);
this.defaultSlots = writable(defaultConfig);
this._widget = callWidgetFactory({
factory: createSlider,
widgetName: 'slider',
defaultConfig: this.defaultSlots,
events: {
onValuesChange: (event) => {
this.onChange(event);
this.onTouched();
this.valuesChange.emit(event);
},
},
afterInit: () => {
useDirectiveForHost(this._widget.directives.sliderDirective);
},
});
/**
* An event emitted when slider values are changed
*
* Event payload equals to the updated slider values
*/
this.valuesChange = new EventEmitter();
/**
* Control value accessor methods
*/
this.onChange = (_) => { };
this.onTouched = () => { };
}
registerOnChange(fn) {
this.onChange = fn;
}
registerOnTouched(fn) {
this.onTouched = fn;
}
writeValue(value) {
if (Array.isArray(value)) {
this._widget.patch({
values: value,
});
}
else {
this._widget.patch({
values: [value],
});
}
}
setDisabledState(isDisabled) {
this._widget.patch({
disabled: isDisabled,
});
}
handleBlur() {
this.onTouched();
}
ngAfterContentChecked() {
this._widget.patchSlots({
slotStructure: this.slotStructureFromContent?.templateRef,
slotHandle: this.slotHandleFromContent?.templateRef,
slotLabel: this.slotLabelFromContent?.templateRef,
});
}
static { this.ɵfac = /*@__PURE__*/ (() => { let ɵSliderComponent_BaseFactory; return function SliderComponent_Factory(t) { return (ɵSliderComponent_BaseFactory || (ɵSliderComponent_BaseFactory = i0.ɵɵgetInheritedFactory(SliderComponent)))(t || SliderComponent); }; })(); }
static { this.ɵcmp = /*@__PURE__*/ i0.ɵɵdefineComponent({ type: SliderComponent, selectors: [["", "auSlider", ""]], contentQueries: function SliderComponent_ContentQueries(rf, ctx, dirIndex) { if (rf & 1) {
i0.ɵɵcontentQuery(dirIndex, SliderLabelDirective, 5);
i0.ɵɵcontentQuery(dirIndex, SliderStructureDirective, 5);
i0.ɵɵcontentQuery(dirIndex, SliderHandleDirective, 5);
} if (rf & 2) {
let _t;
i0.ɵɵqueryRefresh(_t = i0.ɵɵloadQuery()) && (ctx.slotLabelFromContent = _t.first);
i0.ɵɵqueryRefresh(_t = i0.ɵɵloadQuery()) && (ctx.slotStructureFromContent = _t.first);
i0.ɵɵqueryRefresh(_t = i0.ɵɵloadQuery()) && (ctx.slotHandleFromContent = _t.first);
} }, hostAttrs: [1, "au-slider"], hostVars: 5, hostBindings: function SliderComponent_HostBindings(rf, ctx) { if (rf & 1) {
i0.ɵɵlistener("blur", function SliderComponent_blur_HostBindingHandler() { return ctx.handleBlur(); });
} if (rf & 2) {
i0.ɵɵattribute("aria-disabled", ctx.state().disabled ? true : null);
i0.ɵɵclassMap((ctx.state().vertical ? "au-slider-vertical" : "au-slider-horizontal") + " " + ctx.state().className);
i0.ɵɵclassProp("disabled", ctx.state().disabled);
} }, inputs: { className: [i0.ɵɵInputFlags.None, "auClassName", "className"], min: [i0.ɵɵInputFlags.HasDecoratorInputTransform, "auMin", "min", auNumberAttribute], max: [i0.ɵɵInputFlags.HasDecoratorInputTransform, "auMax", "max", auNumberAttribute], stepSize: [i0.ɵɵInputFlags.HasDecoratorInputTransform, "auStepSize", "stepSize", auNumberAttribute], values: [i0.ɵɵInputFlags.None, "auValues", "values"], rtl: [i0.ɵɵInputFlags.HasDecoratorInputTransform, "auRtl", "rtl", auBooleanAttribute], showValueLabels: [i0.ɵɵInputFlags.HasDecoratorInputTransform, "auShowValueLabels", "showValueLabels", auBooleanAttribute], showMinMaxLabels: [i0.ɵɵInputFlags.HasDecoratorInputTransform, "auShowMinMaxLabels", "showMinMaxLabels", auBooleanAttribute], ariaLabelHandle: [i0.ɵɵInputFlags.None, "auAriaLabelHandle", "ariaLabelHandle"], ariaValueText: [i0.ɵɵInputFlags.None, "auAriaValueText", "ariaValueText"], readonly: [i0.ɵɵInputFlags.HasDecoratorInputTransform, "auReadonly", "readonly", auBooleanAttribute], disabled: [i0.ɵɵInputFlags.HasDecoratorInputTransform, "auDisabled", "disabled", auBooleanAttribute], vertical: [i0.ɵɵInputFlags.HasDecoratorInputTransform, "auVertical", "vertical", auBooleanAttribute], slotLabel: [i0.ɵɵInputFlags.None, "auSlotLabel", "slotLabel"], slotStructure: [i0.ɵɵInputFlags.None, "auSlotStructure", "slotStructure"], slotHandle: [i0.ɵɵInputFlags.None, "auSlotHandle", "slotHandle"] }, outputs: { valuesChange: "auValuesChange" }, standalone: true, features: [i0.ɵɵProvidersFeature([{ provide: NG_VALUE_ACCESSOR, useExisting: forwardRef(() => SliderComponent), multi: true }]), i0.ɵɵInputTransformsFeature, i0.ɵɵInheritDefinitionFeature, i0.ɵɵStandaloneFeature], attrs: _c4, decls: 1, vars: 5, consts: [[3, "auSlot", "auSlotProps"]], template: function SliderComponent_Template(rf, ctx) { if (rf & 1) {
i0.ɵɵtemplate(0, SliderComponent_ng_template_0_Template, 0, 0, "ng-template", 0);
} if (rf & 2) {
i0.ɵɵproperty("auSlot", ctx.state().slotStructure)("auSlotProps", i0.ɵɵpureFunction2(2, _c5, ctx.state(), ctx.widget));
} }, dependencies: [SlotDirective], encapsulation: 2, changeDetection: 0 }); }
}
(() => { (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassMetadata(SliderComponent, [{
type: Component,
args: [{
selector: '[auSlider]',
standalone: true,
changeDetection: ChangeDetectionStrategy.OnPush,
encapsulation: ViewEncapsulation.None,
providers: [{ provide: NG_VALUE_ACCESSOR, useExisting: forwardRef(() => SliderComponent), multi: true }],
imports: [SlotDirective, SlotDefaultDirective],
host: {
class: `au-slider`,
'[class]': '(state().vertical ? "au-slider-vertical" : "au-slider-horizontal") + " " + state().className',
'[class.disabled]': 'state().disabled',
'[attr.aria-disabled]': 'state().disabled ? true : null',
'(blur)': 'handleBlur()',
},
template: ` <ng-template [auSlot]="state().slotStructure" [auSlotProps]="{state: state(), widget}"></ng-template> `,
}]
}], null, { className: [{
type: Input,
args: ['auClassName']
}], min: [{
type: Input,
args: [{ alias: 'auMin', transform: auNumberAttribute }]
}], max: [{
type: Input,
args: [{ alias: 'auMax', transform: auNumberAttribute }]
}], stepSize: [{
type: Input,
args: [{ alias: 'auStepSize', transform: auNumberAttribute }]
}], values: [{
type: Input,
args: ['auValues']
}], rtl: [{
type: Input,
args: [{ alias: 'auRtl', transform: auBooleanAttribute }]
}], showValueLabels: [{
type: Input,
args: [{ alias: 'auShowValueLabels', transform: auBooleanAttribute }]
}], showMinMaxLabels: [{
type: Input,
args: [{ alias: 'auShowMinMaxLabels', transform: auBooleanAttribute }]
}], ariaLabelHandle: [{
type: Input,
args: ['auAriaLabelHandle']
}], ariaValueText: [{
type: Input,
args: ['auAriaValueText']
}], readonly: [{
type: Input,
args: [{ alias: 'auReadonly', transform: auBooleanAttribute }]
}], disabled: [{
type: Input,
args: [{ alias: 'auDisabled', transform: auBooleanAttribute }]
}], vertical: [{
type: Input,
args: [{ alias: 'auVertical', transform: auBooleanAttribute }]
}], valuesChange: [{
type: Output,
args: ['auValuesChange']
}], slotLabel: [{
type: Input,
args: ['auSlotLabel']
}], slotLabelFromContent: [{
type: ContentChild,
args: [SliderLabelDirective, { static: false }]
}], slotStructure: [{
type: Input,
args: ['auSlotStructure']
}], slotStructureFromContent: [{
type: ContentChild,
args: [SliderStructureDirective, { static: false }]
}], slotHandle: [{
type: Input,
args: ['auSlotHandle']
}], slotHandleFromContent: [{
type: ContentChild,
args: [SliderHandleDirective, { static: false }]
}] }); })();
(() => { (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassDebugInfo(SliderComponent, { className: "SliderComponent", filePath: "components/slider/slider.component.ts", lineNumber: 204 }); })();
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2xpZGVyLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3NyYy9jb21wb25lbnRzL3NsaWRlci9zbGlkZXIuY29tcG9uZW50LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQVFBLE9BQU8sRUFDTixtQkFBbUIsRUFDbkIsaUJBQWlCLEVBQ2pCLG9CQUFvQixFQUNwQixhQUFhLEVBQ2IsWUFBWSxFQUNaLGtCQUFrQixFQUNsQixpQkFBaUIsRUFDakIsaUJBQWlCLEVBQ2pCLFlBQVksRUFDWixtQkFBbUIsR0FDbkIsTUFBTSw0QkFBNEIsQ0FBQztBQUNwQyxPQUFPLEVBQXNCLFFBQVEsRUFBQyxNQUFNLHlCQUF5QixDQUFDO0FBRXRFLE9BQU8sRUFDTix1QkFBdUIsRUFDdkIsU0FBUyxFQUNULFlBQVksRUFDWixTQUFTLEVBQ1QsWUFBWSxFQUNaLEtBQUssRUFDTCxNQUFNLEVBQ04sTUFBTSxFQUNOLFdBQVcsRUFDWCxTQUFTLEVBQ1QsaUJBQWlCLEVBQ2pCLFVBQVUsRUFDVixNQUFNLEdBQ04sTUFBTSxlQUFlLENBQUM7QUFDdkIsT0FBTyxFQUFDLGlCQUFpQixFQUFDLE1BQU0sZ0JBQWdCLENBQUM7QUFDakQsT0FBTyxFQUFDLElBQUksRUFBQyxNQUFNLE1BQU0sQ0FBQzs7Ozs7SUF3QnZCLGlDQWtCQztJQUhBLDJSQUFXLGVBQUEsK0RBQWtELENBQUEsSUFBQywrT0FDakQsZUFBQSwrQ0FBeUMsQ0FBQSxJQURRLGlQQUVoRCxlQUFBLGdEQUEwQyxDQUFBLElBRk07SUFJOUQsd0JBQ0Q7SUFBQSxpQkFBUzs7OztJQVJSLDhGQUFzRjtJQUN0RiwyRUFBeUQsMkRBQUE7SUFGekQsNENBQTJCO0lBUjNCLDZDQUFnQywrQkFBQSxrREFBQSxrREFBQSxnQ0FBQSx5Q0FBQSxpQ0FBQSwyREFBQTs7Ozs7SUFtRGhDLHlCQVFPOzs7SUFOTiwyQ0FBNEIsK0JBQUEsaUNBQUEsMkJBQUEsK0JBQUEsaUNBQUE7Ozs7OztJ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aEYsWUFBWTttQkFBQyx3QkFBd0IsRUFBRSxFQUFDLE1BQU0sRUFBRSxLQUFLLEVBQUM7WUFFaEMsVUFBVTtrQkFBaEMsS0FBSzttQkFBQyxjQUFjO1lBQ2lDLHFCQUFxQjtrQkFBMUUsWUFBWTttQkFBQyxxQkFBcUIsRUFBRSxFQUFDLE1BQU0sRUFBRSxLQUFLLEVBQUM7O2tGQXpHeEMsZUFBZSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB0eXBlIHtcblx0U2xpZGVyQ29udGV4dCxcblx0U2xpZGVyUHJvcHMsXG5cdFNsaWRlclNsb3RIYW5kbGVDb250ZXh0LFxuXHRTbGlkZXJTbG90TGFiZWxDb250ZXh0LFxuXHRTbGlkZXJXaWRnZXQsXG5cdFNsb3RDb250ZW50LFxufSBmcm9tICdAYWdub3MtdWkvYW5ndWxhci1oZWFkbGVzcyc7XG5pbXBvcnQge1xuXHRCYXNlV2lkZ2V0RGlyZWN0aXZlLFxuXHRDb21wb25lbnRUZW1wbGF0ZSxcblx0U2xvdERlZmF1bHREaXJlY3RpdmUsXG5cdFNsb3REaXJlY3RpdmUsXG5cdFVzZURpcmVjdGl2ZSxcblx0YXVCb29sZWFuQXR0cmlidXRlLFxuXHRhdU51bWJlckF0dHJpYnV0ZSxcblx0Y2FsbFdpZGdldEZhY3RvcnksXG5cdGNyZWF0ZVNsaWRlcixcblx0dXNlRGlyZWN0aXZlRm9ySG9zdCxcbn0gZnJvbSAnQGFnbm9zLXVpL2FuZ3VsYXItaGVhZGxlc3MnO1xuaW1wb3J0IHt0eXBlIFdyaXRhYmxlU2lnbmFsLCB3cml0YWJsZX0gZnJvbSAnQGFtYWRldXMtaXQtZ3JvdXAvdGFuc3UnO1xuaW1wb3J0IHR5cGUge0FmdGVyQ29udGVudENoZWNrZWR9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHtcblx0Q2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3ksXG5cdENvbXBvbmVudCxcblx0Q29udGVudENoaWxkLFxuXHREaXJlY3RpdmUsXG5cdEV2ZW50RW1pdHRlcixcblx0SW5wdXQsXG5cdE5nWm9uZSxcblx0T3V0cHV0LFxuXHRUZW1wbGF0ZVJlZixcblx0Vmlld0NoaWxkLFxuXHRWaWV3RW5jYXBzdWxhdGlvbixcblx0Zm9yd2FyZFJlZixcblx0aW5qZWN0LFxufSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7TkdfVkFMVUVfQUNDRVNTT1J9IGZyb20gJ0Bhbmd1bGFyL2Zvcm1zJztcbmltcG9ydCB7dGFrZX0gZnJvbSAncnhqcyc7XG5cbkBEaXJlY3RpdmUoe3NlbGVjdG9yOiAnbmctdGVtcGxhdGVbYXVTbGlkZXJMYWJlbF0nLCBzdGFuZGFsb25lOiB0cnVlfSlcbmV4cG9ydCBjbGFzcyBTbGlkZXJMYWJlbERpcmVjdGl2ZSB7XG5cdHB1YmxpYyB0ZW1wbGF0ZVJlZiA9IGluamVjdChUZW1wbGF0ZVJlZjxTbGlkZXJTbG90TGFiZWxDb250ZXh0Pik7XG5cdHN0YXRpYyBuZ1RlbXBsYXRlQ29udGV4dEd1YXJkKF9kaXI6IFNsaWRlckxhYmVsRGlyZWN0aXZlLCBjb250ZXh0OiB1bmtub3duKTogY29udGV4dCBpcyBTbGlkZXJTbG90TGFiZWxDb250ZXh0IHtcblx0XHRyZXR1cm4gdHJ1ZTtcblx0fVxufVxuXG5ARGlyZWN0aXZlKHtzZWxlY3RvcjogJ25nLXRlbXBsYXRlW2F1U2xpZGVySGFuZGxlXScsIHN0YW5kYWxvbmU6IHRydWV9KVxuZXhwb3J0IGNsYXNzIFNsaWRlckhhbmRsZURpcmVjdGl2ZSB7XG5cdHB1YmxpYyB0ZW1wbGF0ZVJlZiA9IGluamVjdChUZW1wbGF0ZVJlZjxTbGlkZXJTbG90TGFiZWxDb250ZXh0Pik7XG5cdHN0YXRpYyBuZ1RlbXBsYXRlQ29udGV4dEd1YXJkKF9kaXI6IFNsaWRlckhhbmRsZURpcmVjdGl2ZSwgY29udGV4dDogdW5rbm93bik6IGNvbnRleHQgaXMgU2xpZGVyU2xvdEhhbmRsZUNvbnRleHQge1xuXHRcdHJldHVybiB0cnVlO1xuXHR9XG59XG5cbkBDb21wb25lbnQoe1xuXHRzdGFuZGFsb25lOiB0cnVlLFxuXHRjaGFuZ2VEZXRlY3Rpb246IENoYW5nZURldGVjdGlvblN0cmF0ZWd5Lk9uUHVzaCxcblx0aW1wb3J0czogW1NsaWRlckhhbmRsZURpcmVjdGl2ZV0sXG5cdHRlbXBsYXRlOiBgXG5cdFx0PG5nLXRlbXBsYXRlIGF1U2xpZGVySGFuZGxlICNoYW5kbGUgbGV0LXN0YXRlPVwic3RhdGVcIiBsZXQtd2lkZ2V0PVwid2lkZ2V0XCIgbGV0LWl0ZW09XCJpdGVtXCI+XG5cdFx0XHQ8YnV0dG9uXG5cdFx0XHRcdGNsYXNzPVwiYXUtc2xpZGVyLWhhbmRsZVwiXG5cdFx0XHRcdHJvbGU9XCJzbGlkZXJcIlxuXHRcdFx0XHRbYXR0ci5hcmlhLXZhbHVlbWluXT1cInN0YXRlLm1pblwiXG5cdFx0XHRcdFthdHRyLmFyaWEtdmFsdWVtYXhdPVwic3RhdGUubWF4XCJcblx0XHRcdFx0W2F0dHIuYXJpYS1yZWFkb25seV09XCJzdGF0ZS5yZWFkb25seSA/IHRydWUgOiBudWxsXCJcblx0XHRcdFx0W2F0dHIuYXJpYS1kaXNhYmxlZF09XCJzdGF0ZS5kaXNhYmxlZCA/IHRydWUgOiBudWxsXCJcblx0XHRcdFx0W2F0dHIuYXJpYS12YWx1ZW5vd109XCJpdGVtLnZhbHVlXCJcblx0XHRcdFx0W2F0dHIuYXJpYS12YWx1ZXRleHRdPVwiaXRlbS5hcmlhVmFsdWVUZXh0XCJcblx0XHRcdFx0W2F0dHIuYXJpYS1sYWJlbF09XCJpdGVtLmFyaWFMYWJlbFwiXG5cdFx0XHRcdFthdHRyLmFyaWEtb3JpZW50YXRpb25dPVwic3RhdGUudmVydGljYWwgPyAndmVydGljYWwnIDogbnVsbFwiXG5cdFx0XHRcdFtkaXNhYmxlZF09XCJzdGF0ZS5kaXNhYmxlZFwiXG5cdFx0XHRcdFtjbGFzc109XCJzdGF0ZS52ZXJ0aWNhbCA/ICdhdS1zbGlkZXItaGFuZGxlLXZlcnRpY2FsJyA6ICdhdS1zbGlkZXItaGFuZGxlLWhvcml6b250YWwnXCJcblx0XHRcdFx0W3N0eWxlLmxlZnQuJV09XCJzdGF0ZS5oYW5kbGVEaXNwbGF5T3B0aW9uc1tpdGVtLmlkXS5sZWZ0XCJcblx0XHRcdFx0W3N0eWxlLnRvcC4lXT1cInN0YXRlLmhhbmRsZURpc3BsYXlPcHRpb25zW2l0ZW0uaWRdLnRvcFwiXG5cdFx0XHRcdChrZXlkb3duKT1cIm9uS2V5RG93bigkZXZlbnQsIGl0ZW0uaWQsIHdpZGdldC5hY3Rpb25zLmtleWRvd24pXCJcblx0XHRcdFx0KG1vdXNlZG93bik9XCJ3aWRnZXQuYWN0aW9ucy5tb3VzZURvd24oJGV2ZW50LCBpdGVtLmlkKVwiXG5cdFx0XHRcdCh0b3VjaHN0YXJ0KT1cIndpZGdldC5hY3Rpb25zLnRvdWNoU3RhcnQoJGV2ZW50LCBpdGVtLmlkKVwiXG5cdFx0XHQ+XG5cdFx0XHRcdCZuYnNwO1xuXHRcdFx0PC9idXR0b24+XG5cdFx0PC9uZy10ZW1wbGF0ZT5cblx0YCxcbn0pXG5leHBvcnQgY2xhc3MgU2xpZGVyRGVmYXVsdEhhbmRsZVNsb3RDb21wb25lbnQge1xuXHRwcml2YXRlIHJlYWRvbmx5IF96b25lID0gaW5qZWN0KE5nWm9uZSk7XG5cblx0QFZpZXdDaGlsZCgnaGFuZGxlJywge3N0YXRpYzogdHJ1ZX0pIHJlYWRvbmx5IGhhbmRsZTogVGVtcGxhdGVSZWY8U2xpZGVyU2xvdEhhbmRsZUNvbnRleHQ+O1xuXG5cdG9uS2V5RG93bihldmVudDogS2V5Ym9hcmRFdmVudCwgaGFuZGxlSWQ6IG51bWJlciwgd2lkZ2V0T25LZXlEb3duRm46IChldmVudDogS2V5Ym9hcmRFdmVudCwgaGFuZGxlSWQ6IG51bWJlcikgPT4gdm9pZCkge1xuXHRcdHdpZGdldE9uS2V5RG93bkZuKGV2ZW50LCBoYW5kbGVJZCk7XG5cdFx0dGhpcy5fem9uZS5vblN0YWJsZS5waXBlKHRha2UoMSkpLnN1YnNjcmliZSgoKSA9PiB7XG5cdFx0XHQoZXZlbnQudGFyZ2V0IGFzIEhUTUxFbGVtZW50KS5mb2N1cygpO1xuXHRcdH0pO1xuXHR9XG59XG5cbmV4cG9ydCBjb25zdCBzbGlkZXJEZWZhdWx0U2xvdEhhbmRsZSA9IG5ldyBDb21wb25lbnRUZW1wbGF0ZShTbGlkZXJEZWZhdWx0SGFuZGxlU2xvdENvbXBvbmVudCwgJ2hhbmRsZScpO1xuXG5ARGlyZWN0aXZlKHtzZWxlY3RvcjogJ25nLXRlbXBsYXRlW2F1U2xpZGVyU3RydWN0dXJlXScsIHN0YW5kYWxvbmU6IHRydWV9KVxuZXhwb3J0IGNsYXNzIFNsaWRlclN0cnVjdHVyZURpcmVjdGl2ZSB7XG5cdHB1YmxpYyB0ZW1wbGF0ZVJlZiA9IGluamVjdChUZW1wbGF0ZVJlZjxTbGlkZXJTbG90SGFuZGxlQ29udGV4dD4pO1xuXHRzdGF0aWMgbmdUZW1wbGF0ZUNvbnRleHRHdWFyZChfZGlyOiBTbGlkZXJTdHJ1Y3R1cmVEaXJlY3RpdmUsIGNvbnRleHQ6IHVua25vd24pOiBjb250ZXh0IGlzIFNsaWRlclNsb3RIYW5kbGVDb250ZXh0IHtcblx0XHRyZXR1cm4gdHJ1ZTtcblx0fVxufVxuXG5AQ29tcG9uZW50KHtcblx0c3RhbmRhbG9uZTogdHJ1ZSxcblx0Y2hhbmdlRGV0ZWN0aW9uOiBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneS5PblB1c2gsXG5cdGltcG9ydHM6IFtTbG90RGlyZWN0aXZlLCBTbGlkZXJTdHJ1Y3R1cmVEaXJlY3RpdmUsIFVzZURpcmVjdGl2ZV0sXG5cdHRlbXBsYXRlOiBgXG5cdFx0PG5nLXRlbXBsYXRlIGF1U2xpZGVyU3RydWN0dXJlICNzdHJ1Y3R1cmUgbGV0LXN0YXRlPVwic3RhdGVcIiBsZXQtd2lkZ2V0PVwid2lkZ2V0XCI+XG5cdFx0XHRAZm9yIChvcHRpb24gb2Ygc3RhdGUucHJvZ3Jlc3NEaXNwbGF5T3B0aW9uczsgdHJhY2sgb3B0aW9uKSB7XG5cdFx0XHRcdDxkaXZcblx0XHRcdFx0XHRjbGFzcz1cImF1LXNsaWRlci1wcm9ncmVzc1wiXG5cdFx0XHRcdFx0W3N0eWxlLmxlZnQuJV09XCJvcHRpb24ubGVmdFwiXG5cdFx0XHRcdFx0W3N0eWxlLnJpZ2h0LiVdPVwib3B0aW9uLnJpZ2h0XCJcblx0XHRcdFx0XHRbc3R5bGUuYm90dG9tLiVdPVwib3B0aW9uLmJvdHRvbVwiXG5cdFx0XHRcdFx0W3N0eWxlLnRvcC4lXT1cIm9wdGlvbi50b3BcIlxuXHRcdFx0XHRcdFtzdHlsZS53aWR0aC4lXT1cIm9wdGlvbi53aWR0aFwiXG5cdFx0XHRcdFx0W3N0eWxlLmhlaWdodC4lXT1cIm9wdGlvbi5oZWlnaHRcIlxuXHRcdFx0XHQ+PC9kaXY+XG5cdFx0XHR9XG5cdFx0XHQ8ZGl2IFtjbGFzc109XCJzdGF0ZS52ZXJ0aWNhbCA/ICdhdS1zbGlkZXItY2xpY2thYmxlLWFyZWEtdmVydGljYWwnIDogJ2F1LXNsaWRlci1jbGlja2FibGUtYXJlYSdcIiAoY2xpY2spPVwid2lkZ2V0LmFjdGlvbnMuY2xpY2soJGV2ZW50KVwiPjwvZGl2PlxuXHRcdFx0QGlmIChzdGF0ZS5zaG93TWluTWF4TGFiZWxzKSB7XG5cdFx0XHRcdDxkaXZcblx0XHRcdFx0XHRbY2xhc3NdPVwic3RhdGUudmVydGljYWwgPyAnYXUtc2xpZGVyLWxhYmVsLXZlcnRpY2FsIGF1LXNsaWRlci1sYWJlbC12ZXJ0aWNhbC1taW4nIDogJ2F1LXNsaWRlci1sYWJlbCBhdS1zbGlkZXItbGFiZWwtbWluJ1wiXG5cdFx0XHRcdFx0W2NsYXNzLmF1LXNsaWRlci1ydGxdPVwic3RhdGUucnRsXCJcblx0XHRcdFx0XHRbY2xhc3MuaW52aXNpYmxlXT1cIiFzdGF0ZS5taW5WYWx1ZUxhYmVsRGlzcGxheVwiXG5cdFx0XHRcdFx0W2F1VXNlXT1cIndpZGdldC5kaXJlY3RpdmVzLm1pbkxhYmVsRGlyZWN0aXZlXCJcblx0XHRcdFx0PlxuXHRcdFx0XHRcdDxuZy10ZW1wbGF0ZSBbYXVTbG90XT1cInN0YXRlLnNsb3RMYWJlbFwiIFthdVNsb3RQcm9wc109XCJ7c3RhdGUsIHdpZGdldCwgdmFsdWU6IHN0YXRlLm1pbn1cIj48L25nLXRlbXBsYXRlPlxuXHRcdFx0XHQ8L2Rpdj5cblx0XHRcdFx0PGRpdlxuXHRcdFx0XHRcdFtjbGFzc109XCJzdGF0ZS52ZXJ0aWNhbCA/ICdhdS1zbGlkZXItbGFiZWwtdmVydGljYWwgYXUtc2xpZGVyLWxhYmVsLXZlcnRpY2FsLW1heCcgOiAnYXUtc2xpZGVyLWxhYmVsIGF1LXNsaWRlci1sYWJlbC1tYXgnXCJcblx0XHRcdFx0XHRbY2xhc3MuYXUtc2xpZGVyLXJ0bF09XCJzdGF0ZS5ydGxcIlxuXHRcdFx0XHRcdFtjbGFzcy5pbnZpc2libGVdPVwiIXN0YXRlLm1heFZhbHVlTGFiZWxEaXNwbGF5XCJcblx0XHRcdFx0XHRbYXVVc2VdPVwid2lkZ2V0LmRpcmVjdGl2ZXMubWF4TGFiZWxEaXJlY3RpdmVcIlxuXHRcdFx0XHQ+XG5cdFx0XHRcdFx0PG5nLXRlbXBsYXRlIFthdVNsb3RdPVwic3RhdGUuc2xvdExhYmVsXCIgW2F1U2xvdFByb3BzXT1cIntzdGF0ZSwgd2lkZ2V0LCB2YWx1ZTogc3RhdGUubWF4fVwiPjwvbmctdGVtcGxhdGU+XG5cdFx0XHRcdDwvZGl2PlxuXHRcdFx0fVxuXHRcdFx0QGlmIChzdGF0ZS5zaG93VmFsdWVMYWJlbHMgJiYgc3RhdGUuY29tYmluZWRMYWJlbERpc3BsYXkpIHtcblx0XHRcdFx0PGRpdlxuXHRcdFx0XHRcdFtjbGFzc109XCJzdGF0ZS52ZXJ0aWNhbCA/ICdhdS1zbGlkZXItbGFiZWwtdmVydGljYWwgYXUtc2xpZGVyLWxhYmVsLXZlcnRpY2FsLW5vdycgOiAnYXUtc2xpZGVyLWxhYmVsIGF1LXNsaWRlci1sYWJlbC1ub3cnXCJcblx0XHRcdFx0XHRbc3R5bGUubGVmdC4lXT1cInN0YXRlLmNvbWJpbmVkTGFiZWxQb3NpdGlvbkxlZnRcIlxuXHRcdFx0XHRcdFtzdHlsZS50b3AuJV09XCJzdGF0ZS5jb21iaW5lZExhYmVsUG9zaXRpb25Ub3BcIlxuXHRcdFx0XHQ+XG5cdFx0XHRcdFx0QGlmIChzdGF0ZS5ydGwpIHtcblx0XHRcdFx0XHRcdDxuZy10ZW1wbGF0ZSBbYXVTbG90XT1cInN0YXRlLnNsb3RMYWJlbFwiIFthdVNsb3RQcm9wc109XCJ7c3RhdGUsIHdpZGdldCwgdmFsdWU6IHN0YXRlLnNvcnRlZFZhbHVlc1sxXX1cIj48L25nLXRlbXBsYXRlPiAtXG5cdFx0XHRcdFx0XHQ8bmctdGVtcGxhdGUgW2F1U2xvdF09XCJzdGF0ZS5zbG90TGFiZWxcIiBbYXVTbG90UHJvcHNdPVwie3N0YXRlLCB3aWRnZXQsIHZhbHVlOiBzdGF0ZS5zb3J0ZWRWYWx1ZXNbMF19XCI+PC9uZy10ZW1wbGF0ZT5cblx0XHRcdFx0XHR9IEBlbHNlIHtcblx0XHRcdFx0XHRcdDxuZy10ZW1wbGF0ZSBbYXVTbG90XT1cInN0YXRlLnNsb3RMYWJlbFwiIFthdVNsb3RQcm9wc109XCJ7c3RhdGUsIHdpZGdldCwgdmFsdWU6IHN0YXRlLnNvcnRlZFZhbHVlc1swXX1cIj48L25nLXRlbXBsYXRlPiAtXG5cdFx0XHRcdFx0XHQ8bmctdGVtcGxhdGUgW2F1U2xvdF09XCJzdGF0ZS5zbG90TGFiZWxcIiBbYXVTbG90UHJvcHNdPVwie3N0YXRlLCB3aWRnZXQsIHZhbHVlOiBzdGF0ZS5zb3J0ZWRWYWx1ZXNbMV19XCI+PC9uZy10ZW1wbGF0ZT5cblx0XHRcdFx0XHR9XG5cdFx0XHRcdDwvZGl2PlxuXHRcdFx0fVxuXHRcdFx0QGZvciAoaXRlbSBvZiBzdGF0ZS5zb3J0ZWRIYW5kbGVzOyB0cmFjayBpdGVtLmlkOyBsZXQgaSA9ICRpbmRleCkge1xuXHRcdFx0XHQ8bmctdGVtcGxhdGUgW2F1U2xvdF09XCJzdGF0ZS5zbG90SGFuZGxlXCIgW2F1U2xvdFByb3BzXT1cIntzdGF0ZSwgd2lkZ2V0LCBpdGVtfVwiPjwvbmctdGVtcGxhdGU+XG5cdFx0XHRcdEBpZiAoc3RhdGUuc2hvd1ZhbHVlTGFiZWxzICYmICFzdGF0ZS5jb21iaW5lZ