@phcdevworks/spectre-components 1.5.0 → 1.7.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 (184) hide show
  1. package/README.md +291 -2
  2. package/dist/alert.cjs +10 -3
  3. package/dist/alert.cjs.map +1 -1
  4. package/dist/alert.d.cts +4 -5
  5. package/dist/alert.d.ts +4 -5
  6. package/dist/alert.js +10 -3
  7. package/dist/alert.js.map +1 -1
  8. package/dist/avatar.cjs +11 -3
  9. package/dist/avatar.cjs.map +1 -1
  10. package/dist/avatar.d.cts +4 -5
  11. package/dist/avatar.d.ts +4 -5
  12. package/dist/avatar.js +11 -3
  13. package/dist/avatar.js.map +1 -1
  14. package/dist/badge.cjs +11 -3
  15. package/dist/badge.cjs.map +1 -1
  16. package/dist/badge.d.cts +4 -5
  17. package/dist/badge.d.ts +4 -5
  18. package/dist/badge.js +11 -3
  19. package/dist/badge.js.map +1 -1
  20. package/dist/{base-BRQ7QAAr.d.cts → base-D0s95V2v.d.cts} +2 -0
  21. package/dist/{base-BRQ7QAAr.d.ts → base-D0s95V2v.d.ts} +2 -0
  22. package/dist/button.cjs +14 -5
  23. package/dist/button.cjs.map +1 -1
  24. package/dist/button.d.cts +4 -5
  25. package/dist/button.d.ts +4 -5
  26. package/dist/button.js +14 -5
  27. package/dist/button.js.map +1 -1
  28. package/dist/card.cjs +11 -3
  29. package/dist/card.cjs.map +1 -1
  30. package/dist/card.d.cts +4 -5
  31. package/dist/card.d.ts +4 -5
  32. package/dist/card.js +11 -3
  33. package/dist/card.js.map +1 -1
  34. package/dist/checkbox.cjs +16 -5
  35. package/dist/checkbox.cjs.map +1 -1
  36. package/dist/checkbox.d.cts +2 -3
  37. package/dist/checkbox.d.ts +2 -3
  38. package/dist/checkbox.js +17 -6
  39. package/dist/checkbox.js.map +1 -1
  40. package/dist/container.cjs +421 -0
  41. package/dist/container.cjs.map +1 -0
  42. package/dist/container.d.cts +37 -0
  43. package/dist/container.d.ts +37 -0
  44. package/dist/container.js +417 -0
  45. package/dist/container.js.map +1 -0
  46. package/dist/dropdown.cjs +486 -0
  47. package/dist/dropdown.cjs.map +1 -0
  48. package/dist/dropdown.d.cts +69 -0
  49. package/dist/dropdown.d.ts +69 -0
  50. package/dist/dropdown.js +482 -0
  51. package/dist/dropdown.js.map +1 -0
  52. package/dist/fieldset.cjs +16 -7
  53. package/dist/fieldset.cjs.map +1 -1
  54. package/dist/fieldset.d.cts +2 -3
  55. package/dist/fieldset.d.ts +2 -3
  56. package/dist/fieldset.js +18 -9
  57. package/dist/fieldset.js.map +1 -1
  58. package/dist/form-DgzRhNmg.d.cts +46 -0
  59. package/dist/form-DgzRhNmg.d.ts +46 -0
  60. package/dist/grid.cjs +437 -0
  61. package/dist/grid.cjs.map +1 -0
  62. package/dist/grid.d.cts +42 -0
  63. package/dist/grid.d.ts +42 -0
  64. package/dist/grid.js +432 -0
  65. package/dist/grid.js.map +1 -0
  66. package/dist/icon-box.cjs +11 -3
  67. package/dist/icon-box.cjs.map +1 -1
  68. package/dist/icon-box.d.cts +4 -5
  69. package/dist/icon-box.d.ts +4 -5
  70. package/dist/icon-box.js +11 -3
  71. package/dist/icon-box.js.map +1 -1
  72. package/dist/index.cjs +1286 -66
  73. package/dist/index.cjs.map +1 -1
  74. package/dist/index.d.cts +13 -3
  75. package/dist/index.d.ts +13 -3
  76. package/dist/index.js +1259 -68
  77. package/dist/index.js.map +1 -1
  78. package/dist/input.cjs +10 -3
  79. package/dist/input.cjs.map +1 -1
  80. package/dist/input.d.cts +3 -4
  81. package/dist/input.d.ts +3 -4
  82. package/dist/input.js +10 -3
  83. package/dist/input.js.map +1 -1
  84. package/dist/label.cjs +17 -2
  85. package/dist/label.cjs.map +1 -1
  86. package/dist/label.d.cts +9 -3
  87. package/dist/label.d.ts +9 -3
  88. package/dist/label.js +18 -3
  89. package/dist/label.js.map +1 -1
  90. package/dist/modal.cjs +519 -0
  91. package/dist/modal.cjs.map +1 -0
  92. package/dist/modal.d.cts +52 -0
  93. package/dist/modal.d.ts +52 -0
  94. package/dist/modal.js +516 -0
  95. package/dist/modal.js.map +1 -0
  96. package/dist/nav.cjs +424 -0
  97. package/dist/nav.cjs.map +1 -0
  98. package/dist/nav.d.cts +45 -0
  99. package/dist/nav.d.ts +45 -0
  100. package/dist/nav.js +421 -0
  101. package/dist/nav.js.map +1 -0
  102. package/dist/pricing-card.cjs +11 -3
  103. package/dist/pricing-card.cjs.map +1 -1
  104. package/dist/pricing-card.d.cts +2 -3
  105. package/dist/pricing-card.d.ts +2 -3
  106. package/dist/pricing-card.js +11 -3
  107. package/dist/pricing-card.js.map +1 -1
  108. package/dist/{projectable-D6IDeKfr.d.ts → projectable-D9YCo9NY.d.ts} +1 -1
  109. package/dist/{projectable-Bx-IVk0w.d.cts → projectable-DLOn6eaW.d.cts} +1 -1
  110. package/dist/radio.cjs +16 -5
  111. package/dist/radio.cjs.map +1 -1
  112. package/dist/radio.d.cts +2 -3
  113. package/dist/radio.d.ts +2 -3
  114. package/dist/radio.js +17 -6
  115. package/dist/radio.js.map +1 -1
  116. package/dist/rating.cjs +19 -5
  117. package/dist/rating.cjs.map +1 -1
  118. package/dist/rating.d.cts +3 -4
  119. package/dist/rating.d.ts +3 -4
  120. package/dist/rating.js +19 -5
  121. package/dist/rating.js.map +1 -1
  122. package/dist/section.cjs +400 -0
  123. package/dist/section.cjs.map +1 -0
  124. package/dist/section.d.cts +25 -0
  125. package/dist/section.d.ts +25 -0
  126. package/dist/section.js +397 -0
  127. package/dist/section.js.map +1 -0
  128. package/dist/select.cjs +14 -5
  129. package/dist/select.cjs.map +1 -1
  130. package/dist/select.d.cts +3 -4
  131. package/dist/select.d.ts +3 -4
  132. package/dist/select.js +15 -6
  133. package/dist/select.js.map +1 -1
  134. package/dist/sidebar.cjs +481 -0
  135. package/dist/sidebar.cjs.map +1 -0
  136. package/dist/sidebar.d.cts +50 -0
  137. package/dist/sidebar.d.ts +50 -0
  138. package/dist/sidebar.js +478 -0
  139. package/dist/sidebar.js.map +1 -0
  140. package/dist/spinner.cjs +10 -0
  141. package/dist/spinner.cjs.map +1 -1
  142. package/dist/spinner.d.cts +3 -3
  143. package/dist/spinner.d.ts +3 -3
  144. package/dist/spinner.js +10 -0
  145. package/dist/spinner.js.map +1 -1
  146. package/dist/stack.cjs +443 -0
  147. package/dist/stack.cjs.map +1 -0
  148. package/dist/stack.d.cts +48 -0
  149. package/dist/stack.d.ts +48 -0
  150. package/dist/stack.js +437 -0
  151. package/dist/stack.js.map +1 -0
  152. package/dist/tag.cjs +11 -3
  153. package/dist/tag.cjs.map +1 -1
  154. package/dist/tag.d.cts +4 -5
  155. package/dist/tag.d.ts +4 -5
  156. package/dist/tag.js +11 -3
  157. package/dist/tag.js.map +1 -1
  158. package/dist/testimonial.cjs +11 -3
  159. package/dist/testimonial.cjs.map +1 -1
  160. package/dist/testimonial.d.cts +4 -5
  161. package/dist/testimonial.d.ts +4 -5
  162. package/dist/testimonial.js +11 -3
  163. package/dist/testimonial.js.map +1 -1
  164. package/dist/textarea.cjs +14 -5
  165. package/dist/textarea.cjs.map +1 -1
  166. package/dist/textarea.d.cts +2 -3
  167. package/dist/textarea.d.ts +2 -3
  168. package/dist/textarea.js +15 -6
  169. package/dist/textarea.js.map +1 -1
  170. package/dist/toast.cjs +475 -0
  171. package/dist/toast.cjs.map +1 -0
  172. package/dist/toast.d.cts +68 -0
  173. package/dist/toast.d.ts +68 -0
  174. package/dist/toast.js +471 -0
  175. package/dist/toast.js.map +1 -0
  176. package/dist/tooltip.cjs +444 -0
  177. package/dist/tooltip.cjs.map +1 -0
  178. package/dist/tooltip.d.cts +50 -0
  179. package/dist/tooltip.d.ts +50 -0
  180. package/dist/tooltip.js +440 -0
  181. package/dist/tooltip.js.map +1 -0
  182. package/package.json +71 -16
  183. package/dist/form-BumNzIay.d.cts +0 -28
  184. package/dist/form-BumNzIay.d.ts +0 -28
@@ -0,0 +1,440 @@
1
+ import { getTooltipClasses } from '@phcdevworks/spectre-ui';
2
+ import { LitElement, nothing, html } from 'lit';
3
+ import { ifDefined } from 'lit/directives/if-defined.js';
4
+
5
+ // src/utils/form.ts
6
+ var spectreTooltipPlacements = [
7
+ "top",
8
+ "bottom",
9
+ "left",
10
+ "right"
11
+ ];
12
+ function isTooltipPlacement(value) {
13
+ return spectreTooltipPlacements.includes(
14
+ value
15
+ );
16
+ }
17
+ var SpectreBaseElement = class extends LitElement {
18
+ constructor() {
19
+ super(...arguments);
20
+ this._ariaLabel = null;
21
+ this._ariaLabelledBy = null;
22
+ this._ariaDescribedBy = null;
23
+ this._autocapitalize = "";
24
+ this._autofocus = false;
25
+ this._spellcheck = null;
26
+ this._title = "";
27
+ this._id = "";
28
+ }
29
+ get ariaLabel() {
30
+ return this._ariaLabel;
31
+ }
32
+ set ariaLabel(value) {
33
+ if (this._ariaLabel === value) {
34
+ return;
35
+ }
36
+ this._ariaLabel = value;
37
+ this._removeHostAttribute("aria-label");
38
+ this.requestUpdate();
39
+ }
40
+ get ariaLabelledBy() {
41
+ return this._ariaLabelledBy;
42
+ }
43
+ set ariaLabelledBy(value) {
44
+ if (this._ariaLabelledBy === value) {
45
+ return;
46
+ }
47
+ this._ariaLabelledBy = value;
48
+ this._removeHostAttribute("aria-labelledby");
49
+ this.requestUpdate();
50
+ }
51
+ get ariaDescribedBy() {
52
+ return this._ariaDescribedBy;
53
+ }
54
+ set ariaDescribedBy(value) {
55
+ if (this._ariaDescribedBy === value) {
56
+ return;
57
+ }
58
+ this._ariaDescribedBy = value;
59
+ this._removeHostAttribute("aria-describedby");
60
+ this.requestUpdate();
61
+ }
62
+ get autocapitalize() {
63
+ return this._autocapitalize;
64
+ }
65
+ set autocapitalize(value) {
66
+ const normalizedValue = value ?? "";
67
+ if (this._autocapitalize === normalizedValue) {
68
+ return;
69
+ }
70
+ this._autocapitalize = normalizedValue;
71
+ this._removeHostAttribute("autocapitalize");
72
+ this.requestUpdate();
73
+ }
74
+ get spellcheck() {
75
+ return this._spellcheck ?? super.spellcheck;
76
+ }
77
+ set spellcheck(value) {
78
+ if (this._spellcheck === value) {
79
+ return;
80
+ }
81
+ this._spellcheck = value ?? null;
82
+ this._removeHostAttribute("spellcheck");
83
+ this.requestUpdate();
84
+ }
85
+ get title() {
86
+ return this._title;
87
+ }
88
+ set title(value) {
89
+ const normalizedValue = value ?? "";
90
+ if (this._title === normalizedValue) {
91
+ return;
92
+ }
93
+ this._title = normalizedValue;
94
+ this._removeHostAttribute("title");
95
+ this.requestUpdate();
96
+ }
97
+ get id() {
98
+ return this._id;
99
+ }
100
+ set id(value) {
101
+ const normalizedValue = value ?? "";
102
+ if (this._id === normalizedValue) {
103
+ return;
104
+ }
105
+ this._id = normalizedValue;
106
+ this._removeHostAttribute("id");
107
+ this.requestUpdate();
108
+ }
109
+ get autofocus() {
110
+ return this._autofocus;
111
+ }
112
+ set autofocus(value) {
113
+ const normalizedValue = !!value;
114
+ if (this._autofocus === normalizedValue) {
115
+ return;
116
+ }
117
+ this._autofocus = normalizedValue;
118
+ this._removeHostAttribute("autofocus");
119
+ this.requestUpdate();
120
+ }
121
+ // Spectre components intentionally render in light DOM so the global
122
+ // `@phcdevworks/spectre-ui` styling contract can apply directly.
123
+ createRenderRoot() {
124
+ return this;
125
+ }
126
+ connectedCallback() {
127
+ super.connectedCallback();
128
+ const proxiedAttributes = [
129
+ "id",
130
+ "title",
131
+ "autocapitalize",
132
+ "autofocus",
133
+ "spellcheck",
134
+ "aria-label",
135
+ "aria-labelledby",
136
+ "aria-describedby"
137
+ ];
138
+ proxiedAttributes.forEach((attr) => {
139
+ const value = super.getAttribute(attr);
140
+ if (value !== null) {
141
+ this.setAttribute(attr, value);
142
+ }
143
+ });
144
+ }
145
+ getAttribute(qualifiedName) {
146
+ switch (qualifiedName) {
147
+ case "id":
148
+ return this.id || null;
149
+ case "title":
150
+ return this.title || null;
151
+ case "autocapitalize":
152
+ return this.autocapitalize || null;
153
+ case "autofocus":
154
+ return this.autofocus ? "" : null;
155
+ case "spellcheck":
156
+ return this._spellcheck !== null ? String(this._spellcheck) : null;
157
+ case "aria-label":
158
+ return this.ariaLabel;
159
+ case "aria-labelledby":
160
+ return this.ariaLabelledBy;
161
+ case "aria-describedby":
162
+ return this.ariaDescribedBy;
163
+ default:
164
+ return super.getAttribute(qualifiedName);
165
+ }
166
+ }
167
+ hasAttribute(qualifiedName) {
168
+ switch (qualifiedName) {
169
+ case "id":
170
+ return this.id !== "";
171
+ case "title":
172
+ return this.title !== "";
173
+ case "autocapitalize":
174
+ return this.autocapitalize !== "";
175
+ case "autofocus":
176
+ return this.autofocus;
177
+ case "spellcheck":
178
+ return this._spellcheck !== null;
179
+ case "aria-label":
180
+ return this.ariaLabel !== null;
181
+ case "aria-labelledby":
182
+ return this.ariaLabelledBy !== null;
183
+ case "aria-describedby":
184
+ return this.ariaDescribedBy !== null;
185
+ default:
186
+ return super.hasAttribute(qualifiedName);
187
+ }
188
+ }
189
+ setAttribute(qualifiedName, value) {
190
+ switch (qualifiedName) {
191
+ case "id":
192
+ this.id = value;
193
+ break;
194
+ case "title":
195
+ this.title = value;
196
+ break;
197
+ case "autocapitalize":
198
+ this.autocapitalize = value;
199
+ break;
200
+ case "autofocus":
201
+ this.autofocus = true;
202
+ break;
203
+ case "spellcheck":
204
+ this.spellcheck = value !== "false";
205
+ break;
206
+ case "aria-label":
207
+ this.ariaLabel = value;
208
+ break;
209
+ case "aria-labelledby":
210
+ this.ariaLabelledBy = value;
211
+ break;
212
+ case "aria-describedby":
213
+ this.ariaDescribedBy = value;
214
+ break;
215
+ default:
216
+ super.setAttribute(qualifiedName, value);
217
+ }
218
+ }
219
+ removeAttribute(qualifiedName) {
220
+ switch (qualifiedName) {
221
+ case "id":
222
+ this.id = "";
223
+ break;
224
+ case "title":
225
+ this.title = "";
226
+ break;
227
+ case "autocapitalize":
228
+ this.autocapitalize = "";
229
+ break;
230
+ case "autofocus":
231
+ this.autofocus = false;
232
+ break;
233
+ case "spellcheck":
234
+ this.spellcheck = null;
235
+ break;
236
+ case "aria-label":
237
+ this.ariaLabel = null;
238
+ break;
239
+ case "aria-labelledby":
240
+ this.ariaLabelledBy = null;
241
+ break;
242
+ case "aria-describedby":
243
+ this.ariaDescribedBy = null;
244
+ break;
245
+ default:
246
+ super.removeAttribute(qualifiedName);
247
+ }
248
+ }
249
+ _removeHostAttribute(name) {
250
+ const host = this;
251
+ if (HTMLElement.prototype.hasAttribute.call(host, name)) {
252
+ HTMLElement.prototype.removeAttribute.call(host, name);
253
+ }
254
+ }
255
+ get forwardedAriaLabel() {
256
+ const value = this.ariaLabel?.trim();
257
+ return value ? value : void 0;
258
+ }
259
+ get forwardedAriaLabelledBy() {
260
+ const value = this.ariaLabelledBy?.trim();
261
+ return value ? value : void 0;
262
+ }
263
+ get forwardedAriaDescribedBy() {
264
+ const value = this.ariaDescribedBy?.trim();
265
+ return value ? value : void 0;
266
+ }
267
+ // Subclasses that expose `disabled`/`loading` properties get this disabled
268
+ // calculation for free instead of redeclaring it per component.
269
+ get isDisabled() {
270
+ const self = this;
271
+ return (self.disabled ?? false) || (self.loading ?? false);
272
+ }
273
+ // Subclasses get this for free instead of redeclaring it per component.
274
+ get hasForwardedLabel() {
275
+ return Boolean(this.forwardedAriaLabel || this.forwardedAriaLabelledBy);
276
+ }
277
+ };
278
+ SpectreBaseElement.properties = {};
279
+
280
+ // src/utils/dom.ts
281
+ function hasMeaningfulContent(nodes) {
282
+ return nodes.some((node) => {
283
+ if (node.nodeType === Node.ELEMENT_NODE) {
284
+ return true;
285
+ }
286
+ if (node.nodeType === Node.TEXT_NODE) {
287
+ return (node.textContent?.trim().length ?? 0) > 0;
288
+ }
289
+ return false;
290
+ });
291
+ }
292
+ var SpectreTooltipElement = class extends SpectreBaseElement {
293
+ constructor() {
294
+ super(...arguments);
295
+ this.placement = "top";
296
+ this.visible = false;
297
+ this.triggerContent = [];
298
+ this.tooltipContent = [];
299
+ }
300
+ get id() {
301
+ return super.id;
302
+ }
303
+ set id(value) {
304
+ super.id = value;
305
+ }
306
+ get title() {
307
+ return super.title;
308
+ }
309
+ set title(value) {
310
+ super.title = value;
311
+ }
312
+ isInternalNode(node) {
313
+ if (node.nodeType !== Node.ELEMENT_NODE) {
314
+ return false;
315
+ }
316
+ const el = node;
317
+ return el.hasAttribute("data-sp-tooltip-native") || el.hasAttribute("data-sp-tooltip-trigger");
318
+ }
319
+ syncProjectedContent() {
320
+ const nextTooltipContent = [];
321
+ const nextTriggerContent = [];
322
+ this.childNodes.forEach((node) => {
323
+ if (this.isInternalNode(node)) {
324
+ return;
325
+ }
326
+ const isTooltipSlot = node.nodeType === Node.ELEMENT_NODE && node.getAttribute("slot") === "tooltip";
327
+ if (isTooltipSlot) {
328
+ nextTooltipContent.push(node);
329
+ } else {
330
+ nextTriggerContent.push(node);
331
+ }
332
+ });
333
+ const changed = nextTooltipContent.length !== this.tooltipContent.length || nextTooltipContent.some((n, i) => n !== this.tooltipContent[i]) || nextTriggerContent.length !== this.triggerContent.length || nextTriggerContent.some((n, i) => n !== this.triggerContent[i]);
334
+ if (changed) {
335
+ this.tooltipContent = nextTooltipContent;
336
+ this.triggerContent = nextTriggerContent;
337
+ }
338
+ return changed;
339
+ }
340
+ get hasTooltipContent() {
341
+ return hasMeaningfulContent(this.tooltipContent);
342
+ }
343
+ connectedCallback() {
344
+ var _a, _b;
345
+ super.connectedCallback();
346
+ this.syncProjectedContent();
347
+ this.startContentObserver();
348
+ (_a = this.style).position || (_a.position = "relative");
349
+ (_b = this.style).display || (_b.display = "inline-block");
350
+ }
351
+ disconnectedCallback() {
352
+ this.stopContentObserver();
353
+ super.disconnectedCallback();
354
+ }
355
+ update(changedProperties) {
356
+ this.stopContentObserver();
357
+ super.update(changedProperties);
358
+ this.startContentObserver();
359
+ }
360
+ startContentObserver() {
361
+ if (this.contentObserver) {
362
+ return;
363
+ }
364
+ this.contentObserver = new MutationObserver(() => {
365
+ if (this.syncProjectedContent()) {
366
+ this.requestUpdate();
367
+ }
368
+ });
369
+ this.contentObserver.observe(this, { childList: true });
370
+ }
371
+ stopContentObserver() {
372
+ this.contentObserver?.disconnect();
373
+ this.contentObserver = void 0;
374
+ }
375
+ willUpdate(changedProperties) {
376
+ if (changedProperties.has("placement") && (this.placement == null || !isTooltipPlacement(this.placement))) {
377
+ this.placement = "top";
378
+ }
379
+ if (changedProperties.has("visible") && this.visible == null) {
380
+ this.visible = false;
381
+ }
382
+ }
383
+ show() {
384
+ if (this.visible) {
385
+ return;
386
+ }
387
+ this.visible = true;
388
+ this.dispatchEvent(new CustomEvent("sp-show", { bubbles: true }));
389
+ }
390
+ hide() {
391
+ if (!this.visible) {
392
+ return;
393
+ }
394
+ this.visible = false;
395
+ this.dispatchEvent(new CustomEvent("sp-hide", { bubbles: true }));
396
+ }
397
+ get tooltipClasses() {
398
+ return getTooltipClasses({
399
+ placement: this.placement,
400
+ visible: this.visible ?? false
401
+ });
402
+ }
403
+ render() {
404
+ return html`<span
405
+ data-sp-tooltip-trigger
406
+ @focusin="${() => this.show()}"
407
+ @focusout="${() => this.hide()}"
408
+ @mouseenter="${() => this.show()}"
409
+ @mouseleave="${() => this.hide()}"
410
+ >
411
+ ${this.triggerContent}
412
+ </span>
413
+ <span
414
+ aria-label="${ifDefined(this.forwardedAriaLabel)}"
415
+ class="${this.tooltipClasses}"
416
+ data-sp-tooltip-native
417
+ id="${ifDefined(this.id || void 0)}"
418
+ role="tooltip"
419
+ title="${ifDefined(this.title || void 0)}"
420
+ >
421
+ ${this.hasTooltipContent ? this.tooltipContent : nothing}
422
+ </span>`;
423
+ }
424
+ };
425
+ SpectreTooltipElement.properties = {
426
+ placement: { type: String, reflect: true },
427
+ visible: { type: Boolean, reflect: true }
428
+ };
429
+ function defineSpectreTooltip(tagName = "sp-tooltip") {
430
+ const existingElement = customElements.get(tagName);
431
+ if (existingElement) {
432
+ return existingElement;
433
+ }
434
+ customElements.define(tagName, SpectreTooltipElement);
435
+ return SpectreTooltipElement;
436
+ }
437
+
438
+ export { SpectreTooltipElement, defineSpectreTooltip, spectreTooltipPlacements };
439
+ //# sourceMappingURL=tooltip.js.map
440
+ //# sourceMappingURL=tooltip.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/utils/form.ts","../src/utils/base.ts","../src/utils/dom.ts","../src/components/tooltip/sp-tooltip.ts"],"names":[],"mappings":"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","file":"tooltip.js","sourcesContent":["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 const spectreBadgeVariants = [\n 'primary',\n 'secondary',\n 'success',\n 'warning',\n 'danger',\n 'neutral',\n 'info',\n 'ghost',\n 'outline',\n 'accent',\n 'cta'\n] as const\n\nexport type SpectreBadgeVariant = (typeof spectreBadgeVariants)[number]\n\nexport function isBadgeVariant(value: unknown): value is SpectreBadgeVariant {\n return (spectreBadgeVariants as readonly string[]).includes(value as string)\n}\n\nexport const spectreAlertVariants = [\n 'info',\n 'success',\n 'warning',\n 'danger',\n 'neutral'\n] as const\n\nexport type SpectreAlertVariant = (typeof spectreAlertVariants)[number]\n\nexport function isAlertVariant(value: unknown): value is SpectreAlertVariant {\n return (spectreAlertVariants as readonly string[]).includes(value as string)\n}\n\nexport const spectreCardVariants = [\n 'elevated',\n 'flat',\n 'outline',\n 'ghost'\n] as const\n\nexport type SpectreCardVariant = (typeof spectreCardVariants)[number]\n\nexport function isCardVariant(value: unknown): value is SpectreCardVariant {\n return (spectreCardVariants as readonly string[]).includes(value as string)\n}\n\nexport const spectreIconBoxVariants = [\n 'primary',\n 'secondary',\n 'success',\n 'warning',\n 'danger',\n 'info',\n 'neutral',\n 'ghost',\n 'accent',\n 'cta',\n 'outline'\n] as const\n\nexport type SpectreIconBoxVariant = (typeof spectreIconBoxVariants)[number]\n\nexport function isIconBoxVariant(\n value: unknown\n): value is SpectreIconBoxVariant {\n return (spectreIconBoxVariants as readonly string[]).includes(value as string)\n}\n\nexport const spectreTestimonialVariants = [\n 'elevated',\n 'flat',\n 'outline',\n 'ghost'\n] as const\n\nexport type SpectreTestimonialVariant =\n (typeof spectreTestimonialVariants)[number]\n\nexport function isTestimonialVariant(\n value: unknown\n): value is SpectreTestimonialVariant {\n return (spectreTestimonialVariants as readonly string[]).includes(\n value as string\n )\n}\n\nexport const spectreSpinnerVariants = [\n 'primary',\n 'secondary',\n 'success',\n 'warning',\n 'danger',\n 'info',\n 'neutral',\n 'accent',\n 'cta'\n] as const\n\nexport type SpectreSpinnerVariant = (typeof spectreSpinnerVariants)[number]\n\nexport function isSpinnerVariant(\n value: unknown\n): value is SpectreSpinnerVariant {\n return (spectreSpinnerVariants as readonly string[]).includes(value as string)\n}\n\nexport const spectreTagVariants = [\n 'default',\n 'primary',\n 'secondary',\n 'success',\n 'warning',\n 'danger',\n 'info',\n 'neutral',\n 'accent',\n 'cta',\n 'outline',\n 'ghost'\n] as const\n\nexport type SpectreTagVariant = (typeof spectreTagVariants)[number]\n\nexport function isTagVariant(value: unknown): value is SpectreTagVariant {\n return (spectreTagVariants as readonly string[]).includes(value as string)\n}\n\nexport const spectreAvatarSizes = ['xs', 'sm', 'md', 'lg', 'xl'] as const\n\nexport type SpectreAvatarSize = (typeof spectreAvatarSizes)[number]\n\nexport function isAvatarSize(value: unknown): value is SpectreAvatarSize {\n return (spectreAvatarSizes as readonly string[]).includes(value as string)\n}\n\nexport const spectreAvatarShapes = ['circle', 'square'] as const\n\nexport type SpectreAvatarShape = (typeof spectreAvatarShapes)[number]\n\nexport function isAvatarShape(value: unknown): value is SpectreAvatarShape {\n return (spectreAvatarShapes as readonly string[]).includes(value as string)\n}\n\nexport const spectreContainerMaxWidths = ['prose'] as const\n\nexport type SpectreContainerMaxWidth =\n (typeof spectreContainerMaxWidths)[number]\n\nexport function isContainerMaxWidth(\n value: unknown\n): value is SpectreContainerMaxWidth {\n return (spectreContainerMaxWidths as readonly string[]).includes(\n value as string\n )\n}\n\nexport const spectreGridColumns = [1, 2, 3, 4, 6, 12] as const\n\nexport type SpectreGridColumns = (typeof spectreGridColumns)[number]\n\nexport function isGridColumns(value: unknown): value is SpectreGridColumns {\n return (spectreGridColumns as readonly number[]).includes(value as number)\n}\n\nexport const spectreGridGaps = ['sm', 'md', 'lg'] as const\n\nexport type SpectreGridGap = (typeof spectreGridGaps)[number]\n\nexport function isGridGap(value: unknown): value is SpectreGridGap {\n return (spectreGridGaps as readonly string[]).includes(value as string)\n}\n\nexport const spectreStackDirections = ['vertical', 'horizontal'] as const\n\nexport type SpectreStackDirection = (typeof spectreStackDirections)[number]\n\nexport function isStackDirection(\n value: unknown\n): value is SpectreStackDirection {\n return (spectreStackDirections as readonly string[]).includes(\n value as string\n )\n}\n\nexport const spectreStackBases = ['sidebar'] as const\n\nexport type SpectreStackBasis = (typeof spectreStackBases)[number]\n\nexport function isStackBasis(value: unknown): value is SpectreStackBasis {\n return (spectreStackBases as readonly string[]).includes(value as string)\n}\n\nexport const spectreStackAligns = ['center', 'stretch'] as const\n\nexport type SpectreStackAlign = (typeof spectreStackAligns)[number]\n\nexport function isStackAlign(value: unknown): value is SpectreStackAlign {\n return (spectreStackAligns as readonly string[]).includes(value as string)\n}\n\nexport const spectreDropdownPlacements = [\n 'bottom-start',\n 'bottom-end',\n 'top-start',\n 'top-end'\n] as const\n\nexport type SpectreDropdownPlacement =\n (typeof spectreDropdownPlacements)[number]\n\nexport function isDropdownPlacement(\n value: unknown\n): value is SpectreDropdownPlacement {\n return (spectreDropdownPlacements as readonly string[]).includes(\n value as string\n )\n}\n\nexport const spectreToastVariants = [\n 'info',\n 'success',\n 'warning',\n 'danger'\n] as const\n\nexport type SpectreToastVariant = (typeof spectreToastVariants)[number]\n\nexport function isToastVariant(value: unknown): value is SpectreToastVariant {\n return (spectreToastVariants as readonly string[]).includes(value as string)\n}\n\nexport const spectreTooltipPlacements = [\n 'top',\n 'bottom',\n 'left',\n 'right'\n] as const\n\nexport type SpectreTooltipPlacement = (typeof spectreTooltipPlacements)[number]\n\nexport function isTooltipPlacement(\n value: unknown\n): value is SpectreTooltipPlacement {\n return (spectreTooltipPlacements as readonly string[]).includes(\n value as string\n )\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 { 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 _autofocus = false\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 override get autofocus(): boolean {\n return this._autofocus\n }\n\n override set autofocus(value: boolean | undefined | null) {\n const normalizedValue = !!value\n if (this._autofocus === normalizedValue) {\n return\n }\n this._autofocus = normalizedValue\n this._removeHostAttribute('autofocus')\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 'autofocus',\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 'autofocus':\n return this.autofocus ? '' : 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 'autofocus':\n return this.autofocus\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 'autofocus':\n this.autofocus = true\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 'autofocus':\n this.autofocus = false\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 // Subclasses that expose `disabled`/`loading` properties get this disabled\n // calculation for free instead of redeclaring it per component.\n protected get isDisabled(): boolean {\n const self = this as unknown as { disabled?: boolean; loading?: boolean }\n return (self.disabled ?? false) || (self.loading ?? false)\n }\n\n // Subclasses get this for free instead of redeclaring it per component.\n protected get hasForwardedLabel(): boolean {\n return Boolean(this.forwardedAriaLabel || this.forwardedAriaLabelledBy)\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 { html, nothing } from 'lit'\nimport { ifDefined } from 'lit/directives/if-defined.js'\n\nimport { SpectreBaseElement } from '../../utils/base'\nimport { hasMeaningfulContent } from '../../utils/dom'\nimport {\n isTooltipPlacement,\n type SpectreTooltipPlacement\n} from '../../utils/form'\n\nimport { getTooltipClasses } from '@phcdevworks/spectre-ui'\n\nexport interface SpectreTooltipProps {\n ariaLabel?: string | null\n id?: string | null | undefined\n placement?: SpectreTooltipPlacement | undefined\n title?: string | null | undefined\n visible?: boolean | undefined\n}\n\nexport class SpectreTooltipElement\n extends SpectreBaseElement\n implements SpectreTooltipProps\n{\n static properties = {\n placement: { type: String, reflect: true },\n visible: { type: Boolean, reflect: true }\n }\n\n placement: SpectreTooltipPlacement | undefined = 'top'\n visible: boolean | undefined = false\n\n private triggerContent: Node[] = []\n private tooltipContent: Node[] = []\n private contentObserver?: MutationObserver | undefined\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 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 private isInternalNode(node: Node): boolean {\n if (node.nodeType !== Node.ELEMENT_NODE) {\n return false\n }\n const el = node as Element\n return (\n el.hasAttribute('data-sp-tooltip-native') ||\n el.hasAttribute('data-sp-tooltip-trigger')\n )\n }\n\n private syncProjectedContent(): boolean {\n const nextTooltipContent: Node[] = []\n const nextTriggerContent: Node[] = []\n\n this.childNodes.forEach((node) => {\n if (this.isInternalNode(node)) {\n return\n }\n const isTooltipSlot =\n node.nodeType === Node.ELEMENT_NODE &&\n (node as Element).getAttribute('slot') === 'tooltip'\n if (isTooltipSlot) {\n nextTooltipContent.push(node)\n } else {\n nextTriggerContent.push(node)\n }\n })\n\n const changed =\n nextTooltipContent.length !== this.tooltipContent.length ||\n nextTooltipContent.some((n, i) => n !== this.tooltipContent[i]) ||\n nextTriggerContent.length !== this.triggerContent.length ||\n nextTriggerContent.some((n, i) => n !== this.triggerContent[i])\n\n if (changed) {\n this.tooltipContent = nextTooltipContent\n this.triggerContent = nextTriggerContent\n }\n\n return changed\n }\n\n private get hasTooltipContent(): boolean {\n return hasMeaningfulContent(this.tooltipContent)\n }\n\n override connectedCallback(): void {\n super.connectedCallback()\n this.syncProjectedContent()\n this.startContentObserver()\n this.style.position ||= 'relative'\n this.style.display ||= 'inline-block'\n }\n\n override disconnectedCallback(): void {\n this.stopContentObserver()\n super.disconnectedCallback()\n }\n\n protected override update(\n changedProperties: Map<PropertyKey, unknown>\n ): void {\n this.stopContentObserver()\n super.update(changedProperties)\n this.startContentObserver()\n }\n\n private startContentObserver(): void {\n if (this.contentObserver) {\n return\n }\n this.contentObserver = new MutationObserver(() => {\n if (this.syncProjectedContent()) {\n this.requestUpdate()\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 protected override willUpdate(\n changedProperties: Map<PropertyKey, unknown>\n ): void {\n if (\n changedProperties.has('placement') &&\n (this.placement == null || !isTooltipPlacement(this.placement))\n ) {\n this.placement = 'top'\n }\n if (changedProperties.has('visible') && this.visible == null) {\n this.visible = false\n }\n }\n\n private show(): void {\n if (this.visible) {\n return\n }\n this.visible = true\n this.dispatchEvent(new CustomEvent('sp-show', { bubbles: true }))\n }\n\n private hide(): void {\n if (!this.visible) {\n return\n }\n this.visible = false\n this.dispatchEvent(new CustomEvent('sp-hide', { bubbles: true }))\n }\n\n private get tooltipClasses(): string {\n return getTooltipClasses({\n placement: this.placement as SpectreTooltipPlacement,\n visible: this.visible ?? false\n })\n }\n\n override render() {\n return html`<span\n data-sp-tooltip-trigger\n @focusin=\"${() => this.show()}\"\n @focusout=\"${() => this.hide()}\"\n @mouseenter=\"${() => this.show()}\"\n @mouseleave=\"${() => this.hide()}\"\n >\n ${this.triggerContent}\n </span>\n <span\n aria-label=\"${ifDefined(this.forwardedAriaLabel)}\"\n class=\"${this.tooltipClasses}\"\n data-sp-tooltip-native\n id=\"${ifDefined(this.id || undefined)}\"\n role=\"tooltip\"\n title=\"${ifDefined(this.title || undefined)}\"\n >\n ${this.hasTooltipContent ? this.tooltipContent : nothing}\n </span>`\n }\n}\n\nexport function defineSpectreTooltip(\n tagName = 'sp-tooltip'\n): typeof SpectreTooltipElement {\n const existingElement = customElements.get(tagName)\n\n if (existingElement) {\n return existingElement as unknown as typeof SpectreTooltipElement\n }\n\n customElements.define(tagName, SpectreTooltipElement)\n return SpectreTooltipElement\n}\n"]}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@phcdevworks/spectre-components",
3
- "version": "1.5.0",
3
+ "version": "1.7.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",
@@ -33,7 +33,7 @@
33
33
  "node": "^22.13.0 || >=24.0.0"
34
34
  },
35
35
  "type": "module",
36
- "packageManager": "npm@11.16.0",
36
+ "packageManager": "npm@11.18.0",
37
37
  "main": "./dist/index.cjs",
38
38
  "module": "./dist/index.js",
39
39
  "types": "./dist/index.d.ts",
@@ -132,6 +132,56 @@
132
132
  "types": "./dist/pricing-card.d.ts",
133
133
  "import": "./dist/pricing-card.js",
134
134
  "require": "./dist/pricing-card.cjs"
135
+ },
136
+ "./container": {
137
+ "types": "./dist/container.d.ts",
138
+ "import": "./dist/container.js",
139
+ "require": "./dist/container.cjs"
140
+ },
141
+ "./grid": {
142
+ "types": "./dist/grid.d.ts",
143
+ "import": "./dist/grid.js",
144
+ "require": "./dist/grid.cjs"
145
+ },
146
+ "./section": {
147
+ "types": "./dist/section.d.ts",
148
+ "import": "./dist/section.js",
149
+ "require": "./dist/section.cjs"
150
+ },
151
+ "./stack": {
152
+ "types": "./dist/stack.d.ts",
153
+ "import": "./dist/stack.js",
154
+ "require": "./dist/stack.cjs"
155
+ },
156
+ "./dropdown": {
157
+ "types": "./dist/dropdown.d.ts",
158
+ "import": "./dist/dropdown.js",
159
+ "require": "./dist/dropdown.cjs"
160
+ },
161
+ "./modal": {
162
+ "types": "./dist/modal.d.ts",
163
+ "import": "./dist/modal.js",
164
+ "require": "./dist/modal.cjs"
165
+ },
166
+ "./nav": {
167
+ "types": "./dist/nav.d.ts",
168
+ "import": "./dist/nav.js",
169
+ "require": "./dist/nav.cjs"
170
+ },
171
+ "./sidebar": {
172
+ "types": "./dist/sidebar.d.ts",
173
+ "import": "./dist/sidebar.js",
174
+ "require": "./dist/sidebar.cjs"
175
+ },
176
+ "./toast": {
177
+ "types": "./dist/toast.d.ts",
178
+ "import": "./dist/toast.js",
179
+ "require": "./dist/toast.cjs"
180
+ },
181
+ "./tooltip": {
182
+ "types": "./dist/tooltip.d.ts",
183
+ "import": "./dist/tooltip.js",
184
+ "require": "./dist/tooltip.cjs"
135
185
  }
136
186
  },
137
187
  "files": [
@@ -144,16 +194,20 @@
144
194
  "build": "tsup --config tsup.config.ts",
145
195
  "clean": "rm -rf dist coverage",
146
196
  "dev": "tsup --config tsup.config.ts --watch",
197
+ "verify:app": "vite",
147
198
  "typecheck": "tsc --noEmit",
148
199
  "release:propose": "node --experimental-strip-types scripts/propose-version.ts",
149
200
  "lint": "eslint .",
150
201
  "format": "prettier --write .",
151
202
  "test": "vitest run",
152
203
  "test:watch": "vitest",
153
- "check": "npm run lint && npm run typecheck && npm run test && npm run build && npm run check:exports && npm run check:contract && npm run check:invariants && npm run check:ecosystem",
204
+ "test:visual": "playwright test",
205
+ "test:visual:update": "playwright test --update-snapshots",
206
+ "check": "npm run lint && npm run typecheck && npm run test && npm run build && npm run check:exports && npm run check:contract && npm run check:invariants && npm run check:version-sync && npm run check:ecosystem",
154
207
  "check:exports": "node --experimental-strip-types scripts/check-exports.ts",
155
208
  "check:contract": "node --experimental-strip-types scripts/check-contract.ts",
156
209
  "check:invariants": "node --experimental-strip-types scripts/check-invariants.ts",
210
+ "check:version-sync": "node --experimental-strip-types scripts/check-readme-version.ts",
157
211
  "check:ecosystem": "spectre-manifest-validate spectre.manifest.json && spectre-manifest-check spectre.manifest.json ."
158
212
  },
159
213
  "publishConfig": {
@@ -163,28 +217,29 @@
163
217
  "typescript": "^5.9 || ^6.0"
164
218
  },
165
219
  "dependencies": {
166
- "@phcdevworks/spectre-tokens": "^2.9.0",
167
- "@phcdevworks/spectre-ui": "^1.9.0",
220
+ "@phcdevworks/spectre-tokens": "^3.3.1",
221
+ "@phcdevworks/spectre-ui": "^2.7.1",
168
222
  "lit": "^3.3.3"
169
223
  },
170
224
  "devDependencies": {
171
225
  "@eslint/js": "^10.0.1",
172
226
  "@phcdevworks/spectre-manifest": "^1.0.0",
173
- "@types/node": "^25.9.2",
174
- "@typescript-eslint/eslint-plugin": "^8.61.0",
175
- "@typescript-eslint/parser": "^8.61.0",
227
+ "@playwright/test": "^1.61.1",
228
+ "@types/node": "^26.1.0",
229
+ "@typescript-eslint/eslint-plugin": "^8.62.1",
230
+ "@typescript-eslint/parser": "^8.62.1",
176
231
  "axe-core": "^4.12.1",
177
- "eslint": "^10.4.1",
178
- "globals": "^17.6.0",
179
- "happy-dom": "^20.10.2",
232
+ "eslint": "^10.6.0",
233
+ "globals": "^17.7.0",
234
+ "happy-dom": "^20.10.6",
180
235
  "jiti": "^2.7.0",
181
- "prettier": "^3.8.4",
182
- "tailwindcss": "^4.3.0",
236
+ "prettier": "^3.9.4",
237
+ "tailwindcss": "^4.3.2",
183
238
  "tsup": "^8.5.1",
184
239
  "typescript": "^6.0.3",
185
- "typescript-eslint": "^8.61.0",
186
- "vite": "^8.0.16",
187
- "vitest": "^4.1.8"
240
+ "typescript-eslint": "^8.62.1",
241
+ "vite": "^8.1.3",
242
+ "vitest": "^4.1.9"
188
243
  },
189
244
  "allowScripts": {
190
245
  "esbuild@0.27.7": true