@phcdevworks/spectre-components 1.1.0 → 1.2.0

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.
Files changed (64) hide show
  1. package/README.md +559 -153
  2. package/dist/{base-2rD8EmdC.d.cts → base-B_9DJkh2.d.cts} +6 -0
  3. package/dist/{base-2rD8EmdC.d.ts → base-B_9DJkh2.d.ts} +6 -0
  4. package/dist/button.cjs +95 -33
  5. package/dist/button.cjs.map +1 -1
  6. package/dist/button.d.cts +27 -19
  7. package/dist/button.d.ts +27 -19
  8. package/dist/button.js +95 -33
  9. package/dist/button.js.map +1 -1
  10. package/dist/checkbox.cjs +65 -4
  11. package/dist/checkbox.cjs.map +1 -1
  12. package/dist/checkbox.d.cts +12 -7
  13. package/dist/checkbox.d.ts +12 -7
  14. package/dist/checkbox.js +65 -4
  15. package/dist/checkbox.js.map +1 -1
  16. package/dist/fieldset.cjs +95 -5
  17. package/dist/fieldset.cjs.map +1 -1
  18. package/dist/fieldset.d.cts +33 -7
  19. package/dist/fieldset.d.ts +33 -7
  20. package/dist/fieldset.js +95 -5
  21. package/dist/fieldset.js.map +1 -1
  22. package/dist/form-9cZG1E9P.d.cts +10 -0
  23. package/dist/form-9cZG1E9P.d.ts +10 -0
  24. package/dist/index.cjs +340 -84
  25. package/dist/index.cjs.map +1 -1
  26. package/dist/index.d.cts +4 -4
  27. package/dist/index.d.ts +4 -4
  28. package/dist/index.js +340 -84
  29. package/dist/index.js.map +1 -1
  30. package/dist/input.cjs +88 -5
  31. package/dist/input.cjs.map +1 -1
  32. package/dist/input.d.cts +47 -10
  33. package/dist/input.d.ts +47 -10
  34. package/dist/input.js +88 -5
  35. package/dist/input.js.map +1 -1
  36. package/dist/label.cjs +69 -3
  37. package/dist/label.cjs.map +1 -1
  38. package/dist/label.d.cts +18 -6
  39. package/dist/label.d.ts +18 -6
  40. package/dist/label.js +69 -3
  41. package/dist/label.js.map +1 -1
  42. package/dist/{projectable-BzDQ4xp_.d.cts → projectable-CIfxi7dv.d.cts} +1 -1
  43. package/dist/{projectable-s3SgvjGX.d.ts → projectable-Ksv9eoIr.d.ts} +1 -1
  44. package/dist/radio.cjs +85 -4
  45. package/dist/radio.cjs.map +1 -1
  46. package/dist/radio.d.cts +14 -7
  47. package/dist/radio.d.ts +14 -7
  48. package/dist/radio.js +85 -4
  49. package/dist/radio.js.map +1 -1
  50. package/dist/select.cjs +69 -6
  51. package/dist/select.cjs.map +1 -1
  52. package/dist/select.d.cts +14 -9
  53. package/dist/select.d.ts +14 -9
  54. package/dist/select.js +69 -6
  55. package/dist/select.js.map +1 -1
  56. package/dist/textarea.cjs +84 -5
  57. package/dist/textarea.cjs.map +1 -1
  58. package/dist/textarea.d.cts +35 -9
  59. package/dist/textarea.d.ts +35 -9
  60. package/dist/textarea.js +84 -5
  61. package/dist/textarea.js.map +1 -1
  62. package/package.json +21 -12
  63. package/dist/form-iI7vV-3W.d.cts +0 -6
  64. package/dist/form-iI7vV-3W.d.ts +0 -6
package/dist/textarea.js CHANGED
@@ -10,6 +10,8 @@ var SpectreBaseElement = class extends LitElement {
10
10
  this._ariaLabel = null;
11
11
  this._ariaLabelledBy = null;
12
12
  this._ariaDescribedBy = null;
13
+ this._autocapitalize = "";
14
+ this._spellcheck = null;
13
15
  this._title = "";
14
16
  this._id = "";
15
17
  }
@@ -46,6 +48,29 @@ var SpectreBaseElement = class extends LitElement {
46
48
  this._removeHostAttribute("aria-describedby");
47
49
  this.requestUpdate();
48
50
  }
51
+ get autocapitalize() {
52
+ return this._autocapitalize;
53
+ }
54
+ set autocapitalize(value) {
55
+ const normalizedValue = value ?? "";
56
+ if (this._autocapitalize === normalizedValue) {
57
+ return;
58
+ }
59
+ this._autocapitalize = normalizedValue;
60
+ this._removeHostAttribute("autocapitalize");
61
+ this.requestUpdate();
62
+ }
63
+ get spellcheck() {
64
+ return this._spellcheck ?? super.spellcheck;
65
+ }
66
+ set spellcheck(value) {
67
+ if (this._spellcheck === value) {
68
+ return;
69
+ }
70
+ this._spellcheck = value ?? null;
71
+ this._removeHostAttribute("spellcheck");
72
+ this.requestUpdate();
73
+ }
49
74
  get title() {
50
75
  return this._title;
51
76
  }
@@ -80,6 +105,8 @@ var SpectreBaseElement = class extends LitElement {
80
105
  const proxiedAttributes = [
81
106
  "id",
82
107
  "title",
108
+ "autocapitalize",
109
+ "spellcheck",
83
110
  "aria-label",
84
111
  "aria-labelledby",
85
112
  "aria-describedby"
@@ -97,6 +124,10 @@ var SpectreBaseElement = class extends LitElement {
97
124
  return this.id || null;
98
125
  case "title":
99
126
  return this.title || null;
127
+ case "autocapitalize":
128
+ return this.autocapitalize || null;
129
+ case "spellcheck":
130
+ return this._spellcheck !== null ? String(this._spellcheck) : null;
100
131
  case "aria-label":
101
132
  return this.ariaLabel;
102
133
  case "aria-labelledby":
@@ -113,6 +144,10 @@ var SpectreBaseElement = class extends LitElement {
113
144
  return this.id !== "";
114
145
  case "title":
115
146
  return this.title !== "";
147
+ case "autocapitalize":
148
+ return this.autocapitalize !== "";
149
+ case "spellcheck":
150
+ return this._spellcheck !== null;
116
151
  case "aria-label":
117
152
  return this.ariaLabel !== null;
118
153
  case "aria-labelledby":
@@ -131,6 +166,12 @@ var SpectreBaseElement = class extends LitElement {
131
166
  case "title":
132
167
  this.title = value;
133
168
  break;
169
+ case "autocapitalize":
170
+ this.autocapitalize = value;
171
+ break;
172
+ case "spellcheck":
173
+ this.spellcheck = value !== "false";
174
+ break;
134
175
  case "aria-label":
135
176
  this.ariaLabel = value;
136
177
  break;
@@ -152,6 +193,12 @@ var SpectreBaseElement = class extends LitElement {
152
193
  case "title":
153
194
  this.title = "";
154
195
  break;
196
+ case "autocapitalize":
197
+ this.autocapitalize = "";
198
+ break;
199
+ case "spellcheck":
200
+ this.spellcheck = null;
201
+ break;
155
202
  case "aria-label":
156
203
  this.ariaLabel = null;
157
204
  break;
@@ -212,8 +259,32 @@ var SpectreTextareaElement = class extends SpectreBaseElement {
212
259
  this.success = false;
213
260
  this.value = "";
214
261
  }
262
+ get autocapitalize() {
263
+ return super.autocapitalize;
264
+ }
265
+ set autocapitalize(value) {
266
+ super.autocapitalize = value;
267
+ }
268
+ get id() {
269
+ return super.id;
270
+ }
271
+ set id(value) {
272
+ super.id = value;
273
+ }
274
+ get spellcheck() {
275
+ return super.spellcheck;
276
+ }
277
+ set spellcheck(value) {
278
+ super.spellcheck = value;
279
+ }
280
+ get title() {
281
+ return super.title;
282
+ }
283
+ set title(value) {
284
+ super.title = value;
285
+ }
215
286
  willUpdate(changedProperties) {
216
- if (changedProperties.has("size") && !isInputSize(this.size)) {
287
+ if (changedProperties.has("size") && (this.size == null || !isInputSize(this.size))) {
217
288
  this.size = "md";
218
289
  }
219
290
  if (changedProperties.has("rows")) {
@@ -231,14 +302,14 @@ var SpectreTextareaElement = class extends SpectreBaseElement {
231
302
  }
232
303
  get textareaClasses() {
233
304
  return getInputClasses({
234
- fullWidth: this.fullWidth,
235
- pill: this.pill,
305
+ fullWidth: this.fullWidth ?? false,
306
+ pill: this.pill ?? false,
236
307
  size: this.size,
237
308
  state: this.isDisabled ? this.disabled ? "disabled" : "loading" : this.invalid ? "error" : this.success ? "success" : "default"
238
309
  });
239
310
  }
240
311
  get isDisabled() {
241
- return this.disabled || this.loading;
312
+ return (this.disabled ?? false) || (this.loading ?? false);
242
313
  }
243
314
  get nativeTextarea() {
244
315
  return this.querySelector("[data-sp-textarea-native]");
@@ -264,11 +335,13 @@ var SpectreTextareaElement = class extends SpectreBaseElement {
264
335
  aria-invalid="${ifDefined(this.invalid ? "true" : void 0)}"
265
336
  aria-label="${ifDefined(this.forwardedAriaLabel)}"
266
337
  aria-labelledby="${ifDefined(this.forwardedAriaLabelledBy)}"
338
+ autocapitalize="${ifDefined(this.autocapitalize || void 0)}"
267
339
  autocomplete="${ifDefined(this.autocomplete || void 0)}"
268
340
  ?autofocus="${this.autofocus}"
269
341
  class="${this.textareaClasses}"
270
342
  data-sp-textarea-native
271
343
  ?disabled="${this.isDisabled}"
344
+ enterkeyhint="${ifDefined(this.enterkeyhint || void 0)}"
272
345
  form="${ifDefined(this.form || void 0)}"
273
346
  inputmode="${ifDefined(this.inputmode || void 0)}"
274
347
  ?readonly="${this.readonly}"
@@ -279,6 +352,9 @@ var SpectreTextareaElement = class extends SpectreBaseElement {
279
352
  name="${ifDefined(this.name || void 0)}"
280
353
  placeholder="${ifDefined(this.placeholder || void 0)}"
281
354
  rows="${this.rows}"
355
+ spellcheck="${ifDefined(
356
+ this.spellcheck === void 0 ? void 0 : String(this.spellcheck)
357
+ )}"
282
358
  title="${ifDefined(this.title || void 0)}"
283
359
  .value="${live(this.value)}"
284
360
  @change="${this.handleChange}"
@@ -287,9 +363,11 @@ var SpectreTextareaElement = class extends SpectreBaseElement {
287
363
  }
288
364
  };
289
365
  SpectreTextareaElement.properties = {
366
+ autocapitalize: { type: String, reflect: true },
290
367
  autocomplete: { type: String, reflect: true },
291
368
  autofocus: { type: Boolean, reflect: true },
292
369
  disabled: { type: Boolean, reflect: true },
370
+ enterkeyhint: { type: String, reflect: true },
293
371
  form: { type: String },
294
372
  fullWidth: { attribute: "full-width", type: Boolean, reflect: true },
295
373
  inputmode: { type: String, reflect: true },
@@ -302,8 +380,9 @@ SpectreTextareaElement.properties = {
302
380
  placeholder: { type: String, reflect: true },
303
381
  readonly: { type: Boolean, reflect: true },
304
382
  required: { type: Boolean, reflect: true },
305
- rows: { type: Number },
383
+ rows: { type: Number, reflect: true },
306
384
  size: { type: String, reflect: true },
385
+ spellcheck: { type: Boolean, reflect: true },
307
386
  success: { type: Boolean, reflect: true },
308
387
  value: { type: String }
309
388
  };
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/utils/base.ts","../src/utils/form.ts","../src/components/textarea/sp-textarea.ts"],"names":[],"mappings":"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","file":"textarea.js","sourcesContent":["import { LitElement, type PropertyDeclarations } from 'lit';\n\nexport class SpectreBaseElement extends LitElement {\n static properties: PropertyDeclarations = {};\n\n private _ariaLabel: string | null = null;\n private _ariaLabelledBy: string | null = null;\n private _ariaDescribedBy: string | null = null;\n private _title = '';\n private _id = '';\n\n get ariaLabel(): string | null {\n return this._ariaLabel;\n }\n\n set ariaLabel(value: string | null) {\n if (this._ariaLabel === value) {\n return;\n }\n this._ariaLabel = value;\n this._removeHostAttribute('aria-label');\n this.requestUpdate();\n }\n\n get ariaLabelledBy(): string | null {\n return this._ariaLabelledBy;\n }\n\n set ariaLabelledBy(value: string | null) {\n if (this._ariaLabelledBy === value) {\n return;\n }\n this._ariaLabelledBy = value;\n this._removeHostAttribute('aria-labelledby');\n this.requestUpdate();\n }\n\n get ariaDescribedBy(): string | null {\n return this._ariaDescribedBy;\n }\n\n set ariaDescribedBy(value: string | null) {\n if (this._ariaDescribedBy === value) {\n return;\n }\n this._ariaDescribedBy = value;\n this._removeHostAttribute('aria-describedby');\n this.requestUpdate();\n }\n\n override get title(): string {\n return this._title;\n }\n\n override set title(value: string | undefined | null) {\n const normalizedValue = value ?? '';\n if (this._title === normalizedValue) {\n return;\n }\n this._title = normalizedValue;\n this._removeHostAttribute('title');\n this.requestUpdate();\n }\n\n override get id(): string {\n return this._id;\n }\n\n override set id(value: string | undefined | null) {\n const normalizedValue = value ?? '';\n if (this._id === normalizedValue) {\n return;\n }\n this._id = normalizedValue;\n this._removeHostAttribute('id');\n this.requestUpdate();\n }\n\n // Spectre components intentionally render in light DOM so the global\n // `@phcdevworks/spectre-ui` styling contract can apply directly.\n createRenderRoot(): this {\n return this;\n }\n\n override connectedCallback(): void {\n super.connectedCallback();\n\n const proxiedAttributes = [\n 'id',\n 'title',\n 'aria-label',\n 'aria-labelledby',\n 'aria-describedby',\n ];\n\n proxiedAttributes.forEach((attr) => {\n const value = super.getAttribute(attr);\n if (value !== null) {\n this.setAttribute(attr, value);\n }\n });\n }\n\n override getAttribute(qualifiedName: string): string | null {\n switch (qualifiedName) {\n case 'id':\n return this.id || null;\n case 'title':\n return this.title || null;\n case 'aria-label':\n return this.ariaLabel;\n case 'aria-labelledby':\n return this.ariaLabelledBy;\n case 'aria-describedby':\n return this.ariaDescribedBy;\n default:\n return super.getAttribute(qualifiedName);\n }\n }\n\n override hasAttribute(qualifiedName: string): boolean {\n switch (qualifiedName) {\n case 'id':\n return this.id !== '';\n case 'title':\n return this.title !== '';\n case 'aria-label':\n return this.ariaLabel !== null;\n case 'aria-labelledby':\n return this.ariaLabelledBy !== null;\n case 'aria-describedby':\n return this.ariaDescribedBy !== null;\n default:\n return super.hasAttribute(qualifiedName);\n }\n }\n\n override setAttribute(qualifiedName: string, value: string): void {\n switch (qualifiedName) {\n case 'id':\n this.id = value;\n break;\n case 'title':\n this.title = value;\n break;\n case 'aria-label':\n this.ariaLabel = value;\n break;\n case 'aria-labelledby':\n this.ariaLabelledBy = value;\n break;\n case 'aria-describedby':\n this.ariaDescribedBy = value;\n break;\n default:\n super.setAttribute(qualifiedName, value);\n }\n }\n\n override removeAttribute(qualifiedName: string): void {\n switch (qualifiedName) {\n case 'id':\n this.id = '';\n break;\n case 'title':\n this.title = '';\n break;\n case 'aria-label':\n this.ariaLabel = null;\n break;\n case 'aria-labelledby':\n this.ariaLabelledBy = null;\n break;\n case 'aria-describedby':\n this.ariaDescribedBy = null;\n break;\n default:\n super.removeAttribute(qualifiedName);\n }\n }\n\n private _removeHostAttribute(name: string): void {\n const host = this as unknown as HTMLElement;\n if (HTMLElement.prototype.hasAttribute.call(host, name)) {\n HTMLElement.prototype.removeAttribute.call(host, name);\n }\n }\n\n protected get forwardedAriaLabel(): string | undefined {\n const value = this.ariaLabel?.trim();\n return value ? value : undefined;\n }\n\n protected get forwardedAriaLabelledBy(): string | undefined {\n const value = this.ariaLabelledBy?.trim();\n return value ? value : undefined;\n }\n\n protected get forwardedAriaDescribedBy(): string | undefined {\n const value = this.ariaDescribedBy?.trim();\n return value ? value : undefined;\n }\n}\n","import { type InputSize } from '@phcdevworks/spectre-ui';\n\nexport const spectreInputSizes = ['sm', 'md', 'lg'] as const;\nexport type SpectreInputSize = (typeof spectreInputSizes)[number];\n\nexport function isInputSize(value: unknown): value is InputSize {\n return (spectreInputSizes as readonly string[]).includes(value as string);\n}\n\nexport const spectreInputTypes = [\n 'text',\n 'email',\n 'password',\n 'search',\n 'tel',\n 'url',\n 'number',\n 'date',\n 'datetime-local',\n 'month',\n 'time',\n 'week',\n] as const;\n\nexport type SpectreInputType = (typeof spectreInputTypes)[number];\n\nexport function isInputType(value: unknown): value is SpectreInputType {\n return (spectreInputTypes as readonly string[]).includes(value as string);\n}\n\nexport function normalizeInt(\n value: unknown,\n fallback: number | undefined,\n min = 0,\n): number | undefined {\n if (\n value == null ||\n typeof value !== 'number' ||\n !Number.isInteger(value) ||\n value < min\n ) {\n return fallback;\n }\n return value;\n}\n","import { html } from 'lit';\nimport { live } from 'lit/directives/live.js';\nimport { ifDefined } from 'lit/directives/if-defined.js';\n\nimport { SpectreBaseElement } from '../../utils/base';\nimport {\n isInputSize,\n type SpectreInputSize,\n normalizeInt,\n} from '../../utils/form';\n\nimport { getInputClasses } from '@phcdevworks/spectre-ui';\n\nexport interface SpectreTextareaProps {\n ariaLabel: string | null;\n ariaLabelledBy: string | null;\n ariaDescribedBy: string | null;\n autocomplete?: string | undefined;\n autofocus?: boolean | undefined;\n disabled?: boolean | undefined;\n form?: string | undefined;\n fullWidth?: boolean | undefined;\n inputmode?: string | undefined;\n invalid?: boolean | undefined;\n loading?: boolean | undefined;\n maxlength?: number | undefined;\n minlength?: number | undefined;\n name?: string | undefined;\n pill?: boolean | undefined;\n placeholder?: string | undefined;\n readonly?: boolean | undefined;\n required?: boolean | undefined;\n rows?: number | undefined;\n size?: SpectreInputSize | undefined;\n success?: boolean | undefined;\n title?: string | undefined;\n value?: string | undefined;\n}\n\nconst DEFAULT_ROWS = 2;\n\nexport class SpectreTextareaElement\n extends SpectreBaseElement\n implements SpectreTextareaProps {\n static properties = {\n autocomplete: { type: String, reflect: true },\n autofocus: { type: Boolean, reflect: true },\n disabled: { type: Boolean, reflect: true },\n form: { type: String },\n fullWidth: { attribute: 'full-width', type: Boolean, reflect: true },\n inputmode: { type: String, reflect: true },\n invalid: { type: Boolean, reflect: true },\n loading: { type: Boolean, reflect: true },\n maxlength: { type: Number, reflect: true },\n minlength: { type: Number, reflect: true },\n name: { type: String, reflect: true },\n pill: { type: Boolean, reflect: true },\n placeholder: { type: String, reflect: true },\n readonly: { type: Boolean, reflect: true },\n required: { type: Boolean, reflect: true },\n rows: { type: Number },\n size: { type: String, reflect: true },\n success: { type: Boolean, reflect: true },\n value: { type: String },\n };\n\n autocomplete: string | undefined;\n autofocus = false;\n disabled = false;\n form: string | undefined;\n fullWidth = false;\n inputmode: string | undefined;\n invalid = false;\n loading = false;\n maxlength: number | undefined;\n minlength: number | undefined;\n name: string | undefined;\n pill = false;\n placeholder: string | undefined;\n readonly = false;\n required = false;\n rows = DEFAULT_ROWS;\n size: SpectreInputSize = 'md';\n success = false;\n value = '';\n\n protected override willUpdate(\n changedProperties: Map<PropertyKey, unknown>,\n ): void {\n if (changedProperties.has('size') && !isInputSize(this.size)) {\n this.size = 'md';\n }\n\n if (changedProperties.has('rows')) {\n this.rows = normalizeInt(this.rows, DEFAULT_ROWS, 1) as number;\n }\n\n if (changedProperties.has('value') && this.value == null) {\n this.value = '';\n }\n\n if (changedProperties.has('maxlength')) {\n this.maxlength = normalizeInt(this.maxlength, undefined);\n }\n\n if (changedProperties.has('minlength')) {\n this.minlength = normalizeInt(this.minlength, undefined);\n }\n }\n\n private get textareaClasses(): string {\n return getInputClasses({\n fullWidth: this.fullWidth,\n pill: this.pill,\n size: this.size,\n state: this.isDisabled\n ? this.disabled\n ? 'disabled'\n : 'loading'\n : this.invalid\n ? 'error'\n : this.success\n ? 'success'\n : 'default',\n });\n }\n\n private get isDisabled(): boolean {\n return this.disabled || this.loading;\n }\n\n private get nativeTextarea(): HTMLTextAreaElement | null {\n return this.querySelector('[data-sp-textarea-native]');\n }\n\n private handleInput(event: Event): void {\n const textarea = event.currentTarget as HTMLTextAreaElement;\n this.value = textarea.value;\n }\n\n private handleChange(event: Event): void {\n const textarea = event.currentTarget as HTMLTextAreaElement;\n this.value = textarea.value;\n }\n\n override focus(options?: FocusOptions): void {\n this.nativeTextarea?.focus(options);\n }\n\n override blur(): void {\n this.nativeTextarea?.blur();\n }\n\n override render() {\n return html`<textarea\n aria-busy=\"${this.loading ? 'true' : 'false'}\"\n aria-describedby=\"${ifDefined(this.forwardedAriaDescribedBy)}\"\n aria-invalid=\"${ifDefined(this.invalid ? 'true' : undefined)}\"\n aria-label=\"${ifDefined(this.forwardedAriaLabel)}\"\n aria-labelledby=\"${ifDefined(this.forwardedAriaLabelledBy)}\"\n autocomplete=\"${ifDefined(this.autocomplete || undefined)}\"\n ?autofocus=\"${this.autofocus}\"\n class=\"${this.textareaClasses}\"\n data-sp-textarea-native\n ?disabled=\"${this.isDisabled}\"\n form=\"${ifDefined(this.form || undefined)}\"\n inputmode=\"${ifDefined(this.inputmode || undefined)}\"\n ?readonly=\"${this.readonly}\"\n ?required=\"${this.required}\"\n id=\"${ifDefined(this.id || undefined)}\"\n maxlength=\"${ifDefined(this.maxlength)}\"\n minlength=\"${ifDefined(this.minlength)}\"\n name=\"${ifDefined(this.name || undefined)}\"\n placeholder=\"${ifDefined(this.placeholder || undefined)}\"\n rows=\"${this.rows}\"\n title=\"${ifDefined(this.title || undefined)}\"\n .value=\"${live(this.value)}\"\n @change=\"${this.handleChange}\"\n @input=\"${this.handleInput}\"\n ></textarea>`;\n }\n}\n\nexport function defineSpectreTextarea(\n tagName = 'sp-textarea',\n): typeof SpectreTextareaElement {\n const existingElement = customElements.get(tagName);\n\n if (existingElement) {\n return existingElement as unknown as typeof SpectreTextareaElement;\n }\n\n customElements.define(tagName, SpectreTextareaElement);\n return SpectreTextareaElement;\n}\n"]}
1
+ {"version":3,"sources":["../src/utils/base.ts","../src/utils/form.ts","../src/components/textarea/sp-textarea.ts"],"names":[],"mappings":"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","file":"textarea.js","sourcesContent":["import { LitElement, type PropertyDeclarations } from 'lit';\n\nexport class SpectreBaseElement extends LitElement {\n static properties: PropertyDeclarations = {};\n\n private _ariaLabel: string | null = null;\n private _ariaLabelledBy: string | null = null;\n private _ariaDescribedBy: string | null = null;\n private _autocapitalize = '';\n private _spellcheck: boolean | null = null;\n private _title = '';\n private _id = '';\n\n get ariaLabel(): string | null {\n return this._ariaLabel;\n }\n\n set ariaLabel(value: string | null) {\n if (this._ariaLabel === value) {\n return;\n }\n this._ariaLabel = value;\n this._removeHostAttribute('aria-label');\n this.requestUpdate();\n }\n\n get ariaLabelledBy(): string | null {\n return this._ariaLabelledBy;\n }\n\n set ariaLabelledBy(value: string | null) {\n if (this._ariaLabelledBy === value) {\n return;\n }\n this._ariaLabelledBy = value;\n this._removeHostAttribute('aria-labelledby');\n this.requestUpdate();\n }\n\n get ariaDescribedBy(): string | null {\n return this._ariaDescribedBy;\n }\n\n set ariaDescribedBy(value: string | null) {\n if (this._ariaDescribedBy === value) {\n return;\n }\n this._ariaDescribedBy = value;\n this._removeHostAttribute('aria-describedby');\n this.requestUpdate();\n }\n\n override get autocapitalize(): string {\n return this._autocapitalize;\n }\n\n override set autocapitalize(value: string | undefined | null) {\n const normalizedValue = value ?? '';\n if (this._autocapitalize === normalizedValue) {\n return;\n }\n this._autocapitalize = normalizedValue;\n this._removeHostAttribute('autocapitalize');\n this.requestUpdate();\n }\n\n override get spellcheck(): boolean {\n return this._spellcheck ?? super.spellcheck;\n }\n\n override set spellcheck(value: boolean | undefined | null) {\n if (this._spellcheck === value) {\n return;\n }\n this._spellcheck = value ?? null;\n this._removeHostAttribute('spellcheck');\n this.requestUpdate();\n }\n\n override get title(): string {\n return this._title;\n }\n\n override set title(value: string | undefined | null) {\n const normalizedValue = value ?? '';\n if (this._title === normalizedValue) {\n return;\n }\n this._title = normalizedValue;\n this._removeHostAttribute('title');\n this.requestUpdate();\n }\n\n override get id(): string {\n return this._id;\n }\n\n override set id(value: string | undefined | null) {\n const normalizedValue = value ?? '';\n if (this._id === normalizedValue) {\n return;\n }\n this._id = normalizedValue;\n this._removeHostAttribute('id');\n this.requestUpdate();\n }\n\n // Spectre components intentionally render in light DOM so the global\n // `@phcdevworks/spectre-ui` styling contract can apply directly.\n createRenderRoot(): this {\n return this;\n }\n\n override connectedCallback(): void {\n super.connectedCallback();\n\n const proxiedAttributes = [\n 'id',\n 'title',\n 'autocapitalize',\n 'spellcheck',\n 'aria-label',\n 'aria-labelledby',\n 'aria-describedby',\n ];\n\n proxiedAttributes.forEach((attr) => {\n const value = super.getAttribute(attr);\n if (value !== null) {\n this.setAttribute(attr, value);\n }\n });\n }\n\n override getAttribute(qualifiedName: string): string | null {\n switch (qualifiedName) {\n case 'id':\n return this.id || null;\n case 'title':\n return this.title || null;\n case 'autocapitalize':\n return this.autocapitalize || null;\n case 'spellcheck':\n return this._spellcheck !== null ? String(this._spellcheck) : null;\n case 'aria-label':\n return this.ariaLabel;\n case 'aria-labelledby':\n return this.ariaLabelledBy;\n case 'aria-describedby':\n return this.ariaDescribedBy;\n default:\n return super.getAttribute(qualifiedName);\n }\n }\n\n override hasAttribute(qualifiedName: string): boolean {\n switch (qualifiedName) {\n case 'id':\n return this.id !== '';\n case 'title':\n return this.title !== '';\n case 'autocapitalize':\n return this.autocapitalize !== '';\n case 'spellcheck':\n return this._spellcheck !== null;\n case 'aria-label':\n return this.ariaLabel !== null;\n case 'aria-labelledby':\n return this.ariaLabelledBy !== null;\n case 'aria-describedby':\n return this.ariaDescribedBy !== null;\n default:\n return super.hasAttribute(qualifiedName);\n }\n }\n\n override setAttribute(qualifiedName: string, value: string): void {\n switch (qualifiedName) {\n case 'id':\n this.id = value;\n break;\n case 'title':\n this.title = value;\n break;\n case 'autocapitalize':\n this.autocapitalize = value;\n break;\n case 'spellcheck':\n this.spellcheck = value !== 'false';\n break;\n case 'aria-label':\n this.ariaLabel = value;\n break;\n case 'aria-labelledby':\n this.ariaLabelledBy = value;\n break;\n case 'aria-describedby':\n this.ariaDescribedBy = value;\n break;\n default:\n super.setAttribute(qualifiedName, value);\n }\n }\n\n override removeAttribute(qualifiedName: string): void {\n switch (qualifiedName) {\n case 'id':\n this.id = '';\n break;\n case 'title':\n this.title = '';\n break;\n case 'autocapitalize':\n this.autocapitalize = '';\n break;\n case 'spellcheck':\n this.spellcheck = null;\n break;\n case 'aria-label':\n this.ariaLabel = null;\n break;\n case 'aria-labelledby':\n this.ariaLabelledBy = null;\n break;\n case 'aria-describedby':\n this.ariaDescribedBy = null;\n break;\n default:\n super.removeAttribute(qualifiedName);\n }\n }\n\n private _removeHostAttribute(name: string): void {\n const host = this as unknown as HTMLElement;\n if (HTMLElement.prototype.hasAttribute.call(host, name)) {\n // Use the native removeAttribute to avoid our own overridden version\n // which would reset the internal state.\n HTMLElement.prototype.removeAttribute.call(host, name);\n }\n }\n\n protected get forwardedAriaLabel(): string | undefined {\n const value = this.ariaLabel?.trim();\n return value ? value : undefined;\n }\n\n protected get forwardedAriaLabelledBy(): string | undefined {\n const value = this.ariaLabelledBy?.trim();\n return value ? value : undefined;\n }\n\n protected get forwardedAriaDescribedBy(): string | undefined {\n const value = this.ariaDescribedBy?.trim();\n return value ? value : undefined;\n }\n}\n","import {\n type ButtonSize,\n type ButtonVariant,\n type InputSize,\n} from '@phcdevworks/spectre-ui';\n\nexport const spectreInputSizes = ['sm', 'md', 'lg'] as const;\nexport type SpectreInputSize = (typeof spectreInputSizes)[number];\n\nexport function isInputSize(value: unknown): value is InputSize | ButtonSize {\n return (spectreInputSizes as readonly string[]).includes(value as string);\n}\n\nexport const spectreButtonVariants = [\n 'primary',\n 'secondary',\n 'ghost',\n 'danger',\n 'success',\n 'cta',\n 'accent',\n] as const;\n\nexport type SpectreButtonVariant = (typeof spectreButtonVariants)[number];\n\nexport function isButtonVariant(value: unknown): value is ButtonVariant {\n return (spectreButtonVariants as readonly string[]).includes(value as string);\n}\n\nexport const spectreButtonTypes = ['button', 'submit', 'reset'] as const;\n\nexport type SpectreButtonType = (typeof spectreButtonTypes)[number];\n\nexport function isButtonType(value: unknown): value is SpectreButtonType {\n return (spectreButtonTypes as readonly string[]).includes(value as string);\n}\n\nexport const spectreInputTypes = [\n 'text',\n 'email',\n 'password',\n 'search',\n 'tel',\n 'url',\n 'number',\n 'date',\n 'datetime-local',\n 'month',\n 'time',\n 'week',\n] as const;\n\nexport type SpectreInputType = (typeof spectreInputTypes)[number];\n\nexport function isInputType(value: unknown): value is SpectreInputType {\n return (spectreInputTypes as readonly string[]).includes(value as string);\n}\n\nexport function normalizeInt(\n value: unknown,\n fallback: number | undefined,\n min = 0,\n): number | undefined {\n if (\n value == null ||\n typeof value !== 'number' ||\n !Number.isInteger(value) ||\n value < min\n ) {\n return fallback;\n }\n return value;\n}\n","import { html } from 'lit';\nimport { live } from 'lit/directives/live.js';\nimport { ifDefined } from 'lit/directives/if-defined.js';\n\nimport { SpectreBaseElement } from '../../utils/base';\nimport {\n isInputSize,\n type SpectreInputSize,\n normalizeInt,\n} from '../../utils/form';\n\nimport { getInputClasses } from '@phcdevworks/spectre-ui';\n\nexport interface SpectreTextareaProps {\n ariaLabel?: string | null;\n ariaLabelledBy?: string | null;\n ariaDescribedBy?: string | null;\n autocapitalize?: string | undefined;\n autocomplete?: string | undefined;\n autofocus?: boolean | undefined;\n disabled?: boolean | undefined;\n enterkeyhint?: string | undefined;\n form?: string | undefined;\n fullWidth?: boolean | undefined;\n id?: string | null | undefined;\n inputmode?: string | undefined;\n invalid?: boolean | undefined;\n loading?: boolean | undefined;\n maxlength?: number | undefined;\n minlength?: number | undefined;\n name?: string | undefined;\n pill?: boolean | undefined;\n placeholder?: string | undefined;\n readonly?: boolean | undefined;\n required?: boolean | undefined;\n rows?: number | undefined;\n size?: SpectreInputSize | undefined;\n spellcheck?: boolean | undefined;\n success?: boolean | undefined;\n title?: string | null | undefined;\n value?: string | undefined;\n}\n\nconst DEFAULT_ROWS = 2;\n\nexport class SpectreTextareaElement\n extends SpectreBaseElement\n implements SpectreTextareaProps {\n static properties = {\n autocapitalize: { type: String, reflect: true },\n autocomplete: { type: String, reflect: true },\n autofocus: { type: Boolean, reflect: true },\n disabled: { type: Boolean, reflect: true },\n enterkeyhint: { type: String, reflect: true },\n form: { type: String },\n fullWidth: { attribute: 'full-width', type: Boolean, reflect: true },\n inputmode: { type: String, reflect: true },\n invalid: { type: Boolean, reflect: true },\n loading: { type: Boolean, reflect: true },\n maxlength: { type: Number, reflect: true },\n minlength: { type: Number, reflect: true },\n name: { type: String, reflect: true },\n pill: { type: Boolean, reflect: true },\n placeholder: { type: String, reflect: true },\n readonly: { type: Boolean, reflect: true },\n required: { type: Boolean, reflect: true },\n rows: { type: Number, reflect: true },\n size: { type: String, reflect: true },\n spellcheck: { type: Boolean, reflect: true },\n success: { type: Boolean, reflect: true },\n value: { type: String },\n };\n\n override get autocapitalize(): string {\n return super.autocapitalize;\n }\n\n override set autocapitalize(value: string | null | undefined) {\n super.autocapitalize = value;\n }\n\n autocomplete: string | undefined;\n autofocus = false;\n disabled = false;\n enterkeyhint: string | undefined;\n form: string | undefined;\n fullWidth = false;\n\n override get id(): string {\n return super.id;\n }\n\n override set id(value: string | null | undefined) {\n super.id = value;\n }\n\n inputmode: string | undefined;\n invalid = false;\n loading = false;\n maxlength: number | undefined;\n minlength: number | undefined;\n name: string | undefined;\n pill = false;\n placeholder: string | undefined;\n readonly = false;\n required = false;\n rows: number | undefined = DEFAULT_ROWS;\n size: SpectreInputSize | undefined = 'md';\n\n override get spellcheck(): boolean {\n return super.spellcheck;\n }\n\n override set spellcheck(value: boolean | null | undefined) {\n super.spellcheck = value;\n }\n\n success = false;\n\n override get title(): string {\n return super.title;\n }\n\n override set title(value: string | null | undefined) {\n super.title = value;\n }\n\n value: string | undefined = '';\n\n protected override willUpdate(\n changedProperties: Map<PropertyKey, unknown>,\n ): void {\n if (changedProperties.has('size') && (this.size == null || !isInputSize(this.size))) {\n this.size = 'md';\n }\n\n if (changedProperties.has('rows')) {\n this.rows = normalizeInt(this.rows, DEFAULT_ROWS, 1) as number;\n }\n\n if (changedProperties.has('value') && this.value == null) {\n this.value = '';\n }\n\n if (changedProperties.has('maxlength')) {\n this.maxlength = normalizeInt(this.maxlength, undefined);\n }\n\n if (changedProperties.has('minlength')) {\n this.minlength = normalizeInt(this.minlength, undefined);\n }\n }\n\n private get textareaClasses(): string {\n return getInputClasses({\n fullWidth: this.fullWidth ?? false,\n pill: this.pill ?? false,\n size: this.size as SpectreInputSize,\n state: this.isDisabled\n ? this.disabled\n ? 'disabled'\n : 'loading'\n : this.invalid\n ? 'error'\n : this.success\n ? 'success'\n : 'default',\n });\n }\n\n private get isDisabled(): boolean {\n return (this.disabled ?? false) || (this.loading ?? false);\n }\n\n private get nativeTextarea(): HTMLTextAreaElement | null {\n return this.querySelector('[data-sp-textarea-native]');\n }\n\n private handleInput(event: Event): void {\n const textarea = event.currentTarget as HTMLTextAreaElement;\n this.value = textarea.value;\n }\n\n private handleChange(event: Event): void {\n const textarea = event.currentTarget as HTMLTextAreaElement;\n this.value = textarea.value;\n }\n\n override focus(options?: FocusOptions): void {\n this.nativeTextarea?.focus(options);\n }\n\n override blur(): void {\n this.nativeTextarea?.blur();\n }\n\n override render() {\n return html`<textarea\n aria-busy=\"${this.loading ? 'true' : 'false'}\"\n aria-describedby=\"${ifDefined(this.forwardedAriaDescribedBy)}\"\n aria-invalid=\"${ifDefined(this.invalid ? 'true' : undefined)}\"\n aria-label=\"${ifDefined(this.forwardedAriaLabel)}\"\n aria-labelledby=\"${ifDefined(this.forwardedAriaLabelledBy)}\"\n autocapitalize=\"${ifDefined(this.autocapitalize || undefined)}\"\n autocomplete=\"${ifDefined(this.autocomplete || undefined)}\"\n ?autofocus=\"${this.autofocus}\"\n class=\"${this.textareaClasses}\"\n data-sp-textarea-native\n ?disabled=\"${this.isDisabled}\"\n enterkeyhint=\"${ifDefined(this.enterkeyhint || undefined)}\"\n form=\"${ifDefined(this.form || undefined)}\"\n inputmode=\"${ifDefined(this.inputmode || undefined)}\"\n ?readonly=\"${this.readonly}\"\n ?required=\"${this.required}\"\n id=\"${ifDefined(this.id || undefined)}\"\n maxlength=\"${ifDefined(this.maxlength)}\"\n minlength=\"${ifDefined(this.minlength)}\"\n name=\"${ifDefined(this.name || undefined)}\"\n placeholder=\"${ifDefined(this.placeholder || undefined)}\"\n rows=\"${this.rows}\"\n spellcheck=\"${ifDefined(\n this.spellcheck === undefined ? undefined : String(this.spellcheck),\n )}\"\n title=\"${ifDefined(this.title || undefined)}\"\n .value=\"${live(this.value)}\"\n @change=\"${this.handleChange}\"\n @input=\"${this.handleInput}\"\n ></textarea>`;\n }\n}\n\nexport function defineSpectreTextarea(\n tagName = 'sp-textarea',\n): typeof SpectreTextareaElement {\n const existingElement = customElements.get(tagName);\n\n if (existingElement) {\n return existingElement as unknown as typeof SpectreTextareaElement;\n }\n\n customElements.define(tagName, SpectreTextareaElement);\n return SpectreTextareaElement;\n}\n"]}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@phcdevworks/spectre-components",
3
- "version": "1.1.0",
3
+ "version": "1.2.0",
4
4
  "description": "@phcdevworks/spectre-components is the Lit-based component layer of the Spectre system for reusable, accessible, framework-agnostic web components.",
5
5
  "keywords": [
6
6
  "phcdevworks",
@@ -29,7 +29,11 @@
29
29
  "url": "https://github.com/phcdevworks/spectre-components/issues"
30
30
  },
31
31
  "homepage": "https://github.com/phcdevworks/spectre-components#readme",
32
+ "engines": {
33
+ "node": "^22.12.0 || >=24.0.0"
34
+ },
32
35
  "type": "module",
36
+ "packageManager": "npm@11.15.0",
33
37
  "main": "./dist/index.cjs",
34
38
  "module": "./dist/index.js",
35
39
  "types": "./dist/index.d.ts",
@@ -90,11 +94,14 @@
90
94
  "build": "tsup --config tsup.config.ts",
91
95
  "clean": "rm -rf dist coverage",
92
96
  "dev": "tsup --config tsup.config.ts --watch",
97
+ "typecheck": "tsc --noEmit",
98
+ "release:propose": "node --experimental-strip-types scripts/propose-version.ts",
93
99
  "lint": "eslint .",
94
100
  "format": "prettier --write .",
95
101
  "test": "vitest run",
96
102
  "test:watch": "vitest",
97
- "check": "npm run lint && npm run test && npm run build"
103
+ "check": "npm run lint && npm run typecheck && npm run test && npm run build && npm run check:exports",
104
+ "check:exports": "node --experimental-strip-types scripts/check-exports.ts"
98
105
  },
99
106
  "publishConfig": {
100
107
  "access": "public"
@@ -103,23 +110,25 @@
103
110
  "typescript": "^5.9 || ^6.0"
104
111
  },
105
112
  "dependencies": {
106
- "@phcdevworks/spectre-tokens": "^2.5.0",
107
- "@phcdevworks/spectre-ui": "^1.5.0",
108
- "lit": "^3.3.2"
113
+ "@phcdevworks/spectre-tokens": "^2.6.0",
114
+ "@phcdevworks/spectre-ui": "^1.6.0",
115
+ "lit": "^3.3.3"
109
116
  },
110
117
  "devDependencies": {
111
118
  "@eslint/js": "^10.0.1",
112
- "@types/node": "^25.6.0",
113
- "@typescript-eslint/eslint-plugin": "^8.59.2",
114
- "@typescript-eslint/parser": "^8.59.2",
115
- "eslint": "^10.3.0",
119
+ "@types/node": "^25.9.1",
120
+ "@typescript-eslint/eslint-plugin": "^8.59.4",
121
+ "@typescript-eslint/parser": "^8.59.4",
122
+ "eslint": "^10.4.0",
116
123
  "globals": "^17.6.0",
117
124
  "happy-dom": "^20.9.0",
118
- "jiti": "^2.6.1",
125
+ "jiti": "^2.7.0",
119
126
  "prettier": "^3.8.3",
127
+ "tailwindcss": "^4.3.0",
120
128
  "tsup": "^8.5.1",
121
129
  "typescript": "^6.0.3",
122
- "typescript-eslint": "^8.59.2",
123
- "vitest": "^4.1.5"
130
+ "typescript-eslint": "^8.59.4",
131
+ "vite": "^8.0.14",
132
+ "vitest": "^4.1.7"
124
133
  }
125
134
  }
@@ -1,6 +0,0 @@
1
- declare const spectreInputSizes: readonly ["sm", "md", "lg"];
2
- type SpectreInputSize = (typeof spectreInputSizes)[number];
3
- declare const spectreInputTypes: readonly ["text", "email", "password", "search", "tel", "url", "number", "date", "datetime-local", "month", "time", "week"];
4
- type SpectreInputType = (typeof spectreInputTypes)[number];
5
-
6
- export { type SpectreInputSize as S, type SpectreInputType as a, spectreInputTypes as b, spectreInputSizes as s };
@@ -1,6 +0,0 @@
1
- declare const spectreInputSizes: readonly ["sm", "md", "lg"];
2
- type SpectreInputSize = (typeof spectreInputSizes)[number];
3
- declare const spectreInputTypes: readonly ["text", "email", "password", "search", "tel", "url", "number", "date", "datetime-local", "month", "time", "week"];
4
- type SpectreInputType = (typeof spectreInputTypes)[number];
5
-
6
- export { type SpectreInputSize as S, type SpectreInputType as a, spectreInputTypes as b, spectreInputSizes as s };