@rxdi/ui-kit
Version:
UI Components for building graphql-server website
158 lines (157 loc) • 5.23 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.ButtonComponent = void 0;
const lit_html_1 = require("@rxdi/lit-html");
const settings_1 = require("../settings");
/**
* @customElement rx-button
*/
let ButtonComponent = class ButtonComponent extends lit_html_1.LitElement {
constructor() {
super(...arguments);
this.palette = 'default';
}
OnUpdateFirst() {
if (this.type === 'submit') {
const form = this.getFormElement();
if (form) {
const input = document.createElement('input');
input.style.display = 'none';
input.type = this.type;
form.append(input);
this.addEventListener('click', () => input.click());
}
}
}
getFormElement() {
const defaultKey = 'parentElement';
let selector = '';
let form;
for (const k of Array(100).fill(defaultKey)) {
const formElement = this.findForm(selector);
if (formElement) {
form = formElement;
break;
}
selector += `.${k}`;
}
return form;
}
get(obj = {}, path = '') {
return path
.replace(/\[(.+?)\]/g, '.$1')
.split('.')
.reduce((o, key) => (!o[key] ? o : o[key]), obj);
}
findForm(selector) {
let form;
if (!selector) {
form = this.parentElement;
}
else {
form = this.get(this.parentElement, selector);
}
if (form && form.tagName !== 'FORM') {
return null;
}
return form;
}
};
__decorate([
(0, lit_html_1.property)({ type: String }),
__metadata("design:type", String)
], ButtonComponent.prototype, "palette", void 0);
__decorate([
(0, lit_html_1.property)({ type: Boolean }),
__metadata("design:type", Boolean)
], ButtonComponent.prototype, "disabled", void 0);
__decorate([
(0, lit_html_1.property)({ type: String }),
__metadata("design:type", String)
], ButtonComponent.prototype, "type", void 0);
__decorate([
(0, lit_html_1.property)({ type: Boolean }),
__metadata("design:type", Boolean)
], ButtonComponent.prototype, "shadow", void 0);
ButtonComponent = __decorate([
(0, lit_html_1.Component)({
selector: 'rx-button',
template() {
return (0, lit_html_1.html) `
<style>
:host {
margin: 0;
border: none;
overflow: visible;
font: inherit;
color: var(--${this.palette}-color);
background: var(--${this.palette}-bg-color);
border: var(--${this.palette}-border);
color: #222;
cursor: pointer;
color: inherit;
text-transform: none;
-webkit-appearance: none;
border-radius: 0;
display: inline-block;
box-sizing: border-box;
padding: 0 30px;
vertical-align: middle;
font-size: 14px;
line-height: 38px;
text-align: center;
text-decoration: none;
text-transform: uppercase;
transition: 0.1s ease-in-out;
transition-property: color, background-color, border-color;
user-select: none;
-webkit-user-select: none;
-moz-user-select: none;
}
slot {
user-select: none;
color: var(--${this.palette}-color);
}
</style>
${this.disabled
? (0, lit_html_1.html) `
<style>
:host {
background: #929a9c;
}
</style>
`
: (0, lit_html_1.html) `
<style>
:host(:hover) {
background-color: var(--${this.palette}-hover-color);
}
:host(:active) {
background-color: var(--${this.palette}-active-color);
}
</style>
`}
${this.shadow
? (0, lit_html_1.html) `<style>
:host {
box-shadow: rgba(0, 0, 0, 0.08) 0px 1px 3px,
rgba(0, 0, 0, 0.14) 0px 1px 2px;
}
</style>`
: ''}
<slot part="text"></slot>
`;
},
})
], ButtonComponent);
exports.ButtonComponent = ButtonComponent;
//# sourceMappingURL=button.component.js.map