@phcdevworks/spectre-components 1.12.0 → 1.15.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 (138) hide show
  1. package/README.md +240 -138
  2. package/dist/alert.cjs.map +1 -1
  3. package/dist/alert.d.cts +2 -2
  4. package/dist/alert.d.ts +2 -2
  5. package/dist/alert.js.map +1 -1
  6. package/dist/avatar.cjs.map +1 -1
  7. package/dist/avatar.d.cts +2 -2
  8. package/dist/avatar.d.ts +2 -2
  9. package/dist/avatar.js.map +1 -1
  10. package/dist/badge.cjs.map +1 -1
  11. package/dist/badge.d.cts +2 -2
  12. package/dist/badge.d.ts +2 -2
  13. package/dist/badge.js.map +1 -1
  14. package/dist/button.cjs +24 -0
  15. package/dist/button.cjs.map +1 -1
  16. package/dist/button.d.cts +21 -3
  17. package/dist/button.d.ts +21 -3
  18. package/dist/button.js +24 -0
  19. package/dist/button.js.map +1 -1
  20. package/dist/card.cjs.map +1 -1
  21. package/dist/card.d.cts +2 -2
  22. package/dist/card.d.ts +2 -2
  23. package/dist/card.js.map +1 -1
  24. package/dist/container.cjs +17 -1
  25. package/dist/container.cjs.map +1 -1
  26. package/dist/container.d.cts +9 -2
  27. package/dist/container.d.ts +9 -2
  28. package/dist/container.js +17 -1
  29. package/dist/container.js.map +1 -1
  30. package/dist/dropdown.cjs +10 -1
  31. package/dist/dropdown.cjs.map +1 -1
  32. package/dist/dropdown.d.cts +8 -2
  33. package/dist/dropdown.d.ts +8 -2
  34. package/dist/dropdown.js +10 -1
  35. package/dist/dropdown.js.map +1 -1
  36. package/dist/footer.cjs +18 -2
  37. package/dist/footer.cjs.map +1 -1
  38. package/dist/footer.d.cts +7 -0
  39. package/dist/footer.d.ts +7 -0
  40. package/dist/footer.js +18 -2
  41. package/dist/footer.js.map +1 -1
  42. package/dist/{form-JrKDonG4.d.cts → form-BGQjgJrL.d.cts} +10 -1
  43. package/dist/{form-JrKDonG4.d.ts → form-BGQjgJrL.d.ts} +10 -1
  44. package/dist/grid.cjs +53 -3
  45. package/dist/grid.cjs.map +1 -1
  46. package/dist/grid.d.cts +14 -2
  47. package/dist/grid.d.ts +14 -2
  48. package/dist/grid.js +53 -3
  49. package/dist/grid.js.map +1 -1
  50. package/dist/icon-box.cjs.map +1 -1
  51. package/dist/icon-box.d.cts +2 -2
  52. package/dist/icon-box.d.ts +2 -2
  53. package/dist/icon-box.js.map +1 -1
  54. package/dist/index.cjs +298 -22
  55. package/dist/index.cjs.map +1 -1
  56. package/dist/index.d.cts +3 -2
  57. package/dist/index.d.ts +3 -2
  58. package/dist/index.js +298 -24
  59. package/dist/index.js.map +1 -1
  60. package/dist/input.cjs.map +1 -1
  61. package/dist/input.d.cts +2 -2
  62. package/dist/input.d.ts +2 -2
  63. package/dist/input.js.map +1 -1
  64. package/dist/nav-item.cjs +7 -1
  65. package/dist/nav-item.cjs.map +1 -1
  66. package/dist/nav-item.d.cts +7 -1
  67. package/dist/nav-item.d.ts +7 -1
  68. package/dist/nav-item.js +7 -1
  69. package/dist/nav-item.js.map +1 -1
  70. package/dist/nav.cjs +17 -1
  71. package/dist/nav.cjs.map +1 -1
  72. package/dist/nav.d.cts +7 -0
  73. package/dist/nav.d.ts +7 -0
  74. package/dist/nav.js +17 -1
  75. package/dist/nav.js.map +1 -1
  76. package/dist/rating.cjs.map +1 -1
  77. package/dist/rating.d.cts +2 -2
  78. package/dist/rating.d.ts +2 -2
  79. package/dist/rating.js.map +1 -1
  80. package/dist/section.cjs +22 -1
  81. package/dist/section.cjs.map +1 -1
  82. package/dist/section.d.cts +9 -0
  83. package/dist/section.d.ts +9 -0
  84. package/dist/section.js +22 -1
  85. package/dist/section.js.map +1 -1
  86. package/dist/select.cjs.map +1 -1
  87. package/dist/select.d.cts +1 -1
  88. package/dist/select.d.ts +1 -1
  89. package/dist/select.js.map +1 -1
  90. package/dist/sidebar-toggle.cjs +465 -0
  91. package/dist/sidebar-toggle.cjs.map +1 -0
  92. package/dist/sidebar-toggle.d.cts +44 -0
  93. package/dist/sidebar-toggle.d.ts +44 -0
  94. package/dist/sidebar-toggle.js +462 -0
  95. package/dist/sidebar-toggle.js.map +1 -0
  96. package/dist/sidebar.cjs +15 -10
  97. package/dist/sidebar.cjs.map +1 -1
  98. package/dist/sidebar.d.cts +7 -0
  99. package/dist/sidebar.d.ts +7 -0
  100. package/dist/sidebar.js +15 -10
  101. package/dist/sidebar.js.map +1 -1
  102. package/dist/spinner.cjs.map +1 -1
  103. package/dist/spinner.d.cts +2 -2
  104. package/dist/spinner.d.ts +2 -2
  105. package/dist/spinner.js.map +1 -1
  106. package/dist/stack.cjs +18 -2
  107. package/dist/stack.cjs.map +1 -1
  108. package/dist/stack.d.cts +9 -2
  109. package/dist/stack.d.ts +9 -2
  110. package/dist/stack.js +18 -2
  111. package/dist/stack.js.map +1 -1
  112. package/dist/tag.cjs.map +1 -1
  113. package/dist/tag.d.cts +2 -2
  114. package/dist/tag.d.ts +2 -2
  115. package/dist/tag.js.map +1 -1
  116. package/dist/testimonial.cjs.map +1 -1
  117. package/dist/testimonial.d.cts +2 -2
  118. package/dist/testimonial.d.ts +2 -2
  119. package/dist/testimonial.js.map +1 -1
  120. package/dist/text.cjs +16 -0
  121. package/dist/text.cjs.map +1 -1
  122. package/dist/text.d.cts +8 -2
  123. package/dist/text.d.ts +8 -2
  124. package/dist/text.js +16 -0
  125. package/dist/text.js.map +1 -1
  126. package/dist/textarea.cjs.map +1 -1
  127. package/dist/textarea.d.cts +1 -1
  128. package/dist/textarea.d.ts +1 -1
  129. package/dist/textarea.js.map +1 -1
  130. package/dist/toast.cjs.map +1 -1
  131. package/dist/toast.d.cts +2 -2
  132. package/dist/toast.d.ts +2 -2
  133. package/dist/toast.js.map +1 -1
  134. package/dist/tooltip.cjs.map +1 -1
  135. package/dist/tooltip.d.cts +2 -2
  136. package/dist/tooltip.d.ts +2 -2
  137. package/dist/tooltip.js.map +1 -1
  138. package/package.json +21 -16
package/dist/index.js CHANGED
@@ -1,4 +1,4 @@
1
- import { getButtonClasses, getInputLabelClasses, getInputClasses, getTextareaClasses, getSelectClasses, getCheckboxClasses, getRadioClasses, getLabelClasses, getFieldsetLegendClasses, getFieldsetClasses, getBadgeClasses, getCardClasses, getIconBoxClasses, getRatingClasses, getRatingStarClasses, getRatingStarsClasses, getRatingTextClasses, getTestimonialClasses, getAlertClasses, getAvatarClasses, getSpinnerClasses, getTagClasses, getPricingCardClasses, getContainerClasses, getGridClasses, getStackClasses, getDropdownClasses, getDropdownMenuClasses, getFooterClasses, getModalOverlayClasses, getModalClasses, getNavClasses, getNavLinkClasses, getSidebarClasses, getSidebarToggleClasses, getSidebarBackdropClasses, getToastClasses, getToastIconClasses, getTooltipClasses, getTextClasses, getSectionClasses } from '@phcdevworks/spectre-ui';
1
+ import { getButtonClasses, getInputLabelClasses, getInputClasses, getTextareaClasses, getSelectClasses, getCheckboxClasses, getRadioClasses, getLabelClasses, getFieldsetLegendClasses, getFieldsetClasses, getBadgeClasses, getCardClasses, getIconBoxClasses, getRatingClasses, getRatingStarClasses, getRatingStarsClasses, getRatingTextClasses, getTestimonialClasses, getAlertClasses, getAvatarClasses, getSpinnerClasses, getTagClasses, getPricingCardClasses, getContainerClasses, getGridClasses, getSectionClasses, getStackClasses, getDropdownClasses, getDropdownMenuClasses, getFooterClasses, getModalOverlayClasses, getModalClasses, getNavClasses, getNavLinkClasses, getSidebarClasses, getSidebarToggleClasses, getSidebarBackdropClasses, getToastClasses, getToastIconClasses, getTooltipClasses, getTextClasses } 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';
@@ -157,6 +157,33 @@ var spectreGridGaps = ["sm", "md", "lg"];
157
157
  function isGridGap(value) {
158
158
  return spectreGridGaps.includes(value);
159
159
  }
160
+ var spectreGridSpans = [
161
+ 1,
162
+ 2,
163
+ 3,
164
+ 4,
165
+ 5,
166
+ 6,
167
+ 7,
168
+ 8,
169
+ 9,
170
+ 10,
171
+ 11,
172
+ 12,
173
+ "full"
174
+ ];
175
+ function isGridSpan(value) {
176
+ return spectreGridSpans.includes(
177
+ value
178
+ );
179
+ }
180
+ function isGridSpanOptions(value) {
181
+ if (typeof value !== "object" || value === null) {
182
+ return false;
183
+ }
184
+ const candidate = value;
185
+ return (candidate.base === void 0 || isGridSpan(candidate.base)) && (candidate.md === void 0 || isGridSpan(candidate.md)) && (candidate.lg === void 0 || isGridSpan(candidate.lg));
186
+ }
160
187
  var spectreStackDirections = ["vertical", "horizontal"];
161
188
  function isStackDirection(value) {
162
189
  return spectreStackDirections.includes(
@@ -244,12 +271,30 @@ var spectreTextLevels = [
244
271
  function isTextLevel(value) {
245
272
  return spectreTextLevels.includes(value);
246
273
  }
274
+ var spectreTextTransforms = [
275
+ "none",
276
+ "uppercase",
277
+ "lowercase",
278
+ "capitalize"
279
+ ];
280
+ function isTextTransform(value) {
281
+ return spectreTextTransforms.includes(
282
+ value
283
+ );
284
+ }
247
285
  function normalizeInt(value, fallback, min = 0) {
248
286
  if (value == null || typeof value !== "number" || !Number.isInteger(value) || value < min) {
249
287
  return fallback;
250
288
  }
251
289
  return value;
252
290
  }
291
+ var spectreUtilityClassPattern = /^sp-[a-z0-9]+(?:-[a-z0-9]+)*$/;
292
+ function sanitizeUtilityClasses(value) {
293
+ if (!value) {
294
+ return "";
295
+ }
296
+ return value.split(/\s+/).filter((token) => spectreUtilityClassPattern.test(token)).join(" ");
297
+ }
253
298
  var SpectreBaseElement = class extends LitElement {
254
299
  constructor() {
255
300
  super(...arguments);
@@ -622,6 +667,9 @@ var SpectreButtonElement = class extends SpectreProjectableElement {
622
667
  set autofocus(value) {
623
668
  super.autofocus = value;
624
669
  }
670
+ get isLink() {
671
+ return Boolean(this.href) && !this.isDisabled;
672
+ }
625
673
  getContentContainer() {
626
674
  return this.querySelector("[data-sp-button-native]");
627
675
  }
@@ -705,12 +753,30 @@ var SpectreButtonElement = class extends SpectreProjectableElement {
705
753
  >` : nothing;
706
754
  }
707
755
  render() {
756
+ if (this.isLink) {
757
+ return html`<a
758
+ aria-busy="${this.loading ? "true" : "false"}"
759
+ aria-describedby="${ifDefined(this.forwardedAriaDescribedBy)}"
760
+ aria-label="${ifDefined(this.forwardedAriaLabel)}"
761
+ aria-labelledby="${ifDefined(this.forwardedAriaLabelledBy)}"
762
+ class="${this.buttonClasses}"
763
+ data-sp-button-native
764
+ href="${ifDefined(this.href)}"
765
+ id="${ifDefined(this.id || void 0)}"
766
+ rel="${ifDefined(this.rel || void 0)}"
767
+ target="${ifDefined(this.target || void 0)}"
768
+ title="${ifDefined(this.title || void 0)}"
769
+ >
770
+ ${this.renderButtonContent()}
771
+ </a>`;
772
+ }
708
773
  return html`<button
709
774
  aria-busy="${this.loading ? "true" : "false"}"
710
775
  aria-describedby="${ifDefined(this.forwardedAriaDescribedBy)}"
711
776
  aria-label="${ifDefined(this.forwardedAriaLabel)}"
712
777
  aria-labelledby="${ifDefined(this.forwardedAriaLabelledBy)}"
713
778
  ?autofocus="${this.autofocus}"
779
+ aria-disabled="${ifDefined(this.href && this.isDisabled ? "true" : void 0)}"
714
780
  class="${this.buttonClasses}"
715
781
  data-sp-button-native
716
782
  ?disabled="${this.isDisabled}"
@@ -729,13 +795,16 @@ SpectreButtonElement.properties = {
729
795
  disabled: { type: Boolean, reflect: true },
730
796
  form: { type: String },
731
797
  fullWidth: { attribute: "full-width", type: Boolean, reflect: true },
798
+ href: { type: String, reflect: true },
732
799
  iconOnly: { attribute: "icon-only", type: Boolean, reflect: true },
733
800
  label: { type: String, reflect: true },
734
801
  loading: { type: Boolean, reflect: true },
735
802
  loadingLabel: { attribute: "loading-label", type: String, reflect: true },
736
803
  name: { type: String, reflect: true },
737
804
  pill: { type: Boolean, reflect: true },
805
+ rel: { type: String },
738
806
  size: { type: String, reflect: true },
807
+ target: { type: String },
739
808
  type: { type: String, reflect: true },
740
809
  variant: { type: String, reflect: true },
741
810
  value: { type: String }
@@ -2708,6 +2777,7 @@ function defineSpectrePricingCard(tagName = "sp-pricing-card") {
2708
2777
  var SpectreContainerElement = class extends SpectreProjectableElement {
2709
2778
  constructor() {
2710
2779
  super(...arguments);
2780
+ this.innerClass = void 0;
2711
2781
  this.maxWidth = void 0;
2712
2782
  }
2713
2783
  get id() {
@@ -2722,6 +2792,11 @@ var SpectreContainerElement = class extends SpectreProjectableElement {
2722
2792
  set title(value) {
2723
2793
  super.title = value;
2724
2794
  }
2795
+ connectedCallback() {
2796
+ var _a;
2797
+ super.connectedCallback();
2798
+ (_a = this.style).display || (_a.display = "block");
2799
+ }
2725
2800
  getContentContainer() {
2726
2801
  return this.querySelector("[data-sp-container-native]");
2727
2802
  }
@@ -2738,9 +2813,11 @@ var SpectreContainerElement = class extends SpectreProjectableElement {
2738
2813
  }
2739
2814
  }
2740
2815
  get containerClasses() {
2741
- return getContainerClasses(
2816
+ const recipeClasses = getContainerClasses(
2742
2817
  this.maxWidth != null ? { maxWidth: this.maxWidth } : {}
2743
2818
  );
2819
+ const utilityClasses = sanitizeUtilityClasses(this.innerClass);
2820
+ return utilityClasses ? `${recipeClasses} ${utilityClasses}` : recipeClasses;
2744
2821
  }
2745
2822
  render() {
2746
2823
  return html`<div
@@ -2757,6 +2834,7 @@ var SpectreContainerElement = class extends SpectreProjectableElement {
2757
2834
  }
2758
2835
  };
2759
2836
  SpectreContainerElement.properties = {
2837
+ innerClass: { attribute: "inner-class", type: String },
2760
2838
  maxWidth: { attribute: "max-width", type: String, reflect: true }
2761
2839
  };
2762
2840
  function defineSpectreContainer(tagName = "sp-container") {
@@ -2772,6 +2850,7 @@ var SpectreGridElement = class extends SpectreProjectableElement {
2772
2850
  super(...arguments);
2773
2851
  this.columns = 1;
2774
2852
  this.gap = "md";
2853
+ this.innerClass = void 0;
2775
2854
  }
2776
2855
  get id() {
2777
2856
  return super.id;
@@ -2785,6 +2864,11 @@ var SpectreGridElement = class extends SpectreProjectableElement {
2785
2864
  set title(value) {
2786
2865
  super.title = value;
2787
2866
  }
2867
+ connectedCallback() {
2868
+ var _a;
2869
+ super.connectedCallback();
2870
+ (_a = this.style).display || (_a.display = "block");
2871
+ }
2788
2872
  getContentContainer() {
2789
2873
  return this.querySelector("[data-sp-grid-native]");
2790
2874
  }
@@ -2803,12 +2887,20 @@ var SpectreGridElement = class extends SpectreProjectableElement {
2803
2887
  if (changedProperties.has("gap") && (this.gap == null || !isGridGap(this.gap))) {
2804
2888
  this.gap = "md";
2805
2889
  }
2890
+ if (changedProperties.has("span") && this.span !== void 0 && !isGridSpan(this.span) && !isGridSpanOptions(this.span)) {
2891
+ this.span = void 0;
2892
+ }
2806
2893
  }
2807
2894
  get gridClasses() {
2808
- return getGridClasses({
2895
+ const recipeClasses = getGridClasses({
2809
2896
  columns: this.columns,
2810
- gap: this.gap
2897
+ gap: this.gap,
2898
+ ...this.span !== void 0 && {
2899
+ span: this.span
2900
+ }
2811
2901
  });
2902
+ const utilityClasses = sanitizeUtilityClasses(this.innerClass);
2903
+ return utilityClasses ? `${recipeClasses} ${utilityClasses}` : recipeClasses;
2812
2904
  }
2813
2905
  render() {
2814
2906
  return html`<div
@@ -2826,7 +2918,9 @@ var SpectreGridElement = class extends SpectreProjectableElement {
2826
2918
  };
2827
2919
  SpectreGridElement.properties = {
2828
2920
  columns: { type: Number, reflect: true },
2829
- gap: { type: String, reflect: true }
2921
+ gap: { type: String, reflect: true },
2922
+ innerClass: { attribute: "inner-class", type: String },
2923
+ span: { type: Object }
2830
2924
  };
2831
2925
  function defineSpectreGrid(tagName = "sp-grid") {
2832
2926
  const existingElement = customElements.get(tagName);
@@ -2837,6 +2931,10 @@ function defineSpectreGrid(tagName = "sp-grid") {
2837
2931
  return SpectreGridElement;
2838
2932
  }
2839
2933
  var SpectreSectionElement = class extends SpectreProjectableElement {
2934
+ constructor() {
2935
+ super(...arguments);
2936
+ this.innerClass = void 0;
2937
+ }
2840
2938
  get id() {
2841
2939
  return super.id;
2842
2940
  }
@@ -2849,6 +2947,11 @@ var SpectreSectionElement = class extends SpectreProjectableElement {
2849
2947
  set title(value) {
2850
2948
  super.title = value;
2851
2949
  }
2950
+ connectedCallback() {
2951
+ var _a;
2952
+ super.connectedCallback();
2953
+ (_a = this.style).display || (_a.display = "block");
2954
+ }
2852
2955
  getContentContainer() {
2853
2956
  return this.querySelector("[data-sp-section-native]");
2854
2957
  }
@@ -2860,7 +2963,9 @@ var SpectreSectionElement = class extends SpectreProjectableElement {
2860
2963
  return el.hasAttribute("data-sp-section-native");
2861
2964
  }
2862
2965
  get sectionClasses() {
2863
- return getSectionClasses({});
2966
+ const recipeClasses = getSectionClasses({});
2967
+ const utilityClasses = sanitizeUtilityClasses(this.innerClass);
2968
+ return utilityClasses ? `${recipeClasses} ${utilityClasses}` : recipeClasses;
2864
2969
  }
2865
2970
  render() {
2866
2971
  return html`<section
@@ -2876,6 +2981,9 @@ var SpectreSectionElement = class extends SpectreProjectableElement {
2876
2981
  </section>`;
2877
2982
  }
2878
2983
  };
2984
+ SpectreSectionElement.properties = {
2985
+ innerClass: { attribute: "inner-class", type: String }
2986
+ };
2879
2987
  function defineSpectreSection(tagName = "sp-section") {
2880
2988
  const existingElement = customElements.get(tagName);
2881
2989
  if (existingElement) {
@@ -2890,6 +2998,7 @@ var SpectreStackElement = class extends SpectreProjectableElement {
2890
2998
  this.align = "center";
2891
2999
  this.basis = void 0;
2892
3000
  this.direction = "vertical";
3001
+ this.innerClass = void 0;
2893
3002
  }
2894
3003
  get id() {
2895
3004
  return super.id;
@@ -2903,6 +3012,11 @@ var SpectreStackElement = class extends SpectreProjectableElement {
2903
3012
  set title(value) {
2904
3013
  super.title = value;
2905
3014
  }
3015
+ connectedCallback() {
3016
+ var _a;
3017
+ super.connectedCallback();
3018
+ (_a = this.style).display || (_a.display = "block");
3019
+ }
2906
3020
  getContentContainer() {
2907
3021
  return this.querySelector("[data-sp-stack-native]");
2908
3022
  }
@@ -2925,11 +3039,13 @@ var SpectreStackElement = class extends SpectreProjectableElement {
2925
3039
  }
2926
3040
  }
2927
3041
  get stackClasses() {
2928
- return getStackClasses({
3042
+ const recipeClasses = getStackClasses({
2929
3043
  align: this.align,
2930
3044
  direction: this.direction,
2931
3045
  ...this.basis != null ? { basis: this.basis } : {}
2932
3046
  });
3047
+ const utilityClasses = sanitizeUtilityClasses(this.innerClass);
3048
+ return utilityClasses ? `${recipeClasses} ${utilityClasses}` : recipeClasses;
2933
3049
  }
2934
3050
  render() {
2935
3051
  return html`<div
@@ -2948,7 +3064,8 @@ var SpectreStackElement = class extends SpectreProjectableElement {
2948
3064
  SpectreStackElement.properties = {
2949
3065
  align: { type: String, reflect: true },
2950
3066
  basis: { type: String, reflect: true },
2951
- direction: { type: String, reflect: true }
3067
+ direction: { type: String, reflect: true },
3068
+ innerClass: { attribute: "inner-class", type: String }
2952
3069
  };
2953
3070
  function defineSpectreStack(tagName = "sp-stack") {
2954
3071
  const existingElement = customElements.get(tagName);
@@ -2962,6 +3079,7 @@ var SpectreDropdownElement = class extends SpectreBaseElement {
2962
3079
  constructor() {
2963
3080
  super(...arguments);
2964
3081
  this.fullWidth = false;
3082
+ this.mega = false;
2965
3083
  this.open = false;
2966
3084
  this.placement = "bottom-start";
2967
3085
  this.triggerLabel = "Toggle menu";
@@ -3065,6 +3183,9 @@ var SpectreDropdownElement = class extends SpectreBaseElement {
3065
3183
  if (changedProperties.has("fullWidth") && this.fullWidth == null) {
3066
3184
  this.fullWidth = false;
3067
3185
  }
3186
+ if (changedProperties.has("mega") && this.mega == null) {
3187
+ this.mega = false;
3188
+ }
3068
3189
  if (changedProperties.has("open") && this.open == null) {
3069
3190
  this.open = false;
3070
3191
  }
@@ -3100,10 +3221,14 @@ var SpectreDropdownElement = class extends SpectreBaseElement {
3100
3221
  this.dispatchEvent(new CustomEvent("sp-close", { bubbles: true }));
3101
3222
  }
3102
3223
  get dropdownClasses() {
3103
- return getDropdownClasses({ fullWidth: this.fullWidth ?? false });
3224
+ return getDropdownClasses({
3225
+ fullWidth: this.fullWidth ?? false,
3226
+ mega: this.mega ?? false
3227
+ });
3104
3228
  }
3105
3229
  get menuClasses() {
3106
3230
  return getDropdownMenuClasses({
3231
+ mega: this.mega ?? false,
3107
3232
  open: this.open ?? false,
3108
3233
  placement: this.placement
3109
3234
  });
@@ -3133,6 +3258,7 @@ var SpectreDropdownElement = class extends SpectreBaseElement {
3133
3258
  };
3134
3259
  SpectreDropdownElement.properties = {
3135
3260
  fullWidth: { attribute: "full-width", type: Boolean, reflect: true },
3261
+ mega: { type: Boolean, reflect: true },
3136
3262
  open: { type: Boolean, reflect: true },
3137
3263
  placement: { type: String, reflect: true },
3138
3264
  triggerLabel: { attribute: "trigger-label", type: String }
@@ -3150,6 +3276,7 @@ var SpectreFooterElement = class extends SpectreProjectableElement {
3150
3276
  super(...arguments);
3151
3277
  this.bordered = false;
3152
3278
  this.fullWidth = false;
3279
+ this.innerClass = void 0;
3153
3280
  }
3154
3281
  get id() {
3155
3282
  return super.id;
@@ -3163,6 +3290,11 @@ var SpectreFooterElement = class extends SpectreProjectableElement {
3163
3290
  set title(value) {
3164
3291
  super.title = value;
3165
3292
  }
3293
+ connectedCallback() {
3294
+ var _a;
3295
+ super.connectedCallback();
3296
+ (_a = this.style).display || (_a.display = "block");
3297
+ }
3166
3298
  getContentContainer() {
3167
3299
  return this.querySelector("[data-sp-footer-native]");
3168
3300
  }
@@ -3182,10 +3314,12 @@ var SpectreFooterElement = class extends SpectreProjectableElement {
3182
3314
  }
3183
3315
  }
3184
3316
  get footerClasses() {
3185
- return getFooterClasses({
3317
+ const recipeClasses = getFooterClasses({
3186
3318
  bordered: this.bordered ?? false,
3187
3319
  fullWidth: this.fullWidth ?? false
3188
3320
  });
3321
+ const utilityClasses = sanitizeUtilityClasses(this.innerClass);
3322
+ return utilityClasses ? `${recipeClasses} ${utilityClasses}` : recipeClasses;
3189
3323
  }
3190
3324
  render() {
3191
3325
  return html`<footer
@@ -3201,7 +3335,8 @@ var SpectreFooterElement = class extends SpectreProjectableElement {
3201
3335
  };
3202
3336
  SpectreFooterElement.properties = {
3203
3337
  bordered: { type: Boolean, reflect: true },
3204
- fullWidth: { attribute: "full-width", type: Boolean, reflect: true }
3338
+ fullWidth: { attribute: "full-width", type: Boolean, reflect: true },
3339
+ innerClass: { attribute: "inner-class", type: String }
3205
3340
  };
3206
3341
  function defineSpectreFooter(tagName = "sp-footer") {
3207
3342
  const existingElement = customElements.get(tagName);
@@ -3383,6 +3518,7 @@ var SpectreNavElement = class extends SpectreProjectableElement {
3383
3518
  super(...arguments);
3384
3519
  this.bordered = false;
3385
3520
  this.fullWidth = false;
3521
+ this.innerClass = void 0;
3386
3522
  this.sticky = false;
3387
3523
  }
3388
3524
  get id() {
@@ -3397,6 +3533,11 @@ var SpectreNavElement = class extends SpectreProjectableElement {
3397
3533
  set title(value) {
3398
3534
  super.title = value;
3399
3535
  }
3536
+ connectedCallback() {
3537
+ var _a;
3538
+ super.connectedCallback();
3539
+ (_a = this.style).display || (_a.display = "block");
3540
+ }
3400
3541
  getContentContainer() {
3401
3542
  return this.querySelector("[data-sp-nav-native]");
3402
3543
  }
@@ -3419,11 +3560,13 @@ var SpectreNavElement = class extends SpectreProjectableElement {
3419
3560
  }
3420
3561
  }
3421
3562
  get navClasses() {
3422
- return getNavClasses({
3563
+ const recipeClasses = getNavClasses({
3423
3564
  bordered: this.bordered ?? false,
3424
3565
  fullWidth: this.fullWidth ?? false,
3425
3566
  sticky: this.sticky ?? false
3426
3567
  });
3568
+ const utilityClasses = sanitizeUtilityClasses(this.innerClass);
3569
+ return utilityClasses ? `${recipeClasses} ${utilityClasses}` : recipeClasses;
3427
3570
  }
3428
3571
  render() {
3429
3572
  return html`<nav
@@ -3440,6 +3583,7 @@ var SpectreNavElement = class extends SpectreProjectableElement {
3440
3583
  SpectreNavElement.properties = {
3441
3584
  bordered: { type: Boolean, reflect: true },
3442
3585
  fullWidth: { attribute: "full-width", type: Boolean, reflect: true },
3586
+ innerClass: { attribute: "inner-class", type: String },
3443
3587
  sticky: { type: Boolean, reflect: true }
3444
3588
  };
3445
3589
  function defineSpectreNav(tagName = "sp-nav") {
@@ -3456,6 +3600,7 @@ var SpectreNavItemElement = class extends SpectreBaseElement {
3456
3600
  this.dropdown = false;
3457
3601
  this.href = void 0;
3458
3602
  this.label = void 0;
3603
+ this.mega = false;
3459
3604
  this.open = false;
3460
3605
  this.placement = "bottom-start";
3461
3606
  this.triggerContent = [];
@@ -3558,6 +3703,9 @@ var SpectreNavItemElement = class extends SpectreBaseElement {
3558
3703
  if (changedProperties.has("dropdown") && this.dropdown == null) {
3559
3704
  this.dropdown = false;
3560
3705
  }
3706
+ if (changedProperties.has("mega") && this.mega == null) {
3707
+ this.mega = false;
3708
+ }
3561
3709
  if (changedProperties.has("open") && this.open == null) {
3562
3710
  this.open = false;
3563
3711
  }
@@ -3590,10 +3738,11 @@ var SpectreNavItemElement = class extends SpectreBaseElement {
3590
3738
  this.dispatchEvent(new CustomEvent("sp-close", { bubbles: true }));
3591
3739
  }
3592
3740
  get wrapperClasses() {
3593
- return getDropdownClasses();
3741
+ return getDropdownClasses({ mega: this.mega ?? false });
3594
3742
  }
3595
3743
  get menuClasses() {
3596
3744
  return getDropdownMenuClasses({
3745
+ mega: this.mega ?? false,
3597
3746
  open: this.open ?? false,
3598
3747
  placement: this.placement
3599
3748
  });
@@ -3641,6 +3790,7 @@ SpectreNavItemElement.properties = {
3641
3790
  dropdown: { type: Boolean, reflect: true },
3642
3791
  href: { type: String },
3643
3792
  label: { type: String },
3793
+ mega: { type: Boolean, reflect: true },
3644
3794
  open: { type: Boolean, reflect: true },
3645
3795
  placement: { type: String, reflect: true }
3646
3796
  };
@@ -3656,6 +3806,7 @@ var SpectreSidebarElement = class extends SpectreProjectableElement {
3656
3806
  constructor() {
3657
3807
  super(...arguments);
3658
3808
  this.bordered = false;
3809
+ this.hideToggle = false;
3659
3810
  this.open = false;
3660
3811
  this.toggleLabel = "Toggle sidebar";
3661
3812
  this.handleDocumentKeydown = (event) => {
@@ -3690,6 +3841,9 @@ var SpectreSidebarElement = class extends SpectreProjectableElement {
3690
3841
  if (changedProperties.has("bordered") && this.bordered == null) {
3691
3842
  this.bordered = false;
3692
3843
  }
3844
+ if (changedProperties.has("hideToggle") && this.hideToggle == null) {
3845
+ this.hideToggle = false;
3846
+ }
3693
3847
  if (changedProperties.has("open") && this.open == null) {
3694
3848
  this.open = false;
3695
3849
  }
@@ -3742,16 +3896,16 @@ var SpectreSidebarElement = class extends SpectreProjectableElement {
3742
3896
  return getSidebarClasses({ bordered: this.bordered ?? false });
3743
3897
  }
3744
3898
  render() {
3745
- return html`<button
3746
- aria-expanded="${this.open ? "true" : "false"}"
3747
- aria-label="${ifDefined(this.toggleLabel)}"
3748
- class="${getSidebarToggleClasses()}"
3749
- data-sp-sidebar-toggle
3750
- type="button"
3751
- @click="${() => this.toggle()}"
3752
- >
3753
- &#9776;
3754
- </button>
3899
+ return html`${this.hideToggle ? nothing : html`<button
3900
+ aria-expanded="${this.open ? "true" : "false"}"
3901
+ aria-label="${ifDefined(this.toggleLabel)}"
3902
+ class="${getSidebarToggleClasses()}"
3903
+ data-sp-sidebar-toggle
3904
+ type="button"
3905
+ @click="${() => this.toggle()}"
3906
+ >
3907
+ &#9776;
3908
+ </button>`}
3755
3909
  <div
3756
3910
  class="${getSidebarBackdropClasses()}"
3757
3911
  data-sp-sidebar-backdrop
@@ -3770,6 +3924,7 @@ var SpectreSidebarElement = class extends SpectreProjectableElement {
3770
3924
  };
3771
3925
  SpectreSidebarElement.properties = {
3772
3926
  bordered: { type: Boolean, reflect: true },
3927
+ hideToggle: { attribute: "hide-toggle", type: Boolean, reflect: true },
3773
3928
  open: { type: Boolean, reflect: false },
3774
3929
  toggleLabel: { attribute: "toggle-label", type: String }
3775
3930
  };
@@ -3781,6 +3936,119 @@ function defineSpectreSidebar(tagName = "sp-sidebar") {
3781
3936
  customElements.define(tagName, SpectreSidebarElement);
3782
3937
  return SpectreSidebarElement;
3783
3938
  }
3939
+ var SpectreSidebarToggleElement = class extends SpectreProjectableElement {
3940
+ constructor() {
3941
+ super(...arguments);
3942
+ this.for = void 0;
3943
+ this.label = "Toggle sidebar";
3944
+ this.expanded = false;
3945
+ this.handleTargetToggle = (event) => {
3946
+ if (event.target !== this.targetElement) {
3947
+ return;
3948
+ }
3949
+ this.syncExpanded();
3950
+ };
3951
+ }
3952
+ get id() {
3953
+ return super.id;
3954
+ }
3955
+ set id(value) {
3956
+ super.id = value;
3957
+ }
3958
+ get title() {
3959
+ return super.title;
3960
+ }
3961
+ set title(value) {
3962
+ super.title = value;
3963
+ }
3964
+ getContentContainer() {
3965
+ return this.querySelector("[data-sp-sidebar-toggle-native]");
3966
+ }
3967
+ isInternalNode(node) {
3968
+ if (node.nodeType !== Node.ELEMENT_NODE) {
3969
+ return false;
3970
+ }
3971
+ const el = node;
3972
+ return el.hasAttribute("data-sp-sidebar-toggle-native");
3973
+ }
3974
+ willUpdate(changedProperties) {
3975
+ if (changedProperties.has("label") && !this.label) {
3976
+ this.label = "Toggle sidebar";
3977
+ }
3978
+ }
3979
+ connectedCallback() {
3980
+ super.connectedCallback();
3981
+ document.addEventListener("sp-open", this.handleTargetToggle);
3982
+ document.addEventListener("sp-close", this.handleTargetToggle);
3983
+ this.syncExpanded();
3984
+ }
3985
+ disconnectedCallback() {
3986
+ document.removeEventListener("sp-open", this.handleTargetToggle);
3987
+ document.removeEventListener("sp-close", this.handleTargetToggle);
3988
+ super.disconnectedCallback();
3989
+ }
3990
+ updated(changedProperties) {
3991
+ super.updated(changedProperties);
3992
+ if (changedProperties.has("for")) {
3993
+ this.syncExpanded();
3994
+ }
3995
+ }
3996
+ get targetElement() {
3997
+ if (!this.for) {
3998
+ return null;
3999
+ }
4000
+ const native = document.getElementById(this.for);
4001
+ return native?.closest("sp-sidebar") ?? null;
4002
+ }
4003
+ syncExpanded() {
4004
+ const next = Boolean(this.targetElement?.open);
4005
+ if (next !== this.expanded) {
4006
+ this.expanded = next;
4007
+ this.requestUpdate();
4008
+ }
4009
+ }
4010
+ handleClick() {
4011
+ const target = this.targetElement;
4012
+ if (!target) {
4013
+ return;
4014
+ }
4015
+ const nextOpen = !target.open;
4016
+ target.open = nextOpen;
4017
+ target.dispatchEvent(
4018
+ new CustomEvent(nextOpen ? "sp-open" : "sp-close", { bubbles: true })
4019
+ );
4020
+ }
4021
+ get toggleClasses() {
4022
+ return getSidebarToggleClasses();
4023
+ }
4024
+ render() {
4025
+ return html`<button
4026
+ aria-controls="${ifDefined(this.for)}"
4027
+ aria-expanded="${this.expanded ? "true" : "false"}"
4028
+ aria-label="${ifDefined(this.forwardedAriaLabel ?? this.label)}"
4029
+ class="${this.toggleClasses}"
4030
+ data-sp-sidebar-toggle-native
4031
+ id="${ifDefined(this.id || void 0)}"
4032
+ title="${ifDefined(this.title || void 0)}"
4033
+ type="button"
4034
+ @click="${() => this.handleClick()}"
4035
+ >
4036
+ ${this.hasProjectedContent ? this.projectedContent : html`&#9776;`}
4037
+ </button>`;
4038
+ }
4039
+ };
4040
+ SpectreSidebarToggleElement.properties = {
4041
+ for: { type: String },
4042
+ label: { type: String }
4043
+ };
4044
+ function defineSpectreSidebarToggle(tagName = "sp-sidebar-toggle") {
4045
+ const existingElement = customElements.get(tagName);
4046
+ if (existingElement) {
4047
+ return existingElement;
4048
+ }
4049
+ customElements.define(tagName, SpectreSidebarToggleElement);
4050
+ return SpectreSidebarToggleElement;
4051
+ }
3784
4052
  var SpectreToastElement = class extends SpectreBaseElement {
3785
4053
  constructor() {
3786
4054
  super(...arguments);
@@ -4128,6 +4396,9 @@ var SpectreTextElement = class extends SpectreProjectableElement {
4128
4396
  if (changedProperties.has("variant") && !isTextVariant(this.variant)) {
4129
4397
  this.variant = "default";
4130
4398
  }
4399
+ if (changedProperties.has("transform") && this.transform !== void 0 && !isTextTransform(this.transform)) {
4400
+ this.transform = void 0;
4401
+ }
4131
4402
  }
4132
4403
  get id() {
4133
4404
  return super.id;
@@ -4156,6 +4427,7 @@ var SpectreTextElement = class extends SpectreProjectableElement {
4156
4427
  const textClasses = getTextClasses({
4157
4428
  ...this.family !== void 0 && { family: this.family },
4158
4429
  size: this.size ?? "md",
4430
+ ...this.transform !== void 0 && { transform: this.transform },
4159
4431
  variant: this.variant ?? "default"
4160
4432
  });
4161
4433
  return html$1`<${tag}
@@ -4173,6 +4445,7 @@ SpectreTextElement.properties = {
4173
4445
  family: { type: String, reflect: true },
4174
4446
  level: { type: String, reflect: true },
4175
4447
  size: { type: String, reflect: true },
4448
+ transform: { type: String, reflect: true },
4176
4449
  variant: { type: String, reflect: true }
4177
4450
  };
4178
4451
  function defineSpectreText(tagName = "sp-text") {
@@ -4214,11 +4487,12 @@ function defineSpectreComponents() {
4214
4487
  defineSpectreNav();
4215
4488
  defineSpectreNavItem();
4216
4489
  defineSpectreSidebar();
4490
+ defineSpectreSidebarToggle();
4217
4491
  defineSpectreToast();
4218
4492
  defineSpectreTooltip();
4219
4493
  defineSpectreText();
4220
4494
  }
4221
4495
 
4222
- export { SpectreAlertElement, SpectreAvatarElement, SpectreBadgeElement, SpectreButtonElement, SpectreCardElement, SpectreCheckboxElement, SpectreContainerElement, SpectreDropdownElement, SpectreFieldsetElement, SpectreFooterElement, SpectreGridElement, SpectreIconBoxElement, SpectreInputElement, SpectreLabelElement, SpectreModalElement, SpectreNavElement, SpectreNavItemElement, SpectrePricingCardElement, SpectreRadioElement, SpectreRatingElement, SpectreSectionElement, SpectreSelectElement, SpectreSidebarElement, SpectreSpinnerElement, SpectreStackElement, SpectreTagElement, SpectreTestimonialElement, SpectreTextElement, SpectreTextareaElement, SpectreToastElement, SpectreTooltipElement, defineSpectreAlert, defineSpectreAvatar, defineSpectreBadge, defineSpectreButton, defineSpectreCard, defineSpectreCheckbox, defineSpectreComponents, defineSpectreContainer, defineSpectreDropdown, defineSpectreFieldset, defineSpectreFooter, defineSpectreGrid, defineSpectreIconBox, defineSpectreInput, defineSpectreLabel, defineSpectreModal, defineSpectreNav, defineSpectreNavItem, defineSpectrePricingCard, defineSpectreRadio, defineSpectreRating, defineSpectreSection, defineSpectreSelect, defineSpectreSidebar, defineSpectreSpinner, defineSpectreStack, defineSpectreTag, defineSpectreTestimonial, defineSpectreText, defineSpectreTextarea, defineSpectreToast, defineSpectreTooltip, spectreInputSizes as spectreAlertSizes, spectreAlertVariants, spectreAvatarShapes, spectreAvatarSizes, spectreInputSizes as spectreBadgeSizes, spectreBadgeVariants, spectreInputSizes as spectreButtonSizes, spectreButtonTypes, spectreButtonVariants, spectreCardVariants, spectreContainerMaxWidths, spectreDropdownPlacements, spectreGridColumns, spectreGridGaps, spectreInputSizes as spectreIconBoxSizes, spectreIconBoxVariants, spectreInputSizes, spectreInputTypes, spectreInputSizes as spectreRatingSizes, spectreInputSizes as spectreSpinnerSizes, spectreSpinnerVariants, spectreStackAligns, spectreStackBases, spectreStackDirections, spectreInputSizes as spectreTagSizes, spectreTagVariants, spectreTestimonialVariants, spectreTextFamilies, spectreTextLevels, spectreTextSizes, spectreTextVariants, spectreToastVariants, spectreTooltipPlacements };
4496
+ export { SpectreAlertElement, SpectreAvatarElement, SpectreBadgeElement, SpectreButtonElement, SpectreCardElement, SpectreCheckboxElement, SpectreContainerElement, SpectreDropdownElement, SpectreFieldsetElement, SpectreFooterElement, SpectreGridElement, SpectreIconBoxElement, SpectreInputElement, SpectreLabelElement, SpectreModalElement, SpectreNavElement, SpectreNavItemElement, SpectrePricingCardElement, SpectreRadioElement, SpectreRatingElement, SpectreSectionElement, SpectreSelectElement, SpectreSidebarElement, SpectreSidebarToggleElement, SpectreSpinnerElement, SpectreStackElement, SpectreTagElement, SpectreTestimonialElement, SpectreTextElement, SpectreTextareaElement, SpectreToastElement, SpectreTooltipElement, defineSpectreAlert, defineSpectreAvatar, defineSpectreBadge, defineSpectreButton, defineSpectreCard, defineSpectreCheckbox, defineSpectreComponents, defineSpectreContainer, defineSpectreDropdown, defineSpectreFieldset, defineSpectreFooter, defineSpectreGrid, defineSpectreIconBox, defineSpectreInput, defineSpectreLabel, defineSpectreModal, defineSpectreNav, defineSpectreNavItem, defineSpectrePricingCard, defineSpectreRadio, defineSpectreRating, defineSpectreSection, defineSpectreSelect, defineSpectreSidebar, defineSpectreSidebarToggle, defineSpectreSpinner, defineSpectreStack, defineSpectreTag, defineSpectreTestimonial, defineSpectreText, defineSpectreTextarea, defineSpectreToast, defineSpectreTooltip, spectreInputSizes as spectreAlertSizes, spectreAlertVariants, spectreAvatarShapes, spectreAvatarSizes, spectreInputSizes as spectreBadgeSizes, spectreBadgeVariants, spectreInputSizes as spectreButtonSizes, spectreButtonTypes, spectreButtonVariants, spectreCardVariants, spectreContainerMaxWidths, spectreDropdownPlacements, spectreGridColumns, spectreGridGaps, spectreInputSizes as spectreIconBoxSizes, spectreIconBoxVariants, spectreInputSizes, spectreInputTypes, spectreInputSizes as spectreRatingSizes, spectreInputSizes as spectreSpinnerSizes, spectreSpinnerVariants, spectreStackAligns, spectreStackBases, spectreStackDirections, spectreInputSizes as spectreTagSizes, spectreTagVariants, spectreTestimonialVariants, spectreTextFamilies, spectreTextLevels, spectreTextSizes, spectreTextVariants, spectreToastVariants, spectreTooltipPlacements };
4223
4497
  //# sourceMappingURL=index.js.map
4224
4498
  //# sourceMappingURL=index.js.map