@phcdevworks/spectre-components 1.11.0 → 1.14.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 (102) hide show
  1. package/README.md +111 -51
  2. package/dist/alert.cjs.map +1 -1
  3. package/dist/alert.d.cts +2 -2
  4. package/dist/alert.d.ts +2 -2
  5. package/dist/alert.js.map +1 -1
  6. package/dist/avatar.cjs.map +1 -1
  7. package/dist/avatar.d.cts +2 -2
  8. package/dist/avatar.d.ts +2 -2
  9. package/dist/avatar.js.map +1 -1
  10. package/dist/badge.cjs.map +1 -1
  11. package/dist/badge.d.cts +2 -2
  12. package/dist/badge.d.ts +2 -2
  13. package/dist/badge.js.map +1 -1
  14. package/dist/button.cjs +24 -0
  15. package/dist/button.cjs.map +1 -1
  16. package/dist/button.d.cts +21 -3
  17. package/dist/button.d.ts +21 -3
  18. package/dist/button.js +24 -0
  19. package/dist/button.js.map +1 -1
  20. package/dist/card.cjs.map +1 -1
  21. package/dist/card.d.cts +2 -2
  22. package/dist/card.d.ts +2 -2
  23. package/dist/card.js.map +1 -1
  24. package/dist/container.cjs.map +1 -1
  25. package/dist/container.d.cts +2 -2
  26. package/dist/container.d.ts +2 -2
  27. package/dist/container.js.map +1 -1
  28. package/dist/dropdown.cjs.map +1 -1
  29. package/dist/dropdown.d.cts +2 -2
  30. package/dist/dropdown.d.ts +2 -2
  31. package/dist/dropdown.js.map +1 -1
  32. package/dist/{form-JrKDonG4.d.cts → form-BGQjgJrL.d.cts} +10 -1
  33. package/dist/{form-JrKDonG4.d.ts → form-BGQjgJrL.d.ts} +10 -1
  34. package/dist/grid.cjs +36 -2
  35. package/dist/grid.cjs.map +1 -1
  36. package/dist/grid.d.cts +7 -2
  37. package/dist/grid.d.ts +7 -2
  38. package/dist/grid.js +36 -2
  39. package/dist/grid.js.map +1 -1
  40. package/dist/icon-box.cjs.map +1 -1
  41. package/dist/icon-box.d.cts +2 -2
  42. package/dist/icon-box.d.ts +2 -2
  43. package/dist/icon-box.js.map +1 -1
  44. package/dist/index.cjs +281 -2
  45. package/dist/index.cjs.map +1 -1
  46. package/dist/index.d.cts +3 -2
  47. package/dist/index.d.ts +3 -2
  48. package/dist/index.js +281 -4
  49. package/dist/index.js.map +1 -1
  50. package/dist/input.cjs.map +1 -1
  51. package/dist/input.d.cts +2 -2
  52. package/dist/input.d.ts +2 -2
  53. package/dist/input.js.map +1 -1
  54. package/dist/nav-item.cjs +500 -0
  55. package/dist/nav-item.cjs.map +1 -0
  56. package/dist/nav-item.d.cts +74 -0
  57. package/dist/nav-item.d.ts +74 -0
  58. package/dist/nav-item.js +497 -0
  59. package/dist/nav-item.js.map +1 -0
  60. package/dist/rating.cjs.map +1 -1
  61. package/dist/rating.d.cts +2 -2
  62. package/dist/rating.d.ts +2 -2
  63. package/dist/rating.js.map +1 -1
  64. package/dist/select.cjs.map +1 -1
  65. package/dist/select.d.cts +1 -1
  66. package/dist/select.d.ts +1 -1
  67. package/dist/select.js.map +1 -1
  68. package/dist/spinner.cjs.map +1 -1
  69. package/dist/spinner.d.cts +2 -2
  70. package/dist/spinner.d.ts +2 -2
  71. package/dist/spinner.js.map +1 -1
  72. package/dist/stack.cjs.map +1 -1
  73. package/dist/stack.d.cts +2 -2
  74. package/dist/stack.d.ts +2 -2
  75. package/dist/stack.js.map +1 -1
  76. package/dist/tag.cjs.map +1 -1
  77. package/dist/tag.d.cts +2 -2
  78. package/dist/tag.d.ts +2 -2
  79. package/dist/tag.js.map +1 -1
  80. package/dist/testimonial.cjs.map +1 -1
  81. package/dist/testimonial.d.cts +2 -2
  82. package/dist/testimonial.d.ts +2 -2
  83. package/dist/testimonial.js.map +1 -1
  84. package/dist/text.cjs +16 -0
  85. package/dist/text.cjs.map +1 -1
  86. package/dist/text.d.cts +8 -2
  87. package/dist/text.d.ts +8 -2
  88. package/dist/text.js +16 -0
  89. package/dist/text.js.map +1 -1
  90. package/dist/textarea.cjs.map +1 -1
  91. package/dist/textarea.d.cts +1 -1
  92. package/dist/textarea.d.ts +1 -1
  93. package/dist/textarea.js.map +1 -1
  94. package/dist/toast.cjs.map +1 -1
  95. package/dist/toast.d.cts +2 -2
  96. package/dist/toast.d.ts +2 -2
  97. package/dist/toast.js.map +1 -1
  98. package/dist/tooltip.cjs.map +1 -1
  99. package/dist/tooltip.d.cts +2 -2
  100. package/dist/tooltip.d.ts +2 -2
  101. package/dist/tooltip.js.map +1 -1
  102. package/package.json +16 -11
package/dist/index.d.cts CHANGED
@@ -1,5 +1,5 @@
1
- export { S as SpectreAlertSize, a as SpectreAlertVariant, b as SpectreAvatarShape, c as SpectreAvatarSize, S as SpectreBadgeSize, d as SpectreBadgeVariant, S as SpectreButtonSize, e as SpectreButtonType, f as SpectreButtonVariant, g as SpectreCardVariant, h as SpectreContainerMaxWidth, i as SpectreDropdownPlacement, j as SpectreGridColumns, k as SpectreGridGap, S as SpectreIconBoxSize, l as SpectreIconBoxVariant, S as SpectreInputSize, m as SpectreInputType, S as SpectreRatingSize, S as SpectreSpinnerSize, n as SpectreSpinnerVariant, o as SpectreStackAlign, p as SpectreStackBasis, q as SpectreStackDirection, S as SpectreTagSize, r as SpectreTagVariant, s as SpectreTestimonialVariant, t as SpectreTextFamily, u as SpectreTextLevel, v as SpectreTextSize, w as SpectreTextVariant, x as SpectreToastVariant, y as SpectreTooltipPlacement, z as spectreAlertSizes, A as spectreAlertVariants, B as spectreAvatarShapes, C as spectreAvatarSizes, z as spectreBadgeSizes, D as spectreBadgeVariants, z as spectreButtonSizes, E as spectreButtonTypes, F as spectreButtonVariants, G as spectreCardVariants, H as spectreContainerMaxWidths, I as spectreDropdownPlacements, J as spectreGridColumns, K as spectreGridGaps, z as spectreIconBoxSizes, L as spectreIconBoxVariants, z as spectreInputSizes, M as spectreInputTypes, z as spectreRatingSizes, z as spectreSpinnerSizes, N as spectreSpinnerVariants, O as spectreStackAligns, P as spectreStackBases, Q as spectreStackDirections, z as spectreTagSizes, R as spectreTagVariants, T as spectreTestimonialVariants, U as spectreTextFamilies, V as spectreTextLevels, W as spectreTextSizes, X as spectreTextVariants, Y as spectreToastVariants, Z as spectreTooltipPlacements } from './form-JrKDonG4.cjs';
2
- export { SpectreButtonElement, SpectreButtonProps, defineSpectreButton } from './button.cjs';
1
+ export { S as SpectreAlertSize, a as SpectreAlertVariant, b as SpectreAvatarShape, c as SpectreAvatarSize, S as SpectreBadgeSize, d as SpectreBadgeVariant, S as SpectreButtonSize, e as SpectreButtonType, f as SpectreButtonVariant, g as SpectreCardVariant, h as SpectreContainerMaxWidth, i as SpectreDropdownPlacement, j as SpectreGridColumns, k as SpectreGridGap, S as SpectreIconBoxSize, l as SpectreIconBoxVariant, S as SpectreInputSize, m as SpectreInputType, S as SpectreRatingSize, S as SpectreSpinnerSize, n as SpectreSpinnerVariant, o as SpectreStackAlign, p as SpectreStackBasis, q as SpectreStackDirection, S as SpectreTagSize, r as SpectreTagVariant, s as SpectreTestimonialVariant, t as SpectreTextFamily, u as SpectreTextLevel, v as SpectreTextSize, w as SpectreTextVariant, x as SpectreToastVariant, y as SpectreTooltipPlacement, z as spectreAlertSizes, A as spectreAlertVariants, B as spectreAvatarShapes, C as spectreAvatarSizes, z as spectreBadgeSizes, D as spectreBadgeVariants, z as spectreButtonSizes, E as spectreButtonTypes, F as spectreButtonVariants, G as spectreCardVariants, H as spectreContainerMaxWidths, I as spectreDropdownPlacements, J as spectreGridColumns, K as spectreGridGaps, z as spectreIconBoxSizes, L as spectreIconBoxVariants, z as spectreInputSizes, M as spectreInputTypes, z as spectreRatingSizes, z as spectreSpinnerSizes, N as spectreSpinnerVariants, O as spectreStackAligns, P as spectreStackBases, Q as spectreStackDirections, z as spectreTagSizes, R as spectreTagVariants, T as spectreTestimonialVariants, U as spectreTextFamilies, V as spectreTextLevels, W as spectreTextSizes, X as spectreTextVariants, Y as spectreToastVariants, Z as spectreTooltipPlacements } from './form-BGQjgJrL.cjs';
2
+ export { SpectreButtonElement, SpectreButtonProps, SpectreButtonTarget, defineSpectreButton } from './button.cjs';
3
3
  export { SpectreInputElement, SpectreInputProps, defineSpectreInput } from './input.cjs';
4
4
  export { SpectreTextareaElement, SpectreTextareaProps, defineSpectreTextarea } from './textarea.cjs';
5
5
  export { SpectreSelectElement, SpectreSelectProps, defineSpectreSelect } from './select.cjs';
@@ -25,6 +25,7 @@ export { SpectreDropdownElement, SpectreDropdownProps, defineSpectreDropdown } f
25
25
  export { SpectreFooterElement, SpectreFooterProps, defineSpectreFooter } from './footer.cjs';
26
26
  export { SpectreModalElement, SpectreModalProps, defineSpectreModal } from './modal.cjs';
27
27
  export { SpectreNavElement, SpectreNavProps, defineSpectreNav } from './nav.cjs';
28
+ export { SpectreNavItemElement, SpectreNavItemProps, defineSpectreNavItem } from './nav-item.cjs';
28
29
  export { SpectreSidebarElement, SpectreSidebarProps, defineSpectreSidebar } from './sidebar.cjs';
29
30
  export { SpectreToastElement, SpectreToastProps, defineSpectreToast } from './toast.cjs';
30
31
  export { SpectreTooltipElement, SpectreTooltipProps, defineSpectreTooltip } from './tooltip.cjs';
package/dist/index.d.ts CHANGED
@@ -1,5 +1,5 @@
1
- export { S as SpectreAlertSize, a as SpectreAlertVariant, b as SpectreAvatarShape, c as SpectreAvatarSize, S as SpectreBadgeSize, d as SpectreBadgeVariant, S as SpectreButtonSize, e as SpectreButtonType, f as SpectreButtonVariant, g as SpectreCardVariant, h as SpectreContainerMaxWidth, i as SpectreDropdownPlacement, j as SpectreGridColumns, k as SpectreGridGap, S as SpectreIconBoxSize, l as SpectreIconBoxVariant, S as SpectreInputSize, m as SpectreInputType, S as SpectreRatingSize, S as SpectreSpinnerSize, n as SpectreSpinnerVariant, o as SpectreStackAlign, p as SpectreStackBasis, q as SpectreStackDirection, S as SpectreTagSize, r as SpectreTagVariant, s as SpectreTestimonialVariant, t as SpectreTextFamily, u as SpectreTextLevel, v as SpectreTextSize, w as SpectreTextVariant, x as SpectreToastVariant, y as SpectreTooltipPlacement, z as spectreAlertSizes, A as spectreAlertVariants, B as spectreAvatarShapes, C as spectreAvatarSizes, z as spectreBadgeSizes, D as spectreBadgeVariants, z as spectreButtonSizes, E as spectreButtonTypes, F as spectreButtonVariants, G as spectreCardVariants, H as spectreContainerMaxWidths, I as spectreDropdownPlacements, J as spectreGridColumns, K as spectreGridGaps, z as spectreIconBoxSizes, L as spectreIconBoxVariants, z as spectreInputSizes, M as spectreInputTypes, z as spectreRatingSizes, z as spectreSpinnerSizes, N as spectreSpinnerVariants, O as spectreStackAligns, P as spectreStackBases, Q as spectreStackDirections, z as spectreTagSizes, R as spectreTagVariants, T as spectreTestimonialVariants, U as spectreTextFamilies, V as spectreTextLevels, W as spectreTextSizes, X as spectreTextVariants, Y as spectreToastVariants, Z as spectreTooltipPlacements } from './form-JrKDonG4.js';
2
- export { SpectreButtonElement, SpectreButtonProps, defineSpectreButton } from './button.js';
1
+ export { S as SpectreAlertSize, a as SpectreAlertVariant, b as SpectreAvatarShape, c as SpectreAvatarSize, S as SpectreBadgeSize, d as SpectreBadgeVariant, S as SpectreButtonSize, e as SpectreButtonType, f as SpectreButtonVariant, g as SpectreCardVariant, h as SpectreContainerMaxWidth, i as SpectreDropdownPlacement, j as SpectreGridColumns, k as SpectreGridGap, S as SpectreIconBoxSize, l as SpectreIconBoxVariant, S as SpectreInputSize, m as SpectreInputType, S as SpectreRatingSize, S as SpectreSpinnerSize, n as SpectreSpinnerVariant, o as SpectreStackAlign, p as SpectreStackBasis, q as SpectreStackDirection, S as SpectreTagSize, r as SpectreTagVariant, s as SpectreTestimonialVariant, t as SpectreTextFamily, u as SpectreTextLevel, v as SpectreTextSize, w as SpectreTextVariant, x as SpectreToastVariant, y as SpectreTooltipPlacement, z as spectreAlertSizes, A as spectreAlertVariants, B as spectreAvatarShapes, C as spectreAvatarSizes, z as spectreBadgeSizes, D as spectreBadgeVariants, z as spectreButtonSizes, E as spectreButtonTypes, F as spectreButtonVariants, G as spectreCardVariants, H as spectreContainerMaxWidths, I as spectreDropdownPlacements, J as spectreGridColumns, K as spectreGridGaps, z as spectreIconBoxSizes, L as spectreIconBoxVariants, z as spectreInputSizes, M as spectreInputTypes, z as spectreRatingSizes, z as spectreSpinnerSizes, N as spectreSpinnerVariants, O as spectreStackAligns, P as spectreStackBases, Q as spectreStackDirections, z as spectreTagSizes, R as spectreTagVariants, T as spectreTestimonialVariants, U as spectreTextFamilies, V as spectreTextLevels, W as spectreTextSizes, X as spectreTextVariants, Y as spectreToastVariants, Z as spectreTooltipPlacements } from './form-BGQjgJrL.js';
2
+ export { SpectreButtonElement, SpectreButtonProps, SpectreButtonTarget, defineSpectreButton } from './button.js';
3
3
  export { SpectreInputElement, SpectreInputProps, defineSpectreInput } from './input.js';
4
4
  export { SpectreTextareaElement, SpectreTextareaProps, defineSpectreTextarea } from './textarea.js';
5
5
  export { SpectreSelectElement, SpectreSelectProps, defineSpectreSelect } from './select.js';
@@ -25,6 +25,7 @@ export { SpectreDropdownElement, SpectreDropdownProps, defineSpectreDropdown } f
25
25
  export { SpectreFooterElement, SpectreFooterProps, defineSpectreFooter } from './footer.js';
26
26
  export { SpectreModalElement, SpectreModalProps, defineSpectreModal } from './modal.js';
27
27
  export { SpectreNavElement, SpectreNavProps, defineSpectreNav } from './nav.js';
28
+ export { SpectreNavItemElement, SpectreNavItemProps, defineSpectreNavItem } from './nav-item.js';
28
29
  export { SpectreSidebarElement, SpectreSidebarProps, defineSpectreSidebar } from './sidebar.js';
29
30
  export { SpectreToastElement, SpectreToastProps, defineSpectreToast } from './toast.js';
30
31
  export { SpectreTooltipElement, SpectreTooltipProps, defineSpectreTooltip } from './tooltip.js';
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, 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, getStackClasses, getDropdownClasses, getDropdownMenuClasses, getFooterClasses, getModalOverlayClasses, getModalClasses, getNavClasses, getNavLinkClasses, getSidebarClasses, getSidebarToggleClasses, getSidebarBackdropClasses, getToastClasses, getToastIconClasses, getTooltipClasses, getTextClasses, getSectionClasses } from '@phcdevworks/spectre-ui';
2
2
  import { LitElement, html, nothing } from 'lit';
3
3
  import { ifDefined } from 'lit/directives/if-defined.js';
4
4
  import { live } from 'lit/directives/live.js';
@@ -157,6 +157,33 @@ var spectreGridGaps = ["sm", "md", "lg"];
157
157
  function isGridGap(value) {
158
158
  return spectreGridGaps.includes(value);
159
159
  }
160
+ var spectreGridSpans = [
161
+ 1,
162
+ 2,
163
+ 3,
164
+ 4,
165
+ 5,
166
+ 6,
167
+ 7,
168
+ 8,
169
+ 9,
170
+ 10,
171
+ 11,
172
+ 12,
173
+ "full"
174
+ ];
175
+ function isGridSpan(value) {
176
+ return spectreGridSpans.includes(
177
+ value
178
+ );
179
+ }
180
+ function isGridSpanOptions(value) {
181
+ if (typeof value !== "object" || value === null) {
182
+ return false;
183
+ }
184
+ const candidate = value;
185
+ return (candidate.base === void 0 || isGridSpan(candidate.base)) && (candidate.md === void 0 || isGridSpan(candidate.md)) && (candidate.lg === void 0 || isGridSpan(candidate.lg));
186
+ }
160
187
  var spectreStackDirections = ["vertical", "horizontal"];
161
188
  function isStackDirection(value) {
162
189
  return spectreStackDirections.includes(
@@ -244,6 +271,17 @@ var spectreTextLevels = [
244
271
  function isTextLevel(value) {
245
272
  return spectreTextLevels.includes(value);
246
273
  }
274
+ var spectreTextTransforms = [
275
+ "none",
276
+ "uppercase",
277
+ "lowercase",
278
+ "capitalize"
279
+ ];
280
+ function isTextTransform(value) {
281
+ return spectreTextTransforms.includes(
282
+ value
283
+ );
284
+ }
247
285
  function normalizeInt(value, fallback, min = 0) {
248
286
  if (value == null || typeof value !== "number" || !Number.isInteger(value) || value < min) {
249
287
  return fallback;
@@ -622,6 +660,9 @@ var SpectreButtonElement = class extends SpectreProjectableElement {
622
660
  set autofocus(value) {
623
661
  super.autofocus = value;
624
662
  }
663
+ get isLink() {
664
+ return Boolean(this.href) && !this.isDisabled;
665
+ }
625
666
  getContentContainer() {
626
667
  return this.querySelector("[data-sp-button-native]");
627
668
  }
@@ -705,12 +746,30 @@ var SpectreButtonElement = class extends SpectreProjectableElement {
705
746
  >` : nothing;
706
747
  }
707
748
  render() {
749
+ if (this.isLink) {
750
+ return html`<a
751
+ aria-busy="${this.loading ? "true" : "false"}"
752
+ aria-describedby="${ifDefined(this.forwardedAriaDescribedBy)}"
753
+ aria-label="${ifDefined(this.forwardedAriaLabel)}"
754
+ aria-labelledby="${ifDefined(this.forwardedAriaLabelledBy)}"
755
+ class="${this.buttonClasses}"
756
+ data-sp-button-native
757
+ href="${ifDefined(this.href)}"
758
+ id="${ifDefined(this.id || void 0)}"
759
+ rel="${ifDefined(this.rel || void 0)}"
760
+ target="${ifDefined(this.target || void 0)}"
761
+ title="${ifDefined(this.title || void 0)}"
762
+ >
763
+ ${this.renderButtonContent()}
764
+ </a>`;
765
+ }
708
766
  return html`<button
709
767
  aria-busy="${this.loading ? "true" : "false"}"
710
768
  aria-describedby="${ifDefined(this.forwardedAriaDescribedBy)}"
711
769
  aria-label="${ifDefined(this.forwardedAriaLabel)}"
712
770
  aria-labelledby="${ifDefined(this.forwardedAriaLabelledBy)}"
713
771
  ?autofocus="${this.autofocus}"
772
+ aria-disabled="${ifDefined(this.href && this.isDisabled ? "true" : void 0)}"
714
773
  class="${this.buttonClasses}"
715
774
  data-sp-button-native
716
775
  ?disabled="${this.isDisabled}"
@@ -729,13 +788,16 @@ SpectreButtonElement.properties = {
729
788
  disabled: { type: Boolean, reflect: true },
730
789
  form: { type: String },
731
790
  fullWidth: { attribute: "full-width", type: Boolean, reflect: true },
791
+ href: { type: String, reflect: true },
732
792
  iconOnly: { attribute: "icon-only", type: Boolean, reflect: true },
733
793
  label: { type: String, reflect: true },
734
794
  loading: { type: Boolean, reflect: true },
735
795
  loadingLabel: { attribute: "loading-label", type: String, reflect: true },
736
796
  name: { type: String, reflect: true },
737
797
  pill: { type: Boolean, reflect: true },
798
+ rel: { type: String },
738
799
  size: { type: String, reflect: true },
800
+ target: { type: String },
739
801
  type: { type: String, reflect: true },
740
802
  variant: { type: String, reflect: true },
741
803
  value: { type: String }
@@ -2803,11 +2865,17 @@ var SpectreGridElement = class extends SpectreProjectableElement {
2803
2865
  if (changedProperties.has("gap") && (this.gap == null || !isGridGap(this.gap))) {
2804
2866
  this.gap = "md";
2805
2867
  }
2868
+ if (changedProperties.has("span") && this.span !== void 0 && !isGridSpan(this.span) && !isGridSpanOptions(this.span)) {
2869
+ this.span = void 0;
2870
+ }
2806
2871
  }
2807
2872
  get gridClasses() {
2808
2873
  return getGridClasses({
2809
2874
  columns: this.columns,
2810
- gap: this.gap
2875
+ gap: this.gap,
2876
+ ...this.span !== void 0 && {
2877
+ span: this.span
2878
+ }
2811
2879
  });
2812
2880
  }
2813
2881
  render() {
@@ -2826,7 +2894,8 @@ var SpectreGridElement = class extends SpectreProjectableElement {
2826
2894
  };
2827
2895
  SpectreGridElement.properties = {
2828
2896
  columns: { type: Number, reflect: true },
2829
- gap: { type: String, reflect: true }
2897
+ gap: { type: String, reflect: true },
2898
+ span: { type: Object }
2830
2899
  };
2831
2900
  function defineSpectreGrid(tagName = "sp-grid") {
2832
2901
  const existingElement = customElements.get(tagName);
@@ -3450,6 +3519,208 @@ function defineSpectreNav(tagName = "sp-nav") {
3450
3519
  customElements.define(tagName, SpectreNavElement);
3451
3520
  return SpectreNavElement;
3452
3521
  }
3522
+ var SpectreNavItemElement = class extends SpectreBaseElement {
3523
+ constructor() {
3524
+ super(...arguments);
3525
+ this.dropdown = false;
3526
+ this.href = void 0;
3527
+ this.label = void 0;
3528
+ this.open = false;
3529
+ this.placement = "bottom-start";
3530
+ this.triggerContent = [];
3531
+ this.menuContent = [];
3532
+ this.handleDocumentClick = (event) => {
3533
+ if (!this.open) {
3534
+ return;
3535
+ }
3536
+ if (!event.composedPath().includes(this)) {
3537
+ this.close();
3538
+ }
3539
+ };
3540
+ this.handleDocumentKeydown = (event) => {
3541
+ if (event.key === "Escape" && this.open) {
3542
+ this.close();
3543
+ this.triggerElement?.focus();
3544
+ }
3545
+ };
3546
+ }
3547
+ get id() {
3548
+ return super.id;
3549
+ }
3550
+ set id(value) {
3551
+ super.id = value;
3552
+ }
3553
+ get title() {
3554
+ return super.title;
3555
+ }
3556
+ set title(value) {
3557
+ super.title = value;
3558
+ }
3559
+ isInternalNode(node) {
3560
+ if (node.nodeType !== Node.ELEMENT_NODE) {
3561
+ return false;
3562
+ }
3563
+ const el = node;
3564
+ return el.hasAttribute("data-sp-nav-item-menu") || el.hasAttribute("data-sp-nav-item-trigger");
3565
+ }
3566
+ syncProjectedContent() {
3567
+ const nextTriggerContent = [];
3568
+ const nextMenuContent = [];
3569
+ this.childNodes.forEach((node) => {
3570
+ if (this.isInternalNode(node)) {
3571
+ return;
3572
+ }
3573
+ const isTriggerSlot = node.nodeType === Node.ELEMENT_NODE && node.getAttribute("slot") === "trigger";
3574
+ if (isTriggerSlot) {
3575
+ nextTriggerContent.push(node);
3576
+ } else {
3577
+ nextMenuContent.push(node);
3578
+ }
3579
+ });
3580
+ const changed = nextTriggerContent.length !== this.triggerContent.length || nextTriggerContent.some((n, i) => n !== this.triggerContent[i]) || nextMenuContent.length !== this.menuContent.length || nextMenuContent.some((n, i) => n !== this.menuContent[i]);
3581
+ if (changed) {
3582
+ this.triggerContent = nextTriggerContent;
3583
+ this.menuContent = nextMenuContent;
3584
+ }
3585
+ return changed;
3586
+ }
3587
+ get hasTriggerContent() {
3588
+ return hasMeaningfulContent(this.triggerContent);
3589
+ }
3590
+ get hasMenuContent() {
3591
+ return hasMeaningfulContent(this.menuContent);
3592
+ }
3593
+ connectedCallback() {
3594
+ super.connectedCallback();
3595
+ this.syncProjectedContent();
3596
+ this.startContentObserver();
3597
+ document.addEventListener("click", this.handleDocumentClick);
3598
+ document.addEventListener("keydown", this.handleDocumentKeydown);
3599
+ }
3600
+ disconnectedCallback() {
3601
+ this.stopContentObserver();
3602
+ document.removeEventListener("click", this.handleDocumentClick);
3603
+ document.removeEventListener("keydown", this.handleDocumentKeydown);
3604
+ super.disconnectedCallback();
3605
+ }
3606
+ update(changedProperties) {
3607
+ this.stopContentObserver();
3608
+ super.update(changedProperties);
3609
+ this.startContentObserver();
3610
+ }
3611
+ startContentObserver() {
3612
+ if (this.contentObserver) {
3613
+ return;
3614
+ }
3615
+ this.contentObserver = new MutationObserver(() => {
3616
+ if (this.syncProjectedContent()) {
3617
+ this.requestUpdate();
3618
+ }
3619
+ });
3620
+ this.contentObserver.observe(this, { childList: true });
3621
+ }
3622
+ stopContentObserver() {
3623
+ this.contentObserver?.disconnect();
3624
+ this.contentObserver = void 0;
3625
+ }
3626
+ willUpdate(changedProperties) {
3627
+ if (changedProperties.has("dropdown") && this.dropdown == null) {
3628
+ this.dropdown = false;
3629
+ }
3630
+ if (changedProperties.has("open") && this.open == null) {
3631
+ this.open = false;
3632
+ }
3633
+ if (changedProperties.has("placement") && (this.placement == null || !isDropdownPlacement(this.placement))) {
3634
+ this.placement = "bottom-start";
3635
+ }
3636
+ }
3637
+ get triggerElement() {
3638
+ return this.querySelector("[data-sp-nav-item-trigger]");
3639
+ }
3640
+ toggle() {
3641
+ if (this.open) {
3642
+ this.close();
3643
+ } else {
3644
+ this.openMenu();
3645
+ }
3646
+ }
3647
+ openMenu() {
3648
+ if (this.open) {
3649
+ return;
3650
+ }
3651
+ this.open = true;
3652
+ this.dispatchEvent(new CustomEvent("sp-open", { bubbles: true }));
3653
+ }
3654
+ close() {
3655
+ if (!this.open) {
3656
+ return;
3657
+ }
3658
+ this.open = false;
3659
+ this.dispatchEvent(new CustomEvent("sp-close", { bubbles: true }));
3660
+ }
3661
+ get wrapperClasses() {
3662
+ return getDropdownClasses();
3663
+ }
3664
+ get menuClasses() {
3665
+ return getDropdownMenuClasses({
3666
+ open: this.open ?? false,
3667
+ placement: this.placement
3668
+ });
3669
+ }
3670
+ get navLinkClasses() {
3671
+ return getNavLinkClasses();
3672
+ }
3673
+ renderLink() {
3674
+ return html`<a
3675
+ aria-label="${ifDefined(this.forwardedAriaLabel)}"
3676
+ class="${this.navLinkClasses}"
3677
+ href="${ifDefined(this.href)}"
3678
+ id="${ifDefined(this.id || void 0)}"
3679
+ title="${ifDefined(this.title || void 0)}"
3680
+ >${this.hasMenuContent ? this.menuContent : this.label}</a
3681
+ >`;
3682
+ }
3683
+ renderDropdown() {
3684
+ return html`<div
3685
+ class="${this.wrapperClasses}"
3686
+ id="${ifDefined(this.id || void 0)}"
3687
+ title="${ifDefined(this.title || void 0)}"
3688
+ >
3689
+ <button
3690
+ aria-expanded="${this.open ? "true" : "false"}"
3691
+ aria-haspopup="true"
3692
+ aria-label="${ifDefined(this.forwardedAriaLabel ?? this.label)}"
3693
+ class="${this.navLinkClasses}"
3694
+ data-sp-nav-item-trigger
3695
+ type="button"
3696
+ @click="${() => this.toggle()}"
3697
+ >
3698
+ ${this.hasTriggerContent ? this.triggerContent : this.label}
3699
+ </button>
3700
+ <div class="${this.menuClasses}" data-sp-nav-item-menu>
3701
+ ${this.hasMenuContent ? this.menuContent : nothing}
3702
+ </div>
3703
+ </div>`;
3704
+ }
3705
+ render() {
3706
+ return this.dropdown ? this.renderDropdown() : this.renderLink();
3707
+ }
3708
+ };
3709
+ SpectreNavItemElement.properties = {
3710
+ dropdown: { type: Boolean, reflect: true },
3711
+ href: { type: String },
3712
+ label: { type: String },
3713
+ open: { type: Boolean, reflect: true },
3714
+ placement: { type: String, reflect: true }
3715
+ };
3716
+ function defineSpectreNavItem(tagName = "sp-nav-item") {
3717
+ const existingElement = customElements.get(tagName);
3718
+ if (existingElement) {
3719
+ return existingElement;
3720
+ }
3721
+ customElements.define(tagName, SpectreNavItemElement);
3722
+ return SpectreNavItemElement;
3723
+ }
3453
3724
  var SpectreSidebarElement = class extends SpectreProjectableElement {
3454
3725
  constructor() {
3455
3726
  super(...arguments);
@@ -3926,6 +4197,9 @@ var SpectreTextElement = class extends SpectreProjectableElement {
3926
4197
  if (changedProperties.has("variant") && !isTextVariant(this.variant)) {
3927
4198
  this.variant = "default";
3928
4199
  }
4200
+ if (changedProperties.has("transform") && this.transform !== void 0 && !isTextTransform(this.transform)) {
4201
+ this.transform = void 0;
4202
+ }
3929
4203
  }
3930
4204
  get id() {
3931
4205
  return super.id;
@@ -3954,6 +4228,7 @@ var SpectreTextElement = class extends SpectreProjectableElement {
3954
4228
  const textClasses = getTextClasses({
3955
4229
  ...this.family !== void 0 && { family: this.family },
3956
4230
  size: this.size ?? "md",
4231
+ ...this.transform !== void 0 && { transform: this.transform },
3957
4232
  variant: this.variant ?? "default"
3958
4233
  });
3959
4234
  return html$1`<${tag}
@@ -3971,6 +4246,7 @@ SpectreTextElement.properties = {
3971
4246
  family: { type: String, reflect: true },
3972
4247
  level: { type: String, reflect: true },
3973
4248
  size: { type: String, reflect: true },
4249
+ transform: { type: String, reflect: true },
3974
4250
  variant: { type: String, reflect: true }
3975
4251
  };
3976
4252
  function defineSpectreText(tagName = "sp-text") {
@@ -4010,12 +4286,13 @@ function defineSpectreComponents() {
4010
4286
  defineSpectreFooter();
4011
4287
  defineSpectreModal();
4012
4288
  defineSpectreNav();
4289
+ defineSpectreNavItem();
4013
4290
  defineSpectreSidebar();
4014
4291
  defineSpectreToast();
4015
4292
  defineSpectreTooltip();
4016
4293
  defineSpectreText();
4017
4294
  }
4018
4295
 
4019
- export { SpectreAlertElement, SpectreAvatarElement, SpectreBadgeElement, SpectreButtonElement, SpectreCardElement, SpectreCheckboxElement, SpectreContainerElement, SpectreDropdownElement, SpectreFieldsetElement, SpectreFooterElement, SpectreGridElement, SpectreIconBoxElement, SpectreInputElement, SpectreLabelElement, SpectreModalElement, SpectreNavElement, 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, 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 };
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 };
4020
4297
  //# sourceMappingURL=index.js.map
4021
4298
  //# sourceMappingURL=index.js.map