UNPKG

@rxdi/ui-kit

Version:

UI Components for building graphql-server website

144 lines (138 loc) 4.69 kB
"use strict"; var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) { var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d; if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc); else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r; return c > 3 && r && Object.defineProperty(target, key, r), r; }; var __metadata = (this && this.__metadata) || function (k, v) { if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v); }; Object.defineProperty(exports, "__esModule", { value: true }); exports.DropdownComponent = void 0; const lit_html_1 = require("@rxdi/lit-html"); const rxjs_1 = require("rxjs"); const operators_1 = require("rxjs/operators"); const settings_1 = require("../settings"); /** * @customElement rx-dropdown */ let DropdownComponent = class DropdownComponent extends lit_html_1.LitElement { constructor() { super(...arguments); this.isOpened = false; this.palette = 'primary'; this.marginLeft = '0'; this.menuItems = []; this.defaultTemplate = (0, lit_html_1.html) ` <button class="dropbtn"> Dropdown </button> `; this.clickEvent = (0, rxjs_1.fromEvent)(document, 'click').pipe((0, operators_1.filter)(() => !this.entered)); } OnInit() { this.clickEvent.subscribe(() => (this.isOpened = false)); } onDropdownClicked() { this.isOpened = !this.isOpened; this.dispatchEvent(new CustomEvent('buttonClicked', { detail: this.isOpened })); } }; __decorate([ (0, lit_html_1.property)({ type: Boolean }), __metadata("design:type", Object) ], DropdownComponent.prototype, "isOpened", void 0); __decorate([ (0, lit_html_1.property)({ type: String }), __metadata("design:type", String) ], DropdownComponent.prototype, "palette", void 0); __decorate([ (0, lit_html_1.property)({ type: String }), __metadata("design:type", Object) ], DropdownComponent.prototype, "marginLeft", void 0); __decorate([ (0, lit_html_1.property)({ type: Array }), __metadata("design:type", Object) ], DropdownComponent.prototype, "menuItems", void 0); __decorate([ (0, lit_html_1.property)({ type: Object }), __metadata("design:type", Object) ], DropdownComponent.prototype, "defaultTemplate", void 0); DropdownComponent = __decorate([ (0, lit_html_1.Component)({ selector: 'rx-dropdown', style: (0, lit_html_1.css) ` .dropbtn { background-color: #3498db; color: white; padding: 16px; font-size: 16px; border: none; cursor: pointer; } .dropbtn:hover, .dropbtn:focus { background-color: #2980b9; } .dropdown { position: relative; display: inline-block; transition: all 0.5s ease; } .dropdown-content { display: none; position: absolute; min-width: 160px; overflow: auto; box-shadow: 0px 8px 16px 0px rgba(0, 0, 0, 0.2); z-index: 10; } .dropdown-content .item { padding: 12px 16px; text-decoration: none; display: block; } .show { display: block; } `, template() { return (0, lit_html_1.html) ` <style> .dropdown-content { background-color: var(--${this.palette}-bg-color); } .dropdown-content .item { color: var(--${this.palette}-color); } .dropdown a:hover { background-color: var(--${this.palette}-hover-color); } </style> <div class="dropdown" @mouseenter=${() => (this.entered = true)} @mouseleave=${() => (this.entered = false)} > <div style="cursor: pointer;" @click=${() => this.onDropdownClicked()}> <slot></slot> </div> ${this.isOpened ? (0, lit_html_1.html) ` <div class="dropdown-content show" style=${(0, lit_html_1.styleMap)({ 'margin-left': this.marginLeft })}> <slot name="first-item"></slot> ${this.menuItems.map(i => (0, lit_html_1.html) ` ${i} `)} <slot name="last-item"></slot> </div> ` : ''} </div> `; } }) ], DropdownComponent); exports.DropdownComponent = DropdownComponent; //# sourceMappingURL=dropdown.component.js.map