@phcdevworks/spectre-components 1.14.0 → 1.16.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 (156) hide show
  1. package/README.md +266 -86
  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 +6 -0
  15. package/dist/button.cjs.map +1 -1
  16. package/dist/button.d.cts +8 -2
  17. package/dist/button.d.ts +8 -2
  18. package/dist/button.js +6 -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-chip.cjs +411 -0
  37. package/dist/footer-chip.cjs.map +1 -0
  38. package/dist/footer-chip.d.cts +32 -0
  39. package/dist/footer-chip.d.ts +32 -0
  40. package/dist/footer-chip.js +408 -0
  41. package/dist/footer-chip.js.map +1 -0
  42. package/dist/footer-link.cjs +424 -0
  43. package/dist/footer-link.cjs.map +1 -0
  44. package/dist/footer-link.d.cts +43 -0
  45. package/dist/footer-link.d.ts +43 -0
  46. package/dist/footer-link.js +421 -0
  47. package/dist/footer-link.js.map +1 -0
  48. package/dist/footer.cjs +18 -2
  49. package/dist/footer.cjs.map +1 -1
  50. package/dist/footer.d.cts +7 -0
  51. package/dist/footer.d.ts +7 -0
  52. package/dist/footer.js +18 -2
  53. package/dist/footer.js.map +1 -1
  54. package/dist/{form-BGQjgJrL.d.cts → form-bHrr2vl7.d.cts} +40 -1
  55. package/dist/{form-BGQjgJrL.d.ts → form-bHrr2vl7.d.ts} +40 -1
  56. package/dist/grid.cjs +183 -1
  57. package/dist/grid.cjs.map +1 -1
  58. package/dist/grid.d.cts +63 -2
  59. package/dist/grid.d.ts +63 -2
  60. package/dist/grid.js +183 -1
  61. package/dist/grid.js.map +1 -1
  62. package/dist/icon-box.cjs.map +1 -1
  63. package/dist/icon-box.d.cts +2 -2
  64. package/dist/icon-box.d.ts +2 -2
  65. package/dist/icon-box.js.map +1 -1
  66. package/dist/index.cjs +631 -27
  67. package/dist/index.cjs.map +1 -1
  68. package/dist/index.d.cts +5 -1
  69. package/dist/index.d.ts +5 -1
  70. package/dist/index.js +625 -29
  71. package/dist/index.js.map +1 -1
  72. package/dist/input.cjs.map +1 -1
  73. package/dist/input.d.cts +2 -2
  74. package/dist/input.d.ts +2 -2
  75. package/dist/input.js.map +1 -1
  76. package/dist/nav-item.cjs +7 -1
  77. package/dist/nav-item.cjs.map +1 -1
  78. package/dist/nav-item.d.cts +7 -1
  79. package/dist/nav-item.d.ts +7 -1
  80. package/dist/nav-item.js +7 -1
  81. package/dist/nav-item.js.map +1 -1
  82. package/dist/nav.cjs +28 -2
  83. package/dist/nav.cjs.map +1 -1
  84. package/dist/nav.d.cts +14 -0
  85. package/dist/nav.d.ts +14 -0
  86. package/dist/nav.js +28 -2
  87. package/dist/nav.js.map +1 -1
  88. package/dist/rating.cjs.map +1 -1
  89. package/dist/rating.d.cts +2 -2
  90. package/dist/rating.d.ts +2 -2
  91. package/dist/rating.js.map +1 -1
  92. package/dist/section.cjs +22 -1
  93. package/dist/section.cjs.map +1 -1
  94. package/dist/section.d.cts +9 -0
  95. package/dist/section.d.ts +9 -0
  96. package/dist/section.js +22 -1
  97. package/dist/section.js.map +1 -1
  98. package/dist/select.cjs.map +1 -1
  99. package/dist/select.d.cts +1 -1
  100. package/dist/select.d.ts +1 -1
  101. package/dist/select.js.map +1 -1
  102. package/dist/sidebar-link.cjs +436 -0
  103. package/dist/sidebar-link.cjs.map +1 -0
  104. package/dist/sidebar-link.d.cts +50 -0
  105. package/dist/sidebar-link.d.ts +50 -0
  106. package/dist/sidebar-link.js +433 -0
  107. package/dist/sidebar-link.js.map +1 -0
  108. package/dist/sidebar-toggle.cjs +465 -0
  109. package/dist/sidebar-toggle.cjs.map +1 -0
  110. package/dist/sidebar-toggle.d.cts +44 -0
  111. package/dist/sidebar-toggle.d.ts +44 -0
  112. package/dist/sidebar-toggle.js +462 -0
  113. package/dist/sidebar-toggle.js.map +1 -0
  114. package/dist/sidebar.cjs +15 -10
  115. package/dist/sidebar.cjs.map +1 -1
  116. package/dist/sidebar.d.cts +7 -0
  117. package/dist/sidebar.d.ts +7 -0
  118. package/dist/sidebar.js +15 -10
  119. package/dist/sidebar.js.map +1 -1
  120. package/dist/spinner.cjs.map +1 -1
  121. package/dist/spinner.d.cts +2 -2
  122. package/dist/spinner.d.ts +2 -2
  123. package/dist/spinner.js.map +1 -1
  124. package/dist/stack.cjs +19 -5
  125. package/dist/stack.cjs.map +1 -1
  126. package/dist/stack.d.cts +9 -2
  127. package/dist/stack.d.ts +9 -2
  128. package/dist/stack.js +19 -5
  129. package/dist/stack.js.map +1 -1
  130. package/dist/tag.cjs.map +1 -1
  131. package/dist/tag.d.cts +2 -2
  132. package/dist/tag.d.ts +2 -2
  133. package/dist/tag.js.map +1 -1
  134. package/dist/testimonial.cjs.map +1 -1
  135. package/dist/testimonial.d.cts +2 -2
  136. package/dist/testimonial.d.ts +2 -2
  137. package/dist/testimonial.js.map +1 -1
  138. package/dist/text.cjs +1 -3
  139. package/dist/text.cjs.map +1 -1
  140. package/dist/text.d.cts +2 -2
  141. package/dist/text.d.ts +2 -2
  142. package/dist/text.js +1 -3
  143. package/dist/text.js.map +1 -1
  144. package/dist/textarea.cjs.map +1 -1
  145. package/dist/textarea.d.cts +1 -1
  146. package/dist/textarea.d.ts +1 -1
  147. package/dist/textarea.js.map +1 -1
  148. package/dist/toast.cjs.map +1 -1
  149. package/dist/toast.d.cts +2 -2
  150. package/dist/toast.d.ts +2 -2
  151. package/dist/toast.js.map +1 -1
  152. package/dist/tooltip.cjs.map +1 -1
  153. package/dist/tooltip.d.cts +2 -2
  154. package/dist/tooltip.d.ts +2 -2
  155. package/dist/tooltip.js.map +1 -1
  156. package/package.json +34 -14
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, getFooterChipClasses, getFooterLinkClasses, getModalOverlayClasses, getModalClasses, getNavClasses, getNavLinkClasses, getSidebarClasses, getSidebarToggleClasses, getSidebarBackdropClasses, getSidebarLinkClasses, 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';
@@ -184,16 +184,118 @@ function isGridSpanOptions(value) {
184
184
  const candidate = value;
185
185
  return (candidate.base === void 0 || isGridSpan(candidate.base)) && (candidate.md === void 0 || isGridSpan(candidate.md)) && (candidate.lg === void 0 || isGridSpan(candidate.lg));
186
186
  }
187
- var spectreStackDirections = ["vertical", "horizontal"];
188
- function isStackDirection(value) {
189
- return spectreStackDirections.includes(
187
+ var spectreGridOffsets = [
188
+ 0,
189
+ 1,
190
+ 2,
191
+ 3,
192
+ 4,
193
+ 5,
194
+ 6,
195
+ 7,
196
+ 8,
197
+ 9,
198
+ 10,
199
+ 11
200
+ ];
201
+ function isGridOffset(value) {
202
+ return spectreGridOffsets.includes(value);
203
+ }
204
+ function isGridOffsetOptions(value) {
205
+ if (typeof value !== "object" || value === null) {
206
+ return false;
207
+ }
208
+ const candidate = value;
209
+ return (candidate.base === void 0 || isGridOffset(candidate.base)) && (candidate.md === void 0 || isGridOffset(candidate.md)) && (candidate.lg === void 0 || isGridOffset(candidate.lg));
210
+ }
211
+ var spectreGridOrders = [
212
+ "first",
213
+ "last",
214
+ "none",
215
+ 1,
216
+ 2,
217
+ 3,
218
+ 4,
219
+ 5,
220
+ 6,
221
+ 7,
222
+ 8,
223
+ 9,
224
+ 10,
225
+ 11,
226
+ 12
227
+ ];
228
+ function isGridOrder(value) {
229
+ return spectreGridOrders.includes(
190
230
  value
191
231
  );
192
232
  }
233
+ function isGridOrderOptions(value) {
234
+ if (typeof value !== "object" || value === null) {
235
+ return false;
236
+ }
237
+ const candidate = value;
238
+ return (candidate.base === void 0 || isGridOrder(candidate.base)) && (candidate.md === void 0 || isGridOrder(candidate.md)) && (candidate.lg === void 0 || isGridOrder(candidate.lg));
239
+ }
240
+ var spectreGridLeadingWeights = [1.5, 1.6, 2, 2.5, 3];
241
+ function isGridLeadingWeight(value) {
242
+ return spectreGridLeadingWeights.includes(
243
+ value
244
+ );
245
+ }
246
+ function isGridLeadingWeightOptions(value) {
247
+ if (typeof value !== "object" || value === null) {
248
+ return false;
249
+ }
250
+ const candidate = value;
251
+ return (candidate.base === void 0 || isGridLeadingWeight(candidate.base)) && (candidate.md === void 0 || isGridLeadingWeight(candidate.md)) && (candidate.lg === void 0 || isGridLeadingWeight(candidate.lg));
252
+ }
253
+ function isGridLeadingTracksOptions(value) {
254
+ if (typeof value !== "object" || value === null) {
255
+ return false;
256
+ }
257
+ const candidate = value;
258
+ return isGridLeadingWeight(candidate.weight) || isGridLeadingWeightOptions(candidate.weight);
259
+ }
260
+ var spectreGridFixedTrackCounts = [1, 2, 3, 4];
261
+ function isGridFixedTrackCount(value) {
262
+ return spectreGridFixedTrackCounts.includes(
263
+ value
264
+ );
265
+ }
266
+ function isGridFixedTracksOptions(value) {
267
+ if (typeof value !== "object" || value === null) {
268
+ return false;
269
+ }
270
+ const candidate = value;
271
+ return isGridFixedTrackCount(candidate.count);
272
+ }
273
+ var spectreGridTemplates = [
274
+ "edge-fluid-edge",
275
+ "label-fluid-fluid"
276
+ ];
277
+ function isGridTemplate(value) {
278
+ return spectreGridTemplates.includes(value);
279
+ }
280
+ function isGridExplicitTemplateOptions(value) {
281
+ if (typeof value !== "object" || value === null) {
282
+ return false;
283
+ }
284
+ const candidate = value;
285
+ return isGridTemplate(candidate.template) && (candidate.weight === void 0 || isGridLeadingWeight(candidate.weight));
286
+ }
287
+ var spectreStackDirections = ["vertical", "horizontal"];
288
+ function isStackDirection(value) {
289
+ return spectreStackDirections.includes(value);
290
+ }
193
291
  var spectreStackBases = ["sidebar"];
194
292
  function isStackBasis(value) {
195
293
  return spectreStackBases.includes(value);
196
294
  }
295
+ var spectreNavAligns = ["start", "center", "end"];
296
+ function isNavAlign(value) {
297
+ return spectreNavAligns.includes(value);
298
+ }
197
299
  var spectreStackAligns = ["center", "stretch"];
198
300
  function isStackAlign(value) {
199
301
  return spectreStackAligns.includes(value);
@@ -218,6 +320,12 @@ var spectreToastVariants = [
218
320
  function isToastVariant(value) {
219
321
  return spectreToastVariants.includes(value);
220
322
  }
323
+ var spectreSidebarLinkLevels = ["parent", "child"];
324
+ function isSidebarLinkLevel(value) {
325
+ return spectreSidebarLinkLevels.includes(
326
+ value
327
+ );
328
+ }
221
329
  var spectreTooltipPlacements = [
222
330
  "top",
223
331
  "bottom",
@@ -278,9 +386,7 @@ var spectreTextTransforms = [
278
386
  "capitalize"
279
387
  ];
280
388
  function isTextTransform(value) {
281
- return spectreTextTransforms.includes(
282
- value
283
- );
389
+ return spectreTextTransforms.includes(value);
284
390
  }
285
391
  function normalizeInt(value, fallback, min = 0) {
286
392
  if (value == null || typeof value !== "number" || !Number.isInteger(value) || value < min) {
@@ -288,6 +394,13 @@ function normalizeInt(value, fallback, min = 0) {
288
394
  }
289
395
  return value;
290
396
  }
397
+ var spectreUtilityClassPattern = /^sp-[a-z0-9]+(?:-[a-z0-9]+)*$/;
398
+ function sanitizeUtilityClasses(value) {
399
+ if (!value) {
400
+ return "";
401
+ }
402
+ return value.split(/\s+/).filter((token) => spectreUtilityClassPattern.test(token)).join(" ");
403
+ }
291
404
  var SpectreBaseElement = class extends LitElement {
292
405
  constructor() {
293
406
  super(...arguments);
@@ -631,6 +744,7 @@ var SpectreProjectableElement = class extends SpectreBaseElement {
631
744
  var SpectreButtonElement = class extends SpectreProjectableElement {
632
745
  constructor() {
633
746
  super(...arguments);
747
+ this.compact = false;
634
748
  this.disabled = false;
635
749
  this.fullWidth = false;
636
750
  this.iconOnly = false;
@@ -674,6 +788,9 @@ var SpectreButtonElement = class extends SpectreProjectableElement {
674
788
  return el.hasAttribute("data-sp-button-native") || el.hasAttribute("data-sp-button-loading-label") || el.hasAttribute("data-sp-button-label-fallback");
675
789
  }
676
790
  willUpdate(changedProperties) {
791
+ if (changedProperties.has("compact") && this.compact == null) {
792
+ this.compact = false;
793
+ }
677
794
  if (changedProperties.has("disabled") && this.disabled == null) {
678
795
  this.disabled = false;
679
796
  }
@@ -709,6 +826,7 @@ var SpectreButtonElement = class extends SpectreProjectableElement {
709
826
  }
710
827
  get buttonClasses() {
711
828
  return getButtonClasses({
829
+ compact: this.compact ?? false,
712
830
  disabled: this.isDisabled,
713
831
  fullWidth: this.fullWidth ?? false,
714
832
  iconOnly: this.iconOnly ?? false,
@@ -785,6 +903,7 @@ var SpectreButtonElement = class extends SpectreProjectableElement {
785
903
  }
786
904
  };
787
905
  SpectreButtonElement.properties = {
906
+ compact: { type: Boolean, reflect: true },
788
907
  disabled: { type: Boolean, reflect: true },
789
908
  form: { type: String },
790
909
  fullWidth: { attribute: "full-width", type: Boolean, reflect: true },
@@ -2770,6 +2889,7 @@ function defineSpectrePricingCard(tagName = "sp-pricing-card") {
2770
2889
  var SpectreContainerElement = class extends SpectreProjectableElement {
2771
2890
  constructor() {
2772
2891
  super(...arguments);
2892
+ this.innerClass = void 0;
2773
2893
  this.maxWidth = void 0;
2774
2894
  }
2775
2895
  get id() {
@@ -2784,6 +2904,11 @@ var SpectreContainerElement = class extends SpectreProjectableElement {
2784
2904
  set title(value) {
2785
2905
  super.title = value;
2786
2906
  }
2907
+ connectedCallback() {
2908
+ var _a;
2909
+ super.connectedCallback();
2910
+ (_a = this.style).display || (_a.display = "block");
2911
+ }
2787
2912
  getContentContainer() {
2788
2913
  return this.querySelector("[data-sp-container-native]");
2789
2914
  }
@@ -2800,9 +2925,11 @@ var SpectreContainerElement = class extends SpectreProjectableElement {
2800
2925
  }
2801
2926
  }
2802
2927
  get containerClasses() {
2803
- return getContainerClasses(
2928
+ const recipeClasses = getContainerClasses(
2804
2929
  this.maxWidth != null ? { maxWidth: this.maxWidth } : {}
2805
2930
  );
2931
+ const utilityClasses = sanitizeUtilityClasses(this.innerClass);
2932
+ return utilityClasses ? `${recipeClasses} ${utilityClasses}` : recipeClasses;
2806
2933
  }
2807
2934
  render() {
2808
2935
  return html`<div
@@ -2819,6 +2946,7 @@ var SpectreContainerElement = class extends SpectreProjectableElement {
2819
2946
  }
2820
2947
  };
2821
2948
  SpectreContainerElement.properties = {
2949
+ innerClass: { attribute: "inner-class", type: String },
2822
2950
  maxWidth: { attribute: "max-width", type: String, reflect: true }
2823
2951
  };
2824
2952
  function defineSpectreContainer(tagName = "sp-container") {
@@ -2833,7 +2961,13 @@ var SpectreGridElement = class extends SpectreProjectableElement {
2833
2961
  constructor() {
2834
2962
  super(...arguments);
2835
2963
  this.columns = 1;
2964
+ this.columnGap = void 0;
2965
+ this.explicitTemplate = void 0;
2966
+ this.fixedTracks = void 0;
2836
2967
  this.gap = "md";
2968
+ this.innerClass = void 0;
2969
+ this.leadingTracks = void 0;
2970
+ this.rowGap = void 0;
2837
2971
  }
2838
2972
  get id() {
2839
2973
  return super.id;
@@ -2847,6 +2981,11 @@ var SpectreGridElement = class extends SpectreProjectableElement {
2847
2981
  set title(value) {
2848
2982
  super.title = value;
2849
2983
  }
2984
+ connectedCallback() {
2985
+ var _a;
2986
+ super.connectedCallback();
2987
+ (_a = this.style).display || (_a.display = "block");
2988
+ }
2850
2989
  getContentContainer() {
2851
2990
  return this.querySelector("[data-sp-grid-native]");
2852
2991
  }
@@ -2865,18 +3004,72 @@ var SpectreGridElement = class extends SpectreProjectableElement {
2865
3004
  if (changedProperties.has("gap") && (this.gap == null || !isGridGap(this.gap))) {
2866
3005
  this.gap = "md";
2867
3006
  }
3007
+ if (changedProperties.has("columnGap") && this.columnGap != null && !isGridGap(this.columnGap)) {
3008
+ this.columnGap = void 0;
3009
+ }
3010
+ if (changedProperties.has("rowGap") && this.rowGap != null && !isGridGap(this.rowGap)) {
3011
+ this.rowGap = void 0;
3012
+ }
2868
3013
  if (changedProperties.has("span") && this.span !== void 0 && !isGridSpan(this.span) && !isGridSpanOptions(this.span)) {
2869
3014
  this.span = void 0;
2870
3015
  }
3016
+ if (changedProperties.has("offset") && this.offset !== void 0 && !isGridOffset(this.offset) && !isGridOffsetOptions(this.offset)) {
3017
+ this.offset = void 0;
3018
+ }
3019
+ if (changedProperties.has("rowSpan") && this.rowSpan !== void 0 && !isGridSpan(this.rowSpan) && !isGridSpanOptions(this.rowSpan)) {
3020
+ this.rowSpan = void 0;
3021
+ }
3022
+ if (changedProperties.has("rowOffset") && this.rowOffset !== void 0 && !isGridOffset(this.rowOffset) && !isGridOffsetOptions(this.rowOffset)) {
3023
+ this.rowOffset = void 0;
3024
+ }
3025
+ if (changedProperties.has("order") && this.order !== void 0 && !isGridOrder(this.order) && !isGridOrderOptions(this.order)) {
3026
+ this.order = void 0;
3027
+ }
3028
+ if (changedProperties.has("leadingTracks") && this.leadingTracks !== void 0 && !isGridLeadingTracksOptions(this.leadingTracks)) {
3029
+ this.leadingTracks = void 0;
3030
+ }
3031
+ if (changedProperties.has("fixedTracks") && this.fixedTracks !== void 0 && !isGridFixedTracksOptions(this.fixedTracks)) {
3032
+ this.fixedTracks = void 0;
3033
+ }
3034
+ if (changedProperties.has("explicitTemplate") && this.explicitTemplate !== void 0 && !isGridExplicitTemplateOptions(this.explicitTemplate)) {
3035
+ this.explicitTemplate = void 0;
3036
+ }
2871
3037
  }
2872
3038
  get gridClasses() {
2873
- return getGridClasses({
3039
+ const recipeClasses = getGridClasses({
2874
3040
  columns: this.columns,
2875
3041
  gap: this.gap,
3042
+ ...this.columnGap !== void 0 && {
3043
+ columnGap: this.columnGap
3044
+ },
3045
+ ...this.rowGap !== void 0 && { rowGap: this.rowGap },
2876
3046
  ...this.span !== void 0 && {
2877
3047
  span: this.span
3048
+ },
3049
+ ...this.offset !== void 0 && {
3050
+ offset: this.offset
3051
+ },
3052
+ ...this.rowSpan !== void 0 && {
3053
+ rowSpan: this.rowSpan
3054
+ },
3055
+ ...this.rowOffset !== void 0 && {
3056
+ rowOffset: this.rowOffset
3057
+ },
3058
+ ...this.order !== void 0 && {
3059
+ order: this.order
3060
+ },
3061
+ ...this.leadingTracks !== void 0 && {
3062
+ leadingTracks: this.leadingTracks
3063
+ },
3064
+ ...this.fixedTracks !== void 0 && {
3065
+ fixedTracks: this.fixedTracks
3066
+ },
3067
+ ...this.explicitTemplate !== void 0 && {
3068
+ explicitTemplate: this.explicitTemplate
2878
3069
  }
2879
3070
  });
3071
+ const utilityClasses = sanitizeUtilityClasses(this.innerClass);
3072
+ return utilityClasses ? `${recipeClasses} ${utilityClasses}` : recipeClasses;
2880
3073
  }
2881
3074
  render() {
2882
3075
  return html`<div
@@ -2894,7 +3087,17 @@ var SpectreGridElement = class extends SpectreProjectableElement {
2894
3087
  };
2895
3088
  SpectreGridElement.properties = {
2896
3089
  columns: { type: Number, reflect: true },
3090
+ columnGap: { attribute: "column-gap", type: String, reflect: true },
3091
+ explicitTemplate: { attribute: "explicit-template", type: Object },
3092
+ fixedTracks: { attribute: "fixed-tracks", type: Object },
2897
3093
  gap: { type: String, reflect: true },
3094
+ innerClass: { attribute: "inner-class", type: String },
3095
+ leadingTracks: { attribute: "leading-tracks", type: Object },
3096
+ offset: { type: Object },
3097
+ order: { type: Object },
3098
+ rowGap: { attribute: "row-gap", type: String, reflect: true },
3099
+ rowOffset: { attribute: "row-offset", type: Object },
3100
+ rowSpan: { attribute: "row-span", type: Object },
2898
3101
  span: { type: Object }
2899
3102
  };
2900
3103
  function defineSpectreGrid(tagName = "sp-grid") {
@@ -2906,6 +3109,10 @@ function defineSpectreGrid(tagName = "sp-grid") {
2906
3109
  return SpectreGridElement;
2907
3110
  }
2908
3111
  var SpectreSectionElement = class extends SpectreProjectableElement {
3112
+ constructor() {
3113
+ super(...arguments);
3114
+ this.innerClass = void 0;
3115
+ }
2909
3116
  get id() {
2910
3117
  return super.id;
2911
3118
  }
@@ -2918,6 +3125,11 @@ var SpectreSectionElement = class extends SpectreProjectableElement {
2918
3125
  set title(value) {
2919
3126
  super.title = value;
2920
3127
  }
3128
+ connectedCallback() {
3129
+ var _a;
3130
+ super.connectedCallback();
3131
+ (_a = this.style).display || (_a.display = "block");
3132
+ }
2921
3133
  getContentContainer() {
2922
3134
  return this.querySelector("[data-sp-section-native]");
2923
3135
  }
@@ -2929,7 +3141,9 @@ var SpectreSectionElement = class extends SpectreProjectableElement {
2929
3141
  return el.hasAttribute("data-sp-section-native");
2930
3142
  }
2931
3143
  get sectionClasses() {
2932
- return getSectionClasses({});
3144
+ const recipeClasses = getSectionClasses({});
3145
+ const utilityClasses = sanitizeUtilityClasses(this.innerClass);
3146
+ return utilityClasses ? `${recipeClasses} ${utilityClasses}` : recipeClasses;
2933
3147
  }
2934
3148
  render() {
2935
3149
  return html`<section
@@ -2945,6 +3159,9 @@ var SpectreSectionElement = class extends SpectreProjectableElement {
2945
3159
  </section>`;
2946
3160
  }
2947
3161
  };
3162
+ SpectreSectionElement.properties = {
3163
+ innerClass: { attribute: "inner-class", type: String }
3164
+ };
2948
3165
  function defineSpectreSection(tagName = "sp-section") {
2949
3166
  const existingElement = customElements.get(tagName);
2950
3167
  if (existingElement) {
@@ -2959,6 +3176,7 @@ var SpectreStackElement = class extends SpectreProjectableElement {
2959
3176
  this.align = "center";
2960
3177
  this.basis = void 0;
2961
3178
  this.direction = "vertical";
3179
+ this.innerClass = void 0;
2962
3180
  }
2963
3181
  get id() {
2964
3182
  return super.id;
@@ -2972,6 +3190,11 @@ var SpectreStackElement = class extends SpectreProjectableElement {
2972
3190
  set title(value) {
2973
3191
  super.title = value;
2974
3192
  }
3193
+ connectedCallback() {
3194
+ var _a;
3195
+ super.connectedCallback();
3196
+ (_a = this.style).display || (_a.display = "block");
3197
+ }
2975
3198
  getContentContainer() {
2976
3199
  return this.querySelector("[data-sp-stack-native]");
2977
3200
  }
@@ -2994,11 +3217,13 @@ var SpectreStackElement = class extends SpectreProjectableElement {
2994
3217
  }
2995
3218
  }
2996
3219
  get stackClasses() {
2997
- return getStackClasses({
3220
+ const recipeClasses = getStackClasses({
2998
3221
  align: this.align,
2999
3222
  direction: this.direction,
3000
3223
  ...this.basis != null ? { basis: this.basis } : {}
3001
3224
  });
3225
+ const utilityClasses = sanitizeUtilityClasses(this.innerClass);
3226
+ return utilityClasses ? `${recipeClasses} ${utilityClasses}` : recipeClasses;
3002
3227
  }
3003
3228
  render() {
3004
3229
  return html`<div
@@ -3017,7 +3242,8 @@ var SpectreStackElement = class extends SpectreProjectableElement {
3017
3242
  SpectreStackElement.properties = {
3018
3243
  align: { type: String, reflect: true },
3019
3244
  basis: { type: String, reflect: true },
3020
- direction: { type: String, reflect: true }
3245
+ direction: { type: String, reflect: true },
3246
+ innerClass: { attribute: "inner-class", type: String }
3021
3247
  };
3022
3248
  function defineSpectreStack(tagName = "sp-stack") {
3023
3249
  const existingElement = customElements.get(tagName);
@@ -3031,6 +3257,7 @@ var SpectreDropdownElement = class extends SpectreBaseElement {
3031
3257
  constructor() {
3032
3258
  super(...arguments);
3033
3259
  this.fullWidth = false;
3260
+ this.mega = false;
3034
3261
  this.open = false;
3035
3262
  this.placement = "bottom-start";
3036
3263
  this.triggerLabel = "Toggle menu";
@@ -3134,6 +3361,9 @@ var SpectreDropdownElement = class extends SpectreBaseElement {
3134
3361
  if (changedProperties.has("fullWidth") && this.fullWidth == null) {
3135
3362
  this.fullWidth = false;
3136
3363
  }
3364
+ if (changedProperties.has("mega") && this.mega == null) {
3365
+ this.mega = false;
3366
+ }
3137
3367
  if (changedProperties.has("open") && this.open == null) {
3138
3368
  this.open = false;
3139
3369
  }
@@ -3169,10 +3399,14 @@ var SpectreDropdownElement = class extends SpectreBaseElement {
3169
3399
  this.dispatchEvent(new CustomEvent("sp-close", { bubbles: true }));
3170
3400
  }
3171
3401
  get dropdownClasses() {
3172
- return getDropdownClasses({ fullWidth: this.fullWidth ?? false });
3402
+ return getDropdownClasses({
3403
+ fullWidth: this.fullWidth ?? false,
3404
+ mega: this.mega ?? false
3405
+ });
3173
3406
  }
3174
3407
  get menuClasses() {
3175
3408
  return getDropdownMenuClasses({
3409
+ mega: this.mega ?? false,
3176
3410
  open: this.open ?? false,
3177
3411
  placement: this.placement
3178
3412
  });
@@ -3202,6 +3436,7 @@ var SpectreDropdownElement = class extends SpectreBaseElement {
3202
3436
  };
3203
3437
  SpectreDropdownElement.properties = {
3204
3438
  fullWidth: { attribute: "full-width", type: Boolean, reflect: true },
3439
+ mega: { type: Boolean, reflect: true },
3205
3440
  open: { type: Boolean, reflect: true },
3206
3441
  placement: { type: String, reflect: true },
3207
3442
  triggerLabel: { attribute: "trigger-label", type: String }
@@ -3219,6 +3454,7 @@ var SpectreFooterElement = class extends SpectreProjectableElement {
3219
3454
  super(...arguments);
3220
3455
  this.bordered = false;
3221
3456
  this.fullWidth = false;
3457
+ this.innerClass = void 0;
3222
3458
  }
3223
3459
  get id() {
3224
3460
  return super.id;
@@ -3232,6 +3468,11 @@ var SpectreFooterElement = class extends SpectreProjectableElement {
3232
3468
  set title(value) {
3233
3469
  super.title = value;
3234
3470
  }
3471
+ connectedCallback() {
3472
+ var _a;
3473
+ super.connectedCallback();
3474
+ (_a = this.style).display || (_a.display = "block");
3475
+ }
3235
3476
  getContentContainer() {
3236
3477
  return this.querySelector("[data-sp-footer-native]");
3237
3478
  }
@@ -3251,10 +3492,12 @@ var SpectreFooterElement = class extends SpectreProjectableElement {
3251
3492
  }
3252
3493
  }
3253
3494
  get footerClasses() {
3254
- return getFooterClasses({
3495
+ const recipeClasses = getFooterClasses({
3255
3496
  bordered: this.bordered ?? false,
3256
3497
  fullWidth: this.fullWidth ?? false
3257
3498
  });
3499
+ const utilityClasses = sanitizeUtilityClasses(this.innerClass);
3500
+ return utilityClasses ? `${recipeClasses} ${utilityClasses}` : recipeClasses;
3258
3501
  }
3259
3502
  render() {
3260
3503
  return html`<footer
@@ -3270,7 +3513,8 @@ var SpectreFooterElement = class extends SpectreProjectableElement {
3270
3513
  };
3271
3514
  SpectreFooterElement.properties = {
3272
3515
  bordered: { type: Boolean, reflect: true },
3273
- fullWidth: { attribute: "full-width", type: Boolean, reflect: true }
3516
+ fullWidth: { attribute: "full-width", type: Boolean, reflect: true },
3517
+ innerClass: { attribute: "inner-class", type: String }
3274
3518
  };
3275
3519
  function defineSpectreFooter(tagName = "sp-footer") {
3276
3520
  const existingElement = customElements.get(tagName);
@@ -3280,6 +3524,137 @@ function defineSpectreFooter(tagName = "sp-footer") {
3280
3524
  customElements.define(tagName, SpectreFooterElement);
3281
3525
  return SpectreFooterElement;
3282
3526
  }
3527
+ var SpectreFooterChipElement = class extends SpectreProjectableElement {
3528
+ constructor() {
3529
+ super(...arguments);
3530
+ this.disabled = false;
3531
+ }
3532
+ get id() {
3533
+ return super.id;
3534
+ }
3535
+ set id(value) {
3536
+ super.id = value;
3537
+ }
3538
+ get title() {
3539
+ return super.title;
3540
+ }
3541
+ set title(value) {
3542
+ super.title = value;
3543
+ }
3544
+ getContentContainer() {
3545
+ return this.querySelector("[data-sp-footer-chip-native]");
3546
+ }
3547
+ isInternalNode(node) {
3548
+ if (node.nodeType !== Node.ELEMENT_NODE) {
3549
+ return false;
3550
+ }
3551
+ const el = node;
3552
+ return el.hasAttribute("data-sp-footer-chip-native");
3553
+ }
3554
+ willUpdate(changedProperties) {
3555
+ if (changedProperties.has("disabled") && this.disabled == null) {
3556
+ this.disabled = false;
3557
+ }
3558
+ }
3559
+ get footerChipClasses() {
3560
+ return getFooterChipClasses({ disabled: this.disabled ?? false });
3561
+ }
3562
+ render() {
3563
+ return html`<span
3564
+ aria-disabled="${ifDefined(this.disabled ? "true" : void 0)}"
3565
+ aria-label="${ifDefined(this.forwardedAriaLabel)}"
3566
+ class="${this.footerChipClasses}"
3567
+ data-sp-footer-chip-native
3568
+ id="${ifDefined(this.id || void 0)}"
3569
+ title="${ifDefined(this.title || void 0)}"
3570
+ >
3571
+ ${this.hasProjectedContent ? this.projectedContent : nothing}
3572
+ </span>`;
3573
+ }
3574
+ };
3575
+ SpectreFooterChipElement.properties = {
3576
+ disabled: { type: Boolean, reflect: true }
3577
+ };
3578
+ function defineSpectreFooterChip(tagName = "sp-footer-chip") {
3579
+ const existingElement = customElements.get(tagName);
3580
+ if (existingElement) {
3581
+ return existingElement;
3582
+ }
3583
+ customElements.define(tagName, SpectreFooterChipElement);
3584
+ return SpectreFooterChipElement;
3585
+ }
3586
+ var SpectreFooterLinkElement = class extends SpectreProjectableElement {
3587
+ constructor() {
3588
+ super(...arguments);
3589
+ this.active = false;
3590
+ this.disabled = false;
3591
+ this.href = void 0;
3592
+ }
3593
+ get id() {
3594
+ return super.id;
3595
+ }
3596
+ set id(value) {
3597
+ super.id = value;
3598
+ }
3599
+ get title() {
3600
+ return super.title;
3601
+ }
3602
+ set title(value) {
3603
+ super.title = value;
3604
+ }
3605
+ getContentContainer() {
3606
+ return this.querySelector("[data-sp-footer-link-native]");
3607
+ }
3608
+ isInternalNode(node) {
3609
+ if (node.nodeType !== Node.ELEMENT_NODE) {
3610
+ return false;
3611
+ }
3612
+ const el = node;
3613
+ return el.hasAttribute("data-sp-footer-link-native");
3614
+ }
3615
+ willUpdate(changedProperties) {
3616
+ if (changedProperties.has("active") && this.active == null) {
3617
+ this.active = false;
3618
+ }
3619
+ if (changedProperties.has("disabled") && this.disabled == null) {
3620
+ this.disabled = false;
3621
+ }
3622
+ }
3623
+ get footerLinkClasses() {
3624
+ return getFooterLinkClasses({
3625
+ active: this.active ?? false,
3626
+ disabled: this.disabled ?? false
3627
+ });
3628
+ }
3629
+ render() {
3630
+ return html`<a
3631
+ aria-current="${ifDefined(this.active ? "page" : void 0)}"
3632
+ aria-disabled="${ifDefined(this.disabled ? "true" : void 0)}"
3633
+ aria-label="${ifDefined(this.forwardedAriaLabel)}"
3634
+ class="${this.footerLinkClasses}"
3635
+ data-sp-footer-link-native
3636
+ href="${ifDefined(this.disabled ? void 0 : this.href)}"
3637
+ id="${ifDefined(this.id || void 0)}"
3638
+ tabindex="${ifDefined(this.disabled ? -1 : void 0)}"
3639
+ title="${ifDefined(this.title || void 0)}"
3640
+ >
3641
+ ${this.hasProjectedContent ? this.projectedContent : nothing}
3642
+ </a>`;
3643
+ }
3644
+ };
3645
+ SpectreFooterLinkElement.properties = {
3646
+ active: { type: Boolean, reflect: true },
3647
+ disabled: { type: Boolean, reflect: true },
3648
+ href: { type: String }
3649
+ };
3650
+ function defineSpectreFooterLink(tagName = "sp-footer-link") {
3651
+ const existingElement = customElements.get(tagName);
3652
+ if (existingElement) {
3653
+ return existingElement;
3654
+ }
3655
+ customElements.define(tagName, SpectreFooterLinkElement);
3656
+ return SpectreFooterLinkElement;
3657
+ }
3283
3658
  var FOCUSABLE_SELECTOR = [
3284
3659
  "a[href]",
3285
3660
  "button:not([disabled])",
@@ -3450,8 +3825,10 @@ function defineSpectreModal(tagName = "sp-modal") {
3450
3825
  var SpectreNavElement = class extends SpectreProjectableElement {
3451
3826
  constructor() {
3452
3827
  super(...arguments);
3828
+ this.align = void 0;
3453
3829
  this.bordered = false;
3454
3830
  this.fullWidth = false;
3831
+ this.innerClass = void 0;
3455
3832
  this.sticky = false;
3456
3833
  }
3457
3834
  get id() {
@@ -3466,6 +3843,11 @@ var SpectreNavElement = class extends SpectreProjectableElement {
3466
3843
  set title(value) {
3467
3844
  super.title = value;
3468
3845
  }
3846
+ connectedCallback() {
3847
+ var _a;
3848
+ super.connectedCallback();
3849
+ (_a = this.style).display || (_a.display = "block");
3850
+ }
3469
3851
  getContentContainer() {
3470
3852
  return this.querySelector("[data-sp-nav-native]");
3471
3853
  }
@@ -3486,13 +3868,19 @@ var SpectreNavElement = class extends SpectreProjectableElement {
3486
3868
  if (changedProperties.has("sticky") && this.sticky == null) {
3487
3869
  this.sticky = false;
3488
3870
  }
3871
+ if (changedProperties.has("align") && this.align != null && !isNavAlign(this.align)) {
3872
+ this.align = void 0;
3873
+ }
3489
3874
  }
3490
3875
  get navClasses() {
3491
- return getNavClasses({
3876
+ const recipeClasses = getNavClasses({
3492
3877
  bordered: this.bordered ?? false,
3493
3878
  fullWidth: this.fullWidth ?? false,
3494
- sticky: this.sticky ?? false
3879
+ sticky: this.sticky ?? false,
3880
+ ...this.align !== void 0 && { align: this.align }
3495
3881
  });
3882
+ const utilityClasses = sanitizeUtilityClasses(this.innerClass);
3883
+ return utilityClasses ? `${recipeClasses} ${utilityClasses}` : recipeClasses;
3496
3884
  }
3497
3885
  render() {
3498
3886
  return html`<nav
@@ -3507,8 +3895,10 @@ var SpectreNavElement = class extends SpectreProjectableElement {
3507
3895
  }
3508
3896
  };
3509
3897
  SpectreNavElement.properties = {
3898
+ align: { type: String, reflect: true },
3510
3899
  bordered: { type: Boolean, reflect: true },
3511
3900
  fullWidth: { attribute: "full-width", type: Boolean, reflect: true },
3901
+ innerClass: { attribute: "inner-class", type: String },
3512
3902
  sticky: { type: Boolean, reflect: true }
3513
3903
  };
3514
3904
  function defineSpectreNav(tagName = "sp-nav") {
@@ -3525,6 +3915,7 @@ var SpectreNavItemElement = class extends SpectreBaseElement {
3525
3915
  this.dropdown = false;
3526
3916
  this.href = void 0;
3527
3917
  this.label = void 0;
3918
+ this.mega = false;
3528
3919
  this.open = false;
3529
3920
  this.placement = "bottom-start";
3530
3921
  this.triggerContent = [];
@@ -3627,6 +4018,9 @@ var SpectreNavItemElement = class extends SpectreBaseElement {
3627
4018
  if (changedProperties.has("dropdown") && this.dropdown == null) {
3628
4019
  this.dropdown = false;
3629
4020
  }
4021
+ if (changedProperties.has("mega") && this.mega == null) {
4022
+ this.mega = false;
4023
+ }
3630
4024
  if (changedProperties.has("open") && this.open == null) {
3631
4025
  this.open = false;
3632
4026
  }
@@ -3659,10 +4053,11 @@ var SpectreNavItemElement = class extends SpectreBaseElement {
3659
4053
  this.dispatchEvent(new CustomEvent("sp-close", { bubbles: true }));
3660
4054
  }
3661
4055
  get wrapperClasses() {
3662
- return getDropdownClasses();
4056
+ return getDropdownClasses({ mega: this.mega ?? false });
3663
4057
  }
3664
4058
  get menuClasses() {
3665
4059
  return getDropdownMenuClasses({
4060
+ mega: this.mega ?? false,
3666
4061
  open: this.open ?? false,
3667
4062
  placement: this.placement
3668
4063
  });
@@ -3710,6 +4105,7 @@ SpectreNavItemElement.properties = {
3710
4105
  dropdown: { type: Boolean, reflect: true },
3711
4106
  href: { type: String },
3712
4107
  label: { type: String },
4108
+ mega: { type: Boolean, reflect: true },
3713
4109
  open: { type: Boolean, reflect: true },
3714
4110
  placement: { type: String, reflect: true }
3715
4111
  };
@@ -3725,6 +4121,7 @@ var SpectreSidebarElement = class extends SpectreProjectableElement {
3725
4121
  constructor() {
3726
4122
  super(...arguments);
3727
4123
  this.bordered = false;
4124
+ this.hideToggle = false;
3728
4125
  this.open = false;
3729
4126
  this.toggleLabel = "Toggle sidebar";
3730
4127
  this.handleDocumentKeydown = (event) => {
@@ -3759,6 +4156,9 @@ var SpectreSidebarElement = class extends SpectreProjectableElement {
3759
4156
  if (changedProperties.has("bordered") && this.bordered == null) {
3760
4157
  this.bordered = false;
3761
4158
  }
4159
+ if (changedProperties.has("hideToggle") && this.hideToggle == null) {
4160
+ this.hideToggle = false;
4161
+ }
3762
4162
  if (changedProperties.has("open") && this.open == null) {
3763
4163
  this.open = false;
3764
4164
  }
@@ -3811,16 +4211,16 @@ var SpectreSidebarElement = class extends SpectreProjectableElement {
3811
4211
  return getSidebarClasses({ bordered: this.bordered ?? false });
3812
4212
  }
3813
4213
  render() {
3814
- return html`<button
3815
- aria-expanded="${this.open ? "true" : "false"}"
3816
- aria-label="${ifDefined(this.toggleLabel)}"
3817
- class="${getSidebarToggleClasses()}"
3818
- data-sp-sidebar-toggle
3819
- type="button"
3820
- @click="${() => this.toggle()}"
3821
- >
3822
- &#9776;
3823
- </button>
4214
+ return html`${this.hideToggle ? nothing : html`<button
4215
+ aria-expanded="${this.open ? "true" : "false"}"
4216
+ aria-label="${ifDefined(this.toggleLabel)}"
4217
+ class="${getSidebarToggleClasses()}"
4218
+ data-sp-sidebar-toggle
4219
+ type="button"
4220
+ @click="${() => this.toggle()}"
4221
+ >
4222
+ &#9776;
4223
+ </button>`}
3824
4224
  <div
3825
4225
  class="${getSidebarBackdropClasses()}"
3826
4226
  data-sp-sidebar-backdrop
@@ -3839,6 +4239,7 @@ var SpectreSidebarElement = class extends SpectreProjectableElement {
3839
4239
  };
3840
4240
  SpectreSidebarElement.properties = {
3841
4241
  bordered: { type: Boolean, reflect: true },
4242
+ hideToggle: { attribute: "hide-toggle", type: Boolean, reflect: true },
3842
4243
  open: { type: Boolean, reflect: false },
3843
4244
  toggleLabel: { attribute: "toggle-label", type: String }
3844
4245
  };
@@ -3850,6 +4251,197 @@ function defineSpectreSidebar(tagName = "sp-sidebar") {
3850
4251
  customElements.define(tagName, SpectreSidebarElement);
3851
4252
  return SpectreSidebarElement;
3852
4253
  }
4254
+ var SpectreSidebarLinkElement = class extends SpectreProjectableElement {
4255
+ constructor() {
4256
+ super(...arguments);
4257
+ this.active = false;
4258
+ this.disabled = false;
4259
+ this.href = void 0;
4260
+ this.level = "parent";
4261
+ }
4262
+ get id() {
4263
+ return super.id;
4264
+ }
4265
+ set id(value) {
4266
+ super.id = value;
4267
+ }
4268
+ get title() {
4269
+ return super.title;
4270
+ }
4271
+ set title(value) {
4272
+ super.title = value;
4273
+ }
4274
+ getContentContainer() {
4275
+ return this.querySelector("[data-sp-sidebar-link-native]");
4276
+ }
4277
+ isInternalNode(node) {
4278
+ if (node.nodeType !== Node.ELEMENT_NODE) {
4279
+ return false;
4280
+ }
4281
+ const el = node;
4282
+ return el.hasAttribute("data-sp-sidebar-link-native");
4283
+ }
4284
+ willUpdate(changedProperties) {
4285
+ if (changedProperties.has("active") && this.active == null) {
4286
+ this.active = false;
4287
+ }
4288
+ if (changedProperties.has("disabled") && this.disabled == null) {
4289
+ this.disabled = false;
4290
+ }
4291
+ if (changedProperties.has("level") && (this.level == null || !isSidebarLinkLevel(this.level))) {
4292
+ this.level = "parent";
4293
+ }
4294
+ }
4295
+ get sidebarLinkClasses() {
4296
+ return getSidebarLinkClasses({
4297
+ active: this.active ?? false,
4298
+ disabled: this.disabled ?? false,
4299
+ level: this.level
4300
+ });
4301
+ }
4302
+ render() {
4303
+ return html`<a
4304
+ aria-current="${ifDefined(this.active ? "page" : void 0)}"
4305
+ aria-disabled="${ifDefined(this.disabled ? "true" : void 0)}"
4306
+ aria-label="${ifDefined(this.forwardedAriaLabel)}"
4307
+ class="${this.sidebarLinkClasses}"
4308
+ data-sp-sidebar-link-native
4309
+ href="${ifDefined(this.disabled ? void 0 : this.href)}"
4310
+ id="${ifDefined(this.id || void 0)}"
4311
+ tabindex="${ifDefined(this.disabled ? -1 : void 0)}"
4312
+ title="${ifDefined(this.title || void 0)}"
4313
+ >
4314
+ ${this.hasProjectedContent ? this.projectedContent : nothing}
4315
+ </a>`;
4316
+ }
4317
+ };
4318
+ SpectreSidebarLinkElement.properties = {
4319
+ active: { type: Boolean, reflect: true },
4320
+ disabled: { type: Boolean, reflect: true },
4321
+ href: { type: String },
4322
+ level: { type: String, reflect: true }
4323
+ };
4324
+ function defineSpectreSidebarLink(tagName = "sp-sidebar-link") {
4325
+ const existingElement = customElements.get(tagName);
4326
+ if (existingElement) {
4327
+ return existingElement;
4328
+ }
4329
+ customElements.define(tagName, SpectreSidebarLinkElement);
4330
+ return SpectreSidebarLinkElement;
4331
+ }
4332
+ var SpectreSidebarToggleElement = class extends SpectreProjectableElement {
4333
+ constructor() {
4334
+ super(...arguments);
4335
+ this.for = void 0;
4336
+ this.label = "Toggle sidebar";
4337
+ this.expanded = false;
4338
+ this.handleTargetToggle = (event) => {
4339
+ if (event.target !== this.targetElement) {
4340
+ return;
4341
+ }
4342
+ this.syncExpanded();
4343
+ };
4344
+ }
4345
+ get id() {
4346
+ return super.id;
4347
+ }
4348
+ set id(value) {
4349
+ super.id = value;
4350
+ }
4351
+ get title() {
4352
+ return super.title;
4353
+ }
4354
+ set title(value) {
4355
+ super.title = value;
4356
+ }
4357
+ getContentContainer() {
4358
+ return this.querySelector("[data-sp-sidebar-toggle-native]");
4359
+ }
4360
+ isInternalNode(node) {
4361
+ if (node.nodeType !== Node.ELEMENT_NODE) {
4362
+ return false;
4363
+ }
4364
+ const el = node;
4365
+ return el.hasAttribute("data-sp-sidebar-toggle-native");
4366
+ }
4367
+ willUpdate(changedProperties) {
4368
+ if (changedProperties.has("label") && !this.label) {
4369
+ this.label = "Toggle sidebar";
4370
+ }
4371
+ }
4372
+ connectedCallback() {
4373
+ super.connectedCallback();
4374
+ document.addEventListener("sp-open", this.handleTargetToggle);
4375
+ document.addEventListener("sp-close", this.handleTargetToggle);
4376
+ this.syncExpanded();
4377
+ }
4378
+ disconnectedCallback() {
4379
+ document.removeEventListener("sp-open", this.handleTargetToggle);
4380
+ document.removeEventListener("sp-close", this.handleTargetToggle);
4381
+ super.disconnectedCallback();
4382
+ }
4383
+ updated(changedProperties) {
4384
+ super.updated(changedProperties);
4385
+ if (changedProperties.has("for")) {
4386
+ this.syncExpanded();
4387
+ }
4388
+ }
4389
+ get targetElement() {
4390
+ if (!this.for) {
4391
+ return null;
4392
+ }
4393
+ const native = document.getElementById(this.for);
4394
+ return native?.closest("sp-sidebar") ?? null;
4395
+ }
4396
+ syncExpanded() {
4397
+ const next = Boolean(this.targetElement?.open);
4398
+ if (next !== this.expanded) {
4399
+ this.expanded = next;
4400
+ this.requestUpdate();
4401
+ }
4402
+ }
4403
+ handleClick() {
4404
+ const target = this.targetElement;
4405
+ if (!target) {
4406
+ return;
4407
+ }
4408
+ const nextOpen = !target.open;
4409
+ target.open = nextOpen;
4410
+ target.dispatchEvent(
4411
+ new CustomEvent(nextOpen ? "sp-open" : "sp-close", { bubbles: true })
4412
+ );
4413
+ }
4414
+ get toggleClasses() {
4415
+ return getSidebarToggleClasses();
4416
+ }
4417
+ render() {
4418
+ return html`<button
4419
+ aria-controls="${ifDefined(this.for)}"
4420
+ aria-expanded="${this.expanded ? "true" : "false"}"
4421
+ aria-label="${ifDefined(this.forwardedAriaLabel ?? this.label)}"
4422
+ class="${this.toggleClasses}"
4423
+ data-sp-sidebar-toggle-native
4424
+ id="${ifDefined(this.id || void 0)}"
4425
+ title="${ifDefined(this.title || void 0)}"
4426
+ type="button"
4427
+ @click="${() => this.handleClick()}"
4428
+ >
4429
+ ${this.hasProjectedContent ? this.projectedContent : html`&#9776;`}
4430
+ </button>`;
4431
+ }
4432
+ };
4433
+ SpectreSidebarToggleElement.properties = {
4434
+ for: { type: String },
4435
+ label: { type: String }
4436
+ };
4437
+ function defineSpectreSidebarToggle(tagName = "sp-sidebar-toggle") {
4438
+ const existingElement = customElements.get(tagName);
4439
+ if (existingElement) {
4440
+ return existingElement;
4441
+ }
4442
+ customElements.define(tagName, SpectreSidebarToggleElement);
4443
+ return SpectreSidebarToggleElement;
4444
+ }
3853
4445
  var SpectreToastElement = class extends SpectreBaseElement {
3854
4446
  constructor() {
3855
4447
  super(...arguments);
@@ -4284,15 +4876,19 @@ function defineSpectreComponents() {
4284
4876
  defineSpectreStack();
4285
4877
  defineSpectreDropdown();
4286
4878
  defineSpectreFooter();
4879
+ defineSpectreFooterChip();
4880
+ defineSpectreFooterLink();
4287
4881
  defineSpectreModal();
4288
4882
  defineSpectreNav();
4289
4883
  defineSpectreNavItem();
4290
4884
  defineSpectreSidebar();
4885
+ defineSpectreSidebarLink();
4886
+ defineSpectreSidebarToggle();
4291
4887
  defineSpectreToast();
4292
4888
  defineSpectreTooltip();
4293
4889
  defineSpectreText();
4294
4890
  }
4295
4891
 
4296
- 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 };
4892
+ export { SpectreAlertElement, SpectreAvatarElement, SpectreBadgeElement, SpectreButtonElement, SpectreCardElement, SpectreCheckboxElement, SpectreContainerElement, SpectreDropdownElement, SpectreFieldsetElement, SpectreFooterChipElement, SpectreFooterElement, SpectreFooterLinkElement, SpectreGridElement, SpectreIconBoxElement, SpectreInputElement, SpectreLabelElement, SpectreModalElement, SpectreNavElement, SpectreNavItemElement, SpectrePricingCardElement, SpectreRadioElement, SpectreRatingElement, SpectreSectionElement, SpectreSelectElement, SpectreSidebarElement, SpectreSidebarLinkElement, SpectreSidebarToggleElement, SpectreSpinnerElement, SpectreStackElement, SpectreTagElement, SpectreTestimonialElement, SpectreTextElement, SpectreTextareaElement, SpectreToastElement, SpectreTooltipElement, defineSpectreAlert, defineSpectreAvatar, defineSpectreBadge, defineSpectreButton, defineSpectreCard, defineSpectreCheckbox, defineSpectreComponents, defineSpectreContainer, defineSpectreDropdown, defineSpectreFieldset, defineSpectreFooter, defineSpectreFooterChip, defineSpectreFooterLink, defineSpectreGrid, defineSpectreIconBox, defineSpectreInput, defineSpectreLabel, defineSpectreModal, defineSpectreNav, defineSpectreNavItem, defineSpectrePricingCard, defineSpectreRadio, defineSpectreRating, defineSpectreSection, defineSpectreSelect, defineSpectreSidebar, defineSpectreSidebarLink, 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 };
4297
4893
  //# sourceMappingURL=index.js.map
4298
4894
  //# sourceMappingURL=index.js.map