@phcdevworks/spectre-components 1.0.0 → 1.1.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.
- package/README.md +113 -40
- package/dist/{base-DQtCQ-dP.d.cts → base-2rD8EmdC.d.cts} +15 -5
- package/dist/{base-DQtCQ-dP.d.ts → base-2rD8EmdC.d.ts} +15 -5
- package/dist/button.cjs +158 -58
- package/dist/button.cjs.map +1 -1
- package/dist/button.d.cts +22 -28
- package/dist/button.d.ts +22 -28
- package/dist/button.js +158 -58
- package/dist/button.js.map +1 -1
- package/dist/checkbox.cjs +164 -64
- package/dist/checkbox.cjs.map +1 -1
- package/dist/checkbox.d.cts +18 -23
- package/dist/checkbox.d.ts +18 -23
- package/dist/checkbox.js +164 -64
- package/dist/checkbox.js.map +1 -1
- package/dist/fieldset.cjs +154 -55
- package/dist/fieldset.cjs.map +1 -1
- package/dist/fieldset.d.cts +13 -18
- package/dist/fieldset.d.ts +13 -18
- package/dist/fieldset.js +154 -55
- package/dist/fieldset.js.map +1 -1
- package/dist/index.cjs +324 -261
- package/dist/index.cjs.map +1 -1
- package/dist/index.d.cts +2 -2
- package/dist/index.d.ts +2 -2
- package/dist/index.js +324 -261
- package/dist/index.js.map +1 -1
- package/dist/input.cjs +174 -72
- package/dist/input.cjs.map +1 -1
- package/dist/input.d.cts +33 -38
- package/dist/input.d.ts +33 -38
- package/dist/input.js +174 -72
- package/dist/input.js.map +1 -1
- package/dist/label.cjs +152 -56
- package/dist/label.cjs.map +1 -1
- package/dist/label.d.cts +8 -13
- package/dist/label.d.ts +8 -13
- package/dist/label.js +152 -56
- package/dist/label.js.map +1 -1
- package/dist/{projectable-DcnBRiko.d.cts → projectable-BzDQ4xp_.d.cts} +1 -1
- package/dist/{projectable-SzbPvXfM.d.ts → projectable-s3SgvjGX.d.ts} +1 -1
- package/dist/radio.cjs +164 -64
- package/dist/radio.cjs.map +1 -1
- package/dist/radio.d.cts +18 -23
- package/dist/radio.d.ts +18 -23
- package/dist/radio.js +164 -64
- package/dist/radio.js.map +1 -1
- package/dist/select.cjs +161 -61
- package/dist/select.cjs.map +1 -1
- package/dist/select.d.cts +22 -27
- package/dist/select.d.ts +22 -27
- package/dist/select.js +161 -61
- package/dist/select.js.map +1 -1
- package/dist/textarea.cjs +172 -72
- package/dist/textarea.cjs.map +1 -1
- package/dist/textarea.d.cts +27 -32
- package/dist/textarea.d.ts +27 -32
- package/dist/textarea.js +172 -72
- package/dist/textarea.js.map +1 -1
- package/package.json +9 -8
package/dist/label.js
CHANGED
|
@@ -5,22 +5,67 @@ import { ifDefined } from 'lit/directives/if-defined.js';
|
|
|
5
5
|
var SpectreBaseElement = class extends LitElement {
|
|
6
6
|
constructor() {
|
|
7
7
|
super(...arguments);
|
|
8
|
-
this.
|
|
9
|
-
this.
|
|
10
|
-
this.
|
|
8
|
+
this._ariaLabel = null;
|
|
9
|
+
this._ariaLabelledBy = null;
|
|
10
|
+
this._ariaDescribedBy = null;
|
|
11
|
+
this._title = "";
|
|
12
|
+
this._id = "";
|
|
13
|
+
}
|
|
14
|
+
get ariaLabel() {
|
|
15
|
+
return this._ariaLabel;
|
|
16
|
+
}
|
|
17
|
+
set ariaLabel(value) {
|
|
18
|
+
if (this._ariaLabel === value) {
|
|
19
|
+
return;
|
|
20
|
+
}
|
|
21
|
+
this._ariaLabel = value;
|
|
22
|
+
this._removeHostAttribute("aria-label");
|
|
23
|
+
this.requestUpdate();
|
|
24
|
+
}
|
|
25
|
+
get ariaLabelledBy() {
|
|
26
|
+
return this._ariaLabelledBy;
|
|
27
|
+
}
|
|
28
|
+
set ariaLabelledBy(value) {
|
|
29
|
+
if (this._ariaLabelledBy === value) {
|
|
30
|
+
return;
|
|
31
|
+
}
|
|
32
|
+
this._ariaLabelledBy = value;
|
|
33
|
+
this._removeHostAttribute("aria-labelledby");
|
|
34
|
+
this.requestUpdate();
|
|
35
|
+
}
|
|
36
|
+
get ariaDescribedBy() {
|
|
37
|
+
return this._ariaDescribedBy;
|
|
38
|
+
}
|
|
39
|
+
set ariaDescribedBy(value) {
|
|
40
|
+
if (this._ariaDescribedBy === value) {
|
|
41
|
+
return;
|
|
42
|
+
}
|
|
43
|
+
this._ariaDescribedBy = value;
|
|
44
|
+
this._removeHostAttribute("aria-describedby");
|
|
45
|
+
this.requestUpdate();
|
|
46
|
+
}
|
|
47
|
+
get title() {
|
|
48
|
+
return this._title;
|
|
49
|
+
}
|
|
50
|
+
set title(value) {
|
|
51
|
+
const normalizedValue = value ?? "";
|
|
52
|
+
if (this._title === normalizedValue) {
|
|
53
|
+
return;
|
|
54
|
+
}
|
|
55
|
+
this._title = normalizedValue;
|
|
56
|
+
this._removeHostAttribute("title");
|
|
57
|
+
this.requestUpdate();
|
|
11
58
|
}
|
|
12
59
|
get id() {
|
|
13
|
-
return this._id
|
|
60
|
+
return this._id;
|
|
14
61
|
}
|
|
15
62
|
set id(value) {
|
|
16
|
-
|
|
63
|
+
const normalizedValue = value ?? "";
|
|
64
|
+
if (this._id === normalizedValue) {
|
|
17
65
|
return;
|
|
18
66
|
}
|
|
19
|
-
this._id =
|
|
20
|
-
|
|
21
|
-
if (HTMLElement.prototype.hasAttribute.call(host, "id")) {
|
|
22
|
-
HTMLElement.prototype.removeAttribute.call(host, "id");
|
|
23
|
-
}
|
|
67
|
+
this._id = normalizedValue;
|
|
68
|
+
this._removeHostAttribute("id");
|
|
24
69
|
this.requestUpdate();
|
|
25
70
|
}
|
|
26
71
|
// Spectre components intentionally render in light DOM so the global
|
|
@@ -30,36 +75,99 @@ var SpectreBaseElement = class extends LitElement {
|
|
|
30
75
|
}
|
|
31
76
|
connectedCallback() {
|
|
32
77
|
super.connectedCallback();
|
|
33
|
-
const
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
78
|
+
const proxiedAttributes = [
|
|
79
|
+
"id",
|
|
80
|
+
"title",
|
|
81
|
+
"aria-label",
|
|
82
|
+
"aria-labelledby",
|
|
83
|
+
"aria-describedby"
|
|
84
|
+
];
|
|
85
|
+
proxiedAttributes.forEach((attr) => {
|
|
86
|
+
const value = super.getAttribute(attr);
|
|
87
|
+
if (value !== null) {
|
|
88
|
+
this.setAttribute(attr, value);
|
|
89
|
+
}
|
|
90
|
+
});
|
|
37
91
|
}
|
|
38
92
|
getAttribute(qualifiedName) {
|
|
39
|
-
|
|
40
|
-
|
|
93
|
+
switch (qualifiedName) {
|
|
94
|
+
case "id":
|
|
95
|
+
return this.id || null;
|
|
96
|
+
case "title":
|
|
97
|
+
return this.title || null;
|
|
98
|
+
case "aria-label":
|
|
99
|
+
return this.ariaLabel;
|
|
100
|
+
case "aria-labelledby":
|
|
101
|
+
return this.ariaLabelledBy;
|
|
102
|
+
case "aria-describedby":
|
|
103
|
+
return this.ariaDescribedBy;
|
|
104
|
+
default:
|
|
105
|
+
return super.getAttribute(qualifiedName);
|
|
41
106
|
}
|
|
42
|
-
return super.getAttribute(qualifiedName);
|
|
43
107
|
}
|
|
44
108
|
hasAttribute(qualifiedName) {
|
|
45
|
-
|
|
46
|
-
|
|
109
|
+
switch (qualifiedName) {
|
|
110
|
+
case "id":
|
|
111
|
+
return this.id !== "";
|
|
112
|
+
case "title":
|
|
113
|
+
return this.title !== "";
|
|
114
|
+
case "aria-label":
|
|
115
|
+
return this.ariaLabel !== null;
|
|
116
|
+
case "aria-labelledby":
|
|
117
|
+
return this.ariaLabelledBy !== null;
|
|
118
|
+
case "aria-describedby":
|
|
119
|
+
return this.ariaDescribedBy !== null;
|
|
120
|
+
default:
|
|
121
|
+
return super.hasAttribute(qualifiedName);
|
|
47
122
|
}
|
|
48
|
-
return super.hasAttribute(qualifiedName);
|
|
49
123
|
}
|
|
50
124
|
setAttribute(qualifiedName, value) {
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
125
|
+
switch (qualifiedName) {
|
|
126
|
+
case "id":
|
|
127
|
+
this.id = value;
|
|
128
|
+
break;
|
|
129
|
+
case "title":
|
|
130
|
+
this.title = value;
|
|
131
|
+
break;
|
|
132
|
+
case "aria-label":
|
|
133
|
+
this.ariaLabel = value;
|
|
134
|
+
break;
|
|
135
|
+
case "aria-labelledby":
|
|
136
|
+
this.ariaLabelledBy = value;
|
|
137
|
+
break;
|
|
138
|
+
case "aria-describedby":
|
|
139
|
+
this.ariaDescribedBy = value;
|
|
140
|
+
break;
|
|
141
|
+
default:
|
|
142
|
+
super.setAttribute(qualifiedName, value);
|
|
54
143
|
}
|
|
55
|
-
super.setAttribute(qualifiedName, value);
|
|
56
144
|
}
|
|
57
145
|
removeAttribute(qualifiedName) {
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
146
|
+
switch (qualifiedName) {
|
|
147
|
+
case "id":
|
|
148
|
+
this.id = "";
|
|
149
|
+
break;
|
|
150
|
+
case "title":
|
|
151
|
+
this.title = "";
|
|
152
|
+
break;
|
|
153
|
+
case "aria-label":
|
|
154
|
+
this.ariaLabel = null;
|
|
155
|
+
break;
|
|
156
|
+
case "aria-labelledby":
|
|
157
|
+
this.ariaLabelledBy = null;
|
|
158
|
+
break;
|
|
159
|
+
case "aria-describedby":
|
|
160
|
+
this.ariaDescribedBy = null;
|
|
161
|
+
break;
|
|
162
|
+
default:
|
|
163
|
+
super.removeAttribute(qualifiedName);
|
|
164
|
+
}
|
|
165
|
+
}
|
|
166
|
+
_removeHostAttribute(name) {
|
|
167
|
+
const host = this;
|
|
168
|
+
if (HTMLElement.prototype.hasAttribute.call(host, name)) {
|
|
169
|
+
HTMLElement.prototype.removeAttribute.call(host, name);
|
|
61
170
|
}
|
|
62
|
-
super.removeAttribute(qualifiedName);
|
|
63
171
|
}
|
|
64
172
|
get forwardedAriaLabel() {
|
|
65
173
|
const value = this.ariaLabel?.trim();
|
|
@@ -74,11 +182,7 @@ var SpectreBaseElement = class extends LitElement {
|
|
|
74
182
|
return value ? value : void 0;
|
|
75
183
|
}
|
|
76
184
|
};
|
|
77
|
-
SpectreBaseElement.properties = {
|
|
78
|
-
ariaLabel: { attribute: "aria-label", type: String },
|
|
79
|
-
ariaLabelledBy: { attribute: "aria-labelledby", type: String },
|
|
80
|
-
ariaDescribedBy: { attribute: "aria-describedby", type: String }
|
|
81
|
-
};
|
|
185
|
+
SpectreBaseElement.properties = {};
|
|
82
186
|
|
|
83
187
|
// src/utils/dom.ts
|
|
84
188
|
function hasMeaningfulContent(nodes) {
|
|
@@ -139,9 +243,9 @@ var SpectreProjectableElement = class extends SpectreBaseElement {
|
|
|
139
243
|
}
|
|
140
244
|
this.contentObserver = new MutationObserver((mutations) => {
|
|
141
245
|
const isInternalMovement = mutations.every(
|
|
142
|
-
(mutation) =>
|
|
246
|
+
(mutation) => [...mutation.removedNodes].every(
|
|
143
247
|
(node) => this.isInternalNode(node) || this.contains(node)
|
|
144
|
-
) &&
|
|
248
|
+
) && [...mutation.addedNodes].every((node) => this.isInternalNode(node))
|
|
145
249
|
);
|
|
146
250
|
if (isInternalMovement) {
|
|
147
251
|
return;
|
|
@@ -160,10 +264,6 @@ var SpectreProjectableElement = class extends SpectreBaseElement {
|
|
|
160
264
|
|
|
161
265
|
// src/components/label/sp-label.ts
|
|
162
266
|
var SpectreLabelElement = class extends SpectreProjectableElement {
|
|
163
|
-
constructor() {
|
|
164
|
-
super(...arguments);
|
|
165
|
-
this.title = "";
|
|
166
|
-
}
|
|
167
267
|
getContentContainer() {
|
|
168
268
|
return this.querySelector("[data-sp-label-native]");
|
|
169
269
|
}
|
|
@@ -181,26 +281,22 @@ var SpectreLabelElement = class extends SpectreProjectableElement {
|
|
|
181
281
|
this.getContentContainer()?.blur();
|
|
182
282
|
}
|
|
183
283
|
render() {
|
|
184
|
-
return html
|
|
185
|
-
|
|
186
|
-
|
|
187
|
-
|
|
188
|
-
|
|
189
|
-
|
|
190
|
-
|
|
191
|
-
|
|
192
|
-
|
|
193
|
-
|
|
194
|
-
|
|
195
|
-
|
|
196
|
-
${this.hasProjectedContent ? this.projectedContent : nothing}
|
|
197
|
-
</label>
|
|
198
|
-
`;
|
|
284
|
+
return html`<label
|
|
285
|
+
aria-describedby="${ifDefined(this.forwardedAriaDescribedBy)}"
|
|
286
|
+
aria-label="${ifDefined(this.forwardedAriaLabel)}"
|
|
287
|
+
aria-labelledby="${ifDefined(this.forwardedAriaLabelledBy)}"
|
|
288
|
+
class="sp-label"
|
|
289
|
+
data-sp-label-native
|
|
290
|
+
for="${ifDefined(this.htmlFor || void 0)}"
|
|
291
|
+
id="${ifDefined(this.id || void 0)}"
|
|
292
|
+
title="${ifDefined(this.title || void 0)}"
|
|
293
|
+
>
|
|
294
|
+
${this.hasProjectedContent ? this.projectedContent : nothing}
|
|
295
|
+
</label>`;
|
|
199
296
|
}
|
|
200
297
|
};
|
|
201
298
|
SpectreLabelElement.properties = {
|
|
202
|
-
htmlFor: { attribute: "for", type: String, reflect: true }
|
|
203
|
-
title: { type: String, reflect: true }
|
|
299
|
+
htmlFor: { attribute: "for", type: String, reflect: true }
|
|
204
300
|
};
|
|
205
301
|
function defineSpectreLabel(tagName = "sp-label") {
|
|
206
302
|
const existingElement = customElements.get(tagName);
|
package/dist/label.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/utils/base.ts","../src/utils/dom.ts","../src/utils/projectable.ts","../src/components/label/sp-label.ts"],"names":[],"mappings":"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","file":"label.js","sourcesContent":["import { LitElement, type PropertyDeclarations } from 'lit';\n\nexport class SpectreBaseElement extends LitElement {\n static properties: PropertyDeclarations = {\n ariaLabel: { attribute: 'aria-label', type: String },\n ariaLabelledBy: { attribute: 'aria-labelledby', type: String },\n ariaDescribedBy: { attribute: 'aria-describedby', type: String },\n };\n\n ariaLabel: string | null = null;\n ariaLabelledBy: string | null = null;\n ariaDescribedBy: string | null = null;\n\n private _id?: string;\n\n override get id(): string {\n return this._id ?? '';\n }\n\n override set id(value: string) {\n if ((this._id ?? '') === value) {\n return;\n }\n\n this._id = value;\n\n const host = this as unknown as HTMLElement;\n if (HTMLElement.prototype.hasAttribute.call(host, 'id')) {\n HTMLElement.prototype.removeAttribute.call(host, 'id');\n }\n\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 hostId = super.getAttribute('id');\n if (hostId !== null) {\n this.id = hostId;\n }\n }\n\n override getAttribute(qualifiedName: string): string | null {\n if (qualifiedName === 'id') {\n return this.id || null;\n }\n\n return super.getAttribute(qualifiedName);\n }\n\n override hasAttribute(qualifiedName: string): boolean {\n if (qualifiedName === 'id') {\n return this.id !== '';\n }\n\n return super.hasAttribute(qualifiedName);\n }\n\n override setAttribute(qualifiedName: string, value: string): void {\n if (qualifiedName === 'id') {\n this.id = value;\n return;\n }\n\n super.setAttribute(qualifiedName, value);\n }\n\n override removeAttribute(qualifiedName: string): void {\n if (qualifiedName === 'id') {\n this.id = '';\n return;\n }\n\n super.removeAttribute(qualifiedName);\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","export function hasMeaningfulContent(nodes: readonly Node[]): boolean {\n return nodes.some((node) => {\n if (node.nodeType === Node.ELEMENT_NODE) {\n return true;\n }\n\n if (node.nodeType === Node.TEXT_NODE) {\n return (node.textContent?.trim().length ?? 0) > 0;\n }\n\n return false;\n });\n}\n","import { SpectreBaseElement } from './base';\nimport { hasMeaningfulContent } from './dom';\n\nexport abstract class SpectreProjectableElement extends SpectreBaseElement {\n protected projectedContent: Node[] = [];\n private contentObserver?: MutationObserver | undefined;\n\n // Return the native container whose existing children are also treated as\n // projected content sources (e.g. the rendered <button>, <select>, <label>).\n protected abstract getContentContainer(): Element | null;\n\n // Return true if the node was rendered by this component and should not be\n // treated as external projected content.\n protected abstract isInternalNode(node: Node): boolean;\n\n protected get hasProjectedContent(): boolean {\n return hasMeaningfulContent(this.projectedContent);\n }\n\n override connectedCallback(): void {\n super.connectedCallback();\n this.syncProjectedContent();\n this.startContentObserver();\n }\n\n override disconnectedCallback(): void {\n this.stopContentObserver();\n super.disconnectedCallback();\n }\n\n protected override update(changedProperties: Map<PropertyKey, unknown>): void {\n this.stopContentObserver();\n super.update(changedProperties);\n this.startContentObserver();\n }\n\n protected syncProjectedContent(): boolean {\n const nextProjectedContent: Node[] = [];\n const sourceNodes = [\n ...this.childNodes,\n ...(this.getContentContainer()?.childNodes ?? []),\n ];\n\n sourceNodes.forEach((node) => {\n if (!this.isInternalNode(node) && !nextProjectedContent.includes(node)) {\n nextProjectedContent.push(node);\n }\n });\n\n const hasChanged =\n nextProjectedContent.length !== this.projectedContent.length ||\n nextProjectedContent.some((node, index) => node !== this.projectedContent[index]);\n\n if (hasChanged) {\n this.projectedContent = nextProjectedContent;\n }\n\n return hasChanged;\n }\n\n private startContentObserver(): void {\n if (this.contentObserver) {\n return;\n }\n\n this.contentObserver = new MutationObserver((mutations) => {\n const isInternalMovement = mutations.every((mutation) =>\n Array.from(mutation.removedNodes).every(\n (node) => this.isInternalNode(node) || this.contains(node),\n ) &&\n Array.from(mutation.addedNodes).every((node) => this.isInternalNode(node)),\n );\n\n if (isInternalMovement) {\n return;\n }\n\n if (this.syncProjectedContent()) {\n this.requestUpdate();\n }\n });\n\n this.contentObserver.observe(this, { childList: true });\n }\n\n private stopContentObserver(): void {\n this.contentObserver?.disconnect();\n this.contentObserver = undefined;\n }\n}\n","import { html, nothing } from 'lit';\nimport { ifDefined } from 'lit/directives/if-defined.js';\n\nimport { SpectreProjectableElement } from '../../utils/projectable';\n\nexport interface SpectreLabelProps {\n ariaLabel?: string | null;\n ariaLabelledBy?: string | null;\n ariaDescribedBy?: string | null;\n htmlFor?: string;\n title?: string;\n}\n\nexport class SpectreLabelElement extends SpectreProjectableElement implements SpectreLabelProps {\n static properties = {\n htmlFor: { attribute: 'for', type: String, reflect: true },\n title: { type: String, reflect: true },\n };\n\n htmlFor?: string;\n override title = '';\n\n protected override getContentContainer(): Element | null {\n return this.querySelector('[data-sp-label-native]');\n }\n\n protected override isInternalNode(node: Node): boolean {\n if (node.nodeType !== Node.ELEMENT_NODE) {\n return false;\n }\n\n const el = node as Element;\n return el.hasAttribute('data-sp-label-native');\n }\n\n override focus(options?: FocusOptions): void {\n (this.getContentContainer() as HTMLLabelElement | null)?.focus(options);\n }\n\n override blur(): void {\n (this.getContentContainer() as HTMLLabelElement | null)?.blur();\n }\n\n override render() {\n return html`\n <label\n aria-describedby=${ifDefined(this.forwardedAriaDescribedBy)}\n aria-label=${ifDefined(this.forwardedAriaLabel)}\n aria-labelledby=${ifDefined(this.forwardedAriaLabelledBy)}\n class='sp-label'\n data-sp-label-native\n for=${ifDefined(this.htmlFor)}\n id=${ifDefined(this.id || undefined)}\n tabindex='-1'\n title=${ifDefined(this.title || undefined)}\n >\n ${this.hasProjectedContent ? this.projectedContent : nothing}\n </label>\n `;\n }\n}\n\nexport function defineSpectreLabel(tagName = 'sp-label'): typeof SpectreLabelElement {\n const existingElement = customElements.get(tagName);\n\n if (existingElement) {\n return existingElement as unknown as typeof SpectreLabelElement;\n }\n\n customElements.define(tagName, SpectreLabelElement);\n return SpectreLabelElement;\n}\n"]}
|
|
1
|
+
{"version":3,"sources":["../src/utils/base.ts","../src/utils/dom.ts","../src/utils/projectable.ts","../src/components/label/sp-label.ts"],"names":[],"mappings":";;;;AAEO,IAAM,kBAAA,GAAN,cAAiC,UAAA,CAAW;AAAA,EAA5C,WAAA,GAAA;AAAA,IAAA,KAAA,CAAA,GAAA,SAAA,CAAA;AAGL,IAAA,IAAA,CAAQ,UAAA,GAA4B,IAAA;AACpC,IAAA,IAAA,CAAQ,eAAA,GAAiC,IAAA;AACzC,IAAA,IAAA,CAAQ,gBAAA,GAAkC,IAAA;AAC1C,IAAA,IAAA,CAAQ,MAAA,GAAS,EAAA;AACjB,IAAA,IAAA,CAAQ,GAAA,GAAM,EAAA;AAAA,EAAA;AAAA,EAEd,IAAI,SAAA,GAA2B;AAC7B,IAAA,OAAO,IAAA,CAAK,UAAA;AAAA,EACd;AAAA,EAEA,IAAI,UAAU,KAAA,EAAsB;AAClC,IAAA,IAAI,IAAA,CAAK,eAAe,KAAA,EAAO;AAC7B,MAAA;AAAA,IACF;AACA,IAAA,IAAA,CAAK,UAAA,GAAa,KAAA;AAClB,IAAA,IAAA,CAAK,qBAAqB,YAAY,CAAA;AACtC,IAAA,IAAA,CAAK,aAAA,EAAc;AAAA,EACrB;AAAA,EAEA,IAAI,cAAA,GAAgC;AAClC,IAAA,OAAO,IAAA,CAAK,eAAA;AAAA,EACd;AAAA,EAEA,IAAI,eAAe,KAAA,EAAsB;AACvC,IAAA,IAAI,IAAA,CAAK,oBAAoB,KAAA,EAAO;AAClC,MAAA;AAAA,IACF;AACA,IAAA,IAAA,CAAK,eAAA,GAAkB,KAAA;AACvB,IAAA,IAAA,CAAK,qBAAqB,iBAAiB,CAAA;AAC3C,IAAA,IAAA,CAAK,aAAA,EAAc;AAAA,EACrB;AAAA,EAEA,IAAI,eAAA,GAAiC;AACnC,IAAA,OAAO,IAAA,CAAK,gBAAA;AAAA,EACd;AAAA,EAEA,IAAI,gBAAgB,KAAA,EAAsB;AACxC,IAAA,IAAI,IAAA,CAAK,qBAAqB,KAAA,EAAO;AACnC,MAAA;AAAA,IACF;AACA,IAAA,IAAA,CAAK,gBAAA,GAAmB,KAAA;AACxB,IAAA,IAAA,CAAK,qBAAqB,kBAAkB,CAAA;AAC5C,IAAA,IAAA,CAAK,aAAA,EAAc;AAAA,EACrB;AAAA,EAEA,IAAa,KAAA,GAAgB;AAC3B,IAAA,OAAO,IAAA,CAAK,MAAA;AAAA,EACd;AAAA,EAEA,IAAa,MAAM,KAAA,EAAkC;AACnD,IAAA,MAAM,kBAAkB,KAAA,IAAS,EAAA;AACjC,IAAA,IAAI,IAAA,CAAK,WAAW,eAAA,EAAiB;AACnC,MAAA;AAAA,IACF;AACA,IAAA,IAAA,CAAK,MAAA,GAAS,eAAA;AACd,IAAA,IAAA,CAAK,qBAAqB,OAAO,CAAA;AACjC,IAAA,IAAA,CAAK,aAAA,EAAc;AAAA,EACrB;AAAA,EAEA,IAAa,EAAA,GAAa;AACxB,IAAA,OAAO,IAAA,CAAK,GAAA;AAAA,EACd;AAAA,EAEA,IAAa,GAAG,KAAA,EAAkC;AAChD,IAAA,MAAM,kBAAkB,KAAA,IAAS,EAAA;AACjC,IAAA,IAAI,IAAA,CAAK,QAAQ,eAAA,EAAiB;AAChC,MAAA;AAAA,IACF;AACA,IAAA,IAAA,CAAK,GAAA,GAAM,eAAA;AACX,IAAA,IAAA,CAAK,qBAAqB,IAAI,CAAA;AAC9B,IAAA,IAAA,CAAK,aAAA,EAAc;AAAA,EACrB;AAAA;AAAA;AAAA,EAIA,gBAAA,GAAyB;AACvB,IAAA,OAAO,IAAA;AAAA,EACT;AAAA,EAES,iBAAA,GAA0B;AACjC,IAAA,KAAA,CAAM,iBAAA,EAAkB;AAExB,IAAA,MAAM,iBAAA,GAAoB;AAAA,MACxB,IAAA;AAAA,MACA,OAAA;AAAA,MACA,YAAA;AAAA,MACA,iBAAA;AAAA,MACA;AAAA,KACF;AAEA,IAAA,iBAAA,CAAkB,OAAA,CAAQ,CAAC,IAAA,KAAS;AAClC,MAAA,MAAM,KAAA,GAAQ,KAAA,CAAM,YAAA,CAAa,IAAI,CAAA;AACrC,MAAA,IAAI,UAAU,IAAA,EAAM;AAClB,QAAA,IAAA,CAAK,YAAA,CAAa,MAAM,KAAK,CAAA;AAAA,MAC/B;AAAA,IACF,CAAC,CAAA;AAAA,EACH;AAAA,EAES,aAAa,aAAA,EAAsC;AAC1D,IAAA,QAAQ,aAAA;AAAe,MACrB,KAAK,IAAA;AACH,QAAA,OAAO,KAAK,EAAA,IAAM,IAAA;AAAA,MACpB,KAAK,OAAA;AACH,QAAA,OAAO,KAAK,KAAA,IAAS,IAAA;AAAA,MACvB,KAAK,YAAA;AACH,QAAA,OAAO,IAAA,CAAK,SAAA;AAAA,MACd,KAAK,iBAAA;AACH,QAAA,OAAO,IAAA,CAAK,cAAA;AAAA,MACd,KAAK,kBAAA;AACH,QAAA,OAAO,IAAA,CAAK,eAAA;AAAA,MACd;AACE,QAAA,OAAO,KAAA,CAAM,aAAa,aAAa,CAAA;AAAA;AAC3C,EACF;AAAA,EAES,aAAa,aAAA,EAAgC;AACpD,IAAA,QAAQ,aAAA;AAAe,MACrB,KAAK,IAAA;AACH,QAAA,OAAO,KAAK,EAAA,KAAO,EAAA;AAAA,MACrB,KAAK,OAAA;AACH,QAAA,OAAO,KAAK,KAAA,KAAU,EAAA;AAAA,MACxB,KAAK,YAAA;AACH,QAAA,OAAO,KAAK,SAAA,KAAc,IAAA;AAAA,MAC5B,KAAK,iBAAA;AACH,QAAA,OAAO,KAAK,cAAA,KAAmB,IAAA;AAAA,MACjC,KAAK,kBAAA;AACH,QAAA,OAAO,KAAK,eAAA,KAAoB,IAAA;AAAA,MAClC;AACE,QAAA,OAAO,KAAA,CAAM,aAAa,aAAa,CAAA;AAAA;AAC3C,EACF;AAAA,EAES,YAAA,CAAa,eAAuB,KAAA,EAAqB;AAChE,IAAA,QAAQ,aAAA;AAAe,MACrB,KAAK,IAAA;AACH,QAAA,IAAA,CAAK,EAAA,GAAK,KAAA;AACV,QAAA;AAAA,MACF,KAAK,OAAA;AACH,QAAA,IAAA,CAAK,KAAA,GAAQ,KAAA;AACb,QAAA;AAAA,MACF,KAAK,YAAA;AACH,QAAA,IAAA,CAAK,SAAA,GAAY,KAAA;AACjB,QAAA;AAAA,MACF,KAAK,iBAAA;AACH,QAAA,IAAA,CAAK,cAAA,GAAiB,KAAA;AACtB,QAAA;AAAA,MACF,KAAK,kBAAA;AACH,QAAA,IAAA,CAAK,eAAA,GAAkB,KAAA;AACvB,QAAA;AAAA,MACF;AACE,QAAA,KAAA,CAAM,YAAA,CAAa,eAAe,KAAK,CAAA;AAAA;AAC3C,EACF;AAAA,EAES,gBAAgB,aAAA,EAA6B;AACpD,IAAA,QAAQ,aAAA;AAAe,MACrB,KAAK,IAAA;AACH,QAAA,IAAA,CAAK,EAAA,GAAK,EAAA;AACV,QAAA;AAAA,MACF,KAAK,OAAA;AACH,QAAA,IAAA,CAAK,KAAA,GAAQ,EAAA;AACb,QAAA;AAAA,MACF,KAAK,YAAA;AACH,QAAA,IAAA,CAAK,SAAA,GAAY,IAAA;AACjB,QAAA;AAAA,MACF,KAAK,iBAAA;AACH,QAAA,IAAA,CAAK,cAAA,GAAiB,IAAA;AACtB,QAAA;AAAA,MACF,KAAK,kBAAA;AACH,QAAA,IAAA,CAAK,eAAA,GAAkB,IAAA;AACvB,QAAA;AAAA,MACF;AACE,QAAA,KAAA,CAAM,gBAAgB,aAAa,CAAA;AAAA;AACvC,EACF;AAAA,EAEQ,qBAAqB,IAAA,EAAoB;AAC/C,IAAA,MAAM,IAAA,GAAO,IAAA;AACb,IAAA,IAAI,YAAY,SAAA,CAAU,YAAA,CAAa,IAAA,CAAK,IAAA,EAAM,IAAI,CAAA,EAAG;AACvD,MAAA,WAAA,CAAY,SAAA,CAAU,eAAA,CAAgB,IAAA,CAAK,IAAA,EAAM,IAAI,CAAA;AAAA,IACvD;AAAA,EACF;AAAA,EAEA,IAAc,kBAAA,GAAyC;AACrD,IAAA,MAAM,KAAA,GAAQ,IAAA,CAAK,SAAA,EAAW,IAAA,EAAK;AACnC,IAAA,OAAO,QAAQ,KAAA,GAAQ,MAAA;AAAA,EACzB;AAAA,EAEA,IAAc,uBAAA,GAA8C;AAC1D,IAAA,MAAM,KAAA,GAAQ,IAAA,CAAK,cAAA,EAAgB,IAAA,EAAK;AACxC,IAAA,OAAO,QAAQ,KAAA,GAAQ,MAAA;AAAA,EACzB;AAAA,EAEA,IAAc,wBAAA,GAA+C;AAC3D,IAAA,MAAM,KAAA,GAAQ,IAAA,CAAK,eAAA,EAAiB,IAAA,EAAK;AACzC,IAAA,OAAO,QAAQ,KAAA,GAAQ,MAAA;AAAA,EACzB;AACF,CAAA;AAxMa,kBAAA,CACJ,aAAmC,EAAC;;;ACHtC,SAAS,qBAAqB,KAAA,EAAiC;AACpE,EAAA,OAAO,KAAA,CAAM,IAAA,CAAK,CAAC,IAAA,KAAS;AAC1B,IAAA,IAAI,IAAA,CAAK,QAAA,KAAa,IAAA,CAAK,YAAA,EAAc;AACvC,MAAA,OAAO,IAAA;AAAA,IACT;AAEA,IAAA,IAAI,IAAA,CAAK,QAAA,KAAa,IAAA,CAAK,SAAA,EAAW;AACpC,MAAA,OAAA,CAAQ,IAAA,CAAK,WAAA,EAAa,IAAA,EAAK,CAAE,UAAU,CAAA,IAAK,CAAA;AAAA,IAClD;AAEA,IAAA,OAAO,KAAA;AAAA,EACT,CAAC,CAAA;AACH;;;ACTO,IAAe,yBAAA,GAAf,cAAiD,kBAAA,CAAmB;AAAA,EAApE,WAAA,GAAA;AAAA,IAAA,KAAA,CAAA,GAAA,SAAA,CAAA;AACL,IAAA,IAAA,CAAU,mBAA2B,EAAC;AAAA,EAAA;AAAA,EAWtC,IAAc,mBAAA,GAA+B;AAC3C,IAAA,OAAO,oBAAA,CAAqB,KAAK,gBAAgB,CAAA;AAAA,EACnD;AAAA,EAES,iBAAA,GAA0B;AACjC,IAAA,KAAA,CAAM,iBAAA,EAAkB;AACxB,IAAA,IAAA,CAAK,oBAAA,EAAqB;AAC1B,IAAA,IAAA,CAAK,oBAAA,EAAqB;AAAA,EAC5B;AAAA,EAES,oBAAA,GAA6B;AACpC,IAAA,IAAA,CAAK,mBAAA,EAAoB;AACzB,IAAA,KAAA,CAAM,oBAAA,EAAqB;AAAA,EAC7B;AAAA,EAEmB,OAAO,iBAAA,EAAoD;AAC5E,IAAA,IAAA,CAAK,mBAAA,EAAoB;AACzB,IAAA,KAAA,CAAM,OAAO,iBAAiB,CAAA;AAC9B,IAAA,IAAA,CAAK,oBAAA,EAAqB;AAAA,EAC5B;AAAA,EAEU,oBAAA,GAAgC;AACxC,IAAA,MAAM,uBAA+B,EAAC;AACtC,IAAA,MAAM,WAAA,GAAc;AAAA,MAClB,GAAG,IAAA,CAAK,UAAA;AAAA,MACR,GAAI,IAAA,CAAK,mBAAA,EAAoB,EAAG,cAAc;AAAC,KACjD;AAEA,IAAA,WAAA,CAAY,OAAA,CAAQ,CAAC,IAAA,KAAS;AAC5B,MAAA,IAAI,CAAC,KAAK,cAAA,CAAe,IAAI,KAAK,CAAC,oBAAA,CAAqB,QAAA,CAAS,IAAI,CAAA,EAAG;AACtE,QAAA,oBAAA,CAAqB,KAAK,IAAI,CAAA;AAAA,MAChC;AAAA,IACF,CAAC,CAAA;AAED,IAAA,MAAM,UAAA,GACJ,oBAAA,CAAqB,MAAA,KAAW,IAAA,CAAK,iBAAiB,MAAA,IACtD,oBAAA,CAAqB,IAAA,CAAK,CAAC,MAAM,KAAA,KAAU,IAAA,KAAS,IAAA,CAAK,gBAAA,CAAiB,KAAK,CAAC,CAAA;AAElF,IAAA,IAAI,UAAA,EAAY;AACd,MAAA,IAAA,CAAK,gBAAA,GAAmB,oBAAA;AAAA,IAC1B;AAEA,IAAA,OAAO,UAAA;AAAA,EACT;AAAA,EAEQ,oBAAA,GAA6B;AACnC,IAAA,IAAI,KAAK,eAAA,EAAiB;AACxB,MAAA;AAAA,IACF;AAEA,IAAA,IAAA,CAAK,eAAA,GAAkB,IAAI,gBAAA,CAAiB,CAAC,SAAA,KAAc;AACzD,MAAA,MAAM,qBAAqB,SAAA,CAAU,KAAA;AAAA,QAAM,CAAC,QAAA,KAC1C,CAAC,GAAG,QAAA,CAAS,YAAY,CAAA,CAAE,KAAA;AAAA,UACzB,CAAC,SAAS,IAAA,CAAK,cAAA,CAAe,IAAI,CAAA,IAAK,IAAA,CAAK,SAAS,IAAI;AAAA,SAC3D,IACA,CAAC,GAAG,QAAA,CAAS,UAAU,CAAA,CAAE,KAAA,CAAM,CAAC,IAAA,KAAS,IAAA,CAAK,cAAA,CAAe,IAAI,CAAC;AAAA,OACpE;AAEA,MAAA,IAAI,kBAAA,EAAoB;AACtB,QAAA;AAAA,MACF;AAEA,MAAA,IAAI,IAAA,CAAK,sBAAqB,EAAG;AAC/B,QAAA,IAAA,CAAK,aAAA,EAAc;AAAA,MACrB;AAAA,IACF,CAAC,CAAA;AAED,IAAA,IAAA,CAAK,gBAAgB,OAAA,CAAQ,IAAA,EAAM,EAAE,SAAA,EAAW,MAAM,CAAA;AAAA,EACxD;AAAA,EAEQ,mBAAA,GAA4B;AAClC,IAAA,IAAA,CAAK,iBAAiB,UAAA,EAAW;AACjC,IAAA,IAAA,CAAK,eAAA,GAAkB,MAAA;AAAA,EACzB;AACF,CAAA;;;AC5EO,IAAM,mBAAA,GAAN,cAAkC,yBAAA,CAAuD;AAAA,EAO3E,mBAAA,GAAsC;AACvD,IAAA,OAAO,IAAA,CAAK,cAAc,wBAAwB,CAAA;AAAA,EACpD;AAAA,EAEmB,eAAe,IAAA,EAAqB;AACrD,IAAA,IAAI,IAAA,CAAK,QAAA,KAAa,IAAA,CAAK,YAAA,EAAc;AACvC,MAAA,OAAO,KAAA;AAAA,IACT;AAEA,IAAA,MAAM,EAAA,GAAK,IAAA;AACX,IAAA,OAAO,EAAA,CAAG,aAAa,sBAAsB,CAAA;AAAA,EAC/C;AAAA,EAES,MAAM,OAAA,EAA8B;AAC3C,IAAC,IAAA,CAAK,mBAAA,EAAoB,EAA+B,KAAA,CAAM,OAAO,CAAA;AAAA,EACxE;AAAA,EAES,IAAA,GAAa;AACpB,IAAC,IAAA,CAAK,mBAAA,EAAoB,EAA+B,IAAA,EAAK;AAAA,EAChE;AAAA,EAES,MAAA,GAAS;AAChB,IAAA,OAAO,IAAA,CAAA;AAAA,wBAAA,EACe,SAAA,CAAU,IAAA,CAAK,wBAAwB,CAAC,CAAA;AAAA,kBAAA,EAC9C,SAAA,CAAU,IAAA,CAAK,kBAAkB,CAAC,CAAA;AAAA,uBAAA,EAC7B,SAAA,CAAU,IAAA,CAAK,uBAAuB,CAAC,CAAA;AAAA;AAAA;AAAA,WAAA,EAGnD,SAAA,CAAU,IAAA,CAAK,OAAA,IAAW,MAAS,CAAC,CAAA;AAAA,UAAA,EACrC,SAAA,CAAU,IAAA,CAAK,EAAA,IAAM,MAAS,CAAC,CAAA;AAAA,aAAA,EAC5B,SAAA,CAAU,IAAA,CAAK,KAAA,IAAS,MAAS,CAAC,CAAA;AAAA;AAAA,MAAA,EAEzC,IAAA,CAAK,mBAAA,GAAsB,IAAA,CAAK,gBAAA,GAAmB,OAAO;AAAA,YAAA,CAAA;AAAA,EAEhE;AACF;AA1Ca,mBAAA,CACJ,UAAA,GAAa;AAAA,EAClB,SAAS,EAAE,SAAA,EAAW,OAAO,IAAA,EAAM,MAAA,EAAQ,SAAS,IAAA;AACtD,CAAA;AAyCK,SAAS,kBAAA,CAAmB,UAAU,UAAA,EAAwC;AACnF,EAAA,MAAM,eAAA,GAAkB,cAAA,CAAe,GAAA,CAAI,OAAO,CAAA;AAElD,EAAA,IAAI,eAAA,EAAiB;AACnB,IAAA,OAAO,eAAA;AAAA,EACT;AAEA,EAAA,cAAA,CAAe,MAAA,CAAO,SAAS,mBAAmB,CAAA;AAClD,EAAA,OAAO,mBAAA;AACT","file":"label.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","export function hasMeaningfulContent(nodes: readonly Node[]): boolean {\n return nodes.some((node) => {\n if (node.nodeType === Node.ELEMENT_NODE) {\n return true;\n }\n\n if (node.nodeType === Node.TEXT_NODE) {\n return (node.textContent?.trim().length ?? 0) > 0;\n }\n\n return false;\n });\n}\n","import { SpectreBaseElement } from './base';\nimport { hasMeaningfulContent } from './dom';\n\nexport abstract class SpectreProjectableElement extends SpectreBaseElement {\n protected projectedContent: Node[] = [];\n private contentObserver?: MutationObserver | undefined;\n\n // Return the native container whose existing children are also treated as\n // projected content sources (e.g. the rendered <button>, <select>, <label>).\n protected abstract getContentContainer(): Element | null;\n\n // Return true if the node was rendered by this component and should not be\n // treated as external projected content.\n protected abstract isInternalNode(node: Node): boolean;\n\n protected get hasProjectedContent(): boolean {\n return hasMeaningfulContent(this.projectedContent);\n }\n\n override connectedCallback(): void {\n super.connectedCallback();\n this.syncProjectedContent();\n this.startContentObserver();\n }\n\n override disconnectedCallback(): void {\n this.stopContentObserver();\n super.disconnectedCallback();\n }\n\n protected override update(changedProperties: Map<PropertyKey, unknown>): void {\n this.stopContentObserver();\n super.update(changedProperties);\n this.startContentObserver();\n }\n\n protected syncProjectedContent(): boolean {\n const nextProjectedContent: Node[] = [];\n const sourceNodes = [\n ...this.childNodes,\n ...(this.getContentContainer()?.childNodes ?? []),\n ];\n\n sourceNodes.forEach((node) => {\n if (!this.isInternalNode(node) && !nextProjectedContent.includes(node)) {\n nextProjectedContent.push(node);\n }\n });\n\n const hasChanged =\n nextProjectedContent.length !== this.projectedContent.length ||\n nextProjectedContent.some((node, index) => node !== this.projectedContent[index]);\n\n if (hasChanged) {\n this.projectedContent = nextProjectedContent;\n }\n\n return hasChanged;\n }\n\n private startContentObserver(): void {\n if (this.contentObserver) {\n return;\n }\n\n this.contentObserver = new MutationObserver((mutations) => {\n const isInternalMovement = mutations.every((mutation) =>\n [...mutation.removedNodes].every(\n (node) => this.isInternalNode(node) || this.contains(node),\n ) &&\n [...mutation.addedNodes].every((node) => this.isInternalNode(node)),\n );\n\n if (isInternalMovement) {\n return;\n }\n\n if (this.syncProjectedContent()) {\n this.requestUpdate();\n }\n });\n\n this.contentObserver.observe(this, { childList: true });\n }\n\n private stopContentObserver(): void {\n this.contentObserver?.disconnect();\n this.contentObserver = undefined;\n }\n}\n","import { html, nothing } from 'lit';\nimport { ifDefined } from 'lit/directives/if-defined.js';\n\nimport { SpectreProjectableElement } from '../../utils/projectable';\n\nexport interface SpectreLabelProps {\n ariaLabel: string | null;\n ariaLabelledBy: string | null;\n ariaDescribedBy: string | null;\n htmlFor?: string | undefined;\n title?: string | undefined;\n}\n\nexport class SpectreLabelElement extends SpectreProjectableElement implements SpectreLabelProps {\n static properties = {\n htmlFor: { attribute: 'for', type: String, reflect: true },\n };\n\n htmlFor: string | undefined;\n\n protected override getContentContainer(): Element | null {\n return this.querySelector('[data-sp-label-native]');\n }\n\n protected override isInternalNode(node: Node): boolean {\n if (node.nodeType !== Node.ELEMENT_NODE) {\n return false;\n }\n\n const el = node as Element;\n return el.hasAttribute('data-sp-label-native');\n }\n\n override focus(options?: FocusOptions): void {\n (this.getContentContainer() as HTMLLabelElement | null)?.focus(options);\n }\n\n override blur(): void {\n (this.getContentContainer() as HTMLLabelElement | null)?.blur();\n }\n\n override render() {\n return html`<label\n aria-describedby=\"${ifDefined(this.forwardedAriaDescribedBy)}\"\n aria-label=\"${ifDefined(this.forwardedAriaLabel)}\"\n aria-labelledby=\"${ifDefined(this.forwardedAriaLabelledBy)}\"\n class=\"sp-label\"\n data-sp-label-native\n for=\"${ifDefined(this.htmlFor || undefined)}\"\n id=\"${ifDefined(this.id || undefined)}\"\n title=\"${ifDefined(this.title || undefined)}\"\n >\n ${this.hasProjectedContent ? this.projectedContent : nothing}\n </label>`;\n }\n}\n\nexport function defineSpectreLabel(tagName = 'sp-label'): typeof SpectreLabelElement {\n const existingElement = customElements.get(tagName);\n\n if (existingElement) {\n return existingElement as unknown as typeof SpectreLabelElement;\n }\n\n customElements.define(tagName, SpectreLabelElement);\n return SpectreLabelElement;\n}\n"]}
|
package/dist/radio.cjs
CHANGED
|
@@ -8,22 +8,67 @@ var ifDefined_js = require('lit/directives/if-defined.js');
|
|
|
8
8
|
var SpectreBaseElement = class extends lit.LitElement {
|
|
9
9
|
constructor() {
|
|
10
10
|
super(...arguments);
|
|
11
|
-
this.
|
|
12
|
-
this.
|
|
13
|
-
this.
|
|
11
|
+
this._ariaLabel = null;
|
|
12
|
+
this._ariaLabelledBy = null;
|
|
13
|
+
this._ariaDescribedBy = null;
|
|
14
|
+
this._title = "";
|
|
15
|
+
this._id = "";
|
|
16
|
+
}
|
|
17
|
+
get ariaLabel() {
|
|
18
|
+
return this._ariaLabel;
|
|
19
|
+
}
|
|
20
|
+
set ariaLabel(value) {
|
|
21
|
+
if (this._ariaLabel === value) {
|
|
22
|
+
return;
|
|
23
|
+
}
|
|
24
|
+
this._ariaLabel = value;
|
|
25
|
+
this._removeHostAttribute("aria-label");
|
|
26
|
+
this.requestUpdate();
|
|
27
|
+
}
|
|
28
|
+
get ariaLabelledBy() {
|
|
29
|
+
return this._ariaLabelledBy;
|
|
30
|
+
}
|
|
31
|
+
set ariaLabelledBy(value) {
|
|
32
|
+
if (this._ariaLabelledBy === value) {
|
|
33
|
+
return;
|
|
34
|
+
}
|
|
35
|
+
this._ariaLabelledBy = value;
|
|
36
|
+
this._removeHostAttribute("aria-labelledby");
|
|
37
|
+
this.requestUpdate();
|
|
38
|
+
}
|
|
39
|
+
get ariaDescribedBy() {
|
|
40
|
+
return this._ariaDescribedBy;
|
|
41
|
+
}
|
|
42
|
+
set ariaDescribedBy(value) {
|
|
43
|
+
if (this._ariaDescribedBy === value) {
|
|
44
|
+
return;
|
|
45
|
+
}
|
|
46
|
+
this._ariaDescribedBy = value;
|
|
47
|
+
this._removeHostAttribute("aria-describedby");
|
|
48
|
+
this.requestUpdate();
|
|
49
|
+
}
|
|
50
|
+
get title() {
|
|
51
|
+
return this._title;
|
|
52
|
+
}
|
|
53
|
+
set title(value) {
|
|
54
|
+
const normalizedValue = value ?? "";
|
|
55
|
+
if (this._title === normalizedValue) {
|
|
56
|
+
return;
|
|
57
|
+
}
|
|
58
|
+
this._title = normalizedValue;
|
|
59
|
+
this._removeHostAttribute("title");
|
|
60
|
+
this.requestUpdate();
|
|
14
61
|
}
|
|
15
62
|
get id() {
|
|
16
|
-
return this._id
|
|
63
|
+
return this._id;
|
|
17
64
|
}
|
|
18
65
|
set id(value) {
|
|
19
|
-
|
|
66
|
+
const normalizedValue = value ?? "";
|
|
67
|
+
if (this._id === normalizedValue) {
|
|
20
68
|
return;
|
|
21
69
|
}
|
|
22
|
-
this._id =
|
|
23
|
-
|
|
24
|
-
if (HTMLElement.prototype.hasAttribute.call(host, "id")) {
|
|
25
|
-
HTMLElement.prototype.removeAttribute.call(host, "id");
|
|
26
|
-
}
|
|
70
|
+
this._id = normalizedValue;
|
|
71
|
+
this._removeHostAttribute("id");
|
|
27
72
|
this.requestUpdate();
|
|
28
73
|
}
|
|
29
74
|
// Spectre components intentionally render in light DOM so the global
|
|
@@ -33,36 +78,99 @@ var SpectreBaseElement = class extends lit.LitElement {
|
|
|
33
78
|
}
|
|
34
79
|
connectedCallback() {
|
|
35
80
|
super.connectedCallback();
|
|
36
|
-
const
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
81
|
+
const proxiedAttributes = [
|
|
82
|
+
"id",
|
|
83
|
+
"title",
|
|
84
|
+
"aria-label",
|
|
85
|
+
"aria-labelledby",
|
|
86
|
+
"aria-describedby"
|
|
87
|
+
];
|
|
88
|
+
proxiedAttributes.forEach((attr) => {
|
|
89
|
+
const value = super.getAttribute(attr);
|
|
90
|
+
if (value !== null) {
|
|
91
|
+
this.setAttribute(attr, value);
|
|
92
|
+
}
|
|
93
|
+
});
|
|
40
94
|
}
|
|
41
95
|
getAttribute(qualifiedName) {
|
|
42
|
-
|
|
43
|
-
|
|
96
|
+
switch (qualifiedName) {
|
|
97
|
+
case "id":
|
|
98
|
+
return this.id || null;
|
|
99
|
+
case "title":
|
|
100
|
+
return this.title || null;
|
|
101
|
+
case "aria-label":
|
|
102
|
+
return this.ariaLabel;
|
|
103
|
+
case "aria-labelledby":
|
|
104
|
+
return this.ariaLabelledBy;
|
|
105
|
+
case "aria-describedby":
|
|
106
|
+
return this.ariaDescribedBy;
|
|
107
|
+
default:
|
|
108
|
+
return super.getAttribute(qualifiedName);
|
|
44
109
|
}
|
|
45
|
-
return super.getAttribute(qualifiedName);
|
|
46
110
|
}
|
|
47
111
|
hasAttribute(qualifiedName) {
|
|
48
|
-
|
|
49
|
-
|
|
112
|
+
switch (qualifiedName) {
|
|
113
|
+
case "id":
|
|
114
|
+
return this.id !== "";
|
|
115
|
+
case "title":
|
|
116
|
+
return this.title !== "";
|
|
117
|
+
case "aria-label":
|
|
118
|
+
return this.ariaLabel !== null;
|
|
119
|
+
case "aria-labelledby":
|
|
120
|
+
return this.ariaLabelledBy !== null;
|
|
121
|
+
case "aria-describedby":
|
|
122
|
+
return this.ariaDescribedBy !== null;
|
|
123
|
+
default:
|
|
124
|
+
return super.hasAttribute(qualifiedName);
|
|
50
125
|
}
|
|
51
|
-
return super.hasAttribute(qualifiedName);
|
|
52
126
|
}
|
|
53
127
|
setAttribute(qualifiedName, value) {
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
128
|
+
switch (qualifiedName) {
|
|
129
|
+
case "id":
|
|
130
|
+
this.id = value;
|
|
131
|
+
break;
|
|
132
|
+
case "title":
|
|
133
|
+
this.title = value;
|
|
134
|
+
break;
|
|
135
|
+
case "aria-label":
|
|
136
|
+
this.ariaLabel = value;
|
|
137
|
+
break;
|
|
138
|
+
case "aria-labelledby":
|
|
139
|
+
this.ariaLabelledBy = value;
|
|
140
|
+
break;
|
|
141
|
+
case "aria-describedby":
|
|
142
|
+
this.ariaDescribedBy = value;
|
|
143
|
+
break;
|
|
144
|
+
default:
|
|
145
|
+
super.setAttribute(qualifiedName, value);
|
|
57
146
|
}
|
|
58
|
-
super.setAttribute(qualifiedName, value);
|
|
59
147
|
}
|
|
60
148
|
removeAttribute(qualifiedName) {
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
149
|
+
switch (qualifiedName) {
|
|
150
|
+
case "id":
|
|
151
|
+
this.id = "";
|
|
152
|
+
break;
|
|
153
|
+
case "title":
|
|
154
|
+
this.title = "";
|
|
155
|
+
break;
|
|
156
|
+
case "aria-label":
|
|
157
|
+
this.ariaLabel = null;
|
|
158
|
+
break;
|
|
159
|
+
case "aria-labelledby":
|
|
160
|
+
this.ariaLabelledBy = null;
|
|
161
|
+
break;
|
|
162
|
+
case "aria-describedby":
|
|
163
|
+
this.ariaDescribedBy = null;
|
|
164
|
+
break;
|
|
165
|
+
default:
|
|
166
|
+
super.removeAttribute(qualifiedName);
|
|
167
|
+
}
|
|
168
|
+
}
|
|
169
|
+
_removeHostAttribute(name) {
|
|
170
|
+
const host = this;
|
|
171
|
+
if (HTMLElement.prototype.hasAttribute.call(host, name)) {
|
|
172
|
+
HTMLElement.prototype.removeAttribute.call(host, name);
|
|
64
173
|
}
|
|
65
|
-
super.removeAttribute(qualifiedName);
|
|
66
174
|
}
|
|
67
175
|
get forwardedAriaLabel() {
|
|
68
176
|
const value = this.ariaLabel?.trim();
|
|
@@ -77,11 +185,7 @@ var SpectreBaseElement = class extends lit.LitElement {
|
|
|
77
185
|
return value ? value : void 0;
|
|
78
186
|
}
|
|
79
187
|
};
|
|
80
|
-
SpectreBaseElement.properties = {
|
|
81
|
-
ariaLabel: { attribute: "aria-label", type: String },
|
|
82
|
-
ariaLabelledBy: { attribute: "aria-labelledby", type: String },
|
|
83
|
-
ariaDescribedBy: { attribute: "aria-describedby", type: String }
|
|
84
|
-
};
|
|
188
|
+
SpectreBaseElement.properties = {};
|
|
85
189
|
|
|
86
190
|
// src/utils/dom.ts
|
|
87
191
|
function hasMeaningfulContent(nodes) {
|
|
@@ -142,9 +246,9 @@ var SpectreProjectableElement = class extends SpectreBaseElement {
|
|
|
142
246
|
}
|
|
143
247
|
this.contentObserver = new MutationObserver((mutations) => {
|
|
144
248
|
const isInternalMovement = mutations.every(
|
|
145
|
-
(mutation) =>
|
|
249
|
+
(mutation) => [...mutation.removedNodes].every(
|
|
146
250
|
(node) => this.isInternalNode(node) || this.contains(node)
|
|
147
|
-
) &&
|
|
251
|
+
) && [...mutation.addedNodes].every((node) => this.isInternalNode(node))
|
|
148
252
|
);
|
|
149
253
|
if (isInternalMovement) {
|
|
150
254
|
return;
|
|
@@ -172,7 +276,6 @@ var SpectreRadioElement = class extends SpectreProjectableElement {
|
|
|
172
276
|
this.loading = false;
|
|
173
277
|
this.required = false;
|
|
174
278
|
this.success = false;
|
|
175
|
-
this.title = "";
|
|
176
279
|
this.value = "on";
|
|
177
280
|
}
|
|
178
281
|
getContentContainer() {
|
|
@@ -215,33 +318,31 @@ var SpectreRadioElement = class extends SpectreProjectableElement {
|
|
|
215
318
|
this.nativeInput?.blur();
|
|
216
319
|
}
|
|
217
320
|
render() {
|
|
218
|
-
const labelContent = this.hasProjectedContent ? this.projectedContent : this.visibleLabelFallback ? lit.html`<span class=
|
|
219
|
-
return lit.html
|
|
220
|
-
<
|
|
221
|
-
|
|
222
|
-
|
|
223
|
-
|
|
224
|
-
|
|
225
|
-
|
|
226
|
-
|
|
227
|
-
|
|
228
|
-
|
|
229
|
-
|
|
230
|
-
|
|
231
|
-
|
|
232
|
-
|
|
233
|
-
|
|
234
|
-
|
|
235
|
-
|
|
236
|
-
|
|
237
|
-
|
|
238
|
-
|
|
239
|
-
|
|
240
|
-
|
|
241
|
-
|
|
242
|
-
|
|
243
|
-
</label>
|
|
244
|
-
`;
|
|
321
|
+
const labelContent = this.hasProjectedContent ? this.projectedContent : this.visibleLabelFallback ? lit.html`<span class="sp-label" data-sp-radio-label-fallback>${this.visibleLabelFallback}</span>` : lit.nothing;
|
|
322
|
+
return lit.html`<label data-sp-radio-label>
|
|
323
|
+
<input
|
|
324
|
+
aria-busy="${this.loading ? "true" : "false"}"
|
|
325
|
+
aria-describedby="${ifDefined_js.ifDefined(this.forwardedAriaDescribedBy)}"
|
|
326
|
+
aria-invalid="${ifDefined_js.ifDefined(this.invalid ? "true" : void 0)}"
|
|
327
|
+
aria-label="${ifDefined_js.ifDefined(this.forwardedAriaLabel)}"
|
|
328
|
+
aria-labelledby="${ifDefined_js.ifDefined(this.forwardedAriaLabelledBy)}"
|
|
329
|
+
?autofocus="${this.autofocus}"
|
|
330
|
+
data-sp-radio-native
|
|
331
|
+
.checked="${live_js.live(this.checked)}"
|
|
332
|
+
?disabled="${this.isDisabled}"
|
|
333
|
+
form="${ifDefined_js.ifDefined(this.form || void 0)}"
|
|
334
|
+
id="${ifDefined_js.ifDefined(this.id || void 0)}"
|
|
335
|
+
name="${ifDefined_js.ifDefined(this.name || void 0)}"
|
|
336
|
+
?required="${this.required}"
|
|
337
|
+
title="${ifDefined_js.ifDefined(this.title || void 0)}"
|
|
338
|
+
type="radio"
|
|
339
|
+
value="${ifDefined_js.ifDefined(this.value)}"
|
|
340
|
+
@change="${this.handleChange}"
|
|
341
|
+
@input="${this.handleInput}"
|
|
342
|
+
/>
|
|
343
|
+
<span class="sp-radio-indicator" data-sp-radio-indicator></span>
|
|
344
|
+
${labelContent}
|
|
345
|
+
</label>`;
|
|
245
346
|
}
|
|
246
347
|
};
|
|
247
348
|
SpectreRadioElement.properties = {
|
|
@@ -255,7 +356,6 @@ SpectreRadioElement.properties = {
|
|
|
255
356
|
name: { type: String, reflect: true },
|
|
256
357
|
required: { type: Boolean, reflect: true },
|
|
257
358
|
success: { type: Boolean, reflect: true },
|
|
258
|
-
title: { type: String, reflect: true },
|
|
259
359
|
value: { type: String }
|
|
260
360
|
};
|
|
261
361
|
function defineSpectreRadio(tagName = "sp-radio") {
|