@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.
- package/README.md +194 -1
- package/dist/alert.cjs.map +1 -1
- package/dist/alert.d.cts +2 -2
- package/dist/alert.d.ts +2 -2
- package/dist/alert.js.map +1 -1
- package/dist/avatar.cjs.map +1 -1
- package/dist/avatar.d.cts +2 -2
- package/dist/avatar.d.ts +2 -2
- package/dist/avatar.js.map +1 -1
- package/dist/badge.cjs.map +1 -1
- package/dist/badge.d.cts +2 -2
- package/dist/badge.d.ts +2 -2
- package/dist/badge.js.map +1 -1
- package/dist/button.cjs.map +1 -1
- package/dist/button.d.cts +2 -2
- package/dist/button.d.ts +2 -2
- package/dist/button.js.map +1 -1
- package/dist/card.cjs.map +1 -1
- package/dist/card.d.cts +2 -2
- package/dist/card.d.ts +2 -2
- package/dist/card.js.map +1 -1
- package/dist/container.cjs.map +1 -1
- package/dist/container.d.cts +2 -2
- package/dist/container.d.ts +2 -2
- package/dist/container.js.map +1 -1
- package/dist/dropdown.cjs +486 -0
- package/dist/dropdown.cjs.map +1 -0
- package/dist/dropdown.d.cts +69 -0
- package/dist/dropdown.d.ts +69 -0
- package/dist/dropdown.js +482 -0
- package/dist/dropdown.js.map +1 -0
- package/dist/footer.cjs +418 -0
- package/dist/footer.cjs.map +1 -0
- package/dist/footer.d.cts +39 -0
- package/dist/footer.d.ts +39 -0
- package/dist/footer.js +415 -0
- package/dist/footer.js.map +1 -0
- package/dist/{form-8KZeQRgr.d.cts → form-DgzRhNmg.d.cts} +7 -1
- package/dist/{form-8KZeQRgr.d.ts → form-DgzRhNmg.d.ts} +7 -1
- package/dist/grid.cjs.map +1 -1
- package/dist/grid.d.cts +2 -2
- package/dist/grid.d.ts +2 -2
- package/dist/grid.js.map +1 -1
- package/dist/icon-box.cjs.map +1 -1
- package/dist/icon-box.d.cts +2 -2
- package/dist/icon-box.d.ts +2 -2
- package/dist/icon-box.js.map +1 -1
- package/dist/index.cjs +993 -0
- package/dist/index.cjs.map +1 -1
- package/dist/index.d.cts +8 -1
- package/dist/index.d.ts +8 -1
- package/dist/index.js +978 -2
- package/dist/index.js.map +1 -1
- package/dist/input.cjs.map +1 -1
- package/dist/input.d.cts +2 -2
- package/dist/input.d.ts +2 -2
- package/dist/input.js.map +1 -1
- package/dist/modal.cjs +519 -0
- package/dist/modal.cjs.map +1 -0
- package/dist/modal.d.cts +52 -0
- package/dist/modal.d.ts +52 -0
- package/dist/modal.js +516 -0
- package/dist/modal.js.map +1 -0
- package/dist/nav.cjs +424 -0
- package/dist/nav.cjs.map +1 -0
- package/dist/nav.d.cts +45 -0
- package/dist/nav.d.ts +45 -0
- package/dist/nav.js +421 -0
- package/dist/nav.js.map +1 -0
- package/dist/rating.cjs.map +1 -1
- package/dist/rating.d.cts +2 -2
- package/dist/rating.d.ts +2 -2
- package/dist/rating.js.map +1 -1
- package/dist/select.cjs.map +1 -1
- package/dist/select.d.cts +1 -1
- package/dist/select.d.ts +1 -1
- package/dist/select.js.map +1 -1
- package/dist/sidebar.cjs +481 -0
- package/dist/sidebar.cjs.map +1 -0
- package/dist/sidebar.d.cts +50 -0
- package/dist/sidebar.d.ts +50 -0
- package/dist/sidebar.js +478 -0
- package/dist/sidebar.js.map +1 -0
- package/dist/spinner.cjs.map +1 -1
- package/dist/spinner.d.cts +2 -2
- package/dist/spinner.d.ts +2 -2
- package/dist/spinner.js.map +1 -1
- package/dist/stack.cjs.map +1 -1
- package/dist/stack.d.cts +2 -2
- package/dist/stack.d.ts +2 -2
- package/dist/stack.js.map +1 -1
- package/dist/tag.cjs.map +1 -1
- package/dist/tag.d.cts +2 -2
- package/dist/tag.d.ts +2 -2
- package/dist/tag.js.map +1 -1
- package/dist/testimonial.cjs.map +1 -1
- package/dist/testimonial.d.cts +2 -2
- package/dist/testimonial.d.ts +2 -2
- package/dist/testimonial.js.map +1 -1
- package/dist/textarea.cjs.map +1 -1
- package/dist/textarea.d.cts +1 -1
- package/dist/textarea.d.ts +1 -1
- package/dist/textarea.js.map +1 -1
- package/dist/toast.cjs +475 -0
- package/dist/toast.cjs.map +1 -0
- package/dist/toast.d.cts +68 -0
- package/dist/toast.d.ts +68 -0
- package/dist/toast.js +471 -0
- package/dist/toast.js.map +1 -0
- package/dist/tooltip.cjs +444 -0
- package/dist/tooltip.cjs.map +1 -0
- package/dist/tooltip.d.cts +50 -0
- package/dist/tooltip.d.ts +50 -0
- package/dist/tooltip.js +440 -0
- package/dist/tooltip.js.map +1 -0
- 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
|
+
☰
|
|
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
|