import { LitElement, html, css } from "lit"; import { customElement, property, query } from "lit/decorators.js"; import { ifDefined } from "lit/directives/if-defined.js"; import "./icon.ts"; @customElement("hvs-input") export default class HvsInput extends LitElement { @property({ attribute: "is-loading", type: Boolean }) isLoading = false; @property({ attribute: false, type: String }) value?: string = ""; @property({ attribute: false }) onChange: (value: string) => void = () => {}; @property({ attribute: false, type: String }) searchIcon?: string = ""; @property({ attribute: false, type: String }) placeholder?: string = ""; @query("#hvs-input") input!: HTMLInputElement; constructor() { super(); this.addEventListener("input", () => { this.onChange(this.input.value); }); } protected render() { return html`
`; } static styles = css` div { position: relative; display: flex; flex-direction: row; align-items: center; width: 100%; } input { font-family: var(--hvs-font-family, inherit); box-sizing: border-box; padding-top: var(--hvs-input-padding-top, 8px); padding-bottom: var(--hvs-input-padding-bottom, 8px); padding-left: var(--hvs-input-padding-left, 12px); padding-right: var(--hvs-input-padding-right, 32px); border: none; border-top-left-radius: var(--hvs-input-border-top-left-radius, 8px); border-top-right-radius: var(--hvs-input-border-top-right-radius, 8px); border-bottom-left-radius: var( --hvs-input-border-bottom-left-radius, 8px ); border-bottom-right-radius: var( --hvs-input-border-bottom-right-radius, 8px ); border-top: var(--hvs-input-border-top); border-right: var(--hvs-input-border-right); border-bottom: var(--hvs-input-border-bottom); border-left: var(--hvs-input-border-left); border-color: var(--hvs-input-border-color, #d0d5dd); border-width: var(--hvs-input-border-width, 1px); border-style: var(--hvs-input-border-style, solid); width: 100%; min-width: 100%; height: var(--hvs-input-height, 40px); font-style: normal; font-weight: 400; font-size: var(--hvs-input-font-size, 16px); line-height: var(--hvs-input-line-height, 24px); background: var(--hvs-input-background, transparent); color: var(--hvs-input-text-color, #667085); } input:focus-visible { outline: var(--hvs-input-ring-color, #98a2b3 auto 1px); } `; } declare global { interface HTMLElementTagNameMap { "hvs-input": HvsInput; } }