@phcdevworks/spectre-components 1.6.0 → 1.8.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 (116) hide show
  1. package/README.md +194 -1
  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.map +1 -1
  15. package/dist/button.d.cts +2 -2
  16. package/dist/button.d.ts +2 -2
  17. package/dist/button.js.map +1 -1
  18. package/dist/card.cjs.map +1 -1
  19. package/dist/card.d.cts +2 -2
  20. package/dist/card.d.ts +2 -2
  21. package/dist/card.js.map +1 -1
  22. package/dist/container.cjs.map +1 -1
  23. package/dist/container.d.cts +2 -2
  24. package/dist/container.d.ts +2 -2
  25. package/dist/container.js.map +1 -1
  26. package/dist/dropdown.cjs +486 -0
  27. package/dist/dropdown.cjs.map +1 -0
  28. package/dist/dropdown.d.cts +69 -0
  29. package/dist/dropdown.d.ts +69 -0
  30. package/dist/dropdown.js +482 -0
  31. package/dist/dropdown.js.map +1 -0
  32. package/dist/footer.cjs +418 -0
  33. package/dist/footer.cjs.map +1 -0
  34. package/dist/footer.d.cts +39 -0
  35. package/dist/footer.d.ts +39 -0
  36. package/dist/footer.js +415 -0
  37. package/dist/footer.js.map +1 -0
  38. package/dist/{form-8KZeQRgr.d.cts → form-DgzRhNmg.d.cts} +7 -1
  39. package/dist/{form-8KZeQRgr.d.ts → form-DgzRhNmg.d.ts} +7 -1
  40. package/dist/grid.cjs.map +1 -1
  41. package/dist/grid.d.cts +2 -2
  42. package/dist/grid.d.ts +2 -2
  43. package/dist/grid.js.map +1 -1
  44. package/dist/icon-box.cjs.map +1 -1
  45. package/dist/icon-box.d.cts +2 -2
  46. package/dist/icon-box.d.ts +2 -2
  47. package/dist/icon-box.js.map +1 -1
  48. package/dist/index.cjs +993 -0
  49. package/dist/index.cjs.map +1 -1
  50. package/dist/index.d.cts +8 -1
  51. package/dist/index.d.ts +8 -1
  52. package/dist/index.js +978 -2
  53. package/dist/index.js.map +1 -1
  54. package/dist/input.cjs.map +1 -1
  55. package/dist/input.d.cts +2 -2
  56. package/dist/input.d.ts +2 -2
  57. package/dist/input.js.map +1 -1
  58. package/dist/modal.cjs +519 -0
  59. package/dist/modal.cjs.map +1 -0
  60. package/dist/modal.d.cts +52 -0
  61. package/dist/modal.d.ts +52 -0
  62. package/dist/modal.js +516 -0
  63. package/dist/modal.js.map +1 -0
  64. package/dist/nav.cjs +424 -0
  65. package/dist/nav.cjs.map +1 -0
  66. package/dist/nav.d.cts +45 -0
  67. package/dist/nav.d.ts +45 -0
  68. package/dist/nav.js +421 -0
  69. package/dist/nav.js.map +1 -0
  70. package/dist/rating.cjs.map +1 -1
  71. package/dist/rating.d.cts +2 -2
  72. package/dist/rating.d.ts +2 -2
  73. package/dist/rating.js.map +1 -1
  74. package/dist/select.cjs.map +1 -1
  75. package/dist/select.d.cts +1 -1
  76. package/dist/select.d.ts +1 -1
  77. package/dist/select.js.map +1 -1
  78. package/dist/sidebar.cjs +481 -0
  79. package/dist/sidebar.cjs.map +1 -0
  80. package/dist/sidebar.d.cts +50 -0
  81. package/dist/sidebar.d.ts +50 -0
  82. package/dist/sidebar.js +478 -0
  83. package/dist/sidebar.js.map +1 -0
  84. package/dist/spinner.cjs.map +1 -1
  85. package/dist/spinner.d.cts +2 -2
  86. package/dist/spinner.d.ts +2 -2
  87. package/dist/spinner.js.map +1 -1
  88. package/dist/stack.cjs.map +1 -1
  89. package/dist/stack.d.cts +2 -2
  90. package/dist/stack.d.ts +2 -2
  91. package/dist/stack.js.map +1 -1
  92. package/dist/tag.cjs.map +1 -1
  93. package/dist/tag.d.cts +2 -2
  94. package/dist/tag.d.ts +2 -2
  95. package/dist/tag.js.map +1 -1
  96. package/dist/testimonial.cjs.map +1 -1
  97. package/dist/testimonial.d.cts +2 -2
  98. package/dist/testimonial.d.ts +2 -2
  99. package/dist/testimonial.js.map +1 -1
  100. package/dist/textarea.cjs.map +1 -1
  101. package/dist/textarea.d.cts +1 -1
  102. package/dist/textarea.d.ts +1 -1
  103. package/dist/textarea.js.map +1 -1
  104. package/dist/toast.cjs +475 -0
  105. package/dist/toast.cjs.map +1 -0
  106. package/dist/toast.d.cts +68 -0
  107. package/dist/toast.d.ts +68 -0
  108. package/dist/toast.js +471 -0
  109. package/dist/toast.js.map +1 -0
  110. package/dist/tooltip.cjs +444 -0
  111. package/dist/tooltip.cjs.map +1 -0
  112. package/dist/tooltip.d.cts +50 -0
  113. package/dist/tooltip.d.ts +50 -0
  114. package/dist/tooltip.js +440 -0
  115. package/dist/tooltip.js.map +1 -0
  116. package/package.json +43 -8
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, 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, getSidebarClasses, getSidebarToggleClasses, getSidebarBackdropClasses, getToastClasses, getToastIconClasses, getTooltipClasses, 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';
@@ -170,6 +170,37 @@ var spectreStackAligns = ["center", "stretch"];
170
170
  function isStackAlign(value) {
171
171
  return spectreStackAligns.includes(value);
172
172
  }
173
+ var spectreDropdownPlacements = [
174
+ "bottom-start",
175
+ "bottom-end",
176
+ "top-start",
177
+ "top-end"
178
+ ];
179
+ function isDropdownPlacement(value) {
180
+ return spectreDropdownPlacements.includes(
181
+ value
182
+ );
183
+ }
184
+ var spectreToastVariants = [
185
+ "info",
186
+ "success",
187
+ "warning",
188
+ "danger"
189
+ ];
190
+ function isToastVariant(value) {
191
+ return spectreToastVariants.includes(value);
192
+ }
193
+ var spectreTooltipPlacements = [
194
+ "top",
195
+ "bottom",
196
+ "left",
197
+ "right"
198
+ ];
199
+ function isTooltipPlacement(value) {
200
+ return spectreTooltipPlacements.includes(
201
+ value
202
+ );
203
+ }
173
204
  function normalizeInt(value, fallback, min = 0) {
174
205
  if (value == null || typeof value !== "number" || !Number.isInteger(value) || value < min) {
175
206
  return fallback;
@@ -2884,6 +2915,944 @@ function defineSpectreStack(tagName = "sp-stack") {
2884
2915
  customElements.define(tagName, SpectreStackElement);
2885
2916
  return SpectreStackElement;
2886
2917
  }
2918
+ var SpectreDropdownElement = class extends SpectreBaseElement {
2919
+ constructor() {
2920
+ super(...arguments);
2921
+ this.fullWidth = false;
2922
+ this.open = false;
2923
+ this.placement = "bottom-start";
2924
+ this.triggerLabel = "Toggle menu";
2925
+ this.triggerContent = [];
2926
+ this.menuContent = [];
2927
+ this.handleDocumentClick = (event) => {
2928
+ if (!this.open) {
2929
+ return;
2930
+ }
2931
+ if (!event.composedPath().includes(this)) {
2932
+ this.close();
2933
+ }
2934
+ };
2935
+ this.handleDocumentKeydown = (event) => {
2936
+ if (event.key === "Escape" && this.open) {
2937
+ this.close();
2938
+ this.triggerElement?.focus();
2939
+ }
2940
+ };
2941
+ }
2942
+ get id() {
2943
+ return super.id;
2944
+ }
2945
+ set id(value) {
2946
+ super.id = value;
2947
+ }
2948
+ get title() {
2949
+ return super.title;
2950
+ }
2951
+ set title(value) {
2952
+ super.title = value;
2953
+ }
2954
+ isInternalNode(node) {
2955
+ if (node.nodeType !== Node.ELEMENT_NODE) {
2956
+ return false;
2957
+ }
2958
+ const el = node;
2959
+ return el.hasAttribute("data-sp-dropdown-menu") || el.hasAttribute("data-sp-dropdown-trigger");
2960
+ }
2961
+ syncProjectedContent() {
2962
+ const nextTriggerContent = [];
2963
+ const nextMenuContent = [];
2964
+ this.childNodes.forEach((node) => {
2965
+ if (this.isInternalNode(node)) {
2966
+ return;
2967
+ }
2968
+ const isTriggerSlot = node.nodeType === Node.ELEMENT_NODE && node.getAttribute("slot") === "trigger";
2969
+ if (isTriggerSlot) {
2970
+ nextTriggerContent.push(node);
2971
+ } else {
2972
+ nextMenuContent.push(node);
2973
+ }
2974
+ });
2975
+ 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]);
2976
+ if (changed) {
2977
+ this.triggerContent = nextTriggerContent;
2978
+ this.menuContent = nextMenuContent;
2979
+ }
2980
+ return changed;
2981
+ }
2982
+ get hasTriggerContent() {
2983
+ return hasMeaningfulContent(this.triggerContent);
2984
+ }
2985
+ get hasMenuContent() {
2986
+ return hasMeaningfulContent(this.menuContent);
2987
+ }
2988
+ connectedCallback() {
2989
+ super.connectedCallback();
2990
+ this.syncProjectedContent();
2991
+ this.startContentObserver();
2992
+ document.addEventListener("click", this.handleDocumentClick);
2993
+ document.addEventListener("keydown", this.handleDocumentKeydown);
2994
+ }
2995
+ disconnectedCallback() {
2996
+ this.stopContentObserver();
2997
+ document.removeEventListener("click", this.handleDocumentClick);
2998
+ document.removeEventListener("keydown", this.handleDocumentKeydown);
2999
+ super.disconnectedCallback();
3000
+ }
3001
+ update(changedProperties) {
3002
+ this.stopContentObserver();
3003
+ super.update(changedProperties);
3004
+ this.startContentObserver();
3005
+ }
3006
+ startContentObserver() {
3007
+ if (this.contentObserver) {
3008
+ return;
3009
+ }
3010
+ this.contentObserver = new MutationObserver(() => {
3011
+ if (this.syncProjectedContent()) {
3012
+ this.requestUpdate();
3013
+ }
3014
+ });
3015
+ this.contentObserver.observe(this, { childList: true });
3016
+ }
3017
+ stopContentObserver() {
3018
+ this.contentObserver?.disconnect();
3019
+ this.contentObserver = void 0;
3020
+ }
3021
+ willUpdate(changedProperties) {
3022
+ if (changedProperties.has("fullWidth") && this.fullWidth == null) {
3023
+ this.fullWidth = false;
3024
+ }
3025
+ if (changedProperties.has("open") && this.open == null) {
3026
+ this.open = false;
3027
+ }
3028
+ if (changedProperties.has("placement") && (this.placement == null || !isDropdownPlacement(this.placement))) {
3029
+ this.placement = "bottom-start";
3030
+ }
3031
+ if (changedProperties.has("triggerLabel") && !this.triggerLabel) {
3032
+ this.triggerLabel = "Toggle menu";
3033
+ }
3034
+ }
3035
+ get triggerElement() {
3036
+ return this.querySelector("[data-sp-dropdown-trigger]");
3037
+ }
3038
+ toggle() {
3039
+ if (this.open) {
3040
+ this.close();
3041
+ } else {
3042
+ this.openMenu();
3043
+ }
3044
+ }
3045
+ openMenu() {
3046
+ if (this.open) {
3047
+ return;
3048
+ }
3049
+ this.open = true;
3050
+ this.dispatchEvent(new CustomEvent("sp-open", { bubbles: true }));
3051
+ }
3052
+ close() {
3053
+ if (!this.open) {
3054
+ return;
3055
+ }
3056
+ this.open = false;
3057
+ this.dispatchEvent(new CustomEvent("sp-close", { bubbles: true }));
3058
+ }
3059
+ get dropdownClasses() {
3060
+ return getDropdownClasses({ fullWidth: this.fullWidth ?? false });
3061
+ }
3062
+ get menuClasses() {
3063
+ return getDropdownMenuClasses({
3064
+ open: this.open ?? false,
3065
+ placement: this.placement
3066
+ });
3067
+ }
3068
+ render() {
3069
+ return html`<div
3070
+ class="${this.dropdownClasses}"
3071
+ id="${ifDefined(this.id || void 0)}"
3072
+ title="${ifDefined(this.title || void 0)}"
3073
+ >
3074
+ <button
3075
+ aria-expanded="${this.open ? "true" : "false"}"
3076
+ aria-haspopup="true"
3077
+ aria-label="${ifDefined(this.forwardedAriaLabel ?? this.triggerLabel)}"
3078
+ class="sp-dropdown__trigger"
3079
+ data-sp-dropdown-trigger
3080
+ type="button"
3081
+ @click="${() => this.toggle()}"
3082
+ >
3083
+ ${this.hasTriggerContent ? this.triggerContent : this.triggerLabel}
3084
+ </button>
3085
+ <div class="${this.menuClasses}" data-sp-dropdown-menu>
3086
+ ${this.hasMenuContent ? this.menuContent : nothing}
3087
+ </div>
3088
+ </div>`;
3089
+ }
3090
+ };
3091
+ SpectreDropdownElement.properties = {
3092
+ fullWidth: { attribute: "full-width", type: Boolean, reflect: true },
3093
+ open: { type: Boolean, reflect: true },
3094
+ placement: { type: String, reflect: true },
3095
+ triggerLabel: { attribute: "trigger-label", type: String }
3096
+ };
3097
+ function defineSpectreDropdown(tagName = "sp-dropdown") {
3098
+ const existingElement = customElements.get(tagName);
3099
+ if (existingElement) {
3100
+ return existingElement;
3101
+ }
3102
+ customElements.define(tagName, SpectreDropdownElement);
3103
+ return SpectreDropdownElement;
3104
+ }
3105
+ var SpectreFooterElement = class extends SpectreProjectableElement {
3106
+ constructor() {
3107
+ super(...arguments);
3108
+ this.bordered = false;
3109
+ this.fullWidth = false;
3110
+ }
3111
+ get id() {
3112
+ return super.id;
3113
+ }
3114
+ set id(value) {
3115
+ super.id = value;
3116
+ }
3117
+ get title() {
3118
+ return super.title;
3119
+ }
3120
+ set title(value) {
3121
+ super.title = value;
3122
+ }
3123
+ getContentContainer() {
3124
+ return this.querySelector("[data-sp-footer-native]");
3125
+ }
3126
+ isInternalNode(node) {
3127
+ if (node.nodeType !== Node.ELEMENT_NODE) {
3128
+ return false;
3129
+ }
3130
+ const el = node;
3131
+ return el.hasAttribute("data-sp-footer-native");
3132
+ }
3133
+ willUpdate(changedProperties) {
3134
+ if (changedProperties.has("bordered") && this.bordered == null) {
3135
+ this.bordered = false;
3136
+ }
3137
+ if (changedProperties.has("fullWidth") && this.fullWidth == null) {
3138
+ this.fullWidth = false;
3139
+ }
3140
+ }
3141
+ get footerClasses() {
3142
+ return getFooterClasses({
3143
+ bordered: this.bordered ?? false,
3144
+ fullWidth: this.fullWidth ?? false
3145
+ });
3146
+ }
3147
+ render() {
3148
+ return html`<footer
3149
+ aria-label="${ifDefined(this.forwardedAriaLabel)}"
3150
+ class="${this.footerClasses}"
3151
+ data-sp-footer-native
3152
+ id="${ifDefined(this.id || void 0)}"
3153
+ title="${ifDefined(this.title || void 0)}"
3154
+ >
3155
+ ${this.hasProjectedContent ? this.projectedContent : nothing}
3156
+ </footer>`;
3157
+ }
3158
+ };
3159
+ SpectreFooterElement.properties = {
3160
+ bordered: { type: Boolean, reflect: true },
3161
+ fullWidth: { attribute: "full-width", type: Boolean, reflect: true }
3162
+ };
3163
+ function defineSpectreFooter(tagName = "sp-footer") {
3164
+ const existingElement = customElements.get(tagName);
3165
+ if (existingElement) {
3166
+ return existingElement;
3167
+ }
3168
+ customElements.define(tagName, SpectreFooterElement);
3169
+ return SpectreFooterElement;
3170
+ }
3171
+ var FOCUSABLE_SELECTOR = [
3172
+ "a[href]",
3173
+ "button:not([disabled])",
3174
+ "input:not([disabled])",
3175
+ "select:not([disabled])",
3176
+ "textarea:not([disabled])",
3177
+ '[tabindex]:not([tabindex="-1"])'
3178
+ ].join(",");
3179
+ var SpectreModalElement = class extends SpectreProjectableElement {
3180
+ constructor() {
3181
+ super(...arguments);
3182
+ this.fullWidth = false;
3183
+ this.open = false;
3184
+ this.previouslyFocusedElement = null;
3185
+ this.handleDocumentKeydown = (event) => {
3186
+ if (!this.open) {
3187
+ return;
3188
+ }
3189
+ if (event.key === "Escape") {
3190
+ this.close();
3191
+ return;
3192
+ }
3193
+ if (event.key === "Tab") {
3194
+ this.trapFocus(event);
3195
+ }
3196
+ };
3197
+ }
3198
+ get id() {
3199
+ return super.id;
3200
+ }
3201
+ set id(value) {
3202
+ super.id = value;
3203
+ }
3204
+ get title() {
3205
+ return super.title;
3206
+ }
3207
+ set title(value) {
3208
+ super.title = value;
3209
+ }
3210
+ getContentContainer() {
3211
+ return this.querySelector("[data-sp-modal-native]");
3212
+ }
3213
+ isInternalNode(node) {
3214
+ if (node.nodeType !== Node.ELEMENT_NODE) {
3215
+ return false;
3216
+ }
3217
+ const el = node;
3218
+ return el.hasAttribute("data-sp-modal-native") || el.hasAttribute("data-sp-modal-overlay");
3219
+ }
3220
+ willUpdate(changedProperties) {
3221
+ if (changedProperties.has("fullWidth") && this.fullWidth == null) {
3222
+ this.fullWidth = false;
3223
+ }
3224
+ if (changedProperties.has("open") && this.open == null) {
3225
+ this.open = false;
3226
+ }
3227
+ }
3228
+ updated(changedProperties) {
3229
+ super.updated(changedProperties);
3230
+ if (!changedProperties.has("open")) {
3231
+ return;
3232
+ }
3233
+ if (this.open) {
3234
+ this.previouslyFocusedElement = document.activeElement;
3235
+ this.focusFirstElement();
3236
+ } else if (this.previouslyFocusedElement) {
3237
+ this.previouslyFocusedElement.focus();
3238
+ this.previouslyFocusedElement = null;
3239
+ }
3240
+ }
3241
+ connectedCallback() {
3242
+ super.connectedCallback();
3243
+ document.addEventListener("keydown", this.handleDocumentKeydown);
3244
+ }
3245
+ disconnectedCallback() {
3246
+ document.removeEventListener("keydown", this.handleDocumentKeydown);
3247
+ super.disconnectedCallback();
3248
+ }
3249
+ get modalElement() {
3250
+ return this.querySelector("[data-sp-modal-native]");
3251
+ }
3252
+ get focusableElements() {
3253
+ const modal = this.modalElement;
3254
+ if (!modal) {
3255
+ return [];
3256
+ }
3257
+ return Array.from(modal.querySelectorAll(FOCUSABLE_SELECTOR));
3258
+ }
3259
+ focusFirstElement() {
3260
+ const [first] = this.focusableElements;
3261
+ (first ?? this.modalElement)?.focus();
3262
+ }
3263
+ trapFocus(event) {
3264
+ const focusable = this.focusableElements;
3265
+ if (focusable.length === 0) {
3266
+ event.preventDefault();
3267
+ return;
3268
+ }
3269
+ const first = focusable[0];
3270
+ const last = focusable[focusable.length - 1];
3271
+ const active = document.activeElement;
3272
+ if (event.shiftKey && active === first) {
3273
+ event.preventDefault();
3274
+ last?.focus();
3275
+ } else if (!event.shiftKey && active === last) {
3276
+ event.preventDefault();
3277
+ first?.focus();
3278
+ }
3279
+ }
3280
+ close() {
3281
+ if (!this.open) {
3282
+ return;
3283
+ }
3284
+ this.open = false;
3285
+ this.dispatchEvent(new CustomEvent("sp-close", { bubbles: true }));
3286
+ }
3287
+ get overlayClasses() {
3288
+ return getModalOverlayClasses({ open: this.open ?? false });
3289
+ }
3290
+ get modalClasses() {
3291
+ return getModalClasses({
3292
+ open: this.open ?? false,
3293
+ fullWidth: this.fullWidth ?? false
3294
+ });
3295
+ }
3296
+ render() {
3297
+ const isHidden = !this.open;
3298
+ return html`<div
3299
+ aria-hidden="${ifDefined(isHidden ? "true" : void 0)}"
3300
+ class="${this.overlayClasses}"
3301
+ data-sp-modal-overlay
3302
+ @click="${(event) => {
3303
+ if (event.target === event.currentTarget) {
3304
+ this.close();
3305
+ }
3306
+ }}"
3307
+ >
3308
+ <div
3309
+ aria-describedby="${ifDefined(this.forwardedAriaDescribedBy)}"
3310
+ aria-hidden="${ifDefined(isHidden ? "true" : void 0)}"
3311
+ aria-label="${ifDefined(this.forwardedAriaLabel)}"
3312
+ aria-labelledby="${ifDefined(this.forwardedAriaLabelledBy)}"
3313
+ aria-modal="true"
3314
+ class="${this.modalClasses}"
3315
+ data-sp-modal-native
3316
+ id="${ifDefined(this.id || void 0)}"
3317
+ role="dialog"
3318
+ tabindex="-1"
3319
+ title="${ifDefined(this.title || void 0)}"
3320
+ >
3321
+ ${this.hasProjectedContent ? this.projectedContent : nothing}
3322
+ </div>
3323
+ </div>`;
3324
+ }
3325
+ };
3326
+ SpectreModalElement.properties = {
3327
+ fullWidth: { attribute: "full-width", type: Boolean, reflect: true },
3328
+ open: { type: Boolean, reflect: true }
3329
+ };
3330
+ function defineSpectreModal(tagName = "sp-modal") {
3331
+ const existingElement = customElements.get(tagName);
3332
+ if (existingElement) {
3333
+ return existingElement;
3334
+ }
3335
+ customElements.define(tagName, SpectreModalElement);
3336
+ return SpectreModalElement;
3337
+ }
3338
+ var SpectreNavElement = class extends SpectreProjectableElement {
3339
+ constructor() {
3340
+ super(...arguments);
3341
+ this.bordered = false;
3342
+ this.fullWidth = false;
3343
+ this.sticky = false;
3344
+ }
3345
+ get id() {
3346
+ return super.id;
3347
+ }
3348
+ set id(value) {
3349
+ super.id = value;
3350
+ }
3351
+ get title() {
3352
+ return super.title;
3353
+ }
3354
+ set title(value) {
3355
+ super.title = value;
3356
+ }
3357
+ getContentContainer() {
3358
+ return this.querySelector("[data-sp-nav-native]");
3359
+ }
3360
+ isInternalNode(node) {
3361
+ if (node.nodeType !== Node.ELEMENT_NODE) {
3362
+ return false;
3363
+ }
3364
+ const el = node;
3365
+ return el.hasAttribute("data-sp-nav-native");
3366
+ }
3367
+ willUpdate(changedProperties) {
3368
+ if (changedProperties.has("bordered") && this.bordered == null) {
3369
+ this.bordered = false;
3370
+ }
3371
+ if (changedProperties.has("fullWidth") && this.fullWidth == null) {
3372
+ this.fullWidth = false;
3373
+ }
3374
+ if (changedProperties.has("sticky") && this.sticky == null) {
3375
+ this.sticky = false;
3376
+ }
3377
+ }
3378
+ get navClasses() {
3379
+ return getNavClasses({
3380
+ bordered: this.bordered ?? false,
3381
+ fullWidth: this.fullWidth ?? false,
3382
+ sticky: this.sticky ?? false
3383
+ });
3384
+ }
3385
+ render() {
3386
+ return html`<nav
3387
+ aria-label="${ifDefined(this.forwardedAriaLabel)}"
3388
+ class="${this.navClasses}"
3389
+ data-sp-nav-native
3390
+ id="${ifDefined(this.id || void 0)}"
3391
+ title="${ifDefined(this.title || void 0)}"
3392
+ >
3393
+ ${this.hasProjectedContent ? this.projectedContent : nothing}
3394
+ </nav>`;
3395
+ }
3396
+ };
3397
+ SpectreNavElement.properties = {
3398
+ bordered: { type: Boolean, reflect: true },
3399
+ fullWidth: { attribute: "full-width", type: Boolean, reflect: true },
3400
+ sticky: { type: Boolean, reflect: true }
3401
+ };
3402
+ function defineSpectreNav(tagName = "sp-nav") {
3403
+ const existingElement = customElements.get(tagName);
3404
+ if (existingElement) {
3405
+ return existingElement;
3406
+ }
3407
+ customElements.define(tagName, SpectreNavElement);
3408
+ return SpectreNavElement;
3409
+ }
3410
+ var SpectreSidebarElement = class extends SpectreProjectableElement {
3411
+ constructor() {
3412
+ super(...arguments);
3413
+ this.bordered = false;
3414
+ this.open = false;
3415
+ this.toggleLabel = "Toggle sidebar";
3416
+ this.handleDocumentKeydown = (event) => {
3417
+ if (event.key === "Escape" && this.open) {
3418
+ this.close();
3419
+ }
3420
+ };
3421
+ }
3422
+ get id() {
3423
+ return super.id;
3424
+ }
3425
+ set id(value) {
3426
+ super.id = value;
3427
+ }
3428
+ get title() {
3429
+ return super.title;
3430
+ }
3431
+ set title(value) {
3432
+ super.title = value;
3433
+ }
3434
+ getContentContainer() {
3435
+ return this.querySelector("[data-sp-sidebar-native]");
3436
+ }
3437
+ isInternalNode(node) {
3438
+ if (node.nodeType !== Node.ELEMENT_NODE) {
3439
+ return false;
3440
+ }
3441
+ const el = node;
3442
+ return el.hasAttribute("data-sp-sidebar-native") || el.hasAttribute("data-sp-sidebar-toggle") || el.hasAttribute("data-sp-sidebar-backdrop");
3443
+ }
3444
+ willUpdate(changedProperties) {
3445
+ if (changedProperties.has("bordered") && this.bordered == null) {
3446
+ this.bordered = false;
3447
+ }
3448
+ if (changedProperties.has("open") && this.open == null) {
3449
+ this.open = false;
3450
+ }
3451
+ if (changedProperties.has("toggleLabel") && !this.toggleLabel) {
3452
+ this.toggleLabel = "Toggle sidebar";
3453
+ }
3454
+ if (changedProperties.has("open")) {
3455
+ HTMLElement.prototype.setAttribute.call(
3456
+ this,
3457
+ "data-sidebar-open",
3458
+ this.open ? "true" : "false"
3459
+ );
3460
+ }
3461
+ }
3462
+ connectedCallback() {
3463
+ super.connectedCallback();
3464
+ HTMLElement.prototype.setAttribute.call(
3465
+ this,
3466
+ "data-sidebar-open",
3467
+ this.open ? "true" : "false"
3468
+ );
3469
+ document.addEventListener("keydown", this.handleDocumentKeydown);
3470
+ }
3471
+ disconnectedCallback() {
3472
+ document.removeEventListener("keydown", this.handleDocumentKeydown);
3473
+ super.disconnectedCallback();
3474
+ }
3475
+ toggle() {
3476
+ if (this.open) {
3477
+ this.close();
3478
+ } else {
3479
+ this.openSidebar();
3480
+ }
3481
+ }
3482
+ openSidebar() {
3483
+ if (this.open) {
3484
+ return;
3485
+ }
3486
+ this.open = true;
3487
+ this.dispatchEvent(new CustomEvent("sp-open", { bubbles: true }));
3488
+ }
3489
+ close() {
3490
+ if (!this.open) {
3491
+ return;
3492
+ }
3493
+ this.open = false;
3494
+ this.dispatchEvent(new CustomEvent("sp-close", { bubbles: true }));
3495
+ }
3496
+ get sidebarClasses() {
3497
+ return getSidebarClasses({ bordered: this.bordered ?? false });
3498
+ }
3499
+ render() {
3500
+ return html`<button
3501
+ aria-expanded="${this.open ? "true" : "false"}"
3502
+ aria-label="${ifDefined(this.toggleLabel)}"
3503
+ class="${getSidebarToggleClasses()}"
3504
+ data-sp-sidebar-toggle
3505
+ type="button"
3506
+ @click="${() => this.toggle()}"
3507
+ >
3508
+ &#9776;
3509
+ </button>
3510
+ <div
3511
+ class="${getSidebarBackdropClasses()}"
3512
+ data-sp-sidebar-backdrop
3513
+ @click="${() => this.close()}"
3514
+ ></div>
3515
+ <aside
3516
+ aria-label="${ifDefined(this.forwardedAriaLabel)}"
3517
+ class="${this.sidebarClasses}"
3518
+ data-sp-sidebar-native
3519
+ id="${ifDefined(this.id || void 0)}"
3520
+ title="${ifDefined(this.title || void 0)}"
3521
+ >
3522
+ ${this.hasProjectedContent ? this.projectedContent : nothing}
3523
+ </aside>`;
3524
+ }
3525
+ };
3526
+ SpectreSidebarElement.properties = {
3527
+ bordered: { type: Boolean, reflect: true },
3528
+ open: { type: Boolean, reflect: false },
3529
+ toggleLabel: { attribute: "toggle-label", type: String }
3530
+ };
3531
+ function defineSpectreSidebar(tagName = "sp-sidebar") {
3532
+ const existingElement = customElements.get(tagName);
3533
+ if (existingElement) {
3534
+ return existingElement;
3535
+ }
3536
+ customElements.define(tagName, SpectreSidebarElement);
3537
+ return SpectreSidebarElement;
3538
+ }
3539
+ var SpectreToastElement = class extends SpectreBaseElement {
3540
+ constructor() {
3541
+ super(...arguments);
3542
+ this.dismissed = false;
3543
+ this.fullWidth = false;
3544
+ this.variant = "info";
3545
+ this.iconContent = [];
3546
+ this.bodyContent = [];
3547
+ }
3548
+ get id() {
3549
+ return super.id;
3550
+ }
3551
+ set id(value) {
3552
+ super.id = value;
3553
+ }
3554
+ get title() {
3555
+ return super.title;
3556
+ }
3557
+ set title(value) {
3558
+ super.title = value;
3559
+ }
3560
+ isInternalNode(node) {
3561
+ if (node.nodeType !== Node.ELEMENT_NODE) {
3562
+ return false;
3563
+ }
3564
+ const el = node;
3565
+ return el.hasAttribute("data-sp-toast-native") || el.hasAttribute("data-sp-toast-icon");
3566
+ }
3567
+ syncProjectedContent() {
3568
+ const nextIconContent = [];
3569
+ const nextBodyContent = [];
3570
+ this.childNodes.forEach((node) => {
3571
+ if (this.isInternalNode(node)) {
3572
+ return;
3573
+ }
3574
+ const isIconSlot = node.nodeType === Node.ELEMENT_NODE && node.getAttribute("slot") === "icon";
3575
+ if (isIconSlot) {
3576
+ nextIconContent.push(node);
3577
+ } else {
3578
+ nextBodyContent.push(node);
3579
+ }
3580
+ });
3581
+ const changed = nextIconContent.length !== this.iconContent.length || nextIconContent.some((n, i) => n !== this.iconContent[i]) || nextBodyContent.length !== this.bodyContent.length || nextBodyContent.some((n, i) => n !== this.bodyContent[i]);
3582
+ if (changed) {
3583
+ this.iconContent = nextIconContent;
3584
+ this.bodyContent = nextBodyContent;
3585
+ }
3586
+ return changed;
3587
+ }
3588
+ get hasIconContent() {
3589
+ return hasMeaningfulContent(this.iconContent);
3590
+ }
3591
+ get hasBodyContent() {
3592
+ return hasMeaningfulContent(this.bodyContent);
3593
+ }
3594
+ connectedCallback() {
3595
+ super.connectedCallback();
3596
+ this.syncProjectedContent();
3597
+ this.startContentObserver();
3598
+ }
3599
+ disconnectedCallback() {
3600
+ this.stopContentObserver();
3601
+ this.clearAutoDismissTimer();
3602
+ super.disconnectedCallback();
3603
+ }
3604
+ update(changedProperties) {
3605
+ this.stopContentObserver();
3606
+ super.update(changedProperties);
3607
+ this.startContentObserver();
3608
+ }
3609
+ startContentObserver() {
3610
+ if (this.contentObserver) {
3611
+ return;
3612
+ }
3613
+ this.contentObserver = new MutationObserver(() => {
3614
+ if (this.syncProjectedContent()) {
3615
+ this.requestUpdate();
3616
+ }
3617
+ });
3618
+ this.contentObserver.observe(this, { childList: true });
3619
+ }
3620
+ stopContentObserver() {
3621
+ this.contentObserver?.disconnect();
3622
+ this.contentObserver = void 0;
3623
+ }
3624
+ willUpdate(changedProperties) {
3625
+ if (changedProperties.has("dismissed") && this.dismissed == null) {
3626
+ this.dismissed = false;
3627
+ }
3628
+ if (changedProperties.has("fullWidth") && this.fullWidth == null) {
3629
+ this.fullWidth = false;
3630
+ }
3631
+ if (changedProperties.has("variant") && (this.variant == null || !isToastVariant(this.variant))) {
3632
+ this.variant = "info";
3633
+ }
3634
+ if (changedProperties.has("autoDismiss")) {
3635
+ this.autoDismiss = normalizeInt(this.autoDismiss, void 0, 0);
3636
+ }
3637
+ }
3638
+ updated(changedProperties) {
3639
+ super.updated(changedProperties);
3640
+ if (changedProperties.has("dismissed") || changedProperties.has("autoDismiss")) {
3641
+ this.clearAutoDismissTimer();
3642
+ if (!this.dismissed && this.autoDismiss) {
3643
+ this.autoDismissTimer = setTimeout(() => {
3644
+ this.dismiss();
3645
+ }, this.autoDismiss);
3646
+ }
3647
+ }
3648
+ }
3649
+ clearAutoDismissTimer() {
3650
+ if (this.autoDismissTimer) {
3651
+ clearTimeout(this.autoDismissTimer);
3652
+ this.autoDismissTimer = void 0;
3653
+ }
3654
+ }
3655
+ show() {
3656
+ if (!this.dismissed) {
3657
+ return;
3658
+ }
3659
+ this.dismissed = false;
3660
+ this.dispatchEvent(new CustomEvent("sp-show", { bubbles: true }));
3661
+ }
3662
+ dismiss() {
3663
+ if (this.dismissed) {
3664
+ return;
3665
+ }
3666
+ this.dismissed = true;
3667
+ this.dispatchEvent(new CustomEvent("sp-dismiss", { bubbles: true }));
3668
+ }
3669
+ get toastClasses() {
3670
+ return getToastClasses({
3671
+ variant: this.variant,
3672
+ dismissed: this.dismissed ?? false,
3673
+ fullWidth: this.fullWidth ?? false
3674
+ });
3675
+ }
3676
+ get iconClasses() {
3677
+ return getToastIconClasses({ variant: this.variant });
3678
+ }
3679
+ render() {
3680
+ return html`<div
3681
+ aria-atomic="true"
3682
+ aria-label="${ifDefined(this.forwardedAriaLabel)}"
3683
+ aria-live="polite"
3684
+ class="${this.toastClasses}"
3685
+ data-sp-toast-native
3686
+ id="${ifDefined(this.id || void 0)}"
3687
+ role="status"
3688
+ title="${ifDefined(this.title || void 0)}"
3689
+ >
3690
+ ${this.hasIconContent ? html`<div class="${this.iconClasses}" data-sp-toast-icon>
3691
+ ${this.iconContent}
3692
+ </div>` : nothing}
3693
+ ${this.hasBodyContent ? this.bodyContent : nothing}
3694
+ </div>`;
3695
+ }
3696
+ };
3697
+ SpectreToastElement.properties = {
3698
+ autoDismiss: { attribute: "auto-dismiss", type: Number },
3699
+ dismissed: { type: Boolean, reflect: true },
3700
+ fullWidth: { attribute: "full-width", type: Boolean, reflect: true },
3701
+ variant: { type: String, reflect: true }
3702
+ };
3703
+ function defineSpectreToast(tagName = "sp-toast") {
3704
+ const existingElement = customElements.get(tagName);
3705
+ if (existingElement) {
3706
+ return existingElement;
3707
+ }
3708
+ customElements.define(tagName, SpectreToastElement);
3709
+ return SpectreToastElement;
3710
+ }
3711
+ var SpectreTooltipElement = class extends SpectreBaseElement {
3712
+ constructor() {
3713
+ super(...arguments);
3714
+ this.placement = "top";
3715
+ this.visible = false;
3716
+ this.triggerContent = [];
3717
+ this.tooltipContent = [];
3718
+ }
3719
+ get id() {
3720
+ return super.id;
3721
+ }
3722
+ set id(value) {
3723
+ super.id = value;
3724
+ }
3725
+ get title() {
3726
+ return super.title;
3727
+ }
3728
+ set title(value) {
3729
+ super.title = value;
3730
+ }
3731
+ isInternalNode(node) {
3732
+ if (node.nodeType !== Node.ELEMENT_NODE) {
3733
+ return false;
3734
+ }
3735
+ const el = node;
3736
+ return el.hasAttribute("data-sp-tooltip-native") || el.hasAttribute("data-sp-tooltip-trigger");
3737
+ }
3738
+ syncProjectedContent() {
3739
+ const nextTooltipContent = [];
3740
+ const nextTriggerContent = [];
3741
+ this.childNodes.forEach((node) => {
3742
+ if (this.isInternalNode(node)) {
3743
+ return;
3744
+ }
3745
+ const isTooltipSlot = node.nodeType === Node.ELEMENT_NODE && node.getAttribute("slot") === "tooltip";
3746
+ if (isTooltipSlot) {
3747
+ nextTooltipContent.push(node);
3748
+ } else {
3749
+ nextTriggerContent.push(node);
3750
+ }
3751
+ });
3752
+ const changed = nextTooltipContent.length !== this.tooltipContent.length || nextTooltipContent.some((n, i) => n !== this.tooltipContent[i]) || nextTriggerContent.length !== this.triggerContent.length || nextTriggerContent.some((n, i) => n !== this.triggerContent[i]);
3753
+ if (changed) {
3754
+ this.tooltipContent = nextTooltipContent;
3755
+ this.triggerContent = nextTriggerContent;
3756
+ }
3757
+ return changed;
3758
+ }
3759
+ get hasTooltipContent() {
3760
+ return hasMeaningfulContent(this.tooltipContent);
3761
+ }
3762
+ connectedCallback() {
3763
+ var _a, _b;
3764
+ super.connectedCallback();
3765
+ this.syncProjectedContent();
3766
+ this.startContentObserver();
3767
+ (_a = this.style).position || (_a.position = "relative");
3768
+ (_b = this.style).display || (_b.display = "inline-block");
3769
+ }
3770
+ disconnectedCallback() {
3771
+ this.stopContentObserver();
3772
+ super.disconnectedCallback();
3773
+ }
3774
+ update(changedProperties) {
3775
+ this.stopContentObserver();
3776
+ super.update(changedProperties);
3777
+ this.startContentObserver();
3778
+ }
3779
+ startContentObserver() {
3780
+ if (this.contentObserver) {
3781
+ return;
3782
+ }
3783
+ this.contentObserver = new MutationObserver(() => {
3784
+ if (this.syncProjectedContent()) {
3785
+ this.requestUpdate();
3786
+ }
3787
+ });
3788
+ this.contentObserver.observe(this, { childList: true });
3789
+ }
3790
+ stopContentObserver() {
3791
+ this.contentObserver?.disconnect();
3792
+ this.contentObserver = void 0;
3793
+ }
3794
+ willUpdate(changedProperties) {
3795
+ if (changedProperties.has("placement") && (this.placement == null || !isTooltipPlacement(this.placement))) {
3796
+ this.placement = "top";
3797
+ }
3798
+ if (changedProperties.has("visible") && this.visible == null) {
3799
+ this.visible = false;
3800
+ }
3801
+ }
3802
+ show() {
3803
+ if (this.visible) {
3804
+ return;
3805
+ }
3806
+ this.visible = true;
3807
+ this.dispatchEvent(new CustomEvent("sp-show", { bubbles: true }));
3808
+ }
3809
+ hide() {
3810
+ if (!this.visible) {
3811
+ return;
3812
+ }
3813
+ this.visible = false;
3814
+ this.dispatchEvent(new CustomEvent("sp-hide", { bubbles: true }));
3815
+ }
3816
+ get tooltipClasses() {
3817
+ return getTooltipClasses({
3818
+ placement: this.placement,
3819
+ visible: this.visible ?? false
3820
+ });
3821
+ }
3822
+ render() {
3823
+ return html`<span
3824
+ data-sp-tooltip-trigger
3825
+ @focusin="${() => this.show()}"
3826
+ @focusout="${() => this.hide()}"
3827
+ @mouseenter="${() => this.show()}"
3828
+ @mouseleave="${() => this.hide()}"
3829
+ >
3830
+ ${this.triggerContent}
3831
+ </span>
3832
+ <span
3833
+ aria-label="${ifDefined(this.forwardedAriaLabel)}"
3834
+ class="${this.tooltipClasses}"
3835
+ data-sp-tooltip-native
3836
+ id="${ifDefined(this.id || void 0)}"
3837
+ role="tooltip"
3838
+ title="${ifDefined(this.title || void 0)}"
3839
+ >
3840
+ ${this.hasTooltipContent ? this.tooltipContent : nothing}
3841
+ </span>`;
3842
+ }
3843
+ };
3844
+ SpectreTooltipElement.properties = {
3845
+ placement: { type: String, reflect: true },
3846
+ visible: { type: Boolean, reflect: true }
3847
+ };
3848
+ function defineSpectreTooltip(tagName = "sp-tooltip") {
3849
+ const existingElement = customElements.get(tagName);
3850
+ if (existingElement) {
3851
+ return existingElement;
3852
+ }
3853
+ customElements.define(tagName, SpectreTooltipElement);
3854
+ return SpectreTooltipElement;
3855
+ }
2887
3856
 
2888
3857
  // src/index.ts
2889
3858
  function defineSpectreComponents() {
@@ -2909,8 +3878,15 @@ function defineSpectreComponents() {
2909
3878
  defineSpectreGrid();
2910
3879
  defineSpectreSection();
2911
3880
  defineSpectreStack();
3881
+ defineSpectreDropdown();
3882
+ defineSpectreFooter();
3883
+ defineSpectreModal();
3884
+ defineSpectreNav();
3885
+ defineSpectreSidebar();
3886
+ defineSpectreToast();
3887
+ defineSpectreTooltip();
2912
3888
  }
2913
3889
 
2914
- export { SpectreAlertElement, SpectreAvatarElement, SpectreBadgeElement, SpectreButtonElement, SpectreCardElement, SpectreCheckboxElement, SpectreContainerElement, SpectreFieldsetElement, SpectreGridElement, SpectreIconBoxElement, SpectreInputElement, SpectreLabelElement, SpectrePricingCardElement, SpectreRadioElement, SpectreRatingElement, SpectreSectionElement, SpectreSelectElement, SpectreSpinnerElement, SpectreStackElement, SpectreTagElement, SpectreTestimonialElement, SpectreTextareaElement, defineSpectreAlert, defineSpectreAvatar, defineSpectreBadge, defineSpectreButton, defineSpectreCard, defineSpectreCheckbox, defineSpectreComponents, defineSpectreContainer, defineSpectreFieldset, defineSpectreGrid, defineSpectreIconBox, defineSpectreInput, defineSpectreLabel, defineSpectrePricingCard, defineSpectreRadio, defineSpectreRating, defineSpectreSection, defineSpectreSelect, defineSpectreSpinner, defineSpectreStack, defineSpectreTag, defineSpectreTestimonial, defineSpectreTextarea, spectreInputSizes as spectreAlertSizes, spectreAlertVariants, spectreAvatarShapes, spectreAvatarSizes, spectreInputSizes as spectreBadgeSizes, spectreBadgeVariants, spectreInputSizes as spectreButtonSizes, spectreButtonTypes, spectreButtonVariants, spectreCardVariants, spectreContainerMaxWidths, spectreGridColumns, spectreGridGaps, spectreInputSizes as spectreIconBoxSizes, spectreIconBoxVariants, spectreInputSizes, spectreInputTypes, spectreInputSizes as spectreRatingSizes, spectreInputSizes as spectreSpinnerSizes, spectreSpinnerVariants, spectreStackAligns, spectreStackBases, spectreStackDirections, spectreInputSizes as spectreTagSizes, spectreTagVariants, spectreTestimonialVariants };
3890
+ 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, 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, 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, spectreToastVariants, spectreTooltipPlacements };
2915
3891
  //# sourceMappingURL=index.js.map
2916
3892
  //# sourceMappingURL=index.js.map