import { html, css } from 'lit';
import { customElement, query } from 'lit/decorators.js';
import { ClassInfo, classMap } from 'lit/directives/class-map.js';
import { live } from 'lit/directives/live.js';
import { OmniFormElement } from '../core/OmniFormElement.js';
/**
* Color input control.
*
* @import
* ```js
* import '@capitec/omni-components/color-field';
* ```
* @example
*
* ```html
*
*
* ```
*
* @element omni-color-field
*
* @cssprop --omni-color-field-text-align - Color field text align.
* @cssprop --omni-color-field-font-color - Color field font color.
* @cssprop --omni-color-field-font-family - Color field font family.
* @cssprop --omni-color-field-font-size - Color field font size.
* @cssprop --omni-color-field-font-weight - Color field font weight.
* @cssprop --omni-color-field-height - Color field height.
* @cssprop --omni-color-field-min-height - Color field min height.
* @cssprop --omni-color-field-min-width - Color field min width.
* @cssprop --omni-color-field-padding - Color field width.
*
* @cssprop --omni-color-field-text-select - Color field text selection.
*
* @cssprop --omni-color-field-picker-height - Color field picker height.
* @cssprop --omni-color-field-picker-width - Color field picker width.
*
* @cssprop --omni-color-field-disabled-font-color - Color field disabled font color.
* @cssprop --omni-color-field-error-font-color - Color field error font color.
*/
@customElement('omni-color-field')
export class ColorField extends OmniFormElement {
@query('#inputField')
private _inputElement?: HTMLInputElement;
override connectedCallback() {
super.connectedCallback();
this.addEventListener('input', this._keyInput.bind(this), {
capture: true
});
}
_keyInput() {
const input = this._inputElement as HTMLInputElement;
this.value = input?.value;
}
static override get styles() {
return [
super.styles,
css`
.field {
display: flex;
justify-content: center;
align-items: center;
flex: 1 1 auto;
border: none;
background: none;
box-shadow: none;
outline: 0;
padding: 0;
margin: 0;
text-align: var(--omni-color-field-text-align, left);
color: var(--omni-color-field-font-color, var(--omni-font-color));
font-family: var(--omni-color-field-font-family, var(--omni-font-family));
font-size: var(--omni-color-field-font-size, var(--omni-font-size));
font-weight: var(--omni-color-field-font-weight, var(--omni-font-weight));
min-height: var(--omni-color-field-min-height, 20px);
min-width: var(--omni-color-field-min-width, 100px);
padding: var(--omni-color-field-padding, 10px);
-webkit-touch-callout: var(--omni-color-field-text-select, text);
-webkit-user-select: var(--omni-color-field-text-select, text);
-khtml-user-select: var(--omni-color-field-text-select, text);
-moz-user-select: var(--omni-color-field-text-select, text);
-ms-user-select: var(--omni-color-field-text-select, text);
user-select: var(--omni-color-field-text-select, text);
}
.input {
flex: 1 1 auto;
border: none;
background: none;
box-shadow: none;
outline: 0;
padding: 0;
margin: 0;
text-align: var(--omni-color-field-text-align, left);
color: var(--omni-color-field-font-color, var(--omni-font-color));
font-family: var(--omni-color-field-font-family, var(--omni-font-family));
font-size: var(--omni-color-field-font-size, var(--omni-font-size));
font-weight: var(--omni-color-field-font-weight, var(--omni-font-weight));
height: var(--omni-color-field-picker-height, 50px);
width: var(--omni-color-field-picker-width, 50px);
padding: var(--omni-color-field-padding, 10px);
}
.input.disabled {
color: var(--omni-color-field-disabled-font-color, #7C7C7C);
}
.input.error {
color: var(--omni-color-field-error-font-color);
}
:host(:not([value])) input[type='color']::-webkit-color-swatch,
:host([value='']) input[type='color']::-webkit-color-swatch {
background-color: transparent !important;
}
`
];
}
override focus(options?: FocusOptions | undefined): void {
if (this._inputElement) {
this._inputElement.focus(options);
} else {
super.focus(options);
}
}
protected override renderContent() {
return html` `;
}
protected override renderControl() {
const input: ClassInfo = {
input: true,
disabled: this.disabled,
error: this.error as string
};
return html`
`;
}
}
declare global {
interface HTMLElementTagNameMap {
'omni-color-field': ColorField;
}
}