@rxdi/ui-kit
Version:
UI Components for building graphql-server website
144 lines (138 loc) • 4.69 kB
JavaScript
;
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