@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.cjs CHANGED
@@ -186,16 +186,118 @@ function isGridSpanOptions(value) {
186
186
  const candidate = value;
187
187
  return (candidate.base === void 0 || isGridSpan(candidate.base)) && (candidate.md === void 0 || isGridSpan(candidate.md)) && (candidate.lg === void 0 || isGridSpan(candidate.lg));
188
188
  }
189
- var spectreStackDirections = ["vertical", "horizontal"];
190
- function isStackDirection(value) {
191
- return spectreStackDirections.includes(
189
+ var spectreGridOffsets = [
190
+ 0,
191
+ 1,
192
+ 2,
193
+ 3,
194
+ 4,
195
+ 5,
196
+ 6,
197
+ 7,
198
+ 8,
199
+ 9,
200
+ 10,
201
+ 11
202
+ ];
203
+ function isGridOffset(value) {
204
+ return spectreGridOffsets.includes(value);
205
+ }
206
+ function isGridOffsetOptions(value) {
207
+ if (typeof value !== "object" || value === null) {
208
+ return false;
209
+ }
210
+ const candidate = value;
211
+ return (candidate.base === void 0 || isGridOffset(candidate.base)) && (candidate.md === void 0 || isGridOffset(candidate.md)) && (candidate.lg === void 0 || isGridOffset(candidate.lg));
212
+ }
213
+ var spectreGridOrders = [
214
+ "first",
215
+ "last",
216
+ "none",
217
+ 1,
218
+ 2,
219
+ 3,
220
+ 4,
221
+ 5,
222
+ 6,
223
+ 7,
224
+ 8,
225
+ 9,
226
+ 10,
227
+ 11,
228
+ 12
229
+ ];
230
+ function isGridOrder(value) {
231
+ return spectreGridOrders.includes(
192
232
  value
193
233
  );
194
234
  }
235
+ function isGridOrderOptions(value) {
236
+ if (typeof value !== "object" || value === null) {
237
+ return false;
238
+ }
239
+ const candidate = value;
240
+ return (candidate.base === void 0 || isGridOrder(candidate.base)) && (candidate.md === void 0 || isGridOrder(candidate.md)) && (candidate.lg === void 0 || isGridOrder(candidate.lg));
241
+ }
242
+ var spectreGridLeadingWeights = [1.5, 1.6, 2, 2.5, 3];
243
+ function isGridLeadingWeight(value) {
244
+ return spectreGridLeadingWeights.includes(
245
+ value
246
+ );
247
+ }
248
+ function isGridLeadingWeightOptions(value) {
249
+ if (typeof value !== "object" || value === null) {
250
+ return false;
251
+ }
252
+ const candidate = value;
253
+ return (candidate.base === void 0 || isGridLeadingWeight(candidate.base)) && (candidate.md === void 0 || isGridLeadingWeight(candidate.md)) && (candidate.lg === void 0 || isGridLeadingWeight(candidate.lg));
254
+ }
255
+ function isGridLeadingTracksOptions(value) {
256
+ if (typeof value !== "object" || value === null) {
257
+ return false;
258
+ }
259
+ const candidate = value;
260
+ return isGridLeadingWeight(candidate.weight) || isGridLeadingWeightOptions(candidate.weight);
261
+ }
262
+ var spectreGridFixedTrackCounts = [1, 2, 3, 4];
263
+ function isGridFixedTrackCount(value) {
264
+ return spectreGridFixedTrackCounts.includes(
265
+ value
266
+ );
267
+ }
268
+ function isGridFixedTracksOptions(value) {
269
+ if (typeof value !== "object" || value === null) {
270
+ return false;
271
+ }
272
+ const candidate = value;
273
+ return isGridFixedTrackCount(candidate.count);
274
+ }
275
+ var spectreGridTemplates = [
276
+ "edge-fluid-edge",
277
+ "label-fluid-fluid"
278
+ ];
279
+ function isGridTemplate(value) {
280
+ return spectreGridTemplates.includes(value);
281
+ }
282
+ function isGridExplicitTemplateOptions(value) {
283
+ if (typeof value !== "object" || value === null) {
284
+ return false;
285
+ }
286
+ const candidate = value;
287
+ return isGridTemplate(candidate.template) && (candidate.weight === void 0 || isGridLeadingWeight(candidate.weight));
288
+ }
289
+ var spectreStackDirections = ["vertical", "horizontal"];
290
+ function isStackDirection(value) {
291
+ return spectreStackDirections.includes(value);
292
+ }
195
293
  var spectreStackBases = ["sidebar"];
196
294
  function isStackBasis(value) {
197
295
  return spectreStackBases.includes(value);
198
296
  }
297
+ var spectreNavAligns = ["start", "center", "end"];
298
+ function isNavAlign(value) {
299
+ return spectreNavAligns.includes(value);
300
+ }
199
301
  var spectreStackAligns = ["center", "stretch"];
200
302
  function isStackAlign(value) {
201
303
  return spectreStackAligns.includes(value);
@@ -220,6 +322,12 @@ var spectreToastVariants = [
220
322
  function isToastVariant(value) {
221
323
  return spectreToastVariants.includes(value);
222
324
  }
325
+ var spectreSidebarLinkLevels = ["parent", "child"];
326
+ function isSidebarLinkLevel(value) {
327
+ return spectreSidebarLinkLevels.includes(
328
+ value
329
+ );
330
+ }
223
331
  var spectreTooltipPlacements = [
224
332
  "top",
225
333
  "bottom",
@@ -280,9 +388,7 @@ var spectreTextTransforms = [
280
388
  "capitalize"
281
389
  ];
282
390
  function isTextTransform(value) {
283
- return spectreTextTransforms.includes(
284
- value
285
- );
391
+ return spectreTextTransforms.includes(value);
286
392
  }
287
393
  function normalizeInt(value, fallback, min = 0) {
288
394
  if (value == null || typeof value !== "number" || !Number.isInteger(value) || value < min) {
@@ -290,6 +396,13 @@ function normalizeInt(value, fallback, min = 0) {
290
396
  }
291
397
  return value;
292
398
  }
399
+ var spectreUtilityClassPattern = /^sp-[a-z0-9]+(?:-[a-z0-9]+)*$/;
400
+ function sanitizeUtilityClasses(value) {
401
+ if (!value) {
402
+ return "";
403
+ }
404
+ return value.split(/\s+/).filter((token) => spectreUtilityClassPattern.test(token)).join(" ");
405
+ }
293
406
  var SpectreBaseElement = class extends lit.LitElement {
294
407
  constructor() {
295
408
  super(...arguments);
@@ -633,6 +746,7 @@ var SpectreProjectableElement = class extends SpectreBaseElement {
633
746
  var SpectreButtonElement = class extends SpectreProjectableElement {
634
747
  constructor() {
635
748
  super(...arguments);
749
+ this.compact = false;
636
750
  this.disabled = false;
637
751
  this.fullWidth = false;
638
752
  this.iconOnly = false;
@@ -676,6 +790,9 @@ var SpectreButtonElement = class extends SpectreProjectableElement {
676
790
  return el.hasAttribute("data-sp-button-native") || el.hasAttribute("data-sp-button-loading-label") || el.hasAttribute("data-sp-button-label-fallback");
677
791
  }
678
792
  willUpdate(changedProperties) {
793
+ if (changedProperties.has("compact") && this.compact == null) {
794
+ this.compact = false;
795
+ }
679
796
  if (changedProperties.has("disabled") && this.disabled == null) {
680
797
  this.disabled = false;
681
798
  }
@@ -711,6 +828,7 @@ var SpectreButtonElement = class extends SpectreProjectableElement {
711
828
  }
712
829
  get buttonClasses() {
713
830
  return spectreUi.getButtonClasses({
831
+ compact: this.compact ?? false,
714
832
  disabled: this.isDisabled,
715
833
  fullWidth: this.fullWidth ?? false,
716
834
  iconOnly: this.iconOnly ?? false,
@@ -787,6 +905,7 @@ var SpectreButtonElement = class extends SpectreProjectableElement {
787
905
  }
788
906
  };
789
907
  SpectreButtonElement.properties = {
908
+ compact: { type: Boolean, reflect: true },
790
909
  disabled: { type: Boolean, reflect: true },
791
910
  form: { type: String },
792
911
  fullWidth: { attribute: "full-width", type: Boolean, reflect: true },
@@ -2772,6 +2891,7 @@ function defineSpectrePricingCard(tagName = "sp-pricing-card") {
2772
2891
  var SpectreContainerElement = class extends SpectreProjectableElement {
2773
2892
  constructor() {
2774
2893
  super(...arguments);
2894
+ this.innerClass = void 0;
2775
2895
  this.maxWidth = void 0;
2776
2896
  }
2777
2897
  get id() {
@@ -2786,6 +2906,11 @@ var SpectreContainerElement = class extends SpectreProjectableElement {
2786
2906
  set title(value) {
2787
2907
  super.title = value;
2788
2908
  }
2909
+ connectedCallback() {
2910
+ var _a;
2911
+ super.connectedCallback();
2912
+ (_a = this.style).display || (_a.display = "block");
2913
+ }
2789
2914
  getContentContainer() {
2790
2915
  return this.querySelector("[data-sp-container-native]");
2791
2916
  }
@@ -2802,9 +2927,11 @@ var SpectreContainerElement = class extends SpectreProjectableElement {
2802
2927
  }
2803
2928
  }
2804
2929
  get containerClasses() {
2805
- return spectreUi.getContainerClasses(
2930
+ const recipeClasses = spectreUi.getContainerClasses(
2806
2931
  this.maxWidth != null ? { maxWidth: this.maxWidth } : {}
2807
2932
  );
2933
+ const utilityClasses = sanitizeUtilityClasses(this.innerClass);
2934
+ return utilityClasses ? `${recipeClasses} ${utilityClasses}` : recipeClasses;
2808
2935
  }
2809
2936
  render() {
2810
2937
  return lit.html`<div
@@ -2821,6 +2948,7 @@ var SpectreContainerElement = class extends SpectreProjectableElement {
2821
2948
  }
2822
2949
  };
2823
2950
  SpectreContainerElement.properties = {
2951
+ innerClass: { attribute: "inner-class", type: String },
2824
2952
  maxWidth: { attribute: "max-width", type: String, reflect: true }
2825
2953
  };
2826
2954
  function defineSpectreContainer(tagName = "sp-container") {
@@ -2835,7 +2963,13 @@ var SpectreGridElement = class extends SpectreProjectableElement {
2835
2963
  constructor() {
2836
2964
  super(...arguments);
2837
2965
  this.columns = 1;
2966
+ this.columnGap = void 0;
2967
+ this.explicitTemplate = void 0;
2968
+ this.fixedTracks = void 0;
2838
2969
  this.gap = "md";
2970
+ this.innerClass = void 0;
2971
+ this.leadingTracks = void 0;
2972
+ this.rowGap = void 0;
2839
2973
  }
2840
2974
  get id() {
2841
2975
  return super.id;
@@ -2849,6 +2983,11 @@ var SpectreGridElement = class extends SpectreProjectableElement {
2849
2983
  set title(value) {
2850
2984
  super.title = value;
2851
2985
  }
2986
+ connectedCallback() {
2987
+ var _a;
2988
+ super.connectedCallback();
2989
+ (_a = this.style).display || (_a.display = "block");
2990
+ }
2852
2991
  getContentContainer() {
2853
2992
  return this.querySelector("[data-sp-grid-native]");
2854
2993
  }
@@ -2867,18 +3006,72 @@ var SpectreGridElement = class extends SpectreProjectableElement {
2867
3006
  if (changedProperties.has("gap") && (this.gap == null || !isGridGap(this.gap))) {
2868
3007
  this.gap = "md";
2869
3008
  }
3009
+ if (changedProperties.has("columnGap") && this.columnGap != null && !isGridGap(this.columnGap)) {
3010
+ this.columnGap = void 0;
3011
+ }
3012
+ if (changedProperties.has("rowGap") && this.rowGap != null && !isGridGap(this.rowGap)) {
3013
+ this.rowGap = void 0;
3014
+ }
2870
3015
  if (changedProperties.has("span") && this.span !== void 0 && !isGridSpan(this.span) && !isGridSpanOptions(this.span)) {
2871
3016
  this.span = void 0;
2872
3017
  }
3018
+ if (changedProperties.has("offset") && this.offset !== void 0 && !isGridOffset(this.offset) && !isGridOffsetOptions(this.offset)) {
3019
+ this.offset = void 0;
3020
+ }
3021
+ if (changedProperties.has("rowSpan") && this.rowSpan !== void 0 && !isGridSpan(this.rowSpan) && !isGridSpanOptions(this.rowSpan)) {
3022
+ this.rowSpan = void 0;
3023
+ }
3024
+ if (changedProperties.has("rowOffset") && this.rowOffset !== void 0 && !isGridOffset(this.rowOffset) && !isGridOffsetOptions(this.rowOffset)) {
3025
+ this.rowOffset = void 0;
3026
+ }
3027
+ if (changedProperties.has("order") && this.order !== void 0 && !isGridOrder(this.order) && !isGridOrderOptions(this.order)) {
3028
+ this.order = void 0;
3029
+ }
3030
+ if (changedProperties.has("leadingTracks") && this.leadingTracks !== void 0 && !isGridLeadingTracksOptions(this.leadingTracks)) {
3031
+ this.leadingTracks = void 0;
3032
+ }
3033
+ if (changedProperties.has("fixedTracks") && this.fixedTracks !== void 0 && !isGridFixedTracksOptions(this.fixedTracks)) {
3034
+ this.fixedTracks = void 0;
3035
+ }
3036
+ if (changedProperties.has("explicitTemplate") && this.explicitTemplate !== void 0 && !isGridExplicitTemplateOptions(this.explicitTemplate)) {
3037
+ this.explicitTemplate = void 0;
3038
+ }
2873
3039
  }
2874
3040
  get gridClasses() {
2875
- return spectreUi.getGridClasses({
3041
+ const recipeClasses = spectreUi.getGridClasses({
2876
3042
  columns: this.columns,
2877
3043
  gap: this.gap,
3044
+ ...this.columnGap !== void 0 && {
3045
+ columnGap: this.columnGap
3046
+ },
3047
+ ...this.rowGap !== void 0 && { rowGap: this.rowGap },
2878
3048
  ...this.span !== void 0 && {
2879
3049
  span: this.span
3050
+ },
3051
+ ...this.offset !== void 0 && {
3052
+ offset: this.offset
3053
+ },
3054
+ ...this.rowSpan !== void 0 && {
3055
+ rowSpan: this.rowSpan
3056
+ },
3057
+ ...this.rowOffset !== void 0 && {
3058
+ rowOffset: this.rowOffset
3059
+ },
3060
+ ...this.order !== void 0 && {
3061
+ order: this.order
3062
+ },
3063
+ ...this.leadingTracks !== void 0 && {
3064
+ leadingTracks: this.leadingTracks
3065
+ },
3066
+ ...this.fixedTracks !== void 0 && {
3067
+ fixedTracks: this.fixedTracks
3068
+ },
3069
+ ...this.explicitTemplate !== void 0 && {
3070
+ explicitTemplate: this.explicitTemplate
2880
3071
  }
2881
3072
  });
3073
+ const utilityClasses = sanitizeUtilityClasses(this.innerClass);
3074
+ return utilityClasses ? `${recipeClasses} ${utilityClasses}` : recipeClasses;
2882
3075
  }
2883
3076
  render() {
2884
3077
  return lit.html`<div
@@ -2896,7 +3089,17 @@ var SpectreGridElement = class extends SpectreProjectableElement {
2896
3089
  };
2897
3090
  SpectreGridElement.properties = {
2898
3091
  columns: { type: Number, reflect: true },
3092
+ columnGap: { attribute: "column-gap", type: String, reflect: true },
3093
+ explicitTemplate: { attribute: "explicit-template", type: Object },
3094
+ fixedTracks: { attribute: "fixed-tracks", type: Object },
2899
3095
  gap: { type: String, reflect: true },
3096
+ innerClass: { attribute: "inner-class", type: String },
3097
+ leadingTracks: { attribute: "leading-tracks", type: Object },
3098
+ offset: { type: Object },
3099
+ order: { type: Object },
3100
+ rowGap: { attribute: "row-gap", type: String, reflect: true },
3101
+ rowOffset: { attribute: "row-offset", type: Object },
3102
+ rowSpan: { attribute: "row-span", type: Object },
2900
3103
  span: { type: Object }
2901
3104
  };
2902
3105
  function defineSpectreGrid(tagName = "sp-grid") {
@@ -2908,6 +3111,10 @@ function defineSpectreGrid(tagName = "sp-grid") {
2908
3111
  return SpectreGridElement;
2909
3112
  }
2910
3113
  var SpectreSectionElement = class extends SpectreProjectableElement {
3114
+ constructor() {
3115
+ super(...arguments);
3116
+ this.innerClass = void 0;
3117
+ }
2911
3118
  get id() {
2912
3119
  return super.id;
2913
3120
  }
@@ -2920,6 +3127,11 @@ var SpectreSectionElement = class extends SpectreProjectableElement {
2920
3127
  set title(value) {
2921
3128
  super.title = value;
2922
3129
  }
3130
+ connectedCallback() {
3131
+ var _a;
3132
+ super.connectedCallback();
3133
+ (_a = this.style).display || (_a.display = "block");
3134
+ }
2923
3135
  getContentContainer() {
2924
3136
  return this.querySelector("[data-sp-section-native]");
2925
3137
  }
@@ -2931,7 +3143,9 @@ var SpectreSectionElement = class extends SpectreProjectableElement {
2931
3143
  return el.hasAttribute("data-sp-section-native");
2932
3144
  }
2933
3145
  get sectionClasses() {
2934
- return spectreUi.getSectionClasses({});
3146
+ const recipeClasses = spectreUi.getSectionClasses({});
3147
+ const utilityClasses = sanitizeUtilityClasses(this.innerClass);
3148
+ return utilityClasses ? `${recipeClasses} ${utilityClasses}` : recipeClasses;
2935
3149
  }
2936
3150
  render() {
2937
3151
  return lit.html`<section
@@ -2947,6 +3161,9 @@ var SpectreSectionElement = class extends SpectreProjectableElement {
2947
3161
  </section>`;
2948
3162
  }
2949
3163
  };
3164
+ SpectreSectionElement.properties = {
3165
+ innerClass: { attribute: "inner-class", type: String }
3166
+ };
2950
3167
  function defineSpectreSection(tagName = "sp-section") {
2951
3168
  const existingElement = customElements.get(tagName);
2952
3169
  if (existingElement) {
@@ -2961,6 +3178,7 @@ var SpectreStackElement = class extends SpectreProjectableElement {
2961
3178
  this.align = "center";
2962
3179
  this.basis = void 0;
2963
3180
  this.direction = "vertical";
3181
+ this.innerClass = void 0;
2964
3182
  }
2965
3183
  get id() {
2966
3184
  return super.id;
@@ -2974,6 +3192,11 @@ var SpectreStackElement = class extends SpectreProjectableElement {
2974
3192
  set title(value) {
2975
3193
  super.title = value;
2976
3194
  }
3195
+ connectedCallback() {
3196
+ var _a;
3197
+ super.connectedCallback();
3198
+ (_a = this.style).display || (_a.display = "block");
3199
+ }
2977
3200
  getContentContainer() {
2978
3201
  return this.querySelector("[data-sp-stack-native]");
2979
3202
  }
@@ -2996,11 +3219,13 @@ var SpectreStackElement = class extends SpectreProjectableElement {
2996
3219
  }
2997
3220
  }
2998
3221
  get stackClasses() {
2999
- return spectreUi.getStackClasses({
3222
+ const recipeClasses = spectreUi.getStackClasses({
3000
3223
  align: this.align,
3001
3224
  direction: this.direction,
3002
3225
  ...this.basis != null ? { basis: this.basis } : {}
3003
3226
  });
3227
+ const utilityClasses = sanitizeUtilityClasses(this.innerClass);
3228
+ return utilityClasses ? `${recipeClasses} ${utilityClasses}` : recipeClasses;
3004
3229
  }
3005
3230
  render() {
3006
3231
  return lit.html`<div
@@ -3019,7 +3244,8 @@ var SpectreStackElement = class extends SpectreProjectableElement {
3019
3244
  SpectreStackElement.properties = {
3020
3245
  align: { type: String, reflect: true },
3021
3246
  basis: { type: String, reflect: true },
3022
- direction: { type: String, reflect: true }
3247
+ direction: { type: String, reflect: true },
3248
+ innerClass: { attribute: "inner-class", type: String }
3023
3249
  };
3024
3250
  function defineSpectreStack(tagName = "sp-stack") {
3025
3251
  const existingElement = customElements.get(tagName);
@@ -3033,6 +3259,7 @@ var SpectreDropdownElement = class extends SpectreBaseElement {
3033
3259
  constructor() {
3034
3260
  super(...arguments);
3035
3261
  this.fullWidth = false;
3262
+ this.mega = false;
3036
3263
  this.open = false;
3037
3264
  this.placement = "bottom-start";
3038
3265
  this.triggerLabel = "Toggle menu";
@@ -3136,6 +3363,9 @@ var SpectreDropdownElement = class extends SpectreBaseElement {
3136
3363
  if (changedProperties.has("fullWidth") && this.fullWidth == null) {
3137
3364
  this.fullWidth = false;
3138
3365
  }
3366
+ if (changedProperties.has("mega") && this.mega == null) {
3367
+ this.mega = false;
3368
+ }
3139
3369
  if (changedProperties.has("open") && this.open == null) {
3140
3370
  this.open = false;
3141
3371
  }
@@ -3171,10 +3401,14 @@ var SpectreDropdownElement = class extends SpectreBaseElement {
3171
3401
  this.dispatchEvent(new CustomEvent("sp-close", { bubbles: true }));
3172
3402
  }
3173
3403
  get dropdownClasses() {
3174
- return spectreUi.getDropdownClasses({ fullWidth: this.fullWidth ?? false });
3404
+ return spectreUi.getDropdownClasses({
3405
+ fullWidth: this.fullWidth ?? false,
3406
+ mega: this.mega ?? false
3407
+ });
3175
3408
  }
3176
3409
  get menuClasses() {
3177
3410
  return spectreUi.getDropdownMenuClasses({
3411
+ mega: this.mega ?? false,
3178
3412
  open: this.open ?? false,
3179
3413
  placement: this.placement
3180
3414
  });
@@ -3204,6 +3438,7 @@ var SpectreDropdownElement = class extends SpectreBaseElement {
3204
3438
  };
3205
3439
  SpectreDropdownElement.properties = {
3206
3440
  fullWidth: { attribute: "full-width", type: Boolean, reflect: true },
3441
+ mega: { type: Boolean, reflect: true },
3207
3442
  open: { type: Boolean, reflect: true },
3208
3443
  placement: { type: String, reflect: true },
3209
3444
  triggerLabel: { attribute: "trigger-label", type: String }
@@ -3221,6 +3456,7 @@ var SpectreFooterElement = class extends SpectreProjectableElement {
3221
3456
  super(...arguments);
3222
3457
  this.bordered = false;
3223
3458
  this.fullWidth = false;
3459
+ this.innerClass = void 0;
3224
3460
  }
3225
3461
  get id() {
3226
3462
  return super.id;
@@ -3234,6 +3470,11 @@ var SpectreFooterElement = class extends SpectreProjectableElement {
3234
3470
  set title(value) {
3235
3471
  super.title = value;
3236
3472
  }
3473
+ connectedCallback() {
3474
+ var _a;
3475
+ super.connectedCallback();
3476
+ (_a = this.style).display || (_a.display = "block");
3477
+ }
3237
3478
  getContentContainer() {
3238
3479
  return this.querySelector("[data-sp-footer-native]");
3239
3480
  }
@@ -3253,10 +3494,12 @@ var SpectreFooterElement = class extends SpectreProjectableElement {
3253
3494
  }
3254
3495
  }
3255
3496
  get footerClasses() {
3256
- return spectreUi.getFooterClasses({
3497
+ const recipeClasses = spectreUi.getFooterClasses({
3257
3498
  bordered: this.bordered ?? false,
3258
3499
  fullWidth: this.fullWidth ?? false
3259
3500
  });
3501
+ const utilityClasses = sanitizeUtilityClasses(this.innerClass);
3502
+ return utilityClasses ? `${recipeClasses} ${utilityClasses}` : recipeClasses;
3260
3503
  }
3261
3504
  render() {
3262
3505
  return lit.html`<footer
@@ -3272,7 +3515,8 @@ var SpectreFooterElement = class extends SpectreProjectableElement {
3272
3515
  };
3273
3516
  SpectreFooterElement.properties = {
3274
3517
  bordered: { type: Boolean, reflect: true },
3275
- fullWidth: { attribute: "full-width", type: Boolean, reflect: true }
3518
+ fullWidth: { attribute: "full-width", type: Boolean, reflect: true },
3519
+ innerClass: { attribute: "inner-class", type: String }
3276
3520
  };
3277
3521
  function defineSpectreFooter(tagName = "sp-footer") {
3278
3522
  const existingElement = customElements.get(tagName);
@@ -3282,6 +3526,137 @@ function defineSpectreFooter(tagName = "sp-footer") {
3282
3526
  customElements.define(tagName, SpectreFooterElement);
3283
3527
  return SpectreFooterElement;
3284
3528
  }
3529
+ var SpectreFooterChipElement = class extends SpectreProjectableElement {
3530
+ constructor() {
3531
+ super(...arguments);
3532
+ this.disabled = false;
3533
+ }
3534
+ get id() {
3535
+ return super.id;
3536
+ }
3537
+ set id(value) {
3538
+ super.id = value;
3539
+ }
3540
+ get title() {
3541
+ return super.title;
3542
+ }
3543
+ set title(value) {
3544
+ super.title = value;
3545
+ }
3546
+ getContentContainer() {
3547
+ return this.querySelector("[data-sp-footer-chip-native]");
3548
+ }
3549
+ isInternalNode(node) {
3550
+ if (node.nodeType !== Node.ELEMENT_NODE) {
3551
+ return false;
3552
+ }
3553
+ const el = node;
3554
+ return el.hasAttribute("data-sp-footer-chip-native");
3555
+ }
3556
+ willUpdate(changedProperties) {
3557
+ if (changedProperties.has("disabled") && this.disabled == null) {
3558
+ this.disabled = false;
3559
+ }
3560
+ }
3561
+ get footerChipClasses() {
3562
+ return spectreUi.getFooterChipClasses({ disabled: this.disabled ?? false });
3563
+ }
3564
+ render() {
3565
+ return lit.html`<span
3566
+ aria-disabled="${ifDefined_js.ifDefined(this.disabled ? "true" : void 0)}"
3567
+ aria-label="${ifDefined_js.ifDefined(this.forwardedAriaLabel)}"
3568
+ class="${this.footerChipClasses}"
3569
+ data-sp-footer-chip-native
3570
+ id="${ifDefined_js.ifDefined(this.id || void 0)}"
3571
+ title="${ifDefined_js.ifDefined(this.title || void 0)}"
3572
+ >
3573
+ ${this.hasProjectedContent ? this.projectedContent : lit.nothing}
3574
+ </span>`;
3575
+ }
3576
+ };
3577
+ SpectreFooterChipElement.properties = {
3578
+ disabled: { type: Boolean, reflect: true }
3579
+ };
3580
+ function defineSpectreFooterChip(tagName = "sp-footer-chip") {
3581
+ const existingElement = customElements.get(tagName);
3582
+ if (existingElement) {
3583
+ return existingElement;
3584
+ }
3585
+ customElements.define(tagName, SpectreFooterChipElement);
3586
+ return SpectreFooterChipElement;
3587
+ }
3588
+ var SpectreFooterLinkElement = class extends SpectreProjectableElement {
3589
+ constructor() {
3590
+ super(...arguments);
3591
+ this.active = false;
3592
+ this.disabled = false;
3593
+ this.href = void 0;
3594
+ }
3595
+ get id() {
3596
+ return super.id;
3597
+ }
3598
+ set id(value) {
3599
+ super.id = value;
3600
+ }
3601
+ get title() {
3602
+ return super.title;
3603
+ }
3604
+ set title(value) {
3605
+ super.title = value;
3606
+ }
3607
+ getContentContainer() {
3608
+ return this.querySelector("[data-sp-footer-link-native]");
3609
+ }
3610
+ isInternalNode(node) {
3611
+ if (node.nodeType !== Node.ELEMENT_NODE) {
3612
+ return false;
3613
+ }
3614
+ const el = node;
3615
+ return el.hasAttribute("data-sp-footer-link-native");
3616
+ }
3617
+ willUpdate(changedProperties) {
3618
+ if (changedProperties.has("active") && this.active == null) {
3619
+ this.active = false;
3620
+ }
3621
+ if (changedProperties.has("disabled") && this.disabled == null) {
3622
+ this.disabled = false;
3623
+ }
3624
+ }
3625
+ get footerLinkClasses() {
3626
+ return spectreUi.getFooterLinkClasses({
3627
+ active: this.active ?? false,
3628
+ disabled: this.disabled ?? false
3629
+ });
3630
+ }
3631
+ render() {
3632
+ return lit.html`<a
3633
+ aria-current="${ifDefined_js.ifDefined(this.active ? "page" : void 0)}"
3634
+ aria-disabled="${ifDefined_js.ifDefined(this.disabled ? "true" : void 0)}"
3635
+ aria-label="${ifDefined_js.ifDefined(this.forwardedAriaLabel)}"
3636
+ class="${this.footerLinkClasses}"
3637
+ data-sp-footer-link-native
3638
+ href="${ifDefined_js.ifDefined(this.disabled ? void 0 : this.href)}"
3639
+ id="${ifDefined_js.ifDefined(this.id || void 0)}"
3640
+ tabindex="${ifDefined_js.ifDefined(this.disabled ? -1 : void 0)}"
3641
+ title="${ifDefined_js.ifDefined(this.title || void 0)}"
3642
+ >
3643
+ ${this.hasProjectedContent ? this.projectedContent : lit.nothing}
3644
+ </a>`;
3645
+ }
3646
+ };
3647
+ SpectreFooterLinkElement.properties = {
3648
+ active: { type: Boolean, reflect: true },
3649
+ disabled: { type: Boolean, reflect: true },
3650
+ href: { type: String }
3651
+ };
3652
+ function defineSpectreFooterLink(tagName = "sp-footer-link") {
3653
+ const existingElement = customElements.get(tagName);
3654
+ if (existingElement) {
3655
+ return existingElement;
3656
+ }
3657
+ customElements.define(tagName, SpectreFooterLinkElement);
3658
+ return SpectreFooterLinkElement;
3659
+ }
3285
3660
  var FOCUSABLE_SELECTOR = [
3286
3661
  "a[href]",
3287
3662
  "button:not([disabled])",
@@ -3452,8 +3827,10 @@ function defineSpectreModal(tagName = "sp-modal") {
3452
3827
  var SpectreNavElement = class extends SpectreProjectableElement {
3453
3828
  constructor() {
3454
3829
  super(...arguments);
3830
+ this.align = void 0;
3455
3831
  this.bordered = false;
3456
3832
  this.fullWidth = false;
3833
+ this.innerClass = void 0;
3457
3834
  this.sticky = false;
3458
3835
  }
3459
3836
  get id() {
@@ -3468,6 +3845,11 @@ var SpectreNavElement = class extends SpectreProjectableElement {
3468
3845
  set title(value) {
3469
3846
  super.title = value;
3470
3847
  }
3848
+ connectedCallback() {
3849
+ var _a;
3850
+ super.connectedCallback();
3851
+ (_a = this.style).display || (_a.display = "block");
3852
+ }
3471
3853
  getContentContainer() {
3472
3854
  return this.querySelector("[data-sp-nav-native]");
3473
3855
  }
@@ -3488,13 +3870,19 @@ var SpectreNavElement = class extends SpectreProjectableElement {
3488
3870
  if (changedProperties.has("sticky") && this.sticky == null) {
3489
3871
  this.sticky = false;
3490
3872
  }
3873
+ if (changedProperties.has("align") && this.align != null && !isNavAlign(this.align)) {
3874
+ this.align = void 0;
3875
+ }
3491
3876
  }
3492
3877
  get navClasses() {
3493
- return spectreUi.getNavClasses({
3878
+ const recipeClasses = spectreUi.getNavClasses({
3494
3879
  bordered: this.bordered ?? false,
3495
3880
  fullWidth: this.fullWidth ?? false,
3496
- sticky: this.sticky ?? false
3881
+ sticky: this.sticky ?? false,
3882
+ ...this.align !== void 0 && { align: this.align }
3497
3883
  });
3884
+ const utilityClasses = sanitizeUtilityClasses(this.innerClass);
3885
+ return utilityClasses ? `${recipeClasses} ${utilityClasses}` : recipeClasses;
3498
3886
  }
3499
3887
  render() {
3500
3888
  return lit.html`<nav
@@ -3509,8 +3897,10 @@ var SpectreNavElement = class extends SpectreProjectableElement {
3509
3897
  }
3510
3898
  };
3511
3899
  SpectreNavElement.properties = {
3900
+ align: { type: String, reflect: true },
3512
3901
  bordered: { type: Boolean, reflect: true },
3513
3902
  fullWidth: { attribute: "full-width", type: Boolean, reflect: true },
3903
+ innerClass: { attribute: "inner-class", type: String },
3514
3904
  sticky: { type: Boolean, reflect: true }
3515
3905
  };
3516
3906
  function defineSpectreNav(tagName = "sp-nav") {
@@ -3527,6 +3917,7 @@ var SpectreNavItemElement = class extends SpectreBaseElement {
3527
3917
  this.dropdown = false;
3528
3918
  this.href = void 0;
3529
3919
  this.label = void 0;
3920
+ this.mega = false;
3530
3921
  this.open = false;
3531
3922
  this.placement = "bottom-start";
3532
3923
  this.triggerContent = [];
@@ -3629,6 +4020,9 @@ var SpectreNavItemElement = class extends SpectreBaseElement {
3629
4020
  if (changedProperties.has("dropdown") && this.dropdown == null) {
3630
4021
  this.dropdown = false;
3631
4022
  }
4023
+ if (changedProperties.has("mega") && this.mega == null) {
4024
+ this.mega = false;
4025
+ }
3632
4026
  if (changedProperties.has("open") && this.open == null) {
3633
4027
  this.open = false;
3634
4028
  }
@@ -3661,10 +4055,11 @@ var SpectreNavItemElement = class extends SpectreBaseElement {
3661
4055
  this.dispatchEvent(new CustomEvent("sp-close", { bubbles: true }));
3662
4056
  }
3663
4057
  get wrapperClasses() {
3664
- return spectreUi.getDropdownClasses();
4058
+ return spectreUi.getDropdownClasses({ mega: this.mega ?? false });
3665
4059
  }
3666
4060
  get menuClasses() {
3667
4061
  return spectreUi.getDropdownMenuClasses({
4062
+ mega: this.mega ?? false,
3668
4063
  open: this.open ?? false,
3669
4064
  placement: this.placement
3670
4065
  });
@@ -3712,6 +4107,7 @@ SpectreNavItemElement.properties = {
3712
4107
  dropdown: { type: Boolean, reflect: true },
3713
4108
  href: { type: String },
3714
4109
  label: { type: String },
4110
+ mega: { type: Boolean, reflect: true },
3715
4111
  open: { type: Boolean, reflect: true },
3716
4112
  placement: { type: String, reflect: true }
3717
4113
  };
@@ -3727,6 +4123,7 @@ var SpectreSidebarElement = class extends SpectreProjectableElement {
3727
4123
  constructor() {
3728
4124
  super(...arguments);
3729
4125
  this.bordered = false;
4126
+ this.hideToggle = false;
3730
4127
  this.open = false;
3731
4128
  this.toggleLabel = "Toggle sidebar";
3732
4129
  this.handleDocumentKeydown = (event) => {
@@ -3761,6 +4158,9 @@ var SpectreSidebarElement = class extends SpectreProjectableElement {
3761
4158
  if (changedProperties.has("bordered") && this.bordered == null) {
3762
4159
  this.bordered = false;
3763
4160
  }
4161
+ if (changedProperties.has("hideToggle") && this.hideToggle == null) {
4162
+ this.hideToggle = false;
4163
+ }
3764
4164
  if (changedProperties.has("open") && this.open == null) {
3765
4165
  this.open = false;
3766
4166
  }
@@ -3813,16 +4213,16 @@ var SpectreSidebarElement = class extends SpectreProjectableElement {
3813
4213
  return spectreUi.getSidebarClasses({ bordered: this.bordered ?? false });
3814
4214
  }
3815
4215
  render() {
3816
- return lit.html`<button
3817
- aria-expanded="${this.open ? "true" : "false"}"
3818
- aria-label="${ifDefined_js.ifDefined(this.toggleLabel)}"
3819
- class="${spectreUi.getSidebarToggleClasses()}"
3820
- data-sp-sidebar-toggle
3821
- type="button"
3822
- @click="${() => this.toggle()}"
3823
- >
3824
- &#9776;
3825
- </button>
4216
+ return lit.html`${this.hideToggle ? lit.nothing : lit.html`<button
4217
+ aria-expanded="${this.open ? "true" : "false"}"
4218
+ aria-label="${ifDefined_js.ifDefined(this.toggleLabel)}"
4219
+ class="${spectreUi.getSidebarToggleClasses()}"
4220
+ data-sp-sidebar-toggle
4221
+ type="button"
4222
+ @click="${() => this.toggle()}"
4223
+ >
4224
+ &#9776;
4225
+ </button>`}
3826
4226
  <div
3827
4227
  class="${spectreUi.getSidebarBackdropClasses()}"
3828
4228
  data-sp-sidebar-backdrop
@@ -3841,6 +4241,7 @@ var SpectreSidebarElement = class extends SpectreProjectableElement {
3841
4241
  };
3842
4242
  SpectreSidebarElement.properties = {
3843
4243
  bordered: { type: Boolean, reflect: true },
4244
+ hideToggle: { attribute: "hide-toggle", type: Boolean, reflect: true },
3844
4245
  open: { type: Boolean, reflect: false },
3845
4246
  toggleLabel: { attribute: "toggle-label", type: String }
3846
4247
  };
@@ -3852,6 +4253,197 @@ function defineSpectreSidebar(tagName = "sp-sidebar") {
3852
4253
  customElements.define(tagName, SpectreSidebarElement);
3853
4254
  return SpectreSidebarElement;
3854
4255
  }
4256
+ var SpectreSidebarLinkElement = class extends SpectreProjectableElement {
4257
+ constructor() {
4258
+ super(...arguments);
4259
+ this.active = false;
4260
+ this.disabled = false;
4261
+ this.href = void 0;
4262
+ this.level = "parent";
4263
+ }
4264
+ get id() {
4265
+ return super.id;
4266
+ }
4267
+ set id(value) {
4268
+ super.id = value;
4269
+ }
4270
+ get title() {
4271
+ return super.title;
4272
+ }
4273
+ set title(value) {
4274
+ super.title = value;
4275
+ }
4276
+ getContentContainer() {
4277
+ return this.querySelector("[data-sp-sidebar-link-native]");
4278
+ }
4279
+ isInternalNode(node) {
4280
+ if (node.nodeType !== Node.ELEMENT_NODE) {
4281
+ return false;
4282
+ }
4283
+ const el = node;
4284
+ return el.hasAttribute("data-sp-sidebar-link-native");
4285
+ }
4286
+ willUpdate(changedProperties) {
4287
+ if (changedProperties.has("active") && this.active == null) {
4288
+ this.active = false;
4289
+ }
4290
+ if (changedProperties.has("disabled") && this.disabled == null) {
4291
+ this.disabled = false;
4292
+ }
4293
+ if (changedProperties.has("level") && (this.level == null || !isSidebarLinkLevel(this.level))) {
4294
+ this.level = "parent";
4295
+ }
4296
+ }
4297
+ get sidebarLinkClasses() {
4298
+ return spectreUi.getSidebarLinkClasses({
4299
+ active: this.active ?? false,
4300
+ disabled: this.disabled ?? false,
4301
+ level: this.level
4302
+ });
4303
+ }
4304
+ render() {
4305
+ return lit.html`<a
4306
+ aria-current="${ifDefined_js.ifDefined(this.active ? "page" : void 0)}"
4307
+ aria-disabled="${ifDefined_js.ifDefined(this.disabled ? "true" : void 0)}"
4308
+ aria-label="${ifDefined_js.ifDefined(this.forwardedAriaLabel)}"
4309
+ class="${this.sidebarLinkClasses}"
4310
+ data-sp-sidebar-link-native
4311
+ href="${ifDefined_js.ifDefined(this.disabled ? void 0 : this.href)}"
4312
+ id="${ifDefined_js.ifDefined(this.id || void 0)}"
4313
+ tabindex="${ifDefined_js.ifDefined(this.disabled ? -1 : void 0)}"
4314
+ title="${ifDefined_js.ifDefined(this.title || void 0)}"
4315
+ >
4316
+ ${this.hasProjectedContent ? this.projectedContent : lit.nothing}
4317
+ </a>`;
4318
+ }
4319
+ };
4320
+ SpectreSidebarLinkElement.properties = {
4321
+ active: { type: Boolean, reflect: true },
4322
+ disabled: { type: Boolean, reflect: true },
4323
+ href: { type: String },
4324
+ level: { type: String, reflect: true }
4325
+ };
4326
+ function defineSpectreSidebarLink(tagName = "sp-sidebar-link") {
4327
+ const existingElement = customElements.get(tagName);
4328
+ if (existingElement) {
4329
+ return existingElement;
4330
+ }
4331
+ customElements.define(tagName, SpectreSidebarLinkElement);
4332
+ return SpectreSidebarLinkElement;
4333
+ }
4334
+ var SpectreSidebarToggleElement = class extends SpectreProjectableElement {
4335
+ constructor() {
4336
+ super(...arguments);
4337
+ this.for = void 0;
4338
+ this.label = "Toggle sidebar";
4339
+ this.expanded = false;
4340
+ this.handleTargetToggle = (event) => {
4341
+ if (event.target !== this.targetElement) {
4342
+ return;
4343
+ }
4344
+ this.syncExpanded();
4345
+ };
4346
+ }
4347
+ get id() {
4348
+ return super.id;
4349
+ }
4350
+ set id(value) {
4351
+ super.id = value;
4352
+ }
4353
+ get title() {
4354
+ return super.title;
4355
+ }
4356
+ set title(value) {
4357
+ super.title = value;
4358
+ }
4359
+ getContentContainer() {
4360
+ return this.querySelector("[data-sp-sidebar-toggle-native]");
4361
+ }
4362
+ isInternalNode(node) {
4363
+ if (node.nodeType !== Node.ELEMENT_NODE) {
4364
+ return false;
4365
+ }
4366
+ const el = node;
4367
+ return el.hasAttribute("data-sp-sidebar-toggle-native");
4368
+ }
4369
+ willUpdate(changedProperties) {
4370
+ if (changedProperties.has("label") && !this.label) {
4371
+ this.label = "Toggle sidebar";
4372
+ }
4373
+ }
4374
+ connectedCallback() {
4375
+ super.connectedCallback();
4376
+ document.addEventListener("sp-open", this.handleTargetToggle);
4377
+ document.addEventListener("sp-close", this.handleTargetToggle);
4378
+ this.syncExpanded();
4379
+ }
4380
+ disconnectedCallback() {
4381
+ document.removeEventListener("sp-open", this.handleTargetToggle);
4382
+ document.removeEventListener("sp-close", this.handleTargetToggle);
4383
+ super.disconnectedCallback();
4384
+ }
4385
+ updated(changedProperties) {
4386
+ super.updated(changedProperties);
4387
+ if (changedProperties.has("for")) {
4388
+ this.syncExpanded();
4389
+ }
4390
+ }
4391
+ get targetElement() {
4392
+ if (!this.for) {
4393
+ return null;
4394
+ }
4395
+ const native = document.getElementById(this.for);
4396
+ return native?.closest("sp-sidebar") ?? null;
4397
+ }
4398
+ syncExpanded() {
4399
+ const next = Boolean(this.targetElement?.open);
4400
+ if (next !== this.expanded) {
4401
+ this.expanded = next;
4402
+ this.requestUpdate();
4403
+ }
4404
+ }
4405
+ handleClick() {
4406
+ const target = this.targetElement;
4407
+ if (!target) {
4408
+ return;
4409
+ }
4410
+ const nextOpen = !target.open;
4411
+ target.open = nextOpen;
4412
+ target.dispatchEvent(
4413
+ new CustomEvent(nextOpen ? "sp-open" : "sp-close", { bubbles: true })
4414
+ );
4415
+ }
4416
+ get toggleClasses() {
4417
+ return spectreUi.getSidebarToggleClasses();
4418
+ }
4419
+ render() {
4420
+ return lit.html`<button
4421
+ aria-controls="${ifDefined_js.ifDefined(this.for)}"
4422
+ aria-expanded="${this.expanded ? "true" : "false"}"
4423
+ aria-label="${ifDefined_js.ifDefined(this.forwardedAriaLabel ?? this.label)}"
4424
+ class="${this.toggleClasses}"
4425
+ data-sp-sidebar-toggle-native
4426
+ id="${ifDefined_js.ifDefined(this.id || void 0)}"
4427
+ title="${ifDefined_js.ifDefined(this.title || void 0)}"
4428
+ type="button"
4429
+ @click="${() => this.handleClick()}"
4430
+ >
4431
+ ${this.hasProjectedContent ? this.projectedContent : lit.html`&#9776;`}
4432
+ </button>`;
4433
+ }
4434
+ };
4435
+ SpectreSidebarToggleElement.properties = {
4436
+ for: { type: String },
4437
+ label: { type: String }
4438
+ };
4439
+ function defineSpectreSidebarToggle(tagName = "sp-sidebar-toggle") {
4440
+ const existingElement = customElements.get(tagName);
4441
+ if (existingElement) {
4442
+ return existingElement;
4443
+ }
4444
+ customElements.define(tagName, SpectreSidebarToggleElement);
4445
+ return SpectreSidebarToggleElement;
4446
+ }
3855
4447
  var SpectreToastElement = class extends SpectreBaseElement {
3856
4448
  constructor() {
3857
4449
  super(...arguments);
@@ -4286,10 +4878,14 @@ function defineSpectreComponents() {
4286
4878
  defineSpectreStack();
4287
4879
  defineSpectreDropdown();
4288
4880
  defineSpectreFooter();
4881
+ defineSpectreFooterChip();
4882
+ defineSpectreFooterLink();
4289
4883
  defineSpectreModal();
4290
4884
  defineSpectreNav();
4291
4885
  defineSpectreNavItem();
4292
4886
  defineSpectreSidebar();
4887
+ defineSpectreSidebarLink();
4888
+ defineSpectreSidebarToggle();
4293
4889
  defineSpectreToast();
4294
4890
  defineSpectreTooltip();
4295
4891
  defineSpectreText();
@@ -4304,7 +4900,9 @@ exports.SpectreCheckboxElement = SpectreCheckboxElement;
4304
4900
  exports.SpectreContainerElement = SpectreContainerElement;
4305
4901
  exports.SpectreDropdownElement = SpectreDropdownElement;
4306
4902
  exports.SpectreFieldsetElement = SpectreFieldsetElement;
4903
+ exports.SpectreFooterChipElement = SpectreFooterChipElement;
4307
4904
  exports.SpectreFooterElement = SpectreFooterElement;
4905
+ exports.SpectreFooterLinkElement = SpectreFooterLinkElement;
4308
4906
  exports.SpectreGridElement = SpectreGridElement;
4309
4907
  exports.SpectreIconBoxElement = SpectreIconBoxElement;
4310
4908
  exports.SpectreInputElement = SpectreInputElement;
@@ -4318,6 +4916,8 @@ exports.SpectreRatingElement = SpectreRatingElement;
4318
4916
  exports.SpectreSectionElement = SpectreSectionElement;
4319
4917
  exports.SpectreSelectElement = SpectreSelectElement;
4320
4918
  exports.SpectreSidebarElement = SpectreSidebarElement;
4919
+ exports.SpectreSidebarLinkElement = SpectreSidebarLinkElement;
4920
+ exports.SpectreSidebarToggleElement = SpectreSidebarToggleElement;
4321
4921
  exports.SpectreSpinnerElement = SpectreSpinnerElement;
4322
4922
  exports.SpectreStackElement = SpectreStackElement;
4323
4923
  exports.SpectreTagElement = SpectreTagElement;
@@ -4337,6 +4937,8 @@ exports.defineSpectreContainer = defineSpectreContainer;
4337
4937
  exports.defineSpectreDropdown = defineSpectreDropdown;
4338
4938
  exports.defineSpectreFieldset = defineSpectreFieldset;
4339
4939
  exports.defineSpectreFooter = defineSpectreFooter;
4940
+ exports.defineSpectreFooterChip = defineSpectreFooterChip;
4941
+ exports.defineSpectreFooterLink = defineSpectreFooterLink;
4340
4942
  exports.defineSpectreGrid = defineSpectreGrid;
4341
4943
  exports.defineSpectreIconBox = defineSpectreIconBox;
4342
4944
  exports.defineSpectreInput = defineSpectreInput;
@@ -4350,6 +4952,8 @@ exports.defineSpectreRating = defineSpectreRating;
4350
4952
  exports.defineSpectreSection = defineSpectreSection;
4351
4953
  exports.defineSpectreSelect = defineSpectreSelect;
4352
4954
  exports.defineSpectreSidebar = defineSpectreSidebar;
4955
+ exports.defineSpectreSidebarLink = defineSpectreSidebarLink;
4956
+ exports.defineSpectreSidebarToggle = defineSpectreSidebarToggle;
4353
4957
  exports.defineSpectreSpinner = defineSpectreSpinner;
4354
4958
  exports.defineSpectreStack = defineSpectreStack;
4355
4959
  exports.defineSpectreTag = defineSpectreTag;