@logo-software/accordion
Version:
An accordion allows to toggle the display of sections of content.
125 lines • 24.7 kB
JavaScript
/**
* @license
* Copyright LOGO YAZILIM SANAYİ VE TİCARET A.Ş. All Rights Reserved.
*
* Save to the extent permitted by law, you may not use, copy, modify,
* distribute or create derivative works of this material or any part
* of it without the prior written consent of LOGO YAZILIM SANAYİ VE TİCARET A.Ş. Limited.
* Any reproduction of this material must contain this notice.
*/
import { Component, EventEmitter, Input, Output } from '@angular/core';
/**
* Item component determines Accordion Item's title and its content. Item's title attribute will be the display text of the tem. And its child DOM elements will be the content of the accordion item.
*
* <sub>app.component.ts</sub>
*
* ```html
* <logo-accordion-item
* (onInit)="accordionItemInit($event)"
* (onClick)="accordionItemClick($event)"
* [params]="{id: 'user-id-1'}"
* [title]="'My Accordion Item'"
* [isHidden]="false"
* [isOpen]="false"
* [icon]="'le-home'"
* [selectorId]="'myUniqueId'"
* [classes]="'my-own-theme'"
* >
* <div>Content of the Accordion Item</div>
* </logo-accordion-item>
* ```
*/
export class ItemComponent {
constructor() {
/**
* Viewable status of the accordion item.
*/
this.isHidden = false;
/**
* Open status of the accordion item.
*/
this.isOpen = false;
/**
* Icon css class of the item. This icon will be shown instead of the item header
*/
this.icon = null;
/**
* Css classes of the item.
*/
this.classes = null;
/**
* Unique Id for content selector
*/
this.selectorId = null;
/**
* Init event emitter that runs when the step is initialized. This will lets developer to trigger step loaded or not.
*/
this.onInit = new EventEmitter();
/**
* Click event emmitter on item clicked.
*/
this.onClick = new EventEmitter();
}
ngAfterViewInit() {
this.onInit.emit(this);
}
accordionItemClick($event) {
this.$onAccordionItemClick(this);
}
$onAccordionItemClick(item) {
this.onClick.emit(item);
}
ngOnInit() {
if (!this.selectorId) {
this.selectorId = this.generateElementId();
}
}
generateElementId() {
return String.fromCharCode(Math.floor(Math.random() * 26) + 97)
+ Math.random().toString(16).slice(2)
+ Date.now().toString(16).slice(4);
}
}
ItemComponent.decorators = [
{ type: Component, args: [{
selector: 'logo-accordion-item',
template: `
<li [hidden]="isHidden" [ngClass]="classes" class="level-0 accordion-category">
<input [checked]="isOpen" hidden id="{{selectorId}}" type="checkbox"/>
<label
(click)="accordionItemClick()"
class="label label-category"
for="{{selectorId}}"
>
<div class="title-left">
<ng-content select="[titleLeft]"></ng-content>
</div>
<div *ngIf="!!icon" [ngClass]="icon" class="{{icon}}"></div>
<div class="title">
<p class="large">{{title}}</p>
</div>
<div class="options">
<ng-content select="[option]"></ng-content>
</div>
<div class="arrow le-arrow_down"></div>
</label>
<div class="content">
<ng-content></ng-content>
</div>
</li>
`,
styles: ["[class*=\" le-\"],[class^=le-]{position:relative;height:100%}[class*=\" le-\"]:before,[class^=le-]:before{height:100%;top:0;-webkit-mask-size:14px;mask-size:14px}.le-arrow_right:before{-webkit-mask-image:url(\"data:image/svg+xml;charset=utf-8,%3Csvg width='24' height='24' viewBox='0 0 24 24' fill='currentColor' xmlns='http://www.w3.org/2000/svg'%3E %3Cg id='arrow_right'%3E %3Cpath id='Shape' fill-rule='evenodd' clip-rule='evenodd' d='M14.5713 12C14.5713 11.8762 14.5351 11.7657 14.4628 11.6686L14.4017 11.5982L10.4017 7.59823C10.2886 7.48514 10.1547 7.42859 9.9999 7.42859C9.84513 7.42859 9.7112 7.48514 9.59811 7.59823C9.50763 7.68871 9.45335 7.79252 9.43525 7.90966L9.42847 8.00002V16C9.42847 16.1548 9.48501 16.2887 9.59811 16.4018C9.7112 16.5149 9.84513 16.5714 9.9999 16.5714C10.1237 16.5714 10.2342 16.5353 10.3313 16.4629L10.4017 16.4018L14.4017 12.4018C14.5148 12.2887 14.5713 12.1548 14.5713 12Z' fill='%235A5A5A'/%3E %3C/g%3E %3C/svg%3E\");-webkit-mask-repeat:no-repeat;-webkit-mask-position:center;display:inline-block;content:\"\";position:absolute;background:currentColor}.dotted{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.logo-tooltip .tip.on-bottom:after,.logo-tooltip .tip.on-top:after{border-left:7px solid transparent;border-right:7px solid transparent}.logo-tooltip .tip.on-left:after,.logo-tooltip .tip.on-right:after{border-top:7px solid transparent;border-bottom:7px solid transparent}.logo-tooltip{position:relative;color:#e94a34;cursor:pointer}.logo-tooltip .tip{position:absolute;width:180px;color:#fff;font-size:14px;font-style:normal;line-height:1.4;text-align:center;border-radius:3px;background:#333;padding:8px 12px;box-sizing:border-box;cursor:auto;z-index:10;opacity:0;visibility:hidden;transition:all .25s ease-in}.logo-tooltip .tip:after{position:absolute;width:0;height:0;content:\"\"}.logo-tooltip .tip.on-top{bottom:25px;left:0}.logo-tooltip .tip.on-top:after{bottom:-7px;left:10px;border-top:7px solid #333}.logo-tooltip .tip.on-right{top:-5px;left:103%}.logo-tooltip .tip.on-right:after{top:37%;left:-7px;border-right:7px solid #333}.logo-tooltip .tip.on-bottom{top:25px;left:0}.logo-tooltip .tip.on-bottom:after{top:-7px;left:10px;border-bottom:7px solid #333}.logo-tooltip .tip.on-left{top:-100%;right:103%}.logo-tooltip .tip.on-left:after{top:37%;right:-7px;border-left:7px solid #333}.logo-tooltip:hover .tip{opacity:1;visibility:visible}.logo-tooltip:hover .tip.on-top{transform:translateY(-15px)}.logo-tooltip:hover .tip.on-right{transform:translateX(15px)}.logo-tooltip:hover .tip.on-bottom{transform:translateY(15px)}.logo-tooltip:hover .tip.on-left{transform:translateX(-15px)}.test{content:\"a\";content:\"ba\";content:\"aa\";content:\"aade\";content:\"abde\"}:root .basic,:root .gray,:root .secondary{color:var(--leds-contrast-90pct)}:root .danger,:root .info,:root .success,:root .warning{color:var(--white)}:root .outline.primary,:root .outline.primary:active,:root .outline.primary:focus,:root .outline.primary:hover{border-color:var(--light-600)}:root .outline.primary:hover{background-color:rgba(var(--neutral-500-rgb),var(--ghost-hover));color:var(--primary)}:root .outline.primary:active{background-color:rgba(var(--neutral-500-rgb),var(--ghost-active));color:var(--primary)}:root .outline.primary:focus{background-color:rgba(var(--neutral-500-rgb),var(--ghost-focus));color:var(--primary)}:root .outline.secondary{color:var(--leds-contrast-90pct)}:root .outline.secondary,:root .outline.secondary:active,:root .outline.secondary:focus,:root .outline.secondary:hover{border-color:var(--light-600)}:root .outline.secondary:hover{background-color:rgba(var(--neutral-500-rgb),var(--ghost-hover));color:var(--leds-contrast-90pct)}:root .outline.secondary:active{background-color:rgba(var(--neutral-500-rgb),var(--ghost-active));color:var(--leds-contrast-90pct)}:root .outline.secondary:focus{background-color:rgba(var(--neutral-500-rgb),var(--ghost-focus));color:var(--leds-contrast-90pct)}:root .outline.basic{color:var(--leds-contrast-90pct)}:root .outline.basic,:root .outline.basic:active,:root .outline.basic:focus,:root .outline.basic:hover{border-color:var(--light-600)}:root .outline.basic:hover{background-color:rgba(var(--neutral-500-rgb),var(--ghost-hover));color:var(--leds-contrast-90pct)}:root .outline.basic:active{background-color:rgba(var(--neutral-500-rgb),var(--ghost-active));color:var(--leds-contrast-90pct)}:root .outline.basic:focus{background-color:rgba(var(--neutral-500-rgb),var(--ghost-focus));color:var(--leds-contrast-90pct)}:root .outline.neutral,:root .outline.neutral:active,:root .outline.neutral:focus,:root .outline.neutral:hover{border-color:var(--light-600)}:root .outline.neutral:hover{background-color:rgba(var(--neutral-500-rgb),var(--ghost-hover));color:var(--neutral)}:root .outline.neutral:active{background-color:rgba(var(--neutral-500-rgb),var(--ghost-active));color:var(--neutral)}:root .outline.neutral:focus{background-color:rgba(var(--neutral-500-rgb),var(--ghost-focus));color:var(--neutral)}:root .outline.light{border-color:rgba(var(--light-rgb),.5)}:root .outline.light:active,:root .outline.light:focus,:root .outline.light:hover{border-color:var(--light)}:root .outline.light:hover{background-color:rgba(var(--neutral-500-rgb),var(--ghost-hover));color:var(--white)}:root .outline.light:active{background-color:rgba(var(--neutral-500-rgb),var(--ghost-active));color:var(--white)}:root .outline.light:focus{background-color:rgba(var(--neutral-500-rgb),var(--ghost-focus));color:var(--white)}:root .outline.dark,:root .outline.dark:active,:root .outline.dark:focus,:root .outline.dark:hover{border-color:var(--light-600)}:root .outline.dark:hover{background-color:rgba(var(--neutral-500-rgb),var(--ghost-hover));color:var(--dark)}:root .outline.dark:active{background-color:rgba(var(--neutral-500-rgb),var(--ghost-active));color:var(--dark)}:root .outline.dark:focus{background-color:rgba(var(--neutral-500-rgb),var(--ghost-focus));color:var(--dark)}:root .outline.gray{color:var(--leds-contrast-90pct)}:root .outline.gray,:root .outline.gray:active,:root .outline.gray:focus,:root .outline.gray:hover{border-color:var(--light-600)}:root .outline.gray:hover{background-color:rgba(var(--neutral-500-rgb),var(--ghost-hover));color:var(--leds-contrast-90pct)}:root .outline.gray:active{background-color:rgba(var(--neutral-500-rgb),var(--ghost-active));color:var(--leds-contrast-90pct)}:root .outline.gray:focus{background-color:rgba(var(--neutral-500-rgb),var(--ghost-focus));color:var(--leds-contrast-90pct)}:root .outline.info{color:var(--info)}:root .outline.info,:root .outline.info:active,:root .outline.info:focus,:root .outline.info:hover{border-color:var(--light-600)}:root .outline.info:hover{background-color:rgba(var(--neutral-500-rgb),var(--ghost-hover));color:var(--info)}:root .outline.info:active{background-color:rgba(var(--neutral-500-rgb),var(--ghost-active));color:var(--info)}:root .outline.info:focus{background-color:rgba(var(--neutral-500-rgb),var(--ghost-focus));color:var(--info)}:root .outline.danger{color:var(--danger)}:root .outline.danger,:root .outline.danger:active,:root .outline.danger:focus,:root .outline.danger:hover{border-color:var(--light-600)}:root .outline.danger:hover{background-color:rgba(var(--neutral-500-rgb),var(--ghost-hover));color:var(--danger)}:root .outline.danger:active{background-color:rgba(var(--neutral-500-rgb),var(--ghost-active));color:var(--danger)}:root .outline.danger:focus{background-color:rgba(var(--neutral-500-rgb),var(--ghost-focus));color:var(--danger)}:root .outline.warning{color:var(--warning)}:root .outline.warning,:root .outline.warning:active,:root .outline.warning:focus,:root .outline.warning:hover{border-color:var(--light-600)}:root .outline.warning:hover{background-color:rgba(var(--neutral-500-rgb),var(--ghost-hover));color:var(--warning)}:root .outline.warning:active{background-color:rgba(var(--neutral-500-rgb),var(--ghost-active));color:var(--warning)}:root .outline.warning:focus{background-color:rgba(var(--neutral-500-rgb),var(--ghost-focus));color:var(--warning)}:root .outline.success{color:var(--success)}:root .outline.success,:root .outline.success:active,:root .outline.success:focus,:root .outline.success:hover{border-color:var(--light-600)}:root .outline.success:hover{background-color:rgba(var(--neutral-500-rgb),var(--ghost-hover));color:var(--success)}:root .outline.success:active{background-color:rgba(var(--neutral-500-rgb),var(--ghost-active));color:var(--success)}:root .outline.success:focus{background-color:rgba(var(--neutral-500-rgb),var(--ghost-focus));color:var(--success)}:root .ghost.primary:hover{background-color:rgba(var(--neutral-500-rgb),var(--ghost-hover));color:var(--primary)}:root .ghost.primary:active{background-color:rgba(var(--neutral-500-rgb),var(--ghost-active));color:var(--primary)}:root .ghost.primary:focus{background-color:rgba(var(--neutral-500-rgb),var(--ghost-focus));color:var(--primary)}:root .ghost.secondary,:root .ghost.secondary:hover{color:var(--leds-contrast-90pct)}:root .ghost.secondary:hover{background-color:rgba(var(--neutral-500-rgb),var(--ghost-hover))}:root .ghost.secondary:active{background-color:rgba(var(--neutral-500-rgb),var(--ghost-active));color:var(--leds-contrast-90pct)}:root .ghost.secondary:focus{background-color:rgba(var(--neutral-500-rgb),var(--ghost-focus))}:root .ghost.basic,:root .ghost.basic:hover,:root .ghost.secondary:focus{color:var(--leds-contrast-90pct)}:root .ghost.basic:hover{background-color:rgba(var(--neutral-500-rgb),var(--ghost-hover))}:root .ghost.basic:active{background-color:rgba(var(--neutral-500-rgb),var(--ghost-active));color:var(--leds-contrast-90pct)}:root .ghost.basic:focus{background-color:rgba(var(--neutral-500-rgb),var(--ghost-focus));color:var(--leds-contrast-90pct)}:root .ghost.neutral:hover{background-color:rgba(var(--neutral-500-rgb),var(--ghost-hover));color:var(--neutral)}:root .ghost.neutral:active{background-color:rgba(var(--neutral-500-rgb),var(--ghost-active));color:var(--neutral)}:root .ghost.neutral:focus{background-color:rgba(var(--neutral-500-rgb),var(--ghost-focus));color:var(--neutral)}:root .ghost.light:hover{background-color:rgba(var(--neutral-500-rgb),var(--ghost-hover));color:var(--white)}:root .ghost.light:active{background-color:rgba(var(--neutral-500-rgb),var(--ghost-active));color:var(--white)}:root .ghost.light:focus{background-color:rgba(var(--neutral-500-rgb),var(--ghost-focus));color:var(--white)}:root .ghost.dark:hover{background-color:rgba(var(--neutral-500-rgb),var(--ghost-hover));color:var(--dark)}:root .ghost.dark:active{background-color:rgba(var(--neutral-500-rgb),var(--ghost-active));color:var(--dark)}:root .ghost.dark:focus{background-color:rgba(var(--neutral-500-rgb),var(--ghost-focus));color:var(--dark)}:root .ghost.gray,:root .ghost.gray:hover{color:var(--leds-contrast-90pct)}:root .ghost.gray:hover{background-color:rgba(var(--neutral-500-rgb),var(--ghost-hover))}:root .ghost.gray:active{background-color:rgba(var(--neutral-500-rgb),var(--ghost-active));color:var(--leds-contrast-90pct)}:root .ghost.gray:focus{background-color:rgba(var(--neutral-500-rgb),var(--ghost-focus));color:var(--leds-contrast-90pct)}:root .ghost.info{color:var(--info)}:root .ghost.info:hover{background-color:rgba(var(--neutral-500-rgb),var(--ghost-hover));color:var(--info)}:root .ghost.info:active{background-color:rgba(var(--neutral-500-rgb),var(--ghost-active));color:var(--info)}:root .ghost.info:focus{background-color:rgba(var(--neutral-500-rgb),var(--ghost-focus));color:var(--info)}:root .ghost.danger{color:var(--danger)}:root .ghost.danger:hover{background-color:rgba(var(--neutral-500-rgb),var(--ghost-hover));color:var(--danger)}:root .ghost.danger:active{background-color:rgba(var(--neutral-500-rgb),var(--ghost-active));color:var(--danger)}:root .ghost.danger:focus{background-color:rgba(var(--neutral-500-rgb),var(--ghost-focus));color:var(--danger)}:root .ghost.warning{color:var(--warning)}:root .ghost.warning:hover{background-color:rgba(var(--neutral-500-rgb),var(--ghost-hover));color:var(--warning)}:root .ghost.warning:active{background-color:rgba(var(--neutral-500-rgb),var(--ghost-active));color:var(--warning)}:root .ghost.warning:focus{background-color:rgba(var(--neutral-500-rgb),var(--ghost-focus));color:var(--warning)}:root .ghost.success{color:var(--success)}:root .ghost.success:hover{background-color:rgba(var(--neutral-500-rgb),var(--ghost-hover));color:var(--success)}:root .ghost.success:active{background-color:rgba(var(--neutral-500-rgb),var(--ghost-active));color:var(--success)}:root .ghost.success:focus{background-color:rgba(var(--neutral-500-rgb),var(--ghost-focus));color:var(--success)}:host li label{display:flex;color:var(--leds-contrast-90pct);padding-left:4px;padding-right:4px;font-size:16px;line-height:38px;height:38px;box-sizing:border-box;align-items:center;justify-content:space-between;cursor:auto;background-color:var(--white);position:relative;z-index:1}:host li label:hover{background-color:rgba(var(--neutral-rgb),var(--ghost-hover));transition:color .1s ease-in}:host li label .title-left{line-height:normal}:host li label .title{flex-grow:1;font-weight:700;padding-left:10px;cursor:pointer}:host li label .options,:host li label .options ::ng-deep{white-space:nowrap}:host li label .arrow{width:14px;height:14px;display:inline-block}:host li .content{height:100%;max-height:0;opacity:0;transition:all .5s ease-out;padding:0 20px;margin:0;background-color:var(--white)}:host li input[type=checkbox]:checked+label>span.arrow{transform:rotate(180deg)}:host li input[type=checkbox]:checked+label+.content{max-height:none;opacity:1;transition:all .5s ease-out;padding-top:24px;padding-bottom:24px}"]
},] }
];
ItemComponent.propDecorators = {
title: [{ type: Input }],
params: [{ type: Input }],
isHidden: [{ type: Input }],
isOpen: [{ type: Input }],
icon: [{ type: Input }],
classes: [{ type: Input }],
selectorId: [{ type: Input }],
onInit: [{ type: Output }],
onClick: [{ type: Output }]
};
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaXRlbS5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9sb2dvLXNvZnR3YXJlL2FjY29yZGlvbi9zcmMvbGliL2l0ZW0uY29tcG9uZW50LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOzs7Ozs7OztHQVFHO0FBQ0gsT0FBTyxFQUFpQixTQUFTLEVBQUUsWUFBWSxFQUFFLEtBQUssRUFBVSxNQUFNLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFHOUY7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0dBb0JHO0FBOEJILE1BQU0sT0FBTyxhQUFhO0lBN0IxQjtRQXNDRTs7V0FFRztRQUNNLGFBQVEsR0FBWSxLQUFLLENBQUM7UUFDbkM7O1dBRUc7UUFDTSxXQUFNLEdBQVksS0FBSyxDQUFDO1FBQ2pDOztXQUVHO1FBQ00sU0FBSSxHQUFXLElBQUksQ0FBQztRQUM3Qjs7V0FFRztRQUNNLFlBQU8sR0FBVyxJQUFJLENBQUM7UUFDaEM7O1dBRUc7UUFDTSxlQUFVLEdBQVcsSUFBSSxDQUFDO1FBQ25DOztXQUVHO1FBQ08sV0FBTSxHQUFnQyxJQUFJLFlBQVksRUFBaUIsQ0FBQztRQUNsRjs7V0FFRztRQUNPLFlBQU8sR0FBZ0MsSUFBSSxZQUFZLEVBQWlCLENBQUM7SUF5QnJGLENBQUM7SUF2QkMsZUFBZTtRQUNiLElBQUksQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDO0lBQ3pCLENBQUM7SUFFRCxrQkFBa0IsQ0FBQyxNQUFtQjtRQUNwQyxJQUFJLENBQUMscUJBQXFCLENBQUMsSUFBSSxDQUFDLENBQUM7SUFDbkMsQ0FBQztJQUVELHFCQUFxQixDQUFDLElBQW1CO1FBQ3ZDLElBQUksQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDO0lBQzFCLENBQUM7SUFFRCxRQUFRO1FBQ04sSUFBSSxDQUFDLElBQUksQ0FBQyxVQUFVLEVBQUU7WUFDcEIsSUFBSSxDQUFDLFVBQVUsR0FBRyxJQUFJLENBQUMsaUJBQWlCLEVBQUUsQ0FBQztTQUM1QztJQUNILENBQUM7SUFFRCxpQkFBaUI7UUFDZixPQUFPLE1BQU0sQ0FBQyxZQUFZLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsTUFBTSxFQUFFLEdBQUcsRUFBRSxDQUFDLEdBQUcsRUFBRSxDQUFDO2NBQzNELElBQUksQ0FBQyxNQUFNLEVBQUUsQ0FBQyxRQUFRLENBQUMsRUFBRSxDQUFDLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQztjQUNuQyxJQUFJLENBQUMsR0FBRyxFQUFFLENBQUMsUUFBUSxDQUFDLEVBQUUsQ0FBQyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUN2QyxDQUFDOzs7WUF6RkYsU0FBUyxTQUFDO2dCQUNULFFBQVEsRUFBRSxxQkFBcUI7Z0JBQy9CLFFBQVEsRUFBRTs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0dBd0JUOzthQUVGOzs7b0JBS0UsS0FBSztxQkFJTCxLQUFLO3VCQUlMLEtBQUs7cUJBSUwsS0FBSzttQkFJTCxLQUFLO3NCQUlMLEtBQUs7eUJBSUwsS0FBSztxQkFJTCxNQUFNO3NCQUlOLE1BQU0iLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIEBsaWNlbnNlXG4gKiBDb3B5cmlnaHQgTE9HTyBZQVpJTElNIFNBTkFZxLAgVkUgVMSwQ0FSRVQgQS7Fni4gQWxsIFJpZ2h0cyBSZXNlcnZlZC5cbiAqXG4gKiBTYXZlIHRvIHRoZSBleHRlbnQgcGVybWl0dGVkIGJ5IGxhdywgeW91IG1heSBub3QgdXNlLCBjb3B5LCBtb2RpZnksXG4gKiBkaXN0cmlidXRlIG9yIGNyZWF0ZSBkZXJpdmF0aXZlIHdvcmtzIG9mIHRoaXMgbWF0ZXJpYWwgb3IgYW55IHBhcnRcbiAqIG9mIGl0IHdpdGhvdXQgdGhlIHByaW9yIHdyaXR0ZW4gY29uc2VudCBvZiBMT0dPIFlBWklMSU0gU0FOQVnEsCBWRSBUxLBDQVJFVCBBLsWeLiBMaW1pdGVkLlxuICogQW55IHJlcHJvZHVjdGlvbiBvZiB0aGlzIG1hdGVyaWFsIG11c3QgY29udGFpbiB0aGlzIG5vdGljZS5cbiAqL1xuaW1wb3J0IHsgQWZ0ZXJWaWV3SW5pdCwgQ29tcG9uZW50LCBFdmVudEVtaXR0ZXIsIElucHV0LCBPbkluaXQsIE91dHB1dCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgUGFyYW1zIH0gZnJvbSAnQGFuZ3VsYXIvcm91dGVyJztcblxuLyoqXG4gKiBJdGVtIGNvbXBvbmVudCBkZXRlcm1pbmVzIEFjY29yZGlvbiBJdGVtJ3MgdGl0bGUgYW5kIGl0cyBjb250ZW50LiBJdGVtJ3MgdGl0bGUgYXR0cmlidXRlIHdpbGwgYmUgdGhlIGRpc3BsYXkgdGV4dCBvZiB0aGUgdGVtLiBBbmQgaXRzIGNoaWxkIERPTSBlbGVtZW50cyB3aWxsIGJlIHRoZSBjb250ZW50IG9mIHRoZSBhY2NvcmRpb24gaXRlbS5cbiAqXG4gKiA8c3ViPmFwcC5jb21wb25lbnQudHM8L3N1Yj5cbiAqXG4gKiBgYGBodG1sXG4gKiAgPGxvZ28tYWNjb3JkaW9uLWl0ZW1cbiAqICAgKG9uSW5pdCk9XCJhY2NvcmRpb25JdGVtSW5pdCgkZXZlbnQpXCJcbiAqICAgKG9uQ2xpY2spPVwiYWNjb3JkaW9uSXRlbUNsaWNrKCRldmVudClcIlxuICogICBbcGFyYW1zXT1cIntpZDogJ3VzZXItaWQtMSd9XCJcbiAqICAgW3RpdGxlXT1cIidNeSBBY2NvcmRpb24gSXRlbSdcIlxuICogICBbaXNIaWRkZW5dPVwiZmFsc2VcIlxuICogICBbaXNPcGVuXT1cImZhbHNlXCJcbiAqICAgW2ljb25dPVwiJ2xlLWhvbWUnXCJcbiAqICAgW3NlbGVjdG9ySWRdPVwiJ215VW5pcXVlSWQnXCJcbiAqICAgW2NsYXNzZXNdPVwiJ215LW93bi10aGVtZSdcIlxuICogID5cbiAqICAgIDxkaXY+Q29udGVudCBvZiB0aGUgQWNjb3JkaW9uIEl0ZW08L2Rpdj5cbiAqICA8L2xvZ28tYWNjb3JkaW9uLWl0ZW0+XG4gKiBgYGBcbiAqL1xuQENvbXBvbmVudCh7XG4gIHNlbGVjdG9yOiAnbG9nby1hY2NvcmRpb24taXRlbScsXG4gIHRlbXBsYXRlOiBgXG4gICAgPGxpIFtoaWRkZW5dPVwiaXNIaWRkZW5cIiBbbmdDbGFzc109XCJjbGFzc2VzXCIgY2xhc3M9XCJsZXZlbC0wIGFjY29yZGlvbi1jYXRlZ29yeVwiPlxuICAgICAgPGlucHV0IFtjaGVja2VkXT1cImlzT3BlblwiIGhpZGRlbiBpZD1cInt7c2VsZWN0b3JJZH19XCIgdHlwZT1cImNoZWNrYm94XCIvPlxuICAgICAgPGxhYmVsXG4gICAgICAgIChjbGljayk9XCJhY2NvcmRpb25JdGVtQ2xpY2soKVwiXG4gICAgICAgIGNsYXNzPVwibGFiZWwgbGFiZWwtY2F0ZWdvcnlcIlxuICAgICAgICBmb3I9XCJ7e3NlbGVjdG9ySWR9fVwiXG4gICAgICA+XG4gICAgICAgIDxkaXYgY2xhc3M9XCJ0aXRsZS1sZWZ0XCI+XG4gICAgICAgICAgPG5nLWNvbnRlbnQgc2VsZWN0PVwiW3RpdGxlTGVmdF1cIj48L25nLWNvbnRlbnQ+XG4gICAgICAgIDwvZGl2PlxuICAgICAgICA8ZGl2ICpuZ0lmPVwiISFpY29uXCIgW25nQ2xhc3NdPVwiaWNvblwiIGNsYXNzPVwie3tpY29ufX1cIj48L2Rpdj5cbiAgICAgICAgPGRpdiBjbGFzcz1cInRpdGxlXCI+XG4gICAgICAgICAgPHAgY2xhc3M9XCJsYXJnZVwiPnt7dGl0bGV9fTwvcD5cbiAgICAgICAgPC9kaXY+XG4gICAgICAgIDxkaXYgY2xhc3M9XCJvcHRpb25zXCI+XG4gICAgICAgICAgPG5nLWNvbnRlbnQgc2VsZWN0PVwiW29wdGlvbl1cIj48L25nLWNvbnRlbnQ+XG4gICAgICAgIDwvZGl2PlxuICAgICAgICA8ZGl2IGNsYXNzPVwiYXJyb3cgbGUtYXJyb3dfZG93blwiPjwvZGl2PlxuICAgICAgPC9sYWJlbD5cbiAgICAgIDxkaXYgY2xhc3M9XCJjb250ZW50XCI+XG4gICAgICAgIDxuZy1jb250ZW50PjwvbmctY29udGVudD5cbiAgICAgIDwvZGl2PlxuICAgIDwvbGk+XG4gIGAsXG4gIHN0eWxlVXJsczogWydpdGVtLmNvbXBvbmVudC5zY3NzJ10sXG59KVxuZXhwb3J0IGNsYXNzIEl0ZW1Db21wb25lbnQgaW1wbGVtZW50cyBBZnRlclZpZXdJbml0LCBPbkluaXQge1xuICAvKipcbiAgICogVGl0bGUgb2YgdGhlIGFjY29yZGlvbiBpdGVtXG4gICAqL1xuICBASW5wdXQoKSB0aXRsZTogc3RyaW5nO1xuICAvKipcbiAgICogUGFyYW1zIG9mIHRoZSBhY2NvcmRpb24gaWYgbmVlZGVkLlxuICAgKi9cbiAgQElucHV0KCkgcGFyYW1zOiBQYXJhbXM7XG4gIC8qKlxuICAgKiBWaWV3YWJsZSBzdGF0dXMgb2YgdGhlIGFjY29yZGlvbiBpdGVtLlxuICAgKi9cbiAgQElucHV0KCkgaXNIaWRkZW46IGJvb2xlYW4gPSBmYWxzZTtcbiAgLyoqXG4gICAqIE9wZW4gc3RhdHVzIG9mIHRoZSBhY2NvcmRpb24gaXRlbS5cbiAgICovXG4gIEBJbnB1dCgpIGlzT3BlbjogYm9vbGVhbiA9IGZhbHNlO1xuICAvKipcbiAgICogSWNvbiBjc3MgY2xhc3Mgb2YgdGhlIGl0ZW0uIFRoaXMgaWNvbiB3aWxsIGJlIHNob3duIGluc3RlYWQgb2YgdGhlIGl0ZW0gaGVhZGVyXG4gICAqL1xuICBASW5wdXQoKSBpY29uOiBzdHJpbmcgPSBudWxsO1xuICAvKipcbiAgICogQ3NzIGNsYXNzZXMgb2YgdGhlIGl0ZW0uXG4gICAqL1xuICBASW5wdXQoKSBjbGFzc2VzOiBzdHJpbmcgPSBudWxsO1xuICAvKipcbiAgICogVW5pcXVlIElkIGZvciBjb250ZW50IHNlbGVjdG9yXG4gICAqL1xuICBASW5wdXQoKSBzZWxlY3RvcklkOiBzdHJpbmcgPSBudWxsO1xuICAvKipcbiAgICogSW5pdCBldmVudCBlbWl0dGVyIHRoYXQgcnVucyB3aGVuIHRoZSBzdGVwIGlzIGluaXRpYWxpemVkLiBUaGlzIHdpbGwgbGV0cyBkZXZlbG9wZXIgdG8gdHJpZ2dlciBzdGVwIGxvYWRlZCBvciBub3QuXG4gICAqL1xuICBAT3V0cHV0KCkgb25Jbml0OiBFdmVudEVtaXR0ZXI8SXRlbUNvbXBvbmVudD4gPSBuZXcgRXZlbnRFbWl0dGVyPEl0ZW1Db21wb25lbnQ+KCk7XG4gIC8qKlxuICAgKiBDbGljayBldmVudCBlbW1pdHRlciBvbiBpdGVtIGNsaWNrZWQuXG4gICAqL1xuICBAT3V0cHV0KCkgb25DbGljazogRXZlbnRFbWl0dGVyPEl0ZW1Db21wb25lbnQ+ID0gbmV3IEV2ZW50RW1pdHRlcjxJdGVtQ29tcG9uZW50PigpO1xuXG4gIG5nQWZ0ZXJWaWV3SW5pdCgpIHtcbiAgICB0aGlzLm9uSW5pdC5lbWl0KHRoaXMpO1xuICB9XG5cbiAgYWNjb3JkaW9uSXRlbUNsaWNrKCRldmVudD86IE1vdXNlRXZlbnQpIHtcbiAgICB0aGlzLiRvbkFjY29yZGlvbkl0ZW1DbGljayh0aGlzKTtcbiAgfVxuXG4gICRvbkFjY29yZGlvbkl0ZW1DbGljayhpdGVtOiBJdGVtQ29tcG9uZW50KSB7XG4gICAgdGhpcy5vbkNsaWNrLmVtaXQoaXRlbSk7XG4gIH1cblxuICBuZ09uSW5pdCgpIHtcbiAgICBpZiAoIXRoaXMuc2VsZWN0b3JJZCkge1xuICAgICAgdGhpcy5zZWxlY3RvcklkID0gdGhpcy5nZW5lcmF0ZUVsZW1lbnRJZCgpO1xuICAgIH1cbiAgfVxuXG4gIGdlbmVyYXRlRWxlbWVudElkKCkge1xuICAgIHJldHVybiBTdHJpbmcuZnJvbUNoYXJDb2RlKE1hdGguZmxvb3IoTWF0aC5yYW5kb20oKSAqIDI2KSArIDk3KVxuICAgICAgKyBNYXRoLnJhbmRvbSgpLnRvU3RyaW5nKDE2KS5zbGljZSgyKVxuICAgICAgKyBEYXRlLm5vdygpLnRvU3RyaW5nKDE2KS5zbGljZSg0KTtcbiAgfVxufVxuIl19