sb-element
Version:
This library was generated with [Angular CLI](https://github.com/angular/angular-cli) version 12.0.1. It is a component library constructed around the SCSS library [Sb-Theming](https://github.com/SeverinBuchser/SbTheming) and supports [Angular Schematics]
106 lines • 14.7 kB
JavaScript
import { Attribute, Component, Input, Optional, ViewEncapsulation } from '@angular/core';
import { NG_VALUE_ACCESSOR } from '@angular/forms';
import { mixinDisable, mixinFocus, mixinSize, mixinColor, mixinClassName, Color, Size } from '../../core';
import * as i0 from "@angular/core";
import * as i1 from "../../core";
import * as i2 from "../button/button.component";
import * as i3 from "../../icon/icon/icon.component";
import * as i4 from "@angular/common";
const SbSelectButtonCore = mixinDisable(mixinFocus(mixinSize(mixinColor(mixinClassName(class {
constructor(_elementRef, _themeService) {
this._elementRef = _elementRef;
this._themeService = _themeService;
}
}, 'sb-select-button'), Color.PRIMARY), Size.MEDIUM)));
export class SbSelectButtonComponent extends SbSelectButtonCore {
constructor(elementRef, themeService, pill, plain) {
super(elementRef, themeService);
this.plain = false;
this.pill = false;
this.open = false;
this.options = new Array();
this.onChange = () => { };
this.onTouch = () => { };
this.innerValue = undefined;
if (pill == '')
this.pill = true;
if (plain == '')
this.plain = true;
}
set isPill(isPill) {
this.pill = isPill;
}
set isPlain(isPlain) {
this.plain = isPlain;
}
set value(value) {
if (value !== this.innerValue && !this.disabled) {
this.innerValue = value;
this.onChange(value);
}
}
get value() {
if (this.innerValue) {
return this.innerValue;
}
else
return '';
}
toggle() {
this.open = !this.open;
}
select(newOption) {
this.toggle();
this.value = newOption;
}
writeValue(value) {
if (value !== this.innerValue && !this.disabled) {
this.innerValue = value;
}
}
registerOnChange(fn) { this.onChange = fn; }
registerOnTouched(fn) { this.onTouch = fn; }
onBlur() { this.onTouch(); }
}
SbSelectButtonComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.2.0", ngImport: i0, type: SbSelectButtonComponent, deps: [{ token: i0.ElementRef }, { token: i1.SbThemeService }, { token: 'pill', attribute: true, optional: true }, { token: 'plain', attribute: true, optional: true }], target: i0.ɵɵFactoryTarget.Component });
SbSelectButtonComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "13.2.0", type: SbSelectButtonComponent, selector: "sb-select-button", inputs: { size: "size", color: "color", disabled: "disabled", isPill: "isPill", isPlain: "isPlain", options: "options" }, outputs: { focus: "focus", blur: "blur" }, host: { properties: { "class.pill": "pill", "class.plain": "plain", "class.open": "open" } }, providers: [{
provide: NG_VALUE_ACCESSOR,
useExisting: SbSelectButtonComponent,
multi: true
}], usesInheritance: true, ngImport: i0, template: "<button\n type=\"button\"\n [color]=\"color\"\n [size]=\"size\"\n [isPlain]=\"plain\"\n [isPill]=\"pill\"\n (focus)=\"setFocusedState(true)\"\n (blur)=\"setFocusedState(false)\"\n [disabled]=\"disabled\"\n (click)=\"toggle()\">\n {{ value }}\n <ng-content *ngIf=\"!value\"></ng-content>\n <sb-icon></sb-icon>\n</button>\n<div [ngClass]=\"className + '__options-wrapper'\">\n <div [ngClass]=\"className + '__options'\">\n <div\n [ngClass]=\"className + '__option'\"\n *ngFor=\"let option of options\"\n (click)=\"select(option)\">\n {{ option }}\n </div>\n </div>\n</div>\n", components: [{ type: i2.SbButtonComponent, selector: "button, [sb-button]", inputs: ["size", "color", "isRound", "isPill", "isPlain", "type"] }, { type: i3.SbIconComponent, selector: "sb-icon", inputs: ["size", "color", "icon", "isOutline"] }], directives: [{ type: i4.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { type: i4.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { type: i4.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }], encapsulation: i0.ViewEncapsulation.None });
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.2.0", ngImport: i0, type: SbSelectButtonComponent, decorators: [{
type: Component,
args: [{ selector: 'sb-select-button', encapsulation: ViewEncapsulation.None, host: {
'[class.pill]': 'pill',
'[class.plain]': 'plain',
'[class.open]': 'open'
}, inputs: [
'size',
'color',
'disabled'
], outputs: [
'focus',
'blur'
], providers: [{
provide: NG_VALUE_ACCESSOR,
useExisting: SbSelectButtonComponent,
multi: true
}], template: "<button\n type=\"button\"\n [color]=\"color\"\n [size]=\"size\"\n [isPlain]=\"plain\"\n [isPill]=\"pill\"\n (focus)=\"setFocusedState(true)\"\n (blur)=\"setFocusedState(false)\"\n [disabled]=\"disabled\"\n (click)=\"toggle()\">\n {{ value }}\n <ng-content *ngIf=\"!value\"></ng-content>\n <sb-icon></sb-icon>\n</button>\n<div [ngClass]=\"className + '__options-wrapper'\">\n <div [ngClass]=\"className + '__options'\">\n <div\n [ngClass]=\"className + '__option'\"\n *ngFor=\"let option of options\"\n (click)=\"select(option)\">\n {{ option }}\n </div>\n </div>\n</div>\n" }]
}], ctorParameters: function () { return [{ type: i0.ElementRef }, { type: i1.SbThemeService }, { type: undefined, decorators: [{
type: Optional
}, {
type: Attribute,
args: ['pill']
}] }, { type: undefined, decorators: [{
type: Optional
}, {
type: Attribute,
args: ['plain']
}] }]; }, propDecorators: { isPill: [{
type: Input
}], isPlain: [{
type: Input
}], options: [{
type: Input
}] } });
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2VsZWN0LWJ1dHRvbi5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9zYi1lbGVtZW50L3NyYy9saWIvZm9ybXMvc2VsZWN0LWJ1dHRvbi9zZWxlY3QtYnV0dG9uLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uLy4uL3NiLWVsZW1lbnQvc3JjL2xpYi9mb3Jtcy9zZWxlY3QtYnV0dG9uL3NlbGVjdC1idXR0b24uY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFNBQVMsRUFBRSxTQUFTLEVBQWMsS0FBSyxFQUFFLFFBQVEsRUFBRSxpQkFBaUIsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUNyRyxPQUFPLEVBQXdCLGlCQUFpQixFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFDekUsT0FBTyxFQUFrQixZQUFZLEVBQUUsVUFBVSxFQUFFLFNBQVMsRUFBRSxVQUFVLEVBQUUsY0FBYyxFQUFFLEtBQUssRUFBRSxJQUFJLEVBQUUsTUFBTSxZQUFZLENBQUM7Ozs7OztBQUUxSCxNQUFNLGtCQUFrQixHQUFHLFlBQVksQ0FDckMsVUFBVSxDQUNSLFNBQVMsQ0FDUCxVQUFVLENBQ1IsY0FBYyxDQUNaO0lBQ0UsWUFDUyxXQUF1QixFQUN2QixhQUE2QjtRQUQ3QixnQkFBVyxHQUFYLFdBQVcsQ0FBWTtRQUN2QixrQkFBYSxHQUFiLGFBQWEsQ0FBZ0I7SUFBRyxDQUFDO0NBQzNDLEVBQUUsa0JBQWtCLENBQ3RCLEVBQUUsS0FBSyxDQUFDLE9BQU8sQ0FDakIsRUFBRSxJQUFJLENBQUMsTUFBTSxDQUNmLENBQ0YsQ0FDRixDQUFDO0FBMEJGLE1BQU0sT0FBTyx1QkFBd0IsU0FBUSxrQkFBa0I7SUFxQzdELFlBQ0UsVUFBc0IsRUFDdEIsWUFBNEIsRUFDRyxJQUFTLEVBQ1IsS0FBVTtRQUUxQyxLQUFLLENBQUMsVUFBVSxFQUFFLFlBQVksQ0FBQyxDQUFDO1FBL0IzQixV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QUFJLFNBQVM7MkJBQUMsT0FBTzs0Q0F0QzVCLE1BQU07c0JBRFQsS0FBSztnQkFNRixPQUFPO3NCQURWLEtBQUs7Z0JBVUMsT0FBTztzQkFEYixLQUFLIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQXR0cmlidXRlLCBDb21wb25lbnQsIEVsZW1lbnRSZWYsIElucHV0LCBPcHRpb25hbCwgVmlld0VuY2Fwc3VsYXRpb24gfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IENvbnRyb2xWYWx1ZUFjY2Vzc29yLCBOR19WQUxVRV9BQ0NFU1NPUiB9IGZyb20gJ0Bhbmd1bGFyL2Zvcm1zJztcbmltcG9ydCB7IFNiVGhlbWVTZXJ2aWNlLCBtaXhpbkRpc2FibGUsIG1peGluRm9jdXMsIG1peGluU2l6ZSwgbWl4aW5Db2xvciwgbWl4aW5DbGFzc05hbWUsIENvbG9yLCBTaXplIH0gZnJvbSAnLi4vLi4vY29yZSc7XG5cbmNvbnN0IFNiU2VsZWN0QnV0dG9uQ29yZSA9IG1peGluRGlzYWJsZShcbiAgbWl4aW5Gb2N1cyhcbiAgICBtaXhpblNpemUoXG4gICAgICBtaXhpbkNvbG9yKFxuICAgICAgICBtaXhpbkNsYXNzTmFtZShcbiAgICAgICAgICBjbGFzcyB7XG4gICAgICAgICAgICBjb25zdHJ1Y3RvcihcbiAgICAgICAgICAgICAgcHVibGljIF9lbGVtZW50UmVmOiBFbGVtZW50UmVmLFxuICAgICAgICAgICAgICBwdWJsaWMgX3RoZW1lU2VydmljZTogU2JUaGVtZVNlcnZpY2UpIHt9XG4gICAgICAgICAgfSwgJ3NiLXNlbGVjdC1idXR0b24nXG4gICAgICAgICksIENvbG9yLlBSSU1BUllcbiAgICAgICksIFNpemUuTUVESVVNXG4gICAgKVxuICApXG4pO1xuXG5AQ29tcG9uZW50KHtcbiAgc2VsZWN0b3I6ICdzYi1zZWxlY3QtYnV0dG9uJyxcbiAgdGVtcGxhdGVVcmw6ICcuL3NlbGVjdC1idXR0b24uY29tcG9uZW50Lmh0bWwnLFxuICBlbmNhcHN1bGF0aW9uOiBWaWV3RW5jYXBzdWxhdGlvbi5Ob25lLFxuICBob3N0OiB7XG4gICAgJ1tjbGFzcy5waWxsXSc6ICdwaWxsJyxcbiAgICAnW2NsYXNzLnBsYWluXSc6ICdwbGFpbicsXG4gICAgJ1tjbGFzcy5vcGVuXSc6ICdvcGVuJ1xuICB9LFxuICBpbnB1dHM6IFtcbiAgICAnc2l6ZScsXG4gICAgJ2NvbG9yJyxcbiAgICAnZGlzYWJsZWQnXG4gIF0sXG4gIG91dHB1dHM6IFtcbiAgICAnZm9jdXMnLFxuICAgICdibHVyJ1xuICBdLFxuICBwcm92aWRlcnM6IFt7XG4gICAgcHJvdmlkZTogTkdfVkFMVUVfQUNDRVNTT1IsXG4gICAgdXNlRXhpc3Rpbmc6IFNiU2VsZWN0QnV0dG9uQ29tcG9uZW50LFxuICAgIG11bHRpOiB0cnVlXG4gIH1dXG59KVxuZXhwb3J0IGNsYXNzIFNiU2VsZWN0QnV0dG9uQ29tcG9uZW50IGV4dGVuZHMgU2JTZWxlY3RCdXR0b25Db3JlIGltcGxlbWVudHMgQ29udHJvbFZhbHVlQWNjZXNzb3Ige1xuXG4gIEBJbnB1dCgpXG4gIHNldCBpc1BpbGwoaXNQaWxsOiBib29sZWFuKSB7XG4gICAgdGhpcy5waWxsID0gaXNQaWxsO1xuICB9XG5cbiAgQElucHV0KClcbiAgc2V0IGlzUGxhaW4oaXNQbGFpbjogYm9vbGVhbikge1xuICAgIHRoaXMucGxhaW4gPSBpc1BsYWluO1xuICB9XG5cbiAgcHVibGljIHBsYWluOiBib29sZWFuID0gZmFsc2U7XG4gIHB1YmxpYyBwaWxsOiBib29sZWFuID0gZmFsc2U7XG4gIHB1YmxpYyBvcGVuOiBib29sZWFuID0gZmFsc2U7XG5cbiAgQElucHV0KClcbiAgcHVibGljIG9wdGlvbnM6IEFycmF5PHN0cmluZz4gPSBuZXcgQXJyYXk8c3RyaW5nPigpO1xuXG4gIHByaXZhdGUgb25DaGFuZ2U6IGFueSA9ICgpID0+IHt9O1xuICBwcml2YXRlIG9uVG91Y2g6IGFueSA9ICgpID0+IHt9O1xuXG4gIHByaXZhdGUgaW5uZXJWYWx1ZTogc3RyaW5nIHwgdW5kZWZpbmVkID0gdW5kZWZpbmVkO1xuXG4gIHNldCB2YWx1ZSh2YWx1ZTogc3RyaW5nKSB7XG4gICAgaWYgKHZhbHVlICE9PSB0aGlzLmlubmVyVmFsdWUgJiYgIXRoaXMuZGlzYWJsZWQpIHtcbiAgICAgIHRoaXMuaW5uZXJWYWx1ZSA9IHZhbHVlO1xuICAgICAgdGhpcy5vbkNoYW5nZSh2YWx1ZSk7XG4gICAgfVxuICB9XG5cbiAgZ2V0IHZhbHVlKCk6IHN0cmluZyB7XG4gICAgaWYgKHRoaXMuaW5uZXJWYWx1ZSkge1xuICAgICAgcmV0dXJuIHRoaXMuaW5uZXJWYWx1ZTtcbiAgICB9IGVsc2UgcmV0dXJuICcnO1xuICB9XG5cbiAgY29uc3RydWN0b3IoXG4gICAgZWxlbWVudFJlZjogRWxlbWVudFJlZixcbiAgICB0aGVtZVNlcnZpY2U6IFNiVGhlbWVTZXJ2aWNlLFxuICAgIEBPcHRpb25hbCgpIEBBdHRyaWJ1dGUoJ3BpbGwnKSBwaWxsOiBhbnksXG4gICAgQE9wdGlvbmFsKCkgQEF0dHJpYnV0ZSgncGxhaW4nKSBwbGFpbjogYW55XG4gICkge1xuICAgIHN1cGVyKGVsZW1lbnRSZWYsIHRoZW1lU2VydmljZSk7XG4gICAgaWYgKHBpbGwgPT0gJycpIHRoaXMucGlsbCA9IHRydWU7XG4gICAgaWYgKHBsYWluID09ICcnKSB0aGlzLnBsYWluID0gdHJ1ZTtcbiAgfVxuXG4gIHB1YmxpYyB0b2dnbGUoKTogdm9pZCB7XG4gICAgdGhpcy5vcGVuID0gIXRoaXMub3BlbjtcbiAgfVxuXG4gIHB1YmxpYyBzZWxlY3QobmV3T3B0aW9uOiBzdHJpbmcpIHtcbiAgICB0aGlzLnRvZ2dsZSgpO1xuICAgIHRoaXMudmFsdWUgPSBuZXdPcHRpb247XG4gIH1cblxuICBwdWJsaWMgd3JpdGVWYWx1ZSh2YWx1ZTogc3RyaW5nKTogdm9pZCB7XG4gICAgaWYgKHZhbHVlICE9PSB0aGlzLmlubmVyVmFsdWUgJiYgIXRoaXMuZGlzYWJsZWQpIHtcbiAgICAgIHRoaXMuaW5uZXJWYWx1ZSA9IHZhbHVlO1xuICAgIH1cbiAgfVxuXG4gIHB1YmxpYyByZWdpc3Rlck9uQ2hhbmdlKGZuOiBhbnkpOiB2b2lkIHsgdGhpcy5vbkNoYW5nZSA9IGZuIH1cbiAgcHVibGljIHJlZ2lzdGVyT25Ub3VjaGVkKGZuOiBhbnkpOiB2b2lkIHsgdGhpcy5vblRvdWNoID0gZm4gfVxuICBwdWJsaWMgb25CbHVyKCk6IHZvaWQgeyB0aGlzLm9uVG91Y2goKSB9XG59XG4iLCI8YnV0dG9uXG4gIHR5cGU9XCJidXR0b25cIlxuICBbY29sb3JdPVwiY29sb3JcIlxuICBbc2l6ZV09XCJzaXplXCJcbiAgW2lzUGxhaW5dPVwicGxhaW5cIlxuICBbaXNQaWxsXT1cInBpbGxcIlxuICAoZm9jdXMpPVwic2V0Rm9jdXNlZFN0YXRlKHRydWUpXCJcbiAgKGJsdXIpPVwic2V0Rm9jdXNlZFN0YXRlKGZhbHNlKVwiXG4gIFtkaXNhYmxlZF09XCJkaXNhYmxlZFwiXG4gIChjbGljayk9XCJ0b2dnbGUoKVwiPlxuICB7eyB2YWx1ZSB9fVxuICA8bmctY29udGVudCAqbmdJZj1cIiF2YWx1ZVwiPjwvbmctY29udGVudD5cbiAgPHNiLWljb24+JiN4ZTVjZjs8L3NiLWljb24+XG48L2J1dHRvbj5cbjxkaXYgW25nQ2xhc3NdPVwiY2xhc3NOYW1lICsgJ19fb3B0aW9ucy13cmFwcGVyJ1wiPlxuICA8ZGl2IFtuZ0NsYXNzXT1cImNsYXNzTmFtZSArICdfX29wdGlvbnMnXCI+XG4gICAgPGRpdlxuICAgICAgW25nQ2xhc3NdPVwiY2xhc3NOYW1lICsgJ19fb3B0aW9uJ1wiXG4gICAgICAqbmdGb3I9XCJsZXQgb3B0aW9uIG9mIG9wdGlvbnNcIlxuICAgICAgKGNsaWNrKT1cInNlbGVjdChvcHRpb24pXCI+XG4gICAgICAgIHt7IG9wdGlvbiB9fVxuICAgIDwvZGl2PlxuICA8L2Rpdj5cbjwvZGl2PlxuIl19