UNPKG

@blox/material

Version:

Material Components for Angular

150 lines 17.7 kB
import { Directive, ElementRef, HostBinding, Input, Optional, Renderer2, Self, forwardRef, ContentChildren, Inject } from '@angular/core'; import { DOCUMENT } from '@angular/common'; import { NgControl } from '@angular/forms'; import { MDCRadioFoundation } from '@material/radio'; import { AbstractMdcRipple } from '../ripple/abstract.mdc.ripple'; import { AbstractMdcInput } from '../abstract/abstract.mdc.input'; import { asBoolean } from '../../utils/value.utils'; import { MdcEventRegistry } from '../../utils/mdc.event.registry'; /** * Directive for the input element of an <code>MdcRadioDirective</code>. */ export class MdcRadioInputDirective extends AbstractMdcInput { constructor(_elm, _cntr) { super(); this._elm = _elm; this._cntr = _cntr; /** @internal */ this._cls = true; this._id = null; this._disabled = false; } /** @docs-private */ get id() { return this._id; } set id(value) { this._id = value; } /** @docs-private */ get disabled() { return this._cntr ? !!this._cntr.disabled : this._disabled; } set disabled(value) { this._disabled = asBoolean(value); } } MdcRadioInputDirective.decorators = [ { type: Directive, args: [{ selector: 'input[mdcRadioInput][type=radio]', providers: [{ provide: AbstractMdcInput, useExisting: forwardRef(() => MdcRadioInputDirective) }] },] } ]; MdcRadioInputDirective.ctorParameters = () => [ { type: ElementRef }, { type: NgControl, decorators: [{ type: Optional }, { type: Self }] } ]; MdcRadioInputDirective.propDecorators = { _cls: [{ type: HostBinding, args: ['class.mdc-radio__native-control',] }], id: [{ type: HostBinding }, { type: Input }], disabled: [{ type: HostBinding }, { type: Input }] }; /** * Directive for creating a Material Design radio button. The radio button is driven by an * underlying native radio input, which must use the <code>MdcRadioInputDirective</code> * directive. * The current implementation will add all other required DOM elements (such as the * background). * Future implementations will also support supplying (customized) background * elements. * * This directive can be used together with an <code>mdcFormField</code> to * easily position radio buttons and their labels, see * <a href="/components/form-field">mdcFormField</a>. */ export class MdcRadioDirective extends AbstractMdcRipple { constructor(renderer, root, registry, doc) { super(root, renderer, registry, doc); this.renderer = renderer; this.root = root; /** @internal */ this._cls = true; this.mdcAdapter = { // We can just ignore all adapter calls, since we have a HostBinding for the // disabled classes, and never call foundation.setDisabled addClass: () => undefined, removeClass: () => undefined, setNativeControlDisabled: () => undefined }; this.foundation = new MDCRadioFoundation(this.mdcAdapter); } ngAfterContentInit() { this.addBackground(); this.addRippleSurface('mdc-radio__ripple'); this.initRipple(true); this.foundation.init(); this._inputs.changes.subscribe(() => { this.reinitRipple(); }); } ngOnDestroy() { var _a; this.destroyRipple(); (_a = this.foundation) === null || _a === void 0 ? void 0 : _a.destroy(); this.foundation = null; } addBackground() { let outerCircle = this.renderer.createElement('div'); this.renderer.addClass(outerCircle, 'mdc-radio__outer-circle'); let innerCircle = this.renderer.createElement('div'); this.renderer.addClass(innerCircle, 'mdc-radio__inner-circle'); let bg = this.renderer.createElement('div'); this.renderer.appendChild(bg, outerCircle); this.renderer.appendChild(bg, innerCircle); this.renderer.addClass(bg, 'mdc-radio__background'); this.renderer.appendChild(this.root.nativeElement, bg); } /** @internal */ getRippleInteractionElement() { var _a; return (_a = this._input) === null || _a === void 0 ? void 0 : _a._elm; } /** @internal */ isRippleSurfaceActive() { // This is what the @material/radio MDCRadio component does, with the following comment: // "Radio buttons technically go 'active' whenever there is *any* keyboard interaction. // This is not the UI we desire." return false; } // instead of calling foundation.setDisabled on disabled state changes, we just // bind the class to the property: /** @internal */ get _disabled() { return this._input == null || this._input.disabled; } /** @internal */ get _input() { return this._inputs && this._inputs.length > 0 ? this._inputs.first : null; } } MdcRadioDirective.decorators = [ { type: Directive, args: [{ selector: '[mdcRadio]' },] } ]; MdcRadioDirective.ctorParameters = () => [ { type: Renderer2 }, { type: ElementRef }, { type: MdcEventRegistry }, { type: undefined, decorators: [{ type: Inject, args: [DOCUMENT,] }] } ]; MdcRadioDirective.propDecorators = { _cls: [{ type: HostBinding, args: ['class.mdc-radio',] }], _inputs: [{ type: ContentChildren, args: [MdcRadioInputDirective,] }], _disabled: [{ type: HostBinding, args: ['class.mdc-radio--disabled',] }] }; export const RADIO_DIRECTIVES = [ MdcRadioInputDirective, MdcRadioDirective ]; //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibWRjLnJhZGlvLmRpcmVjdGl2ZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3NyYy9jb21wb25lbnRzL3JhZGlvL21kYy5yYWRpby5kaXJlY3RpdmUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFvQixTQUFTLEVBQUUsVUFBVSxFQUFFLFdBQVcsRUFDM0QsS0FBSyxFQUFhLFFBQVEsRUFBRSxTQUFTLEVBQUUsSUFBSSxFQUFFLFVBQVUsRUFBRSxlQUFlLEVBQWEsTUFBTSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQ3JILE9BQU8sRUFBRSxRQUFRLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUMzQyxPQUFPLEVBQUUsU0FBUyxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFDM0MsT0FBTyxFQUFFLGtCQUFrQixFQUFtQixNQUFNLGlCQUFpQixDQUFDO0FBQ3RFLE9BQU8sRUFBRSxpQkFBaUIsRUFBRSxNQUFNLCtCQUErQixDQUFDO0FBQ2xFLE9BQU8sRUFBRSxnQkFBZ0IsRUFBRSxNQUFNLGdDQUFnQyxDQUFDO0FBQ2xFLE9BQU8sRUFBRSxTQUFTLEVBQUUsTUFBTSx5QkFBeUIsQ0FBQztBQUNwRCxPQUFPLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSxnQ0FBZ0MsQ0FBQztBQUVsRTs7R0FFRztBQUtILE1BQU0sT0FBTyxzQkFBdUIsU0FBUSxnQkFBZ0I7SUFNeEQsWUFBbUIsSUFBZ0IsRUFBNkIsS0FBZ0I7UUFDNUUsS0FBSyxFQUFFLENBQUM7UUFETyxTQUFJLEdBQUosSUFBSSxDQUFZO1FBQTZCLFVBQUssR0FBTCxLQUFLLENBQVc7UUFMaEYsZ0JBQWdCO1FBQ3lDLFNBQUksR0FBRyxJQUFJLENBQUM7UUFDN0QsUUFBRyxHQUFrQixJQUFJLENBQUM7UUFDMUIsY0FBUyxHQUFHLEtBQUssQ0FBQztJQUkxQixDQUFDO0lBRUQsb0JBQW9CO0lBQ3BCLElBQ2EsRUFBRTtRQUNYLE9BQU8sSUFBSSxDQUFDLEdBQUcs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OzttQkFaOUcsV0FBVyxTQUFDLGlCQUFpQjtzQkFFN0IsZUFBZSxTQUFDLHNCQUFzQjt3QkEwRHRDLFdBQVcsU0FBQywyQkFBMkI7O0FBVTVDLE1BQU0sQ0FBQyxNQUFNLGdCQUFnQixHQUFHO0lBQzVCLHNCQUFzQjtJQUN0QixpQkFBaUI7Q0FDcEIsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEFmdGVyQ29udGVudEluaXQsIERpcmVjdGl2ZSwgRWxlbWVudFJlZiwgSG9zdEJpbmRpbmcsXG4gIElucHV0LCBPbkRlc3Ryb3ksIE9wdGlvbmFsLCBSZW5kZXJlcjIsIFNlbGYsIGZvcndhcmRSZWYsIENvbnRlbnRDaGlsZHJlbiwgUXVlcnlMaXN0LCBJbmplY3QgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IERPQ1VNRU5UIH0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uJztcbmltcG9ydCB7IE5nQ29udHJvbCB9IGZyb20gJ0Bhbmd1bGFyL2Zvcm1zJztcbmltcG9ydCB7IE1EQ1JhZGlvRm91bmRhdGlvbiwgTURDUmFkaW9BZGFwdGVyIH0gZnJvbSAnQG1hdGVyaWFsL3JhZGlvJztcbmltcG9ydCB7IEFic3RyYWN0TWRjUmlwcGxlIH0gZnJvbSAnLi4vcmlwcGxlL2Fic3RyYWN0Lm1kYy5yaXBwbGUnO1xuaW1wb3J0IHsgQWJzdHJhY3RNZGNJbnB1dCB9IGZyb20gJy4uL2Fic3RyYWN0L2Fic3RyYWN0Lm1kYy5pbnB1dCc7XG5pbXBvcnQgeyBhc0Jvb2xlYW4gfSBmcm9tICcuLi8uLi91dGlscy92YWx1ZS51dGlscyc7XG5pbXBvcnQgeyBNZGNFdmVudFJlZ2lzdHJ5IH0gZnJvbSAnLi4vLi4vdXRpbHMvbWRjLmV2ZW50LnJlZ2lzdHJ5JztcblxuLyoqXG4gKiBEaXJlY3RpdmUgZm9yIHRoZSBpbnB1dCBlbGVtZW50IG9mIGFuIDxjb2RlPk1kY1JhZGlvRGlyZWN0aXZlPC9jb2RlPi5cbiAqL1xuQERpcmVjdGl2ZSh7XG4gICAgc2VsZWN0b3I6ICdpbnB1dFttZGNSYWRpb0lucHV0XVt0eXBlPXJhZGlvXScsXG4gICAgcHJvdmlkZXJzOiBbe3Byb3ZpZGU6IEFic3RyYWN0TWRjSW5wdXQsIHVzZUV4aXN0aW5nOiBmb3J3YXJkUmVmKCgpID0+IE1kY1JhZGlvSW5wdXREaXJlY3RpdmUpIH1dXG59KVxuZXhwb3J0IGNsYXNzIE1kY1JhZGlvSW5wdXREaXJlY3RpdmUgZXh0ZW5kcyBBYnN0cmFjdE1kY0lucHV0IHtcbiAgICAvKiogQGludGVybmFsICovXG4gICAgQEhvc3RCaW5kaW5nKCdjbGFzcy5tZGMtcmFkaW9fX25hdGl2ZS1jb250cm9sJykgcmVhZG9ubHkgX2NscyA9IHRydWU7XG4gICAgcHJpdmF0ZSBfaWQ6IHN0cmluZyB8IG51bGwgPSBudWxsO1xuICAgIHByaXZhdGUgX2Rpc2FibGVkID0gZmFsc2U7XG5cbiAgICBjb25zdHJ1Y3RvcihwdWJsaWMgX2VsbTogRWxlbWVudFJlZiwgQE9wdGlvbmFsKCkgQFNlbGYoKSBwdWJsaWMgX2NudHI6IE5nQ29udHJvbCkge1xuICAgICAgICBzdXBlcigpO1xuICAgIH1cblxuICAgIC8qKiBAZG9jcy1wcml2YXRlICovXG4gICAgQEhvc3RCaW5kaW5nKClcbiAgICBASW5wdXQoKSBnZXQgaWQoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLl9pZDtcbiAgICB9XG4gIFxuICAgIHNldCBpZCh2YWx1ZTogc3RyaW5nIHwgbnVsbCkge1xuICAgICAgICB0aGlzLl9pZCA9IHZhbHVlO1xuICAgIH1cblxuICAgIC8qKiBAZG9jcy1wcml2YXRlICovXG4gICAgQEhvc3RCaW5kaW5nKClcbiAgICBASW5wdXQoKSBnZXQgZGlzYWJsZWQoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLl9jbnRyID8gISF0aGlzLl9jbnRyLmRpc2FibGVkIDogdGhpcy5fZGlzYWJsZWQ7XG4gICAgfVxuXG4gICAgc2V0IGRpc2FibGVkKHZhbHVlOiBib29sZWFuKSB7XG4gICAgICAgIHRoaXMuX2Rpc2FibGVkID0gYXNCb29sZWFuKHZhbHVlKTtcbiAgICB9XG5cbiAgICBzdGF0aWMgbmdBY2NlcHRJbnB1dFR5cGVfZGlzYWJsZWQ6IGJvb2xlYW4gfCAnJztcbn1cblxuLyoqXG4gKiBEaXJlY3RpdmUgZm9yIGNyZWF0aW5nIGEgTWF0ZXJpYWwgRGVzaWduIHJhZGlvIGJ1dHRvbi4gVGhlIHJhZGlvIGJ1dHRvbiBpcyBkcml2ZW4gYnkgYW5cbiAqIHVuZGVybHlpbmcgbmF0aXZlIHJhZGlvIGlucHV0LCB3aGljaCBtdXN0IHVzZSB0aGUgPGNvZGU+TWRjUmFkaW9JbnB1dERpcmVjdGl2ZTwvY29kZT5cbiAqIGRpcmVjdGl2ZS5cbiAqIFRoZSBjdXJyZW50IGltcGxlbWVudGF0aW9uIHdpbGwgYWRkIGFsbCBvdGhlciByZXF1aXJlZCBET00gZWxlbWVudHMgKHN1Y2ggYXMgdGhlXG4gKiBiYWNrZ3JvdW5kKS5cbiAqIEZ1dHVyZSBpbXBsZW1lbnRhdGlvbnMgd2lsbCBhbHNvIHN1cHBvcnQgc3VwcGx5aW5nIChjdXN0b21pemVkKSBiYWNrZ3JvdW5kXG4gKiBlbGVtZW50cy5cbiAqIFxuICogVGhpcyBkaXJlY3RpdmUgY2FuIGJlIHVzZWQgdG9nZXRoZXIgd2l0aCBhbiA8Y29kZT5tZGNGb3JtRmllbGQ8L2NvZGU+IHRvXG4gKiBlYXNpbHkgcG9zaXRpb24gcmFkaW8gYnV0dG9ucyBhbmQgdGhlaXIgbGFiZWxzLCBzZWVcbiAqIDxhIGhyZWY9XCIvY29tcG9uZW50cy9mb3JtLWZpZWxkXCI+bWRjRm9ybUZpZWxkPC9hPi5cbiAqL1xuQERpcmVjdGl2ZSh7XG4gICAgc2VsZWN0b3I6ICdbbWRjUmFkaW9dJ1xufSlcbmV4cG9ydCBjbGFzcyBNZGNSYWRpb0RpcmVjdGl2ZSBleHRlbmRzIEFic3RyYWN0TWRjUmlwcGxlIGltcGxlbWVudHMgQWZ0ZXJDb250ZW50SW5pdCwgT25EZXN0cm95IHtcbiAgICAvKiogQGludGVybmFsICovXG4gICAgQEhvc3RCaW5kaW5nKCdjbGFzcy5tZGMtcmFkaW8nKSByZWFkb25seSBfY2xzID0gdHJ1ZTtcbiAgICAvKiogQGludGVybmFsICovXG4gICAgQENvbnRlbnRDaGlsZHJlbihNZGNSYWRpb0lucHV0RGlyZWN0aXZlKSBfaW5wdXRzPzogUXVlcnlMaXN0PE1kY1JhZGlvSW5wdXREaXJlY3RpdmU+O1xuICAgIHByaXZhdGUgbWRjQWRhcHRlcjogTURDUmFkaW9BZGFwdGVyID0ge1xuICAgICAgICAvLyBXZSBjYW4ganVzdCBpZ25vcmUgYWxsIGFkYXB0ZXIgY2FsbHMsIHNpbmNlIHdlIGhhdmUgYSBIb3N0QmluZGluZyBmb3IgdGhlXG4gICAgICAgIC8vIGRpc2FibGVkIGNsYXNzZXMsIGFuZCBuZXZlciBjYWxsIGZvdW5kYXRpb24uc2V0RGlzYWJsZWRcbiAgICAgICAgYWRkQ2xhc3M6ICgpID0+IHVuZGVmaW5lZCxcbiAgICAgICAgcmVtb3ZlQ2xhc3M6ICgpID0+IHVuZGVmaW5lZCxcbiAgICAgICAgc2V0TmF0aXZlQ29udHJvbERpc2FibGVkOiAoKSA9PiB1bmRlZmluZWRcbiAgICB9O1xuICAgIHByaXZhdGUgZm91bmRhdGlvbjogTURDUmFkaW9Gb3VuZGF0aW9uIHwgbnVsbCA9IG5ldyBNRENSYWRpb0ZvdW5kYXRpb24odGhpcy5tZGNBZGFwdGVyKTtcblxuICAgIGNvbnN0cnVjdG9yKHByaXZhdGUgcmVuZGVyZXI6IFJlbmRlcmVyMiwgcHJpdmF0ZSByb290OiBFbGVtZW50UmVmLCByZWdpc3RyeTogTWRjRXZlbnRSZWdpc3RyeSwgQEluamVjdChET0NVTUVOVCkgZG9jOiBhbnkpIHtcbiAgICAgICAgc3VwZXIocm9vdCwgcmVuZGVyZXIsIHJlZ2lzdHJ5LCBkb2MgYXMgRG9jdW1lbnQpO1xuICAgIH1cblxuICAgIG5nQWZ0ZXJDb250ZW50SW5pdCgpIHtcbiAgICAgICAgdGhpcy5hZGRCYWNrZ3JvdW5kKCk7XG4gICAgICAgIHRoaXMuYWRkUmlwcGxlU3VyZmFjZSgnbWRjLXJhZGlvX19yaXBwbGUnKTtcbiAgICAgICAgdGhpcy5pbml0UmlwcGxlKHRydWUpO1xuICAgICAgICB0aGlzLmZvdW5kYXRpb24hLmluaXQoKTtcbiAgICAgICAgdGhpcy5faW5wdXRzIS5jaGFuZ2VzLnN1YnNjcmliZSgoKSA9PiB7XG4gICAgICAgICAgICB0aGlzLnJlaW5pdFJpcHBsZSgpO1xuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICBuZ09uRGVzdHJveSgpIHtcbiAgICAgICAgdGhpcy5kZXN0cm95UmlwcGxlKCk7XG4gICAgICAgIHRoaXMuZm91bmRhdGlvbj8uZGVzdHJveSgpO1xuICAgICAgICB0aGlzLmZvdW5kYXRpb24gPSBudWxsO1xuICAgIH1cblxuICAgIHByaXZhdGUgYWRkQmFja2dyb3VuZCgpIHtcbiAgICAgICAgbGV0IG91dGVyQ2lyY2xlID0gdGhpcy5yZW5kZXJlci5jcmVhdGVFbGVtZW50KCdkaXYnKTtcbiAgICAgICAgdGhpcy5yZW5kZXJlci5hZGRDbGFzcyhvdXRlckNpcmNsZSwgJ21kYy1yYWRpb19fb3V0ZXItY2lyY2xlJyk7XG4gICAgICAgIGxldCBpbm5lckNpcmNsZSA9IHRoaXMucmVuZGVyZXIuY3JlYXRlRWxlbWVudCgnZGl2Jyk7XG4gICAgICAgIHRoaXMucmVuZGVyZXIuYWRkQ2xhc3MoaW5uZXJDaXJjbGUsICdtZGMtcmFkaW9fX2lubmVyLWNpcmNsZScpO1xuICAgICAgICBsZXQgYmcgPSB0aGlzLnJlbmRlcmVyLmNyZWF0ZUVsZW1lbnQoJ2RpdicpO1xuICAgICAgICB0aGlzLnJlbmRlcmVyLmFwcGVuZENoaWxkKGJnLCBvdXRlckNpcmNsZSk7XG4gICAgICAgIHRoaXMucmVuZGVyZXIuYXBwZW5kQ2hpbGQoYmcsIGlubmVyQ2lyY2xlKTtcbiAgICAgICAgdGhpcy5yZW5kZXJlci5hZGRDbGFzcyhiZywgJ21kYy1yYWRpb19fYmFja2dyb3VuZCcpO1xuICAgICAgICB0aGlzLnJlbmRlcmVyLmFwcGVuZENoaWxkKHRoaXMucm9vdC5uYXRpdmVFbGVtZW50LCBiZyk7XG4gICAgfVxuXG4gICAgLyoqIEBpbnRlcm5hbCAqL1xuICAgIHByb3RlY3RlZCBnZXRSaXBwbGVJbnRlcmFjdGlvbkVsZW1lbnQoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLl9pbnB1dD8uX2VsbTtcbiAgICB9XG5cbiAgICAvKiogQGludGVybmFsICovXG4gICAgaXNSaXBwbGVTdXJmYWNlQWN0aXZlKCkge1xuICAgICAgICAvLyBUaGlzIGlzIHdoYXQgdGhlIEBtYXRlcmlhbC9yYWRpbyBNRENSYWRpbyBjb21wb25lbnQgZG9lcywgd2l0aCB0aGUgZm9sbG93aW5nIGNvbW1lbnQ6XG4gICAgICAgIC8vIFwiUmFkaW8gYnV0dG9ucyB0ZWNobmljYWxseSBnbyAnYWN0aXZlJyB3aGVuZXZlciB0aGVyZSBpcyAqYW55KiBrZXlib2FyZCBpbnRlcmFjdGlvbi5cbiAgICAgICAgLy8gIFRoaXMgaXMgbm90IHRoZSBVSSB3ZSBkZXNpcmUuXCJcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cblxuICAgIC8vIGluc3RlYWQgb2YgY2FsbGluZyBmb3VuZGF0aW9uLnNldERpc2FibGVkIG9uIGRpc2FibGVkIHN0YXRlIGNoYW5nZXMsIHdlIGp1c3RcbiAgICAvLyBiaW5kIHRoZSBjbGFzcyB0byB0aGUgcHJvcGVydHk6XG4gICAgLyoqIEBpbnRlcm5hbCAqL1xuICAgIEBIb3N0QmluZGluZygnY2xhc3MubWRjLXJhZGlvLS1kaXNhYmxlZCcpIGdldCBfZGlzYWJsZWQoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLl9pbnB1dCA9PSBudWxsIHx8IHRoaXMuX2lucHV0LmRpc2FibGVkO1xuICAgIH1cblxuICAgIC8qKiBAaW50ZXJuYWwgKi9cbiAgICBnZXQgX2lucHV0KCkge1xuICAgICAgICByZXR1cm4gdGhpcy5faW5wdXRzICYmIHRoaXMuX2lucHV0cy5sZW5ndGggPiAwID8gdGhpcy5faW5wdXRzLmZpcnN0IDogbnVsbDtcbiAgICB9XG59XG5cbmV4cG9ydCBjb25zdCBSQURJT19ESVJFQ1RJVkVTID0gW1xuICAgIE1kY1JhZGlvSW5wdXREaXJlY3RpdmUsXG4gICAgTWRjUmFkaW9EaXJlY3RpdmVcbl07XG4iXX0=