carbon-components-angular
Version:
Next generation components
203 lines • 18.4 kB
JavaScript
import { Directive, HostBinding, Input } from "@angular/core";
import * as i0 from "@angular/core";
/**
* A convenience directive for applying styling to a button. Get started with importing the module:
*
* ```typescript
* import { ButtonModule } from 'carbon-components-angular';
* ```
*
* Example:
*
* ```html
* <button cdsButton>A button</button>
* <button cdsButton="secondary">A secondary button</button>
* ```
*
* See the [vanilla carbon docs](http://www.carbondesignsystem.com/components/button/code) for more detail.
*
* [See demo](../../?path=/story/components-button--basic)
*/
export class Button {
constructor() {
/**
* Sets the button type
* Accepts `ButtonType` or nothing (empty string which is equivalent to "primary")
* Empty string has been added as an option for Angular 16+ to resolve type errors
*/
this.cdsButton = "primary";
/**
* Set to `true` for a skeleton state button
*/
this.skeleton = false;
/**
* Set to `true` if the button contains only an icon
* This should only be used for creating custom icon buttons, otherwise use
* `<cds-icon-button></cds-icon-button>` component
*/
this.iconOnly = false;
/**
* Set to `true` for a "expressive" style button
*/
this.isExpressive = false;
// a whole lot of HostBindings ... this way we don't have to touch the elementRef directly
this.baseClass = true;
}
/**
* @deprecated as of v5 - Use `cdsButton` input property instead
*/
set ibmButton(type) {
this.cdsButton = type;
}
get primaryButton() {
return this.cdsButton === "primary" || !this.cdsButton;
}
get secondaryButton() {
return this.cdsButton === "secondary";
}
get tertiaryButton() {
return this.cdsButton === "tertiary";
}
get ghostButton() {
return this.cdsButton === "ghost";
}
get dangerButton() {
return this.cdsButton === "danger" || this.cdsButton === "danger--primary";
}
get dangerTertiary() {
return this.cdsButton === "danger--tertiary";
}
get dangerGhost() {
return this.cdsButton === "danger--ghost";
}
/**
* @todo remove `cds--btn--${size}` classes in v12
*/
get extraSmallSize() {
return this.size === "xs" && !this.isExpressive;
}
get smallSize() {
return this.size === "sm" && !this.isExpressive;
}
get mediumSize() {
return this.size === "md" && !this.isExpressive;
}
get largeSize() {
return this.size === "lg";
}
get extraLargeSize() {
return this.size === "xl";
}
get twoExtraLargeSize() {
return this.size === "2xl";
}
// Size classes
get extraSmallLayoutSize() {
return this.size === "xs" && !this.isExpressive;
}
get smallLayoutSize() {
return this.size === "sm" && !this.isExpressive;
}
get mediumLayoutSize() {
return this.size === "md" && !this.isExpressive;
}
get largeLayoutSize() {
return this.size === "lg";
}
get extraLargeLayoutSize() {
return this.size === "xl";
}
get twoExtraLargeLayoutSize() {
return this.size === "2xl";
}
}
Button.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.3.0", ngImport: i0, type: Button, deps: [], target: i0.ɵɵFactoryTarget.Directive });
Button.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "14.3.0", type: Button, selector: "[cdsButton], [ibmButton]", inputs: { ibmButton: "ibmButton", cdsButton: "cdsButton", size: "size", skeleton: "skeleton", iconOnly: "iconOnly", isExpressive: "isExpressive" }, host: { properties: { "class.cds--skeleton": "this.skeleton", "class.cds--btn--icon-only": "this.iconOnly", "class.cds--btn--expressive": "this.isExpressive", "class.cds--btn": "this.baseClass", "class.cds--btn--primary": "this.primaryButton", "class.cds--btn--secondary": "this.secondaryButton", "class.cds--btn--tertiary": "this.tertiaryButton", "class.cds--btn--ghost": "this.ghostButton", "class.cds--btn--danger": "this.dangerButton", "class.cds--btn--danger--tertiary": "this.dangerTertiary", "class.cds--btn--danger--ghost": "this.dangerGhost", "class.cds--btn--xs": "this.extraSmallSize", "class.cds--btn--sm": "this.smallSize", "class.cds--btn--md": "this.mediumSize", "class.cds--btn--lg": "this.largeSize", "class.cds--btn--xl": "this.extraLargeSize", "class.cds--btn--2xl": "this.twoExtraLargeSize", "class.cds--layout--size-xs": "this.extraSmallLayoutSize", "class.cds--layout--size-sm": "this.smallLayoutSize", "class.cds--layout--size-md": "this.mediumLayoutSize", "class.cds--layout--size-lg": "this.largeLayoutSize", "class.cds--layout--size-xl": "this.extraLargeLayoutSize", "class.cds--layout--size-2xl": "this.twoExtraLargeLayoutSize" } }, ngImport: i0 });
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.3.0", ngImport: i0, type: Button, decorators: [{
type: Directive,
args: [{
selector: "[cdsButton], [ibmButton]"
}]
}], propDecorators: { ibmButton: [{
type: Input
}], cdsButton: [{
type: Input
}], size: [{
type: Input
}], skeleton: [{
type: HostBinding,
args: ["class.cds--skeleton"]
}, {
type: Input
}], iconOnly: [{
type: HostBinding,
args: ["class.cds--btn--icon-only"]
}, {
type: Input
}], isExpressive: [{
type: HostBinding,
args: ["class.cds--btn--expressive"]
}, {
type: Input
}], baseClass: [{
type: HostBinding,
args: ["class.cds--btn"]
}], primaryButton: [{
type: HostBinding,
args: ["class.cds--btn--primary"]
}], secondaryButton: [{
type: HostBinding,
args: ["class.cds--btn--secondary"]
}], tertiaryButton: [{
type: HostBinding,
args: ["class.cds--btn--tertiary"]
}], ghostButton: [{
type: HostBinding,
args: ["class.cds--btn--ghost"]
}], dangerButton: [{
type: HostBinding,
args: ["class.cds--btn--danger"]
}], dangerTertiary: [{
type: HostBinding,
args: ["class.cds--btn--danger--tertiary"]
}], dangerGhost: [{
type: HostBinding,
args: ["class.cds--btn--danger--ghost"]
}], extraSmallSize: [{
type: HostBinding,
args: ["class.cds--btn--xs"]
}], smallSize: [{
type: HostBinding,
args: ["class.cds--btn--sm"]
}], mediumSize: [{
type: HostBinding,
args: ["class.cds--btn--md"]
}], largeSize: [{
type: HostBinding,
args: ["class.cds--btn--lg"]
}], extraLargeSize: [{
type: HostBinding,
args: ["class.cds--btn--xl"]
}], twoExtraLargeSize: [{
type: HostBinding,
args: ["class.cds--btn--2xl"]
}], extraSmallLayoutSize: [{
type: HostBinding,
args: ["class.cds--layout--size-xs"]
}], smallLayoutSize: [{
type: HostBinding,
args: ["class.cds--layout--size-sm"]
}], mediumLayoutSize: [{
type: HostBinding,
args: ["class.cds--layout--size-md"]
}], largeLayoutSize: [{
type: HostBinding,
args: ["class.cds--layout--size-lg"]
}], extraLargeLayoutSize: [{
type: HostBinding,
args: ["class.cds--layout--size-xl"]
}], twoExtraLargeLayoutSize: [{
type: HostBinding,
args: ["class.cds--layout--size-2xl"]
}] } });
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYnV0dG9uLmRpcmVjdGl2ZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9idXR0b24vYnV0dG9uLmRpcmVjdGl2ZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQ04sU0FBUyxFQUNULFdBQVcsRUFDWCxLQUFLLEVBQ0wsTUFBTSxlQUFlLENBQUM7O0FBR3ZCOzs7Ozs7Ozs7Ozs7Ozs7OztHQWlCRztBQUlILE1BQU0sT0FBTyxNQUFNO0lBSG5CO1FBVUM7Ozs7V0FJRztRQUNNLGNBQVMsR0FBb0IsU0FBUyxDQUFDO1FBS2hEOztXQUVHO1FBQzBDLGFBQVEsR0FBRyxLQUFLLENBQUM7UUFDOUQ7Ozs7V0FJRztRQUNnRCxhQUFRLEdBQUcsS0FBSyxDQUFDO1FBRXBFOztXQUVHO1FBQ2lELGlCQUFZLEdBQUcsS0FBSyxDQUFDO1FBRXpFLDBGQUEwRjtRQUMzRCxjQUFTLEdBQUcsSUFBSSxDQUFDO0tBaUVoRDtJQWxHQTs7T0FFRztJQUNILElBQWEsU0FBUyxDQUFDLElBQWdCO1FBQ3RDLElBQUksQ0FBQyxTQUFTLEdBQUcsSUFBSSxDQUFDO0lBQ3ZCLENBQUM7SUE2QkQsSUFBNEMsYUFBYTtRQUN4RCxPQUFPLElBQUksQ0FBQyxTQUFTLEtBQUssU0FBUyxJQUFJLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQztJQUN4RCxDQUFDO0lBQ0QsSUFBOEMsZUFBZTtRQUM1RCxPQUFPLElBQUksQ0FBQyxTQUFTLEtBQUssV0FBVyxDQUFDO0lBQ3ZDLENBQUM7SUFDRCxJQUE2QyxjQUFjO1FBQzFELE9BQU8sSUFBSSxDQUFDLFNBQVMsS0FBSyxVQUFVLENBQUM7SUFDdEMsQ0FBQztJQUNELElBQTBDLFdBQVc7UUFDcEQsT0FBTyxJQUFJLENBQUMsU0FBUyxLQUFLLE9BQU8sQ0FBQztJQUNuQyxDQUFDO0lBQ0QsSUFBMkMsWUFBWTtRQUN0RCxPQUFPLElBQUksQ0FBQyxTQUFTLEtBQUssUUFBUSxJQUFJLElBQUksQ0FB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QVM7c0JBQS9DLFdBQVc7dUJBQUMsb0JBQW9CO2dCQUdNLFVBQVU7c0JBQWhELFdBQVc7dUJBQUMsb0JBQW9CO2dCQUdNLFNBQVM7c0JBQS9DLFdBQVc7dUJBQUMsb0JBQW9CO2dCQUdNLGNBQWM7c0JBQXBELFdBQVc7dUJBQUMsb0JBQW9CO2dCQUdPLGlCQUFpQjtzQkFBeEQsV0FBVzt1QkFBQyxxQkFBcUI7Z0JBS2Esb0JBQW9CO3NCQUFsRSxXQUFXO3VCQUFDLDRCQUE0QjtnQkFHTSxlQUFlO3NCQUE3RCxXQUFXO3VCQUFDLDRCQUE0QjtnQkFHTSxnQkFBZ0I7c0JBQTlELFdBQVc7dUJBQUMsNEJBQTRCO2dCQUdNLGVBQWU7c0JBQTdELFdBQVc7dUJBQUMsNEJBQTRCO2dCQUdNLG9CQUFvQjtzQkFBbEUsV0FBVzt1QkFBQyw0QkFBNEI7Z0JBR08sdUJBQXVCO3NCQUF0RSxXQUFXO3VCQUFDLDZCQUE2QiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7XG5cdERpcmVjdGl2ZSxcblx0SG9zdEJpbmRpbmcsXG5cdElucHV0XG59IGZyb20gXCJAYW5ndWxhci9jb3JlXCI7XG5pbXBvcnQgeyBCdXR0b25TaXplLCBCdXR0b25UeXBlIH0gZnJvbSBcIi4vYnV0dG9uLnR5cGVzXCI7XG5cbi8qKlxuICogQSBjb252ZW5pZW5jZSBkaXJlY3RpdmUgZm9yIGFwcGx5aW5nIHN0eWxpbmcgdG8gYSBidXR0b24uIEdldCBzdGFydGVkIHdpdGggaW1wb3J0aW5nIHRoZSBtb2R1bGU6XG4gKlxuICogYGBgdHlwZXNjcmlwdFxuICogaW1wb3J0IHsgQnV0dG9uTW9kdWxlIH0gZnJvbSAnY2FyYm9uLWNvbXBvbmVudHMtYW5ndWxhcic7XG4gKiBgYGBcbiAqXG4gKiBFeGFtcGxlOlxuICpcbiAqIGBgYGh0bWxcbiAqIDxidXR0b24gY2RzQnV0dG9uPkEgYnV0dG9uPC9idXR0b24+XG4gKiA8YnV0dG9uIGNkc0J1dHRvbj1cInNlY29uZGFyeVwiPkEgc2Vjb25kYXJ5IGJ1dHRvbjwvYnV0dG9uPlxuICogYGBgXG4gKlxuICogU2VlIHRoZSBbdmFuaWxsYSBjYXJib24gZG9jc10oaHR0cDovL3d3dy5jYXJib25kZXNpZ25zeXN0ZW0uY29tL2NvbXBvbmVudHMvYnV0dG9uL2NvZGUpIGZvciBtb3JlIGRldGFpbC5cbiAqXG4gKiBbU2VlIGRlbW9dKC4uLy4uLz9wYXRoPS9zdG9yeS9jb21wb25lbnRzLWJ1dHRvbi0tYmFzaWMpXG4gKi9cbkBEaXJlY3RpdmUoe1xuXHRzZWxlY3RvcjogXCJbY2RzQnV0dG9uXSwgW2libUJ1dHRvbl1cIlxufSlcbmV4cG9ydCBjbGFzcyBCdXR0b24ge1xuXHQvKipcblx0ICogQGRlcHJlY2F0ZWQgYXMgb2YgdjUgLSBVc2UgYGNkc0J1dHRvbmAgaW5wdXQgcHJvcGVydHkgaW5zdGVhZFxuXHQgKi9cblx0QElucHV0KCkgc2V0IGlibUJ1dHRvbih0eXBlOiBCdXR0b25UeXBlKSB7XG5cdFx0dGhpcy5jZHNCdXR0b24gPSB0eXBlO1xuXHR9XG5cdC8qKlxuXHQgKiBTZXRzIHRoZSBidXR0b24gdHlwZVxuXHQgKiBBY2NlcHRzIGBCdXR0b25UeXBlYCBvciBub3RoaW5nIChlbXB0eSBzdHJpbmcgd2hpY2ggaXMgZXF1aXZhbGVudCB0byBcInByaW1hcnlcIilcblx0ICogRW1wdHkgc3RyaW5nIGhhcyBiZWVuIGFkZGVkIGFzIGFuIG9wdGlvbiBmb3IgQW5ndWxhciAxNisgdG8gcmVzb2x2ZSB0eXBlIGVycm9yc1xuXHQgKi9cblx0QElucHV0KCkgY2RzQnV0dG9uOiBCdXR0b25UeXBlIHwgXCJcIiA9IFwicHJpbWFyeVwiO1xuXHQvKipcblx0ICogU3BlY2lmeSB0aGUgc2l6ZSBvZiB0aGUgYnV0dG9uXG5cdCAqL1xuXHRASW5wdXQoKSBzaXplOiBCdXR0b25TaXplO1xuXHQvKipcblx0ICogU2V0IHRvIGB0cnVlYCBmb3IgYSBza2VsZXRvbiBzdGF0ZSBidXR0b25cblx0ICovXG5cdEBIb3N0QmluZGluZyhcImNsYXNzLmNkcy0tc2tlbGV0b25cIikgQElucHV0KCkgc2tlbGV0b24gPSBmYWxzZTtcblx0LyoqXG5cdCAqIFNldCB0byBgdHJ1ZWAgaWYgdGhlIGJ1dHRvbiBjb250YWlucyBvbmx5IGFuIGljb25cblx0ICogVGhpcyBzaG91bGQgb25seSBiZSB1c2VkIGZvciBjcmVhdGluZyBjdXN0b20gaWNvbiBidXR0b25zLCBvdGhlcndpc2UgdXNlXG5cdCAqIGA8Y2RzLWljb24tYnV0dG9uPjwvY2RzLWljb24tYnV0dG9uPmAgY29tcG9uZW50XG5cdCAqL1xuXHRASG9zdEJpbmRpbmcoXCJjbGFzcy5jZHMtLWJ0bi0taWNvbi1vbmx5XCIpIEBJbnB1dCgpIGljb25Pbmx5ID0gZmFsc2U7XG5cblx0LyoqXG5cdCAqIFNldCB0byBgdHJ1ZWAgZm9yIGEgXCJleHByZXNzaXZlXCIgc3R5bGUgYnV0dG9uXG5cdCAqL1xuXHRASG9zdEJpbmRpbmcoXCJjbGFzcy5jZHMtLWJ0bi0tZXhwcmVzc2l2ZVwiKSBASW5wdXQoKSBpc0V4cHJlc3NpdmUgPSBmYWxzZTtcblxuXHQvLyBhIHdob2xlIGxvdCBvZiBIb3N0QmluZGluZ3MgLi4uIHRoaXMgd2F5IHdlIGRvbid0IGhhdmUgdG8gdG91Y2ggdGhlIGVsZW1lbnRSZWYgZGlyZWN0bHlcblx0QEhvc3RCaW5kaW5nKFwiY2xhc3MuY2RzLS1idG5cIikgYmFzZUNsYXNzID0gdHJ1ZTtcblx0QEhvc3RCaW5kaW5nKFwiY2xhc3MuY2RzLS1idG4tLXByaW1hcnlcIikgZ2V0IHByaW1hcnlCdXR0b24oKSB7XG5cdFx0cmV0dXJuIHRoaXMuY2RzQnV0dG9uID09PSBcInByaW1hcnlcIiB8fCAhdGhpcy5jZHNCdXR0b247XG5cdH1cblx0QEhvc3RCaW5kaW5nKFwiY2xhc3MuY2RzLS1idG4tLXNlY29uZGFyeVwiKSBnZXQgc2Vjb25kYXJ5QnV0dG9uKCkge1xuXHRcdHJldHVybiB0aGlzLmNkc0J1dHRvbiA9PT0gXCJzZWNvbmRhcnlcIjtcblx0fVxuXHRASG9zdEJpbmRpbmcoXCJjbGFzcy5jZHMtLWJ0bi0tdGVydGlhcnlcIikgZ2V0IHRlcnRpYXJ5QnV0dG9uKCkge1xuXHRcdHJldHVybiB0aGlzLmNkc0J1dHRvbiA9PT0gXCJ0ZXJ0aWFyeVwiO1xuXHR9XG5cdEBIb3N0QmluZGluZyhcImNsYXNzLmNkcy0tYnRuLS1naG9zdFwiKSBnZXQgZ2hvc3RCdXR0b24oKSB7XG5cdFx0cmV0dXJuIHRoaXMuY2RzQnV0dG9uID09PSBcImdob3N0XCI7XG5cdH1cblx0QEhvc3RCaW5kaW5nKFwiY2xhc3MuY2RzLS1idG4tLWRhbmdlclwiKSBnZXQgZGFuZ2VyQnV0dG9uKCkge1xuXHRcdHJldHVybiB0aGlzLmNkc0J1dHRvbiA9PT0gXCJkYW5nZXJcIiB8fCB0aGlzLmNkc0J1dHRvbiA9PT0gXCJkYW5nZXItLXByaW1hcnlcIjtcblx0fVxuXHRASG9zdEJpbmRpbmcoXCJjbGFzcy5jZHMtLWJ0bi0tZGFuZ2VyLS10ZXJ0aWFyeVwiKSBnZXQgZGFuZ2VyVGVydGlhcnkoKSB7XG5cdFx0cmV0dXJuIHRoaXMuY2RzQnV0dG9uID09PSBcImRhbmdlci0tdGVydGlhcnlcIjtcblx0fVxuXHRASG9zdEJpbmRpbmcoXCJjbGFzcy5jZHMtLWJ0bi0tZGFuZ2VyLS1naG9zdFwiKSBnZXQgZGFuZ2VyR2hvc3QoKSB7XG5cdFx0cmV0dXJuIHRoaXMuY2RzQnV0dG9uID09PSBcImRhbmdlci0tZ2hvc3RcIjtcblx0fVxuXHQvKipcblx0ICogQHRvZG8gcmVtb3ZlIGBjZHMtLWJ0bi0tJHtzaXplfWAgY2xhc3NlcyBpbiB2MTJcblx0ICovXG5cdEBIb3N0QmluZGluZyhcImNsYXNzLmNkcy0tYnRuLS14c1wiKSBnZXQgZXh0cmFTbWFsbFNpemUoKSB7XG5cdFx0cmV0dXJuIHRoaXMuc2l6ZSA9PT0gXCJ4c1wiICYmICF0aGlzLmlzRXhwcmVzc2l2ZTtcblx0fVxuXHRASG9zdEJpbmRpbmcoXCJjbGFzcy5jZHMtLWJ0bi0tc21cIikgZ2V0IHNtYWxsU2l6ZSgpIHtcblx0XHRyZXR1cm4gdGhpcy5zaXplID09PSBcInNtXCIgJiYgIXRoaXMuaXNFeHByZXNzaXZlO1xuXHR9XG5cdEBIb3N0QmluZGluZyhcImNsYXNzLmNkcy0tYnRuLS1tZFwiKSBnZXQgbWVkaXVtU2l6ZSgpIHtcblx0XHRyZXR1cm4gdGhpcy5zaXplID09PSBcIm1kXCIgJiYgIXRoaXMuaXNFeHByZXNzaXZlO1xuXHR9XG5cdEBIb3N0QmluZGluZyhcImNsYXNzLmNkcy0tYnRuLS1sZ1wiKSBnZXQgbGFyZ2VTaXplKCkge1xuXHRcdHJldHVybiB0aGlzLnNpemUgPT09IFwibGdcIjtcblx0fVxuXHRASG9zdEJpbmRpbmcoXCJjbGFzcy5jZHMtLWJ0bi0teGxcIikgZ2V0IGV4dHJhTGFyZ2VTaXplKCkge1xuXHRcdHJldHVybiB0aGlzLnNpemUgPT09IFwieGxcIjtcblx0fVxuXHRASG9zdEJpbmRpbmcoXCJjbGFzcy5jZHMtLWJ0bi0tMnhsXCIpIGdldCB0d29FeHRyYUxhcmdlU2l6ZSgpIHtcblx0XHRyZXR1cm4gdGhpcy5zaXplID09PSBcIjJ4bFwiO1xuXHR9XG5cblx0Ly8gU2l6ZSBjbGFzc2VzXG5cdEBIb3N0QmluZGluZyhcImNsYXNzLmNkcy0tbGF5b3V0LS1zaXplLXhzXCIpIGdldCBleHRyYVNtYWxsTGF5b3V0U2l6ZSgpIHtcblx0XHRyZXR1cm4gdGhpcy5zaXplID09PSBcInhzXCIgJiYgIXRoaXMuaXNFeHByZXNzaXZlO1xuXHR9XG5cdEBIb3N0QmluZGluZyhcImNsYXNzLmNkcy0tbGF5b3V0LS1zaXplLXNtXCIpIGdldCBzbWFsbExheW91dFNpemUoKSB7XG5cdFx0cmV0dXJuIHRoaXMuc2l6ZSA9PT0gXCJzbVwiICYmICF0aGlzLmlzRXhwcmVzc2l2ZTtcblx0fVxuXHRASG9zdEJpbmRpbmcoXCJjbGFzcy5jZHMtLWxheW91dC0tc2l6ZS1tZFwiKSBnZXQgbWVkaXVtTGF5b3V0U2l6ZSgpIHtcblx0XHRyZXR1cm4gdGhpcy5zaXplID09PSBcIm1kXCIgJiYgIXRoaXMuaXNFeHByZXNzaXZlO1xuXHR9XG5cdEBIb3N0QmluZGluZyhcImNsYXNzLmNkcy0tbGF5b3V0LS1zaXplLWxnXCIpIGdldCBsYXJnZUxheW91dFNpemUoKSB7XG5cdFx0cmV0dXJuIHRoaXMuc2l6ZSA9PT0gXCJsZ1wiO1xuXHR9XG5cdEBIb3N0QmluZGluZyhcImNsYXNzLmNkcy0tbGF5b3V0LS1zaXplLXhsXCIpIGdldCBleHRyYUxhcmdlTGF5b3V0U2l6ZSgpIHtcblx0XHRyZXR1cm4gdGhpcy5zaXplID09PSBcInhsXCI7XG5cdH1cblx0QEhvc3RCaW5kaW5nKFwiY2xhc3MuY2RzLS1sYXlvdXQtLXNpemUtMnhsXCIpIGdldCB0d29FeHRyYUxhcmdlTGF5b3V0U2l6ZSgpIHtcblx0XHRyZXR1cm4gdGhpcy5zaXplID09PSBcIjJ4bFwiO1xuXHR9XG5cblxufVxuIl19