@phcdevworks/spectre-components 0.0.1

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 (57) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +177 -0
  3. package/dist/button.cjs +288 -0
  4. package/dist/button.cjs.map +1 -0
  5. package/dist/button.d.cts +142 -0
  6. package/dist/button.d.ts +142 -0
  7. package/dist/button.js +282 -0
  8. package/dist/button.js.map +1 -0
  9. package/dist/checkbox.cjs +158 -0
  10. package/dist/checkbox.cjs.map +1 -0
  11. package/dist/checkbox.d.cts +98 -0
  12. package/dist/checkbox.d.ts +98 -0
  13. package/dist/checkbox.js +155 -0
  14. package/dist/checkbox.js.map +1 -0
  15. package/dist/fieldset.cjs +179 -0
  16. package/dist/fieldset.cjs.map +1 -0
  17. package/dist/fieldset.d.cts +63 -0
  18. package/dist/fieldset.d.ts +63 -0
  19. package/dist/fieldset.js +176 -0
  20. package/dist/fieldset.js.map +1 -0
  21. package/dist/index.cjs +1600 -0
  22. package/dist/index.cjs.map +1 -0
  23. package/dist/index.d.cts +14 -0
  24. package/dist/index.d.ts +14 -0
  25. package/dist/index.js +1576 -0
  26. package/dist/index.js.map +1 -0
  27. package/dist/input.cjs +235 -0
  28. package/dist/input.cjs.map +1 -0
  29. package/dist/input.d.cts +175 -0
  30. package/dist/input.d.ts +175 -0
  31. package/dist/input.js +230 -0
  32. package/dist/input.js.map +1 -0
  33. package/dist/label.cjs +156 -0
  34. package/dist/label.cjs.map +1 -0
  35. package/dist/label.d.cts +39 -0
  36. package/dist/label.d.ts +39 -0
  37. package/dist/label.js +153 -0
  38. package/dist/label.js.map +1 -0
  39. package/dist/radio.cjs +158 -0
  40. package/dist/radio.cjs.map +1 -0
  41. package/dist/radio.d.cts +98 -0
  42. package/dist/radio.d.ts +98 -0
  43. package/dist/radio.js +155 -0
  44. package/dist/radio.js.map +1 -0
  45. package/dist/select.cjs +272 -0
  46. package/dist/select.cjs.map +1 -0
  47. package/dist/select.d.cts +130 -0
  48. package/dist/select.d.ts +130 -0
  49. package/dist/select.js +268 -0
  50. package/dist/select.js.map +1 -0
  51. package/dist/textarea.cjs +423 -0
  52. package/dist/textarea.cjs.map +1 -0
  53. package/dist/textarea.d.cts +156 -0
  54. package/dist/textarea.d.ts +156 -0
  55. package/dist/textarea.js +420 -0
  56. package/dist/textarea.js.map +1 -0
  57. package/package.json +124 -0
@@ -0,0 +1,98 @@
1
+ import * as lit_html from 'lit-html';
2
+ import { LitElement } from 'lit';
3
+
4
+ interface SpectreCheckboxProps {
5
+ autofocus?: boolean;
6
+ checked?: boolean;
7
+ disabled?: boolean;
8
+ invalid?: boolean;
9
+ label?: string;
10
+ name?: string;
11
+ required?: boolean;
12
+ title?: string;
13
+ value?: string;
14
+ }
15
+ declare class SpectreCheckboxElement extends LitElement implements SpectreCheckboxProps {
16
+ static properties: {
17
+ ariaLabel: {
18
+ attribute: string;
19
+ type: StringConstructor;
20
+ };
21
+ ariaLabelledBy: {
22
+ attribute: string;
23
+ type: StringConstructor;
24
+ };
25
+ ariaDescribedBy: {
26
+ attribute: string;
27
+ type: StringConstructor;
28
+ };
29
+ autofocus: {
30
+ type: BooleanConstructor;
31
+ reflect: boolean;
32
+ };
33
+ checked: {
34
+ type: BooleanConstructor;
35
+ reflect: boolean;
36
+ };
37
+ disabled: {
38
+ type: BooleanConstructor;
39
+ reflect: boolean;
40
+ };
41
+ invalid: {
42
+ type: BooleanConstructor;
43
+ reflect: boolean;
44
+ };
45
+ label: {
46
+ type: StringConstructor;
47
+ reflect: boolean;
48
+ };
49
+ name: {
50
+ type: StringConstructor;
51
+ };
52
+ required: {
53
+ type: BooleanConstructor;
54
+ reflect: boolean;
55
+ };
56
+ title: {
57
+ type: StringConstructor;
58
+ reflect: boolean;
59
+ };
60
+ value: {
61
+ type: StringConstructor;
62
+ };
63
+ };
64
+ ariaLabel: string | null;
65
+ ariaLabelledBy: string | null;
66
+ ariaDescribedBy: string | null;
67
+ autofocus: boolean;
68
+ checked: boolean;
69
+ disabled: boolean;
70
+ invalid: boolean;
71
+ label: string;
72
+ name?: string;
73
+ required: boolean;
74
+ title: string;
75
+ value: string;
76
+ private _id?;
77
+ get id(): string;
78
+ set id(value: string);
79
+ createRenderRoot(): this;
80
+ connectedCallback(): void;
81
+ getAttribute(qualifiedName: string): string | null;
82
+ hasAttribute(qualifiedName: string): boolean;
83
+ setAttribute(qualifiedName: string, value: string): void;
84
+ removeAttribute(qualifiedName: string): void;
85
+ protected willUpdate(changedProperties: Map<PropertyKey, unknown>): void;
86
+ private get nativeInput();
87
+ private get forwardedAriaLabel();
88
+ private get forwardedAriaLabelledBy();
89
+ private get forwardedAriaDescribedBy();
90
+ private handleInput;
91
+ private handleChange;
92
+ focus(options?: FocusOptions): void;
93
+ blur(): void;
94
+ render(): lit_html.TemplateResult<1>;
95
+ }
96
+ declare function defineSpectreCheckbox(tagName?: string): typeof SpectreCheckboxElement;
97
+
98
+ export { SpectreCheckboxElement, type SpectreCheckboxProps, defineSpectreCheckbox };
@@ -0,0 +1,98 @@
1
+ import * as lit_html from 'lit-html';
2
+ import { LitElement } from 'lit';
3
+
4
+ interface SpectreCheckboxProps {
5
+ autofocus?: boolean;
6
+ checked?: boolean;
7
+ disabled?: boolean;
8
+ invalid?: boolean;
9
+ label?: string;
10
+ name?: string;
11
+ required?: boolean;
12
+ title?: string;
13
+ value?: string;
14
+ }
15
+ declare class SpectreCheckboxElement extends LitElement implements SpectreCheckboxProps {
16
+ static properties: {
17
+ ariaLabel: {
18
+ attribute: string;
19
+ type: StringConstructor;
20
+ };
21
+ ariaLabelledBy: {
22
+ attribute: string;
23
+ type: StringConstructor;
24
+ };
25
+ ariaDescribedBy: {
26
+ attribute: string;
27
+ type: StringConstructor;
28
+ };
29
+ autofocus: {
30
+ type: BooleanConstructor;
31
+ reflect: boolean;
32
+ };
33
+ checked: {
34
+ type: BooleanConstructor;
35
+ reflect: boolean;
36
+ };
37
+ disabled: {
38
+ type: BooleanConstructor;
39
+ reflect: boolean;
40
+ };
41
+ invalid: {
42
+ type: BooleanConstructor;
43
+ reflect: boolean;
44
+ };
45
+ label: {
46
+ type: StringConstructor;
47
+ reflect: boolean;
48
+ };
49
+ name: {
50
+ type: StringConstructor;
51
+ };
52
+ required: {
53
+ type: BooleanConstructor;
54
+ reflect: boolean;
55
+ };
56
+ title: {
57
+ type: StringConstructor;
58
+ reflect: boolean;
59
+ };
60
+ value: {
61
+ type: StringConstructor;
62
+ };
63
+ };
64
+ ariaLabel: string | null;
65
+ ariaLabelledBy: string | null;
66
+ ariaDescribedBy: string | null;
67
+ autofocus: boolean;
68
+ checked: boolean;
69
+ disabled: boolean;
70
+ invalid: boolean;
71
+ label: string;
72
+ name?: string;
73
+ required: boolean;
74
+ title: string;
75
+ value: string;
76
+ private _id?;
77
+ get id(): string;
78
+ set id(value: string);
79
+ createRenderRoot(): this;
80
+ connectedCallback(): void;
81
+ getAttribute(qualifiedName: string): string | null;
82
+ hasAttribute(qualifiedName: string): boolean;
83
+ setAttribute(qualifiedName: string, value: string): void;
84
+ removeAttribute(qualifiedName: string): void;
85
+ protected willUpdate(changedProperties: Map<PropertyKey, unknown>): void;
86
+ private get nativeInput();
87
+ private get forwardedAriaLabel();
88
+ private get forwardedAriaLabelledBy();
89
+ private get forwardedAriaDescribedBy();
90
+ private handleInput;
91
+ private handleChange;
92
+ focus(options?: FocusOptions): void;
93
+ blur(): void;
94
+ render(): lit_html.TemplateResult<1>;
95
+ }
96
+ declare function defineSpectreCheckbox(tagName?: string): typeof SpectreCheckboxElement;
97
+
98
+ export { SpectreCheckboxElement, type SpectreCheckboxProps, defineSpectreCheckbox };
@@ -0,0 +1,155 @@
1
+ import { LitElement, html } from 'lit';
2
+ import { ifDefined } from 'lit/directives/if-defined.js';
3
+
4
+ // src/components/checkbox/sp-checkbox.ts
5
+ var SpectreCheckboxElement = class extends LitElement {
6
+ constructor() {
7
+ super(...arguments);
8
+ this.ariaLabel = null;
9
+ this.ariaLabelledBy = null;
10
+ this.ariaDescribedBy = null;
11
+ this.autofocus = false;
12
+ this.checked = false;
13
+ this.disabled = false;
14
+ this.invalid = false;
15
+ this.label = "";
16
+ this.required = false;
17
+ this.title = "";
18
+ this.value = "on";
19
+ }
20
+ get id() {
21
+ return this._id ?? "";
22
+ }
23
+ set id(value) {
24
+ if ((this._id ?? "") === value) {
25
+ return;
26
+ }
27
+ this._id = value;
28
+ const host = this;
29
+ if (HTMLElement.prototype.hasAttribute.call(host, "id")) {
30
+ HTMLElement.prototype.removeAttribute.call(host, "id");
31
+ }
32
+ this.requestUpdate();
33
+ }
34
+ createRenderRoot() {
35
+ return this;
36
+ }
37
+ connectedCallback() {
38
+ super.connectedCallback();
39
+ const hostId = super.getAttribute("id");
40
+ if (hostId !== null) {
41
+ this.id = hostId;
42
+ }
43
+ }
44
+ getAttribute(qualifiedName) {
45
+ if (qualifiedName === "id") {
46
+ return this.id || null;
47
+ }
48
+ return super.getAttribute(qualifiedName);
49
+ }
50
+ hasAttribute(qualifiedName) {
51
+ if (qualifiedName === "id") {
52
+ return this.id !== "";
53
+ }
54
+ return super.hasAttribute(qualifiedName);
55
+ }
56
+ setAttribute(qualifiedName, value) {
57
+ if (qualifiedName === "id") {
58
+ this.id = value;
59
+ return;
60
+ }
61
+ super.setAttribute(qualifiedName, value);
62
+ }
63
+ removeAttribute(qualifiedName) {
64
+ if (qualifiedName === "id") {
65
+ this.id = "";
66
+ return;
67
+ }
68
+ super.removeAttribute(qualifiedName);
69
+ }
70
+ willUpdate(changedProperties) {
71
+ if (changedProperties.has("value") && this.value == null) {
72
+ this.value = "on";
73
+ }
74
+ }
75
+ get nativeInput() {
76
+ return this.querySelector("[data-sp-checkbox-native]");
77
+ }
78
+ get forwardedAriaLabel() {
79
+ const value = this.ariaLabel?.trim();
80
+ return value ? value : void 0;
81
+ }
82
+ get forwardedAriaLabelledBy() {
83
+ const value = this.ariaLabelledBy?.trim();
84
+ return value ? value : void 0;
85
+ }
86
+ get forwardedAriaDescribedBy() {
87
+ const value = this.ariaDescribedBy?.trim();
88
+ return value ? value : void 0;
89
+ }
90
+ handleInput(event) {
91
+ const input = event.currentTarget;
92
+ this.checked = input.checked;
93
+ }
94
+ handleChange(event) {
95
+ const input = event.currentTarget;
96
+ this.checked = input.checked;
97
+ }
98
+ focus(options) {
99
+ this.nativeInput?.focus(options);
100
+ }
101
+ blur() {
102
+ this.nativeInput?.blur();
103
+ }
104
+ render() {
105
+ return html`
106
+ <label>
107
+ <input
108
+ aria-describedby=${ifDefined(this.forwardedAriaDescribedBy)}
109
+ aria-invalid=${ifDefined(this.invalid ? "true" : void 0)}
110
+ aria-label=${ifDefined(this.forwardedAriaLabel)}
111
+ aria-labelledby=${ifDefined(this.forwardedAriaLabelledBy)}
112
+ ?autofocus=${this.autofocus}
113
+ data-sp-checkbox-native
114
+ ?checked=${this.checked}
115
+ ?disabled=${this.disabled}
116
+ id=${ifDefined(this.id || void 0)}
117
+ name=${ifDefined(this.name)}
118
+ ?required=${this.required}
119
+ title=${ifDefined(this.title || void 0)}
120
+ type='checkbox'
121
+ value=${ifDefined(this.value || void 0)}
122
+ @change=${this.handleChange}
123
+ @input=${this.handleInput}
124
+ />
125
+ <span class='sp-label'>${this.label}</span>
126
+ </label>
127
+ `;
128
+ }
129
+ };
130
+ SpectreCheckboxElement.properties = {
131
+ ariaLabel: { attribute: "aria-label", type: String },
132
+ ariaLabelledBy: { attribute: "aria-labelledby", type: String },
133
+ ariaDescribedBy: { attribute: "aria-describedby", type: String },
134
+ autofocus: { type: Boolean, reflect: true },
135
+ checked: { type: Boolean, reflect: true },
136
+ disabled: { type: Boolean, reflect: true },
137
+ invalid: { type: Boolean, reflect: true },
138
+ label: { type: String, reflect: true },
139
+ name: { type: String },
140
+ required: { type: Boolean, reflect: true },
141
+ title: { type: String, reflect: true },
142
+ value: { type: String }
143
+ };
144
+ function defineSpectreCheckbox(tagName = "sp-checkbox") {
145
+ const existingElement = customElements.get(tagName);
146
+ if (existingElement) {
147
+ return existingElement;
148
+ }
149
+ customElements.define(tagName, SpectreCheckboxElement);
150
+ return SpectreCheckboxElement;
151
+ }
152
+
153
+ export { SpectreCheckboxElement, defineSpectreCheckbox };
154
+ //# sourceMappingURL=checkbox.js.map
155
+ //# sourceMappingURL=checkbox.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/components/checkbox/sp-checkbox.ts"],"names":[],"mappings":";;;;AAeO,IAAM,sBAAA,GAAN,cAAqC,UAAA,CAA2C;AAAA,EAAhF,WAAA,GAAA;AAAA,IAAA,KAAA,CAAA,GAAA,SAAA,CAAA;AAgBL,IAAA,IAAA,CAAA,SAAA,GAA2B,IAAA;AAC3B,IAAA,IAAA,CAAA,cAAA,GAAgC,IAAA;AAChC,IAAA,IAAA,CAAA,eAAA,GAAiC,IAAA;AACjC,IAAA,IAAA,CAAA,SAAA,GAAY,KAAA;AACZ,IAAA,IAAA,CAAA,OAAA,GAAU,KAAA;AACV,IAAA,IAAA,CAAA,QAAA,GAAW,KAAA;AACX,IAAA,IAAA,CAAA,OAAA,GAAU,KAAA;AACV,IAAA,IAAA,CAAA,KAAA,GAAQ,EAAA;AAER,IAAA,IAAA,CAAA,QAAA,GAAW,KAAA;AACX,IAAA,IAAA,CAAS,KAAA,GAAQ,EAAA;AACjB,IAAA,IAAA,CAAA,KAAA,GAAQ,IAAA;AAAA,EAAA;AAAA,EAGR,IAAa,EAAA,GAAa;AACxB,IAAA,OAAO,KAAK,GAAA,IAAO,EAAA;AAAA,EACrB;AAAA,EAEA,IAAa,GAAG,KAAA,EAAe;AAC7B,IAAA,IAAA,CAAK,IAAA,CAAK,GAAA,IAAO,EAAA,MAAQ,KAAA,EAAO;AAC9B,MAAA;AAAA,IACF;AAEA,IAAA,IAAA,CAAK,GAAA,GAAM,KAAA;AAEX,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;AAEA,IAAA,IAAA,CAAK,aAAA,EAAc;AAAA,EACrB;AAAA,EAEA,gBAAA,GAAyB;AACvB,IAAA,OAAO,IAAA;AAAA,EACT;AAAA,EAES,iBAAA,GAA0B;AACjC,IAAA,KAAA,CAAM,iBAAA,EAAkB;AACxB,IAAA,MAAM,MAAA,GAAS,KAAA,CAAM,YAAA,CAAa,IAAI,CAAA;AAEtC,IAAA,IAAI,WAAW,IAAA,EAAM;AACnB,MAAA,IAAA,CAAK,EAAA,GAAK,MAAA;AAAA,IACZ;AAAA,EACF;AAAA,EAES,aAAa,aAAA,EAAsC;AAC1D,IAAA,IAAI,kBAAkB,IAAA,EAAM;AAC1B,MAAA,OAAO,KAAK,EAAA,IAAM,IAAA;AAAA,IACpB;AAEA,IAAA,OAAO,KAAA,CAAM,aAAa,aAAa,CAAA;AAAA,EACzC;AAAA,EAES,aAAa,aAAA,EAAgC;AACpD,IAAA,IAAI,kBAAkB,IAAA,EAAM;AAC1B,MAAA,OAAO,KAAK,EAAA,KAAO,EAAA;AAAA,IACrB;AAEA,IAAA,OAAO,KAAA,CAAM,aAAa,aAAa,CAAA;AAAA,EACzC;AAAA,EAES,YAAA,CAAa,eAAuB,KAAA,EAAqB;AAChE,IAAA,IAAI,kBAAkB,IAAA,EAAM;AAC1B,MAAA,IAAA,CAAK,EAAA,GAAK,KAAA;AACV,MAAA;AAAA,IACF;AAEA,IAAA,KAAA,CAAM,YAAA,CAAa,eAAe,KAAK,CAAA;AAAA,EACzC;AAAA,EAES,gBAAgB,aAAA,EAA6B;AACpD,IAAA,IAAI,kBAAkB,IAAA,EAAM;AAC1B,MAAA,IAAA,CAAK,EAAA,GAAK,EAAA;AACV,MAAA;AAAA,IACF;AAEA,IAAA,KAAA,CAAM,gBAAgB,aAAa,CAAA;AAAA,EACrC;AAAA,EAEmB,WAAW,iBAAA,EAAoD;AAChF,IAAA,IAAI,kBAAkB,GAAA,CAAI,OAAO,CAAA,IAAK,IAAA,CAAK,SAAS,IAAA,EAAM;AACxD,MAAA,IAAA,CAAK,KAAA,GAAQ,IAAA;AAAA,IACf;AAAA,EACF;AAAA,EAEA,IAAY,WAAA,GAAuC;AACjD,IAAA,OAAO,IAAA,CAAK,cAAc,2BAA2B,CAAA;AAAA,EACvD;AAAA,EAEA,IAAY,kBAAA,GAAyC;AACnD,IAAA,MAAM,KAAA,GAAQ,IAAA,CAAK,SAAA,EAAW,IAAA,EAAK;AACnC,IAAA,OAAO,QAAQ,KAAA,GAAQ,MAAA;AAAA,EACzB;AAAA,EAEA,IAAY,uBAAA,GAA8C;AACxD,IAAA,MAAM,KAAA,GAAQ,IAAA,CAAK,cAAA,EAAgB,IAAA,EAAK;AACxC,IAAA,OAAO,QAAQ,KAAA,GAAQ,MAAA;AAAA,EACzB;AAAA,EAEA,IAAY,wBAAA,GAA+C;AACzD,IAAA,MAAM,KAAA,GAAQ,IAAA,CAAK,eAAA,EAAiB,IAAA,EAAK;AACzC,IAAA,OAAO,QAAQ,KAAA,GAAQ,MAAA;AAAA,EACzB;AAAA,EAEQ,YAAY,KAAA,EAAoB;AACtC,IAAA,MAAM,QAAQ,KAAA,CAAM,aAAA;AACpB,IAAA,IAAA,CAAK,UAAU,KAAA,CAAM,OAAA;AAAA,EACvB;AAAA,EAEQ,aAAa,KAAA,EAAoB;AACvC,IAAA,MAAM,QAAQ,KAAA,CAAM,aAAA;AACpB,IAAA,IAAA,CAAK,UAAU,KAAA,CAAM,OAAA;AAAA,EACvB;AAAA,EAES,MAAM,OAAA,EAA8B;AAC3C,IAAA,IAAA,CAAK,WAAA,EAAa,MAAM,OAAO,CAAA;AAAA,EACjC;AAAA,EAES,IAAA,GAAa;AACpB,IAAA,IAAA,CAAK,aAAa,IAAA,EAAK;AAAA,EACzB;AAAA,EAES,MAAA,GAAS;AAChB,IAAA,OAAO,IAAA;AAAA;AAAA;AAAA,2BAAA,EAGkB,SAAA,CAAU,IAAA,CAAK,wBAAwB,CAAC;AAAA,uBAAA,EAC5C,SAAA,CAAU,IAAA,CAAK,OAAA,GAAU,MAAA,GAAS,MAAS,CAAC;AAAA,qBAAA,EAC9C,SAAA,CAAU,IAAA,CAAK,kBAAkB,CAAC;AAAA,0BAAA,EAC7B,SAAA,CAAU,IAAA,CAAK,uBAAuB,CAAC;AAAA,qBAAA,EAC5C,KAAK,SAAS;AAAA;AAAA,mBAAA,EAEhB,KAAK,OAAO;AAAA,oBAAA,EACX,KAAK,QAAQ;AAAA,aAAA,EACpB,SAAA,CAAU,IAAA,CAAK,EAAA,IAAM,MAAS,CAAC;AAAA,eAAA,EAC7B,SAAA,CAAU,IAAA,CAAK,IAAI,CAAC;AAAA,oBAAA,EACf,KAAK,QAAQ;AAAA,gBAAA,EACjB,SAAA,CAAU,IAAA,CAAK,KAAA,IAAS,MAAS,CAAC;AAAA;AAAA,gBAAA,EAElC,SAAA,CAAU,IAAA,CAAK,KAAA,IAAS,MAAS,CAAC;AAAA,kBAAA,EAChC,KAAK,YAAY;AAAA,iBAAA,EAClB,KAAK,WAAW;AAAA;AAAA,+BAAA,EAEF,KAAK,KAAK,CAAA;AAAA;AAAA,IAAA,CAAA;AAAA,EAGzC;AACF;AApKa,sBAAA,CACJ,UAAA,GAAa;AAAA,EAClB,SAAA,EAAW,EAAE,SAAA,EAAW,YAAA,EAAc,MAAM,MAAA,EAAO;AAAA,EACnD,cAAA,EAAgB,EAAE,SAAA,EAAW,iBAAA,EAAmB,MAAM,MAAA,EAAO;AAAA,EAC7D,eAAA,EAAiB,EAAE,SAAA,EAAW,kBAAA,EAAoB,MAAM,MAAA,EAAO;AAAA,EAC/D,SAAA,EAAW,EAAE,IAAA,EAAM,OAAA,EAAS,SAAS,IAAA,EAAK;AAAA,EAC1C,OAAA,EAAS,EAAE,IAAA,EAAM,OAAA,EAAS,SAAS,IAAA,EAAK;AAAA,EACxC,QAAA,EAAU,EAAE,IAAA,EAAM,OAAA,EAAS,SAAS,IAAA,EAAK;AAAA,EACzC,OAAA,EAAS,EAAE,IAAA,EAAM,OAAA,EAAS,SAAS,IAAA,EAAK;AAAA,EACxC,KAAA,EAAO,EAAE,IAAA,EAAM,MAAA,EAAQ,SAAS,IAAA,EAAK;AAAA,EACrC,IAAA,EAAM,EAAE,IAAA,EAAM,MAAA,EAAO;AAAA,EACrB,QAAA,EAAU,EAAE,IAAA,EAAM,OAAA,EAAS,SAAS,IAAA,EAAK;AAAA,EACzC,KAAA,EAAO,EAAE,IAAA,EAAM,MAAA,EAAQ,SAAS,IAAA,EAAK;AAAA,EACrC,KAAA,EAAO,EAAE,IAAA,EAAM,MAAA;AACjB,CAAA;AAwJK,SAAS,qBAAA,CAAsB,UAAU,aAAA,EAA8C;AAC5F,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,sBAAsB,CAAA;AACrD,EAAA,OAAO,sBAAA;AACT","file":"checkbox.js","sourcesContent":["import { LitElement, html } from 'lit';\nimport { ifDefined } from 'lit/directives/if-defined.js';\n\nexport interface SpectreCheckboxProps {\n autofocus?: boolean;\n checked?: boolean;\n disabled?: boolean;\n invalid?: boolean;\n label?: string;\n name?: string;\n required?: boolean;\n title?: string;\n value?: string;\n}\n\nexport class SpectreCheckboxElement extends LitElement implements SpectreCheckboxProps {\n static properties = {\n ariaLabel: { attribute: 'aria-label', type: String },\n ariaLabelledBy: { attribute: 'aria-labelledby', type: String },\n ariaDescribedBy: { attribute: 'aria-describedby', type: String },\n autofocus: { type: Boolean, reflect: true },\n checked: { type: Boolean, reflect: true },\n disabled: { type: Boolean, reflect: true },\n invalid: { type: Boolean, reflect: true },\n label: { type: String, reflect: true },\n name: { type: String },\n required: { type: Boolean, reflect: true },\n title: { type: String, reflect: true },\n value: { type: String },\n };\n\n ariaLabel: string | null = null;\n ariaLabelledBy: string | null = null;\n ariaDescribedBy: string | null = null;\n autofocus = false;\n checked = false;\n disabled = false;\n invalid = false;\n label = '';\n name?: string;\n required = false;\n override title = '';\n value = 'on';\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 createRenderRoot(): this {\n return this;\n }\n\n override connectedCallback(): void {\n super.connectedCallback();\n const hostId = super.getAttribute('id');\n\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 override willUpdate(changedProperties: Map<PropertyKey, unknown>): void {\n if (changedProperties.has('value') && this.value == null) {\n this.value = 'on';\n }\n }\n\n private get nativeInput(): HTMLInputElement | null {\n return this.querySelector('[data-sp-checkbox-native]');\n }\n\n private get forwardedAriaLabel(): string | undefined {\n const value = this.ariaLabel?.trim();\n return value ? value : undefined;\n }\n\n private get forwardedAriaLabelledBy(): string | undefined {\n const value = this.ariaLabelledBy?.trim();\n return value ? value : undefined;\n }\n\n private get forwardedAriaDescribedBy(): string | undefined {\n const value = this.ariaDescribedBy?.trim();\n return value ? value : undefined;\n }\n\n private handleInput(event: Event): void {\n const input = event.currentTarget as HTMLInputElement;\n this.checked = input.checked;\n }\n\n private handleChange(event: Event): void {\n const input = event.currentTarget as HTMLInputElement;\n this.checked = input.checked;\n }\n\n override focus(options?: FocusOptions): void {\n this.nativeInput?.focus(options);\n }\n\n override blur(): void {\n this.nativeInput?.blur();\n }\n\n override render() {\n return html`\n <label>\n <input\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 ?autofocus=${this.autofocus}\n data-sp-checkbox-native\n ?checked=${this.checked}\n ?disabled=${this.disabled}\n id=${ifDefined(this.id || undefined)}\n name=${ifDefined(this.name)}\n ?required=${this.required}\n title=${ifDefined(this.title || undefined)}\n type='checkbox'\n value=${ifDefined(this.value || undefined)}\n @change=${this.handleChange}\n @input=${this.handleInput}\n />\n <span class='sp-label'>${this.label}</span>\n </label>\n `;\n }\n}\n\nexport function defineSpectreCheckbox(tagName = 'sp-checkbox'): typeof SpectreCheckboxElement {\n const existingElement = customElements.get(tagName);\n\n if (existingElement) {\n return existingElement as unknown as typeof SpectreCheckboxElement;\n }\n\n customElements.define(tagName, SpectreCheckboxElement);\n return SpectreCheckboxElement;\n}\n"]}
@@ -0,0 +1,179 @@
1
+ 'use strict';
2
+
3
+ var lit = require('lit');
4
+ var ifDefined_js = require('lit/directives/if-defined.js');
5
+
6
+ // src/components/fieldset/sp-fieldset.ts
7
+ var SpectreFieldsetElement = class extends lit.LitElement {
8
+ constructor() {
9
+ super(...arguments);
10
+ this.ariaLabel = null;
11
+ this.ariaLabelledBy = null;
12
+ this.ariaDescribedBy = null;
13
+ this.disabled = false;
14
+ this.legend = "";
15
+ this.projectedContent = [];
16
+ }
17
+ get id() {
18
+ return this._id ?? "";
19
+ }
20
+ set id(value) {
21
+ if ((this._id ?? "") === value) {
22
+ return;
23
+ }
24
+ this._id = value;
25
+ const host = this;
26
+ if (HTMLElement.prototype.hasAttribute.call(host, "id")) {
27
+ HTMLElement.prototype.removeAttribute.call(host, "id");
28
+ }
29
+ this.requestUpdate();
30
+ }
31
+ createRenderRoot() {
32
+ return this;
33
+ }
34
+ connectedCallback() {
35
+ super.connectedCallback();
36
+ const hostId = super.getAttribute("id");
37
+ if (hostId !== null) {
38
+ this.id = hostId;
39
+ }
40
+ this.syncProjectedContent();
41
+ this.startContentObserver();
42
+ }
43
+ disconnectedCallback() {
44
+ this.stopContentObserver();
45
+ super.disconnectedCallback();
46
+ }
47
+ getAttribute(qualifiedName) {
48
+ if (qualifiedName === "id") {
49
+ return this.id || null;
50
+ }
51
+ return super.getAttribute(qualifiedName);
52
+ }
53
+ hasAttribute(qualifiedName) {
54
+ if (qualifiedName === "id") {
55
+ return this.id !== "";
56
+ }
57
+ return super.hasAttribute(qualifiedName);
58
+ }
59
+ setAttribute(qualifiedName, value) {
60
+ if (qualifiedName === "id") {
61
+ this.id = value;
62
+ return;
63
+ }
64
+ super.setAttribute(qualifiedName, value);
65
+ }
66
+ removeAttribute(qualifiedName) {
67
+ if (qualifiedName === "id") {
68
+ this.id = "";
69
+ return;
70
+ }
71
+ super.removeAttribute(qualifiedName);
72
+ }
73
+ update(changedProperties) {
74
+ this.stopContentObserver();
75
+ super.update(changedProperties);
76
+ this.startContentObserver();
77
+ }
78
+ get nativeFieldset() {
79
+ return this.querySelector("[data-sp-fieldset-native]");
80
+ }
81
+ get forwardedAriaLabel() {
82
+ const value = this.ariaLabel?.trim();
83
+ return value ? value : void 0;
84
+ }
85
+ get forwardedAriaLabelledBy() {
86
+ const value = this.ariaLabelledBy?.trim();
87
+ return value ? value : void 0;
88
+ }
89
+ get forwardedAriaDescribedBy() {
90
+ const value = this.ariaDescribedBy?.trim();
91
+ return value ? value : void 0;
92
+ }
93
+ startContentObserver() {
94
+ if (this.contentObserver) {
95
+ return;
96
+ }
97
+ this.contentObserver = new MutationObserver((mutations) => {
98
+ const isInternalMovement = mutations.every((mutation) => {
99
+ return Array.from(mutation.removedNodes).every(
100
+ (node) => this.isInternalFieldsetNode(node) || this.contains(node)
101
+ ) && Array.from(mutation.addedNodes).every((node) => this.isInternalFieldsetNode(node));
102
+ });
103
+ if (isInternalMovement) {
104
+ return;
105
+ }
106
+ if (this.syncProjectedContent()) {
107
+ this.requestUpdate();
108
+ }
109
+ });
110
+ this.contentObserver.observe(this, { childList: true });
111
+ }
112
+ stopContentObserver() {
113
+ this.contentObserver?.disconnect();
114
+ this.contentObserver = void 0;
115
+ }
116
+ syncProjectedContent() {
117
+ const nextProjectedContent = [];
118
+ Array.from(this.childNodes).forEach((node) => {
119
+ if (this.isInternalFieldsetNode(node)) {
120
+ this.projectedContent.forEach((projectedNode) => {
121
+ if (projectedNode.parentNode !== this && this.contains(projectedNode)) {
122
+ nextProjectedContent.push(projectedNode);
123
+ }
124
+ });
125
+ return;
126
+ }
127
+ nextProjectedContent.push(node);
128
+ });
129
+ if (nextProjectedContent.length === this.projectedContent.length && nextProjectedContent.every((node, index) => node === this.projectedContent[index])) {
130
+ return false;
131
+ }
132
+ this.projectedContent = nextProjectedContent;
133
+ return true;
134
+ }
135
+ isInternalFieldsetNode(node) {
136
+ return node === this.nativeFieldset;
137
+ }
138
+ focus(options) {
139
+ this.nativeFieldset?.focus(options);
140
+ }
141
+ blur() {
142
+ this.nativeFieldset?.blur();
143
+ }
144
+ render() {
145
+ return lit.html`
146
+ <fieldset
147
+ aria-describedby=${ifDefined_js.ifDefined(this.forwardedAriaDescribedBy)}
148
+ aria-label=${ifDefined_js.ifDefined(this.forwardedAriaLabel)}
149
+ aria-labelledby=${ifDefined_js.ifDefined(this.forwardedAriaLabelledBy)}
150
+ data-sp-fieldset-native
151
+ ?disabled=${this.disabled}
152
+ id=${ifDefined_js.ifDefined(this.id || void 0)}
153
+ >
154
+ ${this.legend ? lit.html`<legend class='sp-label'>${this.legend}</legend>` : lit.nothing}
155
+ ${this.projectedContent.length > 0 ? this.projectedContent : lit.nothing}
156
+ </fieldset>
157
+ `;
158
+ }
159
+ };
160
+ SpectreFieldsetElement.properties = {
161
+ ariaLabel: { attribute: "aria-label", type: String },
162
+ ariaLabelledBy: { attribute: "aria-labelledby", type: String },
163
+ ariaDescribedBy: { attribute: "aria-describedby", type: String },
164
+ disabled: { type: Boolean, reflect: true },
165
+ legend: { type: String, reflect: true }
166
+ };
167
+ function defineSpectreFieldset(tagName = "sp-fieldset") {
168
+ const existingElement = customElements.get(tagName);
169
+ if (existingElement) {
170
+ return existingElement;
171
+ }
172
+ customElements.define(tagName, SpectreFieldsetElement);
173
+ return SpectreFieldsetElement;
174
+ }
175
+
176
+ exports.SpectreFieldsetElement = SpectreFieldsetElement;
177
+ exports.defineSpectreFieldset = defineSpectreFieldset;
178
+ //# sourceMappingURL=fieldset.cjs.map
179
+ //# sourceMappingURL=fieldset.cjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/components/fieldset/sp-fieldset.ts"],"names":["LitElement","html","ifDefined","nothing"],"mappings":"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","file":"fieldset.cjs","sourcesContent":["import { LitElement, html, nothing } from 'lit';\nimport { ifDefined } from 'lit/directives/if-defined.js';\n\nexport interface SpectreFieldsetProps {\n disabled?: boolean;\n legend?: string;\n}\n\nexport class SpectreFieldsetElement extends LitElement implements SpectreFieldsetProps {\n static properties = {\n ariaLabel: { attribute: 'aria-label', type: String },\n ariaLabelledBy: { attribute: 'aria-labelledby', type: String },\n ariaDescribedBy: { attribute: 'aria-describedby', type: String },\n disabled: { type: Boolean, reflect: true },\n legend: { type: String, reflect: true },\n };\n\n ariaLabel: string | null = null;\n ariaLabelledBy: string | null = null;\n ariaDescribedBy: string | null = null;\n disabled = false;\n legend = '';\n private _id?: string;\n private projectedContent: Node[] = [];\n private contentObserver?: MutationObserver | undefined;\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 createRenderRoot(): this {\n return this;\n }\n\n override connectedCallback(): void {\n super.connectedCallback();\n const hostId = super.getAttribute('id');\n\n if (hostId !== null) {\n this.id = hostId;\n }\n\n this.syncProjectedContent();\n this.startContentObserver();\n }\n\n override disconnectedCallback(): void {\n this.stopContentObserver();\n super.disconnectedCallback();\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 override update(changedProperties: Map<PropertyKey, unknown>): void {\n this.stopContentObserver();\n super.update(changedProperties);\n this.startContentObserver();\n }\n\n private get nativeFieldset(): HTMLFieldSetElement | null {\n return this.querySelector('[data-sp-fieldset-native]');\n }\n\n private get forwardedAriaLabel(): string | undefined {\n const value = this.ariaLabel?.trim();\n return value ? value : undefined;\n }\n\n private get forwardedAriaLabelledBy(): string | undefined {\n const value = this.ariaLabelledBy?.trim();\n return value ? value : undefined;\n }\n\n private get forwardedAriaDescribedBy(): string | undefined {\n const value = this.ariaDescribedBy?.trim();\n return value ? value : undefined;\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 return (\n Array.from(mutation.removedNodes).every(\n (node) => this.isInternalFieldsetNode(node) || this.contains(node),\n ) &&\n Array.from(mutation.addedNodes).every((node) => this.isInternalFieldsetNode(node))\n );\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 private syncProjectedContent(): boolean {\n const nextProjectedContent: Node[] = [];\n\n Array.from(this.childNodes).forEach((node) => {\n if (this.isInternalFieldsetNode(node)) {\n this.projectedContent.forEach((projectedNode) => {\n if (projectedNode.parentNode !== this && this.contains(projectedNode)) {\n nextProjectedContent.push(projectedNode);\n }\n });\n return;\n }\n\n nextProjectedContent.push(node);\n });\n\n if (\n nextProjectedContent.length === this.projectedContent.length &&\n nextProjectedContent.every((node, index) => node === this.projectedContent[index])\n ) {\n return false;\n }\n\n this.projectedContent = nextProjectedContent;\n return true;\n }\n\n private isInternalFieldsetNode(node: Node): boolean {\n return node === this.nativeFieldset;\n }\n\n override focus(options?: FocusOptions): void {\n this.nativeFieldset?.focus(options);\n }\n\n override blur(): void {\n this.nativeFieldset?.blur();\n }\n\n override render() {\n return html`\n <fieldset\n aria-describedby=${ifDefined(this.forwardedAriaDescribedBy)}\n aria-label=${ifDefined(this.forwardedAriaLabel)}\n aria-labelledby=${ifDefined(this.forwardedAriaLabelledBy)}\n data-sp-fieldset-native\n ?disabled=${this.disabled}\n id=${ifDefined(this.id || undefined)}\n >\n ${this.legend ? html`<legend class='sp-label'>${this.legend}</legend>` : nothing}\n ${this.projectedContent.length > 0 ? this.projectedContent : nothing}\n </fieldset>\n `;\n }\n}\n\nexport function defineSpectreFieldset(tagName = 'sp-fieldset'): typeof SpectreFieldsetElement {\n const existingElement = customElements.get(tagName);\n\n if (existingElement) {\n return existingElement as unknown as typeof SpectreFieldsetElement;\n }\n\n customElements.define(tagName, SpectreFieldsetElement);\n return SpectreFieldsetElement;\n}\n"]}
@@ -0,0 +1,63 @@
1
+ import * as lit_html from 'lit-html';
2
+ import { LitElement } from 'lit';
3
+
4
+ interface SpectreFieldsetProps {
5
+ disabled?: boolean;
6
+ legend?: string;
7
+ }
8
+ declare class SpectreFieldsetElement extends LitElement implements SpectreFieldsetProps {
9
+ static properties: {
10
+ ariaLabel: {
11
+ attribute: string;
12
+ type: StringConstructor;
13
+ };
14
+ ariaLabelledBy: {
15
+ attribute: string;
16
+ type: StringConstructor;
17
+ };
18
+ ariaDescribedBy: {
19
+ attribute: string;
20
+ type: StringConstructor;
21
+ };
22
+ disabled: {
23
+ type: BooleanConstructor;
24
+ reflect: boolean;
25
+ };
26
+ legend: {
27
+ type: StringConstructor;
28
+ reflect: boolean;
29
+ };
30
+ };
31
+ ariaLabel: string | null;
32
+ ariaLabelledBy: string | null;
33
+ ariaDescribedBy: string | null;
34
+ disabled: boolean;
35
+ legend: string;
36
+ private _id?;
37
+ private projectedContent;
38
+ private contentObserver?;
39
+ get id(): string;
40
+ set id(value: string);
41
+ createRenderRoot(): this;
42
+ connectedCallback(): void;
43
+ disconnectedCallback(): void;
44
+ getAttribute(qualifiedName: string): string | null;
45
+ hasAttribute(qualifiedName: string): boolean;
46
+ setAttribute(qualifiedName: string, value: string): void;
47
+ removeAttribute(qualifiedName: string): void;
48
+ protected update(changedProperties: Map<PropertyKey, unknown>): void;
49
+ private get nativeFieldset();
50
+ private get forwardedAriaLabel();
51
+ private get forwardedAriaLabelledBy();
52
+ private get forwardedAriaDescribedBy();
53
+ private startContentObserver;
54
+ private stopContentObserver;
55
+ private syncProjectedContent;
56
+ private isInternalFieldsetNode;
57
+ focus(options?: FocusOptions): void;
58
+ blur(): void;
59
+ render(): lit_html.TemplateResult<1>;
60
+ }
61
+ declare function defineSpectreFieldset(tagName?: string): typeof SpectreFieldsetElement;
62
+
63
+ export { SpectreFieldsetElement, type SpectreFieldsetProps, defineSpectreFieldset };