blob: b0328f2047d4dabd8e8e1e96c422189cf4f817d3 [file] [log] [blame]
/**
* @license
* Copyright Google LLC All Rights Reserved.
*
* Use of this source code is governed by an MIT-style license that can be
* found in the LICENSE file at https://angular.io/license
*/
import { coerceNumberProperty } from '@angular/cdk/coercion';
/** Mixin to augment a directive with a `tabIndex` property. */
export function mixinTabIndex(base, defaultTabIndex = 0) {
// Note: We cast `base` to `unknown` and then `Constructor`. It could be an abstract class,
// but given we `extend` it from another class, we can assume a constructor being accessible.
class Mixin extends base {
constructor(...args) {
super(...args);
this._tabIndex = defaultTabIndex;
this.defaultTabIndex = defaultTabIndex;
}
get tabIndex() { return this.disabled ? -1 : this._tabIndex; }
set tabIndex(value) {
// If the specified tabIndex value is null or undefined, fall back to the default value.
this._tabIndex = value != null ? coerceNumberProperty(value) : this.defaultTabIndex;
}
}
// Since we don't directly extend from `base` with it's original types, and we instruct
// TypeScript that `T` actually is instantiatable through `new`, the types don't overlap.
// This is a limitation in TS as abstract classes cannot be typed properly dynamically.
return Mixin;
}
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGFiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi9zcmMvbWF0ZXJpYWwvY29yZS9jb21tb24tYmVoYXZpb3JzL3RhYmluZGV4LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOzs7Ozs7R0FNRztBQUVILE9BQU8sRUFBQyxvQkFBb0IsRUFBQyxNQUFNLHVCQUF1QixDQUFDO0FBaUIzRCwrREFBK0Q7QUFDL0QsTUFBTSxVQUFVLGFBQWEsQ0FDM0IsSUFBTyxFQUFFLGVBQWUsR0FBRyxDQUFDO0lBQzVCLDJGQUEyRjtJQUMzRiw2RkFBNkY7SUFDN0YsTUFBZSxLQUFNLFNBQVMsSUFBMkM7UUFVdkUsWUFBWSxHQUFHLElBQVc7WUFDeEIsS0FBSyxDQUFDLEdBQUcsSUFBSSxDQUFDLENBQUM7WUFWVCxjQUFTLEdBQVcsZUFBZSxDQUFDO1lBQzVDLG9CQUFlLEdBQUcsZUFBZSxDQUFDO1FBVWxDLENBQUM7UUFSRCxJQUFJLFFBQVEsS0FBYSxPQUFPLElBQUksQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQztRQUN0RSxJQUFJLFFBQVEsQ0FBQyxLQUFhO1lBQ3hCLHdGQUF3RjtZQUN4RixJQUFJLENBQUMsU0FBUyxHQUFHLEtBQUssSUFBSSxJQUFJLENBQUMsQ0FBQyxDQUFDLG9CQUFvQixDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsZUFBZSxDQUFDO1FBQ3RGLENBQUM7S0FLRjtJQUVELHVGQUF1RjtJQUN2Rix5RkFBeUY7SUFDekYsdUZBQXVGO0lBQ3ZGLE9BQU8sS0FBZ0QsQ0FBQztBQUMxRCxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBAbGljZW5zZVxuICogQ29weXJpZ2h0IEdvb2dsZSBMTEMgQWxsIFJpZ2h0cyBSZXNlcnZlZC5cbiAqXG4gKiBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhbiBNSVQtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZVxuICogZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZSBhdCBodHRwczovL2FuZ3VsYXIuaW8vbGljZW5zZVxuICovXG5cbmltcG9ydCB7Y29lcmNlTnVtYmVyUHJvcGVydHl9IGZyb20gJ0Bhbmd1bGFyL2Nkay9jb2VyY2lvbic7XG5pbXBvcnQge0NvbnN0cnVjdG9yLCBBYnN0cmFjdENvbnN0cnVjdG9yfSBmcm9tICcuL2NvbnN0cnVjdG9yJztcbmltcG9ydCB7Q2FuRGlzYWJsZX0gZnJvbSAnLi9kaXNhYmxlZCc7XG5cblxuLyoqIEBkb2NzLXByaXZhdGUgKi9cbmV4cG9ydCBpbnRlcmZhY2UgSGFzVGFiSW5kZXgge1xuICAvKiogVGFiaW5kZXggb2YgdGhlIGNvbXBvbmVudC4gKi9cbiAgdGFiSW5kZXg6IG51bWJlcjtcblxuICAvKiogVGFiaW5kZXggdG8gd2hpY2ggdG8gZmFsbCBiYWNrIHRvIGlmIG5vIHZhbHVlIGlzIHNldC4gKi9cbiAgZGVmYXVsdFRhYkluZGV4OiBudW1iZXI7XG59XG5cbi8qKiBAZG9jcy1wcml2YXRlICovXG5leHBvcnQgdHlwZSBIYXNUYWJJbmRleEN0b3IgPSBDb25zdHJ1Y3RvcjxIYXNUYWJJbmRleD47XG5cbi8qKiBNaXhpbiB0byBhdWdtZW50IGEgZGlyZWN0aXZlIHdpdGggYSBgdGFiSW5kZXhgIHByb3BlcnR5LiAqL1xuZXhwb3J0IGZ1bmN0aW9uIG1peGluVGFiSW5kZXg8VCBleHRlbmRzIEFic3RyYWN0Q29uc3RydWN0b3I8Q2FuRGlzYWJsZT4+KFxuICBiYXNlOiBULCBkZWZhdWx0VGFiSW5kZXggPSAwKTogSGFzVGFiSW5kZXhDdG9yICYgVCB7XG4gIC8vIE5vdGU6IFdlIGNhc3QgYGJhc2VgIHRvIGB1bmtub3duYCBhbmQgdGhlbiBgQ29uc3RydWN0b3JgLiBJdCBjb3VsZCBiZSBhbiBhYnN0cmFjdCBjbGFzcyxcbiAgLy8gYnV0IGdpdmVuIHdlIGBleHRlbmRgIGl0IGZyb20gYW5vdGhlciBjbGFzcywgd2UgY2FuIGFzc3VtZSBhIGNvbnN0cnVjdG9yIGJlaW5nIGFjY2Vzc2libGUuXG4gIGFic3RyYWN0IGNsYXNzIE1peGluIGV4dGVuZHMgKGJhc2UgYXMgdW5rbm93biBhcyBDb25zdHJ1Y3RvcjxDYW5EaXNhYmxlPikge1xuICAgIHByaXZhdGUgX3RhYkluZGV4OiBudW1iZXIgPSBkZWZhdWx0VGFiSW5kZXg7XG4gICAgZGVmYXVsdFRhYkluZGV4ID0gZGVmYXVsdFRhYkluZGV4O1xuXG4gICAgZ2V0IHRhYkluZGV4KCk6IG51bWJlciB7IHJldHVybiB0aGlzLmRpc2FibGVkID8gLTEgOiB0aGlzLl90YWJJbmRleDsgfVxuICAgIHNldCB0YWJJbmRleCh2YWx1ZTogbnVtYmVyKSB7XG4gICAgICAvLyBJZiB0aGUgc3BlY2lmaWVkIHRhYkluZGV4IHZhbHVlIGlzIG51bGwgb3IgdW5kZWZpbmVkLCBmYWxsIGJhY2sgdG8gdGhlIGRlZmF1bHQgdmFsdWUuXG4gICAgICB0aGlzLl90YWJJbmRleCA9IHZhbHVlICE9IG51bGwgPyBjb2VyY2VOdW1iZXJQcm9wZXJ0eSh2YWx1ZSkgOiB0aGlzLmRlZmF1bHRUYWJJbmRleDtcbiAgICB9XG5cbiAgICBjb25zdHJ1Y3RvciguLi5hcmdzOiBhbnlbXSkge1xuICAgICAgc3VwZXIoLi4uYXJncyk7XG4gICAgfVxuICB9XG5cbiAgLy8gU2luY2Ugd2UgZG9uJ3QgZGlyZWN0bHkgZXh0ZW5kIGZyb20gYGJhc2VgIHdpdGggaXQncyBvcmlnaW5hbCB0eXBlcywgYW5kIHdlIGluc3RydWN0XG4gIC8vIFR5cGVTY3JpcHQgdGhhdCBgVGAgYWN0dWFsbHkgaXMgaW5zdGFudGlhdGFibGUgdGhyb3VnaCBgbmV3YCwgdGhlIHR5cGVzIGRvbid0IG92ZXJsYXAuXG4gIC8vIFRoaXMgaXMgYSBsaW1pdGF0aW9uIGluIFRTIGFzIGFic3RyYWN0IGNsYXNzZXMgY2Fubm90IGJlIHR5cGVkIHByb3Blcmx5IGR5bmFtaWNhbGx5LlxuICByZXR1cm4gTWl4aW4gYXMgdW5rbm93biBhcyBUICYgQ29uc3RydWN0b3I8SGFzVGFiSW5kZXg+O1xufVxuIl19