@substrate-system/input 0.0.25 → 0.0.28

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/dist/index.cjs CHANGED
@@ -24,7 +24,7 @@ __export(index_exports, {
24
24
  module.exports = __toCommonJS(index_exports);
25
25
  var import_web_component = require("@substrate-system/web-component");
26
26
  var import_util = require("@substrate-system/web-component/util");
27
- var import_util2 = require("./util");
27
+ var import_util2 = require("./util.js");
28
28
  class SubstrateInput extends import_web_component.WebComponent.create("substrate-input") {
29
29
  static {
30
30
  __name(this, "SubstrateInput");
@@ -81,6 +81,10 @@ class SubstrateInput extends import_web_component.WebComponent.create("substrate
81
81
  }
82
82
  const input = this.querySelector("input");
83
83
  if (!input) return;
84
+ if (name === "value") {
85
+ input.value = newValue ?? "";
86
+ return;
87
+ }
84
88
  if (newValue === null) {
85
89
  input.removeAttribute(name);
86
90
  return;
@@ -120,6 +124,19 @@ class SubstrateInput extends import_web_component.WebComponent.create("substrate
120
124
  get label() {
121
125
  return this.getAttribute("label");
122
126
  }
127
+ set value(value) {
128
+ const normalized = String(value ?? "");
129
+ if (this.getAttribute("value") !== normalized) {
130
+ this.setAttribute("value", normalized);
131
+ }
132
+ const input = this.querySelector("input");
133
+ if (input && input.value !== normalized) {
134
+ input.value = normalized;
135
+ }
136
+ }
137
+ get value() {
138
+ return this.querySelector("input")?.value ?? this.getAttribute("value") ?? "";
139
+ }
123
140
  render() {
124
141
  const label = this.getAttribute("label");
125
142
  const hostId = this.getAttribute("id");
@@ -131,33 +148,41 @@ class SubstrateInput extends import_web_component.WebComponent.create("substrate
131
148
  this.inputAriaAttributes[attr.name] = attr.value;
132
149
  }
133
150
  const name = this.getAttribute("name");
134
- const attrs = Array.from(this.attributes).filter(
151
+ const forwardedAttributes = Array.from(this.attributes).filter(
135
152
  (attr) => attr.name !== "label" && attr.name !== "id" && !attr.name.startsWith("aria-")
136
- ).map(
137
- (attr) => attr.name + (attr.value === "" ? "" : `="${attr.value}"`)
138
- ).join(" ");
153
+ );
139
154
  const classes = (this.getAttribute("class") ?? "").split(" ").concat(["substrate", "input", name || ""]).filter(Boolean).join(" ");
140
155
  const inputId = this.getInputIdForRender();
141
- const renderedIdAttribute = `id="${inputId}"`;
142
- const ariaAttributes = Object.entries(this.inputAriaAttributes).map(([attrName, attrValue]) => {
143
- return attrName + (attrValue === "" ? "" : `="${attrValue}"`);
144
- }).join(" ");
145
156
  if (this.hasAttribute("disabled")) {
146
157
  this.classList.add("disabled");
147
158
  } else {
148
159
  this.classList.remove("disabled");
149
160
  }
150
- this.innerHTML = label ? `
151
- <div class="${classes}">
152
- <label class="label-content" for="${inputId}">${label}</label>
153
- <input ${renderedIdAttribute} ${ariaAttributes} ${attrs}
154
- type="${this.getAttribute("type") || "text"}"
155
- />
156
- </div>` : `<div class="${classes}">
157
- <input ${renderedIdAttribute} ${ariaAttributes} ${attrs}
158
- type="${this.getAttribute("type") || "text"}"
159
- />
160
- </div>`;
161
+ const input = document.createElement("input");
162
+ input.setAttribute("id", inputId);
163
+ for (const [attrName, attrValue] of Object.entries(
164
+ this.inputAriaAttributes
165
+ )) {
166
+ input.setAttribute(attrName, attrValue);
167
+ }
168
+ for (const attr of forwardedAttributes) {
169
+ try {
170
+ input.setAttribute(attr.name, attr.value);
171
+ } catch (_err) {
172
+ }
173
+ }
174
+ input.setAttribute("type", this.getAttribute("type") || "text");
175
+ const wrapper = document.createElement("div");
176
+ wrapper.setAttribute("class", classes);
177
+ if (label) {
178
+ const labelEl = document.createElement("label");
179
+ labelEl.className = "label-content";
180
+ labelEl.htmlFor = inputId;
181
+ labelEl.textContent = label;
182
+ wrapper.appendChild(labelEl);
183
+ }
184
+ wrapper.appendChild(input);
185
+ this.replaceChildren(wrapper);
161
186
  if (this.hasAttribute("id")) {
162
187
  this.ignoredIdCallback = true;
163
188
  this.removeAttribute("id");
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "version": 3,
3
3
  "sources": ["../src/index.ts"],
4
- "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"],
5
- "mappings": "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",
4
+ "sourcesContent": ["import { WebComponent } from '@substrate-system/web-component'\nimport { define } from '@substrate-system/web-component/util'\nimport { ARIA_ATTRIBUTES, INPUT_ATTRIBUTES } from './util.js'\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 (name === 'value') {\n input.value = newValue ?? ''\n return\n }\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 set value (value:string) {\n const normalized = String(value ?? '')\n\n if (this.getAttribute('value') !== normalized) {\n this.setAttribute('value', normalized)\n }\n\n const input = this.querySelector('input')\n if (input && input.value !== normalized) {\n input.value = normalized\n }\n }\n\n get value ():string {\n return this.querySelector('input')?.value ??\n this.getAttribute('value') ??\n ''\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 forwardedAttributes = Array.from(this.attributes)\n .filter(attr =>\n attr.name !== 'label' &&\n attr.name !== 'id' &&\n !attr.name.startsWith('aria-')\n )\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\n if (this.hasAttribute('disabled')) {\n this.classList.add('disabled')\n } else {\n this.classList.remove('disabled')\n }\n\n // build with DOM APIs so attribute values are never parsed as HTML\n const input = document.createElement('input')\n input.setAttribute('id', inputId)\n for (const [attrName, attrValue] of Object.entries(\n this.inputAriaAttributes\n )) {\n input.setAttribute(attrName, attrValue)\n }\n for (const attr of forwardedAttributes) {\n try {\n input.setAttribute(attr.name, attr.value)\n } catch (_err) {\n // some engines reject names the parser allows, like `@click`\n }\n }\n input.setAttribute('type', this.getAttribute('type') || 'text')\n\n const wrapper = document.createElement('div')\n wrapper.setAttribute('class', classes)\n\n if (label) {\n const labelEl = document.createElement('label')\n labelEl.className = 'label-content'\n labelEl.htmlFor = inputId\n labelEl.textContent = label\n wrapper.appendChild(labelEl)\n }\n\n wrapper.appendChild(input)\n this.replaceChildren(wrapper)\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"],
5
+ "mappings": "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",
6
6
  "names": ["import_util"]
7
7
  }
package/dist/index.d.ts CHANGED
@@ -29,6 +29,8 @@ export declare class SubstrateInput extends SubstrateInput_base {
29
29
  getInputIdForRender(): string;
30
30
  set label(value: string | null);
31
31
  get label(): string | null;
32
+ set value(value: string);
33
+ get value(): string;
32
34
  render(): void;
33
35
  }
34
36
  export {};
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,MAAM,iCAAiC,CAAA;AAK9D,OAAO,CAAC,MAAM,CAAC;IACX,UAAU,qBAAqB;QAC3B,iBAAiB,EAAE,cAAc,CAAA;KACpC;CACJ;;;;;;;AAED,qBAAa,cAAe,SAAQ,mBAAsC;IACtE,MAAM,CAAC,GAAG,SAAoB;IAC9B,MAAM,CAAC,gBAAgB,WAAmB;IAC1C,MAAM,CAAC,eAAe,WAAkB;IAExC,MAAM,CAAC,kBAAkB,WAEkB;IAE3C,OAAO,EAAC,MAAM,GAAC,IAAI,CAAO;IAC1B,mBAAmB,EAAC,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAK;IAC/C,wBAAwB,EAAC,GAAG,CAAC,MAAM,CAAC,CAAY;IAChD,iBAAiB,UAAQ;IACzB,gBAAgB,SAA+D;IAE/E,kBAAkB,CAAE,SAAS,KAAA,EAAE,SAAS,KAAA;IAIxC,iBAAiB,CACb,IAAI,EAAC,MAAM,EACX,SAAS,EAAC,MAAM,GAAC,IAAI,EACrB,QAAQ,EAAC,MAAM,GAAC,IAAI;IAsBxB,eAAe,CAAE,SAAS,EAAC,MAAM,GAAC,IAAI,EAAE,QAAQ,EAAC,MAAM,GAAC,IAAI;IAqB5D,2BAA2B,CAAE,IAAI,EAAC,MAAM,EAAE,QAAQ,EAAC,MAAM,GAAC,IAAI;IAkBxD,wBAAwB,CAC1B,IAAI,EAAC,MAAM,EACX,QAAQ,EAAC,MAAM,EACf,QAAQ,EAAC,MAAM;IAsBnB,iBAAiB;IAIjB,mBAAmB;IAInB,IAAI,KAAK,CAAE,KAAK,EAAC,MAAM,GAAC,IAAI,EAM3B;IAED,IAAI,KAAK,IAAI,MAAM,GAAC,IAAI,CAEvB;IAED,MAAM;CAsET"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,MAAM,iCAAiC,CAAA;AAK9D,OAAO,CAAC,MAAM,CAAC;IACX,UAAU,qBAAqB;QAC3B,iBAAiB,EAAE,cAAc,CAAA;KACpC;CACJ;;;;;;;AAED,qBAAa,cAAe,SAAQ,mBAAsC;IACtE,MAAM,CAAC,GAAG,SAAoB;IAC9B,MAAM,CAAC,gBAAgB,WAAmB;IAC1C,MAAM,CAAC,eAAe,WAAkB;IAExC,MAAM,CAAC,kBAAkB,WAEkB;IAE3C,OAAO,EAAC,MAAM,GAAC,IAAI,CAAO;IAC1B,mBAAmB,EAAC,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAK;IAC/C,wBAAwB,EAAC,GAAG,CAAC,MAAM,CAAC,CAAY;IAChD,iBAAiB,UAAQ;IACzB,gBAAgB,SAA+D;IAE/E,kBAAkB,CAAE,SAAS,KAAA,EAAE,SAAS,KAAA;IAIxC,iBAAiB,CACb,IAAI,EAAC,MAAM,EACX,SAAS,EAAC,MAAM,GAAC,IAAI,EACrB,QAAQ,EAAC,MAAM,GAAC,IAAI;IAsBxB,eAAe,CAAE,SAAS,EAAC,MAAM,GAAC,IAAI,EAAE,QAAQ,EAAC,MAAM,GAAC,IAAI;IAqB5D,2BAA2B,CAAE,IAAI,EAAC,MAAM,EAAE,QAAQ,EAAC,MAAM,GAAC,IAAI;IAuBxD,wBAAwB,CAC1B,IAAI,EAAC,MAAM,EACX,QAAQ,EAAC,MAAM,EACf,QAAQ,EAAC,MAAM;IAsBnB,iBAAiB;IAIjB,mBAAmB;IAInB,IAAI,KAAK,CAAE,KAAK,EAAC,MAAM,GAAC,IAAI,EAM3B;IAED,IAAI,KAAK,IAAI,MAAM,GAAC,IAAI,CAEvB;IAED,IAAI,KAAK,CAAE,KAAK,EAAC,MAAM,EAWtB;IAED,IAAI,KAAK,IAAI,MAAM,CAIlB;IAED,MAAM;CA2ET"}
package/dist/index.js CHANGED
@@ -2,7 +2,7 @@ var __defProp = Object.defineProperty;
2
2
  var __name = (target, value) => __defProp(target, "name", { value, configurable: true });
3
3
  import { WebComponent } from "@substrate-system/web-component";
4
4
  import { define } from "@substrate-system/web-component/util";
5
- import { ARIA_ATTRIBUTES, INPUT_ATTRIBUTES } from "./util";
5
+ import { ARIA_ATTRIBUTES, INPUT_ATTRIBUTES } from "./util.js";
6
6
  class SubstrateInput extends WebComponent.create("substrate-input") {
7
7
  static {
8
8
  __name(this, "SubstrateInput");
@@ -59,6 +59,10 @@ class SubstrateInput extends WebComponent.create("substrate-input") {
59
59
  }
60
60
  const input = this.querySelector("input");
61
61
  if (!input) return;
62
+ if (name === "value") {
63
+ input.value = newValue ?? "";
64
+ return;
65
+ }
62
66
  if (newValue === null) {
63
67
  input.removeAttribute(name);
64
68
  return;
@@ -98,6 +102,19 @@ class SubstrateInput extends WebComponent.create("substrate-input") {
98
102
  get label() {
99
103
  return this.getAttribute("label");
100
104
  }
105
+ set value(value) {
106
+ const normalized = String(value ?? "");
107
+ if (this.getAttribute("value") !== normalized) {
108
+ this.setAttribute("value", normalized);
109
+ }
110
+ const input = this.querySelector("input");
111
+ if (input && input.value !== normalized) {
112
+ input.value = normalized;
113
+ }
114
+ }
115
+ get value() {
116
+ return this.querySelector("input")?.value ?? this.getAttribute("value") ?? "";
117
+ }
101
118
  render() {
102
119
  const label = this.getAttribute("label");
103
120
  const hostId = this.getAttribute("id");
@@ -109,33 +126,41 @@ class SubstrateInput extends WebComponent.create("substrate-input") {
109
126
  this.inputAriaAttributes[attr.name] = attr.value;
110
127
  }
111
128
  const name = this.getAttribute("name");
112
- const attrs = Array.from(this.attributes).filter(
129
+ const forwardedAttributes = Array.from(this.attributes).filter(
113
130
  (attr) => attr.name !== "label" && attr.name !== "id" && !attr.name.startsWith("aria-")
114
- ).map(
115
- (attr) => attr.name + (attr.value === "" ? "" : `="${attr.value}"`)
116
- ).join(" ");
131
+ );
117
132
  const classes = (this.getAttribute("class") ?? "").split(" ").concat(["substrate", "input", name || ""]).filter(Boolean).join(" ");
118
133
  const inputId = this.getInputIdForRender();
119
- const renderedIdAttribute = `id="${inputId}"`;
120
- const ariaAttributes = Object.entries(this.inputAriaAttributes).map(([attrName, attrValue]) => {
121
- return attrName + (attrValue === "" ? "" : `="${attrValue}"`);
122
- }).join(" ");
123
134
  if (this.hasAttribute("disabled")) {
124
135
  this.classList.add("disabled");
125
136
  } else {
126
137
  this.classList.remove("disabled");
127
138
  }
128
- this.innerHTML = label ? `
129
- <div class="${classes}">
130
- <label class="label-content" for="${inputId}">${label}</label>
131
- <input ${renderedIdAttribute} ${ariaAttributes} ${attrs}
132
- type="${this.getAttribute("type") || "text"}"
133
- />
134
- </div>` : `<div class="${classes}">
135
- <input ${renderedIdAttribute} ${ariaAttributes} ${attrs}
136
- type="${this.getAttribute("type") || "text"}"
137
- />
138
- </div>`;
139
+ const input = document.createElement("input");
140
+ input.setAttribute("id", inputId);
141
+ for (const [attrName, attrValue] of Object.entries(
142
+ this.inputAriaAttributes
143
+ )) {
144
+ input.setAttribute(attrName, attrValue);
145
+ }
146
+ for (const attr of forwardedAttributes) {
147
+ try {
148
+ input.setAttribute(attr.name, attr.value);
149
+ } catch (_err) {
150
+ }
151
+ }
152
+ input.setAttribute("type", this.getAttribute("type") || "text");
153
+ const wrapper = document.createElement("div");
154
+ wrapper.setAttribute("class", classes);
155
+ if (label) {
156
+ const labelEl = document.createElement("label");
157
+ labelEl.className = "label-content";
158
+ labelEl.htmlFor = inputId;
159
+ labelEl.textContent = label;
160
+ wrapper.appendChild(labelEl);
161
+ }
162
+ wrapper.appendChild(input);
163
+ this.replaceChildren(wrapper);
139
164
  if (this.hasAttribute("id")) {
140
165
  this.ignoredIdCallback = true;
141
166
  this.removeAttribute("id");
package/dist/index.js.map CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "version": 3,
3
3
  "sources": ["../src/index.ts"],
4
- "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"],
5
- "mappings": "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",
4
+ "sourcesContent": ["import { WebComponent } from '@substrate-system/web-component'\nimport { define } from '@substrate-system/web-component/util'\nimport { ARIA_ATTRIBUTES, INPUT_ATTRIBUTES } from './util.js'\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 (name === 'value') {\n input.value = newValue ?? ''\n return\n }\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 set value (value:string) {\n const normalized = String(value ?? '')\n\n if (this.getAttribute('value') !== normalized) {\n this.setAttribute('value', normalized)\n }\n\n const input = this.querySelector('input')\n if (input && input.value !== normalized) {\n input.value = normalized\n }\n }\n\n get value ():string {\n return this.querySelector('input')?.value ??\n this.getAttribute('value') ??\n ''\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 forwardedAttributes = Array.from(this.attributes)\n .filter(attr =>\n attr.name !== 'label' &&\n attr.name !== 'id' &&\n !attr.name.startsWith('aria-')\n )\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\n if (this.hasAttribute('disabled')) {\n this.classList.add('disabled')\n } else {\n this.classList.remove('disabled')\n }\n\n // build with DOM APIs so attribute values are never parsed as HTML\n const input = document.createElement('input')\n input.setAttribute('id', inputId)\n for (const [attrName, attrValue] of Object.entries(\n this.inputAriaAttributes\n )) {\n input.setAttribute(attrName, attrValue)\n }\n for (const attr of forwardedAttributes) {\n try {\n input.setAttribute(attr.name, attr.value)\n } catch (_err) {\n // some engines reject names the parser allows, like `@click`\n }\n }\n input.setAttribute('type', this.getAttribute('type') || 'text')\n\n const wrapper = document.createElement('div')\n wrapper.setAttribute('class', classes)\n\n if (label) {\n const labelEl = document.createElement('label')\n labelEl.className = 'label-content'\n labelEl.htmlFor = inputId\n labelEl.textContent = label\n wrapper.appendChild(labelEl)\n }\n\n wrapper.appendChild(input)\n this.replaceChildren(wrapper)\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"],
5
+ "mappings": "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",
6
6
  "names": []
7
7
  }
package/dist/index.min.js CHANGED
@@ -1,12 +1,2 @@
1
- var L=Object.defineProperty;var n=(r,t)=>L(r,"name",{value:t,configurable:!0});var w=Object.defineProperty,$=n((r,t)=>w(r,"name",{value:t,configurable:!0}),"__name");function v(r){return Object.keys(r).reduce((t,e)=>{let i=r[e];return i?typeof i=="boolean"?i?(t+` ${e}`).trim():t:Array.isArray(i)?t+` ${e}="${i.join(" ")}"`:(t+` ${e}="${i}"`).trim():t},"")}n(v,"toAttributes");$(v,"toAttributes");var x=Object.defineProperty,f=n((r,t)=>x(r,"name",{value:t,configurable:!0}),"__name");function T(r){return document.createElement(r).constructor!==window.HTMLElement}n(T,"isRegistered");f(T,"isRegistered");function m(r,t){window&&"customElements"in window&&(T(r)||window.customElements.define(r,t))}n(m,"define");f(m,"define");var q=document.querySelector.bind(document),U=document.querySelectorAll.bind(document);function p(r,t){return r.matches||(r=r.parentElement),r.matches(t)?r:r.closest(t)}n(p,"match");f(p,"match");var S=Object.defineProperty,d=n((r,t)=>S(r,"name",{value:t,configurable:!0}),"__name"),h=class r extends window.HTMLElement{static{n(this,"WebComponent")}static{d(this,"WebComponent")}static TAG="";TAG="";static match(t){return p(t,this.TAG)}_globalWildcardListeners=new Set;_namespacedWildcardListeners=new Set;static create(t){let e=class extends r{static{n(this,"CreatedClass")}static{d(this,"CreatedClass")}static TAG=t;TAG=t;render(){throw new Error("`render` should be implemented by children")}};return e.define=function(){return r.define.call(this)},e.event=function(i){return r.event.call(this,i)},e}static define(){E(this.TAG,this)}async attributeChangedCallback(t,e,i){let s=this[`handleChange_${t}`];s&&await s.call(this,e,i)}addEventListener(t,e,i){t===r.event.call(this,"*")?this._namespacedWildcardListeners.add({listener:e,options:i}):t==="*"?e&&this._globalWildcardListeners.add({listener:e,options:i}):super.addEventListener(t,e,i)}_notifyNamespacedWildcardListeners(t){if(this._namespacedWildcardListeners.size===0)return;let e=this.TAG;!e||!t.type.startsWith(`${e}:`)||this._namespacedWildcardListeners.forEach(({listener:i})=>{try{typeof i=="function"?i.call(this,t):i&&typeof i.handleEvent=="function"&&i.handleEvent(t)}catch(s){console.error("Error in namespaced wildcard event listener:",s)}})}_notifyGlobalWildcardListeners(t){this._globalWildcardListeners.size!==0&&this._globalWildcardListeners.forEach(({listener:e})=>{try{typeof e=="function"?e.call(this,t):e&&typeof e.handleEvent=="function"&&e.handleEvent(t)}catch(i){console.error("Error in global wildcard event listener:",i)}})}connectedCallback(){this.render()}qs(t){return this.querySelector(t)}qsa(t){return this.querySelectorAll(t)}static event(t){return _(this.TAG,t)}emit(t,e={}){if(t==="*")throw new Error('Do not emit the literal "*"');let{bubbles:i=!0,cancelable:s=!0,detail:o}=e,c=`${this.TAG}:${t}`,l=new CustomEvent(c,{bubbles:i,cancelable:s,detail:o}),u=this.dispatchEvent(l);return this._notifyNamespacedWildcardListeners(l),u}dispatchEvent(t){let e=super.dispatchEvent(t);return this._notifyGlobalWildcardListeners(t),e}dispatch(t,e={}){let i=new CustomEvent(t,{bubbles:e.bubbles===void 0?!0:e.bubbles,cancelable:e.cancelable===void 0?!0:e.cancelable,detail:e.detail});return this.dispatchEvent(i)}on(t,e,i){let s=r.event.call(this,t);this.addEventListener(s,e,i)}removeEventListener(t,e,i){if(t===r.event.call(this,"*")){if(e&&this._namespacedWildcardListeners){for(let s of this._namespacedWildcardListeners)if(s.listener===e){this._namespacedWildcardListeners.delete(s);break}}}else if(t==="*"){if(e&&this._globalWildcardListeners){for(let s of this._globalWildcardListeners)if(s.listener===e){this._globalWildcardListeners.delete(s);break}}}else super.removeEventListener(t,e,i)}};function _(r,t){return`${r}:${t}`}n(_,"eventName");d(_,"eventName");function y(r){return document.createElement(r).constructor!==window.HTMLElement}n(y,"isRegistered");d(y,"isRegistered");function E(r,t){window&&"customElements"in window&&(y(r)||window.customElements.define(r,t))}n(E,"define");d(E,"define");var I=["aria-activedescendant","aria-atomic","aria-autocomplete","aria-braillelabel","aria-brailleroledescription","aria-busy","aria-checked","aria-colcount","aria-colindex","aria-colindextext","aria-colspan","aria-controls","aria-current","aria-describedby","aria-description","aria-details","aria-disabled","aria-dropeffect","aria-errormessage","aria-expanded","aria-flowto","aria-grabbed","aria-haspopup","aria-hidden","aria-invalid","aria-keyshortcuts","aria-label","aria-labelledby","aria-level","aria-live","aria-modal","aria-multiline","aria-multiselectable","aria-orientation","aria-owns","aria-placeholder","aria-posinset","aria-pressed","aria-readonly","aria-relevant","aria-required","aria-roledescription","aria-rowcount","aria-rowindex","aria-rowindextext","aria-rowspan","aria-selected","aria-setsize","aria-sort","aria-valuemax","aria-valuemin","aria-valuenow","aria-valuetext"],C=["accept","alt","autocomplete","autocapitalize","autocorrect","autofocus","capture","dirname","disabled","enterkeyhint","form","inputmode","list","max","maxlength","min","minlength","multiple","name","pattern","placeholder","readonly","required","size","spellcheck","step","tabindex","title","type","value"];var b=class r extends h.create("substrate-input"){static{n(this,"SubstrateInput")}static TAG="substrate-input";static INPUT_ATTRIBUTES=C;static ARIA_ATTRIBUTES=I;static observedAttributes=["label","id"].concat(r.INPUT_ATTRIBUTES).concat(r.ARIA_ATTRIBUTES);inputId=null;inputAriaAttributes={};ignoredAriaCallbackNames=new Set;ignoredIdCallback=!1;generatedInputId=`substrate-input-${Math.random().toString(36).slice(2,10)}`;handleChange_label(t,e){this.render()}handleChange_aria(t,e,i){if(this.ignoredAriaCallbackNames.has(t)){this.ignoredAriaCallbackNames.delete(t);return}if(i===null){delete this.inputAriaAttributes[t],this.querySelector("input")?.removeAttribute(t);return}this.inputAriaAttributes[t]=i,this.querySelector("input")?.setAttribute(t,i),this.hasAttribute(t)&&(this.ignoredAriaCallbackNames.add(t),this.removeAttribute(t))}handleChange_id(t,e){if(this.ignoredIdCallback){this.ignoredIdCallback=!1;return}if(e===null){this.inputId=null,this.querySelector("input")?.removeAttribute("id");return}this.inputId=e,this.querySelector("input")?.setAttribute("id",e),this.hasAttribute("id")&&(this.ignoredIdCallback=!0,this.removeAttribute("id"))}handleChange_inputAttribute(t,e){t==="disabled"&&(e===null?this.classList.remove("disabled"):this.classList.add("disabled"));let i=this.querySelector("input");if(i){if(e===null){i.removeAttribute(t);return}i.setAttribute(t,e)}}async attributeChangedCallback(t,e,i){if(t==="id"){this.handleChange_id(e,i);return}if(t.startsWith("aria-")){this.handleChange_aria(t,e,i);return}if(r.INPUT_ATTRIBUTES.includes(t)){this.handleChange_inputAttribute(t,i);return}this[`handleChange_${t}`]&&this[`handleChange_${t}`](e,i)}connectedCallback(){this.render()}getInputIdForRender(){return this.inputId||this.generatedInputId}set label(t){if(t===null){this.removeAttribute("label");return}this.setAttribute("label",t)}get label(){return this.getAttribute("label")}render(){let t=this.getAttribute("label"),e=this.getAttribute("id"),i=Array.from(this.attributes).filter(a=>a.name.startsWith("aria-"));e!==null&&(this.inputId=e);for(let a of i)this.inputAriaAttributes[a.name]=a.value;let s=this.getAttribute("name"),o=Array.from(this.attributes).filter(a=>a.name!=="label"&&a.name!=="id"&&!a.name.startsWith("aria-")).map(a=>a.name+(a.value===""?"":`="${a.value}"`)).join(" "),c=(this.getAttribute("class")??"").split(" ").concat(["substrate","input",s||""]).filter(Boolean).join(" "),l=this.getInputIdForRender(),u=`id="${l}"`,A=Object.entries(this.inputAriaAttributes).map(([a,g])=>a+(g===""?"":`="${g}"`)).join(" ");this.hasAttribute("disabled")?this.classList.add("disabled"):this.classList.remove("disabled"),this.innerHTML=t?`
2
- <div class="${c}">
3
- <label class="label-content" for="${l}">${t}</label>
4
- <input ${u} ${A} ${o}
5
- type="${this.getAttribute("type")||"text"}"
6
- />
7
- </div>`:`<div class="${c}">
8
- <input ${u} ${A} ${o}
9
- type="${this.getAttribute("type")||"text"}"
10
- />
11
- </div>`,this.hasAttribute("id")&&(this.ignoredIdCallback=!0,this.removeAttribute("id"));for(let a of i)this.ignoredAriaCallbackNames.add(a.name),this.removeAttribute(a.name)}};m(b.TAG,b);export{b as SubstrateInput};
1
+ var L=Object.defineProperty;var n=(r,t)=>L(r,"name",{value:t,configurable:!0});var w=Object.defineProperty,S=n((r,t)=>w(r,"name",{value:t,configurable:!0}),"__name");function v(r){return Object.keys(r).reduce((t,e)=>{let i=r[e];return i?typeof i=="boolean"?i?(t+` ${e}`).trim():t:Array.isArray(i)?t+` ${e}="${i.join(" ")}"`:(t+` ${e}="${i}"`).trim():t},"")}n(v,"toAttributes");S(v,"toAttributes");var x=Object.defineProperty,m=n((r,t)=>x(r,"name",{value:t,configurable:!0}),"__name");function T(r){return document.createElement(r).constructor!==window.HTMLElement}n(T,"isRegistered");m(T,"isRegistered");function p(r,t){window&&"customElements"in window&&(T(r)||window.customElements.define(r,t))}n(p,"define");m(p,"define");var U=document.querySelector.bind(document),$=document.querySelectorAll.bind(document);function A(r,t){return r.matches||(r=r.parentElement),r.matches(t)?r:r.closest(t)}n(A,"match");m(A,"match");var W=Object.defineProperty,o=n((r,t)=>W(r,"name",{value:t,configurable:!0}),"__name"),u=class r extends window.HTMLElement{static{n(this,"WebComponent")}static{o(this,"WebComponent")}static TAG="";TAG="";static match(t){return A(t,this.TAG)}_globalWildcardListeners=new Set;_namespacedWildcardListeners=new Set;static create(t){let e=class extends r{static{n(this,"CreatedClass")}static{o(this,"CreatedClass")}static TAG=t;TAG=t;render(){throw new Error("`render` should be implemented by children")}};return e.define=function(){return r.define.call(this)},e.event=function(i){return r.event.call(this,i)},e}static define(){y(this.TAG,this)}async attributeChangedCallback(t,e,i){let s=this[`handleChange_${t}`];s&&await s.call(this,e,i)}addEventListener(t,e,i){t===r.event.call(this,"*")?this._namespacedWildcardListeners.add({listener:e,options:i}):t==="*"?e&&this._globalWildcardListeners.add({listener:e,options:i}):super.addEventListener(t,e,i)}_notifyNamespacedWildcardListeners(t){if(this._namespacedWildcardListeners.size===0)return;let e=this.TAG;!e||!t.type.startsWith(`${e}:`)||this._namespacedWildcardListeners.forEach(({listener:i})=>{try{typeof i=="function"?i.call(this,t):i&&typeof i.handleEvent=="function"&&i.handleEvent(t)}catch(s){console.error("Error in namespaced wildcard event listener:",s)}})}_notifyGlobalWildcardListeners(t){this._globalWildcardListeners.size!==0&&this._globalWildcardListeners.forEach(({listener:e})=>{try{typeof e=="function"?e.call(this,t):e&&typeof e.handleEvent=="function"&&e.handleEvent(t)}catch(i){console.error("Error in global wildcard event listener:",i)}})}connectedCallback(){this.render()}qs(t){return this.querySelector(t)}qsa(t){return this.querySelectorAll(t)}static event(t){return E(this.TAG,t)}emit(t,e={}){if(t==="*")throw new Error('Do not emit the literal "*"');let{bubbles:i=!0,cancelable:s=!0,detail:b}=e,f=`${this.TAG}:${t}`,d=new CustomEvent(f,{bubbles:i,cancelable:s,detail:b}),l=this.dispatchEvent(d);return this._notifyNamespacedWildcardListeners(d),l}dispatchEvent(t){let e=super.dispatchEvent(t);return this._notifyGlobalWildcardListeners(t),e}dispatch(t,e={}){let i=new CustomEvent(t,{bubbles:e.bubbles===void 0?!0:e.bubbles,cancelable:e.cancelable===void 0?!0:e.cancelable,detail:e.detail});return this.dispatchEvent(i)}on(t,e,i){let s=r.event.call(this,t);this.addEventListener(s,e,i)}removeEventListener(t,e,i){if(t===r.event.call(this,"*")){if(e&&this._namespacedWildcardListeners){for(let s of this._namespacedWildcardListeners)if(s.listener===e){this._namespacedWildcardListeners.delete(s);break}}}else if(t==="*"){if(e&&this._globalWildcardListeners){for(let s of this._globalWildcardListeners)if(s.listener===e){this._globalWildcardListeners.delete(s);break}}}else super.removeEventListener(t,e,i)}};function E(r,t){return`${r}:${t}`}n(E,"eventName");o(E,"eventName");function _(r){return document.createElement(r).constructor!==window.HTMLElement}n(_,"isRegistered");o(_,"isRegistered");function y(r,t){window&&"customElements"in window&&(_(r)||window.customElements.define(r,t))}n(y,"define");o(y,"define");var I=["aria-activedescendant","aria-atomic","aria-autocomplete","aria-braillelabel","aria-brailleroledescription","aria-busy","aria-checked","aria-colcount","aria-colindex","aria-colindextext","aria-colspan","aria-controls","aria-current","aria-describedby","aria-description","aria-details","aria-disabled","aria-dropeffect","aria-errormessage","aria-expanded","aria-flowto","aria-grabbed","aria-haspopup","aria-hidden","aria-invalid","aria-keyshortcuts","aria-label","aria-labelledby","aria-level","aria-live","aria-modal","aria-multiline","aria-multiselectable","aria-orientation","aria-owns","aria-placeholder","aria-posinset","aria-pressed","aria-readonly","aria-relevant","aria-required","aria-roledescription","aria-rowcount","aria-rowindex","aria-rowindextext","aria-rowspan","aria-selected","aria-setsize","aria-sort","aria-valuemax","aria-valuemin","aria-valuenow","aria-valuetext"],C=["accept","alt","autocomplete","autocapitalize","autocorrect","autofocus","capture","dirname","disabled","enterkeyhint","form","inputmode","list","max","maxlength","min","minlength","multiple","name","pattern","placeholder","readonly","required","size","spellcheck","step","tabindex","title","type","value"];var h=class r extends u.create("substrate-input"){static{n(this,"SubstrateInput")}static TAG="substrate-input";static INPUT_ATTRIBUTES=C;static ARIA_ATTRIBUTES=I;static observedAttributes=["label","id"].concat(r.INPUT_ATTRIBUTES).concat(r.ARIA_ATTRIBUTES);inputId=null;inputAriaAttributes={};ignoredAriaCallbackNames=new Set;ignoredIdCallback=!1;generatedInputId=`substrate-input-${Math.random().toString(36).slice(2,10)}`;handleChange_label(t,e){this.render()}handleChange_aria(t,e,i){if(this.ignoredAriaCallbackNames.has(t)){this.ignoredAriaCallbackNames.delete(t);return}if(i===null){delete this.inputAriaAttributes[t],this.querySelector("input")?.removeAttribute(t);return}this.inputAriaAttributes[t]=i,this.querySelector("input")?.setAttribute(t,i),this.hasAttribute(t)&&(this.ignoredAriaCallbackNames.add(t),this.removeAttribute(t))}handleChange_id(t,e){if(this.ignoredIdCallback){this.ignoredIdCallback=!1;return}if(e===null){this.inputId=null,this.querySelector("input")?.removeAttribute("id");return}this.inputId=e,this.querySelector("input")?.setAttribute("id",e),this.hasAttribute("id")&&(this.ignoredIdCallback=!0,this.removeAttribute("id"))}handleChange_inputAttribute(t,e){t==="disabled"&&(e===null?this.classList.remove("disabled"):this.classList.add("disabled"));let i=this.querySelector("input");if(i){if(t==="value"){i.value=e??"";return}if(e===null){i.removeAttribute(t);return}i.setAttribute(t,e)}}async attributeChangedCallback(t,e,i){if(t==="id"){this.handleChange_id(e,i);return}if(t.startsWith("aria-")){this.handleChange_aria(t,e,i);return}if(r.INPUT_ATTRIBUTES.includes(t)){this.handleChange_inputAttribute(t,i);return}this[`handleChange_${t}`]&&this[`handleChange_${t}`](e,i)}connectedCallback(){this.render()}getInputIdForRender(){return this.inputId||this.generatedInputId}set label(t){if(t===null){this.removeAttribute("label");return}this.setAttribute("label",t)}get label(){return this.getAttribute("label")}set value(t){let e=String(t??"");this.getAttribute("value")!==e&&this.setAttribute("value",e);let i=this.querySelector("input");i&&i.value!==e&&(i.value=e)}get value(){return this.querySelector("input")?.value??this.getAttribute("value")??""}render(){let t=this.getAttribute("label"),e=this.getAttribute("id"),i=Array.from(this.attributes).filter(a=>a.name.startsWith("aria-"));e!==null&&(this.inputId=e);for(let a of i)this.inputAriaAttributes[a.name]=a.value;let s=this.getAttribute("name"),b=Array.from(this.attributes).filter(a=>a.name!=="label"&&a.name!=="id"&&!a.name.startsWith("aria-")),f=(this.getAttribute("class")??"").split(" ").concat(["substrate","input",s||""]).filter(Boolean).join(" "),d=this.getInputIdForRender();this.hasAttribute("disabled")?this.classList.add("disabled"):this.classList.remove("disabled");let l=document.createElement("input");l.setAttribute("id",d);for(let[a,g]of Object.entries(this.inputAriaAttributes))l.setAttribute(a,g);for(let a of b)try{l.setAttribute(a.name,a.value)}catch{}l.setAttribute("type",this.getAttribute("type")||"text");let c=document.createElement("div");if(c.setAttribute("class",f),t){let a=document.createElement("label");a.className="label-content",a.htmlFor=d,a.textContent=t,c.appendChild(a)}c.appendChild(l),this.replaceChildren(c),this.hasAttribute("id")&&(this.ignoredIdCallback=!0,this.removeAttribute("id"));for(let a of i)this.ignoredAriaCallbackNames.add(a.name),this.removeAttribute(a.name)}};p(h.TAG,h);export{h as SubstrateInput};
12
2
  //# sourceMappingURL=index.min.js.map
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "version": 3,
3
3
  "sources": ["../node_modules/@substrate-system/web-component/src/attributes.ts", "../node_modules/@substrate-system/web-component/src/util.ts", "../node_modules/@substrate-system/web-component/src/index.ts", "../src/util.ts", "../src/index.ts"],
4
- "sourcesContent": ["export type Attrs = Record<string, undefined|null|string|number|boolean|(string|number)[]>\n\n/**\n * Transform an object into an HTML attributes string. The object should be\n * like `{ attributeName: value }`.\n *\n * @param attrs An object for the attributes.\n * @returns {string} A string suitable for use as HTML attributes.\n */\nexport function toAttributes (attrs:Attrs):string {\n return Object.keys(attrs).reduce((acc, k) => {\n const value = attrs[k]\n if (!value) return acc\n\n if (typeof value === 'boolean') {\n if (value) return (acc + ` ${k}`).trim()\n return acc\n }\n\n if (Array.isArray(value)) {\n return (acc + ` ${k}=\"${value.join(' ')}\"`)\n }\n\n return (acc + ` ${k}=\"${value}\"`).trim()\n }, '')\n}\n", "export { toAttributes } from './attributes.js'\n\n/**\n * Check if the given tag name has been registered.\n *\n * @see {@link https://stackoverflow.com/a/28210364 stackoverflow}\n * @param {string} elName The custom element tag name.\n * @returns {boolean} True if the given name has been registered already.\n */\nexport function isRegistered (elName:string):boolean {\n return document.createElement(elName).constructor !== window.HTMLElement\n}\n\nexport function define (name:string, element:CustomElementConstructor) {\n if (!window) return\n if (!('customElements' in window)) return\n\n if (!isRegistered(name)) {\n window.customElements.define(name, element)\n }\n}\n\nexport const qs = document.querySelector.bind(document)\nexport const qsa = document.querySelectorAll.bind(document)\n\n/**\n * Get the closes parent element matching the given selector.\n * @param el Element to start from\n * @param s Selector for an element\n * @returns {HTMLElement|null} The closes parent element that matches.\n */\nexport function match (el:HTMLElement, s:string):HTMLElement|null {\n if (!el.matches) el = el.parentElement!\n return el.matches(s) ? el : el.closest(s)\n}\n", "import { match as _match } from './util.js'\n\ninterface WildcardListenerEntry {\n listener:EventListenerOrEventListenerObject\n options?:boolean|AddEventListenerOptions\n}\n\nexport abstract class WebComponent extends window.HTMLElement {\n static TAG:string = ''\n TAG:string = ''\n\n static match (el:HTMLElement):HTMLElement|null {\n return _match(el, this.TAG)\n }\n\n /**\n * Store global wildcard listeners (listen to all events)\n * Triggered by ALL events dispatched through this element\n * @private\n */\n private _globalWildcardListeners:Set<WildcardListenerEntry> = new Set()\n\n /**\n * Store namespaced wildcard listeners (listen to 'component-name:*')\n * Triggered by events from emit() that match this component's namespace\n * @private\n */\n private _namespacedWildcardListeners:Set<WildcardListenerEntry> = new Set()\n\n static create (elementName:string):typeof WebComponent & {\n new (...args:any[]):WebComponent;\n TAG:string;\n define: typeof WebComponent.define;\n event: typeof WebComponent.event;\n } {\n const CreatedClass = class extends WebComponent {\n static TAG = elementName\n TAG = elementName\n render () {\n throw new Error('`render` should be implemented by children')\n }\n }\n\n // Copy static methods with proper binding\n CreatedClass.define = function () {\n return WebComponent.define.call(this)\n }\n CreatedClass.event = function (evType:string) {\n return WebComponent.event.call(this, evType)\n }\n\n return CreatedClass\n }\n\n static define<T extends {\n new (...args:any[]):WebComponent;\n TAG:string;\n }>(this:T) {\n define(this.TAG, this)\n }\n\n /**\n * Runs when the value of an attribute is changed.\n *\n * Depends on `static observedAttributes`.\n *\n * Should name methods like `handleChange_disabled`.\n *\n * @param {string} name The attribute name\n * @param {string} oldValue The old attribute value\n * @param {string} newValue The new attribute value\n */\n async attributeChangedCallback (\n name:string,\n oldValue:string,\n newValue:string\n ):Promise<void> {\n const handler = this[`handleChange_${name}`]\n if (handler) {\n await handler.call(this, oldValue, newValue)\n }\n }\n\n /**\n * Enhanced addEventListener that supports wildcards:\n * - Component.event('*') - Listen to all namespaced events for this\n * component (e.g., 'my-component:*')\n * - '*' - Listen to ALL events (namespaced and non-namespaced, including\n * normal DOM events)\n *\n * @param type - Event type, Component.event('*') for namespaced wildcard,\n * or '*' for global wildcard\n * @param listener - Event listener function or object\n * @param options - Event listener options\n */\n addEventListener (\n type:string,\n listener:EventListenerOrEventListenerObject,\n options?:boolean|AddEventListenerOptions\n ): void {\n if (type === WebComponent.event.call(this, '*')) {\n // Handle namespaced wildcard listener (component-name:*)\n this._namespacedWildcardListeners.add({ listener, options })\n } else if (type === '*') {\n // Handle global wildcard listener (all events)\n if (listener) {\n this._globalWildcardListeners.add({ listener, options })\n }\n } else {\n // Normal event listener - delegate to native implementation\n super.addEventListener(type, listener, options)\n }\n }\n\n /**\n * Notify namespaced wildcard listeners of an event\n * Only fires for events that match this component's namespace\n *\n * @param event - The event to dispatch to namespaced wildcard listeners\n * @private\n */\n private _notifyNamespacedWildcardListeners (event: Event): void {\n if (this._namespacedWildcardListeners.size === 0) {\n return\n }\n\n const componentName = this.TAG\n\n // Only trigger for events in this component's namespace\n if (!componentName || !event.type.startsWith(`${componentName}:`)) {\n return\n }\n\n // Call each namespaced wildcard listener\n this._namespacedWildcardListeners.forEach(({ listener }) => {\n try {\n if (typeof listener === 'function') {\n listener.call(this, event)\n } else if (listener && typeof listener.handleEvent === 'function') {\n listener.handleEvent(event)\n }\n } catch (error) {\n // Log errors but don't let one listener break others\n console.error(\n 'Error in namespaced wildcard event listener:',\n error\n )\n }\n })\n }\n\n /**\n * Notify global wildcard listeners of an event\n * Fires for ALL events dispatched through this element\n *\n * @param event - The event to dispatch to global wildcard listeners\n * @private\n */\n private _notifyGlobalWildcardListeners (event: Event): void {\n if (this._globalWildcardListeners.size === 0) {\n return\n }\n\n // Call each global wildcard listener\n this._globalWildcardListeners.forEach(({ listener }) => {\n try {\n if (typeof listener === 'function') {\n listener.call(this, event)\n } else if (listener && typeof listener.handleEvent === 'function') {\n listener.handleEvent(event)\n }\n } catch (error) {\n // Log errors but don't let one listener break others\n console.error('Error in global wildcard event listener:', error)\n }\n })\n }\n\n connectedCallback () {\n this.render()\n }\n\n abstract render ():any\n\n qs<K extends keyof HTMLElementTagNameMap>(\n selector:K\n ):HTMLElementTagNameMap[K]|null;\n\n qs<E extends Element = Element>(selector:string):E|null;\n qs (selector:string):Element|null {\n return this.querySelector(selector)\n }\n\n qsa<K extends keyof HTMLElementTagNameMap>(\n selector:K\n ):HTMLElementTagNameMap[K]|null;\n\n qsa<E extends Element = Element>(selector:string):E|null;\n qsa (selector:string):NodeListOf<Element> {\n return this.querySelectorAll(selector)\n }\n\n /**\n * Take a non-namepsaced event name, return namespace event name.\n *\n * @param {string} evType The non-namespace event name\n * @returns {string} Namespaced event name, eg, `my-component:click`\n */\n static event (evType:string):string {\n return eventName(this.TAG, evType)\n }\n\n /**\n * Emit a namespaced event.\n *\n * @param type (non-namespaced) event type string\n * @param opts `bubbles`, `detail`, and `cancelable`. Default is\n * `{ bubbles: true, cancelable: true }`\n * @returns {boolean}\n */\n emit<T = any> (type:string, opts:Partial<{\n bubbles:boolean,\n cancelable:boolean,\n detail:CustomEvent<T>['detail']\n }> = {}):boolean {\n if (type === '*') throw new Error('Do not emit the literal \"*\"')\n\n const { bubbles = true, cancelable = true, detail } = opts\n const namespacedType = `${this.TAG}:${type}`\n\n const event = new CustomEvent(namespacedType, {\n bubbles,\n cancelable,\n detail\n })\n\n // This will trigger both specific listeners and global wildcard\n // listeners (**)\n const result = this.dispatchEvent(event)\n\n // Notify namespaced wildcard listeners (*)\n this._notifyNamespacedWildcardListeners(event)\n\n return result\n }\n\n /**\n * Override dispatchEvent to notify global wildcard listeners\n * This ensures that '**' listeners catch ALL events\n *\n * @param event - The event to dispatch\n * @returns true if the event was not cancelled\n */\n dispatchEvent (event: Event): boolean {\n const result = super.dispatchEvent(event)\n\n // Notify global wildcard listeners for ALL events\n this._notifyGlobalWildcardListeners(event)\n\n return result\n }\n\n /**\n * Create and emit an event, no namespacing.\n */\n dispatch<T> (type:string, opts:Partial<{\n bubbles:boolean,\n cancelable:boolean,\n detail:CustomEvent<T>['detail']\n }> = {}):boolean {\n const event = new CustomEvent(type, {\n bubbles: (opts.bubbles === undefined) ? true : opts.bubbles,\n cancelable: (opts.cancelable === undefined) ? true : opts.cancelable,\n detail: opts.detail\n })\n\n return this.dispatchEvent(event)\n }\n\n /**\n * Listen for namespaced events.\n */\n on<T extends Event = Event> (\n evName:string,\n handler:(ev:T)=>any,\n options?:boolean|AddEventListenerOptions\n ):void;\n\n on (\n evName:string,\n handler:EventListenerObject,\n options?:boolean|AddEventListenerOptions\n ):void;\n\n on (\n evName:string,\n handler:((ev:Event)=>any)|EventListenerObject,\n options?:boolean|AddEventListenerOptions\n ):void {\n const fullEvName = WebComponent.event.call(this, evName)\n this.addEventListener(fullEvName, handler as EventListenerOrEventListenerObject, options)\n }\n\n /**\n * Enhanced removeEventListener that supports wildcards:\n * - Component.event('*') - Remove namespaced wildcard listener\n * - '*' - Remove global wildcard listener\n *\n * @param type - Event type, Component.event('*') for namespaced, or '*'\n * for global\n * @param listener - Event listener function or object to remove\n * @param options - Event listener options\n */\n removeEventListener (\n type:string,\n listener:EventListenerOrEventListenerObject,\n options?: boolean | EventListenerOptions\n ): void {\n if (type === WebComponent.event.call(this, '*')) {\n // Remove namespaced wildcard listener\n if (listener && this._namespacedWildcardListeners) {\n for (const entry of this._namespacedWildcardListeners) {\n if (entry.listener === listener) {\n this._namespacedWildcardListeners.delete(entry)\n break\n }\n }\n }\n } else if (type === '*') {\n // Remove global wildcard listener\n if (listener && this._globalWildcardListeners) {\n for (const entry of this._globalWildcardListeners) {\n if (entry.listener === listener) {\n this._globalWildcardListeners.delete(entry)\n break\n }\n }\n }\n } else {\n // Normal event listener - delegate to native implementation\n super.removeEventListener(type, listener, options)\n }\n }\n}\n\nfunction eventName (namespace:string, evType:string) {\n return `${namespace}:${evType}`\n}\n\n/**\n * Check if the given tag name has been registered.\n *\n * @see {@link https://stackoverflow.com/a/28210364 stackoverflow}\n * @param {string} elName The custom element tag name.\n * @returns {boolean} True if the given name has been registered already.\n */\nexport function isRegistered (elName:string):boolean {\n return document.createElement(elName).constructor !== window.HTMLElement\n}\n\nexport function define (name:string, element:CustomElementConstructor) {\n if (!window) return\n if (!('customElements' in window)) return\n\n if (!isRegistered(name)) {\n window.customElements.define(name, element)\n }\n}\n", "export const ARIA_ATTRIBUTES = [\n 'aria-activedescendant',\n 'aria-atomic',\n 'aria-autocomplete',\n 'aria-braillelabel',\n 'aria-brailleroledescription',\n 'aria-busy',\n 'aria-checked',\n 'aria-colcount',\n 'aria-colindex',\n 'aria-colindextext',\n 'aria-colspan',\n 'aria-controls',\n 'aria-current',\n 'aria-describedby',\n 'aria-description',\n 'aria-details',\n 'aria-disabled',\n 'aria-dropeffect',\n 'aria-errormessage',\n 'aria-expanded',\n 'aria-flowto',\n 'aria-grabbed',\n 'aria-haspopup',\n 'aria-hidden',\n 'aria-invalid',\n 'aria-keyshortcuts',\n 'aria-label',\n 'aria-labelledby',\n 'aria-level',\n 'aria-live',\n 'aria-modal',\n 'aria-multiline',\n 'aria-multiselectable',\n 'aria-orientation',\n 'aria-owns',\n 'aria-placeholder',\n 'aria-posinset',\n 'aria-pressed',\n 'aria-readonly',\n 'aria-relevant',\n 'aria-required',\n 'aria-roledescription',\n 'aria-rowcount',\n 'aria-rowindex',\n 'aria-rowindextext',\n 'aria-rowspan',\n 'aria-selected',\n 'aria-setsize',\n 'aria-sort',\n 'aria-valuemax',\n 'aria-valuemin',\n 'aria-valuenow',\n 'aria-valuetext'\n]\n\nexport const INPUT_ATTRIBUTES = [\n 'accept',\n 'alt',\n 'autocomplete',\n 'autocapitalize',\n 'autocorrect',\n 'autofocus',\n 'capture',\n 'dirname',\n 'disabled',\n 'enterkeyhint',\n 'form',\n 'inputmode',\n 'list',\n 'max',\n 'maxlength',\n 'min',\n 'minlength',\n 'multiple',\n 'name',\n 'pattern',\n 'placeholder',\n 'readonly',\n 'required',\n 'size',\n 'spellcheck',\n 'step',\n 'tabindex',\n 'title',\n 'type',\n 'value'\n]\n", "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"],
5
- "mappings": "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",
6
- "names": ["toAttributes", "attrs", "acc", "k", "value", "__name", "isRegistered", "elName", "__name", "define", "name", "element", "qs", "qsa", "match", "el", "s", "WebComponent", "_WebComponent", "__name", "el", "match", "elementName", "CreatedClass", "evType", "define", "name", "oldValue", "newValue", "handler", "type", "listener", "options", "event", "componentName", "error", "selector", "eventName", "opts", "bubbles", "cancelable", "detail", "namespacedType", "result", "evName", "fullEvName", "entry", "namespace", "isRegistered", "elName", "element", "ARIA_ATTRIBUTES", "INPUT_ATTRIBUTES", "SubstrateInput", "_SubstrateInput", "WebComponent", "__name", "INPUT_ATTRIBUTES", "ARIA_ATTRIBUTES", "_oldValue", "_newValue", "name", "newValue", "input", "oldValue", "value", "label", "hostId", "hostAriaAttributes", "attr", "attrs", "classes", "inputId", "renderedIdAttribute", "ariaAttributes", "attrName", "attrValue", "define"]
4
+ "sourcesContent": ["export type Attrs = Record<string, undefined|null|string|number|boolean|(string|number)[]>\n\n/**\n * Transform an object into an HTML attributes string. The object should be\n * like `{ attributeName: value }`.\n *\n * @param attrs An object for the attributes.\n * @returns {string} A string suitable for use as HTML attributes.\n */\nexport function toAttributes (attrs:Attrs):string {\n return Object.keys(attrs).reduce((acc, k) => {\n const value = attrs[k]\n if (!value) return acc\n\n if (typeof value === 'boolean') {\n if (value) return (acc + ` ${k}`).trim()\n return acc\n }\n\n if (Array.isArray(value)) {\n return (acc + ` ${k}=\"${value.join(' ')}\"`)\n }\n\n return (acc + ` ${k}=\"${value}\"`).trim()\n }, '')\n}\n", "export { toAttributes } from './attributes.js'\n\n/**\n * Check if the given tag name has been registered.\n *\n * @see {@link https://stackoverflow.com/a/28210364 stackoverflow}\n * @param {string} elName The custom element tag name.\n * @returns {boolean} True if the given name has been registered already.\n */\nexport function isRegistered (elName:string):boolean {\n return document.createElement(elName).constructor !== window.HTMLElement\n}\n\nexport function define (name:string, element:CustomElementConstructor) {\n if (!window) return\n if (!('customElements' in window)) return\n\n if (!isRegistered(name)) {\n window.customElements.define(name, element)\n }\n}\n\nexport const qs = document.querySelector.bind(document)\nexport const qsa = document.querySelectorAll.bind(document)\n\n/**\n * Get the closes parent element matching the given selector.\n * @param el Element to start from\n * @param s Selector for an element\n * @returns {HTMLElement|null} The closes parent element that matches.\n */\nexport function match (el:HTMLElement, s:string):HTMLElement|null {\n if (!el.matches) el = el.parentElement!\n return el.matches(s) ? el : el.closest(s)\n}\n", "import { match as _match } from './util.js'\n\ninterface WildcardListenerEntry {\n listener:EventListenerOrEventListenerObject\n options?:boolean|AddEventListenerOptions\n}\n\nexport abstract class WebComponent extends window.HTMLElement {\n static TAG:string = ''\n TAG:string = ''\n\n static match (el:HTMLElement):HTMLElement|null {\n return _match(el, this.TAG)\n }\n\n /**\n * Store global wildcard listeners (listen to all events)\n * Triggered by ALL events dispatched through this element\n * @private\n */\n private _globalWildcardListeners:Set<WildcardListenerEntry> = new Set()\n\n /**\n * Store namespaced wildcard listeners (listen to 'component-name:*')\n * Triggered by events from emit() that match this component's namespace\n * @private\n */\n private _namespacedWildcardListeners:Set<WildcardListenerEntry> = new Set()\n\n static create (elementName:string):typeof WebComponent & {\n new (...args:any[]):WebComponent;\n TAG:string;\n define: typeof WebComponent.define;\n event: typeof WebComponent.event;\n } {\n const CreatedClass = class extends WebComponent {\n static TAG = elementName\n TAG = elementName\n render () {\n throw new Error('`render` should be implemented by children')\n }\n }\n\n // Copy static methods with proper binding\n CreatedClass.define = function () {\n return WebComponent.define.call(this)\n }\n CreatedClass.event = function (evType:string) {\n return WebComponent.event.call(this, evType)\n }\n\n return CreatedClass\n }\n\n static define<T extends {\n new (...args:any[]):WebComponent;\n TAG:string;\n }>(this:T) {\n define(this.TAG, this)\n }\n\n /**\n * Runs when the value of an attribute is changed.\n *\n * Depends on `static observedAttributes`.\n *\n * Should name methods like `handleChange_disabled`.\n *\n * @param {string} name The attribute name\n * @param {string} oldValue The old attribute value\n * @param {string} newValue The new attribute value\n */\n async attributeChangedCallback (\n name:string,\n oldValue:string,\n newValue:string\n ):Promise<void> {\n const handler = this[`handleChange_${name}`]\n if (handler) {\n await handler.call(this, oldValue, newValue)\n }\n }\n\n /**\n * Enhanced addEventListener that supports wildcards:\n * - Component.event('*') - Listen to all namespaced events for this\n * component (e.g., 'my-component:*')\n * - '*' - Listen to ALL events (namespaced and non-namespaced, including\n * normal DOM events)\n *\n * @param type - Event type, Component.event('*') for namespaced wildcard,\n * or '*' for global wildcard\n * @param listener - Event listener function or object\n * @param options - Event listener options\n */\n addEventListener (\n type:string,\n listener:EventListenerOrEventListenerObject,\n options?:boolean|AddEventListenerOptions\n ): void {\n if (type === WebComponent.event.call(this, '*')) {\n // Handle namespaced wildcard listener (component-name:*)\n this._namespacedWildcardListeners.add({ listener, options })\n } else if (type === '*') {\n // Handle global wildcard listener (all events)\n if (listener) {\n this._globalWildcardListeners.add({ listener, options })\n }\n } else {\n // Normal event listener - delegate to native implementation\n super.addEventListener(type, listener, options)\n }\n }\n\n /**\n * Notify namespaced wildcard listeners of an event\n * Only fires for events that match this component's namespace\n *\n * @param event - The event to dispatch to namespaced wildcard listeners\n * @private\n */\n private _notifyNamespacedWildcardListeners (event: Event): void {\n if (this._namespacedWildcardListeners.size === 0) {\n return\n }\n\n const componentName = this.TAG\n\n // Only trigger for events in this component's namespace\n if (!componentName || !event.type.startsWith(`${componentName}:`)) {\n return\n }\n\n // Call each namespaced wildcard listener\n this._namespacedWildcardListeners.forEach(({ listener }) => {\n try {\n if (typeof listener === 'function') {\n listener.call(this, event)\n } else if (listener && typeof listener.handleEvent === 'function') {\n listener.handleEvent(event)\n }\n } catch (error) {\n // Log errors but don't let one listener break others\n console.error(\n 'Error in namespaced wildcard event listener:',\n error\n )\n }\n })\n }\n\n /**\n * Notify global wildcard listeners of an event\n * Fires for ALL events dispatched through this element\n *\n * @param event - The event to dispatch to global wildcard listeners\n * @private\n */\n private _notifyGlobalWildcardListeners (event: Event): void {\n if (this._globalWildcardListeners.size === 0) {\n return\n }\n\n // Call each global wildcard listener\n this._globalWildcardListeners.forEach(({ listener }) => {\n try {\n if (typeof listener === 'function') {\n listener.call(this, event)\n } else if (listener && typeof listener.handleEvent === 'function') {\n listener.handleEvent(event)\n }\n } catch (error) {\n // Log errors but don't let one listener break others\n console.error('Error in global wildcard event listener:', error)\n }\n })\n }\n\n connectedCallback () {\n this.render()\n }\n\n abstract render ():any\n\n qs<K extends keyof HTMLElementTagNameMap>(\n selector:K\n ):HTMLElementTagNameMap[K]|null;\n\n qs<E extends Element = Element>(selector:string):E|null;\n qs (selector:string):Element|null {\n return this.querySelector(selector)\n }\n\n qsa<K extends keyof HTMLElementTagNameMap>(\n selector:K\n ):HTMLElementTagNameMap[K]|null;\n\n qsa<E extends Element = Element>(selector:string):E|null;\n qsa (selector:string):NodeListOf<Element> {\n return this.querySelectorAll(selector)\n }\n\n /**\n * Take a non-namepsaced event name, return namespace event name.\n *\n * @param {string} evType The non-namespace event name\n * @returns {string} Namespaced event name, eg, `my-component:click`\n */\n static event (evType:string):string {\n return eventName(this.TAG, evType)\n }\n\n /**\n * Emit a namespaced event.\n *\n * @param type (non-namespaced) event type string\n * @param opts `bubbles`, `detail`, and `cancelable`. Default is\n * `{ bubbles: true, cancelable: true }`\n * @returns {boolean}\n */\n emit<T = any> (type:string, opts:Partial<{\n bubbles:boolean,\n cancelable:boolean,\n detail:CustomEvent<T>['detail']\n }> = {}):boolean {\n if (type === '*') throw new Error('Do not emit the literal \"*\"')\n\n const { bubbles = true, cancelable = true, detail } = opts\n const namespacedType = `${this.TAG}:${type}`\n\n const event = new CustomEvent(namespacedType, {\n bubbles,\n cancelable,\n detail\n })\n\n // This will trigger both specific listeners and global wildcard\n // listeners (**)\n const result = this.dispatchEvent(event)\n\n // Notify namespaced wildcard listeners (*)\n this._notifyNamespacedWildcardListeners(event)\n\n return result\n }\n\n /**\n * Override dispatchEvent to notify global wildcard listeners\n * This ensures that '**' listeners catch ALL events\n *\n * @param event - The event to dispatch\n * @returns true if the event was not cancelled\n */\n dispatchEvent (event: Event): boolean {\n const result = super.dispatchEvent(event)\n\n // Notify global wildcard listeners for ALL events\n this._notifyGlobalWildcardListeners(event)\n\n return result\n }\n\n /**\n * Create and emit an event, no namespacing.\n */\n dispatch<T> (type:string, opts:Partial<{\n bubbles:boolean,\n cancelable:boolean,\n detail:CustomEvent<T>['detail']\n }> = {}):boolean {\n const event = new CustomEvent(type, {\n bubbles: (opts.bubbles === undefined) ? true : opts.bubbles,\n cancelable: (opts.cancelable === undefined) ? true : opts.cancelable,\n detail: opts.detail\n })\n\n return this.dispatchEvent(event)\n }\n\n /**\n * Listen for namespaced events.\n */\n on<T extends Event = Event> (\n evName:string,\n handler:(ev:T)=>any,\n options?:boolean|AddEventListenerOptions\n ):void;\n\n on (\n evName:string,\n handler:EventListenerObject,\n options?:boolean|AddEventListenerOptions\n ):void;\n\n on (\n evName:string,\n handler:((ev:Event)=>any)|EventListenerObject,\n options?:boolean|AddEventListenerOptions\n ):void {\n const fullEvName = WebComponent.event.call(this, evName)\n this.addEventListener(fullEvName, handler as EventListenerOrEventListenerObject, options)\n }\n\n /**\n * Enhanced removeEventListener that supports wildcards:\n * - Component.event('*') - Remove namespaced wildcard listener\n * - '*' - Remove global wildcard listener\n *\n * @param type - Event type, Component.event('*') for namespaced, or '*'\n * for global\n * @param listener - Event listener function or object to remove\n * @param options - Event listener options\n */\n removeEventListener (\n type:string,\n listener:EventListenerOrEventListenerObject,\n options?: boolean | EventListenerOptions\n ): void {\n if (type === WebComponent.event.call(this, '*')) {\n // Remove namespaced wildcard listener\n if (listener && this._namespacedWildcardListeners) {\n for (const entry of this._namespacedWildcardListeners) {\n if (entry.listener === listener) {\n this._namespacedWildcardListeners.delete(entry)\n break\n }\n }\n }\n } else if (type === '*') {\n // Remove global wildcard listener\n if (listener && this._globalWildcardListeners) {\n for (const entry of this._globalWildcardListeners) {\n if (entry.listener === listener) {\n this._globalWildcardListeners.delete(entry)\n break\n }\n }\n }\n } else {\n // Normal event listener - delegate to native implementation\n super.removeEventListener(type, listener, options)\n }\n }\n}\n\nfunction eventName (namespace:string, evType:string) {\n return `${namespace}:${evType}`\n}\n\n/**\n * Check if the given tag name has been registered.\n *\n * @see {@link https://stackoverflow.com/a/28210364 stackoverflow}\n * @param {string} elName The custom element tag name.\n * @returns {boolean} True if the given name has been registered already.\n */\nexport function isRegistered (elName:string):boolean {\n return document.createElement(elName).constructor !== window.HTMLElement\n}\n\nexport function define (name:string, element:CustomElementConstructor) {\n if (!window) return\n if (!('customElements' in window)) return\n\n if (!isRegistered(name)) {\n window.customElements.define(name, element)\n }\n}\n", "export const ARIA_ATTRIBUTES = [\n 'aria-activedescendant',\n 'aria-atomic',\n 'aria-autocomplete',\n 'aria-braillelabel',\n 'aria-brailleroledescription',\n 'aria-busy',\n 'aria-checked',\n 'aria-colcount',\n 'aria-colindex',\n 'aria-colindextext',\n 'aria-colspan',\n 'aria-controls',\n 'aria-current',\n 'aria-describedby',\n 'aria-description',\n 'aria-details',\n 'aria-disabled',\n 'aria-dropeffect',\n 'aria-errormessage',\n 'aria-expanded',\n 'aria-flowto',\n 'aria-grabbed',\n 'aria-haspopup',\n 'aria-hidden',\n 'aria-invalid',\n 'aria-keyshortcuts',\n 'aria-label',\n 'aria-labelledby',\n 'aria-level',\n 'aria-live',\n 'aria-modal',\n 'aria-multiline',\n 'aria-multiselectable',\n 'aria-orientation',\n 'aria-owns',\n 'aria-placeholder',\n 'aria-posinset',\n 'aria-pressed',\n 'aria-readonly',\n 'aria-relevant',\n 'aria-required',\n 'aria-roledescription',\n 'aria-rowcount',\n 'aria-rowindex',\n 'aria-rowindextext',\n 'aria-rowspan',\n 'aria-selected',\n 'aria-setsize',\n 'aria-sort',\n 'aria-valuemax',\n 'aria-valuemin',\n 'aria-valuenow',\n 'aria-valuetext'\n]\n\nexport const INPUT_ATTRIBUTES = [\n 'accept',\n 'alt',\n 'autocomplete',\n 'autocapitalize',\n 'autocorrect',\n 'autofocus',\n 'capture',\n 'dirname',\n 'disabled',\n 'enterkeyhint',\n 'form',\n 'inputmode',\n 'list',\n 'max',\n 'maxlength',\n 'min',\n 'minlength',\n 'multiple',\n 'name',\n 'pattern',\n 'placeholder',\n 'readonly',\n 'required',\n 'size',\n 'spellcheck',\n 'step',\n 'tabindex',\n 'title',\n 'type',\n 'value'\n]\n", "import { WebComponent } from '@substrate-system/web-component'\nimport { define } from '@substrate-system/web-component/util'\nimport { ARIA_ATTRIBUTES, INPUT_ATTRIBUTES } from './util.js'\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 (name === 'value') {\n input.value = newValue ?? ''\n return\n }\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 set value (value:string) {\n const normalized = String(value ?? '')\n\n if (this.getAttribute('value') !== normalized) {\n this.setAttribute('value', normalized)\n }\n\n const input = this.querySelector('input')\n if (input && input.value !== normalized) {\n input.value = normalized\n }\n }\n\n get value ():string {\n return this.querySelector('input')?.value ??\n this.getAttribute('value') ??\n ''\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 forwardedAttributes = Array.from(this.attributes)\n .filter(attr =>\n attr.name !== 'label' &&\n attr.name !== 'id' &&\n !attr.name.startsWith('aria-')\n )\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\n if (this.hasAttribute('disabled')) {\n this.classList.add('disabled')\n } else {\n this.classList.remove('disabled')\n }\n\n // build with DOM APIs so attribute values are never parsed as HTML\n const input = document.createElement('input')\n input.setAttribute('id', inputId)\n for (const [attrName, attrValue] of Object.entries(\n this.inputAriaAttributes\n )) {\n input.setAttribute(attrName, attrValue)\n }\n for (const attr of forwardedAttributes) {\n try {\n input.setAttribute(attr.name, attr.value)\n } catch (_err) {\n // some engines reject names the parser allows, like `@click`\n }\n }\n input.setAttribute('type', this.getAttribute('type') || 'text')\n\n const wrapper = document.createElement('div')\n wrapper.setAttribute('class', classes)\n\n if (label) {\n const labelEl = document.createElement('label')\n labelEl.className = 'label-content'\n labelEl.htmlFor = inputId\n labelEl.textContent = label\n wrapper.appendChild(labelEl)\n }\n\n wrapper.appendChild(input)\n this.replaceChildren(wrapper)\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"],
5
+ "mappings": "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",
6
+ "names": ["toAttributes", "attrs", "acc", "k", "value", "__name", "isRegistered", "elName", "__name", "define", "name", "element", "qs", "qsa", "match", "el", "s", "WebComponent", "_WebComponent", "__name", "el", "match", "elementName", "CreatedClass", "evType", "define", "name", "oldValue", "newValue", "handler", "type", "listener", "options", "event", "componentName", "error", "selector", "eventName", "opts", "bubbles", "cancelable", "detail", "namespacedType", "result", "evName", "fullEvName", "entry", "namespace", "isRegistered", "elName", "element", "ARIA_ATTRIBUTES", "INPUT_ATTRIBUTES", "SubstrateInput", "_SubstrateInput", "WebComponent", "__name", "INPUT_ATTRIBUTES", "ARIA_ATTRIBUTES", "_oldValue", "_newValue", "name", "newValue", "input", "oldValue", "value", "normalized", "label", "hostId", "hostAriaAttributes", "attr", "forwardedAttributes", "classes", "inputId", "attrName", "attrValue", "wrapper", "labelEl", "define"]
7
7
  }
package/dist/meta.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "inputs": {
3
3
  "src/index.ts": {
4
- "bytes": 6227,
4
+ "bytes": 6948,
5
5
  "imports": [],
6
6
  "format": "esm"
7
7
  },
@@ -16,7 +16,7 @@
16
16
  "imports": [],
17
17
  "exports": [],
18
18
  "inputs": {},
19
- "bytes": 10097
19
+ "bytes": 11224
20
20
  },
21
21
  "dist/index.js": {
22
22
  "imports": [
@@ -31,7 +31,7 @@
31
31
  "external": true
32
32
  },
33
33
  {
34
- "path": "./util",
34
+ "path": "./util.js",
35
35
  "kind": "import-statement",
36
36
  "external": true
37
37
  }
@@ -42,10 +42,10 @@
42
42
  "entryPoint": "src/index.ts",
43
43
  "inputs": {
44
44
  "src/index.ts": {
45
- "bytesInOutput": 5126
45
+ "bytesInOutput": 5647
46
46
  }
47
47
  },
48
- "bytes": 5318
48
+ "bytes": 5839
49
49
  },
50
50
  "dist/util.js.map": {
51
51
  "imports": [],
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@substrate-system/input",
3
- "version": "0.0.25",
3
+ "version": "0.0.28",
4
4
  "description": "Input web component",
5
5
  "type": "module",
6
6
  "exports": {