{
  "version": 3,
  "sources": ["../src/index.ts"],
  "sourcesContent": ["import { WebComponent } from '@substrate-system/web-component'\nimport { define } from '@substrate-system/web-component/util'\nimport { ARIA_ATTRIBUTES, INPUT_ATTRIBUTES } from './util'\n\n// for document.querySelector\ndeclare global {\n    interface HTMLElementTagNameMap {\n        'substrate-input': SubstrateInput\n    }\n}\n\nexport class SubstrateInput extends WebComponent.create('substrate-input') {\n    static TAG = 'substrate-input'\n    static INPUT_ATTRIBUTES = INPUT_ATTRIBUTES\n    static ARIA_ATTRIBUTES = ARIA_ATTRIBUTES\n\n    static observedAttributes = (['label', 'id'])\n        .concat(SubstrateInput.INPUT_ATTRIBUTES)\n        .concat(SubstrateInput.ARIA_ATTRIBUTES)\n\n    inputId:string|null = null\n    inputAriaAttributes:Record<string, string> = {}\n    ignoredAriaCallbackNames:Set<string> = new Set()\n    ignoredIdCallback = false\n    generatedInputId = `substrate-input-${Math.random().toString(36).slice(2, 10)}`\n\n    handleChange_label (_oldValue, _newValue) {\n        this.render()\n    }\n\n    handleChange_aria (\n        name:string,\n        _oldValue:string|null,\n        newValue:string|null\n    ) {\n        if (this.ignoredAriaCallbackNames.has(name)) {\n            this.ignoredAriaCallbackNames.delete(name)\n            return\n        }\n\n        if (newValue === null) {\n            delete this.inputAriaAttributes[name]\n            this.querySelector('input')?.removeAttribute(name)\n            return\n        }\n\n        this.inputAriaAttributes[name] = newValue\n        this.querySelector('input')?.setAttribute(name, newValue)\n\n        if (this.hasAttribute(name)) {\n            this.ignoredAriaCallbackNames.add(name)\n            this.removeAttribute(name)\n        }\n    }\n\n    handleChange_id (_oldValue:string|null, newValue:string|null) {\n        if (this.ignoredIdCallback) {\n            this.ignoredIdCallback = false\n            return\n        }\n\n        if (newValue === null) {\n            this.inputId = null\n            this.querySelector('input')?.removeAttribute('id')\n            return\n        }\n\n        this.inputId = newValue\n        this.querySelector('input')?.setAttribute('id', newValue)\n\n        if (this.hasAttribute('id')) {\n            this.ignoredIdCallback = true\n            this.removeAttribute('id')\n        }\n    }\n\n    handleChange_inputAttribute (name:string, newValue:string|null) {\n        if (name === 'disabled') {\n            newValue === null ?\n                this.classList.remove('disabled') :\n                this.classList.add('disabled')\n        }\n\n        const input = this.querySelector('input')\n        if (!input) return\n\n        if (newValue === null) {\n            input.removeAttribute(name)\n            return\n        }\n\n        input.setAttribute(name, newValue)\n    }\n\n    async attributeChangedCallback (\n        name:string,\n        oldValue:string,\n        newValue:string\n    ) {\n        if (name === 'id') {\n            this.handleChange_id(oldValue, newValue)\n            return\n        }\n\n        if (name.startsWith('aria-')) {\n            this.handleChange_aria(name, oldValue, newValue)\n            return\n        }\n\n        if (SubstrateInput.INPUT_ATTRIBUTES.includes(name)) {\n            this.handleChange_inputAttribute(name, newValue)\n            return\n        }\n\n        if (this[`handleChange_${name}`]) {\n            this[`handleChange_${name}`](oldValue, newValue)\n        }\n    }\n\n    connectedCallback () {\n        this.render()\n    }\n\n    getInputIdForRender () {\n        return this.inputId || this.generatedInputId\n    }\n\n    set label (value:string|null) {\n        if (value === null) {\n            this.removeAttribute('label')\n            return\n        }\n        this.setAttribute('label', value)\n    }\n\n    get label ():string|null {\n        return this.getAttribute('label')\n    }\n\n    render () {\n        const label = this.getAttribute('label')\n        const hostId = this.getAttribute('id')\n        const hostAriaAttributes = Array.from(this.attributes)\n            .filter(attr => attr.name.startsWith('aria-'))\n\n        if (hostId !== null) {\n            this.inputId = hostId\n        }\n\n        for (const attr of hostAriaAttributes) {\n            this.inputAriaAttributes[attr.name] = attr.value\n        }\n\n        const name = this.getAttribute('name')\n        const attrs = Array.from(this.attributes)\n            .filter(attr =>\n                attr.name !== 'label' &&\n                attr.name !== 'id' &&\n                !attr.name.startsWith('aria-')\n            )\n            .map(attr => attr.name + (attr.value === '' ?\n                '' :\n                ('=' + `\"${attr.value}\"`))\n            )\n            .join(' ')\n\n        const classes = (this.getAttribute('class') ?? '').split(' ')\n            .concat(['substrate', 'input', name || ''])\n            .filter(Boolean)\n            .join(' ')\n\n        const inputId = this.getInputIdForRender()\n        const renderedIdAttribute = `id=\"${inputId}\"`\n        const ariaAttributes = Object.entries(this.inputAriaAttributes)\n            .map(([attrName, attrValue]) => {\n                return (attrName + (attrValue === '' ?\n                    '' :\n                    ('=' + `\"${attrValue}\"`)))\n            })\n            .join(' ')\n\n        if (this.hasAttribute('disabled')) {\n            this.classList.add('disabled')\n        } else {\n            this.classList.remove('disabled')\n        }\n\n        this.innerHTML = label ? `\n        <div class=\"${classes}\">\n            <label class=\"label-content\" for=\"${inputId}\">${label}</label>\n            <input ${renderedIdAttribute} ${ariaAttributes} ${attrs}\n                type=\"${this.getAttribute('type') || 'text'}\"\n            />\n            </div>` :\n        `<div class=\"${classes}\">\n            <input ${renderedIdAttribute} ${ariaAttributes} ${attrs}\n                type=\"${this.getAttribute('type') || 'text'}\"\n            />\n        </div>`\n\n        if (this.hasAttribute('id')) {\n            this.ignoredIdCallback = true\n            this.removeAttribute('id')\n        }\n        for (const attr of hostAriaAttributes) {\n            this.ignoredAriaCallbackNames.add(attr.name)\n            this.removeAttribute(attr.name)\n        }\n    }\n}\n\ndefine(SubstrateInput.TAG, SubstrateInput)\n"],
  "mappings": "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",
  "names": ["import_util"]
}
