igniteui-angular
Version:
Ignite UI for Angular is a dependency-free Angular toolkit for building modern web apps
427 lines • 23.5 kB
JavaScript
/**
* @fileoverview added by tsickle
* @suppress {checkTypes,extraRequire,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc
*/
import { Directive, HostBinding, Input, NgModule } from '@angular/core';
export class IgxLayoutDirective {
constructor() {
/**
* Sets the default flow direction of the container's children.
*
* Defaults to `rows`.
*
* ```html
* <div
* igxLayout
* igxLayoutDir="row">
* <div igxFlex>1</div>
* <div igxFlex>2</div>
* <div igxFlex>3</div>
* </div>
* ```
*/
this.dir = 'row';
/**
* Defines the direction flex children are placed in the flex container.
*
* When set to `true`, the `rows` direction goes right to left and `columns` goes bottom to top.
*
* ```html
* <div
* igxLayout
* igxLayoutReverse="true">
* <div igxFlex>1</div>
* <div igxFlex>2</div>
* <div igxFlex>3</div>
* </div>
* ```
*/
this.reverse = false;
/**
* By default the immediate children will all try to fit onto one line.
*
* The default value `nowrap` sets this behavior.
*
* Other accepted values are `wrap` and `wrap-reverse`.
*
* ```html
* <div
* igxLayout
* igxLayoutDir="row"
* igxLayoutWrap="wrap">
* <div igxFlex igxFlexGrow="0">1</div>
* <div igxFlex igxFlexGrow="0">2</div>
* <div igxFlex igxFlexGrow="0">3</div>
* </div>
* ```
*/
this.wrap = 'nowrap';
/**
* Defines the alignment along the main axis.
*
* Defaults to `flex-start` which packs the children toward the start line.
*
* Other possible values are `flex-end`, `center`, `space-between`, `space-around`.
*
* ```html
* <div
* igxLayout
* igxLayoutDir="column"
* igxLayoutJustify="space-between">
* <div>1</div>
* <div>2</div>
* <div>3</div>
* </div>
* ```
*/
this.justify = 'flex-start';
/**
* Defines the default behavior for how children are laid out along the corss axis of the current line.
*
* Defaults to `flex-start`.
*
* Other possible values are `flex-end`, `center`, `baseline`, and `stretch`.
*
* ```html
* <div
* igxLayout
* igxLayoutDir="column"
* igxLayoutItemAlign="start">
* <div igxFlex igxFlexGrow="0">1</div>
* <div igxFlex igxFlexGrow="0">2</div>
* <div igxFlex igxFlexGrow="0">3</div>
* </div>
* ```
*/
this.itemAlign = 'stretch';
/**
* @hidden
*/
this.display = 'flex';
}
/**
* @hidden
* @return {?}
*/
get flexwrap() { return this.wrap; }
/**
* @hidden
* @return {?}
*/
get justifycontent() { return this.justify; }
/**
* @hidden
* @return {?}
*/
get align() { return this.itemAlign; }
/**
* @hidden
* @return {?}
*/
get direction() {
if (this.reverse) {
return (this.dir === 'row') ? 'row-reverse' : 'column-reverse';
}
return (this.dir === 'row') ? 'row' : 'column';
}
}
IgxLayoutDirective.decorators = [
{ type: Directive, args: [{
selector: '[igxLayout]'
},] }
];
IgxLayoutDirective.propDecorators = {
dir: [{ type: Input, args: ['igxLayoutDir',] }],
reverse: [{ type: Input, args: ['igxLayoutReverse',] }],
wrap: [{ type: Input, args: ['igxLayoutWrap',] }],
justify: [{ type: Input, args: ['igxLayoutJustify',] }],
itemAlign: [{ type: Input, args: ['igxLayoutItemAlign',] }],
display: [{ type: HostBinding, args: ['style.display',] }],
flexwrap: [{ type: HostBinding, args: ['style.flex-wrap',] }],
justifycontent: [{ type: HostBinding, args: ['style.justify-content',] }],
align: [{ type: HostBinding, args: ['style.align-items',] }],
direction: [{ type: HostBinding, args: ['style.flex-direction',] }]
};
if (false) {
/**
* Sets the default flow direction of the container's children.
*
* Defaults to `rows`.
*
* ```html
* <div
* igxLayout
* igxLayoutDir="row">
* <div igxFlex>1</div>
* <div igxFlex>2</div>
* <div igxFlex>3</div>
* </div>
* ```
* @type {?}
*/
IgxLayoutDirective.prototype.dir;
/**
* Defines the direction flex children are placed in the flex container.
*
* When set to `true`, the `rows` direction goes right to left and `columns` goes bottom to top.
*
* ```html
* <div
* igxLayout
* igxLayoutReverse="true">
* <div igxFlex>1</div>
* <div igxFlex>2</div>
* <div igxFlex>3</div>
* </div>
* ```
* @type {?}
*/
IgxLayoutDirective.prototype.reverse;
/**
* By default the immediate children will all try to fit onto one line.
*
* The default value `nowrap` sets this behavior.
*
* Other accepted values are `wrap` and `wrap-reverse`.
*
* ```html
* <div
* igxLayout
* igxLayoutDir="row"
* igxLayoutWrap="wrap">
* <div igxFlex igxFlexGrow="0">1</div>
* <div igxFlex igxFlexGrow="0">2</div>
* <div igxFlex igxFlexGrow="0">3</div>
* </div>
* ```
* @type {?}
*/
IgxLayoutDirective.prototype.wrap;
/**
* Defines the alignment along the main axis.
*
* Defaults to `flex-start` which packs the children toward the start line.
*
* Other possible values are `flex-end`, `center`, `space-between`, `space-around`.
*
* ```html
* <div
* igxLayout
* igxLayoutDir="column"
* igxLayoutJustify="space-between">
* <div>1</div>
* <div>2</div>
* <div>3</div>
* </div>
* ```
* @type {?}
*/
IgxLayoutDirective.prototype.justify;
/**
* Defines the default behavior for how children are laid out along the corss axis of the current line.
*
* Defaults to `flex-start`.
*
* Other possible values are `flex-end`, `center`, `baseline`, and `stretch`.
*
* ```html
* <div
* igxLayout
* igxLayoutDir="column"
* igxLayoutItemAlign="start">
* <div igxFlex igxFlexGrow="0">1</div>
* <div igxFlex igxFlexGrow="0">2</div>
* <div igxFlex igxFlexGrow="0">3</div>
* </div>
* ```
* @type {?}
*/
IgxLayoutDirective.prototype.itemAlign;
/**
* @hidden
* @type {?}
*/
IgxLayoutDirective.prototype.display;
}
export class IgxFlexDirective {
constructor() {
/**
* Applies the `grow` attribute to an element that uses the directive.
*
* Default value is `1`.
*
* ```html
* <div>
* <div igxFlex igxFlexGrow="0">Content1</div>
* <div igxFlex igxFlexGrow="1">Content2</div>
* <div igxFlex igxFlexGrow="0">Content3</div>
* </div>
* ```
*/
this.grow = 1;
/**
* Applies the `shrink` attribute to an element that uses the directive.
*
* Default value is `1`.
*
* ```html
* <div>
* <div igxFlex igxFlexShrink="1">Content1</div>
* <div igxFlex igxFlexShrink="0">Content2</div>
* <div igxFlex igxFlexShrink="1">Content3</div>
* </div>
* ```
*/
this.shrink = 1;
/**
* Applies the directive to an element.
*
* Possible values include `igxFlexGrow`, `igxFlexShrink`, `igxFlexOrder`, `igxFlexBasis`.
*
* ```html
* <div igxFlex>Content</div>
* ```
*/
this.flex = '';
/**
* Applies the `order` attribute to an element that uses the directive.
*
* Default value is `0`.
*
* ```html
* <div>
* <div igxFlex igxFlexOrder="1">Content1</div>
* <div igxFlex igxFlexOrder="0">Content2</div>
* <div igxFlex igxFlexOrder="2">Content3</div>
* </div>
* ```
*/
this.order = 0;
/**
* Applies the `flex-basis` attribute to an element that uses the directive.
*
* Default value is `auto`.
*
* Other possible values include `content`, `max-content`, `min-content`, `fit-content`.
*
* ```html
* <div igxFlex igxFlexBasis="fit-content">Content</div>
* ```
*/
this.basis = 'auto';
}
/**
* @hidden
* @return {?}
*/
get style() {
if (this.flex) {
return `${this.flex}`;
}
return `${this.grow} ${this.shrink} ${this.basis}`;
}
/**
* @hidden
* @return {?}
*/
get itemorder() {
return this.order || 0;
}
}
IgxFlexDirective.decorators = [
{ type: Directive, args: [{
selector: '[igxFlex]'
},] }
];
IgxFlexDirective.propDecorators = {
grow: [{ type: Input, args: ['igxFlexGrow',] }],
shrink: [{ type: Input, args: ['igxFlexShrink',] }],
flex: [{ type: Input, args: ['igxFlex',] }],
order: [{ type: Input, args: ['igxFlexOrder',] }],
basis: [{ type: Input, args: ['igxFlexBasis',] }],
style: [{ type: HostBinding, args: ['style.flex',] }],
itemorder: [{ type: HostBinding, args: ['style.order',] }]
};
if (false) {
/**
* Applies the `grow` attribute to an element that uses the directive.
*
* Default value is `1`.
*
* ```html
* <div>
* <div igxFlex igxFlexGrow="0">Content1</div>
* <div igxFlex igxFlexGrow="1">Content2</div>
* <div igxFlex igxFlexGrow="0">Content3</div>
* </div>
* ```
* @type {?}
*/
IgxFlexDirective.prototype.grow;
/**
* Applies the `shrink` attribute to an element that uses the directive.
*
* Default value is `1`.
*
* ```html
* <div>
* <div igxFlex igxFlexShrink="1">Content1</div>
* <div igxFlex igxFlexShrink="0">Content2</div>
* <div igxFlex igxFlexShrink="1">Content3</div>
* </div>
* ```
* @type {?}
*/
IgxFlexDirective.prototype.shrink;
/**
* Applies the directive to an element.
*
* Possible values include `igxFlexGrow`, `igxFlexShrink`, `igxFlexOrder`, `igxFlexBasis`.
*
* ```html
* <div igxFlex>Content</div>
* ```
* @type {?}
*/
IgxFlexDirective.prototype.flex;
/**
* Applies the `order` attribute to an element that uses the directive.
*
* Default value is `0`.
*
* ```html
* <div>
* <div igxFlex igxFlexOrder="1">Content1</div>
* <div igxFlex igxFlexOrder="0">Content2</div>
* <div igxFlex igxFlexOrder="2">Content3</div>
* </div>
* ```
* @type {?}
*/
IgxFlexDirective.prototype.order;
/**
* Applies the `flex-basis` attribute to an element that uses the directive.
*
* Default value is `auto`.
*
* Other possible values include `content`, `max-content`, `min-content`, `fit-content`.
*
* ```html
* <div igxFlex igxFlexBasis="fit-content">Content</div>
* ```
* @type {?}
*/
IgxFlexDirective.prototype.basis;
}
/**
* @hidden
*/
export class IgxLayoutModule {
}
IgxLayoutModule.decorators = [
{ type: NgModule, args: [{
declarations: [IgxFlexDirective, IgxLayoutDirective],
exports: [IgxFlexDirective, IgxLayoutDirective]
},] }
];
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibGF5b3V0LmRpcmVjdGl2ZS5qcyIsInNvdXJjZVJvb3QiOiJuZzovL2lnbml0ZXVpLWFuZ3VsYXIvIiwic291cmNlcyI6WyJsaWIvZGlyZWN0aXZlcy9sYXlvdXQvbGF5b3V0LmRpcmVjdGl2ZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7O0FBQUEsT0FBTyxFQUFFLFNBQVMsRUFBRSxXQUFXLEVBQUUsS0FBSyxFQUFFLFFBQVEsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUt4RSxNQUFNLE9BQU8sa0JBQWtCO0lBSC9COzs7Ozs7Ozs7Ozs7Ozs7O1FBbUJrQyxRQUFHLEdBQUcsS0FBSyxDQUFDOzs7Ozs7Ozs7Ozs7Ozs7O1FBaUJSLFlBQU8sR0FBRyxLQUFLLENBQUM7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7UUFvQm5CLFNBQUksR0FBRyxRQUFRLENBQUM7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7UUFvQmIsWUFBTyxHQUFHLFlBQVksQ0FBQzs7Ozs7Ozs7Ozs7Ozs7Ozs7OztRQW9CckIsY0FBUyxHQUFHLFNBQVMsQ0FBQzs7OztRQUtyQixZQUFPLEdBQUcsTUFBTSxDQUFDO0lBMkIxRCxDQUFDOzs7OztJQXRCRyxJQUFvQyxRQUFRLEtBQUssT0FBTyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQzs7Ozs7SUFLcEUsSUFBMEMsY0FBYyxLQUFLLE9BQU8sSUFBSSxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUM7Ozs7O0lBS25GLElBQXNDLEtBQUssS0FBSyxPQUFPLElBQUksQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDOzs7OztJQUt4RSxJQUNJLFNBQVM7UUFDVCxJQUFJLElBQUksQ0FBQyxPQUFPLEVBQUU7WUFDZCxPQUFPLENBQUMsSUFBSSxDQUFDLEdBQUcsS0FBSyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsYUFBYSxDQUFDLENBQUMsQ0FBQyxnQkFBZ0IsQ0FBQztTQUNsRTtRQUNELE9BQU8sQ0FBQyxJQUFJLENBQUMsR0FBRyxLQUFLLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLFFBQVEsQ0FBQztJQUNuRCxDQUFDOzs7WUEvSEosU0FBUyxTQUFDO2dCQUNQLFFBQVEsRUFBRSxhQUFhO2FBQzFCOzs7a0JBaUJJLEtBQUssU0FBQyxjQUFjO3NCQWlCcEIsS0FBSyxTQUFDLGtCQUFrQjttQkFvQnhCLEtBQUssU0FBQyxlQUFlO3NCQW9CckIsS0FBSyxTQUFDLGtCQUFrQjt3QkFvQnhCLEtBQUssU0FBQyxvQkFBb0I7c0JBSzFCLFdBQVcsU0FBQyxlQUFlO3VCQUszQixXQUFXLFNBQUMsaUJBQWlCOzZCQUs3QixXQUFXLFNBQUMsdUJBQXVCO29CQUtuQyxXQUFXLFNBQUMsbUJBQW1CO3dCQUsvQixXQUFXLFNBQUMsc0JBQXNCOzs7Ozs7Ozs7Ozs7Ozs7Ozs7O0lBdEduQyxpQ0FBMEM7Ozs7Ozs7Ozs7Ozs7Ozs7O0lBaUIxQyxxQ0FBa0Q7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0lBb0JsRCxrQ0FBK0M7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0lBb0IvQyxxQ0FBeUQ7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0lBb0J6RCx1Q0FBMEQ7Ozs7O0lBSzFELHFDQUFzRDs7QUFnQzFELE1BQU0sT0FBTyxnQkFBZ0I7SUFIN0I7Ozs7Ozs7Ozs7Ozs7O1FBa0JpQyxTQUFJLEdBQUcsQ0FBQyxDQUFDOzs7Ozs7Ozs7Ozs7OztRQWVQLFdBQU0sR0FBRyxDQUFDLENBQUM7Ozs7Ozs7Ozs7UUFXakIsU0FBSSxHQUFHLEVBQUUsQ0FBQzs7Ozs7Ozs7Ozs7Ozs7UUFlTCxVQUFLLEdBQUcsQ0FBQyxDQUFDOzs7Ozs7Ozs7Ozs7UUFhVixVQUFLLEdBQUcsTUFBTSxDQUFDO0lBb0JqRCxDQUFDOzs7OztJQWZHLElBQ0ksS0FBSztRQUNMLElBQUksSUFBSSxDQUFDLElBQUksRUFBRTtZQUNYLE9BQU8sR0FBRyxJQUFJLENBQUMsSUFBSSxFQUFFLENBQUM7U0FDekI7UUFDRCxPQUFPLEdBQUcsSUFBSSxDQUFDLElBQUksSUFBSSxJQUFJLENBQUMsTUFBTSxJQUFJLElBQUksQ0FBQyxLQUFLLEVBQUUsQ0FBQztJQUN2RCxDQUFDOzs7OztJQUtELElBQ0ksU0FBUztRQUNULE9BQU8sSUFBSSxDQUFDLEtBQUssSUFBSSxDQUFDLENBQUM7SUFDM0IsQ0FBQzs7O1lBM0ZKLFNBQVMsU0FBQztnQkFDUCxRQUFRLEVBQUUsV0FBVzthQUN4Qjs7O21CQWdCSSxLQUFLLFNBQUMsYUFBYTtxQkFlbkIsS0FBSyxTQUFDLGVBQWU7bUJBV3JCLEtBQUssU0FBQyxTQUFTO29CQWVmLEtBQUssU0FBQyxjQUFjO29CQWFwQixLQUFLLFNBQUMsY0FBYztvQkFLcEIsV0FBVyxTQUFDLFlBQVk7d0JBV3hCLFdBQVcsU0FBQyxhQUFhOzs7Ozs7Ozs7Ozs7Ozs7OztJQXRFMUIsZ0NBQXNDOzs7Ozs7Ozs7Ozs7Ozs7SUFldEMsa0NBQTBDOzs7Ozs7Ozs7OztJQVcxQyxnQ0FBbUM7Ozs7Ozs7Ozs7Ozs7OztJQWVuQyxpQ0FBd0M7Ozs7Ozs7Ozs7Ozs7SUFheEMsaUNBQTZDOzs7OztBQTZCakQsTUFBTSxPQUFPLGVBQWU7OztZQUozQixRQUFRLFNBQUM7Z0JBQ04sWUFBWSxFQUFFLENBQUMsZ0JBQWdCLEVBQUUsa0JBQWtCLENBQUM7Z0JBQ3BELE9BQU8sRUFBRSxDQUFDLGdCQUFnQixFQUFFLGtCQUFrQixDQUFDO2FBQ2xEIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgRGlyZWN0aXZlLCBIb3N0QmluZGluZywgSW5wdXQsIE5nTW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5cbkBEaXJlY3RpdmUoe1xuICAgIHNlbGVjdG9yOiAnW2lneExheW91dF0nXG59KVxuZXhwb3J0IGNsYXNzIElneExheW91dERpcmVjdGl2ZSB7XG4gICAgLyoqXG4gICAgICogU2V0cyB0aGUgZGVmYXVsdCBmbG93IGRpcmVjdGlvbiBvZiB0aGUgY29udGFpbmVyJ3MgY2hpbGRyZW4uXG4gICAgICpcbiAgICAgKiBEZWZhdWx0cyB0byBgcm93c2AuXG4gICAgICpcbiAgICAgKiBgYGBodG1sXG4gICAgICogIDxkaXZcbiAgICAgKiAgIGlneExheW91dFxuICAgICAqICAgaWd4TGF5b3V0RGlyPVwicm93XCI+XG4gICAgICogICAgPGRpdiBpZ3hGbGV4PjE8L2Rpdj5cbiAgICAgKiAgICA8ZGl2IGlneEZsZXg+MjwvZGl2PlxuICAgICAqICAgIDxkaXYgaWd4RmxleD4zPC9kaXY+XG4gICAgICogIDwvZGl2PlxuICAgICAqIGBgYFxuICAgICAqL1xuICAgIEBJbnB1dCgnaWd4TGF5b3V0RGlyJykgcHVibGljIGRpciA9ICdyb3cnO1xuXG4gICAgLyoqXG4gICAgICogRGVmaW5lcyB0aGUgZGlyZWN0aW9uIGZsZXggY2hpbGRyZW4gYXJlIHBsYWNlZCBpbiB0aGUgZmxleCBjb250YWluZXIuXG4gICAgICpcbiAgICAgKiBXaGVuIHNldCB0byBgdHJ1ZWAsIHRoZSBgcm93c2AgZGlyZWN0aW9uIGdvZXMgcmlnaHQgdG8gbGVmdCBhbmQgYGNvbHVtbnNgIGdvZXMgYm90dG9tIHRvIHRvcC5cbiAgICAgKlxuICAgICAqIGBgYGh0bWxcbiAgICAgKiA8ZGl2XG4gICAgICogICBpZ3hMYXlvdXRcbiAgICAgKiAgIGlneExheW91dFJldmVyc2U9XCJ0cnVlXCI+XG4gICAgICogICAgPGRpdiBpZ3hGbGV4PjE8L2Rpdj5cbiAgICAgKiAgICA8ZGl2IGlneEZsZXg+MjwvZGl2PlxuICAgICAqICAgIDxkaXYgaWd4RmxleD4zPC9kaXY+XG4gICAgICogPC9kaXY+XG4gICAgICogYGBgXG4gICAgICovXG4gICAgQElucHV0KCdpZ3hMYXlvdXRSZXZlcnNlJykgcHVibGljIHJldmVyc2UgPSBmYWxzZTtcblxuICAgIC8qKlxuICAgICAqIEJ5IGRlZmF1bHQgdGhlIGltbWVkaWF0ZSBjaGlsZHJlbiB3aWxsIGFsbCB0cnkgdG8gZml0IG9udG8gb25lIGxpbmUuXG4gICAgICpcbiAgICAgKiBUaGUgZGVmYXVsdCB2YWx1ZSBgbm93cmFwYCBzZXRzIHRoaXMgYmVoYXZpb3IuXG4gICAgICpcbiAgICAgKiBPdGhlciBhY2NlcHRlZCB2YWx1ZXMgYXJlIGB3cmFwYCBhbmQgYHdyYXAtcmV2ZXJzZWAuXG4gICAgICpcbiAgICAgKiBgYGBodG1sXG4gICAgICogPGRpdlxuICAgICAqICAgaWd4TGF5b3V0XG4gICAgICogICBpZ3hMYXlvdXREaXI9XCJyb3dcIlxuICAgICAqICAgaWd4TGF5b3V0V3JhcD1cIndyYXBcIj5cbiAgICAgKiAgICA8ZGl2IGlneEZsZXggaWd4RmxleEdyb3c9XCIwXCI+MTwvZGl2PlxuICAgICAqICAgIDxkaXYgaWd4RmxleCBpZ3hGbGV4R3Jvdz1cIjBcIj4yPC9kaXY+XG4gICAgICogICAgPGRpdiBpZ3hGbGV4IGlneEZsZXhHcm93PVwiMFwiPjM8L2Rpdj5cbiAgICAgKiA8L2Rpdj5cbiAgICAgKiBgYGBcbiAgICAgKi9cbiAgICBASW5wdXQoJ2lneExheW91dFdyYXAnKSBwdWJsaWMgd3JhcCA9ICdub3dyYXAnO1xuXG4gICAgLyoqXG4gICAgICogRGVmaW5lcyB0aGUgYWxpZ25tZW50IGFsb25nIHRoZSBtYWluIGF4aXMuXG4gICAgICpcbiAgICAgKiBEZWZhdWx0cyB0byBgZmxleC1zdGFydGAgd2hpY2ggcGFja3MgdGhlIGNoaWxkcmVuIHRvd2FyZCB0aGUgc3RhcnQgbGluZS5cbiAgICAgKlxuICAgICAqIE90aGVyIHBvc3NpYmxlIHZhbHVlcyBhcmUgYGZsZXgtZW5kYCwgYGNlbnRlcmAsIGBzcGFjZS1iZXR3ZWVuYCwgYHNwYWNlLWFyb3VuZGAuXG4gICAgICpcbiAgICAgKiBgYGBodG1sXG4gICAgICogPGRpdlxuICAgICAqICAgaWd4TGF5b3V0XG4gICAgICogICBpZ3hMYXlvdXREaXI9XCJjb2x1bW5cIlxuICAgICAqICAgaWd4TGF5b3V0SnVzdGlmeT1cInNwYWNlLWJldHdlZW5cIj5cbiAgICAgKiAgICA8ZGl2PjE8L2Rpdj5cbiAgICAgKiAgICA8ZGl2PjI8L2Rpdj5cbiAgICAgKiAgICA8ZGl2PjM8L2Rpdj5cbiAgICAgKiA8L2Rpdj5cbiAgICAgKiBgYGBcbiAgICAgKi9cbiAgICBASW5wdXQoJ2lneExheW91dEp1c3RpZnknKSBwdWJsaWMganVzdGlmeSA9ICdmbGV4LXN0YXJ0JztcblxuICAgIC8qKlxuICAgICAqIERlZmluZXMgdGhlIGRlZmF1bHQgYmVoYXZpb3IgZm9yIGhvdyBjaGlsZHJlbiBhcmUgbGFpZCBvdXQgYWxvbmcgdGhlIGNvcnNzIGF4aXMgb2YgdGhlIGN1cnJlbnQgbGluZS5cbiAgICAgKlxuICAgICAqIERlZmF1bHRzIHRvIGBmbGV4LXN0YXJ0YC5cbiAgICAgKlxuICAgICAqIE90aGVyIHBvc3NpYmxlIHZhbHVlcyBhcmUgYGZsZXgtZW5kYCwgYGNlbnRlcmAsIGBiYXNlbGluZWAsIGFuZCBgc3RyZXRjaGAuXG4gICAgICpcbiAgICAgKiBgYGBodG1sXG4gICAgICogPGRpdlxuICAgICAqICAgaWd4TGF5b3V0XG4gICAgICogICBpZ3hMYXlvdXREaXI9XCJjb2x1bW5cIlxuICAgICAqICAgaWd4TGF5b3V0SXRlbUFsaWduPVwic3RhcnRcIj5cbiAgICAgKiAgICA8ZGl2IGlneEZsZXggaWd4RmxleEdyb3c9XCIwXCI+MTwvZGl2PlxuICAgICAqICAgIDxkaXYgaWd4RmxleCBpZ3hGbGV4R3Jvdz1cIjBcIj4yPC9kaXY+XG4gICAgICogICAgPGRpdiBpZ3hGbGV4IGlneEZsZXhHcm93PVwiMFwiPjM8L2Rpdj5cbiAgICAgKiA8L2Rpdj5cbiAgICAgKiBgYGBcbiAgICAgKi9cbiAgICBASW5wdXQoJ2lneExheW91dEl0ZW1BbGlnbicpIHB1YmxpYyBpdGVtQWxpZ24gPSAnc3RyZXRjaCc7XG5cbiAgICAvKipcbiAgICAgKiBAaGlkZGVuXG4gICAgICovXG4gICAgQEhvc3RCaW5kaW5nKCdzdHlsZS5kaXNwbGF5JykgcHVibGljIGRpc3BsYXkgPSAnZmxleCc7XG5cbiAgICAvKipcbiAgICAgKiBAaGlkZGVuXG4gICAgICovXG4gICAgQEhvc3RCaW5kaW5nKCdzdHlsZS5mbGV4LXdyYXAnKSBnZXQgZmxleHdyYXAoKSB7IHJldHVybiB0aGlzLndyYXA7IH1cblxuICAgIC8qKlxuICAgICAqIEBoaWRkZW5cbiAgICAgKi9cbiAgICBASG9zdEJpbmRpbmcoJ3N0eWxlLmp1c3RpZnktY29udGVudCcpIGdldCBqdXN0aWZ5Y29udGVudCgpIHsgcmV0dXJuIHRoaXMuanVzdGlmeTsgfVxuXG4gICAgLyoqXG4gICAgICogQGhpZGRlblxuICAgICAqL1xuICAgIEBIb3N0QmluZGluZygnc3R5bGUuYWxpZ24taXRlbXMnKSBnZXQgYWxpZ24oKSB7IHJldHVybiB0aGlzLml0ZW1BbGlnbjsgfVxuXG4gICAgLyoqXG4gICAgICogQGhpZGRlblxuICAgICAqL1xuICAgIEBIb3N0QmluZGluZygnc3R5bGUuZmxleC1kaXJlY3Rpb24nKVxuICAgIGdldCBkaXJlY3Rpb24oKSB7XG4gICAgICAgIGlmICh0aGlzLnJldmVyc2UpIHtcbiAgICAgICAgICAgIHJldHVybiAodGhpcy5kaXIgPT09ICdyb3cnKSA/ICdyb3ctcmV2ZXJzZScgOiAnY29sdW1uLXJldmVyc2UnO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiAodGhpcy5kaXIgPT09ICdyb3cnKSA/ICdyb3cnIDogJ2NvbHVtbic7XG4gICAgfVxufVxuXG5ARGlyZWN0aXZlKHtcbiAgICBzZWxlY3RvcjogJ1tpZ3hGbGV4XSdcbn0pXG5leHBvcnQgY2xhc3MgSWd4RmxleERpcmVjdGl2ZSB7XG5cbiAgICAvKipcbiAgICAgKiBBcHBsaWVzIHRoZSBgZ3Jvd2AgYXR0cmlidXRlIHRvIGFuIGVsZW1lbnQgdGhhdCB1c2VzIHRoZSBkaXJlY3RpdmUuXG4gICAgICpcbiAgICAgKiBEZWZhdWx0IHZhbHVlIGlzIGAxYC5cbiAgICAgKlxuICAgICAqIGBgYGh0bWxcbiAgICAgKiA8ZGl2PlxuICAgICAqICAgIDxkaXYgaWd4RmxleCBpZ3hGbGV4R3Jvdz1cIjBcIj5Db250ZW50MTwvZGl2PlxuICAgICAqICAgIDxkaXYgaWd4RmxleCBpZ3hGbGV4R3Jvdz1cIjFcIj5Db250ZW50MjwvZGl2PlxuICAgICAqICAgIDxkaXYgaWd4RmxleCBpZ3hGbGV4R3Jvdz1cIjBcIj5Db250ZW50MzwvZGl2PlxuICAgICAqIDwvZGl2PlxuICAgICAqIGBgYFxuICAgICAqL1xuICAgIEBJbnB1dCgnaWd4RmxleEdyb3cnKSBwdWJsaWMgZ3JvdyA9IDE7XG5cbiAgICAvKipcbiAgICAgKiBBcHBsaWVzIHRoZSBgc2hyaW5rYCBhdHRyaWJ1dGUgdG8gYW4gZWxlbWVudCB0aGF0IHVzZXMgdGhlIGRpcmVjdGl2ZS5cbiAgICAgKlxuICAgICAqIERlZmF1bHQgdmFsdWUgaXMgYDFgLlxuICAgICAqXG4gICAgICogYGBgaHRtbFxuICAgICAqIDxkaXY+XG4gICAgICogICAgPGRpdiBpZ3hGbGV4IGlneEZsZXhTaHJpbms9XCIxXCI+Q29udGVudDE8L2Rpdj5cbiAgICAgKiAgICA8ZGl2IGlneEZsZXggaWd4RmxleFNocmluaz1cIjBcIj5Db250ZW50MjwvZGl2PlxuICAgICAqICAgIDxkaXYgaWd4RmxleCBpZ3hGbGV4U2hyaW5rPVwiMVwiPkNvbnRlbnQzPC9kaXY+XG4gICAgICogPC9kaXY+XG4gICAgICogYGBgXG4gICAgICovXG4gICAgQElucHV0KCdpZ3hGbGV4U2hyaW5rJykgcHVibGljIHNocmluayA9IDE7XG5cbiAgICAvKipcbiAgICAgKiBBcHBsaWVzIHRoZSBkaXJlY3RpdmUgdG8gYW4gZWxlbWVudC5cbiAgICAgKlxuICAgICAqIFBvc3NpYmxlIHZhbHVlcyBpbmNsdWRlIGBpZ3hGbGV4R3Jvd2AsIGBpZ3hGbGV4U2hyaW5rYCwgYGlneEZsZXhPcmRlcmAsIGBpZ3hGbGV4QmFzaXNgLlxuICAgICAqXG4gICAgICogYGBgaHRtbFxuICAgICAqIDxkaXYgaWd4RmxleD5Db250ZW50PC9kaXY+XG4gICAgICogYGBgXG4gICAgICovXG4gICAgQElucHV0KCdpZ3hGbGV4JykgcHVibGljIGZsZXggPSAnJztcblxuICAgIC8qKlxuICAgICAqIEFwcGxpZXMgdGhlIGBvcmRlcmAgYXR0cmlidXRlIHRvIGFuIGVsZW1lbnQgdGhhdCB1c2VzIHRoZSBkaXJlY3RpdmUuXG4gICAgICpcbiAgICAgKiBEZWZhdWx0IHZhbHVlIGlzIGAwYC5cbiAgICAgKlxuICAgICAqIGBgYGh0bWxcbiAgICAgKiA8ZGl2PlxuICAgICAqICAgIDxkaXYgaWd4RmxleCBpZ3hGbGV4T3JkZXI9XCIxXCI+Q29udGVudDE8L2Rpdj5cbiAgICAgKiAgICA8ZGl2IGlneEZsZXggaWd4RmxleE9yZGVyPVwiMFwiPkNvbnRlbnQyPC9kaXY+XG4gICAgICogICAgPGRpdiBpZ3hGbGV4IGlneEZsZXhPcmRlcj1cIjJcIj5Db250ZW50MzwvZGl2PlxuICAgICAqIDwvZGl2PlxuICAgICAqIGBgYFxuICAgICAqL1xuICAgIEBJbnB1dCgnaWd4RmxleE9yZGVyJykgcHVibGljIG9yZGVyID0gMDtcblxuICAgIC8qKlxuICAgICAqIEFwcGxpZXMgdGhlIGBmbGV4LWJhc2lzYCBhdHRyaWJ1dGUgdG8gYW4gZWxlbWVudCB0aGF0IHVzZXMgdGhlIGRpcmVjdGl2ZS5cbiAgICAgKlxuICAgICAqIERlZmF1bHQgdmFsdWUgaXMgYGF1dG9gLlxuICAgICAqXG4gICAgICogT3RoZXIgcG9zc2libGUgdmFsdWVzIGluY2x1ZGUgYGNvbnRlbnRgLCBgbWF4LWNvbnRlbnRgLCBgbWluLWNvbnRlbnRgLCBgZml0LWNvbnRlbnRgLlxuICAgICAqXG4gICAgICogYGBgaHRtbFxuICAgICAqIDxkaXYgaWd4RmxleCBpZ3hGbGV4QmFzaXM9XCJmaXQtY29udGVudFwiPkNvbnRlbnQ8L2Rpdj5cbiAgICAgKiBgYGBcbiAgICAgKi9cbiAgICBASW5wdXQoJ2lneEZsZXhCYXNpcycpIHB1YmxpYyBiYXNpcyA9ICdhdXRvJztcblxuICAgIC8qKlxuICAgICAqIEBoaWRkZW5cbiAgICAgKi9cbiAgICBASG9zdEJpbmRpbmcoJ3N0eWxlLmZsZXgnKVxuICAgIGdldCBzdHlsZSgpIHtcbiAgICAgICAgaWYgKHRoaXMuZmxleCkge1xuICAgICAgICAgICAgcmV0dXJuIGAke3RoaXMuZmxleH1gO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBgJHt0aGlzLmdyb3d9ICR7dGhpcy5zaHJpbmt9ICR7dGhpcy5iYXNpc31gO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEBoaWRkZW5cbiAgICAgKi9cbiAgICBASG9zdEJpbmRpbmcoJ3N0eWxlLm9yZGVyJylcbiAgICBnZXQgaXRlbW9yZGVyKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5vcmRlciB8fCAwO1xuICAgIH1cbn1cblxuLyoqXG4gKiBAaGlkZGVuXG4gKi9cbkBOZ01vZHVsZSh7XG4gICAgZGVjbGFyYXRpb25zOiBbSWd4RmxleERpcmVjdGl2ZSwgSWd4TGF5b3V0RGlyZWN0aXZlXSxcbiAgICBleHBvcnRzOiBbSWd4RmxleERpcmVjdGl2ZSwgSWd4TGF5b3V0RGlyZWN0aXZlXVxufSlcbmV4cG9ydCBjbGFzcyBJZ3hMYXlvdXRNb2R1bGUgeyB9XG4iXX0=