wj-elements 0.7.5 → 0.7.7
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/dist/custom-elements.json +7471 -7345
- package/dist/packages/translations/en-gb.d.ts +1 -0
- package/dist/packages/translations/sk-sk.d.ts +1 -0
- package/dist/packages/wje-button/button.element.d.ts +14 -1
- package/dist/packages/wje-img/img.element.d.ts +4 -4
- package/dist/packages/wje-pagination/pagination.element.d.ts +21 -0
- package/dist/web-types.json +611 -597
- package/dist/wje-breadcrumb.js +7 -3
- package/dist/wje-breadcrumb.js.map +1 -1
- package/dist/wje-button.js +54 -9
- package/dist/wje-button.js.map +1 -1
- package/dist/wje-chip.js +1 -1
- package/dist/wje-chip.js.map +1 -1
- package/dist/wje-dialog.js +1 -1
- package/dist/wje-dialog.js.map +1 -1
- package/dist/wje-file-upload-item.js +2 -2
- package/dist/wje-file-upload-item.js.map +1 -1
- package/dist/wje-file-upload.js +2 -2
- package/dist/wje-file-upload.js.map +1 -1
- package/dist/wje-img.js +4 -3
- package/dist/wje-img.js.map +1 -1
- package/dist/wje-master.js +2 -0
- package/dist/wje-master.js.map +1 -1
- package/dist/wje-pagination.js +33 -7
- package/dist/wje-pagination.js.map +1 -1
- package/dist/wje-toast.js +1 -1
- package/dist/wje-toast.js.map +1 -1
- package/dist/wje-toolbar-action.js +1 -1
- package/dist/wje-toolbar-action.js.map +1 -1
- package/package.json +2 -1
package/dist/wje-breadcrumb.js
CHANGED
|
@@ -513,7 +513,7 @@ class Breadcrumb extends WJElement {
|
|
|
513
513
|
const trigger = document.createElement("wje-button");
|
|
514
514
|
trigger.setAttribute("slot", "trigger");
|
|
515
515
|
trigger.setAttribute("fill", "link");
|
|
516
|
-
trigger.setAttribute("
|
|
516
|
+
trigger.setAttribute("label", ariaLabel);
|
|
517
517
|
trigger.classList.add("breadcrumb-mobile", "breadcrumb-mobile__menu", className);
|
|
518
518
|
const iconElement = document.createElement("wje-icon");
|
|
519
519
|
iconElement.setAttribute("name", icon);
|
|
@@ -651,7 +651,11 @@ class Breadcrumb extends WJElement {
|
|
|
651
651
|
if (customTrigger) {
|
|
652
652
|
const trigger = customTrigger.cloneNode(true);
|
|
653
653
|
trigger.setAttribute("slot", "trigger");
|
|
654
|
-
if (
|
|
654
|
+
if (trigger.localName === "wje-button") {
|
|
655
|
+
if (!trigger.hasAttribute("label") && !trigger.hasAttribute("aria-label")) {
|
|
656
|
+
trigger.setAttribute("label", "Show breadcrumb menu");
|
|
657
|
+
}
|
|
658
|
+
} else if (!trigger.hasAttribute("aria-label")) {
|
|
655
659
|
trigger.setAttribute("aria-label", "Show breadcrumb menu");
|
|
656
660
|
}
|
|
657
661
|
return trigger;
|
|
@@ -660,7 +664,7 @@ class Breadcrumb extends WJElement {
|
|
|
660
664
|
let button = document.createElement("wje-button");
|
|
661
665
|
button.setAttribute("slot", "trigger");
|
|
662
666
|
button.setAttribute("fill", "link");
|
|
663
|
-
button.setAttribute("
|
|
667
|
+
button.setAttribute("label", "Show more breadcrumbs");
|
|
664
668
|
button.innerHTML = `<wje-icon name="${this.getCollapsedDropdownIcon(isBreakpointMenuIndicator)}"></wje-icon>`;
|
|
665
669
|
return button;
|
|
666
670
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"wje-breadcrumb.js","sources":["../packages/wje-breadcrumb/breadcrumb.element.js","../packages/wje-breadcrumb/breadcrumb.js"],"sourcesContent":["import { default as WJElement, event, WjElementUtils } from '../wje-element/element.js';\nimport styles from './styles/styles.css?inline';\n\nconst MOBILE_COLLAPSED_VARIANTS = new Set(['TEXT', 'BACK', 'PARENT-TITLE', 'MENU-TITLE', 'SHEET']);\n\n/**\n * @summary This class represents a Breadcrumb element, extending the WJElement class. It provides a navigational aid in user interfaces, displaying the current location within a hierarchy.\n * @documentation https://elements.webjet.sk/components/breadcrumb\n * @status stable\n * @augments WJElement\n * @slot - The main content of the breadcrumb.\n * @slot start - Slot for content at the start of the breadcrumb.\n * @slot end - Slot for content at the end of the breadcrumb.\n * @slot separator - Slot for a custom separator between breadcrumb items.\n * @csspart native - The native wrapper of the breadcrumb component.\n * @csspart separator - The separator between breadcrumb items.\n * @cssproperty [--wje-breadcrumb-a=var(--wje-color-contrast-8)] - The color of the breadcrumb text.\n * @cssproperty [--wje-breadcrumb-a-hover=var(--wje-color-contrast-6)] - The color of the breadcrumb separator line.\n * @cssproperty [--wje-breadcrumb-line-height=1.5] - Controls the vertical rhythm of breadcrumb text.\n * @cssproperty [--wje-breadcrumb-native-line-height=var(--wje-breadcrumb-line-height)] - Controls the line height of the native breadcrumb wrapper.\n * @cssproperty [--wje-breadcrumb-native-margin=0] - Sets outer spacing around the native breadcrumb wrapper.\n * @cssproperty [--wje-breadcrumb-native-padding=0.25rem 0.75rem] - Sets inner spacing inside the native breadcrumb wrapper.\n * @cssproperty [--wje-breadcrumb-margin=var(--wje-breadcrumb-native-margin)] - Backwards-compatible alias for native breadcrumb margin.\n * @cssproperty [--wje-breadcrumb-padding=var(--wje-breadcrumb-native-padding)] - Backwards-compatible alias for native breadcrumb padding.\n * @tag wje-breadcrumb\n */\nexport default class Breadcrumb extends WJElement {\n /**\n * Breadcrumb constructor method.\n */\n constructor() {\n super();\n\n this._showSeparator = true;\n this._showCollapsedIndicator = false;\n this.handleNativeClick = (e) => this.handleDisabledNativeClick(e);\n }\n\n /**\n * Sets the breadcrumb link URL.\n * @param {string|null} value Link URL.\n */\n set href(value) {\n if (value === null || value === undefined) this.removeAttribute('href');\n else this.setAttribute('href', value);\n }\n\n /**\n * Gets the breadcrumb link URL.\n * @returns {string|null}\n */\n get href() {\n return this.getAttribute('href');\n }\n\n /**\n * Sets the disabled state.\n * @param {boolean} value Disabled state.\n */\n set disabled(value) {\n if (value === true || value === '' || value === 'true' || value === 1 || value === '1') {\n this.setAttribute('disabled', '');\n } else {\n this.removeAttribute('disabled');\n }\n }\n\n /**\n * Gets the disabled state.\n * @returns {boolean}\n */\n get disabled() {\n return this.hasAttribute('disabled');\n }\n\n /**\n * Get show separator flag.\n * @returns {boolean} showSeparator - The show separator flag\n */\n get showSeparator() {\n return this._showSeparator;\n }\n\n /**\n * Set show separator flag.\n * @param {boolean} value The value to set\n */\n set showSeparator(value) {\n this._showSeparator = value;\n }\n\n /**\n * Set collapsed variant.\n * @param {string} value The value to set\n */\n set collapsedVariant(value) {\n this._collapsedVariant = value;\n }\n\n /**\n * Get collapsed variant.\n * @returns {string} The collapsed variant value in uppercase.\n */\n get collapsedVariant() {\n return this.collapsedVariantName.toUpperCase();\n }\n\n /**\n * Get collapsed variant token.\n * @returns {string}\n */\n get collapsedVariantName() {\n return String(this.parentElement?.collapsedVariant || this.parentElement?.variant || this._collapsedVariant || 'button').trim();\n }\n\n /**\n * Class name for the Breadcrumb element.\n * @type {string}\n */\n className = 'Breadcrumb';\n\n /**\n * Get CSS stylesheet for the Breadcrumb element.\n * @static\n * @returns {object} styles - The CSS styles\n */\n static get cssStyleSheet() {\n return styles;\n }\n\n /**\n * Get observed attributes for the Breadcrumb element.\n * @static\n * @returns {Array<string>} - The observed attributes array for the Breadcrumb element.\n */\n static get observedAttributes() {\n return ['show-collapsed-indicator', 'collapsed', 'last', 'href', 'target', 'rel', 'download', 'disabled', 'title', 'aria-label'];\n }\n\n /**\n * Handles attribute changes for the custom element and updates its behavior or appearance accordingly.\n * @param {string} name The name of the attribute that was changed.\n * @param {string|null} oldValue The previous value of the attribute before it was changed. Null if the attribute was not previously set.\n * @param {string|null} newValue The new value of the attribute after it was changed. Null if the attribute was removed.\n */\n attributeChangedCallback(name, oldValue, newValue) {\n if (oldValue === newValue) return;\n\n if (name === 'collapsed') {\n const isCollapsed = newValue !== null && WjElementUtils.stringToBoolean(newValue);\n\n this.classList.toggle('collapsed', isCollapsed && !this.hasAttribute('show-collapsed-indicator'));\n\n } else if (name === 'show-collapsed-indicator') {\n super.attributeChangedCallback?.(name, oldValue, newValue);\n const isOn = newValue !== null && WjElementUtils.stringToBoolean(newValue);\n this._showCollapsedIndicator = isOn;\n this.classList.toggle('collapsed', this.hasAttribute('collapsed') && !isOn);\n this.refresh();\n\n } else if (name === 'last') {\n super.attributeChangedCallback?.(name, oldValue, newValue);\n const isLast = newValue !== null && WjElementUtils.stringToBoolean(newValue);\n this.active = isLast;\n this.showSeparator = !isLast;\n this.syncAria();\n this.syncNativeAttributes();\n this.refresh();\n } else {\n this.syncAria();\n this.syncNativeAttributes();\n }\n }\n\n /**\n * Setup attributes for the Breadcrumb element.\n */\n setupAttributes() {\n this.isShadowRoot = 'open';\n this.syncAria();\n }\n\n syncAria() {\n this.setAriaState({ role: 'link' });\n if (this.active) this.setAriaState({ current: 'page' });\n else this.removeAttribute('aria-current');\n\n if (this.disabled) this.setAriaState({ disabled: true });\n else this.removeAttribute('aria-disabled');\n }\n\n /**\n * Draw method for the Breadcrumb element.\n * @returns {object} fragment - The document fragment\n */\n draw() {\n let fragment = document.createDocumentFragment();\n\n let native = document.createElement('a');\n native.classList.add('native-breadcrumb');\n native.setAttribute('part', 'native');\n\n this.native = native;\n this.syncNativeAttributes();\n\n let slot = document.createElement('slot');\n\n let start = document.createElement('slot');\n start.setAttribute('name', 'start');\n\n let end = document.createElement('slot');\n end.setAttribute('name', 'end');\n\n native.append(start, slot, end);\n\n // APPEND\n fragment.append(native);\n\n if (WjElementUtils.stringToBoolean(this._showCollapsedIndicator)) {\n // pridame button za native element\n fragment.append(this.drawCollapsedIndicator());\n\n // skryjeme native element\n native.classList.add('hidden');\n }\n\n if (this.shouldRenderSeparator()) {\n let separator = document.createElement('span');\n separator.classList.add('separator');\n separator.setAttribute('part', 'separator');\n\n if (WjElementUtils.hasSlot(this, 'separator')) {\n let slotSeparator = document.createElement('slot');\n slotSeparator.setAttribute('name', 'separator');\n\n separator.append(slotSeparator);\n } else {\n separator.innerHTML = `<wje-icon name=${this.separator || 'chevron-right'}></wje-icon>`;\n }\n\n fragment.append(separator);\n }\n\n return fragment;\n }\n\n /**\n * Returns whether the separator should be visible after this breadcrumb.\n * @returns {boolean}\n */\n shouldRenderSeparator() {\n return this.showSeparator && this.hasVisibleBreadcrumbAfter();\n }\n\n /**\n * Returns whether any later breadcrumb is still visible in the rendered trail.\n * @returns {boolean}\n */\n hasVisibleBreadcrumbAfter() {\n const breadcrumbs = this.parentElement?.getBreadcrumbs?.();\n\n if (!Array.isArray(breadcrumbs)) return true;\n\n const index = breadcrumbs.indexOf(this);\n\n if (index === -1) return true;\n\n return breadcrumbs.slice(index + 1).some((breadcrumb) => this.isBreadcrumbVisibleInTrail(breadcrumb));\n }\n\n /**\n * Returns whether a breadcrumb is visible in the rendered trail.\n * @param {Element} breadcrumb Breadcrumb element to inspect.\n * @returns {boolean}\n */\n isBreadcrumbVisibleInTrail(breadcrumb) {\n return !(breadcrumb?.hasAttribute?.('collapsed') && !breadcrumb?.hasAttribute?.('show-collapsed-indicator'));\n }\n\n /**\n * Synchronizes host attributes to the internal anchor.\n */\n syncNativeAttributes() {\n const native = this.native || this.context?.querySelector('a.native-breadcrumb');\n if (!native) return;\n\n const isDisabled = this.disabled;\n const href = this.href;\n\n if (href !== null && href !== undefined && !isDisabled) {\n native.setAttribute('href', href);\n } else {\n native.removeAttribute('href');\n }\n\n ['target', 'rel', 'download'].forEach((attr) => {\n if (this.hasAttribute(attr) && !isDisabled) {\n native.setAttribute(attr, this.getAttribute(attr));\n } else {\n native.removeAttribute(attr);\n }\n });\n\n ['title', 'aria-label'].forEach((attr) => {\n if (this.hasAttribute(attr)) {\n native.setAttribute(attr, this.getAttribute(attr));\n } else {\n native.removeAttribute(attr);\n }\n });\n\n native.classList.toggle('active', Boolean(this.active));\n native.classList.toggle('disabled', isDisabled);\n\n if (this.active) native.setAttribute('aria-current', 'page');\n else native.removeAttribute('aria-current');\n\n if (isDisabled) {\n native.setAttribute('aria-disabled', 'true');\n native.setAttribute('tabindex', '-1');\n } else {\n native.removeAttribute('aria-disabled');\n native.removeAttribute('tabindex');\n }\n }\n\n /**\n * Sets up native anchor listeners after render.\n */\n afterDraw() {\n this.native?.addEventListener('click', this.handleNativeClick);\n }\n\n /**\n * Removes native anchor listeners before redraw/disconnect.\n */\n beforeDisconnect() {\n this.native?.removeEventListener('click', this.handleNativeClick);\n }\n\n /**\n * Prevents disabled breadcrumbs from navigating or bubbling click handlers.\n * @param {MouseEvent} e Click event.\n */\n handleDisabledNativeClick(e) {\n if (!this.disabled) return;\n\n e.preventDefault();\n e.stopPropagation();\n e.stopImmediatePropagation?.();\n }\n\n /**\n * Renders the collapsed indicator based on the current collapsed variant.\n * If the collapsed variant is 'DROPDOWN', it invokes the collapseDropdown method.\n * Mobile breakpoint variants render compact breadcrumb summaries, otherwise the default button is used.\n * @returns {any} The rendered collapsed indicator, either as a dropdown or a button.\n */\n drawCollapsedIndicator() {\n const variant = this.collapsedVariant;\n\n if (variant === 'DROPDOWN') {\n return this.collapseDropdown();\n }\n\n if (this.isMobileCollapsedVariant() && this.isBreakpointMenuIndicator()) {\n return this.collapseMobileVariant(variant);\n }\n\n return this.collapseButton();\n }\n\n /**\n * Returns whether the current collapsed variant is a compact mobile layout.\n * @returns {boolean}\n */\n isMobileCollapsedVariant() {\n return MOBILE_COLLAPSED_VARIANTS.has(this.collapsedVariant);\n }\n\n /**\n * Creates and returns a dropdown UI component for collapsed breadcrumbs.\n * This method generates a dropdown element with a button trigger and a menu populated with items corresponding\n * to the collapsed breadcrumbs. The dropdown is configured to handle specific interactions and ensure that\n * events are appropriately managed to avoid propagation issues. Menu items are linked to their corresponding\n * breadcrumbs, enabling the same functionality as clicking on the original breadcrumb.\n * @returns {HTMLElement} A configured dropdown element containing a button as trigger and a menu with breadcrumb items.\n */\n collapseDropdown() {\n const isBreakpointMenuIndicator = this.isBreakpointMenuIndicator();\n const breadcrumbs = this.getCollapsedMenuBreadcrumbs(isBreakpointMenuIndicator);\n const trigger = this.createCollapsedDropdownTrigger(isBreakpointMenuIndicator);\n\n return this.createBreadcrumbDropdown({\n breadcrumbs,\n trigger,\n placement: isBreakpointMenuIndicator ? 'bottom-start' : 'bottom',\n });\n }\n\n /**\n * Creates a dropdown containing breadcrumb menu items.\n * @param {object} options Configuration for the dropdown shell.\n * @param {Array<HTMLElement>} options.breadcrumbs Breadcrumb elements to mirror in the menu.\n * @param {HTMLElement} options.trigger Element assigned to the dropdown trigger slot.\n * @param {string} options.placement Floating UI placement token for the popup.\n * @returns {HTMLElement}\n */\n createBreadcrumbDropdown({ breadcrumbs, trigger, placement = 'bottom' }) {\n const dropdown = document.createElement('wje-dropdown');\n dropdown.setAttribute('placement', placement);\n dropdown.setAttribute('offset', '10');\n\n const menu = this.createCollapsedBreadcrumbMenu(breadcrumbs);\n\n dropdown.append(trigger, menu);\n\n return dropdown;\n }\n\n /**\n * Creates the menu used by collapsed dropdown variants.\n * @param {Array<HTMLElement>} breadcrumbs Breadcrumb items represented by menu items.\n * @returns {HTMLElement}\n */\n createCollapsedBreadcrumbMenu(breadcrumbs) {\n const menu = document.createElement('wje-menu');\n menu.setAttribute('variant', 'context');\n menu.style.setProperty('--wje-menu-item-justify-content', 'flex-start');\n\n menu.addEventListener('click', (e) => {\n e.stopPropagation();\n e.stopImmediatePropagation?.();\n });\n\n breadcrumbs.forEach((breadcrumb) => {\n const menuItem = document.createElement('wje-menu-item');\n this.populateCollapsedMenuItem(menuItem, breadcrumb);\n\n menuItem.__breadcrumb = breadcrumb;\n\n menuItem.addEventListener('wje-menu-item:click', (e) => {\n e.preventDefault?.();\n e.stopPropagation();\n e.stopImmediatePropagation?.();\n\n this.forwardBreadcrumbClick(e.currentTarget.__breadcrumb);\n });\n\n menu.append(menuItem);\n });\n\n return menu;\n }\n\n /**\n * Returns breadcrumbs that should be exposed in a collapsed menu.\n * @param {boolean} isBreakpointMenuIndicator Whether this trigger controls the full breakpoint menu.\n * @returns {Array<HTMLElement>}\n */\n getCollapsedMenuBreadcrumbs(isBreakpointMenuIndicator) {\n const breadcrumbs = this.getBreadcrumbs();\n\n if (isBreakpointMenuIndicator) {\n return breadcrumbs?.getBreadcrumbs?.() || [];\n }\n\n return breadcrumbs?.getBreadcrumbsCollapsed?.() || [];\n }\n\n /**\n * Renders one of the compact mobile breakpoint variants.\n * @param {string} variant Normalized uppercase variant token.\n * @returns {HTMLElement}\n */\n collapseMobileVariant(variant) {\n if (variant === 'TEXT') return this.collapseMobileText();\n if (variant === 'BACK') return this.collapseMobileBack();\n if (variant === 'PARENT-TITLE') return this.collapseMobileParentTitle();\n if (variant === 'MENU-TITLE') return this.collapseMobileMenuTitle();\n if (variant === 'SHEET') return this.collapseMobileSheet();\n\n return this.collapseButton();\n }\n\n /**\n * Renders only the current breadcrumb title.\n * @returns {HTMLElement}\n */\n collapseMobileText() {\n const current = this.getCurrentBreadcrumb();\n const container = this.createMobileContainer('breadcrumb-mobile--text');\n const title = this.createMobileBreadcrumbControl(current, 'breadcrumb-mobile__title', {\n ariaCurrent: true,\n actionable: this.isBreadcrumbActionable(current),\n });\n\n container.append(title);\n\n return container;\n }\n\n /**\n * Renders a parent back action above the current title.\n * @returns {HTMLElement}\n */\n collapseMobileBack() {\n const current = this.getCurrentBreadcrumb();\n const parent = this.getParentBreadcrumb();\n const container = this.createMobileContainer('breadcrumb-mobile--back');\n\n if (parent) {\n const back = this.createMobileBreadcrumbControl(parent, 'breadcrumb-mobile__back', {\n ariaLabel: 'Go to parent',\n icon: 'arrow-left',\n actionable: this.isBreadcrumbActionable(parent),\n });\n container.append(back);\n }\n\n const title = this.createMobileBreadcrumbControl(current, 'breadcrumb-mobile__title', {\n ariaCurrent: true,\n actionable: false,\n });\n container.append(title);\n\n return container;\n }\n\n /**\n * Renders parent context above the current title.\n * @returns {HTMLElement}\n */\n collapseMobileParentTitle() {\n const current = this.getCurrentBreadcrumb();\n const parent = this.getParentBreadcrumb();\n const container = this.createMobileContainer('breadcrumb-mobile--parent-title');\n\n if (parent) {\n const parentControl = this.createMobileBreadcrumbControl(parent, 'breadcrumb-mobile__parent', {\n actionable: this.isBreadcrumbActionable(parent),\n });\n container.append(parentControl);\n }\n\n const title = this.createMobileBreadcrumbControl(current, 'breadcrumb-mobile__title', {\n ariaCurrent: true,\n actionable: false,\n });\n container.append(title);\n\n return container;\n }\n\n /**\n * Renders a menu trigger with the current title.\n * @returns {HTMLElement}\n */\n collapseMobileMenuTitle() {\n const trigger = this.createMobileDropdownTrigger({\n icon: 'dots',\n label: this.getBreadcrumbLabel(this.getCurrentBreadcrumb()),\n ariaLabel: 'Show breadcrumb menu',\n className: 'breadcrumb-mobile--menu-title',\n });\n\n return this.createMobileDropdown(trigger);\n }\n\n /**\n * Renders the future sheet variant using the dropdown fallback for now.\n * @returns {HTMLElement}\n */\n collapseMobileSheet() {\n const trigger = this.createMobileDropdownTrigger({\n icon: 'chevron-down',\n iconPosition: 'end',\n label: this.getBreadcrumbLabel(this.getCurrentBreadcrumb()),\n ariaLabel: 'Show breadcrumb path',\n className: 'breadcrumb-mobile--sheet',\n });\n\n return this.createMobileDropdown(trigger);\n }\n\n /**\n * Creates a dropdown fallback for mobile menu-like variants.\n * @param {HTMLElement} trigger Element that opens the fallback dropdown.\n * @returns {HTMLElement}\n */\n createMobileDropdown(trigger) {\n const dropdown = this.createBreadcrumbDropdown({\n breadcrumbs: this.getTrailBreadcrumbs(),\n trigger,\n placement: 'bottom-start',\n });\n\n dropdown.classList.add('breadcrumb-mobile-dropdown');\n\n return dropdown;\n }\n\n /**\n * Creates a compact mobile dropdown trigger.\n * @param {object} options Visual settings for the compact trigger.\n * @param {string} options.icon Icon shown next to the title.\n * @param {string} options.iconPosition Whether the icon renders at the start or end.\n * @param {string} options.label Current breadcrumb label shown beside the icon.\n * @param {string} options.ariaLabel Accessible name for the dropdown trigger.\n * @param {string} options.className Variant-specific class applied to the trigger.\n * @returns {HTMLElement}\n */\n createMobileDropdownTrigger({ icon, iconPosition = 'start', label, ariaLabel, className }) {\n const trigger = document.createElement('wje-button');\n trigger.setAttribute('slot', 'trigger');\n trigger.setAttribute('fill', 'link');\n trigger.setAttribute('aria-label', ariaLabel);\n trigger.classList.add('breadcrumb-mobile', 'breadcrumb-mobile__menu', className);\n\n const iconElement = document.createElement('wje-icon');\n iconElement.setAttribute('name', icon);\n iconElement.setAttribute('slot', iconPosition === 'end' ? 'end' : 'start');\n iconElement.classList.add('breadcrumb-mobile__icon');\n\n const title = document.createElement('span');\n title.classList.add('breadcrumb-mobile__title');\n title.setAttribute('aria-current', 'page');\n title.textContent = label;\n if (label) title.setAttribute('title', label);\n\n if (iconPosition === 'end') {\n trigger.append(title, iconElement);\n } else {\n trigger.append(iconElement, title);\n }\n\n return trigger;\n }\n\n /**\n * Creates a wrapper for compact mobile breadcrumb variants.\n * @param {string} className Variant class.\n * @returns {HTMLElement}\n */\n createMobileContainer(className) {\n const container = document.createElement('div');\n container.classList.add('breadcrumb-mobile', className);\n\n return container;\n }\n\n /**\n * Creates a text or button control for a breadcrumb.\n * @param {HTMLElement|null} breadcrumb Source breadcrumb.\n * @param {string} className Class applied to the created control.\n * @param {object} options Behavior and accessibility settings for the control.\n * @param {boolean} options.actionable Whether clicks should forward to the source breadcrumb.\n * @param {boolean} options.ariaCurrent Whether the control marks the current page.\n * @param {string} options.ariaLabel Accessible name for action controls.\n * @param {string} options.icon Optional icon shown before the label.\n * @returns {HTMLElement}\n */\n createMobileBreadcrumbControl(breadcrumb, className, { actionable = false, ariaCurrent = false, ariaLabel, icon } = {}) {\n const label = this.getBreadcrumbLabel(breadcrumb);\n const control = document.createElement(actionable ? 'button' : 'span');\n\n control.classList.add(className);\n if (actionable) {\n control.setAttribute('type', 'button');\n control.addEventListener('click', (e) => {\n e.preventDefault();\n e.stopPropagation();\n e.stopImmediatePropagation?.();\n this.forwardBreadcrumbClick(breadcrumb);\n });\n }\n\n if (ariaCurrent) control.setAttribute('aria-current', 'page');\n if (ariaLabel && actionable) control.setAttribute('aria-label', ariaLabel);\n if (label) control.setAttribute('title', label);\n\n if (icon) {\n const iconElement = document.createElement('wje-icon');\n iconElement.setAttribute('name', icon);\n iconElement.classList.add('breadcrumb-mobile__icon');\n control.append(iconElement);\n }\n\n const text = document.createElement('span');\n text.classList.add('breadcrumb-mobile__label');\n text.textContent = label;\n control.append(text);\n\n return control;\n }\n\n /**\n * Returns the full trail of sibling breadcrumbs.\n * @returns {Array<HTMLElement>}\n */\n getTrailBreadcrumbs() {\n return this.getBreadcrumbs()?.getBreadcrumbs?.() || [];\n }\n\n /**\n * Returns the current breadcrumb item.\n * @returns {HTMLElement|null}\n */\n getCurrentBreadcrumb() {\n const breadcrumbs = this.getTrailBreadcrumbs();\n\n return breadcrumbs[breadcrumbs.length - 1] || null;\n }\n\n /**\n * Returns the parent breadcrumb item.\n * @returns {HTMLElement|null}\n */\n getParentBreadcrumb() {\n const breadcrumbs = this.getTrailBreadcrumbs();\n\n return breadcrumbs.length > 1 ? breadcrumbs[breadcrumbs.length - 2] : null;\n }\n\n /**\n * Returns whether a breadcrumb has a known action to forward.\n * @param {HTMLElement|null} breadcrumb Breadcrumb to inspect.\n * @returns {boolean}\n */\n isBreadcrumbActionable(breadcrumb) {\n if (!breadcrumb || breadcrumb.disabled || breadcrumb.hasAttribute?.('disabled')) return false;\n\n return Boolean(\n breadcrumb.hasAttribute?.('href') ||\n breadcrumb.hasAttribute?.('onclick') ||\n breadcrumb.__wjeBreadcrumbManaged ||\n breadcrumb.hasAttribute?.('data-wje-breadcrumbs-item')\n );\n }\n\n /**\n * Forwards a compact control or menu item click to the original breadcrumb.\n * @param {HTMLElement|null} breadcrumb Source breadcrumb.\n */\n forwardBreadcrumbClick(breadcrumb) {\n if (!breadcrumb) return;\n\n const native = breadcrumb.native || breadcrumb.context?.querySelector('a.native-breadcrumb');\n if (native && typeof native.click === 'function') {\n native.click();\n } else if (typeof breadcrumb.click === 'function') {\n breadcrumb.click();\n } else {\n breadcrumb.dispatchEvent(\n new MouseEvent('click', {\n bubbles: true,\n composed: true,\n cancelable: true\n })\n );\n }\n }\n\n /**\n * Creates the dropdown trigger for collapsed breadcrumbs.\n * @param {boolean} isBreakpointMenuIndicator Whether this trigger controls the full breakpoint menu.\n * @returns {HTMLElement}\n */\n createCollapsedDropdownTrigger(isBreakpointMenuIndicator) {\n if (isBreakpointMenuIndicator) {\n const customTrigger = this.getBreadcrumbs()?.getBreakpointCollapseTrigger?.();\n\n if (customTrigger) {\n const trigger = customTrigger.cloneNode(true);\n trigger.setAttribute('slot', 'trigger');\n\n if (!trigger.hasAttribute('aria-label')) {\n trigger.setAttribute('aria-label', 'Show breadcrumb menu');\n }\n\n return trigger;\n }\n }\n\n let button = document.createElement('wje-button');\n button.setAttribute('slot', 'trigger');\n button.setAttribute('fill', 'link');\n button.setAttribute('aria-label', 'Show more breadcrumbs');\n button.innerHTML = `<wje-icon name=\"${this.getCollapsedDropdownIcon(isBreakpointMenuIndicator)}\"></wje-icon>`;\n\n return button;\n }\n\n /**\n * Resolves the icon used by the default dropdown trigger.\n * @param {boolean} isBreakpointMenuIndicator Whether this trigger controls the full breakpoint menu.\n * @returns {string}\n */\n getCollapsedDropdownIcon(isBreakpointMenuIndicator) {\n if (!isBreakpointMenuIndicator) return 'dots';\n\n return this.getBreadcrumbs()?.breakpointCollapseIcon || 'menu';\n }\n\n /**\n * Copies breadcrumb content into a collapsed menu item.\n * @param {HTMLElement} menuItem Menu item receiving the content.\n * @param {HTMLElement} breadcrumb Source breadcrumb.\n */\n populateCollapsedMenuItem(menuItem, breadcrumb) {\n const nodes = Array.from(breadcrumb.childNodes).map((node) => node.cloneNode(true));\n\n menuItem.replaceChildren(...nodes);\n\n if (menuItem.textContent.trim()) return;\n\n const label = this.getBreadcrumbLabel(breadcrumb);\n\n if (label) {\n menuItem.append(document.createTextNode(label));\n }\n }\n\n /**\n * Resolves a readable label for a breadcrumb item.\n * @param {HTMLElement|null} breadcrumb Source breadcrumb.\n * @returns {string}\n */\n getBreadcrumbLabel(breadcrumb) {\n if (!breadcrumb) return '';\n\n return this.getCollapsedMenuItemLabel(breadcrumb);\n }\n\n /**\n * Resolves a readable label for icon-only collapsed menu items.\n * @param {HTMLElement} breadcrumb Source breadcrumb.\n * @returns {string}\n */\n getCollapsedMenuItemLabel(breadcrumb) {\n const explicitLabel = breadcrumb.getAttribute('aria-label') || breadcrumb.getAttribute('title');\n\n if (explicitLabel?.trim()) return explicitLabel.trim();\n\n const text = breadcrumb.textContent.trim();\n\n if (text) return text;\n\n const iconName = breadcrumb.querySelector('wje-icon[slot=\"start\"]')?.getAttribute('name');\n\n if (iconName === 'home') return 'Home';\n\n const href = breadcrumb.getAttribute('href');\n const path = href?.split(/[?#]/)[0] || '';\n const segment = path.split('/').filter(Boolean).pop();\n\n return segment ? this.humanizeCollapsedMenuItemLabel(segment) : '';\n }\n\n /**\n * Turns a URL segment into a readable menu label.\n * @param {string} value URL segment.\n * @returns {string}\n */\n humanizeCollapsedMenuItemLabel(value) {\n return decodeURIComponent(value)\n .replace(/[-_]+/g, ' ')\n .replace(/\\b\\w/g, (letter) => letter.toUpperCase());\n }\n\n /**\n * Returns whether this collapsed indicator represents the full breakpoint menu.\n * @returns {boolean}\n */\n isBreakpointMenuIndicator() {\n const breadcrumbs = this.parentElement;\n\n return (\n this.hasAttribute('show-collapsed-indicator') &&\n this.hasAttribute('collapsed') &&\n breadcrumbs?.isBreakpointMenuCollapseActive?.()\n );\n }\n\n /**\n * Creates a button element that expands hidden breadcrumbs when clicked.\n * The button is set with appropriate attributes and event listeners to handle\n * the expanding of hidden breadcrumb elements. Clicking the button will remove\n * the button itself, reveal hidden breadcrumbs, and stop the current event\n * propagation.\n * @returns {HTMLButtonElement} The created button configured to expand breadcrumbs.\n */\n collapseButton() {\n let button = document.createElement('button');\n button.setAttribute('aria-label', 'Show more breadcrumbs');\n button.setAttribute('part', 'collapsed-indicator');\n button.innerHTML = `<wje-icon name=\"dots\"></wje-icon>`;\n\n event.addListener(button, 'click', null, (e) => {\n this.native.classList.remove('hidden');\n button.remove();\n this.getBreadcrumbs().getBreadcrumbsCollapsed().forEach((el) => {\n el.classList.remove('collapsed');\n });\n e.stopPropagation();\n });\n\n return button;\n }\n\n /**\n * Retrieves the breadcrumb trail for the current element by returning its parent element.\n * @returns {Element} The parent element representing the breadcrumb trail.\n */\n getBreadcrumbs() {\n return this.parentElement;\n }\n}\n","import Breadcrumb from './breadcrumb.element.js';\nimport '../wje-button/button.js';\nimport '../wje-dropdown/dropdown.js';\nimport '../wje-icon/icon.js';\nimport '../wje-menu/menu.js';\nimport '../wje-menu-item/menu-item.js';\nimport '../wje-popup/popup.js';\nimport '../wje-tooltip/tooltip.js';\n\n// export * from \"./breadcrumb.element.js\";\nexport default Breadcrumb;\n\nBreadcrumb.define('wje-breadcrumb', Breadcrumb);\n"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"wje-breadcrumb.js","sources":["../packages/wje-breadcrumb/breadcrumb.element.js","../packages/wje-breadcrumb/breadcrumb.js"],"sourcesContent":["import { default as WJElement, event, WjElementUtils } from '../wje-element/element.js';\nimport styles from './styles/styles.css?inline';\n\nconst MOBILE_COLLAPSED_VARIANTS = new Set(['TEXT', 'BACK', 'PARENT-TITLE', 'MENU-TITLE', 'SHEET']);\n\n/**\n * @summary This class represents a Breadcrumb element, extending the WJElement class. It provides a navigational aid in user interfaces, displaying the current location within a hierarchy.\n * @documentation https://elements.webjet.sk/components/breadcrumb\n * @status stable\n * @augments WJElement\n * @slot - The main content of the breadcrumb.\n * @slot start - Slot for content at the start of the breadcrumb.\n * @slot end - Slot for content at the end of the breadcrumb.\n * @slot separator - Slot for a custom separator between breadcrumb items.\n * @csspart native - The native wrapper of the breadcrumb component.\n * @csspart separator - The separator between breadcrumb items.\n * @cssproperty [--wje-breadcrumb-a=var(--wje-color-contrast-8)] - The color of the breadcrumb text.\n * @cssproperty [--wje-breadcrumb-a-hover=var(--wje-color-contrast-6)] - The color of the breadcrumb separator line.\n * @cssproperty [--wje-breadcrumb-line-height=1.5] - Controls the vertical rhythm of breadcrumb text.\n * @cssproperty [--wje-breadcrumb-native-line-height=var(--wje-breadcrumb-line-height)] - Controls the line height of the native breadcrumb wrapper.\n * @cssproperty [--wje-breadcrumb-native-margin=0] - Sets outer spacing around the native breadcrumb wrapper.\n * @cssproperty [--wje-breadcrumb-native-padding=0.25rem 0.75rem] - Sets inner spacing inside the native breadcrumb wrapper.\n * @cssproperty [--wje-breadcrumb-margin=var(--wje-breadcrumb-native-margin)] - Backwards-compatible alias for native breadcrumb margin.\n * @cssproperty [--wje-breadcrumb-padding=var(--wje-breadcrumb-native-padding)] - Backwards-compatible alias for native breadcrumb padding.\n * @tag wje-breadcrumb\n */\nexport default class Breadcrumb extends WJElement {\n /**\n * Breadcrumb constructor method.\n */\n constructor() {\n super();\n\n this._showSeparator = true;\n this._showCollapsedIndicator = false;\n this.handleNativeClick = (e) => this.handleDisabledNativeClick(e);\n }\n\n /**\n * Sets the breadcrumb link URL.\n * @param {string|null} value Link URL.\n */\n set href(value) {\n if (value === null || value === undefined) this.removeAttribute('href');\n else this.setAttribute('href', value);\n }\n\n /**\n * Gets the breadcrumb link URL.\n * @returns {string|null}\n */\n get href() {\n return this.getAttribute('href');\n }\n\n /**\n * Sets the disabled state.\n * @param {boolean} value Disabled state.\n */\n set disabled(value) {\n if (value === true || value === '' || value === 'true' || value === 1 || value === '1') {\n this.setAttribute('disabled', '');\n } else {\n this.removeAttribute('disabled');\n }\n }\n\n /**\n * Gets the disabled state.\n * @returns {boolean}\n */\n get disabled() {\n return this.hasAttribute('disabled');\n }\n\n /**\n * Get show separator flag.\n * @returns {boolean} showSeparator - The show separator flag\n */\n get showSeparator() {\n return this._showSeparator;\n }\n\n /**\n * Set show separator flag.\n * @param {boolean} value The value to set\n */\n set showSeparator(value) {\n this._showSeparator = value;\n }\n\n /**\n * Set collapsed variant.\n * @param {string} value The value to set\n */\n set collapsedVariant(value) {\n this._collapsedVariant = value;\n }\n\n /**\n * Get collapsed variant.\n * @returns {string} The collapsed variant value in uppercase.\n */\n get collapsedVariant() {\n return this.collapsedVariantName.toUpperCase();\n }\n\n /**\n * Get collapsed variant token.\n * @returns {string}\n */\n get collapsedVariantName() {\n return String(this.parentElement?.collapsedVariant || this.parentElement?.variant || this._collapsedVariant || 'button').trim();\n }\n\n /**\n * Class name for the Breadcrumb element.\n * @type {string}\n */\n className = 'Breadcrumb';\n\n /**\n * Get CSS stylesheet for the Breadcrumb element.\n * @static\n * @returns {object} styles - The CSS styles\n */\n static get cssStyleSheet() {\n return styles;\n }\n\n /**\n * Get observed attributes for the Breadcrumb element.\n * @static\n * @returns {Array<string>} - The observed attributes array for the Breadcrumb element.\n */\n static get observedAttributes() {\n return ['show-collapsed-indicator', 'collapsed', 'last', 'href', 'target', 'rel', 'download', 'disabled', 'title', 'aria-label'];\n }\n\n /**\n * Handles attribute changes for the custom element and updates its behavior or appearance accordingly.\n * @param {string} name The name of the attribute that was changed.\n * @param {string|null} oldValue The previous value of the attribute before it was changed. Null if the attribute was not previously set.\n * @param {string|null} newValue The new value of the attribute after it was changed. Null if the attribute was removed.\n */\n attributeChangedCallback(name, oldValue, newValue) {\n if (oldValue === newValue) return;\n\n if (name === 'collapsed') {\n const isCollapsed = newValue !== null && WjElementUtils.stringToBoolean(newValue);\n\n this.classList.toggle('collapsed', isCollapsed && !this.hasAttribute('show-collapsed-indicator'));\n\n } else if (name === 'show-collapsed-indicator') {\n super.attributeChangedCallback?.(name, oldValue, newValue);\n const isOn = newValue !== null && WjElementUtils.stringToBoolean(newValue);\n this._showCollapsedIndicator = isOn;\n this.classList.toggle('collapsed', this.hasAttribute('collapsed') && !isOn);\n this.refresh();\n\n } else if (name === 'last') {\n super.attributeChangedCallback?.(name, oldValue, newValue);\n const isLast = newValue !== null && WjElementUtils.stringToBoolean(newValue);\n this.active = isLast;\n this.showSeparator = !isLast;\n this.syncAria();\n this.syncNativeAttributes();\n this.refresh();\n } else {\n this.syncAria();\n this.syncNativeAttributes();\n }\n }\n\n /**\n * Setup attributes for the Breadcrumb element.\n */\n setupAttributes() {\n this.isShadowRoot = 'open';\n this.syncAria();\n }\n\n syncAria() {\n this.setAriaState({ role: 'link' });\n if (this.active) this.setAriaState({ current: 'page' });\n else this.removeAttribute('aria-current');\n\n if (this.disabled) this.setAriaState({ disabled: true });\n else this.removeAttribute('aria-disabled');\n }\n\n /**\n * Draw method for the Breadcrumb element.\n * @returns {object} fragment - The document fragment\n */\n draw() {\n let fragment = document.createDocumentFragment();\n\n let native = document.createElement('a');\n native.classList.add('native-breadcrumb');\n native.setAttribute('part', 'native');\n\n this.native = native;\n this.syncNativeAttributes();\n\n let slot = document.createElement('slot');\n\n let start = document.createElement('slot');\n start.setAttribute('name', 'start');\n\n let end = document.createElement('slot');\n end.setAttribute('name', 'end');\n\n native.append(start, slot, end);\n\n // APPEND\n fragment.append(native);\n\n if (WjElementUtils.stringToBoolean(this._showCollapsedIndicator)) {\n // pridame button za native element\n fragment.append(this.drawCollapsedIndicator());\n\n // skryjeme native element\n native.classList.add('hidden');\n }\n\n if (this.shouldRenderSeparator()) {\n let separator = document.createElement('span');\n separator.classList.add('separator');\n separator.setAttribute('part', 'separator');\n\n if (WjElementUtils.hasSlot(this, 'separator')) {\n let slotSeparator = document.createElement('slot');\n slotSeparator.setAttribute('name', 'separator');\n\n separator.append(slotSeparator);\n } else {\n separator.innerHTML = `<wje-icon name=${this.separator || 'chevron-right'}></wje-icon>`;\n }\n\n fragment.append(separator);\n }\n\n return fragment;\n }\n\n /**\n * Returns whether the separator should be visible after this breadcrumb.\n * @returns {boolean}\n */\n shouldRenderSeparator() {\n return this.showSeparator && this.hasVisibleBreadcrumbAfter();\n }\n\n /**\n * Returns whether any later breadcrumb is still visible in the rendered trail.\n * @returns {boolean}\n */\n hasVisibleBreadcrumbAfter() {\n const breadcrumbs = this.parentElement?.getBreadcrumbs?.();\n\n if (!Array.isArray(breadcrumbs)) return true;\n\n const index = breadcrumbs.indexOf(this);\n\n if (index === -1) return true;\n\n return breadcrumbs.slice(index + 1).some((breadcrumb) => this.isBreadcrumbVisibleInTrail(breadcrumb));\n }\n\n /**\n * Returns whether a breadcrumb is visible in the rendered trail.\n * @param {Element} breadcrumb Breadcrumb element to inspect.\n * @returns {boolean}\n */\n isBreadcrumbVisibleInTrail(breadcrumb) {\n return !(breadcrumb?.hasAttribute?.('collapsed') && !breadcrumb?.hasAttribute?.('show-collapsed-indicator'));\n }\n\n /**\n * Synchronizes host attributes to the internal anchor.\n */\n syncNativeAttributes() {\n const native = this.native || this.context?.querySelector('a.native-breadcrumb');\n if (!native) return;\n\n const isDisabled = this.disabled;\n const href = this.href;\n\n if (href !== null && href !== undefined && !isDisabled) {\n native.setAttribute('href', href);\n } else {\n native.removeAttribute('href');\n }\n\n ['target', 'rel', 'download'].forEach((attr) => {\n if (this.hasAttribute(attr) && !isDisabled) {\n native.setAttribute(attr, this.getAttribute(attr));\n } else {\n native.removeAttribute(attr);\n }\n });\n\n ['title', 'aria-label'].forEach((attr) => {\n if (this.hasAttribute(attr)) {\n native.setAttribute(attr, this.getAttribute(attr));\n } else {\n native.removeAttribute(attr);\n }\n });\n\n native.classList.toggle('active', Boolean(this.active));\n native.classList.toggle('disabled', isDisabled);\n\n if (this.active) native.setAttribute('aria-current', 'page');\n else native.removeAttribute('aria-current');\n\n if (isDisabled) {\n native.setAttribute('aria-disabled', 'true');\n native.setAttribute('tabindex', '-1');\n } else {\n native.removeAttribute('aria-disabled');\n native.removeAttribute('tabindex');\n }\n }\n\n /**\n * Sets up native anchor listeners after render.\n */\n afterDraw() {\n this.native?.addEventListener('click', this.handleNativeClick);\n }\n\n /**\n * Removes native anchor listeners before redraw/disconnect.\n */\n beforeDisconnect() {\n this.native?.removeEventListener('click', this.handleNativeClick);\n }\n\n /**\n * Prevents disabled breadcrumbs from navigating or bubbling click handlers.\n * @param {MouseEvent} e Click event.\n */\n handleDisabledNativeClick(e) {\n if (!this.disabled) return;\n\n e.preventDefault();\n e.stopPropagation();\n e.stopImmediatePropagation?.();\n }\n\n /**\n * Renders the collapsed indicator based on the current collapsed variant.\n * If the collapsed variant is 'DROPDOWN', it invokes the collapseDropdown method.\n * Mobile breakpoint variants render compact breadcrumb summaries, otherwise the default button is used.\n * @returns {any} The rendered collapsed indicator, either as a dropdown or a button.\n */\n drawCollapsedIndicator() {\n const variant = this.collapsedVariant;\n\n if (variant === 'DROPDOWN') {\n return this.collapseDropdown();\n }\n\n if (this.isMobileCollapsedVariant() && this.isBreakpointMenuIndicator()) {\n return this.collapseMobileVariant(variant);\n }\n\n return this.collapseButton();\n }\n\n /**\n * Returns whether the current collapsed variant is a compact mobile layout.\n * @returns {boolean}\n */\n isMobileCollapsedVariant() {\n return MOBILE_COLLAPSED_VARIANTS.has(this.collapsedVariant);\n }\n\n /**\n * Creates and returns a dropdown UI component for collapsed breadcrumbs.\n * This method generates a dropdown element with a button trigger and a menu populated with items corresponding\n * to the collapsed breadcrumbs. The dropdown is configured to handle specific interactions and ensure that\n * events are appropriately managed to avoid propagation issues. Menu items are linked to their corresponding\n * breadcrumbs, enabling the same functionality as clicking on the original breadcrumb.\n * @returns {HTMLElement} A configured dropdown element containing a button as trigger and a menu with breadcrumb items.\n */\n collapseDropdown() {\n const isBreakpointMenuIndicator = this.isBreakpointMenuIndicator();\n const breadcrumbs = this.getCollapsedMenuBreadcrumbs(isBreakpointMenuIndicator);\n const trigger = this.createCollapsedDropdownTrigger(isBreakpointMenuIndicator);\n\n return this.createBreadcrumbDropdown({\n breadcrumbs,\n trigger,\n placement: isBreakpointMenuIndicator ? 'bottom-start' : 'bottom',\n });\n }\n\n /**\n * Creates a dropdown containing breadcrumb menu items.\n * @param {object} options Configuration for the dropdown shell.\n * @param {Array<HTMLElement>} options.breadcrumbs Breadcrumb elements to mirror in the menu.\n * @param {HTMLElement} options.trigger Element assigned to the dropdown trigger slot.\n * @param {string} options.placement Floating UI placement token for the popup.\n * @returns {HTMLElement}\n */\n createBreadcrumbDropdown({ breadcrumbs, trigger, placement = 'bottom' }) {\n const dropdown = document.createElement('wje-dropdown');\n dropdown.setAttribute('placement', placement);\n dropdown.setAttribute('offset', '10');\n\n const menu = this.createCollapsedBreadcrumbMenu(breadcrumbs);\n\n dropdown.append(trigger, menu);\n\n return dropdown;\n }\n\n /**\n * Creates the menu used by collapsed dropdown variants.\n * @param {Array<HTMLElement>} breadcrumbs Breadcrumb items represented by menu items.\n * @returns {HTMLElement}\n */\n createCollapsedBreadcrumbMenu(breadcrumbs) {\n const menu = document.createElement('wje-menu');\n menu.setAttribute('variant', 'context');\n menu.style.setProperty('--wje-menu-item-justify-content', 'flex-start');\n\n menu.addEventListener('click', (e) => {\n e.stopPropagation();\n e.stopImmediatePropagation?.();\n });\n\n breadcrumbs.forEach((breadcrumb) => {\n const menuItem = document.createElement('wje-menu-item');\n this.populateCollapsedMenuItem(menuItem, breadcrumb);\n\n menuItem.__breadcrumb = breadcrumb;\n\n menuItem.addEventListener('wje-menu-item:click', (e) => {\n e.preventDefault?.();\n e.stopPropagation();\n e.stopImmediatePropagation?.();\n\n this.forwardBreadcrumbClick(e.currentTarget.__breadcrumb);\n });\n\n menu.append(menuItem);\n });\n\n return menu;\n }\n\n /**\n * Returns breadcrumbs that should be exposed in a collapsed menu.\n * @param {boolean} isBreakpointMenuIndicator Whether this trigger controls the full breakpoint menu.\n * @returns {Array<HTMLElement>}\n */\n getCollapsedMenuBreadcrumbs(isBreakpointMenuIndicator) {\n const breadcrumbs = this.getBreadcrumbs();\n\n if (isBreakpointMenuIndicator) {\n return breadcrumbs?.getBreadcrumbs?.() || [];\n }\n\n return breadcrumbs?.getBreadcrumbsCollapsed?.() || [];\n }\n\n /**\n * Renders one of the compact mobile breakpoint variants.\n * @param {string} variant Normalized uppercase variant token.\n * @returns {HTMLElement}\n */\n collapseMobileVariant(variant) {\n if (variant === 'TEXT') return this.collapseMobileText();\n if (variant === 'BACK') return this.collapseMobileBack();\n if (variant === 'PARENT-TITLE') return this.collapseMobileParentTitle();\n if (variant === 'MENU-TITLE') return this.collapseMobileMenuTitle();\n if (variant === 'SHEET') return this.collapseMobileSheet();\n\n return this.collapseButton();\n }\n\n /**\n * Renders only the current breadcrumb title.\n * @returns {HTMLElement}\n */\n collapseMobileText() {\n const current = this.getCurrentBreadcrumb();\n const container = this.createMobileContainer('breadcrumb-mobile--text');\n const title = this.createMobileBreadcrumbControl(current, 'breadcrumb-mobile__title', {\n ariaCurrent: true,\n actionable: this.isBreadcrumbActionable(current),\n });\n\n container.append(title);\n\n return container;\n }\n\n /**\n * Renders a parent back action above the current title.\n * @returns {HTMLElement}\n */\n collapseMobileBack() {\n const current = this.getCurrentBreadcrumb();\n const parent = this.getParentBreadcrumb();\n const container = this.createMobileContainer('breadcrumb-mobile--back');\n\n if (parent) {\n const back = this.createMobileBreadcrumbControl(parent, 'breadcrumb-mobile__back', {\n ariaLabel: 'Go to parent',\n icon: 'arrow-left',\n actionable: this.isBreadcrumbActionable(parent),\n });\n container.append(back);\n }\n\n const title = this.createMobileBreadcrumbControl(current, 'breadcrumb-mobile__title', {\n ariaCurrent: true,\n actionable: false,\n });\n container.append(title);\n\n return container;\n }\n\n /**\n * Renders parent context above the current title.\n * @returns {HTMLElement}\n */\n collapseMobileParentTitle() {\n const current = this.getCurrentBreadcrumb();\n const parent = this.getParentBreadcrumb();\n const container = this.createMobileContainer('breadcrumb-mobile--parent-title');\n\n if (parent) {\n const parentControl = this.createMobileBreadcrumbControl(parent, 'breadcrumb-mobile__parent', {\n actionable: this.isBreadcrumbActionable(parent),\n });\n container.append(parentControl);\n }\n\n const title = this.createMobileBreadcrumbControl(current, 'breadcrumb-mobile__title', {\n ariaCurrent: true,\n actionable: false,\n });\n container.append(title);\n\n return container;\n }\n\n /**\n * Renders a menu trigger with the current title.\n * @returns {HTMLElement}\n */\n collapseMobileMenuTitle() {\n const trigger = this.createMobileDropdownTrigger({\n icon: 'dots',\n label: this.getBreadcrumbLabel(this.getCurrentBreadcrumb()),\n ariaLabel: 'Show breadcrumb menu',\n className: 'breadcrumb-mobile--menu-title',\n });\n\n return this.createMobileDropdown(trigger);\n }\n\n /**\n * Renders the future sheet variant using the dropdown fallback for now.\n * @returns {HTMLElement}\n */\n collapseMobileSheet() {\n const trigger = this.createMobileDropdownTrigger({\n icon: 'chevron-down',\n iconPosition: 'end',\n label: this.getBreadcrumbLabel(this.getCurrentBreadcrumb()),\n ariaLabel: 'Show breadcrumb path',\n className: 'breadcrumb-mobile--sheet',\n });\n\n return this.createMobileDropdown(trigger);\n }\n\n /**\n * Creates a dropdown fallback for mobile menu-like variants.\n * @param {HTMLElement} trigger Element that opens the fallback dropdown.\n * @returns {HTMLElement}\n */\n createMobileDropdown(trigger) {\n const dropdown = this.createBreadcrumbDropdown({\n breadcrumbs: this.getTrailBreadcrumbs(),\n trigger,\n placement: 'bottom-start',\n });\n\n dropdown.classList.add('breadcrumb-mobile-dropdown');\n\n return dropdown;\n }\n\n /**\n * Creates a compact mobile dropdown trigger.\n * @param {object} options Visual settings for the compact trigger.\n * @param {string} options.icon Icon shown next to the title.\n * @param {string} options.iconPosition Whether the icon renders at the start or end.\n * @param {string} options.label Current breadcrumb label shown beside the icon.\n * @param {string} options.ariaLabel Accessible name for the dropdown trigger.\n * @param {string} options.className Variant-specific class applied to the trigger.\n * @returns {HTMLElement}\n */\n createMobileDropdownTrigger({ icon, iconPosition = 'start', label, ariaLabel, className }) {\n const trigger = document.createElement('wje-button');\n trigger.setAttribute('slot', 'trigger');\n trigger.setAttribute('fill', 'link');\n trigger.setAttribute('label', ariaLabel);\n trigger.classList.add('breadcrumb-mobile', 'breadcrumb-mobile__menu', className);\n\n const iconElement = document.createElement('wje-icon');\n iconElement.setAttribute('name', icon);\n iconElement.setAttribute('slot', iconPosition === 'end' ? 'end' : 'start');\n iconElement.classList.add('breadcrumb-mobile__icon');\n\n const title = document.createElement('span');\n title.classList.add('breadcrumb-mobile__title');\n title.setAttribute('aria-current', 'page');\n title.textContent = label;\n if (label) title.setAttribute('title', label);\n\n if (iconPosition === 'end') {\n trigger.append(title, iconElement);\n } else {\n trigger.append(iconElement, title);\n }\n\n return trigger;\n }\n\n /**\n * Creates a wrapper for compact mobile breadcrumb variants.\n * @param {string} className Variant class.\n * @returns {HTMLElement}\n */\n createMobileContainer(className) {\n const container = document.createElement('div');\n container.classList.add('breadcrumb-mobile', className);\n\n return container;\n }\n\n /**\n * Creates a text or button control for a breadcrumb.\n * @param {HTMLElement|null} breadcrumb Source breadcrumb.\n * @param {string} className Class applied to the created control.\n * @param {object} options Behavior and accessibility settings for the control.\n * @param {boolean} options.actionable Whether clicks should forward to the source breadcrumb.\n * @param {boolean} options.ariaCurrent Whether the control marks the current page.\n * @param {string} options.ariaLabel Accessible name for action controls.\n * @param {string} options.icon Optional icon shown before the label.\n * @returns {HTMLElement}\n */\n createMobileBreadcrumbControl(breadcrumb, className, { actionable = false, ariaCurrent = false, ariaLabel, icon } = {}) {\n const label = this.getBreadcrumbLabel(breadcrumb);\n const control = document.createElement(actionable ? 'button' : 'span');\n\n control.classList.add(className);\n if (actionable) {\n control.setAttribute('type', 'button');\n control.addEventListener('click', (e) => {\n e.preventDefault();\n e.stopPropagation();\n e.stopImmediatePropagation?.();\n this.forwardBreadcrumbClick(breadcrumb);\n });\n }\n\n if (ariaCurrent) control.setAttribute('aria-current', 'page');\n if (ariaLabel && actionable) control.setAttribute('aria-label', ariaLabel);\n if (label) control.setAttribute('title', label);\n\n if (icon) {\n const iconElement = document.createElement('wje-icon');\n iconElement.setAttribute('name', icon);\n iconElement.classList.add('breadcrumb-mobile__icon');\n control.append(iconElement);\n }\n\n const text = document.createElement('span');\n text.classList.add('breadcrumb-mobile__label');\n text.textContent = label;\n control.append(text);\n\n return control;\n }\n\n /**\n * Returns the full trail of sibling breadcrumbs.\n * @returns {Array<HTMLElement>}\n */\n getTrailBreadcrumbs() {\n return this.getBreadcrumbs()?.getBreadcrumbs?.() || [];\n }\n\n /**\n * Returns the current breadcrumb item.\n * @returns {HTMLElement|null}\n */\n getCurrentBreadcrumb() {\n const breadcrumbs = this.getTrailBreadcrumbs();\n\n return breadcrumbs[breadcrumbs.length - 1] || null;\n }\n\n /**\n * Returns the parent breadcrumb item.\n * @returns {HTMLElement|null}\n */\n getParentBreadcrumb() {\n const breadcrumbs = this.getTrailBreadcrumbs();\n\n return breadcrumbs.length > 1 ? breadcrumbs[breadcrumbs.length - 2] : null;\n }\n\n /**\n * Returns whether a breadcrumb has a known action to forward.\n * @param {HTMLElement|null} breadcrumb Breadcrumb to inspect.\n * @returns {boolean}\n */\n isBreadcrumbActionable(breadcrumb) {\n if (!breadcrumb || breadcrumb.disabled || breadcrumb.hasAttribute?.('disabled')) return false;\n\n return Boolean(\n breadcrumb.hasAttribute?.('href') ||\n breadcrumb.hasAttribute?.('onclick') ||\n breadcrumb.__wjeBreadcrumbManaged ||\n breadcrumb.hasAttribute?.('data-wje-breadcrumbs-item')\n );\n }\n\n /**\n * Forwards a compact control or menu item click to the original breadcrumb.\n * @param {HTMLElement|null} breadcrumb Source breadcrumb.\n */\n forwardBreadcrumbClick(breadcrumb) {\n if (!breadcrumb) return;\n\n const native = breadcrumb.native || breadcrumb.context?.querySelector('a.native-breadcrumb');\n if (native && typeof native.click === 'function') {\n native.click();\n } else if (typeof breadcrumb.click === 'function') {\n breadcrumb.click();\n } else {\n breadcrumb.dispatchEvent(\n new MouseEvent('click', {\n bubbles: true,\n composed: true,\n cancelable: true\n })\n );\n }\n }\n\n /**\n * Creates the dropdown trigger for collapsed breadcrumbs.\n * @param {boolean} isBreakpointMenuIndicator Whether this trigger controls the full breakpoint menu.\n * @returns {HTMLElement}\n */\n createCollapsedDropdownTrigger(isBreakpointMenuIndicator) {\n if (isBreakpointMenuIndicator) {\n const customTrigger = this.getBreadcrumbs()?.getBreakpointCollapseTrigger?.();\n\n if (customTrigger) {\n const trigger = customTrigger.cloneNode(true);\n trigger.setAttribute('slot', 'trigger');\n\n if (trigger.localName === 'wje-button') {\n if (!trigger.hasAttribute('label') && !trigger.hasAttribute('aria-label')) {\n trigger.setAttribute('label', 'Show breadcrumb menu');\n }\n } else if (!trigger.hasAttribute('aria-label')) {\n trigger.setAttribute('aria-label', 'Show breadcrumb menu');\n }\n\n return trigger;\n }\n }\n\n let button = document.createElement('wje-button');\n button.setAttribute('slot', 'trigger');\n button.setAttribute('fill', 'link');\n button.setAttribute('label', 'Show more breadcrumbs');\n button.innerHTML = `<wje-icon name=\"${this.getCollapsedDropdownIcon(isBreakpointMenuIndicator)}\"></wje-icon>`;\n\n return button;\n }\n\n /**\n * Resolves the icon used by the default dropdown trigger.\n * @param {boolean} isBreakpointMenuIndicator Whether this trigger controls the full breakpoint menu.\n * @returns {string}\n */\n getCollapsedDropdownIcon(isBreakpointMenuIndicator) {\n if (!isBreakpointMenuIndicator) return 'dots';\n\n return this.getBreadcrumbs()?.breakpointCollapseIcon || 'menu';\n }\n\n /**\n * Copies breadcrumb content into a collapsed menu item.\n * @param {HTMLElement} menuItem Menu item receiving the content.\n * @param {HTMLElement} breadcrumb Source breadcrumb.\n */\n populateCollapsedMenuItem(menuItem, breadcrumb) {\n const nodes = Array.from(breadcrumb.childNodes).map((node) => node.cloneNode(true));\n\n menuItem.replaceChildren(...nodes);\n\n if (menuItem.textContent.trim()) return;\n\n const label = this.getBreadcrumbLabel(breadcrumb);\n\n if (label) {\n menuItem.append(document.createTextNode(label));\n }\n }\n\n /**\n * Resolves a readable label for a breadcrumb item.\n * @param {HTMLElement|null} breadcrumb Source breadcrumb.\n * @returns {string}\n */\n getBreadcrumbLabel(breadcrumb) {\n if (!breadcrumb) return '';\n\n return this.getCollapsedMenuItemLabel(breadcrumb);\n }\n\n /**\n * Resolves a readable label for icon-only collapsed menu items.\n * @param {HTMLElement} breadcrumb Source breadcrumb.\n * @returns {string}\n */\n getCollapsedMenuItemLabel(breadcrumb) {\n const explicitLabel = breadcrumb.getAttribute('aria-label') || breadcrumb.getAttribute('title');\n\n if (explicitLabel?.trim()) return explicitLabel.trim();\n\n const text = breadcrumb.textContent.trim();\n\n if (text) return text;\n\n const iconName = breadcrumb.querySelector('wje-icon[slot=\"start\"]')?.getAttribute('name');\n\n if (iconName === 'home') return 'Home';\n\n const href = breadcrumb.getAttribute('href');\n const path = href?.split(/[?#]/)[0] || '';\n const segment = path.split('/').filter(Boolean).pop();\n\n return segment ? this.humanizeCollapsedMenuItemLabel(segment) : '';\n }\n\n /**\n * Turns a URL segment into a readable menu label.\n * @param {string} value URL segment.\n * @returns {string}\n */\n humanizeCollapsedMenuItemLabel(value) {\n return decodeURIComponent(value)\n .replace(/[-_]+/g, ' ')\n .replace(/\\b\\w/g, (letter) => letter.toUpperCase());\n }\n\n /**\n * Returns whether this collapsed indicator represents the full breakpoint menu.\n * @returns {boolean}\n */\n isBreakpointMenuIndicator() {\n const breadcrumbs = this.parentElement;\n\n return (\n this.hasAttribute('show-collapsed-indicator') &&\n this.hasAttribute('collapsed') &&\n breadcrumbs?.isBreakpointMenuCollapseActive?.()\n );\n }\n\n /**\n * Creates a button element that expands hidden breadcrumbs when clicked.\n * The button is set with appropriate attributes and event listeners to handle\n * the expanding of hidden breadcrumb elements. Clicking the button will remove\n * the button itself, reveal hidden breadcrumbs, and stop the current event\n * propagation.\n * @returns {HTMLButtonElement} The created button configured to expand breadcrumbs.\n */\n collapseButton() {\n let button = document.createElement('button');\n button.setAttribute('aria-label', 'Show more breadcrumbs');\n button.setAttribute('part', 'collapsed-indicator');\n button.innerHTML = `<wje-icon name=\"dots\"></wje-icon>`;\n\n event.addListener(button, 'click', null, (e) => {\n this.native.classList.remove('hidden');\n button.remove();\n this.getBreadcrumbs().getBreadcrumbsCollapsed().forEach((el) => {\n el.classList.remove('collapsed');\n });\n e.stopPropagation();\n });\n\n return button;\n }\n\n /**\n * Retrieves the breadcrumb trail for the current element by returning its parent element.\n * @returns {Element} The parent element representing the breadcrumb trail.\n */\n getBreadcrumbs() {\n return this.parentElement;\n }\n}\n","import Breadcrumb from './breadcrumb.element.js';\nimport '../wje-button/button.js';\nimport '../wje-dropdown/dropdown.js';\nimport '../wje-icon/icon.js';\nimport '../wje-menu/menu.js';\nimport '../wje-menu-item/menu-item.js';\nimport '../wje-popup/popup.js';\nimport '../wje-tooltip/tooltip.js';\n\n// export * from \"./breadcrumb.element.js\";\nexport default Breadcrumb;\n\nBreadcrumb.define('wje-breadcrumb', Breadcrumb);\n"],"names":[],"mappings":"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"}
|
package/dist/wje-button.js
CHANGED
|
@@ -113,6 +113,24 @@ class Button extends WJElement {
|
|
|
113
113
|
get tooltip() {
|
|
114
114
|
return this.hasAttribute("tooltip");
|
|
115
115
|
}
|
|
116
|
+
/**
|
|
117
|
+
* Set the accessible label of the Button element.
|
|
118
|
+
* @param {string|null} value The accessible label
|
|
119
|
+
*/
|
|
120
|
+
set label(value) {
|
|
121
|
+
if (value === null || value === void 0) {
|
|
122
|
+
this.removeAttribute("label");
|
|
123
|
+
} else {
|
|
124
|
+
this.setAttribute("label", value);
|
|
125
|
+
}
|
|
126
|
+
}
|
|
127
|
+
/**
|
|
128
|
+
* Get the accessible label of the Button element.
|
|
129
|
+
* @returns {string|null} label - The accessible label
|
|
130
|
+
*/
|
|
131
|
+
get label() {
|
|
132
|
+
return this.getAttribute("label");
|
|
133
|
+
}
|
|
116
134
|
/**
|
|
117
135
|
* Set variant of the Button element.
|
|
118
136
|
* @param value
|
|
@@ -243,12 +261,12 @@ class Button extends WJElement {
|
|
|
243
261
|
* @returns {Array<string>} observedAttributes - The observed attributes array for the Button element.
|
|
244
262
|
*/
|
|
245
263
|
static get observedAttributes() {
|
|
246
|
-
return ["disabled", "color", "value", "active", "href", "toggle"];
|
|
264
|
+
return ["disabled", "color", "value", "active", "href", "toggle", "label", "aria-label"];
|
|
247
265
|
}
|
|
248
266
|
attributeChangedCallback(name, oldValue, newValue) {
|
|
249
267
|
var _a, _b;
|
|
250
268
|
(_a = super.attributeChangedCallback) == null ? void 0 : _a.call(this, name, oldValue, newValue);
|
|
251
|
-
if (["disabled", "value", "active", "href"].includes(name)) {
|
|
269
|
+
if (["disabled", "value", "active", "href", "label", "aria-label"].includes(name)) {
|
|
252
270
|
(_b = this.syncAria) == null ? void 0 : _b.call(this);
|
|
253
271
|
}
|
|
254
272
|
}
|
|
@@ -286,12 +304,16 @@ class Button extends WJElement {
|
|
|
286
304
|
draw() {
|
|
287
305
|
let fragment = document.createDocumentFragment();
|
|
288
306
|
let native = document.createElement(this.hasAttribute("href") ? "a" : "button");
|
|
307
|
+
this.native = native;
|
|
289
308
|
if (this.hasAttribute("href")) {
|
|
290
|
-
|
|
309
|
+
if (!this.disabled) {
|
|
310
|
+
native.setAttribute("href", this.getAttribute("href"));
|
|
311
|
+
}
|
|
291
312
|
} else {
|
|
292
313
|
if (this.type === "submit") {
|
|
293
314
|
native.setAttribute("type", "submit");
|
|
294
315
|
}
|
|
316
|
+
native.disabled = this.disabled;
|
|
295
317
|
}
|
|
296
318
|
native.classList.add("native-button");
|
|
297
319
|
native.setAttribute("part", "native");
|
|
@@ -417,17 +439,40 @@ class Button extends WJElement {
|
|
|
417
439
|
}
|
|
418
440
|
}
|
|
419
441
|
/**
|
|
420
|
-
* Syncs
|
|
442
|
+
* Syncs accessibility attributes on the internal native control.
|
|
421
443
|
*/
|
|
422
444
|
syncAria() {
|
|
445
|
+
var _a;
|
|
446
|
+
const native = this.native || ((_a = this.context) == null ? void 0 : _a.querySelector(".native-button"));
|
|
447
|
+
if (!native) return;
|
|
423
448
|
const isLink = this.hasAttribute("href");
|
|
424
449
|
const isToggle = !!this.hasToggle;
|
|
425
450
|
const pressed = isToggle && !isLink ? this.getAttribute("value") === "on" : void 0;
|
|
426
|
-
this.
|
|
427
|
-
|
|
428
|
-
|
|
429
|
-
|
|
430
|
-
|
|
451
|
+
const label = this.label || this.getAttribute("aria-label");
|
|
452
|
+
if (label) {
|
|
453
|
+
native.setAttribute("aria-label", label);
|
|
454
|
+
} else {
|
|
455
|
+
native.removeAttribute("aria-label");
|
|
456
|
+
}
|
|
457
|
+
if (isLink) {
|
|
458
|
+
if (this.disabled) {
|
|
459
|
+
native.removeAttribute("href");
|
|
460
|
+
native.setAttribute("aria-disabled", "true");
|
|
461
|
+
native.setAttribute("tabindex", "-1");
|
|
462
|
+
} else {
|
|
463
|
+
native.setAttribute("href", this.getAttribute("href"));
|
|
464
|
+
native.removeAttribute("aria-disabled");
|
|
465
|
+
native.removeAttribute("tabindex");
|
|
466
|
+
}
|
|
467
|
+
} else {
|
|
468
|
+
native.disabled = this.disabled;
|
|
469
|
+
native.removeAttribute("aria-disabled");
|
|
470
|
+
}
|
|
471
|
+
if (pressed === void 0) {
|
|
472
|
+
native.removeAttribute("aria-pressed");
|
|
473
|
+
} else {
|
|
474
|
+
native.setAttribute("aria-pressed", pressed ? "true" : "false");
|
|
475
|
+
}
|
|
431
476
|
}
|
|
432
477
|
}
|
|
433
478
|
_Button_instances = new WeakSet();
|
package/dist/wje-button.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"wje-button.js","sources":["../packages/wje-button/button.element.js","../packages/wje-button/button.js"],"sourcesContent":["import { bindRouterLinks } from 'slick-router/middlewares/router-links.js';\n\nimport { bool } from '../utils/utils.js';\nimport { default as WJElement, event, WjElementUtils } from '../wje-element/element.js';\nimport Icon from '../wje-icon/icon.js';\nimport styles from './styles/styles.css?inline';\n\n/**\n * @summary This class represents Button element, extending the WJElement class.\n * @documentation https://elements.webjet.sk/components/button\n * @status stable\n * @augments WJElement\n * @dependency wje-icon\n * @slot - The button main content.\n * @slot icon - The button icon.\n * @slot caret - The button caret.\n * @slot start - The button start slot.\n * @slot end - The button end slot.\n * @slot toggle - The button toggle slot.\n * @csspart native - The component's native wrapper.\n * @cssproperty [--wje-button-background-color=transparent] - Background color of the component;\n * @cssproperty [--wje-button-border-color=--wje-color-contrast-4] - Border color of the component;\n * @cssproperty [--wje-button-color=--wje-color-contrast-11] - Color of the component;\n * @cssproperty [--wje-button-border-radius=--wje-border-radius-medium] - Border radius of the component;\n * @cssproperty [--wje-button-border-width=1px] - Border width of the component;\n * @cssproperty [--wje-button-border-style=solid] - Border style of the component;\n * @cssproperty [--wje-button-border-color=--wje-color-contrast-1] - Border color of the component;\n * @cssproperty [--wje-button-margin-inline=0] - Margin inline of the component;\n */\n\nexport default class Button extends WJElement {\n /**\n * Button constructor method.\n * @class\n */\n constructor() {\n super();\n }\n\n /**\n * Dependencies of the Button element.\n * @type {object}\n */\n dependencies = {\n 'wje-icon': Icon,\n };\n\n /**\n * Properties of the element Button.\n * @param value\n */\n set color(value) {\n this.setAttribute('color', value || 'default');\n }\n\n /**\n * Get color of the Button element.\n * @returns {string|string}\n */\n get color() {\n return this.getAttribute('color') || 'default';\n }\n\n /**\n * Set variant of the Button element.\n * @param value\n */\n set caret(value) {\n this.setAttribute('caret', value);\n }\n\n /**\n * Get variant of the Button element.\n * @returns {boolean}\n */\n get caret() {\n return this.hasAttribute('caret');\n }\n\n /**\n * Sets the 'round' attribute on the element. If the value is true, the attribute is added;\n * otherwise, it is removed from the element.\n * @param {boolean} value A boolean indicating whether to set or remove the 'round' attribute.\n */\n set round(value) {\n if (value) {\n this.setAttribute('round', '');\n } else {\n this.removeAttribute('round');\n }\n }\n\n /**\n * Retrieves the value of the 'round' attribute as a boolean.\n * Checks if the 'round' attribute is present on the element.\n * @returns {boolean} True if the 'round' attribute exists, otherwise false.\n */\n get round() {\n return this.hasAttribute('round');\n }\n\n /**\n * Set variant of the Button element.\n * @param value\n */\n set tooltip(value) {\n this.setAttribute('tooltip', value);\n }\n\n /**\n * Get variant of the Button element.\n * @returns {boolean}\n */\n get tooltip() {\n return this.hasAttribute('tooltip');\n }\n\n /**\n * Set variant of the Button element.\n * @param value\n */\n set dialog(value) {\n this.setAttribute('dialog', value);\n }\n\n /**\n * Get variant of the Button element.\n * @returns {string|object}\n */\n get dialog() {\n return this.getAttribute('dialog');\n }\n\n /**\n * Set active state of the Button element.\n * @param {boolean} value The value to set\n */\n set active(value) {\n this.setAttribute('active', '');\n }\n\n /**\n * Get active state of the Button element.\n * @returns {boolean} active - The active state\n */\n get active() {\n return this.hasAttribute('active');\n }\n\n /**\n * Set disabled state of the Button element.\n * @param {boolean} value The value to set\n */\n set disabled(value) {\n this.removeAttribute('disabled');\n\n if (value) {\n this.setAttribute('disabled', '');\n }\n }\n\n /**\n * Get disabled state of the Button element.\n * @returns {boolean} disabled - The disabled state\n */\n get disabled() {\n return this.hasAttribute('disabled');\n }\n\n /**\n * Set fill of the Button element.\n * @param {string} value The value to set\n */\n set fill(value) {\n this.setAttribute('fill', value);\n }\n\n /**\n * Get fill of the Button element.\n * @returns {string} fill - The fill value\n */\n get fill() {\n return this.getAttribute('fill') || 'solid';\n }\n\n /**\n * Set outline state of the Button element.\n * @param {boolean} value The value to set\n */\n set outline(value) {\n this.setAttribute('outline', '');\n }\n\n /**\n * Get outline state of the Button element.\n * @returns {boolean} outline - The outline state\n */\n get outline() {\n return this.hasAttribute('outline');\n }\n\n /**\n * Set stop propagation state of the Button element.\n * @param {boolean} value The value to set\n */\n set stopPropagation(value) {\n this.setAttribute('stop-propagation', bool(value));\n }\n\n /**\n * Get stop propagation state of the Button element.\n * @returns {boolean} stopPropagation - The stop propagation state\n */\n get stopPropagation() {\n return bool(this.getAttribute('stop-propagation'));\n }\n\n /**\n * Sets the value of the custom event attribute.\n * @param {string} value The value to be assigned to the custom event attribute.\n */\n set customEvent(value) {\n this.setAttribute('custom-event', value);\n }\n\n /**\n * Retrieves the value of the 'custom-event' attribute from the element.\n * @returns {string | null} The value of the 'custom-event' attribute, or null if the attribute is not set.\n */\n get customEvent() {\n return this.getAttribute('custom-event');\n }\n\n /**\n * Retrieves a mapped object containing custom event parameters extracted from the element's attributes.\n * Attributes considered are those that begin with 'custom-event-'.\n * The mapped object's keys are derived by removing the 'custom-event-' prefix from the attribute names,\n * and the values are the corresponding attribute values.\n * @returns {object} An object containing key-value pairs of custom event parameters.\n */\n get customEventParameters() {\n const attributes = Array.from(this.attributes).filter((attr) => attr.name.startsWith('custom-event-'));\n\n return attributes.reduce((acc, attr) => {\n const key = attr.name.replace('custom-event-', '');\n acc[key] = attr.value;\n\n return acc;\n }, {});\n }\n\n /**\n * Class name for the Button element\n * @type {string}\n */\n className = 'Button';\n\n /**\n * Get CSS stylesheet for the Button element.\n * @static\n * @returns {CSSStyleSheet} styles - The CSS stylesheet for the Button element.\n */\n static get cssStyleSheet() {\n return styles;\n }\n\n /**\n * Get observed attributes for the Button element.\n * @static\n * @returns {Array<string>} observedAttributes - The observed attributes array for the Button element.\n */\n static get observedAttributes() {\n return ['disabled', 'color', 'value', 'active', 'href', 'toggle'];\n }\n\n attributeChangedCallback(name, oldValue, newValue) {\n super.attributeChangedCallback?.(name, oldValue, newValue);\n if (['disabled', 'value', 'active', 'href'].includes(name)) {\n this.syncAria?.();\n }\n }\n\n /**\n * @summary A static property that indicates whether the custom element is form-associated or not.\n * Form-associated custom elements are elements that can participate in form submission.\n * @type {boolean}\n */\n static formAssociated = true;\n\n /**\n * @summary Callback function that is called when the custom element is associated with a form.\n * This function sets the internal `_form` property to the associated form.\n * @param {HTMLFormElement} form The form the custom element is associated with.\n */\n formAssociatedCallback(form) {\n this._form = form;\n }\n\n /**\n * @summary Callback function that is called when the form-associated state of the custom element changes.\n * This function updates the 'disabled' attribute of the element based on the new state.\n * @param {boolean} disabled The new form-associated state.\n */\n formDisabledCallback(disabled) {\n if (disabled) {\n this.setAttribute('disabled', '');\n } else {\n this.removeAttribute('disabled');\n }\n }\n\n /**\n * Setup attributes for the Button element.\n */\n setupAttributes() {\n this.isShadowRoot = 'open';\n this.syncAria();\n }\n\n /**\n * Draw method for the Button element.\n * @returns {object} fragment - The document fragment containing the drawn element.\n */\n draw() {\n let fragment = document.createDocumentFragment();\n\n let native = document.createElement(this.hasAttribute('href') ? 'a' : 'button');\n if (this.hasAttribute('href')) {\n native.setAttribute('href', this.getAttribute('href'));\n } else {\n if (this.type === 'submit') {\n native.setAttribute('type', 'submit');\n }\n }\n\n native.classList.add('native-button');\n native.setAttribute('part', 'native');\n\n this.classList.remove('wje-button-disabled');\n\n if (this.disabled) native.classList.add('wje-button-disabled');\n\n if (this.variant) native.classList.add('wje-button-' + this.variant);\n\n if (this.hasAttribute('round')) native.classList.add('wje-button-round');\n\n if (this.hasAttribute('circle')) native.classList.add('wje-button-circle');\n\n if (this.outline) native.classList.add('wje-outline');\n\n if (this.fill) native.classList.add('wje-button-' + this.fill);\n\n if (this.size) native.classList.add('wje-button-' + this.size);\n\n if (\n (this.querySelectorAll('[slot=caret]').length < 1 && this.hasAttribute('caret')) ||\n this.hasAttribute('only-caret')\n ) {\n let i = document.createElement('wje-icon');\n i.style.setProperty('--wje-icon-size', '14px');\n i.setAttribute('slot', 'caret');\n i.setAttribute('name', 'chevron-down');\n i.setAttribute('part', 'caret');\n\n this.appendChild(i);\n }\n\n if (this.active) {\n this.classList.add('wje-active');\n let i = document.createElement('wje-icon');\n i.setAttribute('name', 'check');\n\n this.appendChild(i);\n }\n\n native.classList.add('wje-color-' + this.color, 'wje-color');\n\n let span = document.createElement('span');\n span.setAttribute('part', 'inner');\n span.classList.add('button-inner');\n\n let slot = document.createElement('slot');\n slot.setAttribute('name', 'icon-only');\n span.appendChild(slot);\n\n slot = document.createElement('slot');\n slot.setAttribute('name', 'start');\n span.appendChild(slot);\n\n slot = document.createElement('slot');\n span.appendChild(slot);\n\n slot = document.createElement('slot');\n slot.setAttribute('name', 'end');\n span.appendChild(slot);\n\n slot = document.createElement('slot');\n slot.setAttribute('name', 'caret');\n span.appendChild(slot);\n\n this.hasToggle = WjElementUtils.hasSlot(this, 'toggle');\n\n if (this.hasToggle) {\n this.slotToggle = document.createElement('slot');\n this.slotToggle.setAttribute('name', 'toggle');\n\n span.appendChild(this.slotToggle);\n }\n\n native.appendChild(span);\n\n if (this.tooltip) {\n let tooltip = document.createElement('wje-tooltip');\n tooltip.setAttribute('content', this.getAttribute('tooltip'));\n tooltip.setAttribute('placement', this.getAttribute('tooltip-placement') || 'top');\n tooltip.appendChild(native);\n\n fragment.appendChild(tooltip);\n } else {\n fragment.appendChild(native);\n }\n\n return fragment;\n }\n\n /**\n * After draw method for the Button element.\n */\n afterDraw() {\n if (this.hasAttribute('route')) {\n this.unbindRouterLinks = bindRouterLinks(this.parentElement, { selector: false });\n }\n\n // nastavenie toggle podla atributu, ak nie je nastaveny, tak sa zobrazi vzdy prvy element\n if (this.hasToggle) this.syncToggleState();\n\n if (this.hasAttribute('custom-event')) {\n event.addListener(this, 'click', null, this.#populateCustomEvent);\n }\n\n if (this.hasAttribute('dialog')) {\n event.addListener(this, 'click', null, this.eventDialogOpen);\n } else {\n event.addListener(this, 'click', 'wje-button:click', null); // { stopPropagation: this.stopPropagation } - zrusene kvoli dropdown kde som nevedel odchytit event click\n }\n\n if (this.hasToggle)\n event.addListener(this, 'click', 'wje-button:toggle', this.toggleStates, {\n stopPropagation: this.stopPropagation,\n });\n\n if (this.type === 'submit') {\n event.addListener(this, 'click', 'wje-button:submit', () => {\n event.dispatchCustomEvent(this.internals?.form, 'submit', {});\n });\n }\n\n if (this.type === 'reset') {\n event.addListener(this, 'click', 'wje-button:reset', () => {\n this.internals?.form.reset();\n });\n }\n\n this.syncAria();\n }\n\n /**\n * Before disconnect method for the Button element.\n */\n beforeDisconnect() {\n // remove all events from the button\n event.removeListener(this, 'click', null, this.eventDialogOpen);\n event.removeListener(this, 'click', 'wje-button:click', null);\n event.removeListener(this, 'click', 'wje-button:toggle', this.toggleStates);\n event.removeListener(this, 'click', null, this.#populateCustomEvent);\n event.removeListener(this, 'click', 'wje-button:submit', null);\n event.removeListener(this, 'click', 'wje-button:reset', null);\n\n this.removeEventListener('click', this.eventDialogOpen);\n this.unbindRouterLinks?.();\n }\n\n /**\n * Event dialog open method for the Button element.\n * @param {Event} e The event object\n */\n eventDialogOpen = (e) => {\n event.dispatchCustomEvent(this, this.dialog);\n };\n\n /**\n * Toggle states method for the Button element.\n */\n toggleStates = () => {\n this.setAttribute('value', this.getAttribute('value') === 'on' ? 'off' : 'on');\n this.syncToggleState();\n this.syncAria();\n }\n\n /**\n * Keeps toggle slot visibility aligned with the current value.\n */\n syncToggleState() {\n const nodes = this.slotToggle?.assignedElements?.({ flatten: true }) || [];\n const state = this.getAttribute('value') || this.getAttribute('toggle') || 'on';\n const selectedIndex = state === 'off' ? 1 : 0;\n const selected = nodes[selectedIndex] || nodes[0];\n\n nodes.forEach((node) => node.classList.remove('show'));\n selected?.classList.add('show');\n\n if (state !== this.getAttribute('value')) {\n this.setAttribute('value', state);\n }\n }\n\n /**\n * Syncs ARIA attributes on the host element.\n */\n syncAria() {\n const isLink = this.hasAttribute('href');\n const isToggle = !!this.hasToggle;\n const pressed = isToggle && !isLink ? this.getAttribute('value') === 'on' : undefined;\n\n this.setAriaState({\n role: isLink ? 'link' : 'button',\n disabled: this.disabled,\n pressed,\n });\n }\n\n /**\n * Dispatches a custom event with specified parameters.\n * This method uses the `customEvent` and `customEventParameters` properties\n * to create and dispatch a `CustomEvent`. The event is configured to be\n * composed and bubbles up through the DOM.\n * @returns {void} This method does not return a value.\n */\n #populateCustomEvent() {\n this.dispatchEvent(\n new CustomEvent(this.customEvent, { detail: this.customEventParameters, composed: true, bubbles: true })\n );\n }\n}\n","import Button from './button.element.js';\n\nexport default Button;\n\nButton.define('wje-button', Button);\n"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"wje-button.js","sources":["../packages/wje-button/button.element.js","../packages/wje-button/button.js"],"sourcesContent":["import { bindRouterLinks } from 'slick-router/middlewares/router-links.js';\n\nimport { bool } from '../utils/utils.js';\nimport { default as WJElement, event, WjElementUtils } from '../wje-element/element.js';\nimport Icon from '../wje-icon/icon.js';\nimport styles from './styles/styles.css?inline';\n\n/**\n * @summary This class represents Button element, extending the WJElement class.\n * @documentation https://elements.webjet.sk/components/button\n * @status stable\n * @augments WJElement\n * @attribute {string} label - Accessible name forwarded to the internal native button or link.\n * @dependency wje-icon\n * @slot - The button main content.\n * @slot icon - The button icon.\n * @slot icon-only - The icon used when the button has no visible text.\n * @slot caret - The button caret.\n * @slot start - The button start slot.\n * @slot end - The button end slot.\n * @slot toggle - The button toggle slot.\n * @csspart native - The component's native wrapper.\n * @cssproperty [--wje-button-background-color=transparent] - Background color of the component;\n * @cssproperty [--wje-button-border-color=--wje-color-contrast-4] - Border color of the component;\n * @cssproperty [--wje-button-color=--wje-color-contrast-11] - Color of the component;\n * @cssproperty [--wje-button-border-radius=--wje-border-radius-medium] - Border radius of the component;\n * @cssproperty [--wje-button-border-width=1px] - Border width of the component;\n * @cssproperty [--wje-button-border-style=solid] - Border style of the component;\n * @cssproperty [--wje-button-border-color=--wje-color-contrast-1] - Border color of the component;\n * @cssproperty [--wje-button-margin-inline=0] - Margin inline of the component;\n */\n\nexport default class Button extends WJElement {\n /**\n * Button constructor method.\n * @class\n */\n constructor() {\n super();\n }\n\n /**\n * Dependencies of the Button element.\n * @type {object}\n */\n dependencies = {\n 'wje-icon': Icon,\n };\n\n /**\n * Properties of the element Button.\n * @param value\n */\n set color(value) {\n this.setAttribute('color', value || 'default');\n }\n\n /**\n * Get color of the Button element.\n * @returns {string|string}\n */\n get color() {\n return this.getAttribute('color') || 'default';\n }\n\n /**\n * Set variant of the Button element.\n * @param value\n */\n set caret(value) {\n this.setAttribute('caret', value);\n }\n\n /**\n * Get variant of the Button element.\n * @returns {boolean}\n */\n get caret() {\n return this.hasAttribute('caret');\n }\n\n /**\n * Sets the 'round' attribute on the element. If the value is true, the attribute is added;\n * otherwise, it is removed from the element.\n * @param {boolean} value A boolean indicating whether to set or remove the 'round' attribute.\n */\n set round(value) {\n if (value) {\n this.setAttribute('round', '');\n } else {\n this.removeAttribute('round');\n }\n }\n\n /**\n * Retrieves the value of the 'round' attribute as a boolean.\n * Checks if the 'round' attribute is present on the element.\n * @returns {boolean} True if the 'round' attribute exists, otherwise false.\n */\n get round() {\n return this.hasAttribute('round');\n }\n\n /**\n * Set variant of the Button element.\n * @param value\n */\n set tooltip(value) {\n this.setAttribute('tooltip', value);\n }\n\n /**\n * Get variant of the Button element.\n * @returns {boolean}\n */\n get tooltip() {\n return this.hasAttribute('tooltip');\n }\n\n /**\n * Set the accessible label of the Button element.\n * @param {string|null} value The accessible label\n */\n set label(value) {\n if (value === null || value === undefined) {\n this.removeAttribute('label');\n } else {\n this.setAttribute('label', value);\n }\n }\n\n /**\n * Get the accessible label of the Button element.\n * @returns {string|null} label - The accessible label\n */\n get label() {\n return this.getAttribute('label');\n }\n\n /**\n * Set variant of the Button element.\n * @param value\n */\n set dialog(value) {\n this.setAttribute('dialog', value);\n }\n\n /**\n * Get variant of the Button element.\n * @returns {string|object}\n */\n get dialog() {\n return this.getAttribute('dialog');\n }\n\n /**\n * Set active state of the Button element.\n * @param {boolean} value The value to set\n */\n set active(value) {\n this.setAttribute('active', '');\n }\n\n /**\n * Get active state of the Button element.\n * @returns {boolean} active - The active state\n */\n get active() {\n return this.hasAttribute('active');\n }\n\n /**\n * Set disabled state of the Button element.\n * @param {boolean} value The value to set\n */\n set disabled(value) {\n this.removeAttribute('disabled');\n\n if (value) {\n this.setAttribute('disabled', '');\n }\n }\n\n /**\n * Get disabled state of the Button element.\n * @returns {boolean} disabled - The disabled state\n */\n get disabled() {\n return this.hasAttribute('disabled');\n }\n\n /**\n * Set fill of the Button element.\n * @param {string} value The value to set\n */\n set fill(value) {\n this.setAttribute('fill', value);\n }\n\n /**\n * Get fill of the Button element.\n * @returns {string} fill - The fill value\n */\n get fill() {\n return this.getAttribute('fill') || 'solid';\n }\n\n /**\n * Set outline state of the Button element.\n * @param {boolean} value The value to set\n */\n set outline(value) {\n this.setAttribute('outline', '');\n }\n\n /**\n * Get outline state of the Button element.\n * @returns {boolean} outline - The outline state\n */\n get outline() {\n return this.hasAttribute('outline');\n }\n\n /**\n * Set stop propagation state of the Button element.\n * @param {boolean} value The value to set\n */\n set stopPropagation(value) {\n this.setAttribute('stop-propagation', bool(value));\n }\n\n /**\n * Get stop propagation state of the Button element.\n * @returns {boolean} stopPropagation - The stop propagation state\n */\n get stopPropagation() {\n return bool(this.getAttribute('stop-propagation'));\n }\n\n /**\n * Sets the value of the custom event attribute.\n * @param {string} value The value to be assigned to the custom event attribute.\n */\n set customEvent(value) {\n this.setAttribute('custom-event', value);\n }\n\n /**\n * Retrieves the value of the 'custom-event' attribute from the element.\n * @returns {string | null} The value of the 'custom-event' attribute, or null if the attribute is not set.\n */\n get customEvent() {\n return this.getAttribute('custom-event');\n }\n\n /**\n * Retrieves a mapped object containing custom event parameters extracted from the element's attributes.\n * Attributes considered are those that begin with 'custom-event-'.\n * The mapped object's keys are derived by removing the 'custom-event-' prefix from the attribute names,\n * and the values are the corresponding attribute values.\n * @returns {object} An object containing key-value pairs of custom event parameters.\n */\n get customEventParameters() {\n const attributes = Array.from(this.attributes).filter((attr) => attr.name.startsWith('custom-event-'));\n\n return attributes.reduce((acc, attr) => {\n const key = attr.name.replace('custom-event-', '');\n acc[key] = attr.value;\n\n return acc;\n }, {});\n }\n\n /**\n * Class name for the Button element\n * @type {string}\n */\n className = 'Button';\n\n /**\n * Get CSS stylesheet for the Button element.\n * @static\n * @returns {CSSStyleSheet} styles - The CSS stylesheet for the Button element.\n */\n static get cssStyleSheet() {\n return styles;\n }\n\n /**\n * Get observed attributes for the Button element.\n * @static\n * @returns {Array<string>} observedAttributes - The observed attributes array for the Button element.\n */\n static get observedAttributes() {\n return ['disabled', 'color', 'value', 'active', 'href', 'toggle', 'label', 'aria-label'];\n }\n\n attributeChangedCallback(name, oldValue, newValue) {\n super.attributeChangedCallback?.(name, oldValue, newValue);\n if (['disabled', 'value', 'active', 'href', 'label', 'aria-label'].includes(name)) {\n this.syncAria?.();\n }\n }\n\n /**\n * @summary A static property that indicates whether the custom element is form-associated or not.\n * Form-associated custom elements are elements that can participate in form submission.\n * @type {boolean}\n */\n static formAssociated = true;\n\n /**\n * @summary Callback function that is called when the custom element is associated with a form.\n * This function sets the internal `_form` property to the associated form.\n * @param {HTMLFormElement} form The form the custom element is associated with.\n */\n formAssociatedCallback(form) {\n this._form = form;\n }\n\n /**\n * @summary Callback function that is called when the form-associated state of the custom element changes.\n * This function updates the 'disabled' attribute of the element based on the new state.\n * @param {boolean} disabled The new form-associated state.\n */\n formDisabledCallback(disabled) {\n if (disabled) {\n this.setAttribute('disabled', '');\n } else {\n this.removeAttribute('disabled');\n }\n }\n\n /**\n * Setup attributes for the Button element.\n */\n setupAttributes() {\n this.isShadowRoot = 'open';\n this.syncAria();\n }\n\n /**\n * Draw method for the Button element.\n * @returns {object} fragment - The document fragment containing the drawn element.\n */\n draw() {\n let fragment = document.createDocumentFragment();\n\n let native = document.createElement(this.hasAttribute('href') ? 'a' : 'button');\n this.native = native;\n\n if (this.hasAttribute('href')) {\n if (!this.disabled) {\n native.setAttribute('href', this.getAttribute('href'));\n }\n } else {\n if (this.type === 'submit') {\n native.setAttribute('type', 'submit');\n }\n\n native.disabled = this.disabled;\n }\n\n native.classList.add('native-button');\n native.setAttribute('part', 'native');\n\n this.classList.remove('wje-button-disabled');\n\n if (this.disabled) native.classList.add('wje-button-disabled');\n\n if (this.variant) native.classList.add('wje-button-' + this.variant);\n\n if (this.hasAttribute('round')) native.classList.add('wje-button-round');\n\n if (this.hasAttribute('circle')) native.classList.add('wje-button-circle');\n\n if (this.outline) native.classList.add('wje-outline');\n\n if (this.fill) native.classList.add('wje-button-' + this.fill);\n\n if (this.size) native.classList.add('wje-button-' + this.size);\n\n if (\n (this.querySelectorAll('[slot=caret]').length < 1 && this.hasAttribute('caret')) ||\n this.hasAttribute('only-caret')\n ) {\n let i = document.createElement('wje-icon');\n i.style.setProperty('--wje-icon-size', '14px');\n i.setAttribute('slot', 'caret');\n i.setAttribute('name', 'chevron-down');\n i.setAttribute('part', 'caret');\n\n this.appendChild(i);\n }\n\n if (this.active) {\n this.classList.add('wje-active');\n let i = document.createElement('wje-icon');\n i.setAttribute('name', 'check');\n\n this.appendChild(i);\n }\n\n native.classList.add('wje-color-' + this.color, 'wje-color');\n\n let span = document.createElement('span');\n span.setAttribute('part', 'inner');\n span.classList.add('button-inner');\n\n let slot = document.createElement('slot');\n slot.setAttribute('name', 'icon-only');\n span.appendChild(slot);\n\n slot = document.createElement('slot');\n slot.setAttribute('name', 'start');\n span.appendChild(slot);\n\n slot = document.createElement('slot');\n span.appendChild(slot);\n\n slot = document.createElement('slot');\n slot.setAttribute('name', 'end');\n span.appendChild(slot);\n\n slot = document.createElement('slot');\n slot.setAttribute('name', 'caret');\n span.appendChild(slot);\n\n this.hasToggle = WjElementUtils.hasSlot(this, 'toggle');\n\n if (this.hasToggle) {\n this.slotToggle = document.createElement('slot');\n this.slotToggle.setAttribute('name', 'toggle');\n\n span.appendChild(this.slotToggle);\n }\n\n native.appendChild(span);\n\n if (this.tooltip) {\n let tooltip = document.createElement('wje-tooltip');\n tooltip.setAttribute('content', this.getAttribute('tooltip'));\n tooltip.setAttribute('placement', this.getAttribute('tooltip-placement') || 'top');\n tooltip.appendChild(native);\n\n fragment.appendChild(tooltip);\n } else {\n fragment.appendChild(native);\n }\n\n return fragment;\n }\n\n /**\n * After draw method for the Button element.\n */\n afterDraw() {\n if (this.hasAttribute('route')) {\n this.unbindRouterLinks = bindRouterLinks(this.parentElement, { selector: false });\n }\n\n // nastavenie toggle podla atributu, ak nie je nastaveny, tak sa zobrazi vzdy prvy element\n if (this.hasToggle) this.syncToggleState();\n\n if (this.hasAttribute('custom-event')) {\n event.addListener(this, 'click', null, this.#populateCustomEvent);\n }\n\n if (this.hasAttribute('dialog')) {\n event.addListener(this, 'click', null, this.eventDialogOpen);\n } else {\n event.addListener(this, 'click', 'wje-button:click', null); // { stopPropagation: this.stopPropagation } - zrusene kvoli dropdown kde som nevedel odchytit event click\n }\n\n if (this.hasToggle)\n event.addListener(this, 'click', 'wje-button:toggle', this.toggleStates, {\n stopPropagation: this.stopPropagation,\n });\n\n if (this.type === 'submit') {\n event.addListener(this, 'click', 'wje-button:submit', () => {\n event.dispatchCustomEvent(this.internals?.form, 'submit', {});\n });\n }\n\n if (this.type === 'reset') {\n event.addListener(this, 'click', 'wje-button:reset', () => {\n this.internals?.form.reset();\n });\n }\n\n this.syncAria();\n }\n\n /**\n * Before disconnect method for the Button element.\n */\n beforeDisconnect() {\n // remove all events from the button\n event.removeListener(this, 'click', null, this.eventDialogOpen);\n event.removeListener(this, 'click', 'wje-button:click', null);\n event.removeListener(this, 'click', 'wje-button:toggle', this.toggleStates);\n event.removeListener(this, 'click', null, this.#populateCustomEvent);\n event.removeListener(this, 'click', 'wje-button:submit', null);\n event.removeListener(this, 'click', 'wje-button:reset', null);\n\n this.removeEventListener('click', this.eventDialogOpen);\n this.unbindRouterLinks?.();\n }\n\n /**\n * Event dialog open method for the Button element.\n * @param {Event} e The event object\n */\n eventDialogOpen = (e) => {\n event.dispatchCustomEvent(this, this.dialog);\n };\n\n /**\n * Toggle states method for the Button element.\n */\n toggleStates = () => {\n this.setAttribute('value', this.getAttribute('value') === 'on' ? 'off' : 'on');\n this.syncToggleState();\n this.syncAria();\n }\n\n /**\n * Keeps toggle slot visibility aligned with the current value.\n */\n syncToggleState() {\n const nodes = this.slotToggle?.assignedElements?.({ flatten: true }) || [];\n const state = this.getAttribute('value') || this.getAttribute('toggle') || 'on';\n const selectedIndex = state === 'off' ? 1 : 0;\n const selected = nodes[selectedIndex] || nodes[0];\n\n nodes.forEach((node) => node.classList.remove('show'));\n selected?.classList.add('show');\n\n if (state !== this.getAttribute('value')) {\n this.setAttribute('value', state);\n }\n }\n\n /**\n * Syncs accessibility attributes on the internal native control.\n */\n syncAria() {\n const native = this.native || this.context?.querySelector('.native-button');\n if (!native) return;\n\n const isLink = this.hasAttribute('href');\n const isToggle = !!this.hasToggle;\n const pressed = isToggle && !isLink ? this.getAttribute('value') === 'on' : undefined;\n const label = this.label || this.getAttribute('aria-label');\n\n if (label) {\n native.setAttribute('aria-label', label);\n } else {\n native.removeAttribute('aria-label');\n }\n\n if (isLink) {\n if (this.disabled) {\n native.removeAttribute('href');\n native.setAttribute('aria-disabled', 'true');\n native.setAttribute('tabindex', '-1');\n } else {\n native.setAttribute('href', this.getAttribute('href'));\n native.removeAttribute('aria-disabled');\n native.removeAttribute('tabindex');\n }\n } else {\n native.disabled = this.disabled;\n native.removeAttribute('aria-disabled');\n }\n\n if (pressed === undefined) {\n native.removeAttribute('aria-pressed');\n } else {\n native.setAttribute('aria-pressed', pressed ? 'true' : 'false');\n }\n }\n\n /**\n * Dispatches a custom event with specified parameters.\n * This method uses the `customEvent` and `customEventParameters` properties\n * to create and dispatch a `CustomEvent`. The event is configured to be\n * composed and bubbles up through the DOM.\n * @returns {void} This method does not return a value.\n */\n #populateCustomEvent() {\n this.dispatchEvent(\n new CustomEvent(this.customEvent, { detail: this.customEventParameters, composed: true, bubbles: true })\n );\n }\n}\n","import Button from './button.element.js';\n\nexport default Button;\n\nButton.define('wje-button', Button);\n"],"names":[],"mappings":"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"}
|
package/dist/wje-chip.js
CHANGED
|
@@ -137,7 +137,7 @@ class Chip extends WJElement {
|
|
|
137
137
|
remove.setAttribute("part", "remove");
|
|
138
138
|
remove.setAttribute("fill", "link");
|
|
139
139
|
remove.setAttribute("color", this.color || "default");
|
|
140
|
-
remove.setAttribute("
|
|
140
|
+
remove.setAttribute("label", "Remove");
|
|
141
141
|
remove.round = !this.round;
|
|
142
142
|
if (this.hasAttribute("size")) {
|
|
143
143
|
if (this.size === "small") {
|
package/dist/wje-chip.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"wje-chip.js","sources":["../packages/wje-chip/chip.element.js","../packages/wje-chip/chip.js"],"sourcesContent":["import { default as WJElement, event, WjElementUtils } from '../wje-element/element.js';\nimport styles from './styles/styles.css?inline';\n\n/**\n * @summary This method dispatches a custom event named \"wje-chip:remove\".\n * It is triggered when the remove button is clicked, which happens when the chip is removed.\n * The event is dispatched on the current instance of the Chip class.\n * @documentation https://elements.webjet.sk/components/chip\n * @status stable\n * @augments WJElement\n * @slot start - The chip leading content.\n * @slot - The chip main content.\n * @slot end - The chip trailing content.\n * @csspart native - The component's native wrapper.\n * //@fires wje-chip:remove - Dispatched when the chip is removed;\n */\nexport default class Chip extends WJElement {\n /**\n * Chip constructor method.\n */\n constructor() {\n super();\n }\n\n /**\n * Sets or removes the \"round\" attribute on the element based on the provided value.\n * @param {boolean} value Determines whether the \"round\" attribute should be set or removed.\n * If true, the \"round\" attribute is added. If false, the \"round\"\n * attribute is removed.\n */\n set round(value) {\n if (value) {\n this.setAttribute('round', '');\n } else {\n this.removeAttribute('round');\n }\n }\n\n /**\n * Checks if the 'round' attribute is present on the element.\n * @returns {boolean} Returns true if the 'round' attribute exists, otherwise false.\n */\n get round() {\n return this.hasAttribute('round');\n }\n\n /**\n * Sets the size attribute of the element.\n * @param {string} value The value to set for the size attribute.\n */\n set size(value) {\n this.setAttribute('size', value);\n }\n\n /**\n * Retrieves the 'size' attribute of the current element.\n * @returns {string | null} The value of the 'size' attribute, or null if the attribute is not set.\n */\n get size() {\n return this.getAttribute('size');\n }\n\n /**\n * Sets or removes the \"removable\" attribute on the element.\n * @param {boolean} value A boolean indicating whether the element should have the \"removable\" attribute.\n * If true, the \"removable\" attribute is added;\n * if false, the \"removable\" attribute is removed.\n */\n set removable(value) {\n if (value) {\n this.setAttribute('removable', '');\n } else {\n this.removeAttribute('removable');\n }\n }\n\n /**\n * Determines if the element has the 'removable' attribute.\n * @returns {boolean} True if the element has the 'removable' attribute, otherwise false.\n */\n get removable() {\n return this.hasAttribute('removable');\n }\n\n /**\n * Sets the disabled state of the element.\n * If true, the 'disabled' attribute is added to the element.\n * If false, the 'disabled' attribute is removed from the element.\n * @param {boolean} value Specifies whether the element should be disabled.\n */\n set disabled(value) {\n if (value) {\n this.setAttribute('disabled', '');\n } else {\n this.removeAttribute('disabled');\n }\n }\n\n /**\n * Determines if the element has the 'disabled' attribute.\n * @returns {boolean} True if the element has the 'disabled' attribute, otherwise false.\n */\n get disabled() {\n return this.hasAttribute('disabled');\n }\n\n /**\n * Class name for the Chip element.\n * @type {string}\n */\n className = 'Chip';\n\n /**\n * Getter for the CSS stylesheet.\n * @returns {*}\n */\n static get cssStyleSheet() {\n return styles;\n }\n\n /**\n * Getter for the observed attributes.\n */\n setupAttributes() {\n this.isShadowRoot = 'open';\n this.syncAria();\n }\n\n static get observedAttributes() {\n return ['removable', 'disabled', 'label'];\n }\n\n attributeChangedCallback(name, oldValue, newValue) {\n super.attributeChangedCallback?.(name, oldValue, newValue);\n if (name === 'removable' || name === 'disabled' || name === 'label') {\n this.syncAria();\n }\n }\n\n /**\n * Draws the Chip element.\n * @returns {DocumentFragment}\n */\n draw() {\n let fragment = document.createDocumentFragment();\n\n let native = document.createElement('div');\n native.setAttribute('part', 'native');\n native.classList.add('native-chip');\n\n let slotStart = document.createElement('slot');\n slotStart.setAttribute('name', 'start');\n\n let content = document.createElement('span');\n content.setAttribute('part', 'content');\n content.classList.add('content');\n\n let slot = document.createElement('slot');\n content.appendChild(slot);\n\n let slotEnd = document.createElement('slot');\n slotEnd.setAttribute('name', 'end');\n\n let remove = document.createElement('wje-button');\n remove.setAttribute('part', 'remove');\n remove.setAttribute('fill', 'link');\n remove.setAttribute('color', this.color || 'default');\n remove.setAttribute('aria-label', 'Remove');\n remove.round = !this.round;\n\n if(this.hasAttribute('size')) {\n if(this.size === 'small') {\n remove.innerHTML = `<wje-icon name=\"x\" size=\"small\"></wje-icon>`;\n } else if (this.size === 'large') {\n remove.innerHTML = `<wje-icon name=\"x\"></wje-icon>`;\n }\n } else {\n remove.innerHTML = `<wje-icon name=\"x\"></wje-icon>`;\n }\n\n let active = document.createElement('wje-icon');\n active.setAttribute('name', 'check');\n active.classList.add('check');\n\n // Add color\n if (this.hasAttribute('color')) native.classList.add('wje-color-' + this.color, 'wje-color');\n else native.classList.add('wje-color-default', 'wje-color');\n\n if (this.disabled) this.classList.add('wje-disabled');\n\n if (this.outline) this.classList.add('wje-outline');\n\n native.appendChild(slotStart);\n native.appendChild(content);\n native.appendChild(slotEnd);\n native.appendChild(active);\n\n if (this.removable) native.appendChild(remove);\n\n fragment.appendChild(native);\n\n this.removeElement = remove;\n this.slotStart = slotStart;\n this.slotEnd = slotEnd;\n\n return fragment;\n }\n\n /**\n * Syncs ARIA attributes on the host element.\n */\n syncAria() {\n const label = this.getAttribute('label')?.trim();\n if (label) this.setAriaState({ label });\n if (this.removable) this.setAriaState({ role: 'button', disabled: this.disabled });\n else this.setAriaState({ role: 'status' });\n }\n\n /**\n * Getter for the observed attributes.\n */\n afterDraw() {\n if (WjElementUtils.hasSlotContent(this.context, 'start')) this.slotStart.classList.add('has-content');\n if (WjElementUtils.hasSlotContent(this.context, 'end')) this.slotEnd.classList.add('has-content');\n\n event.addListener(this.removeElement, 'click', 'wje:chip-remove', null, { stopPropagation: true });\n }\n\n /**\n * Before disconnect event for the Chip element.\n */\n beforeDisconnect() {\n event.removeListener(this.removeElement, 'click', 'wje:chip-remove');\n }\n}\n","import { default as WJElement } from '../wje-element/element.js';\nimport Chip from './chip.element.js';\n\n// export * from \"./chip.element.js\";\nexport default Chip;\n\nWJElement.define('wje-chip', Chip);\n"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"wje-chip.js","sources":["../packages/wje-chip/chip.element.js","../packages/wje-chip/chip.js"],"sourcesContent":["import { default as WJElement, event, WjElementUtils } from '../wje-element/element.js';\nimport styles from './styles/styles.css?inline';\n\n/**\n * @summary This method dispatches a custom event named \"wje-chip:remove\".\n * It is triggered when the remove button is clicked, which happens when the chip is removed.\n * The event is dispatched on the current instance of the Chip class.\n * @documentation https://elements.webjet.sk/components/chip\n * @status stable\n * @augments WJElement\n * @slot start - The chip leading content.\n * @slot - The chip main content.\n * @slot end - The chip trailing content.\n * @csspart native - The component's native wrapper.\n * //@fires wje-chip:remove - Dispatched when the chip is removed;\n */\nexport default class Chip extends WJElement {\n /**\n * Chip constructor method.\n */\n constructor() {\n super();\n }\n\n /**\n * Sets or removes the \"round\" attribute on the element based on the provided value.\n * @param {boolean} value Determines whether the \"round\" attribute should be set or removed.\n * If true, the \"round\" attribute is added. If false, the \"round\"\n * attribute is removed.\n */\n set round(value) {\n if (value) {\n this.setAttribute('round', '');\n } else {\n this.removeAttribute('round');\n }\n }\n\n /**\n * Checks if the 'round' attribute is present on the element.\n * @returns {boolean} Returns true if the 'round' attribute exists, otherwise false.\n */\n get round() {\n return this.hasAttribute('round');\n }\n\n /**\n * Sets the size attribute of the element.\n * @param {string} value The value to set for the size attribute.\n */\n set size(value) {\n this.setAttribute('size', value);\n }\n\n /**\n * Retrieves the 'size' attribute of the current element.\n * @returns {string | null} The value of the 'size' attribute, or null if the attribute is not set.\n */\n get size() {\n return this.getAttribute('size');\n }\n\n /**\n * Sets or removes the \"removable\" attribute on the element.\n * @param {boolean} value A boolean indicating whether the element should have the \"removable\" attribute.\n * If true, the \"removable\" attribute is added;\n * if false, the \"removable\" attribute is removed.\n */\n set removable(value) {\n if (value) {\n this.setAttribute('removable', '');\n } else {\n this.removeAttribute('removable');\n }\n }\n\n /**\n * Determines if the element has the 'removable' attribute.\n * @returns {boolean} True if the element has the 'removable' attribute, otherwise false.\n */\n get removable() {\n return this.hasAttribute('removable');\n }\n\n /**\n * Sets the disabled state of the element.\n * If true, the 'disabled' attribute is added to the element.\n * If false, the 'disabled' attribute is removed from the element.\n * @param {boolean} value Specifies whether the element should be disabled.\n */\n set disabled(value) {\n if (value) {\n this.setAttribute('disabled', '');\n } else {\n this.removeAttribute('disabled');\n }\n }\n\n /**\n * Determines if the element has the 'disabled' attribute.\n * @returns {boolean} True if the element has the 'disabled' attribute, otherwise false.\n */\n get disabled() {\n return this.hasAttribute('disabled');\n }\n\n /**\n * Class name for the Chip element.\n * @type {string}\n */\n className = 'Chip';\n\n /**\n * Getter for the CSS stylesheet.\n * @returns {*}\n */\n static get cssStyleSheet() {\n return styles;\n }\n\n /**\n * Getter for the observed attributes.\n */\n setupAttributes() {\n this.isShadowRoot = 'open';\n this.syncAria();\n }\n\n static get observedAttributes() {\n return ['removable', 'disabled', 'label'];\n }\n\n attributeChangedCallback(name, oldValue, newValue) {\n super.attributeChangedCallback?.(name, oldValue, newValue);\n if (name === 'removable' || name === 'disabled' || name === 'label') {\n this.syncAria();\n }\n }\n\n /**\n * Draws the Chip element.\n * @returns {DocumentFragment}\n */\n draw() {\n let fragment = document.createDocumentFragment();\n\n let native = document.createElement('div');\n native.setAttribute('part', 'native');\n native.classList.add('native-chip');\n\n let slotStart = document.createElement('slot');\n slotStart.setAttribute('name', 'start');\n\n let content = document.createElement('span');\n content.setAttribute('part', 'content');\n content.classList.add('content');\n\n let slot = document.createElement('slot');\n content.appendChild(slot);\n\n let slotEnd = document.createElement('slot');\n slotEnd.setAttribute('name', 'end');\n\n let remove = document.createElement('wje-button');\n remove.setAttribute('part', 'remove');\n remove.setAttribute('fill', 'link');\n remove.setAttribute('color', this.color || 'default');\n remove.setAttribute('label', 'Remove');\n remove.round = !this.round;\n\n if(this.hasAttribute('size')) {\n if(this.size === 'small') {\n remove.innerHTML = `<wje-icon name=\"x\" size=\"small\"></wje-icon>`;\n } else if (this.size === 'large') {\n remove.innerHTML = `<wje-icon name=\"x\"></wje-icon>`;\n }\n } else {\n remove.innerHTML = `<wje-icon name=\"x\"></wje-icon>`;\n }\n\n let active = document.createElement('wje-icon');\n active.setAttribute('name', 'check');\n active.classList.add('check');\n\n // Add color\n if (this.hasAttribute('color')) native.classList.add('wje-color-' + this.color, 'wje-color');\n else native.classList.add('wje-color-default', 'wje-color');\n\n if (this.disabled) this.classList.add('wje-disabled');\n\n if (this.outline) this.classList.add('wje-outline');\n\n native.appendChild(slotStart);\n native.appendChild(content);\n native.appendChild(slotEnd);\n native.appendChild(active);\n\n if (this.removable) native.appendChild(remove);\n\n fragment.appendChild(native);\n\n this.removeElement = remove;\n this.slotStart = slotStart;\n this.slotEnd = slotEnd;\n\n return fragment;\n }\n\n /**\n * Syncs ARIA attributes on the host element.\n */\n syncAria() {\n const label = this.getAttribute('label')?.trim();\n if (label) this.setAriaState({ label });\n if (this.removable) this.setAriaState({ role: 'button', disabled: this.disabled });\n else this.setAriaState({ role: 'status' });\n }\n\n /**\n * Getter for the observed attributes.\n */\n afterDraw() {\n if (WjElementUtils.hasSlotContent(this.context, 'start')) this.slotStart.classList.add('has-content');\n if (WjElementUtils.hasSlotContent(this.context, 'end')) this.slotEnd.classList.add('has-content');\n\n event.addListener(this.removeElement, 'click', 'wje:chip-remove', null, { stopPropagation: true });\n }\n\n /**\n * Before disconnect event for the Chip element.\n */\n beforeDisconnect() {\n event.removeListener(this.removeElement, 'click', 'wje:chip-remove');\n }\n}\n","import { default as WJElement } from '../wje-element/element.js';\nimport Chip from './chip.element.js';\n\n// export * from \"./chip.element.js\";\nexport default Chip;\n\nWJElement.define('wje-chip', Chip);\n"],"names":[],"mappings":"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"}
|
package/dist/wje-dialog.js
CHANGED
|
@@ -478,7 +478,7 @@ const _Dialog = class _Dialog extends WJElement {
|
|
|
478
478
|
close.setAttribute("fill", "link");
|
|
479
479
|
close.setAttribute("size", "small");
|
|
480
480
|
close.setAttribute("part", "close");
|
|
481
|
-
close.setAttribute("
|
|
481
|
+
close.setAttribute("label", "Close dialog");
|
|
482
482
|
close.addEventListener("click", (e) => {
|
|
483
483
|
this.close(e);
|
|
484
484
|
});
|