UNPKG

@taiga-ui/kit

Version:
146 lines • 18.8 kB
import { __decorate, __extends, __param } from "tslib"; import { ChangeDetectionStrategy, ChangeDetectorRef, Component, forwardRef, HostBinding, Inject, Input, Optional, Self, ViewChild, } from '@angular/core'; import { NgControl } from '@angular/forms'; import { AbstractTuiNullableControl, TUI_DEFAULT_IDENTITY_MATCHER, TUI_FOCUSABLE_ITEM_ACCESSOR, tuiDefaultProp, } from '@taiga-ui/cdk'; import { TuiAppearance, TuiHorizontalDirection, TuiModeDirective, TuiSizeL, TuiSizeS, } from '@taiga-ui/core'; import { TuiRadioComponent } from '@taiga-ui/kit/components/radio'; var TuiRadioBlockComponent = /** @class */ (function (_super) { __extends(TuiRadioBlockComponent, _super); function TuiRadioBlockComponent(control, changeDetectorRef, modeDirective) { var _this = _super.call(this, control, changeDetectorRef) || this; _this.modeDirective = modeDirective; _this.identityMatcher = TUI_DEFAULT_IDENTITY_MATCHER; _this.contentAlign = 'right'; _this.size = 'l'; _this.hideRadio = false; _this.pseudoDisabled = false; return _this; } TuiRadioBlockComponent_1 = TuiRadioBlockComponent; Object.defineProperty(TuiRadioBlockComponent.prototype, "nativeFocusableElement", { get: function () { return this.radio ? this.radio.nativeFocusableElement : null; }, enumerable: true, configurable: true }); Object.defineProperty(TuiRadioBlockComponent.prototype, "focused", { get: function () { return !!this.radio && this.radio.focused; }, enumerable: true, configurable: true }); Object.defineProperty(TuiRadioBlockComponent.prototype, "computedDisabled", { get: function () { return this.disabled || this.pseudoDisabled; }, enumerable: true, configurable: true }); Object.defineProperty(TuiRadioBlockComponent.prototype, "checked", { get: function () { return this.value === this.item && this.hideRadio; }, enumerable: true, configurable: true }); Object.defineProperty(TuiRadioBlockComponent.prototype, "checkboxSize", { get: function () { return this.size === 'l' ? 'l' : 'm'; }, enumerable: true, configurable: true }); Object.defineProperty(TuiRadioBlockComponent.prototype, "appearance", { get: function () { if (!this.modeDirective || !this.modeDirective.mode) { return this.checked ? "whiteblock-active" /* WhiteblockActive */ : "whiteblock" /* Whiteblock */; } return this.checked ? "primary" /* Primary */ : "secondary" /* Secondary */; }, enumerable: true, configurable: true }); TuiRadioBlockComponent.prototype.onFocused = function (focused) { this.updateFocused(focused); }; TuiRadioBlockComponent.prototype.onHovered = function (hovered) { this.updateHovered(hovered); }; TuiRadioBlockComponent.prototype.onPressed = function (pressed) { this.updatePressed(pressed); }; TuiRadioBlockComponent.prototype.onFocusVisible = function (focusVisible) { this.updateFocusVisible(focusVisible); }; TuiRadioBlockComponent.prototype.onModelChange = function (value) { this.updateValue(value); }; var TuiRadioBlockComponent_1; TuiRadioBlockComponent.ctorParameters = function () { return [ { type: NgControl, decorators: [{ type: Optional }, { type: Self }, { type: Inject, args: [NgControl,] }] }, { type: ChangeDetectorRef, decorators: [{ type: Inject, args: [ChangeDetectorRef,] }] }, { type: TuiModeDirective, decorators: [{ type: Optional }, { type: Inject, args: [TuiModeDirective,] }] } ]; }; __decorate([ Input() ], TuiRadioBlockComponent.prototype, "item", void 0); __decorate([ Input(), tuiDefaultProp() ], TuiRadioBlockComponent.prototype, "identityMatcher", void 0); __decorate([ Input(), HostBinding('attr.data-tui-host-align'), tuiDefaultProp() ], TuiRadioBlockComponent.prototype, "contentAlign", void 0); __decorate([ Input(), HostBinding('attr.data-tui-host-size'), tuiDefaultProp() ], TuiRadioBlockComponent.prototype, "size", void 0); __decorate([ Input(), HostBinding('class._hidden_radio'), tuiDefaultProp() ], TuiRadioBlockComponent.prototype, "hideRadio", void 0); __decorate([ Input(), tuiDefaultProp() ], TuiRadioBlockComponent.prototype, "pseudoDisabled", void 0); __decorate([ ViewChild(TuiRadioComponent) ], TuiRadioBlockComponent.prototype, "radio", void 0); __decorate([ HostBinding('class._disabled') ], TuiRadioBlockComponent.prototype, "computedDisabled", null); __decorate([ HostBinding('class._active') ], TuiRadioBlockComponent.prototype, "checked", null); TuiRadioBlockComponent = TuiRadioBlockComponent_1 = __decorate([ Component({ selector: 'tui-radio-block', template: "<label\n class=\"wrapper\"\n (tuiHoveredChange)=\"onHovered($event)\"\n (tuiPressedChange)=\"onPressed($event)\"\n>\n <tui-wrapper\n [appearance]=\"appearance\"\n [disabled]=\"computedDisabled\"\n [focused]=\"computedFocusVisible\"\n [hovered]=\"computedHovered\"\n [pressed]=\"computedPressed\"\n [invalid]=\"computedInvalid\"\n >\n <div class=\"content-wrapper\">\n <div class=\"content\">\n <tui-radio\n class=\"view\"\n [focusable]=\"focusable\"\n [identityMatcher]=\"identityMatcher\"\n [item]=\"item\"\n [name]=\"computedName\"\n [nativeId]=\"nativeId\"\n [readOnly]=\"readOnly\"\n [pseudoDisabled]=\"computedDisabled\"\n [pseudoInvalid]=\"computedInvalid\"\n [pseudoFocused]=\"false\"\n [pseudoHovered]=\"computedHovered\"\n [pseudoPressed]=\"computedPressed\"\n [size]=\"checkboxSize\"\n [ngModel]=\"value\"\n (ngModelChange)=\"onModelChange($event)\"\n (focusedChange)=\"onFocused($event)\"\n (focusVisibleChange)=\"onFocusVisible($event)\"\n ></tui-radio>\n <div class=\"label\">\n <ng-content></ng-content>\n </div>\n </div>\n </div>\n </tui-wrapper>\n</label>\n", changeDetection: ChangeDetectionStrategy.OnPush, providers: [ { provide: TUI_FOCUSABLE_ITEM_ACCESSOR, useExisting: forwardRef(function () { return TuiRadioBlockComponent_1; }), }, ], styles: [":host{font:var(--tui-font-text-s);color:var(--tui-text-01);display:inline-block;vertical-align:top;border-radius:var(--tui-radius-m)}:host[data-tui-host-size='l'],:host[data-tui-host-size='m']{font:var(--tui-font-text-m)}:host._readonly{pointer-events:none}.wrapper{position:relative;border-radius:inherit;cursor:pointer;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}:host._disabled .wrapper{cursor:default}.content-wrapper{display:flex;flex-direction:column}:host[data-tui-host-size='s'] .content-wrapper{min-height:var(--tui-height-s)}:host[data-tui-host-size='m'] .content-wrapper{min-height:var(--tui-height-m)}:host[data-tui-host-size='l'] .content-wrapper{min-height:var(--tui-height-l)}.content{display:flex;align-items:center;min-height:inherit}:host[data-tui-host-align=right] .content{flex-direction:row-reverse}:host[data-tui-host-size='s'] .content{padding:0 16px 0 8px}:host[data-tui-host-size='s'][data-tui-host-align=right] .content{padding:0 8px 0 16px}:host[data-tui-host-size='s']._hidden_radio .content{padding:0 16px}:host[data-tui-host-size='m'] .content{padding:0 16px 0 12px}:host[data-tui-host-size='m'][data-tui-host-align=right] .content{padding:0 12px 0 16px}:host[data-tui-host-size='m']._hidden_radio .content{padding:0 24px}:host[data-tui-host-size='l'] .content{padding:0 16px}:host[data-tui-host-size='l']._hidden_radio .content{padding:0 36px}.view{margin-top:12px;margin-right:12px;align-self:flex-start}:host[data-tui-host-align=right] .view{margin-left:12px;margin-right:0}:host[data-tui-host-size='s'] .view{margin-top:8px;margin-right:8px}:host[data-tui-host-size='s'][data-tui-host-align=right] .view{margin-left:8px}:host[data-tui-host-size='m'] .view{margin-top:14px}:host[data-tui-host-size='l'] .view{margin-top:16px}:host[data-tui-host-size='l'][data-tui-host-align=right] .view{margin-left:16px;margin-right:0}:host._hidden_radio .view{position:absolute;height:1px;width:1px;margin:-1px;border:0;padding:0;overflow:hidden;clip:rect(0,0,0,0);-webkit-clip-path:inset(0);clip-path:inset(0)}.label{white-space:nowrap;overflow:hidden;text-overflow:ellipsis;flex-grow:1}:host._hidden_radio .label{text-align:center}"] }), __param(0, Optional()), __param(0, Self()), __param(0, Inject(NgControl)), __param(1, Inject(ChangeDetectorRef)), __param(2, Optional()), __param(2, Inject(TuiModeDirective)) ], TuiRadioBlockComponent); return TuiRadioBlockComponent; }(AbstractTuiNullableControl)); export { TuiRadioBlockComponent }; //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmFkaW8tYmxvY2suY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6Im5nOi8vQHRhaWdhLXVpL2tpdC9jb21wb25lbnRzL3JhZGlvLWJsb2NrLyIsInNvdXJjZXMiOlsicmFkaW8tYmxvY2suY29tcG9uZW50LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7QUFBQSxPQUFPLEVBQ0gsdUJBQXVCLEVBQ3ZCLGlCQUFpQixFQUNqQixTQUFTLEVBQ1QsVUFBVSxFQUNWLFdBQVcsRUFDWCxNQUFNLEVBQ04sS0FBSyxFQUNMLFFBQVEsRUFDUixJQUFJLEVBQ0osU0FBUyxHQUNaLE1BQU0sZUFBZSxDQUFDO0FBQ3ZCLE9BQU8sRUFBQyxTQUFTLEVBQUMsTUFBTSxnQkFBZ0IsQ0FBQztBQUN6QyxPQUFPLEVBQ0gsMEJBQTBCLEVBQzFCLDRCQUE0QixFQUM1QiwyQkFBMkIsRUFDM0IsY0FBYyxHQUlqQixNQUFNLGVBQWUsQ0FBQztBQUN2QixPQUFPLEVBQ0gsYUFBYSxFQUNiLHNCQUFzQixFQUN0QixnQkFBZ0IsRUFDaEIsUUFBUSxFQUNSLFFBQVEsR0FDWCxNQUFNLGdCQUFnQixDQUFDO0FBQ3hCLE9BQU8sRUFBQyxpQkFBaUIsRUFBQyxNQUFNLGdDQUFnQyxDQUFDO0FBY2pFO0lBQ1ksMENBQTZCO0lBK0JyQyxnQ0FJSSxPQUF5QixFQUNFLGlCQUFvQyxFQUc5QyxhQUFzQztRQVIzRCxZQVVJLGtCQUFNLE9BQU8sRUFBRSxpQkFBaUIsQ0FBQyxTQUNwQztRQUhvQixtQkFBYSxHQUFiLGFBQWEsQ0FBeUI7UUFoQzNELHFCQUFlLEdBQTBCLDRCQUE0QixDQUFDO1FBS3RFLGtCQUFZLEdBQTJCLE9BQU8sQ0FBQztRQUsvQyxVQUFJLEdBQXdCLEdBQUcsQ0FBQztRQUtoQyxlQUFTLEdBQUcsS0FBSyxDQUFDO1FBSWxCLG9CQUFjLEdBQUcsS0FBSyxDQUFDOztJQWdCdkIsQ0FBQzsrQkEzQ1Esc0JBQXNCO0lBNkMvQixzQkFBSSwwREFBc0I7YUFBMUI7WUFDSSxPQUFPLElB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M0IsK2lEQUEwQztZQUUxQyxlQUFlLEVBQUUsdUJBQXVCLENBQUMsTUFBTTtZQUMvQyxTQUFTLEVBQUU7Z0JBQ1A7b0JBQ0ksT0FBTyxFQUFFLDJCQUEyQjtvQkFDcEMsV0FBVyxFQUFFLFVBQVUsQ0FBQyxjQUFNLE9BQUEsd0JBQXNCLEVBQXRCLENBQXNCLENBQUM7aUJBQ3hEO2FBQ0o7O1NBQ0osQ0FBQztRQWtDTyxXQUFBLFFBQVEsRUFBRSxDQUFBO1FBQ1YsV0FBQSxJQUFJLEVBQUUsQ0FBQTtRQUNOLFdBQUEsTUFBTSxDQUFDLFNBQVMsQ0FBQyxDQUFBO1FBRWpCLFdBQUEsTUFBTSxDQUFDLGlCQUFpQixDQUFDLENBQUE7UUFDekIsV0FBQSxRQUFRLEVBQUUsQ0FBQTtRQUNWLFdBQUEsTUFBTSxDQUFDLGdCQUFnQixDQUFDLENBQUE7T0F2Q3BCLHNCQUFzQixDQWdHbEM7SUFBRCw2QkFBQztDQUFBLEFBaEdELENBQ1ksMEJBQTBCLEdBK0ZyQztTQWhHWSxzQkFBc0IiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge1xuICAgIENoYW5nZURldGVjdGlvblN0cmF0ZWd5LFxuICAgIENoYW5nZURldGVjdG9yUmVmLFxuICAgIENvbXBvbmVudCxcbiAgICBmb3J3YXJkUmVmLFxuICAgIEhvc3RCaW5kaW5nLFxuICAgIEluamVjdCxcbiAgICBJbnB1dCxcbiAgICBPcHRpb25hbCxcbiAgICBTZWxmLFxuICAgIFZpZXdDaGlsZCxcbn0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQge05nQ29udHJvbH0gZnJvbSAnQGFuZ3VsYXIvZm9ybXMnO1xuaW1wb3J0IHtcbiAgICBBYnN0cmFjdFR1aU51bGxhYmxlQ29udHJvbCxcbiAgICBUVUlfREVGQVVMVF9JREVOVElUWV9NQVRDSEVSLFxuICAgIFRVSV9GT0NVU0FCTEVfSVRFTV9BQ0NFU1NPUixcbiAgICB0dWlEZWZhdWx0UHJvcCxcbiAgICBUdWlGb2N1c2FibGVFbGVtZW50QWNjZXNzb3IsXG4gICAgVHVpSWRlbnRpdHlNYXRjaGVyLFxuICAgIFR1aU5hdGl2ZUZvY3VzYWJsZUVsZW1lbnQsXG59IGZyb20gJ0B0YWlnYS11aS9jZGsnO1xuaW1wb3J0IHtcbiAgICBUdWlBcHBlYXJhbmNlLFxuICAgIFR1aUhvcml6b250YWxEaXJlY3Rpb24sXG4gICAgVHVpTW9kZURpcmVjdGl2ZSxcbiAgICBUdWlTaXplTCxcbiAgICBUdWlTaXplUyxcbn0gZnJvbSAnQHRhaWdhLXVpL2NvcmUnO1xuaW1wb3J0IHtUdWlSYWRpb0NvbXBvbmVudH0gZnJvbSAnQHRhaWdhLXVpL2tpdC9jb21wb25lbnRzL3JhZGlvJztcblxuQENvbXBvbmVudCh7XG4gICAgc2VsZWN0b3I6ICd0dWktcmFkaW8tYmxvY2snLFxuICAgIHRlbXBsYXRlVXJsOiAnLi9yYWRpby1ibG9jay50ZW1wbGF0ZS5odG1sJyxcbiAgICBzdHlsZVVybHM6IFsnLi9yYWRpby1ibG9jay5zdHlsZS5sZXNzJ10sXG4gICAgY2hhbmdlRGV0ZWN0aW9uOiBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneS5PblB1c2gsXG4gICAgcHJvdmlkZXJzOiBbXG4gICAgICAgIHtcbiAgICAgICAgICAgIHByb3ZpZGU6IFRVSV9GT0NVU0FCTEVfSVRFTV9BQ0NFU1NPUixcbiAgICAgICAgICAgIHVzZUV4aXN0aW5nOiBmb3J3YXJkUmVmKCgpID0+IFR1aVJhZGlvQmxvY2tDb21wb25lbnQpLFxuICAgICAgICB9LFxuICAgIF0sXG59KVxuZXhwb3J0IGNsYXNzIFR1aVJhZGlvQmxvY2tDb21wb25lbnQ8VD5cbiAgICBleHRlbmRzIEFic3RyYWN0VHVpTnVsbGFibGVDb250cm9sPFQ+XG4gICAgaW1wbGVtZW50cyBUdWlGb2N1c2FibGVFbGVtZW50QWNjZXNzb3Ige1xuICAgIEBJbnB1dCgpXG4gICAgaXRlbT86IFQ7XG5cbiAgICBASW5wdXQoKVxuICAgIEB0dWlEZWZhdWx0UHJvcCgpXG4gICAgaWRlbnRpdHlNYXRjaGVyOiBUdWlJZGVudGl0eU1hdGNoZXI8VD4gPSBUVUlfREVGQVVMVF9JREVOVElUWV9NQVRDSEVSO1xuXG4gICAgQElucHV0KClcbiAgICBASG9zdEJpbmRpbmcoJ2F0dHIuZGF0YS10dWktaG9zdC1hbGlnbicpXG4gICAgQHR1aURlZmF1bHRQcm9wKClcbiAgICBjb250ZW50QWxpZ246IFR1aUhvcml6b250YWxEaXJlY3Rpb24gPSAncmlnaHQnO1xuXG4gICAgQElucHV0KClcbiAgICBASG9zdEJpbmRpbmcoJ2F0dHIuZGF0YS10dWktaG9zdC1zaXplJylcbiAgICBAdHVpRGVmYXVsdFByb3AoKVxuICAgIHNpemU6IFR1aVNpemVTIHwgVHVpU2l6ZUwgPSAnbCc7XG5cbiAgICBASW5wdXQoKVxuICAgIEBIb3N0QmluZGluZygnY2xhc3MuX2hpZGRlbl9yYWRpbycpXG4gICAgQHR1aURlZmF1bHRQcm9wKClcbiAgICBoaWRlUmFkaW8gPSBmYWxzZTtcblxuICAgIEBJbnB1dCgpXG4gICAgQHR1aURlZmF1bHRQcm9wKClcbiAgICBwc2V1ZG9EaXNhYmxlZCA9IGZhbHNlO1xuXG4gICAgQFZpZXdDaGlsZChUdWlSYWRpb0NvbXBvbmVudClcbiAgICBwcml2YXRlIHJlYWRvbmx5IHJhZGlvPzogVHVpUmFkaW9Db21wb25lbnQ8VD47XG5cbiAgICBjb25zdHJ1Y3RvcihcbiAgICAgICAgQE9wdGlvbmFsKClcbiAgICAgICAgQFNlbGYoKVxuICAgICAgICBASW5qZWN0KE5nQ29udHJvbClcbiAgICAgICAgY29udHJvbDogTmdDb250cm9sIHwgbnVsbCxcbiAgICAgICAgQEluamVjdChDaGFuZ2VEZXRlY3RvclJlZikgY2hhbmdlRGV0ZWN0b3JSZWY6IENoYW5nZURldGVjdG9yUmVmLFxuICAgICAgICBAT3B0aW9uYWwoKVxuICAgICAgICBASW5qZWN0KFR1aU1vZGVEaXJlY3RpdmUpXG4gICAgICAgIHByaXZhdGUgcmVhZG9ubHkgbW9kZURpcmVjdGl2ZTogVHVpTW9kZURpcmVjdGl2ZSB8IG51bGwsXG4gICAgKSB7XG4gICAgICAgIHN1cGVyKGNvbnRyb2wsIGNoYW5nZURldGVjdG9yUmVmKTtcbiAgICB9XG5cbiAgICBnZXQgbmF0aXZlRm9jdXNhYmxlRWxlbWVudCgpOiBUdWlOYXRpdmVGb2N1c2FibGVFbGVtZW50IHwgbnVsbCB7XG4gICAgICAgIHJldHVybiB0aGlzLnJhZGlvID8gdGhpcy5yYWRpby5uYXRpdmVGb2N1c2FibGVFbGVtZW50IDogbnVsbDtcbiAgICB9XG5cbiAgICBnZXQgZm9jdXNlZCgpOiBib29sZWFuIHtcbiAgICAgICAgcmV0dXJuICEhdGhpcy5yYWRpbyAmJiB0aGlzLnJhZGlvLmZvY3VzZWQ7XG4gICAgfVxuXG4gICAgQEhvc3RCaW5kaW5nKCdjbGFzcy5fZGlzYWJsZWQnKVxuICAgIGdldCBjb21wdXRlZERpc2FibGVkKCk6IGJvb2xlYW4ge1xuICAgICAgICByZXR1cm4gdGhpcy5kaXNhYmxlZCB8fCB0aGlzLnBzZXVkb0Rpc2FibGVkO1xuICAgIH1cblxuICAgIEBIb3N0QmluZGluZygnY2xhc3MuX2FjdGl2ZScpXG4gICAgZ2V0IGNoZWNrZWQoKTogYm9vbGVhbiB7XG4gICAgICAgIHJldHVybiB0aGlzLnZhbHVlID09PSB0aGlzLml0ZW0gJiYgdGhpcy5oaWRlUmFkaW87XG4gICAgfVxuXG4gICAgZ2V0IGNoZWNrYm94U2l6ZSgpOiBUdWlTaXplTCB7XG4gICAgICAgIHJldHVybiB0aGlzLnNpemUgPT09ICdsJyA/ICdsJyA6ICdtJztcbiAgICB9XG5cbiAgICBnZXQgYXBwZWFyYW5jZSgpOiBUdWlBcHBlYXJhbmNlIHtcbiAgICAgICAgaWYgKCF0aGlzLm1vZGVEaXJlY3RpdmUgfHwgIXRoaXMubW9kZURpcmVjdGl2ZS5tb2RlKSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5jaGVja2VkXG4gICAgICAgICAgICAgICAgPyBUdWlBcHBlYXJhbmNlLldoaXRlYmxvY2tBY3RpdmVcbiAgICAgICAgICAgICAgICA6IFR1aUFwcGVhcmFuY2UuV2hpdGVibG9jaztcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiB0aGlzLmNoZWNrZWQgPyBUdWlBcHBlYXJhbmNlLlByaW1hcnkgOiBUdWlBcHBlYXJhbmNlLlNlY29uZGFyeTtcbiAgICB9XG5cbiAgICBvbkZvY3VzZWQoZm9jdXNlZDogYm9vbGVhbikge1xuICAgICAgICB0aGlzLnVwZGF0ZUZvY3VzZWQoZm9jdXNlZCk7XG4gICAgfVxuXG4gICAgb25Ib3ZlcmVkKGhvdmVyZWQ6IGJvb2xlYW4pIHtcbiAgICAgICAgdGhpcy51cGRhdGVIb3ZlcmVkKGhvdmVyZWQpO1xuICAgIH1cblxuICAgIG9uUHJlc3NlZChwcmVzc2VkOiBib29sZWFuKSB7XG4gICAgICAgIHRoaXMudXBkYXRlUHJlc3NlZChwcmVzc2VkKTtcbiAgICB9XG5cbiAgICBvbkZvY3VzVmlzaWJsZShmb2N1c1Zpc2libGU6IGJvb2xlYW4pIHtcbiAgICAgICAgdGhpcy51cGRhdGVGb2N1c1Zpc2libGUoZm9jdXNWaXNpYmxlKTtcbiAgICB9XG5cbiAgICBvbk1vZGVsQ2hhbmdlKHZhbHVlOiBUKSB7XG4gICAgICAgIHRoaXMudXBkYXRlVmFsdWUodmFsdWUpO1xuICAgIH1cbn1cbiJdfQ==