@phcdevworks/spectre-components 1.3.0 → 1.4.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 (66) hide show
  1. package/README.md +359 -199
  2. package/dist/badge.cjs +450 -0
  3. package/dist/badge.cjs.map +1 -0
  4. package/dist/badge.d.cts +61 -0
  5. package/dist/badge.d.ts +61 -0
  6. package/dist/badge.js +445 -0
  7. package/dist/badge.js.map +1 -0
  8. package/dist/button.cjs.map +1 -1
  9. package/dist/button.d.cts +2 -2
  10. package/dist/button.d.ts +2 -2
  11. package/dist/button.js.map +1 -1
  12. package/dist/card.cjs +439 -0
  13. package/dist/card.cjs.map +1 -0
  14. package/dist/card.d.cts +67 -0
  15. package/dist/card.d.ts +67 -0
  16. package/dist/card.js +435 -0
  17. package/dist/card.js.map +1 -0
  18. package/dist/fieldset.cjs +14 -0
  19. package/dist/fieldset.cjs.map +1 -1
  20. package/dist/fieldset.d.cts +6 -0
  21. package/dist/fieldset.d.ts +6 -0
  22. package/dist/fieldset.js +14 -0
  23. package/dist/fieldset.js.map +1 -1
  24. package/dist/form-Dg6kuOS7.d.cts +18 -0
  25. package/dist/form-Dg6kuOS7.d.ts +18 -0
  26. package/dist/icon-box.cjs +462 -0
  27. package/dist/icon-box.cjs.map +1 -0
  28. package/dist/icon-box.d.cts +73 -0
  29. package/dist/icon-box.d.ts +73 -0
  30. package/dist/icon-box.js +457 -0
  31. package/dist/icon-box.js.map +1 -0
  32. package/dist/index.cjs +550 -0
  33. package/dist/index.cjs.map +1 -1
  34. package/dist/index.d.cts +6 -1
  35. package/dist/index.d.ts +6 -1
  36. package/dist/index.js +535 -2
  37. package/dist/index.js.map +1 -1
  38. package/dist/input.cjs.map +1 -1
  39. package/dist/input.d.cts +2 -2
  40. package/dist/input.d.ts +2 -2
  41. package/dist/input.js.map +1 -1
  42. package/dist/rating.cjs +373 -0
  43. package/dist/rating.cjs.map +1 -0
  44. package/dist/rating.d.cts +67 -0
  45. package/dist/rating.d.ts +67 -0
  46. package/dist/rating.js +369 -0
  47. package/dist/rating.js.map +1 -0
  48. package/dist/select.cjs +14 -0
  49. package/dist/select.cjs.map +1 -1
  50. package/dist/select.d.cts +7 -1
  51. package/dist/select.d.ts +7 -1
  52. package/dist/select.js +14 -0
  53. package/dist/select.js.map +1 -1
  54. package/dist/testimonial.cjs +433 -0
  55. package/dist/testimonial.cjs.map +1 -0
  56. package/dist/testimonial.d.cts +61 -0
  57. package/dist/testimonial.d.ts +61 -0
  58. package/dist/testimonial.js +429 -0
  59. package/dist/testimonial.js.map +1 -0
  60. package/dist/textarea.cjs.map +1 -1
  61. package/dist/textarea.d.cts +1 -1
  62. package/dist/textarea.d.ts +1 -1
  63. package/dist/textarea.js.map +1 -1
  64. package/package.json +35 -8
  65. package/dist/form-yR_u97J-.d.cts +0 -10
  66. package/dist/form-yR_u97J-.d.ts +0 -10
package/dist/index.d.cts CHANGED
@@ -1,4 +1,4 @@
1
- export { S as SpectreButtonSize, a as SpectreButtonType, b as SpectreButtonVariant, S as SpectreInputSize, c as SpectreInputType, s as spectreButtonSizes, d as spectreButtonTypes, e as spectreButtonVariants, s as spectreInputSizes, f as spectreInputTypes } from './form-yR_u97J-.cjs';
1
+ export { S as SpectreBadgeSize, a as SpectreBadgeVariant, S as SpectreButtonSize, b as SpectreButtonType, c as SpectreButtonVariant, d as SpectreCardVariant, S as SpectreIconBoxSize, e as SpectreIconBoxVariant, S as SpectreInputSize, f as SpectreInputType, S as SpectreRatingSize, g as SpectreTestimonialVariant, s as spectreBadgeSizes, h as spectreBadgeVariants, s as spectreButtonSizes, i as spectreButtonTypes, j as spectreButtonVariants, k as spectreCardVariants, s as spectreIconBoxSizes, l as spectreIconBoxVariants, s as spectreInputSizes, m as spectreInputTypes, s as spectreRatingSizes, n as spectreTestimonialVariants } from './form-Dg6kuOS7.cjs';
2
2
  export { SpectreButtonElement, SpectreButtonProps, defineSpectreButton } from './button.cjs';
3
3
  export { SpectreInputElement, SpectreInputProps, defineSpectreInput } from './input.cjs';
4
4
  export { SpectreTextareaElement, SpectreTextareaProps, defineSpectreTextarea } from './textarea.cjs';
@@ -7,6 +7,11 @@ export { SpectreCheckboxElement, SpectreCheckboxProps, defineSpectreCheckbox } f
7
7
  export { SpectreRadioElement, SpectreRadioProps, defineSpectreRadio } from './radio.cjs';
8
8
  export { SpectreLabelElement, SpectreLabelProps, defineSpectreLabel } from './label.cjs';
9
9
  export { SpectreFieldsetElement, SpectreFieldsetProps, defineSpectreFieldset } from './fieldset.cjs';
10
+ export { SpectreBadgeElement, SpectreBadgeProps, defineSpectreBadge } from './badge.cjs';
11
+ export { SpectreCardElement, SpectreCardProps, defineSpectreCard } from './card.cjs';
12
+ export { SpectreIconBoxElement, SpectreIconBoxProps, defineSpectreIconBox } from './icon-box.cjs';
13
+ export { SpectreRatingElement, SpectreRatingProps, defineSpectreRating } from './rating.cjs';
14
+ export { SpectreTestimonialElement, SpectreTestimonialProps, defineSpectreTestimonial } from './testimonial.cjs';
10
15
  import 'lit';
11
16
  import './projectable-Bx-IVk0w.cjs';
12
17
  import './base-BRQ7QAAr.cjs';
package/dist/index.d.ts CHANGED
@@ -1,4 +1,4 @@
1
- export { S as SpectreButtonSize, a as SpectreButtonType, b as SpectreButtonVariant, S as SpectreInputSize, c as SpectreInputType, s as spectreButtonSizes, d as spectreButtonTypes, e as spectreButtonVariants, s as spectreInputSizes, f as spectreInputTypes } from './form-yR_u97J-.js';
1
+ export { S as SpectreBadgeSize, a as SpectreBadgeVariant, S as SpectreButtonSize, b as SpectreButtonType, c as SpectreButtonVariant, d as SpectreCardVariant, S as SpectreIconBoxSize, e as SpectreIconBoxVariant, S as SpectreInputSize, f as SpectreInputType, S as SpectreRatingSize, g as SpectreTestimonialVariant, s as spectreBadgeSizes, h as spectreBadgeVariants, s as spectreButtonSizes, i as spectreButtonTypes, j as spectreButtonVariants, k as spectreCardVariants, s as spectreIconBoxSizes, l as spectreIconBoxVariants, s as spectreInputSizes, m as spectreInputTypes, s as spectreRatingSizes, n as spectreTestimonialVariants } from './form-Dg6kuOS7.js';
2
2
  export { SpectreButtonElement, SpectreButtonProps, defineSpectreButton } from './button.js';
3
3
  export { SpectreInputElement, SpectreInputProps, defineSpectreInput } from './input.js';
4
4
  export { SpectreTextareaElement, SpectreTextareaProps, defineSpectreTextarea } from './textarea.js';
@@ -7,6 +7,11 @@ export { SpectreCheckboxElement, SpectreCheckboxProps, defineSpectreCheckbox } f
7
7
  export { SpectreRadioElement, SpectreRadioProps, defineSpectreRadio } from './radio.js';
8
8
  export { SpectreLabelElement, SpectreLabelProps, defineSpectreLabel } from './label.js';
9
9
  export { SpectreFieldsetElement, SpectreFieldsetProps, defineSpectreFieldset } from './fieldset.js';
10
+ export { SpectreBadgeElement, SpectreBadgeProps, defineSpectreBadge } from './badge.js';
11
+ export { SpectreCardElement, SpectreCardProps, defineSpectreCard } from './card.js';
12
+ export { SpectreIconBoxElement, SpectreIconBoxProps, defineSpectreIconBox } from './icon-box.js';
13
+ export { SpectreRatingElement, SpectreRatingProps, defineSpectreRating } from './rating.js';
14
+ export { SpectreTestimonialElement, SpectreTestimonialProps, defineSpectreTestimonial } from './testimonial.js';
10
15
  import 'lit';
11
16
  import './projectable-D6IDeKfr.js';
12
17
  import './base-BRQ7QAAr.js';
package/dist/index.js CHANGED
@@ -1,4 +1,4 @@
1
- import { getButtonClasses, getInputLabelClasses, getInputClasses } from '@phcdevworks/spectre-ui';
1
+ import { getButtonClasses, getInputLabelClasses, getInputClasses, getBadgeClasses, getCardClasses, getIconBoxClasses, getRatingClasses, getRatingStarClasses, getRatingStarsClasses, getRatingTextClasses, getTestimonialClasses } from '@phcdevworks/spectre-ui';
2
2
  import { LitElement, html, nothing } from 'lit';
3
3
  import { ifDefined } from 'lit/directives/if-defined.js';
4
4
  import { live } from 'lit/directives/live.js';
@@ -41,6 +41,46 @@ var spectreInputTypes = [
41
41
  function isInputType(value) {
42
42
  return spectreInputTypes.includes(value);
43
43
  }
44
+ var spectreBadgeVariants = [
45
+ "primary",
46
+ "secondary",
47
+ "success",
48
+ "warning",
49
+ "danger",
50
+ "neutral",
51
+ "info",
52
+ "ghost",
53
+ "outline",
54
+ "accent",
55
+ "cta"
56
+ ];
57
+ function isBadgeVariant(value) {
58
+ return spectreBadgeVariants.includes(value);
59
+ }
60
+ var spectreCardVariants = ["elevated", "flat", "outline", "ghost"];
61
+ function isCardVariant(value) {
62
+ return spectreCardVariants.includes(value);
63
+ }
64
+ var spectreIconBoxVariants = [
65
+ "primary",
66
+ "secondary",
67
+ "success",
68
+ "warning",
69
+ "danger",
70
+ "info",
71
+ "neutral",
72
+ "ghost",
73
+ "accent",
74
+ "cta",
75
+ "outline"
76
+ ];
77
+ function isIconBoxVariant(value) {
78
+ return spectreIconBoxVariants.includes(value);
79
+ }
80
+ var spectreTestimonialVariants = ["elevated", "flat", "outline", "ghost"];
81
+ function isTestimonialVariant(value) {
82
+ return spectreTestimonialVariants.includes(value);
83
+ }
44
84
  function normalizeInt(value, fallback, min = 0) {
45
85
  if (value == null || typeof value !== "number" || !Number.isInteger(value) || value < min) {
46
86
  return fallback;
@@ -922,12 +962,24 @@ var SpectreSelectElement = class extends SpectreProjectableElement {
922
962
  set title(value) {
923
963
  super.title = value;
924
964
  }
965
+ get autocapitalize() {
966
+ return super.autocapitalize;
967
+ }
968
+ set autocapitalize(value) {
969
+ super.autocapitalize = value;
970
+ }
925
971
  get autofocus() {
926
972
  return super.autofocus;
927
973
  }
928
974
  set autofocus(value) {
929
975
  super.autofocus = value;
930
976
  }
977
+ get spellcheck() {
978
+ return super.spellcheck;
979
+ }
980
+ set spellcheck(value) {
981
+ super.spellcheck = value;
982
+ }
931
983
  getContentContainer() {
932
984
  return this.querySelector("[data-sp-select-native]");
933
985
  }
@@ -1023,6 +1075,7 @@ var SpectreSelectElement = class extends SpectreProjectableElement {
1023
1075
  aria-invalid="${ifDefined(this.invalid ? "true" : void 0)}"
1024
1076
  aria-label="${ifDefined(this.forwardedAriaLabel)}"
1025
1077
  aria-labelledby="${ifDefined(this.forwardedAriaLabelledBy)}"
1078
+ autocapitalize="${ifDefined(this.autocapitalize || void 0)}"
1026
1079
  autocomplete="${ifDefined(this.autocomplete || void 0)}"
1027
1080
  ?autofocus="${this.autofocus}"
1028
1081
  class="${this.selectClasses}"
@@ -1032,6 +1085,7 @@ var SpectreSelectElement = class extends SpectreProjectableElement {
1032
1085
  id="${ifDefined(this.id || void 0)}"
1033
1086
  name="${ifDefined(this.name || void 0)}"
1034
1087
  ?required="${this.required}"
1088
+ spellcheck="${ifDefined(this.getAttribute("spellcheck") ?? void 0)}"
1035
1089
  title="${ifDefined(this.title || void 0)}"
1036
1090
  .value="${live(this.value)}"
1037
1091
  @change="${this.handleChange}"
@@ -1445,12 +1499,24 @@ var SpectreFieldsetElement = class extends SpectreProjectableElement {
1445
1499
  set title(value) {
1446
1500
  super.title = value;
1447
1501
  }
1502
+ get autocapitalize() {
1503
+ return super.autocapitalize;
1504
+ }
1505
+ set autocapitalize(value) {
1506
+ super.autocapitalize = value;
1507
+ }
1448
1508
  get autofocus() {
1449
1509
  return super.autofocus;
1450
1510
  }
1451
1511
  set autofocus(value) {
1452
1512
  super.autofocus = value;
1453
1513
  }
1514
+ get spellcheck() {
1515
+ return super.spellcheck;
1516
+ }
1517
+ set spellcheck(value) {
1518
+ super.spellcheck = value;
1519
+ }
1454
1520
  get visibleLegend() {
1455
1521
  const trimmedLegend = this.legend?.trim();
1456
1522
  return trimmedLegend ? trimmedLegend : void 0;
@@ -1495,12 +1561,14 @@ var SpectreFieldsetElement = class extends SpectreProjectableElement {
1495
1561
  aria-invalid="${ifDefined(this.invalid ? "true" : void 0)}"
1496
1562
  aria-label="${ifDefined(this.forwardedAriaLabel)}"
1497
1563
  aria-labelledby="${ifDefined(this.forwardedAriaLabelledBy)}"
1564
+ autocapitalize="${ifDefined(this.autocapitalize || void 0)}"
1498
1565
  ?autofocus="${this.autofocus}"
1499
1566
  data-sp-fieldset-native
1500
1567
  ?disabled="${this.isDisabled}"
1501
1568
  form="${ifDefined(this.form || void 0)}"
1502
1569
  id="${ifDefined(this.id || void 0)}"
1503
1570
  name="${ifDefined(this.name || void 0)}"
1571
+ spellcheck="${ifDefined(this.getAttribute("spellcheck") ?? void 0)}"
1504
1572
  title="${ifDefined(this.title || void 0)}"
1505
1573
  >
1506
1574
  ${this.visibleLegend ? html`<legend
@@ -1528,6 +1596,466 @@ function defineSpectreFieldset(tagName = "sp-fieldset") {
1528
1596
  customElements.define(tagName, SpectreFieldsetElement);
1529
1597
  return SpectreFieldsetElement;
1530
1598
  }
1599
+ var SpectreBadgeElement = class extends SpectreProjectableElement {
1600
+ constructor() {
1601
+ super(...arguments);
1602
+ this.disabled = false;
1603
+ this.fullWidth = false;
1604
+ this.loading = false;
1605
+ this.size = "md";
1606
+ this.variant = "primary";
1607
+ }
1608
+ get id() {
1609
+ return super.id;
1610
+ }
1611
+ set id(value) {
1612
+ super.id = value;
1613
+ }
1614
+ get title() {
1615
+ return super.title;
1616
+ }
1617
+ set title(value) {
1618
+ super.title = value;
1619
+ }
1620
+ getContentContainer() {
1621
+ return this.querySelector("[data-sp-badge-native]");
1622
+ }
1623
+ isInternalNode(node) {
1624
+ if (node.nodeType !== Node.ELEMENT_NODE) {
1625
+ return false;
1626
+ }
1627
+ const el = node;
1628
+ return el.hasAttribute("data-sp-badge-native");
1629
+ }
1630
+ willUpdate(changedProperties) {
1631
+ if (changedProperties.has("disabled") && this.disabled == null) {
1632
+ this.disabled = false;
1633
+ }
1634
+ if (changedProperties.has("fullWidth") && this.fullWidth == null) {
1635
+ this.fullWidth = false;
1636
+ }
1637
+ if (changedProperties.has("loading") && this.loading == null) {
1638
+ this.loading = false;
1639
+ }
1640
+ if (changedProperties.has("variant") && (this.variant == null || !isBadgeVariant(this.variant))) {
1641
+ this.variant = "primary";
1642
+ }
1643
+ if (changedProperties.has("size") && (this.size == null || !isInputSize(this.size))) {
1644
+ this.size = "md";
1645
+ }
1646
+ }
1647
+ get badgeClasses() {
1648
+ return getBadgeClasses({
1649
+ disabled: this.disabled ?? false,
1650
+ fullWidth: this.fullWidth ?? false,
1651
+ loading: this.loading ?? false,
1652
+ size: this.size,
1653
+ variant: this.variant
1654
+ });
1655
+ }
1656
+ render() {
1657
+ return html`<span
1658
+ aria-describedby="${ifDefined(this.forwardedAriaDescribedBy)}"
1659
+ aria-label="${ifDefined(this.forwardedAriaLabel)}"
1660
+ aria-labelledby="${ifDefined(this.forwardedAriaLabelledBy)}"
1661
+ class="${this.badgeClasses}"
1662
+ data-sp-badge-native
1663
+ id="${ifDefined(this.id || void 0)}"
1664
+ title="${ifDefined(this.title || void 0)}"
1665
+ >
1666
+ ${this.hasProjectedContent ? this.projectedContent : nothing}
1667
+ </span>`;
1668
+ }
1669
+ };
1670
+ SpectreBadgeElement.properties = {
1671
+ disabled: { type: Boolean, reflect: true },
1672
+ fullWidth: { attribute: "full-width", type: Boolean, reflect: true },
1673
+ loading: { type: Boolean, reflect: true },
1674
+ size: { type: String, reflect: true },
1675
+ variant: { type: String, reflect: true }
1676
+ };
1677
+ function defineSpectreBadge(tagName = "sp-badge") {
1678
+ const existingElement = customElements.get(tagName);
1679
+ if (existingElement) {
1680
+ return existingElement;
1681
+ }
1682
+ customElements.define(tagName, SpectreBadgeElement);
1683
+ return SpectreBadgeElement;
1684
+ }
1685
+ var SpectreCardElement = class extends SpectreProjectableElement {
1686
+ constructor() {
1687
+ super(...arguments);
1688
+ this.disabled = false;
1689
+ this.fullHeight = false;
1690
+ this.interactive = false;
1691
+ this.loading = false;
1692
+ this.padded = true;
1693
+ this.variant = "elevated";
1694
+ }
1695
+ get id() {
1696
+ return super.id;
1697
+ }
1698
+ set id(value) {
1699
+ super.id = value;
1700
+ }
1701
+ get title() {
1702
+ return super.title;
1703
+ }
1704
+ set title(value) {
1705
+ super.title = value;
1706
+ }
1707
+ getContentContainer() {
1708
+ return this.querySelector("[data-sp-card-native]");
1709
+ }
1710
+ isInternalNode(node) {
1711
+ if (node.nodeType !== Node.ELEMENT_NODE) {
1712
+ return false;
1713
+ }
1714
+ const el = node;
1715
+ return el.hasAttribute("data-sp-card-native");
1716
+ }
1717
+ willUpdate(changedProperties) {
1718
+ if (changedProperties.has("disabled") && this.disabled == null) {
1719
+ this.disabled = false;
1720
+ }
1721
+ if (changedProperties.has("fullHeight") && this.fullHeight == null) {
1722
+ this.fullHeight = false;
1723
+ }
1724
+ if (changedProperties.has("interactive") && this.interactive == null) {
1725
+ this.interactive = false;
1726
+ }
1727
+ if (changedProperties.has("loading") && this.loading == null) {
1728
+ this.loading = false;
1729
+ }
1730
+ if (changedProperties.has("padded") && this.padded == null) {
1731
+ this.padded = true;
1732
+ }
1733
+ if (changedProperties.has("variant") && (this.variant == null || !isCardVariant(this.variant))) {
1734
+ this.variant = "elevated";
1735
+ }
1736
+ }
1737
+ get cardClasses() {
1738
+ return getCardClasses({
1739
+ disabled: this.disabled ?? false,
1740
+ fullHeight: this.fullHeight ?? false,
1741
+ interactive: this.interactive ?? false,
1742
+ loading: this.loading ?? false,
1743
+ padded: this.padded ?? true,
1744
+ variant: this.variant
1745
+ });
1746
+ }
1747
+ render() {
1748
+ return html`<div
1749
+ aria-describedby="${ifDefined(this.forwardedAriaDescribedBy)}"
1750
+ aria-label="${ifDefined(this.forwardedAriaLabel)}"
1751
+ aria-labelledby="${ifDefined(this.forwardedAriaLabelledBy)}"
1752
+ class="${this.cardClasses}"
1753
+ data-sp-card-native
1754
+ id="${ifDefined(this.id || void 0)}"
1755
+ title="${ifDefined(this.title || void 0)}"
1756
+ >
1757
+ ${this.hasProjectedContent ? this.projectedContent : nothing}
1758
+ </div>`;
1759
+ }
1760
+ };
1761
+ SpectreCardElement.properties = {
1762
+ disabled: { type: Boolean, reflect: true },
1763
+ fullHeight: { attribute: "full-height", type: Boolean, reflect: true },
1764
+ interactive: { type: Boolean, reflect: true },
1765
+ loading: { type: Boolean, reflect: true },
1766
+ padded: { type: Boolean, reflect: true },
1767
+ variant: { type: String, reflect: true }
1768
+ };
1769
+ function defineSpectreCard(tagName = "sp-card") {
1770
+ const existingElement = customElements.get(tagName);
1771
+ if (existingElement) {
1772
+ return existingElement;
1773
+ }
1774
+ customElements.define(tagName, SpectreCardElement);
1775
+ return SpectreCardElement;
1776
+ }
1777
+ var SpectreIconBoxElement = class extends SpectreProjectableElement {
1778
+ constructor() {
1779
+ super(...arguments);
1780
+ this.disabled = false;
1781
+ this.fullWidth = false;
1782
+ this.interactive = false;
1783
+ this.loading = false;
1784
+ this.pill = false;
1785
+ this.size = "md";
1786
+ this.variant = "primary";
1787
+ }
1788
+ get id() {
1789
+ return super.id;
1790
+ }
1791
+ set id(value) {
1792
+ super.id = value;
1793
+ }
1794
+ get title() {
1795
+ return super.title;
1796
+ }
1797
+ set title(value) {
1798
+ super.title = value;
1799
+ }
1800
+ getContentContainer() {
1801
+ return this.querySelector("[data-sp-icon-box-native]");
1802
+ }
1803
+ isInternalNode(node) {
1804
+ if (node.nodeType !== Node.ELEMENT_NODE) {
1805
+ return false;
1806
+ }
1807
+ const el = node;
1808
+ return el.hasAttribute("data-sp-icon-box-native");
1809
+ }
1810
+ willUpdate(changedProperties) {
1811
+ if (changedProperties.has("disabled") && this.disabled == null) {
1812
+ this.disabled = false;
1813
+ }
1814
+ if (changedProperties.has("fullWidth") && this.fullWidth == null) {
1815
+ this.fullWidth = false;
1816
+ }
1817
+ if (changedProperties.has("interactive") && this.interactive == null) {
1818
+ this.interactive = false;
1819
+ }
1820
+ if (changedProperties.has("loading") && this.loading == null) {
1821
+ this.loading = false;
1822
+ }
1823
+ if (changedProperties.has("pill") && this.pill == null) {
1824
+ this.pill = false;
1825
+ }
1826
+ if (changedProperties.has("variant") && (this.variant == null || !isIconBoxVariant(this.variant))) {
1827
+ this.variant = "primary";
1828
+ }
1829
+ if (changedProperties.has("size") && (this.size == null || !isInputSize(this.size))) {
1830
+ this.size = "md";
1831
+ }
1832
+ }
1833
+ get iconBoxClasses() {
1834
+ return getIconBoxClasses({
1835
+ disabled: this.disabled ?? false,
1836
+ fullWidth: this.fullWidth ?? false,
1837
+ interactive: this.interactive ?? false,
1838
+ loading: this.loading ?? false,
1839
+ pill: this.pill ?? false,
1840
+ size: this.size,
1841
+ variant: this.variant
1842
+ });
1843
+ }
1844
+ render() {
1845
+ return html`<div
1846
+ aria-describedby="${ifDefined(this.forwardedAriaDescribedBy)}"
1847
+ aria-label="${ifDefined(this.forwardedAriaLabel)}"
1848
+ aria-labelledby="${ifDefined(this.forwardedAriaLabelledBy)}"
1849
+ class="${this.iconBoxClasses}"
1850
+ data-sp-icon-box-native
1851
+ id="${ifDefined(this.id || void 0)}"
1852
+ title="${ifDefined(this.title || void 0)}"
1853
+ >
1854
+ ${this.hasProjectedContent ? this.projectedContent : nothing}
1855
+ </div>`;
1856
+ }
1857
+ };
1858
+ SpectreIconBoxElement.properties = {
1859
+ disabled: { type: Boolean, reflect: true },
1860
+ fullWidth: { attribute: "full-width", type: Boolean, reflect: true },
1861
+ interactive: { type: Boolean, reflect: true },
1862
+ loading: { type: Boolean, reflect: true },
1863
+ pill: { type: Boolean, reflect: true },
1864
+ size: { type: String, reflect: true },
1865
+ variant: { type: String, reflect: true }
1866
+ };
1867
+ function defineSpectreIconBox(tagName = "sp-icon-box") {
1868
+ const existingElement = customElements.get(tagName);
1869
+ if (existingElement) {
1870
+ return existingElement;
1871
+ }
1872
+ customElements.define(tagName, SpectreIconBoxElement);
1873
+ return SpectreIconBoxElement;
1874
+ }
1875
+ var SpectreRatingElement = class extends SpectreBaseElement {
1876
+ constructor() {
1877
+ super(...arguments);
1878
+ this.disabled = false;
1879
+ this.loading = false;
1880
+ this.max = 5;
1881
+ this.size = "md";
1882
+ this.value = 0;
1883
+ }
1884
+ get id() {
1885
+ return super.id;
1886
+ }
1887
+ set id(value) {
1888
+ super.id = value;
1889
+ }
1890
+ get title() {
1891
+ return super.title;
1892
+ }
1893
+ set title(value) {
1894
+ super.title = value;
1895
+ }
1896
+ willUpdate(changedProperties) {
1897
+ if (changedProperties.has("disabled") && this.disabled == null) {
1898
+ this.disabled = false;
1899
+ }
1900
+ if (changedProperties.has("loading") && this.loading == null) {
1901
+ this.loading = false;
1902
+ }
1903
+ if (changedProperties.has("size") && (this.size == null || !isInputSize(this.size))) {
1904
+ this.size = "md";
1905
+ }
1906
+ if (changedProperties.has("max")) {
1907
+ this.max = normalizeInt(this.max, 5, 1) ?? 5;
1908
+ }
1909
+ if (changedProperties.has("value")) {
1910
+ const safeMax = this.max ?? 5;
1911
+ const normalized = normalizeInt(this.value, 0, 0);
1912
+ this.value = normalized == null ? 0 : Math.min(normalized, safeMax);
1913
+ }
1914
+ }
1915
+ get ratingClasses() {
1916
+ return getRatingClasses({
1917
+ disabled: this.disabled ?? false,
1918
+ loading: this.loading ?? false,
1919
+ size: this.size
1920
+ });
1921
+ }
1922
+ get effectiveMax() {
1923
+ return this.max ?? 5;
1924
+ }
1925
+ get effectiveValue() {
1926
+ return this.value ?? 0;
1927
+ }
1928
+ get computedAriaLabel() {
1929
+ const base = this.forwardedAriaLabel;
1930
+ if (base) return base;
1931
+ return `Rating: ${this.effectiveValue} out of ${this.effectiveMax}`;
1932
+ }
1933
+ renderStars() {
1934
+ const stars = [];
1935
+ for (let i = 1; i <= this.effectiveMax; i++) {
1936
+ stars.push(html`<span class="${getRatingStarClasses(i <= this.effectiveValue)}"></span>`);
1937
+ }
1938
+ return stars;
1939
+ }
1940
+ render() {
1941
+ const trimmedLabel = this.label?.trim();
1942
+ return html`<div
1943
+ aria-describedby="${ifDefined(this.forwardedAriaDescribedBy)}"
1944
+ aria-label="${this.computedAriaLabel}"
1945
+ aria-labelledby="${ifDefined(this.forwardedAriaLabelledBy)}"
1946
+ class="${this.ratingClasses}"
1947
+ data-sp-rating-native
1948
+ id="${ifDefined(this.id || void 0)}"
1949
+ role="img"
1950
+ title="${ifDefined(this.title || void 0)}"
1951
+ >
1952
+ <div class="${getRatingStarsClasses()}">${this.renderStars()}</div>
1953
+ ${trimmedLabel ? html`<span class="${getRatingTextClasses({ disabled: this.disabled ?? false })}">${trimmedLabel}</span>` : nothing}
1954
+ </div>`;
1955
+ }
1956
+ };
1957
+ SpectreRatingElement.properties = {
1958
+ disabled: { type: Boolean, reflect: true },
1959
+ label: { type: String, reflect: true },
1960
+ loading: { type: Boolean, reflect: true },
1961
+ max: { type: Number, reflect: true },
1962
+ size: { type: String, reflect: true },
1963
+ value: { type: Number, reflect: true }
1964
+ };
1965
+ function defineSpectreRating(tagName = "sp-rating") {
1966
+ const existingElement = customElements.get(tagName);
1967
+ if (existingElement) {
1968
+ return existingElement;
1969
+ }
1970
+ customElements.define(tagName, SpectreRatingElement);
1971
+ return SpectreRatingElement;
1972
+ }
1973
+ var SpectreTestimonialElement = class extends SpectreProjectableElement {
1974
+ constructor() {
1975
+ super(...arguments);
1976
+ this.disabled = false;
1977
+ this.fullHeight = false;
1978
+ this.interactive = false;
1979
+ this.loading = false;
1980
+ this.variant = "elevated";
1981
+ }
1982
+ get id() {
1983
+ return super.id;
1984
+ }
1985
+ set id(value) {
1986
+ super.id = value;
1987
+ }
1988
+ get title() {
1989
+ return super.title;
1990
+ }
1991
+ set title(value) {
1992
+ super.title = value;
1993
+ }
1994
+ getContentContainer() {
1995
+ return this.querySelector("[data-sp-testimonial-native]");
1996
+ }
1997
+ isInternalNode(node) {
1998
+ if (node.nodeType !== Node.ELEMENT_NODE) {
1999
+ return false;
2000
+ }
2001
+ const el = node;
2002
+ return el.hasAttribute("data-sp-testimonial-native");
2003
+ }
2004
+ willUpdate(changedProperties) {
2005
+ if (changedProperties.has("disabled") && this.disabled == null) {
2006
+ this.disabled = false;
2007
+ }
2008
+ if (changedProperties.has("fullHeight") && this.fullHeight == null) {
2009
+ this.fullHeight = false;
2010
+ }
2011
+ if (changedProperties.has("interactive") && this.interactive == null) {
2012
+ this.interactive = false;
2013
+ }
2014
+ if (changedProperties.has("loading") && this.loading == null) {
2015
+ this.loading = false;
2016
+ }
2017
+ if (changedProperties.has("variant") && (this.variant == null || !isTestimonialVariant(this.variant))) {
2018
+ this.variant = "elevated";
2019
+ }
2020
+ }
2021
+ get testimonialClasses() {
2022
+ return getTestimonialClasses({
2023
+ disabled: this.disabled ?? false,
2024
+ fullHeight: this.fullHeight ?? false,
2025
+ interactive: this.interactive ?? false,
2026
+ loading: this.loading ?? false,
2027
+ variant: this.variant
2028
+ });
2029
+ }
2030
+ render() {
2031
+ return html`<div
2032
+ aria-describedby="${ifDefined(this.forwardedAriaDescribedBy)}"
2033
+ aria-label="${ifDefined(this.forwardedAriaLabel)}"
2034
+ aria-labelledby="${ifDefined(this.forwardedAriaLabelledBy)}"
2035
+ class="${this.testimonialClasses}"
2036
+ data-sp-testimonial-native
2037
+ id="${ifDefined(this.id || void 0)}"
2038
+ title="${ifDefined(this.title || void 0)}"
2039
+ >
2040
+ ${this.hasProjectedContent ? this.projectedContent : nothing}
2041
+ </div>`;
2042
+ }
2043
+ };
2044
+ SpectreTestimonialElement.properties = {
2045
+ disabled: { type: Boolean, reflect: true },
2046
+ fullHeight: { attribute: "full-height", type: Boolean, reflect: true },
2047
+ interactive: { type: Boolean, reflect: true },
2048
+ loading: { type: Boolean, reflect: true },
2049
+ variant: { type: String, reflect: true }
2050
+ };
2051
+ function defineSpectreTestimonial(tagName = "sp-testimonial") {
2052
+ const existingElement = customElements.get(tagName);
2053
+ if (existingElement) {
2054
+ return existingElement;
2055
+ }
2056
+ customElements.define(tagName, SpectreTestimonialElement);
2057
+ return SpectreTestimonialElement;
2058
+ }
1531
2059
 
1532
2060
  // src/index.ts
1533
2061
  function defineSpectreComponents() {
@@ -1539,8 +2067,13 @@ function defineSpectreComponents() {
1539
2067
  defineSpectreRadio();
1540
2068
  defineSpectreLabel();
1541
2069
  defineSpectreFieldset();
2070
+ defineSpectreBadge();
2071
+ defineSpectreCard();
2072
+ defineSpectreIconBox();
2073
+ defineSpectreRating();
2074
+ defineSpectreTestimonial();
1542
2075
  }
1543
2076
 
1544
- export { SpectreButtonElement, SpectreCheckboxElement, SpectreFieldsetElement, SpectreInputElement, SpectreLabelElement, SpectreRadioElement, SpectreSelectElement, SpectreTextareaElement, defineSpectreButton, defineSpectreCheckbox, defineSpectreComponents, defineSpectreFieldset, defineSpectreInput, defineSpectreLabel, defineSpectreRadio, defineSpectreSelect, defineSpectreTextarea, spectreInputSizes as spectreButtonSizes, spectreButtonTypes, spectreButtonVariants, spectreInputSizes, spectreInputTypes };
2077
+ export { SpectreBadgeElement, SpectreButtonElement, SpectreCardElement, SpectreCheckboxElement, SpectreFieldsetElement, SpectreIconBoxElement, SpectreInputElement, SpectreLabelElement, SpectreRadioElement, SpectreRatingElement, SpectreSelectElement, SpectreTestimonialElement, SpectreTextareaElement, defineSpectreBadge, defineSpectreButton, defineSpectreCard, defineSpectreCheckbox, defineSpectreComponents, defineSpectreFieldset, defineSpectreIconBox, defineSpectreInput, defineSpectreLabel, defineSpectreRadio, defineSpectreRating, defineSpectreSelect, defineSpectreTestimonial, defineSpectreTextarea, spectreInputSizes as spectreBadgeSizes, spectreBadgeVariants, spectreInputSizes as spectreButtonSizes, spectreButtonTypes, spectreButtonVariants, spectreCardVariants, spectreInputSizes as spectreIconBoxSizes, spectreIconBoxVariants, spectreInputSizes, spectreInputTypes, spectreInputSizes as spectreRatingSizes, spectreTestimonialVariants };
1545
2078
  //# sourceMappingURL=index.js.map
1546
2079
  //# sourceMappingURL=index.js.map