@phcdevworks/spectre-components 1.11.0 → 1.12.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 +44 -1
- package/dist/index.cjs +205 -0
- package/dist/index.cjs.map +1 -1
- package/dist/index.d.cts +1 -0
- package/dist/index.d.ts +1 -0
- package/dist/index.js +205 -2
- package/dist/index.js.map +1 -1
- package/dist/nav-item.cjs +500 -0
- package/dist/nav-item.cjs.map +1 -0
- package/dist/nav-item.d.cts +74 -0
- package/dist/nav-item.d.ts +74 -0
- package/dist/nav-item.js +497 -0
- package/dist/nav-item.js.map +1 -0
- package/package.json +6 -1
package/dist/index.d.cts
CHANGED
|
@@ -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
|
@@ -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';
|
|
@@ -3450,6 +3450,208 @@ function defineSpectreNav(tagName = "sp-nav") {
|
|
|
3450
3450
|
customElements.define(tagName, SpectreNavElement);
|
|
3451
3451
|
return SpectreNavElement;
|
|
3452
3452
|
}
|
|
3453
|
+
var SpectreNavItemElement = class extends SpectreBaseElement {
|
|
3454
|
+
constructor() {
|
|
3455
|
+
super(...arguments);
|
|
3456
|
+
this.dropdown = false;
|
|
3457
|
+
this.href = void 0;
|
|
3458
|
+
this.label = void 0;
|
|
3459
|
+
this.open = false;
|
|
3460
|
+
this.placement = "bottom-start";
|
|
3461
|
+
this.triggerContent = [];
|
|
3462
|
+
this.menuContent = [];
|
|
3463
|
+
this.handleDocumentClick = (event) => {
|
|
3464
|
+
if (!this.open) {
|
|
3465
|
+
return;
|
|
3466
|
+
}
|
|
3467
|
+
if (!event.composedPath().includes(this)) {
|
|
3468
|
+
this.close();
|
|
3469
|
+
}
|
|
3470
|
+
};
|
|
3471
|
+
this.handleDocumentKeydown = (event) => {
|
|
3472
|
+
if (event.key === "Escape" && this.open) {
|
|
3473
|
+
this.close();
|
|
3474
|
+
this.triggerElement?.focus();
|
|
3475
|
+
}
|
|
3476
|
+
};
|
|
3477
|
+
}
|
|
3478
|
+
get id() {
|
|
3479
|
+
return super.id;
|
|
3480
|
+
}
|
|
3481
|
+
set id(value) {
|
|
3482
|
+
super.id = value;
|
|
3483
|
+
}
|
|
3484
|
+
get title() {
|
|
3485
|
+
return super.title;
|
|
3486
|
+
}
|
|
3487
|
+
set title(value) {
|
|
3488
|
+
super.title = value;
|
|
3489
|
+
}
|
|
3490
|
+
isInternalNode(node) {
|
|
3491
|
+
if (node.nodeType !== Node.ELEMENT_NODE) {
|
|
3492
|
+
return false;
|
|
3493
|
+
}
|
|
3494
|
+
const el = node;
|
|
3495
|
+
return el.hasAttribute("data-sp-nav-item-menu") || el.hasAttribute("data-sp-nav-item-trigger");
|
|
3496
|
+
}
|
|
3497
|
+
syncProjectedContent() {
|
|
3498
|
+
const nextTriggerContent = [];
|
|
3499
|
+
const nextMenuContent = [];
|
|
3500
|
+
this.childNodes.forEach((node) => {
|
|
3501
|
+
if (this.isInternalNode(node)) {
|
|
3502
|
+
return;
|
|
3503
|
+
}
|
|
3504
|
+
const isTriggerSlot = node.nodeType === Node.ELEMENT_NODE && node.getAttribute("slot") === "trigger";
|
|
3505
|
+
if (isTriggerSlot) {
|
|
3506
|
+
nextTriggerContent.push(node);
|
|
3507
|
+
} else {
|
|
3508
|
+
nextMenuContent.push(node);
|
|
3509
|
+
}
|
|
3510
|
+
});
|
|
3511
|
+
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]);
|
|
3512
|
+
if (changed) {
|
|
3513
|
+
this.triggerContent = nextTriggerContent;
|
|
3514
|
+
this.menuContent = nextMenuContent;
|
|
3515
|
+
}
|
|
3516
|
+
return changed;
|
|
3517
|
+
}
|
|
3518
|
+
get hasTriggerContent() {
|
|
3519
|
+
return hasMeaningfulContent(this.triggerContent);
|
|
3520
|
+
}
|
|
3521
|
+
get hasMenuContent() {
|
|
3522
|
+
return hasMeaningfulContent(this.menuContent);
|
|
3523
|
+
}
|
|
3524
|
+
connectedCallback() {
|
|
3525
|
+
super.connectedCallback();
|
|
3526
|
+
this.syncProjectedContent();
|
|
3527
|
+
this.startContentObserver();
|
|
3528
|
+
document.addEventListener("click", this.handleDocumentClick);
|
|
3529
|
+
document.addEventListener("keydown", this.handleDocumentKeydown);
|
|
3530
|
+
}
|
|
3531
|
+
disconnectedCallback() {
|
|
3532
|
+
this.stopContentObserver();
|
|
3533
|
+
document.removeEventListener("click", this.handleDocumentClick);
|
|
3534
|
+
document.removeEventListener("keydown", this.handleDocumentKeydown);
|
|
3535
|
+
super.disconnectedCallback();
|
|
3536
|
+
}
|
|
3537
|
+
update(changedProperties) {
|
|
3538
|
+
this.stopContentObserver();
|
|
3539
|
+
super.update(changedProperties);
|
|
3540
|
+
this.startContentObserver();
|
|
3541
|
+
}
|
|
3542
|
+
startContentObserver() {
|
|
3543
|
+
if (this.contentObserver) {
|
|
3544
|
+
return;
|
|
3545
|
+
}
|
|
3546
|
+
this.contentObserver = new MutationObserver(() => {
|
|
3547
|
+
if (this.syncProjectedContent()) {
|
|
3548
|
+
this.requestUpdate();
|
|
3549
|
+
}
|
|
3550
|
+
});
|
|
3551
|
+
this.contentObserver.observe(this, { childList: true });
|
|
3552
|
+
}
|
|
3553
|
+
stopContentObserver() {
|
|
3554
|
+
this.contentObserver?.disconnect();
|
|
3555
|
+
this.contentObserver = void 0;
|
|
3556
|
+
}
|
|
3557
|
+
willUpdate(changedProperties) {
|
|
3558
|
+
if (changedProperties.has("dropdown") && this.dropdown == null) {
|
|
3559
|
+
this.dropdown = false;
|
|
3560
|
+
}
|
|
3561
|
+
if (changedProperties.has("open") && this.open == null) {
|
|
3562
|
+
this.open = false;
|
|
3563
|
+
}
|
|
3564
|
+
if (changedProperties.has("placement") && (this.placement == null || !isDropdownPlacement(this.placement))) {
|
|
3565
|
+
this.placement = "bottom-start";
|
|
3566
|
+
}
|
|
3567
|
+
}
|
|
3568
|
+
get triggerElement() {
|
|
3569
|
+
return this.querySelector("[data-sp-nav-item-trigger]");
|
|
3570
|
+
}
|
|
3571
|
+
toggle() {
|
|
3572
|
+
if (this.open) {
|
|
3573
|
+
this.close();
|
|
3574
|
+
} else {
|
|
3575
|
+
this.openMenu();
|
|
3576
|
+
}
|
|
3577
|
+
}
|
|
3578
|
+
openMenu() {
|
|
3579
|
+
if (this.open) {
|
|
3580
|
+
return;
|
|
3581
|
+
}
|
|
3582
|
+
this.open = true;
|
|
3583
|
+
this.dispatchEvent(new CustomEvent("sp-open", { bubbles: true }));
|
|
3584
|
+
}
|
|
3585
|
+
close() {
|
|
3586
|
+
if (!this.open) {
|
|
3587
|
+
return;
|
|
3588
|
+
}
|
|
3589
|
+
this.open = false;
|
|
3590
|
+
this.dispatchEvent(new CustomEvent("sp-close", { bubbles: true }));
|
|
3591
|
+
}
|
|
3592
|
+
get wrapperClasses() {
|
|
3593
|
+
return getDropdownClasses();
|
|
3594
|
+
}
|
|
3595
|
+
get menuClasses() {
|
|
3596
|
+
return getDropdownMenuClasses({
|
|
3597
|
+
open: this.open ?? false,
|
|
3598
|
+
placement: this.placement
|
|
3599
|
+
});
|
|
3600
|
+
}
|
|
3601
|
+
get navLinkClasses() {
|
|
3602
|
+
return getNavLinkClasses();
|
|
3603
|
+
}
|
|
3604
|
+
renderLink() {
|
|
3605
|
+
return html`<a
|
|
3606
|
+
aria-label="${ifDefined(this.forwardedAriaLabel)}"
|
|
3607
|
+
class="${this.navLinkClasses}"
|
|
3608
|
+
href="${ifDefined(this.href)}"
|
|
3609
|
+
id="${ifDefined(this.id || void 0)}"
|
|
3610
|
+
title="${ifDefined(this.title || void 0)}"
|
|
3611
|
+
>${this.hasMenuContent ? this.menuContent : this.label}</a
|
|
3612
|
+
>`;
|
|
3613
|
+
}
|
|
3614
|
+
renderDropdown() {
|
|
3615
|
+
return html`<div
|
|
3616
|
+
class="${this.wrapperClasses}"
|
|
3617
|
+
id="${ifDefined(this.id || void 0)}"
|
|
3618
|
+
title="${ifDefined(this.title || void 0)}"
|
|
3619
|
+
>
|
|
3620
|
+
<button
|
|
3621
|
+
aria-expanded="${this.open ? "true" : "false"}"
|
|
3622
|
+
aria-haspopup="true"
|
|
3623
|
+
aria-label="${ifDefined(this.forwardedAriaLabel ?? this.label)}"
|
|
3624
|
+
class="${this.navLinkClasses}"
|
|
3625
|
+
data-sp-nav-item-trigger
|
|
3626
|
+
type="button"
|
|
3627
|
+
@click="${() => this.toggle()}"
|
|
3628
|
+
>
|
|
3629
|
+
${this.hasTriggerContent ? this.triggerContent : this.label}
|
|
3630
|
+
</button>
|
|
3631
|
+
<div class="${this.menuClasses}" data-sp-nav-item-menu>
|
|
3632
|
+
${this.hasMenuContent ? this.menuContent : nothing}
|
|
3633
|
+
</div>
|
|
3634
|
+
</div>`;
|
|
3635
|
+
}
|
|
3636
|
+
render() {
|
|
3637
|
+
return this.dropdown ? this.renderDropdown() : this.renderLink();
|
|
3638
|
+
}
|
|
3639
|
+
};
|
|
3640
|
+
SpectreNavItemElement.properties = {
|
|
3641
|
+
dropdown: { type: Boolean, reflect: true },
|
|
3642
|
+
href: { type: String },
|
|
3643
|
+
label: { type: String },
|
|
3644
|
+
open: { type: Boolean, reflect: true },
|
|
3645
|
+
placement: { type: String, reflect: true }
|
|
3646
|
+
};
|
|
3647
|
+
function defineSpectreNavItem(tagName = "sp-nav-item") {
|
|
3648
|
+
const existingElement = customElements.get(tagName);
|
|
3649
|
+
if (existingElement) {
|
|
3650
|
+
return existingElement;
|
|
3651
|
+
}
|
|
3652
|
+
customElements.define(tagName, SpectreNavItemElement);
|
|
3653
|
+
return SpectreNavItemElement;
|
|
3654
|
+
}
|
|
3453
3655
|
var SpectreSidebarElement = class extends SpectreProjectableElement {
|
|
3454
3656
|
constructor() {
|
|
3455
3657
|
super(...arguments);
|
|
@@ -4010,12 +4212,13 @@ function defineSpectreComponents() {
|
|
|
4010
4212
|
defineSpectreFooter();
|
|
4011
4213
|
defineSpectreModal();
|
|
4012
4214
|
defineSpectreNav();
|
|
4215
|
+
defineSpectreNavItem();
|
|
4013
4216
|
defineSpectreSidebar();
|
|
4014
4217
|
defineSpectreToast();
|
|
4015
4218
|
defineSpectreTooltip();
|
|
4016
4219
|
defineSpectreText();
|
|
4017
4220
|
}
|
|
4018
4221
|
|
|
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 };
|
|
4222
|
+
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
4223
|
//# sourceMappingURL=index.js.map
|
|
4021
4224
|
//# sourceMappingURL=index.js.map
|