@phcdevworks/spectre-components 1.4.0 → 1.6.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 (148) hide show
  1. package/README.md +280 -22
  2. package/dist/alert.cjs +462 -0
  3. package/dist/alert.cjs.map +1 -0
  4. package/dist/alert.d.cts +67 -0
  5. package/dist/alert.d.ts +67 -0
  6. package/dist/alert.js +457 -0
  7. package/dist/alert.js.map +1 -0
  8. package/dist/avatar.cjs +462 -0
  9. package/dist/avatar.cjs.map +1 -0
  10. package/dist/avatar.d.cts +73 -0
  11. package/dist/avatar.d.ts +73 -0
  12. package/dist/avatar.js +457 -0
  13. package/dist/avatar.js.map +1 -0
  14. package/dist/badge.cjs +13 -1
  15. package/dist/badge.cjs.map +1 -1
  16. package/dist/badge.d.cts +4 -4
  17. package/dist/badge.d.ts +4 -4
  18. package/dist/badge.js +13 -1
  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 +19 -2
  29. package/dist/card.cjs.map +1 -1
  30. package/dist/card.d.cts +4 -4
  31. package/dist/card.d.ts +4 -4
  32. package/dist/card.js +19 -2
  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/fieldset.cjs +16 -7
  47. package/dist/fieldset.cjs.map +1 -1
  48. package/dist/fieldset.d.cts +2 -3
  49. package/dist/fieldset.d.ts +2 -3
  50. package/dist/fieldset.js +18 -9
  51. package/dist/fieldset.js.map +1 -1
  52. package/dist/form-8KZeQRgr.d.cts +40 -0
  53. package/dist/form-8KZeQRgr.d.ts +40 -0
  54. package/dist/grid.cjs +437 -0
  55. package/dist/grid.cjs.map +1 -0
  56. package/dist/grid.d.cts +42 -0
  57. package/dist/grid.d.ts +42 -0
  58. package/dist/grid.js +432 -0
  59. package/dist/grid.js.map +1 -0
  60. package/dist/icon-box.cjs +13 -1
  61. package/dist/icon-box.cjs.map +1 -1
  62. package/dist/icon-box.d.cts +4 -4
  63. package/dist/icon-box.d.ts +4 -4
  64. package/dist/icon-box.js +13 -1
  65. package/dist/icon-box.js.map +1 -1
  66. package/dist/index.cjs +916 -47
  67. package/dist/index.cjs.map +1 -1
  68. package/dist/index.d.cts +12 -3
  69. package/dist/index.d.ts +12 -3
  70. package/dist/index.js +886 -49
  71. package/dist/index.js.map +1 -1
  72. package/dist/input.cjs +10 -3
  73. package/dist/input.cjs.map +1 -1
  74. package/dist/input.d.cts +3 -4
  75. package/dist/input.d.ts +3 -4
  76. package/dist/input.js +10 -3
  77. package/dist/input.js.map +1 -1
  78. package/dist/label.cjs +17 -2
  79. package/dist/label.cjs.map +1 -1
  80. package/dist/label.d.cts +9 -3
  81. package/dist/label.d.ts +9 -3
  82. package/dist/label.js +18 -3
  83. package/dist/label.js.map +1 -1
  84. package/dist/pricing-card.cjs +440 -0
  85. package/dist/pricing-card.cjs.map +1 -0
  86. package/dist/pricing-card.d.cts +59 -0
  87. package/dist/pricing-card.d.ts +59 -0
  88. package/dist/pricing-card.js +437 -0
  89. package/dist/pricing-card.js.map +1 -0
  90. package/dist/{projectable-D6IDeKfr.d.ts → projectable-D9YCo9NY.d.ts} +1 -1
  91. package/dist/{projectable-Bx-IVk0w.d.cts → projectable-DLOn6eaW.d.cts} +1 -1
  92. package/dist/radio.cjs +16 -5
  93. package/dist/radio.cjs.map +1 -1
  94. package/dist/radio.d.cts +2 -3
  95. package/dist/radio.d.ts +2 -3
  96. package/dist/radio.js +17 -6
  97. package/dist/radio.js.map +1 -1
  98. package/dist/rating.cjs +21 -3
  99. package/dist/rating.cjs.map +1 -1
  100. package/dist/rating.d.cts +3 -3
  101. package/dist/rating.d.ts +3 -3
  102. package/dist/rating.js +21 -3
  103. package/dist/rating.js.map +1 -1
  104. package/dist/section.cjs +400 -0
  105. package/dist/section.cjs.map +1 -0
  106. package/dist/section.d.cts +25 -0
  107. package/dist/section.d.ts +25 -0
  108. package/dist/section.js +397 -0
  109. package/dist/section.js.map +1 -0
  110. package/dist/select.cjs +14 -5
  111. package/dist/select.cjs.map +1 -1
  112. package/dist/select.d.cts +3 -4
  113. package/dist/select.d.ts +3 -4
  114. package/dist/select.js +15 -6
  115. package/dist/select.js.map +1 -1
  116. package/dist/spinner.cjs +366 -0
  117. package/dist/spinner.cjs.map +1 -0
  118. package/dist/spinner.d.cts +52 -0
  119. package/dist/spinner.d.ts +52 -0
  120. package/dist/spinner.js +361 -0
  121. package/dist/spinner.js.map +1 -0
  122. package/dist/stack.cjs +443 -0
  123. package/dist/stack.cjs.map +1 -0
  124. package/dist/stack.d.cts +48 -0
  125. package/dist/stack.d.ts +48 -0
  126. package/dist/stack.js +437 -0
  127. package/dist/stack.js.map +1 -0
  128. package/dist/tag.cjs +481 -0
  129. package/dist/tag.cjs.map +1 -0
  130. package/dist/tag.d.cts +79 -0
  131. package/dist/tag.d.ts +79 -0
  132. package/dist/tag.js +476 -0
  133. package/dist/tag.js.map +1 -0
  134. package/dist/testimonial.cjs +22 -3
  135. package/dist/testimonial.cjs.map +1 -1
  136. package/dist/testimonial.d.cts +4 -4
  137. package/dist/testimonial.d.ts +4 -4
  138. package/dist/testimonial.js +22 -3
  139. package/dist/testimonial.js.map +1 -1
  140. package/dist/textarea.cjs +14 -5
  141. package/dist/textarea.cjs.map +1 -1
  142. package/dist/textarea.d.cts +2 -3
  143. package/dist/textarea.d.ts +2 -3
  144. package/dist/textarea.js +15 -6
  145. package/dist/textarea.js.map +1 -1
  146. package/package.json +70 -17
  147. package/dist/form-Dg6kuOS7.d.cts +0 -18
  148. package/dist/form-Dg6kuOS7.d.ts +0 -18
package/dist/index.cjs CHANGED
@@ -59,7 +59,22 @@ var spectreBadgeVariants = [
59
59
  function isBadgeVariant(value) {
60
60
  return spectreBadgeVariants.includes(value);
61
61
  }
62
- var spectreCardVariants = ["elevated", "flat", "outline", "ghost"];
62
+ var spectreAlertVariants = [
63
+ "info",
64
+ "success",
65
+ "warning",
66
+ "danger",
67
+ "neutral"
68
+ ];
69
+ function isAlertVariant(value) {
70
+ return spectreAlertVariants.includes(value);
71
+ }
72
+ var spectreCardVariants = [
73
+ "elevated",
74
+ "flat",
75
+ "outline",
76
+ "ghost"
77
+ ];
63
78
  function isCardVariant(value) {
64
79
  return spectreCardVariants.includes(value);
65
80
  }
@@ -79,9 +94,83 @@ var spectreIconBoxVariants = [
79
94
  function isIconBoxVariant(value) {
80
95
  return spectreIconBoxVariants.includes(value);
81
96
  }
82
- var spectreTestimonialVariants = ["elevated", "flat", "outline", "ghost"];
97
+ var spectreTestimonialVariants = [
98
+ "elevated",
99
+ "flat",
100
+ "outline",
101
+ "ghost"
102
+ ];
83
103
  function isTestimonialVariant(value) {
84
- return spectreTestimonialVariants.includes(value);
104
+ return spectreTestimonialVariants.includes(
105
+ value
106
+ );
107
+ }
108
+ var spectreSpinnerVariants = [
109
+ "primary",
110
+ "secondary",
111
+ "success",
112
+ "warning",
113
+ "danger",
114
+ "info",
115
+ "neutral",
116
+ "accent",
117
+ "cta"
118
+ ];
119
+ function isSpinnerVariant(value) {
120
+ return spectreSpinnerVariants.includes(value);
121
+ }
122
+ var spectreTagVariants = [
123
+ "default",
124
+ "primary",
125
+ "secondary",
126
+ "success",
127
+ "warning",
128
+ "danger",
129
+ "info",
130
+ "neutral",
131
+ "accent",
132
+ "cta",
133
+ "outline",
134
+ "ghost"
135
+ ];
136
+ function isTagVariant(value) {
137
+ return spectreTagVariants.includes(value);
138
+ }
139
+ var spectreAvatarSizes = ["xs", "sm", "md", "lg", "xl"];
140
+ function isAvatarSize(value) {
141
+ return spectreAvatarSizes.includes(value);
142
+ }
143
+ var spectreAvatarShapes = ["circle", "square"];
144
+ function isAvatarShape(value) {
145
+ return spectreAvatarShapes.includes(value);
146
+ }
147
+ var spectreContainerMaxWidths = ["prose"];
148
+ function isContainerMaxWidth(value) {
149
+ return spectreContainerMaxWidths.includes(
150
+ value
151
+ );
152
+ }
153
+ var spectreGridColumns = [1, 2, 3, 4, 6, 12];
154
+ function isGridColumns(value) {
155
+ return spectreGridColumns.includes(value);
156
+ }
157
+ var spectreGridGaps = ["sm", "md", "lg"];
158
+ function isGridGap(value) {
159
+ return spectreGridGaps.includes(value);
160
+ }
161
+ var spectreStackDirections = ["vertical", "horizontal"];
162
+ function isStackDirection(value) {
163
+ return spectreStackDirections.includes(
164
+ value
165
+ );
166
+ }
167
+ var spectreStackBases = ["sidebar"];
168
+ function isStackBasis(value) {
169
+ return spectreStackBases.includes(value);
170
+ }
171
+ var spectreStackAligns = ["center", "stretch"];
172
+ function isStackAlign(value) {
173
+ return spectreStackAligns.includes(value);
85
174
  }
86
175
  function normalizeInt(value, fallback, min = 0) {
87
176
  if (value == null || typeof value !== "number" || !Number.isInteger(value) || value < min) {
@@ -339,6 +428,16 @@ var SpectreBaseElement = class extends lit.LitElement {
339
428
  const value = this.ariaDescribedBy?.trim();
340
429
  return value ? value : void 0;
341
430
  }
431
+ // Subclasses that expose `disabled`/`loading` properties get this disabled
432
+ // calculation for free instead of redeclaring it per component.
433
+ get isDisabled() {
434
+ const self = this;
435
+ return (self.disabled ?? false) || (self.loading ?? false);
436
+ }
437
+ // Subclasses get this for free instead of redeclaring it per component.
438
+ get hasForwardedLabel() {
439
+ return Boolean(this.forwardedAriaLabel || this.forwardedAriaLabelledBy);
440
+ }
342
441
  };
343
442
  SpectreBaseElement.properties = {};
344
443
 
@@ -506,9 +605,6 @@ var SpectreButtonElement = class extends SpectreProjectableElement {
506
605
  variant: this.variant
507
606
  });
508
607
  }
509
- get isDisabled() {
510
- return (this.disabled ?? false) || (this.loading ?? false);
511
- }
512
608
  get visibleLabelFallback() {
513
609
  const trimmedLabel = this.label?.trim();
514
610
  return trimmedLabel ? trimmedLabel : void 0;
@@ -524,7 +620,8 @@ var SpectreButtonElement = class extends SpectreProjectableElement {
524
620
  return lit.html`<span
525
621
  class="${spectreUi.getInputLabelClasses({ disabled: this.isDisabled })}"
526
622
  data-sp-button-loading-label
527
- >${this.loadingLabel}</span>`;
623
+ >${this.loadingLabel}</span
624
+ >`;
528
625
  }
529
626
  if (this.hasProjectedContent) {
530
627
  return this.projectedContent;
@@ -532,7 +629,8 @@ var SpectreButtonElement = class extends SpectreProjectableElement {
532
629
  return this.visibleLabelFallback ? lit.html`<span
533
630
  class="${spectreUi.getInputLabelClasses({ disabled: this.isDisabled })}"
534
631
  data-sp-button-label-fallback
535
- >${this.visibleLabelFallback}</span>` : lit.nothing;
632
+ >${this.visibleLabelFallback}</span
633
+ >` : lit.nothing;
536
634
  }
537
635
  render() {
538
636
  return lit.html`<button
@@ -672,9 +770,6 @@ var SpectreInputElement = class extends SpectreBaseElement {
672
770
  state: this.isDisabled ? this.disabled ? "disabled" : "loading" : this.invalid ? "error" : this.success ? "success" : "default"
673
771
  });
674
772
  }
675
- get isDisabled() {
676
- return (this.disabled ?? false) || (this.loading ?? false);
677
- }
678
773
  get nativeInput() {
679
774
  return this.querySelector("[data-sp-input-native]");
680
775
  }
@@ -851,16 +946,15 @@ var SpectreTextareaElement = class extends SpectreBaseElement {
851
946
  }
852
947
  }
853
948
  get textareaClasses() {
854
- return spectreUi.getInputClasses({
949
+ return spectreUi.getTextareaClasses({
855
950
  fullWidth: this.fullWidth ?? false,
856
951
  pill: this.pill ?? false,
857
952
  size: this.size,
858
- state: this.isDisabled ? this.disabled ? "disabled" : "loading" : this.invalid ? "error" : this.success ? "success" : "default"
953
+ disabled: this.disabled ?? false,
954
+ loading: this.loading ?? false,
955
+ state: this.invalid ? "invalid" : this.success ? "success" : "default"
859
956
  });
860
957
  }
861
- get isDisabled() {
862
- return (this.disabled ?? false) || (this.loading ?? false);
863
- }
864
958
  get nativeTextarea() {
865
959
  return this.querySelector("[data-sp-textarea-native]");
866
960
  }
@@ -1046,16 +1140,15 @@ var SpectreSelectElement = class extends SpectreProjectableElement {
1046
1140
  }
1047
1141
  }
1048
1142
  get selectClasses() {
1049
- return spectreUi.getInputClasses({
1143
+ return spectreUi.getSelectClasses({
1050
1144
  fullWidth: this.fullWidth ?? false,
1051
1145
  pill: this.pill ?? false,
1052
1146
  size: this.size,
1053
- state: this.isDisabled ? this.disabled ? "disabled" : "loading" : this.invalid ? "error" : this.success ? "success" : "default"
1147
+ disabled: this.disabled ?? false,
1148
+ loading: this.loading ?? false,
1149
+ state: this.invalid ? "invalid" : this.success ? "success" : "default"
1054
1150
  });
1055
1151
  }
1056
- get isDisabled() {
1057
- return (this.disabled ?? false) || (this.loading ?? false);
1058
- }
1059
1152
  handleInput(event) {
1060
1153
  const select = event.currentTarget;
1061
1154
  this.value = select.value;
@@ -1184,9 +1277,6 @@ var SpectreCheckboxElement = class extends SpectreProjectableElement {
1184
1277
  get nativeInput() {
1185
1278
  return this.querySelector("[data-sp-checkbox-native]");
1186
1279
  }
1187
- get isDisabled() {
1188
- return (this.disabled ?? false) || (this.loading ?? false);
1189
- }
1190
1280
  get visibleLabelFallback() {
1191
1281
  const trimmedLabel = this.label?.trim();
1192
1282
  return trimmedLabel ? trimmedLabel : void 0;
@@ -1209,7 +1299,8 @@ var SpectreCheckboxElement = class extends SpectreProjectableElement {
1209
1299
  const labelContent = this.hasProjectedContent ? this.projectedContent : this.visibleLabelFallback ? lit.html`<span
1210
1300
  class="${spectreUi.getInputLabelClasses({ disabled: this.isDisabled })}"
1211
1301
  data-sp-checkbox-label-fallback
1212
- >${this.visibleLabelFallback}</span>` : lit.nothing;
1302
+ >${this.visibleLabelFallback}</span
1303
+ >` : lit.nothing;
1213
1304
  return lit.html`<label data-sp-checkbox-label>
1214
1305
  <input
1215
1306
  aria-busy="${this.loading ? "true" : "false"}"
@@ -1231,7 +1322,10 @@ var SpectreCheckboxElement = class extends SpectreProjectableElement {
1231
1322
  @change="${this.handleChange}"
1232
1323
  @input="${this.handleInput}"
1233
1324
  />
1234
- <span class="sp-checkbox-indicator" data-sp-checkbox-indicator></span>
1325
+ <span
1326
+ class="${spectreUi.getCheckboxClasses({ checked: this.checked ?? false, disabled: this.isDisabled })}"
1327
+ data-sp-checkbox-indicator
1328
+ ></span>
1235
1329
  ${labelContent}
1236
1330
  </label>`;
1237
1331
  }
@@ -1321,9 +1415,6 @@ var SpectreRadioElement = class extends SpectreProjectableElement {
1321
1415
  get nativeInput() {
1322
1416
  return this.querySelector("[data-sp-radio-native]");
1323
1417
  }
1324
- get isDisabled() {
1325
- return (this.disabled ?? false) || (this.loading ?? false);
1326
- }
1327
1418
  get visibleLabelFallback() {
1328
1419
  const trimmedLabel = this.label?.trim();
1329
1420
  return trimmedLabel ? trimmedLabel : void 0;
@@ -1366,7 +1457,8 @@ var SpectreRadioElement = class extends SpectreProjectableElement {
1366
1457
  const labelContent = this.hasProjectedContent ? this.projectedContent : this.visibleLabelFallback ? lit.html`<span
1367
1458
  class="${spectreUi.getInputLabelClasses({ disabled: this.isDisabled })}"
1368
1459
  data-sp-radio-label-fallback
1369
- >${this.visibleLabelFallback}</span>` : lit.nothing;
1460
+ >${this.visibleLabelFallback}</span
1461
+ >` : lit.nothing;
1370
1462
  return lit.html`<label data-sp-radio-label>
1371
1463
  <input
1372
1464
  aria-busy="${this.loading ? "true" : "false"}"
@@ -1388,7 +1480,10 @@ var SpectreRadioElement = class extends SpectreProjectableElement {
1388
1480
  @change="${this.handleChange}"
1389
1481
  @input="${this.handleInput}"
1390
1482
  />
1391
- <span class="sp-radio-indicator" data-sp-radio-indicator></span>
1483
+ <span
1484
+ class="${spectreUi.getRadioClasses({ checked: this.checked ?? false, disabled: this.isDisabled })}"
1485
+ data-sp-radio-indicator
1486
+ ></span>
1392
1487
  ${labelContent}
1393
1488
  </label>`;
1394
1489
  }
@@ -1417,11 +1512,15 @@ var SpectreLabelElement = class extends SpectreProjectableElement {
1417
1512
  constructor() {
1418
1513
  super(...arguments);
1419
1514
  this.disabled = false;
1515
+ this.required = false;
1420
1516
  }
1421
1517
  willUpdate(changedProperties) {
1422
1518
  if (changedProperties.has("disabled") && this.disabled == null) {
1423
1519
  this.disabled = false;
1424
1520
  }
1521
+ if (changedProperties.has("required") && this.required == null) {
1522
+ this.required = false;
1523
+ }
1425
1524
  }
1426
1525
  get isDisabled() {
1427
1526
  return this.disabled ?? false;
@@ -1459,7 +1558,7 @@ var SpectreLabelElement = class extends SpectreProjectableElement {
1459
1558
  aria-describedby="${ifDefined_js.ifDefined(this.forwardedAriaDescribedBy)}"
1460
1559
  aria-label="${ifDefined_js.ifDefined(this.forwardedAriaLabel)}"
1461
1560
  aria-labelledby="${ifDefined_js.ifDefined(this.forwardedAriaLabelledBy)}"
1462
- class="${spectreUi.getInputLabelClasses({ disabled: this.isDisabled })}"
1561
+ class="${spectreUi.getLabelClasses({ disabled: this.isDisabled, required: this.required ?? false })}"
1463
1562
  data-sp-label-native
1464
1563
  for="${ifDefined_js.ifDefined(this.htmlFor || void 0)}"
1465
1564
  id="${ifDefined_js.ifDefined(this.id || void 0)}"
@@ -1471,7 +1570,8 @@ var SpectreLabelElement = class extends SpectreProjectableElement {
1471
1570
  };
1472
1571
  SpectreLabelElement.properties = {
1473
1572
  disabled: { type: Boolean, reflect: true },
1474
- htmlFor: { attribute: "for", type: String, reflect: true }
1573
+ htmlFor: { attribute: "for", type: String, reflect: true },
1574
+ required: { type: Boolean, reflect: true }
1475
1575
  };
1476
1576
  function defineSpectreLabel(tagName = "sp-label") {
1477
1577
  const existingElement = customElements.get(tagName);
@@ -1523,9 +1623,6 @@ var SpectreFieldsetElement = class extends SpectreProjectableElement {
1523
1623
  const trimmedLegend = this.legend?.trim();
1524
1624
  return trimmedLegend ? trimmedLegend : void 0;
1525
1625
  }
1526
- get isDisabled() {
1527
- return (this.disabled ?? false) || (this.loading ?? false);
1528
- }
1529
1626
  getContentContainer() {
1530
1627
  return this.querySelector("[data-sp-fieldset-native]");
1531
1628
  }
@@ -1557,6 +1654,10 @@ var SpectreFieldsetElement = class extends SpectreProjectableElement {
1557
1654
  this.getContentContainer()?.blur();
1558
1655
  }
1559
1656
  render() {
1657
+ const legendClasses = spectreUi.getFieldsetLegendClasses();
1658
+ const legendContent = this.visibleLegend ? lit.html`<legend class="${legendClasses}" data-sp-fieldset-legend>
1659
+ ${this.visibleLegend}
1660
+ </legend>` : lit.nothing;
1560
1661
  return lit.html`<fieldset
1561
1662
  aria-busy="${this.loading ? "true" : "false"}"
1562
1663
  aria-describedby="${ifDefined_js.ifDefined(this.forwardedAriaDescribedBy)}"
@@ -1565,6 +1666,7 @@ var SpectreFieldsetElement = class extends SpectreProjectableElement {
1565
1666
  aria-labelledby="${ifDefined_js.ifDefined(this.forwardedAriaLabelledBy)}"
1566
1667
  autocapitalize="${ifDefined_js.ifDefined(this.autocapitalize || void 0)}"
1567
1668
  ?autofocus="${this.autofocus}"
1669
+ class="${spectreUi.getFieldsetClasses({ disabled: this.isDisabled })}"
1568
1670
  data-sp-fieldset-native
1569
1671
  ?disabled="${this.isDisabled}"
1570
1672
  form="${ifDefined_js.ifDefined(this.form || void 0)}"
@@ -1573,10 +1675,7 @@ var SpectreFieldsetElement = class extends SpectreProjectableElement {
1573
1675
  spellcheck="${ifDefined_js.ifDefined(this.getAttribute("spellcheck") ?? void 0)}"
1574
1676
  title="${ifDefined_js.ifDefined(this.title || void 0)}"
1575
1677
  >
1576
- ${this.visibleLegend ? lit.html`<legend
1577
- class="${spectreUi.getInputLabelClasses({ disabled: this.isDisabled })}"
1578
- data-sp-fieldset-legend
1579
- >${this.visibleLegend}</legend>` : lit.nothing}
1678
+ ${legendContent}
1580
1679
  ${this.hasProjectedContent ? this.projectedContent : lit.nothing}
1581
1680
  </fieldset>`;
1582
1681
  }
@@ -1648,7 +1747,7 @@ var SpectreBadgeElement = class extends SpectreProjectableElement {
1648
1747
  }
1649
1748
  get badgeClasses() {
1650
1749
  return spectreUi.getBadgeClasses({
1651
- disabled: this.disabled ?? false,
1750
+ disabled: this.isDisabled,
1652
1751
  fullWidth: this.fullWidth ?? false,
1653
1752
  loading: this.loading ?? false,
1654
1753
  size: this.size,
@@ -1657,12 +1756,14 @@ var SpectreBadgeElement = class extends SpectreProjectableElement {
1657
1756
  }
1658
1757
  render() {
1659
1758
  return lit.html`<span
1759
+ aria-busy="${this.loading ? "true" : "false"}"
1660
1760
  aria-describedby="${ifDefined_js.ifDefined(this.forwardedAriaDescribedBy)}"
1661
1761
  aria-label="${ifDefined_js.ifDefined(this.forwardedAriaLabel)}"
1662
1762
  aria-labelledby="${ifDefined_js.ifDefined(this.forwardedAriaLabelledBy)}"
1663
1763
  class="${this.badgeClasses}"
1664
1764
  data-sp-badge-native
1665
1765
  id="${ifDefined_js.ifDefined(this.id || void 0)}"
1766
+ role="${ifDefined_js.ifDefined(this.hasForwardedLabel ? "group" : void 0)}"
1666
1767
  title="${ifDefined_js.ifDefined(this.title || void 0)}"
1667
1768
  >
1668
1769
  ${this.hasProjectedContent ? this.projectedContent : lit.nothing}
@@ -1738,7 +1839,7 @@ var SpectreCardElement = class extends SpectreProjectableElement {
1738
1839
  }
1739
1840
  get cardClasses() {
1740
1841
  return spectreUi.getCardClasses({
1741
- disabled: this.disabled ?? false,
1842
+ disabled: this.isDisabled,
1742
1843
  fullHeight: this.fullHeight ?? false,
1743
1844
  interactive: this.interactive ?? false,
1744
1845
  loading: this.loading ?? false,
@@ -1748,12 +1849,14 @@ var SpectreCardElement = class extends SpectreProjectableElement {
1748
1849
  }
1749
1850
  render() {
1750
1851
  return lit.html`<div
1852
+ aria-busy="${this.loading ? "true" : "false"}"
1751
1853
  aria-describedby="${ifDefined_js.ifDefined(this.forwardedAriaDescribedBy)}"
1752
1854
  aria-label="${ifDefined_js.ifDefined(this.forwardedAriaLabel)}"
1753
1855
  aria-labelledby="${ifDefined_js.ifDefined(this.forwardedAriaLabelledBy)}"
1754
1856
  class="${this.cardClasses}"
1755
1857
  data-sp-card-native
1756
1858
  id="${ifDefined_js.ifDefined(this.id || void 0)}"
1859
+ role="${ifDefined_js.ifDefined(this.hasForwardedLabel ? "group" : void 0)}"
1757
1860
  title="${ifDefined_js.ifDefined(this.title || void 0)}"
1758
1861
  >
1759
1862
  ${this.hasProjectedContent ? this.projectedContent : lit.nothing}
@@ -1834,7 +1937,7 @@ var SpectreIconBoxElement = class extends SpectreProjectableElement {
1834
1937
  }
1835
1938
  get iconBoxClasses() {
1836
1939
  return spectreUi.getIconBoxClasses({
1837
- disabled: this.disabled ?? false,
1940
+ disabled: this.isDisabled,
1838
1941
  fullWidth: this.fullWidth ?? false,
1839
1942
  interactive: this.interactive ?? false,
1840
1943
  loading: this.loading ?? false,
@@ -1845,12 +1948,14 @@ var SpectreIconBoxElement = class extends SpectreProjectableElement {
1845
1948
  }
1846
1949
  render() {
1847
1950
  return lit.html`<div
1951
+ aria-busy="${this.loading ? "true" : "false"}"
1848
1952
  aria-describedby="${ifDefined_js.ifDefined(this.forwardedAriaDescribedBy)}"
1849
1953
  aria-label="${ifDefined_js.ifDefined(this.forwardedAriaLabel)}"
1850
1954
  aria-labelledby="${ifDefined_js.ifDefined(this.forwardedAriaLabelledBy)}"
1851
1955
  class="${this.iconBoxClasses}"
1852
1956
  data-sp-icon-box-native
1853
1957
  id="${ifDefined_js.ifDefined(this.id || void 0)}"
1958
+ role="${ifDefined_js.ifDefined(this.hasForwardedLabel ? "group" : void 0)}"
1854
1959
  title="${ifDefined_js.ifDefined(this.title || void 0)}"
1855
1960
  >
1856
1961
  ${this.hasProjectedContent ? this.projectedContent : lit.nothing}
@@ -1916,7 +2021,7 @@ var SpectreRatingElement = class extends SpectreBaseElement {
1916
2021
  }
1917
2022
  get ratingClasses() {
1918
2023
  return spectreUi.getRatingClasses({
1919
- disabled: this.disabled ?? false,
2024
+ disabled: this.isDisabled,
1920
2025
  loading: this.loading ?? false,
1921
2026
  size: this.size
1922
2027
  });
@@ -1935,13 +2040,18 @@ var SpectreRatingElement = class extends SpectreBaseElement {
1935
2040
  renderStars() {
1936
2041
  const stars = [];
1937
2042
  for (let i = 1; i <= this.effectiveMax; i++) {
1938
- stars.push(lit.html`<span class="${spectreUi.getRatingStarClasses(i <= this.effectiveValue)}"></span>`);
2043
+ stars.push(
2044
+ lit.html`<span
2045
+ class="${spectreUi.getRatingStarClasses(i <= this.effectiveValue)}"
2046
+ ></span>`
2047
+ );
1939
2048
  }
1940
2049
  return stars;
1941
2050
  }
1942
2051
  render() {
1943
2052
  const trimmedLabel = this.label?.trim();
1944
2053
  return lit.html`<div
2054
+ aria-busy="${this.loading ? "true" : "false"}"
1945
2055
  aria-describedby="${ifDefined_js.ifDefined(this.forwardedAriaDescribedBy)}"
1946
2056
  aria-label="${this.computedAriaLabel}"
1947
2057
  aria-labelledby="${ifDefined_js.ifDefined(this.forwardedAriaLabelledBy)}"
@@ -1952,7 +2062,10 @@ var SpectreRatingElement = class extends SpectreBaseElement {
1952
2062
  title="${ifDefined_js.ifDefined(this.title || void 0)}"
1953
2063
  >
1954
2064
  <div class="${spectreUi.getRatingStarsClasses()}">${this.renderStars()}</div>
1955
- ${trimmedLabel ? lit.html`<span class="${spectreUi.getRatingTextClasses({ disabled: this.disabled ?? false })}">${trimmedLabel}</span>` : lit.nothing}
2065
+ ${trimmedLabel ? lit.html`<span
2066
+ class="${spectreUi.getRatingTextClasses({ disabled: this.isDisabled })}"
2067
+ >${trimmedLabel}</span
2068
+ >` : lit.nothing}
1956
2069
  </div>`;
1957
2070
  }
1958
2071
  };
@@ -2022,7 +2135,7 @@ var SpectreTestimonialElement = class extends SpectreProjectableElement {
2022
2135
  }
2023
2136
  get testimonialClasses() {
2024
2137
  return spectreUi.getTestimonialClasses({
2025
- disabled: this.disabled ?? false,
2138
+ disabled: this.isDisabled,
2026
2139
  fullHeight: this.fullHeight ?? false,
2027
2140
  interactive: this.interactive ?? false,
2028
2141
  loading: this.loading ?? false,
@@ -2031,12 +2144,14 @@ var SpectreTestimonialElement = class extends SpectreProjectableElement {
2031
2144
  }
2032
2145
  render() {
2033
2146
  return lit.html`<div
2147
+ aria-busy="${this.loading ? "true" : "false"}"
2034
2148
  aria-describedby="${ifDefined_js.ifDefined(this.forwardedAriaDescribedBy)}"
2035
2149
  aria-label="${ifDefined_js.ifDefined(this.forwardedAriaLabel)}"
2036
2150
  aria-labelledby="${ifDefined_js.ifDefined(this.forwardedAriaLabelledBy)}"
2037
2151
  class="${this.testimonialClasses}"
2038
2152
  data-sp-testimonial-native
2039
2153
  id="${ifDefined_js.ifDefined(this.id || void 0)}"
2154
+ role="${ifDefined_js.ifDefined(this.hasForwardedLabel ? "group" : void 0)}"
2040
2155
  title="${ifDefined_js.ifDefined(this.title || void 0)}"
2041
2156
  >
2042
2157
  ${this.hasProjectedContent ? this.projectedContent : lit.nothing}
@@ -2058,6 +2173,719 @@ function defineSpectreTestimonial(tagName = "sp-testimonial") {
2058
2173
  customElements.define(tagName, SpectreTestimonialElement);
2059
2174
  return SpectreTestimonialElement;
2060
2175
  }
2176
+ var SpectreAlertElement = class extends SpectreProjectableElement {
2177
+ constructor() {
2178
+ super(...arguments);
2179
+ this.dismissed = false;
2180
+ this.disabled = false;
2181
+ this.fullWidth = false;
2182
+ this.loading = false;
2183
+ this.size = "md";
2184
+ this.variant = "info";
2185
+ }
2186
+ get id() {
2187
+ return super.id;
2188
+ }
2189
+ set id(value) {
2190
+ super.id = value;
2191
+ }
2192
+ get title() {
2193
+ return super.title;
2194
+ }
2195
+ set title(value) {
2196
+ super.title = value;
2197
+ }
2198
+ getContentContainer() {
2199
+ return this.querySelector("[data-sp-alert-native]");
2200
+ }
2201
+ isInternalNode(node) {
2202
+ if (node.nodeType !== Node.ELEMENT_NODE) {
2203
+ return false;
2204
+ }
2205
+ const el = node;
2206
+ return el.hasAttribute("data-sp-alert-native");
2207
+ }
2208
+ willUpdate(changedProperties) {
2209
+ if (changedProperties.has("dismissed") && this.dismissed == null) {
2210
+ this.dismissed = false;
2211
+ }
2212
+ if (changedProperties.has("disabled") && this.disabled == null) {
2213
+ this.disabled = false;
2214
+ }
2215
+ if (changedProperties.has("fullWidth") && this.fullWidth == null) {
2216
+ this.fullWidth = false;
2217
+ }
2218
+ if (changedProperties.has("loading") && this.loading == null) {
2219
+ this.loading = false;
2220
+ }
2221
+ if (changedProperties.has("variant") && (this.variant == null || !isAlertVariant(this.variant))) {
2222
+ this.variant = "info";
2223
+ }
2224
+ if (changedProperties.has("size") && (this.size == null || !isInputSize(this.size))) {
2225
+ this.size = "md";
2226
+ }
2227
+ }
2228
+ get alertClasses() {
2229
+ return spectreUi.getAlertClasses({
2230
+ disabled: this.isDisabled,
2231
+ dismissed: this.dismissed ?? false,
2232
+ fullWidth: this.fullWidth ?? false,
2233
+ loading: this.loading ?? false,
2234
+ size: this.size,
2235
+ variant: this.variant
2236
+ });
2237
+ }
2238
+ render() {
2239
+ return lit.html`<div
2240
+ aria-busy="${this.loading ? "true" : "false"}"
2241
+ aria-describedby="${ifDefined_js.ifDefined(this.forwardedAriaDescribedBy)}"
2242
+ aria-label="${ifDefined_js.ifDefined(this.forwardedAriaLabel)}"
2243
+ aria-labelledby="${ifDefined_js.ifDefined(this.forwardedAriaLabelledBy)}"
2244
+ class="${this.alertClasses}"
2245
+ data-sp-alert-native
2246
+ id="${ifDefined_js.ifDefined(this.id || void 0)}"
2247
+ role="alert"
2248
+ title="${ifDefined_js.ifDefined(this.title || void 0)}"
2249
+ >
2250
+ ${this.hasProjectedContent ? this.projectedContent : lit.nothing}
2251
+ </div>`;
2252
+ }
2253
+ };
2254
+ SpectreAlertElement.properties = {
2255
+ dismissed: { type: Boolean, reflect: true },
2256
+ disabled: { type: Boolean, reflect: true },
2257
+ fullWidth: { attribute: "full-width", type: Boolean, reflect: true },
2258
+ loading: { type: Boolean, reflect: true },
2259
+ size: { type: String, reflect: true },
2260
+ variant: { type: String, reflect: true }
2261
+ };
2262
+ function defineSpectreAlert(tagName = "sp-alert") {
2263
+ const existingElement = customElements.get(tagName);
2264
+ if (existingElement) {
2265
+ return existingElement;
2266
+ }
2267
+ customElements.define(tagName, SpectreAlertElement);
2268
+ return SpectreAlertElement;
2269
+ }
2270
+ var SpectreAvatarElement = class extends SpectreProjectableElement {
2271
+ constructor() {
2272
+ super(...arguments);
2273
+ this.disabled = false;
2274
+ this.fullWidth = false;
2275
+ this.interactive = false;
2276
+ this.loading = false;
2277
+ this.placeholder = false;
2278
+ this.shape = "circle";
2279
+ this.size = "md";
2280
+ }
2281
+ get id() {
2282
+ return super.id;
2283
+ }
2284
+ set id(value) {
2285
+ super.id = value;
2286
+ }
2287
+ get title() {
2288
+ return super.title;
2289
+ }
2290
+ set title(value) {
2291
+ super.title = value;
2292
+ }
2293
+ getContentContainer() {
2294
+ return this.querySelector("[data-sp-avatar-native]");
2295
+ }
2296
+ isInternalNode(node) {
2297
+ if (node.nodeType !== Node.ELEMENT_NODE) {
2298
+ return false;
2299
+ }
2300
+ const el = node;
2301
+ return el.hasAttribute("data-sp-avatar-native");
2302
+ }
2303
+ willUpdate(changedProperties) {
2304
+ if (changedProperties.has("disabled") && this.disabled == null) {
2305
+ this.disabled = false;
2306
+ }
2307
+ if (changedProperties.has("fullWidth") && this.fullWidth == null) {
2308
+ this.fullWidth = false;
2309
+ }
2310
+ if (changedProperties.has("interactive") && this.interactive == null) {
2311
+ this.interactive = false;
2312
+ }
2313
+ if (changedProperties.has("loading") && this.loading == null) {
2314
+ this.loading = false;
2315
+ }
2316
+ if (changedProperties.has("placeholder") && this.placeholder == null) {
2317
+ this.placeholder = false;
2318
+ }
2319
+ if (changedProperties.has("shape") && (this.shape == null || !isAvatarShape(this.shape))) {
2320
+ this.shape = "circle";
2321
+ }
2322
+ if (changedProperties.has("size") && (this.size == null || !isAvatarSize(this.size))) {
2323
+ this.size = "md";
2324
+ }
2325
+ }
2326
+ get avatarClasses() {
2327
+ return spectreUi.getAvatarClasses({
2328
+ disabled: this.isDisabled,
2329
+ fullWidth: this.fullWidth ?? false,
2330
+ interactive: this.interactive ?? false,
2331
+ loading: this.loading ?? false,
2332
+ placeholder: this.placeholder ?? false,
2333
+ shape: this.shape,
2334
+ size: this.size
2335
+ });
2336
+ }
2337
+ render() {
2338
+ return lit.html`<div
2339
+ aria-busy="${this.loading ? "true" : "false"}"
2340
+ aria-describedby="${ifDefined_js.ifDefined(this.forwardedAriaDescribedBy)}"
2341
+ aria-label="${ifDefined_js.ifDefined(this.forwardedAriaLabel)}"
2342
+ aria-labelledby="${ifDefined_js.ifDefined(this.forwardedAriaLabelledBy)}"
2343
+ class="${this.avatarClasses}"
2344
+ data-sp-avatar-native
2345
+ id="${ifDefined_js.ifDefined(this.id || void 0)}"
2346
+ role="${ifDefined_js.ifDefined(this.hasForwardedLabel ? "group" : void 0)}"
2347
+ title="${ifDefined_js.ifDefined(this.title || void 0)}"
2348
+ >
2349
+ ${this.hasProjectedContent ? this.projectedContent : lit.nothing}
2350
+ </div>`;
2351
+ }
2352
+ };
2353
+ SpectreAvatarElement.properties = {
2354
+ disabled: { type: Boolean, reflect: true },
2355
+ fullWidth: { attribute: "full-width", type: Boolean, reflect: true },
2356
+ interactive: { type: Boolean, reflect: true },
2357
+ loading: { type: Boolean, reflect: true },
2358
+ placeholder: { type: Boolean, reflect: true },
2359
+ shape: { type: String, reflect: true },
2360
+ size: { type: String, reflect: true }
2361
+ };
2362
+ function defineSpectreAvatar(tagName = "sp-avatar") {
2363
+ const existingElement = customElements.get(tagName);
2364
+ if (existingElement) {
2365
+ return existingElement;
2366
+ }
2367
+ customElements.define(tagName, SpectreAvatarElement);
2368
+ return SpectreAvatarElement;
2369
+ }
2370
+ var SpectreSpinnerElement = class extends SpectreBaseElement {
2371
+ constructor() {
2372
+ super(...arguments);
2373
+ this.disabled = false;
2374
+ this.loading = true;
2375
+ this.size = "md";
2376
+ }
2377
+ get id() {
2378
+ return super.id;
2379
+ }
2380
+ set id(value) {
2381
+ super.id = value;
2382
+ }
2383
+ get title() {
2384
+ return super.title;
2385
+ }
2386
+ set title(value) {
2387
+ super.title = value;
2388
+ }
2389
+ willUpdate(changedProperties) {
2390
+ if (changedProperties.has("disabled") && this.disabled == null) {
2391
+ this.disabled = false;
2392
+ }
2393
+ if (changedProperties.has("loading") && this.loading == null) {
2394
+ this.loading = true;
2395
+ }
2396
+ if (changedProperties.has("size") && (this.size == null || !isInputSize(this.size))) {
2397
+ this.size = "md";
2398
+ }
2399
+ if (changedProperties.has("variant") && this.variant != null && !isSpinnerVariant(this.variant)) {
2400
+ this.variant = void 0;
2401
+ }
2402
+ }
2403
+ get spinnerClasses() {
2404
+ return spectreUi.getSpinnerClasses({
2405
+ disabled: this.disabled ?? false,
2406
+ loading: this.loading ?? true,
2407
+ size: this.size,
2408
+ ...this.variant != null ? { variant: this.variant } : {}
2409
+ });
2410
+ }
2411
+ get computedAriaLabel() {
2412
+ return this.forwardedAriaLabel ?? "Loading";
2413
+ }
2414
+ render() {
2415
+ return lit.html`<div
2416
+ aria-busy="${this.loading ? "true" : "false"}"
2417
+ aria-describedby="${ifDefined_js.ifDefined(this.forwardedAriaDescribedBy)}"
2418
+ aria-label="${this.computedAriaLabel}"
2419
+ aria-labelledby="${ifDefined_js.ifDefined(this.forwardedAriaLabelledBy)}"
2420
+ class="${this.spinnerClasses}"
2421
+ data-sp-spinner-native
2422
+ id="${ifDefined_js.ifDefined(this.id || void 0)}"
2423
+ role="status"
2424
+ title="${ifDefined_js.ifDefined(this.title || void 0)}"
2425
+ ></div>`;
2426
+ }
2427
+ };
2428
+ SpectreSpinnerElement.properties = {
2429
+ disabled: { type: Boolean, reflect: true },
2430
+ loading: { type: Boolean, reflect: true },
2431
+ size: { type: String, reflect: true },
2432
+ variant: { type: String, reflect: true }
2433
+ };
2434
+ function defineSpectreSpinner(tagName = "sp-spinner") {
2435
+ const existingElement = customElements.get(tagName);
2436
+ if (existingElement) {
2437
+ return existingElement;
2438
+ }
2439
+ customElements.define(tagName, SpectreSpinnerElement);
2440
+ return SpectreSpinnerElement;
2441
+ }
2442
+ var SpectreTagElement = class extends SpectreProjectableElement {
2443
+ constructor() {
2444
+ super(...arguments);
2445
+ this.dismissible = false;
2446
+ this.disabled = false;
2447
+ this.fullWidth = false;
2448
+ this.interactive = false;
2449
+ this.loading = false;
2450
+ this.selected = false;
2451
+ this.size = "md";
2452
+ this.variant = "default";
2453
+ }
2454
+ get id() {
2455
+ return super.id;
2456
+ }
2457
+ set id(value) {
2458
+ super.id = value;
2459
+ }
2460
+ get title() {
2461
+ return super.title;
2462
+ }
2463
+ set title(value) {
2464
+ super.title = value;
2465
+ }
2466
+ getContentContainer() {
2467
+ return this.querySelector("[data-sp-tag-native]");
2468
+ }
2469
+ isInternalNode(node) {
2470
+ if (node.nodeType !== Node.ELEMENT_NODE) {
2471
+ return false;
2472
+ }
2473
+ const el = node;
2474
+ return el.hasAttribute("data-sp-tag-native");
2475
+ }
2476
+ willUpdate(changedProperties) {
2477
+ if (changedProperties.has("dismissible") && this.dismissible == null) {
2478
+ this.dismissible = false;
2479
+ }
2480
+ if (changedProperties.has("disabled") && this.disabled == null) {
2481
+ this.disabled = false;
2482
+ }
2483
+ if (changedProperties.has("fullWidth") && this.fullWidth == null) {
2484
+ this.fullWidth = false;
2485
+ }
2486
+ if (changedProperties.has("interactive") && this.interactive == null) {
2487
+ this.interactive = false;
2488
+ }
2489
+ if (changedProperties.has("loading") && this.loading == null) {
2490
+ this.loading = false;
2491
+ }
2492
+ if (changedProperties.has("selected") && this.selected == null) {
2493
+ this.selected = false;
2494
+ }
2495
+ if (changedProperties.has("size") && (this.size == null || !isInputSize(this.size))) {
2496
+ this.size = "md";
2497
+ }
2498
+ if (changedProperties.has("variant") && (this.variant == null || !isTagVariant(this.variant))) {
2499
+ this.variant = "default";
2500
+ }
2501
+ }
2502
+ get tagClasses() {
2503
+ return spectreUi.getTagClasses({
2504
+ disabled: this.isDisabled,
2505
+ dismissible: this.dismissible ?? false,
2506
+ fullWidth: this.fullWidth ?? false,
2507
+ interactive: this.interactive ?? false,
2508
+ loading: this.loading ?? false,
2509
+ selected: this.selected ?? false,
2510
+ size: this.size,
2511
+ variant: this.variant
2512
+ });
2513
+ }
2514
+ render() {
2515
+ return lit.html`<span
2516
+ aria-busy="${this.loading ? "true" : "false"}"
2517
+ aria-describedby="${ifDefined_js.ifDefined(this.forwardedAriaDescribedBy)}"
2518
+ aria-label="${ifDefined_js.ifDefined(this.forwardedAriaLabel)}"
2519
+ aria-labelledby="${ifDefined_js.ifDefined(this.forwardedAriaLabelledBy)}"
2520
+ class="${this.tagClasses}"
2521
+ data-sp-tag-native
2522
+ id="${ifDefined_js.ifDefined(this.id || void 0)}"
2523
+ role="${ifDefined_js.ifDefined(this.hasForwardedLabel ? "group" : void 0)}"
2524
+ title="${ifDefined_js.ifDefined(this.title || void 0)}"
2525
+ >
2526
+ ${this.hasProjectedContent ? this.projectedContent : lit.nothing}
2527
+ </span>`;
2528
+ }
2529
+ };
2530
+ SpectreTagElement.properties = {
2531
+ dismissible: { type: Boolean, reflect: true },
2532
+ disabled: { type: Boolean, reflect: true },
2533
+ fullWidth: { attribute: "full-width", type: Boolean, reflect: true },
2534
+ interactive: { type: Boolean, reflect: true },
2535
+ loading: { type: Boolean, reflect: true },
2536
+ selected: { type: Boolean, reflect: true },
2537
+ size: { type: String, reflect: true },
2538
+ variant: { type: String, reflect: true }
2539
+ };
2540
+ function defineSpectreTag(tagName = "sp-tag") {
2541
+ const existingElement = customElements.get(tagName);
2542
+ if (existingElement) {
2543
+ return existingElement;
2544
+ }
2545
+ customElements.define(tagName, SpectreTagElement);
2546
+ return SpectreTagElement;
2547
+ }
2548
+ var SpectrePricingCardElement = class extends SpectreProjectableElement {
2549
+ constructor() {
2550
+ super(...arguments);
2551
+ this.disabled = false;
2552
+ this.featured = false;
2553
+ this.fullHeight = false;
2554
+ this.interactive = false;
2555
+ this.loading = false;
2556
+ }
2557
+ get id() {
2558
+ return super.id;
2559
+ }
2560
+ set id(value) {
2561
+ super.id = value;
2562
+ }
2563
+ get title() {
2564
+ return super.title;
2565
+ }
2566
+ set title(value) {
2567
+ super.title = value;
2568
+ }
2569
+ getContentContainer() {
2570
+ return this.querySelector("[data-sp-pricing-card-native]");
2571
+ }
2572
+ isInternalNode(node) {
2573
+ if (node.nodeType !== Node.ELEMENT_NODE) {
2574
+ return false;
2575
+ }
2576
+ const el = node;
2577
+ return el.hasAttribute("data-sp-pricing-card-native");
2578
+ }
2579
+ willUpdate(changedProperties) {
2580
+ if (changedProperties.has("disabled") && this.disabled == null) {
2581
+ this.disabled = false;
2582
+ }
2583
+ if (changedProperties.has("featured") && this.featured == null) {
2584
+ this.featured = false;
2585
+ }
2586
+ if (changedProperties.has("fullHeight") && this.fullHeight == null) {
2587
+ this.fullHeight = false;
2588
+ }
2589
+ if (changedProperties.has("interactive") && this.interactive == null) {
2590
+ this.interactive = false;
2591
+ }
2592
+ if (changedProperties.has("loading") && this.loading == null) {
2593
+ this.loading = false;
2594
+ }
2595
+ }
2596
+ get pricingCardClasses() {
2597
+ return spectreUi.getPricingCardClasses({
2598
+ disabled: this.isDisabled,
2599
+ featured: this.featured ?? false,
2600
+ fullHeight: this.fullHeight ?? false,
2601
+ interactive: this.interactive ?? false,
2602
+ loading: this.loading ?? false
2603
+ });
2604
+ }
2605
+ render() {
2606
+ return lit.html`<div
2607
+ aria-busy="${this.loading ? "true" : "false"}"
2608
+ aria-describedby="${ifDefined_js.ifDefined(this.forwardedAriaDescribedBy)}"
2609
+ aria-label="${ifDefined_js.ifDefined(this.forwardedAriaLabel)}"
2610
+ aria-labelledby="${ifDefined_js.ifDefined(this.forwardedAriaLabelledBy)}"
2611
+ class="${this.pricingCardClasses}"
2612
+ data-sp-pricing-card-native
2613
+ id="${ifDefined_js.ifDefined(this.id || void 0)}"
2614
+ role="${ifDefined_js.ifDefined(this.hasForwardedLabel ? "group" : void 0)}"
2615
+ title="${ifDefined_js.ifDefined(this.title || void 0)}"
2616
+ >
2617
+ ${this.hasProjectedContent ? this.projectedContent : lit.nothing}
2618
+ </div>`;
2619
+ }
2620
+ };
2621
+ SpectrePricingCardElement.properties = {
2622
+ disabled: { type: Boolean, reflect: true },
2623
+ featured: { type: Boolean, reflect: true },
2624
+ fullHeight: { attribute: "full-height", type: Boolean, reflect: true },
2625
+ interactive: { type: Boolean, reflect: true },
2626
+ loading: { type: Boolean, reflect: true }
2627
+ };
2628
+ function defineSpectrePricingCard(tagName = "sp-pricing-card") {
2629
+ const existingElement = customElements.get(tagName);
2630
+ if (existingElement) {
2631
+ return existingElement;
2632
+ }
2633
+ customElements.define(tagName, SpectrePricingCardElement);
2634
+ return SpectrePricingCardElement;
2635
+ }
2636
+ var SpectreContainerElement = class extends SpectreProjectableElement {
2637
+ constructor() {
2638
+ super(...arguments);
2639
+ this.maxWidth = void 0;
2640
+ }
2641
+ get id() {
2642
+ return super.id;
2643
+ }
2644
+ set id(value) {
2645
+ super.id = value;
2646
+ }
2647
+ get title() {
2648
+ return super.title;
2649
+ }
2650
+ set title(value) {
2651
+ super.title = value;
2652
+ }
2653
+ getContentContainer() {
2654
+ return this.querySelector("[data-sp-container-native]");
2655
+ }
2656
+ isInternalNode(node) {
2657
+ if (node.nodeType !== Node.ELEMENT_NODE) {
2658
+ return false;
2659
+ }
2660
+ const el = node;
2661
+ return el.hasAttribute("data-sp-container-native");
2662
+ }
2663
+ willUpdate(changedProperties) {
2664
+ if (changedProperties.has("maxWidth") && this.maxWidth != null && !isContainerMaxWidth(this.maxWidth)) {
2665
+ this.maxWidth = void 0;
2666
+ }
2667
+ }
2668
+ get containerClasses() {
2669
+ return spectreUi.getContainerClasses(
2670
+ this.maxWidth != null ? { maxWidth: this.maxWidth } : {}
2671
+ );
2672
+ }
2673
+ render() {
2674
+ return lit.html`<div
2675
+ aria-describedby="${ifDefined_js.ifDefined(this.forwardedAriaDescribedBy)}"
2676
+ aria-label="${ifDefined_js.ifDefined(this.forwardedAriaLabel)}"
2677
+ aria-labelledby="${ifDefined_js.ifDefined(this.forwardedAriaLabelledBy)}"
2678
+ class="${this.containerClasses}"
2679
+ data-sp-container-native
2680
+ id="${ifDefined_js.ifDefined(this.id || void 0)}"
2681
+ title="${ifDefined_js.ifDefined(this.title || void 0)}"
2682
+ >
2683
+ ${this.hasProjectedContent ? this.projectedContent : lit.nothing}
2684
+ </div>`;
2685
+ }
2686
+ };
2687
+ SpectreContainerElement.properties = {
2688
+ maxWidth: { attribute: "max-width", type: String, reflect: true }
2689
+ };
2690
+ function defineSpectreContainer(tagName = "sp-container") {
2691
+ const existingElement = customElements.get(tagName);
2692
+ if (existingElement) {
2693
+ return existingElement;
2694
+ }
2695
+ customElements.define(tagName, SpectreContainerElement);
2696
+ return SpectreContainerElement;
2697
+ }
2698
+ var SpectreGridElement = class extends SpectreProjectableElement {
2699
+ constructor() {
2700
+ super(...arguments);
2701
+ this.columns = 1;
2702
+ this.gap = "md";
2703
+ }
2704
+ get id() {
2705
+ return super.id;
2706
+ }
2707
+ set id(value) {
2708
+ super.id = value;
2709
+ }
2710
+ get title() {
2711
+ return super.title;
2712
+ }
2713
+ set title(value) {
2714
+ super.title = value;
2715
+ }
2716
+ getContentContainer() {
2717
+ return this.querySelector("[data-sp-grid-native]");
2718
+ }
2719
+ isInternalNode(node) {
2720
+ if (node.nodeType !== Node.ELEMENT_NODE) {
2721
+ return false;
2722
+ }
2723
+ const el = node;
2724
+ return el.hasAttribute("data-sp-grid-native");
2725
+ }
2726
+ willUpdate(changedProperties) {
2727
+ if (changedProperties.has("columns")) {
2728
+ const normalized = normalizeInt(this.columns, void 0, 1);
2729
+ this.columns = normalized != null && isGridColumns(normalized) ? normalized : 1;
2730
+ }
2731
+ if (changedProperties.has("gap") && (this.gap == null || !isGridGap(this.gap))) {
2732
+ this.gap = "md";
2733
+ }
2734
+ }
2735
+ get gridClasses() {
2736
+ return spectreUi.getGridClasses({
2737
+ columns: this.columns,
2738
+ gap: this.gap
2739
+ });
2740
+ }
2741
+ render() {
2742
+ return lit.html`<div
2743
+ aria-describedby="${ifDefined_js.ifDefined(this.forwardedAriaDescribedBy)}"
2744
+ aria-label="${ifDefined_js.ifDefined(this.forwardedAriaLabel)}"
2745
+ aria-labelledby="${ifDefined_js.ifDefined(this.forwardedAriaLabelledBy)}"
2746
+ class="${this.gridClasses}"
2747
+ data-sp-grid-native
2748
+ id="${ifDefined_js.ifDefined(this.id || void 0)}"
2749
+ title="${ifDefined_js.ifDefined(this.title || void 0)}"
2750
+ >
2751
+ ${this.hasProjectedContent ? this.projectedContent : lit.nothing}
2752
+ </div>`;
2753
+ }
2754
+ };
2755
+ SpectreGridElement.properties = {
2756
+ columns: { type: Number, reflect: true },
2757
+ gap: { type: String, reflect: true }
2758
+ };
2759
+ function defineSpectreGrid(tagName = "sp-grid") {
2760
+ const existingElement = customElements.get(tagName);
2761
+ if (existingElement) {
2762
+ return existingElement;
2763
+ }
2764
+ customElements.define(tagName, SpectreGridElement);
2765
+ return SpectreGridElement;
2766
+ }
2767
+ var SpectreSectionElement = class extends SpectreProjectableElement {
2768
+ get id() {
2769
+ return super.id;
2770
+ }
2771
+ set id(value) {
2772
+ super.id = value;
2773
+ }
2774
+ get title() {
2775
+ return super.title;
2776
+ }
2777
+ set title(value) {
2778
+ super.title = value;
2779
+ }
2780
+ getContentContainer() {
2781
+ return this.querySelector("[data-sp-section-native]");
2782
+ }
2783
+ isInternalNode(node) {
2784
+ if (node.nodeType !== Node.ELEMENT_NODE) {
2785
+ return false;
2786
+ }
2787
+ const el = node;
2788
+ return el.hasAttribute("data-sp-section-native");
2789
+ }
2790
+ get sectionClasses() {
2791
+ return spectreUi.getSectionClasses({});
2792
+ }
2793
+ render() {
2794
+ return lit.html`<section
2795
+ aria-describedby="${ifDefined_js.ifDefined(this.forwardedAriaDescribedBy)}"
2796
+ aria-label="${ifDefined_js.ifDefined(this.forwardedAriaLabel)}"
2797
+ aria-labelledby="${ifDefined_js.ifDefined(this.forwardedAriaLabelledBy)}"
2798
+ class="${this.sectionClasses}"
2799
+ data-sp-section-native
2800
+ id="${ifDefined_js.ifDefined(this.id || void 0)}"
2801
+ title="${ifDefined_js.ifDefined(this.title || void 0)}"
2802
+ >
2803
+ ${this.hasProjectedContent ? this.projectedContent : lit.nothing}
2804
+ </section>`;
2805
+ }
2806
+ };
2807
+ function defineSpectreSection(tagName = "sp-section") {
2808
+ const existingElement = customElements.get(tagName);
2809
+ if (existingElement) {
2810
+ return existingElement;
2811
+ }
2812
+ customElements.define(tagName, SpectreSectionElement);
2813
+ return SpectreSectionElement;
2814
+ }
2815
+ var SpectreStackElement = class extends SpectreProjectableElement {
2816
+ constructor() {
2817
+ super(...arguments);
2818
+ this.align = "center";
2819
+ this.basis = void 0;
2820
+ this.direction = "vertical";
2821
+ }
2822
+ get id() {
2823
+ return super.id;
2824
+ }
2825
+ set id(value) {
2826
+ super.id = value;
2827
+ }
2828
+ get title() {
2829
+ return super.title;
2830
+ }
2831
+ set title(value) {
2832
+ super.title = value;
2833
+ }
2834
+ getContentContainer() {
2835
+ return this.querySelector("[data-sp-stack-native]");
2836
+ }
2837
+ isInternalNode(node) {
2838
+ if (node.nodeType !== Node.ELEMENT_NODE) {
2839
+ return false;
2840
+ }
2841
+ const el = node;
2842
+ return el.hasAttribute("data-sp-stack-native");
2843
+ }
2844
+ willUpdate(changedProperties) {
2845
+ if (changedProperties.has("direction") && (this.direction == null || !isStackDirection(this.direction))) {
2846
+ this.direction = "vertical";
2847
+ }
2848
+ if (changedProperties.has("basis") && this.basis != null && !isStackBasis(this.basis)) {
2849
+ this.basis = void 0;
2850
+ }
2851
+ if (changedProperties.has("align") && (this.align == null || !isStackAlign(this.align))) {
2852
+ this.align = "center";
2853
+ }
2854
+ }
2855
+ get stackClasses() {
2856
+ return spectreUi.getStackClasses({
2857
+ align: this.align,
2858
+ direction: this.direction,
2859
+ ...this.basis != null ? { basis: this.basis } : {}
2860
+ });
2861
+ }
2862
+ render() {
2863
+ return lit.html`<div
2864
+ aria-describedby="${ifDefined_js.ifDefined(this.forwardedAriaDescribedBy)}"
2865
+ aria-label="${ifDefined_js.ifDefined(this.forwardedAriaLabel)}"
2866
+ aria-labelledby="${ifDefined_js.ifDefined(this.forwardedAriaLabelledBy)}"
2867
+ class="${this.stackClasses}"
2868
+ data-sp-stack-native
2869
+ id="${ifDefined_js.ifDefined(this.id || void 0)}"
2870
+ title="${ifDefined_js.ifDefined(this.title || void 0)}"
2871
+ >
2872
+ ${this.hasProjectedContent ? this.projectedContent : lit.nothing}
2873
+ </div>`;
2874
+ }
2875
+ };
2876
+ SpectreStackElement.properties = {
2877
+ align: { type: String, reflect: true },
2878
+ basis: { type: String, reflect: true },
2879
+ direction: { type: String, reflect: true }
2880
+ };
2881
+ function defineSpectreStack(tagName = "sp-stack") {
2882
+ const existingElement = customElements.get(tagName);
2883
+ if (existingElement) {
2884
+ return existingElement;
2885
+ }
2886
+ customElements.define(tagName, SpectreStackElement);
2887
+ return SpectreStackElement;
2888
+ }
2061
2889
 
2062
2890
  // src/index.ts
2063
2891
  function defineSpectreComponents() {
@@ -2074,46 +2902,87 @@ function defineSpectreComponents() {
2074
2902
  defineSpectreIconBox();
2075
2903
  defineSpectreRating();
2076
2904
  defineSpectreTestimonial();
2905
+ defineSpectreAlert();
2906
+ defineSpectreAvatar();
2907
+ defineSpectreSpinner();
2908
+ defineSpectreTag();
2909
+ defineSpectrePricingCard();
2910
+ defineSpectreContainer();
2911
+ defineSpectreGrid();
2912
+ defineSpectreSection();
2913
+ defineSpectreStack();
2077
2914
  }
2078
2915
 
2916
+ exports.SpectreAlertElement = SpectreAlertElement;
2917
+ exports.SpectreAvatarElement = SpectreAvatarElement;
2079
2918
  exports.SpectreBadgeElement = SpectreBadgeElement;
2080
2919
  exports.SpectreButtonElement = SpectreButtonElement;
2081
2920
  exports.SpectreCardElement = SpectreCardElement;
2082
2921
  exports.SpectreCheckboxElement = SpectreCheckboxElement;
2922
+ exports.SpectreContainerElement = SpectreContainerElement;
2083
2923
  exports.SpectreFieldsetElement = SpectreFieldsetElement;
2924
+ exports.SpectreGridElement = SpectreGridElement;
2084
2925
  exports.SpectreIconBoxElement = SpectreIconBoxElement;
2085
2926
  exports.SpectreInputElement = SpectreInputElement;
2086
2927
  exports.SpectreLabelElement = SpectreLabelElement;
2928
+ exports.SpectrePricingCardElement = SpectrePricingCardElement;
2087
2929
  exports.SpectreRadioElement = SpectreRadioElement;
2088
2930
  exports.SpectreRatingElement = SpectreRatingElement;
2931
+ exports.SpectreSectionElement = SpectreSectionElement;
2089
2932
  exports.SpectreSelectElement = SpectreSelectElement;
2933
+ exports.SpectreSpinnerElement = SpectreSpinnerElement;
2934
+ exports.SpectreStackElement = SpectreStackElement;
2935
+ exports.SpectreTagElement = SpectreTagElement;
2090
2936
  exports.SpectreTestimonialElement = SpectreTestimonialElement;
2091
2937
  exports.SpectreTextareaElement = SpectreTextareaElement;
2938
+ exports.defineSpectreAlert = defineSpectreAlert;
2939
+ exports.defineSpectreAvatar = defineSpectreAvatar;
2092
2940
  exports.defineSpectreBadge = defineSpectreBadge;
2093
2941
  exports.defineSpectreButton = defineSpectreButton;
2094
2942
  exports.defineSpectreCard = defineSpectreCard;
2095
2943
  exports.defineSpectreCheckbox = defineSpectreCheckbox;
2096
2944
  exports.defineSpectreComponents = defineSpectreComponents;
2945
+ exports.defineSpectreContainer = defineSpectreContainer;
2097
2946
  exports.defineSpectreFieldset = defineSpectreFieldset;
2947
+ exports.defineSpectreGrid = defineSpectreGrid;
2098
2948
  exports.defineSpectreIconBox = defineSpectreIconBox;
2099
2949
  exports.defineSpectreInput = defineSpectreInput;
2100
2950
  exports.defineSpectreLabel = defineSpectreLabel;
2951
+ exports.defineSpectrePricingCard = defineSpectrePricingCard;
2101
2952
  exports.defineSpectreRadio = defineSpectreRadio;
2102
2953
  exports.defineSpectreRating = defineSpectreRating;
2954
+ exports.defineSpectreSection = defineSpectreSection;
2103
2955
  exports.defineSpectreSelect = defineSpectreSelect;
2956
+ exports.defineSpectreSpinner = defineSpectreSpinner;
2957
+ exports.defineSpectreStack = defineSpectreStack;
2958
+ exports.defineSpectreTag = defineSpectreTag;
2104
2959
  exports.defineSpectreTestimonial = defineSpectreTestimonial;
2105
2960
  exports.defineSpectreTextarea = defineSpectreTextarea;
2961
+ exports.spectreAlertSizes = spectreInputSizes;
2962
+ exports.spectreAlertVariants = spectreAlertVariants;
2963
+ exports.spectreAvatarShapes = spectreAvatarShapes;
2964
+ exports.spectreAvatarSizes = spectreAvatarSizes;
2106
2965
  exports.spectreBadgeSizes = spectreInputSizes;
2107
2966
  exports.spectreBadgeVariants = spectreBadgeVariants;
2108
2967
  exports.spectreButtonSizes = spectreInputSizes;
2109
2968
  exports.spectreButtonTypes = spectreButtonTypes;
2110
2969
  exports.spectreButtonVariants = spectreButtonVariants;
2111
2970
  exports.spectreCardVariants = spectreCardVariants;
2971
+ exports.spectreContainerMaxWidths = spectreContainerMaxWidths;
2972
+ exports.spectreGridColumns = spectreGridColumns;
2973
+ exports.spectreGridGaps = spectreGridGaps;
2112
2974
  exports.spectreIconBoxSizes = spectreInputSizes;
2113
2975
  exports.spectreIconBoxVariants = spectreIconBoxVariants;
2114
2976
  exports.spectreInputSizes = spectreInputSizes;
2115
2977
  exports.spectreInputTypes = spectreInputTypes;
2116
2978
  exports.spectreRatingSizes = spectreInputSizes;
2979
+ exports.spectreSpinnerSizes = spectreInputSizes;
2980
+ exports.spectreSpinnerVariants = spectreSpinnerVariants;
2981
+ exports.spectreStackAligns = spectreStackAligns;
2982
+ exports.spectreStackBases = spectreStackBases;
2983
+ exports.spectreStackDirections = spectreStackDirections;
2984
+ exports.spectreTagSizes = spectreInputSizes;
2985
+ exports.spectreTagVariants = spectreTagVariants;
2117
2986
  exports.spectreTestimonialVariants = spectreTestimonialVariants;
2118
2987
  //# sourceMappingURL=index.cjs.map
2119
2988
  //# sourceMappingURL=index.cjs.map