wj-elements 0.7.6 → 0.8.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/animations.js +28 -51
- package/dist/animations.js.map +1 -1
- package/dist/base-path.js +19 -31
- package/dist/base-path.js.map +1 -1
- package/dist/custom-elements.json +9053 -9048
- package/dist/dark.css +1 -302
- package/dist/date.js +16 -36
- package/dist/date.js.map +1 -1
- package/dist/element-utils.js +20 -81
- package/dist/element-utils.js.map +1 -1
- package/dist/event.js +49 -165
- package/dist/event.js.map +1 -1
- package/dist/form-associated-element-BjeJn7j8.js +101 -0
- package/dist/{form-associated-element-DEQ4y-jn.js.map → form-associated-element-BjeJn7j8.js.map} +1 -1
- package/dist/icon-DmsqtDpL.js +102 -0
- package/dist/{icon-CReYMzAK.js.map → icon-DmsqtDpL.js.map} +1 -1
- package/dist/light.css +1 -731
- package/dist/localize.js +36 -111
- package/dist/localize.js.map +1 -1
- package/dist/packages/wje-accordion-item/accordion-item.element.d.ts +3 -2
- package/dist/packages/wje-img/img.element.d.ts +4 -4
- package/dist/permissions.js +14 -41
- package/dist/permissions.js.map +1 -1
- package/dist/popup.element-CbkhthPP.js +806 -0
- package/dist/{popup.element-CwXvVFK7.js.map → popup.element-CbkhthPP.js.map} +1 -1
- package/dist/router-links-CNsJ-elb.js +105 -0
- package/dist/{router-links-wjqCnncc.js.map → router-links-CNsJ-elb.js.map} +1 -1
- package/dist/skeleton.css +1 -197
- package/dist/styles.css +1 -866
- package/dist/universal-service.js +48 -109
- package/dist/universal-service.js.map +1 -1
- package/dist/utils.js +11 -18
- package/dist/utils.js.map +1 -1
- package/dist/web-types.json +698 -698
- package/dist/wje-accordion-item.js +33 -106
- package/dist/wje-accordion-item.js.map +1 -1
- package/dist/wje-accordion.js +19 -84
- package/dist/wje-accordion.js.map +1 -1
- package/dist/wje-animation.js +37 -4258
- package/dist/wje-animation.js.map +1 -1
- package/dist/wje-aside.js +9 -34
- package/dist/wje-aside.js.map +1 -1
- package/dist/wje-avatar.js +36 -126
- package/dist/wje-avatar.js.map +1 -1
- package/dist/wje-badge.js +10 -52
- package/dist/wje-badge.js.map +1 -1
- package/dist/wje-breadcrumb.js +205 -668
- package/dist/wje-breadcrumb.js.map +1 -1
- package/dist/wje-breadcrumbs.js +177 -633
- package/dist/wje-breadcrumbs.js.map +1 -1
- package/dist/wje-button-group.js +48 -153
- package/dist/wje-button-group.js.map +1 -1
- package/dist/wje-button.js +92 -413
- package/dist/wje-button.js.map +1 -1
- package/dist/wje-card-content.js +7 -30
- package/dist/wje-card-content.js.map +1 -1
- package/dist/wje-card-controls.js +7 -30
- package/dist/wje-card-controls.js.map +1 -1
- package/dist/wje-card-header.js +7 -30
- package/dist/wje-card-header.js.map +1 -1
- package/dist/wje-card-subtitle.js +7 -34
- package/dist/wje-card-subtitle.js.map +1 -1
- package/dist/wje-card-title.js +7 -34
- package/dist/wje-card-title.js.map +1 -1
- package/dist/wje-card.js +15 -71
- package/dist/wje-card.js.map +1 -1
- package/dist/wje-carousel-item.js +12 -56
- package/dist/wje-carousel-item.js.map +1 -1
- package/dist/wje-carousel.js +154 -509
- package/dist/wje-carousel.js.map +1 -1
- package/dist/wje-checkbox.js +50 -227
- package/dist/wje-checkbox.js.map +1 -1
- package/dist/wje-chip.js +43 -160
- package/dist/wje-chip.js.map +1 -1
- package/dist/wje-col.js +7 -20
- package/dist/wje-col.js.map +1 -1
- package/dist/wje-color-picker.js +445 -1464
- package/dist/wje-color-picker.js.map +1 -1
- package/dist/wje-container.js +9 -35
- package/dist/wje-container.js.map +1 -1
- package/dist/wje-copy-button.js +64 -204
- package/dist/wje-copy-button.js.map +1 -1
- package/dist/wje-dialog.js +85 -553
- package/dist/wje-dialog.js.map +1 -1
- package/dist/wje-divider.js +7 -34
- package/dist/wje-divider.js.map +1 -1
- package/dist/wje-dropdown.js +78 -305
- package/dist/wje-dropdown.js.map +1 -1
- package/dist/wje-element.js +191 -700
- package/dist/wje-element.js.map +1 -1
- package/dist/wje-file-upload-item.js +51 -156
- package/dist/wje-file-upload-item.js.map +1 -1
- package/dist/wje-file-upload.js +181 -619
- package/dist/wje-file-upload.js.map +1 -1
- package/dist/wje-footer.js +7 -31
- package/dist/wje-footer.js.map +1 -1
- package/dist/wje-form.js +7 -32
- package/dist/wje-form.js.map +1 -1
- package/dist/wje-format-digital.js +26 -118
- package/dist/wje-format-digital.js.map +1 -1
- package/dist/wje-grid.js +7 -33
- package/dist/wje-grid.js.map +1 -1
- package/dist/wje-header.js +9 -35
- package/dist/wje-header.js.map +1 -1
- package/dist/wje-icon-library.js +12 -18
- package/dist/wje-icon-library.js.map +1 -1
- package/dist/wje-icon-picker.js +65 -320
- package/dist/wje-icon-picker.js.map +1 -1
- package/dist/wje-icon.js +1 -1
- package/dist/wje-img-comparer.js +37 -114
- package/dist/wje-img-comparer.js.map +1 -1
- package/dist/wje-img.js +50 -197
- package/dist/wje-img.js.map +1 -1
- package/dist/wje-infinite-scroll.js +94 -346
- package/dist/wje-infinite-scroll.js.map +1 -1
- package/dist/wje-input-file.js +23 -84
- package/dist/wje-input-file.js.map +1 -1
- package/dist/wje-input.js +78 -392
- package/dist/wje-input.js.map +1 -1
- package/dist/wje-item.js +11 -64
- package/dist/wje-item.js.map +1 -1
- package/dist/wje-kanban.js +124 -401
- package/dist/wje-kanban.js.map +1 -1
- package/dist/wje-label.js +9 -32
- package/dist/wje-label.js.map +1 -1
- package/dist/wje-level-indicator.js +38 -157
- package/dist/wje-level-indicator.js.map +1 -1
- package/dist/wje-list.js +10 -40
- package/dist/wje-list.js.map +1 -1
- package/dist/wje-main.js +7 -31
- package/dist/wje-main.js.map +1 -1
- package/dist/wje-masonry.js +66 -211
- package/dist/wje-masonry.js.map +1 -1
- package/dist/wje-master.js +45 -161
- package/dist/wje-master.js.map +1 -1
- package/dist/wje-menu-button.js +10 -38
- package/dist/wje-menu-button.js.map +1 -1
- package/dist/wje-menu-item.js +127 -577
- package/dist/wje-menu-item.js.map +1 -1
- package/dist/wje-menu-label.js +9 -35
- package/dist/wje-menu-label.js.map +1 -1
- package/dist/wje-menu.js +14 -49
- package/dist/wje-menu.js.map +1 -1
- package/dist/wje-option.js +48 -279
- package/dist/wje-option.js.map +1 -1
- package/dist/wje-options.js +130 -384
- package/dist/wje-options.js.map +1 -1
- package/dist/wje-orgchart-group.js +16 -52
- package/dist/wje-orgchart-group.js.map +1 -1
- package/dist/wje-orgchart-item.js +24 -93
- package/dist/wje-orgchart-item.js.map +1 -1
- package/dist/wje-orgchart.js +18 -68
- package/dist/wje-orgchart.js.map +1 -1
- package/dist/wje-pagination.js +113 -397
- package/dist/wje-pagination.js.map +1 -1
- package/dist/wje-popup.js +3 -3
- package/dist/wje-popup.js.map +1 -1
- package/dist/wje-progress-bar.js +53 -205
- package/dist/wje-progress-bar.js.map +1 -1
- package/dist/wje-qr-code.js +398 -2980
- package/dist/wje-qr-code.js.map +1 -1
- package/dist/wje-radio-group.js +52 -190
- package/dist/wje-radio-group.js.map +1 -1
- package/dist/wje-radio.js +24 -118
- package/dist/wje-radio.js.map +1 -1
- package/dist/wje-rate.js +62 -266
- package/dist/wje-rate.js.map +1 -1
- package/dist/wje-relative-time.js +24 -99
- package/dist/wje-relative-time.js.map +1 -1
- package/dist/wje-reorder-dropzone.js +9 -31
- package/dist/wje-reorder-dropzone.js.map +1 -1
- package/dist/wje-reorder-handle.js +67 -204
- package/dist/wje-reorder-handle.js.map +1 -1
- package/dist/wje-reorder-item.js +14 -44
- package/dist/wje-reorder-item.js.map +1 -1
- package/dist/wje-reorder.js +61 -246
- package/dist/wje-reorder.js.map +1 -1
- package/dist/wje-route.js +6 -24
- package/dist/wje-route.js.map +1 -1
- package/dist/wje-router-link.js +11 -39
- package/dist/wje-router-link.js.map +1 -1
- package/dist/wje-router-outlet.js +76 -172
- package/dist/wje-router-outlet.js.map +1 -1
- package/dist/wje-routerx.js +537 -1331
- package/dist/wje-routerx.js.map +1 -1
- package/dist/wje-row.js +9 -31
- package/dist/wje-row.js.map +1 -1
- package/dist/wje-select.js +326 -1152
- package/dist/wje-select.js.map +1 -1
- package/dist/wje-slider.js +44 -225
- package/dist/wje-slider.js.map +1 -1
- package/dist/wje-sliding-container.js +295 -1319
- package/dist/wje-sliding-container.js.map +1 -1
- package/dist/wje-split-view.js +35 -121
- package/dist/wje-split-view.js.map +1 -1
- package/dist/wje-status.js +14 -45
- package/dist/wje-status.js.map +1 -1
- package/dist/wje-step.js +9 -32
- package/dist/wje-step.js.map +1 -1
- package/dist/wje-stepper.js +109 -357
- package/dist/wje-stepper.js.map +1 -1
- package/dist/wje-store.js +67 -360
- package/dist/wje-store.js.map +1 -1
- package/dist/wje-tab-group.js +85 -314
- package/dist/wje-tab-group.js.map +1 -1
- package/dist/wje-tab-panel.js +7 -28
- package/dist/wje-tab-panel.js.map +1 -1
- package/dist/wje-tab.js +21 -198
- package/dist/wje-tab.js.map +1 -1
- package/dist/wje-textarea.js +64 -264
- package/dist/wje-textarea.js.map +1 -1
- package/dist/wje-thumbnail.js +10 -51
- package/dist/wje-thumbnail.js.map +1 -1
- package/dist/wje-toast.js +127 -632
- package/dist/wje-toast.js.map +1 -1
- package/dist/wje-toggle.js +52 -177
- package/dist/wje-toggle.js.map +1 -1
- package/dist/wje-toolbar-action.js +128 -456
- package/dist/wje-toolbar-action.js.map +1 -1
- package/dist/wje-toolbar.js +75 -270
- package/dist/wje-toolbar.js.map +1 -1
- package/dist/wje-tooltip.js +50 -161
- package/dist/wje-tooltip.js.map +1 -1
- package/dist/wje-tree-item.js +70 -301
- package/dist/wje-tree-item.js.map +1 -1
- package/dist/wje-tree.js +145 -489
- package/dist/wje-tree.js.map +1 -1
- package/dist/wje-visually-hidden.js +7 -34
- package/dist/wje-visually-hidden.js.map +1 -1
- package/package.json +4 -2
- package/dist/form-associated-element-DEQ4y-jn.js +0 -245
- package/dist/icon-CReYMzAK.js +0 -245
- package/dist/popup.element-CwXvVFK7.js +0 -2133
- package/dist/router-links-wjqCnncc.js +0 -156
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"wje-toolbar-action.js","sources":["../packages/wje-toolbar-action/toolbar-action.element.js","../packages/wje-toolbar-action/toolbar-action.js"],"sourcesContent":["import { default as WJElement } from '../wje-element/element.js';\nimport styles from './styles/styles.css?inline';\n\n/**\n * `ToolbarAction` is a custom web component that represents a toolbar action.\n * @summary This element represents a toolbar action.\n * @documentation https://elements.webjet.sk/components/toolbar-action\n * @status stable\n * @augments {WJElement}\n * @csspart native - The native toolbar action wrapper.\n * @slot - The default slot for the toolbar action.\n * @tag wje-toolbar-action\n */\nexport default class ToolbarAction extends WJElement {\n static BREAKPOINTS = {\n sm: 576,\n md: 768,\n lg: 992,\n xl: 1200,\n '2xl': 1450,\n xxl: 1450,\n };\n\n /**\n * Creates an instance of ToolbarAction.\n */\n constructor() {\n super();\n this._managedHiddenActions = new WeakSet();\n this._isCollapsedByBreakpoint = null;\n this._managedOverflowNodes = new WeakSet();\n this._overflowRetryFrame = null;\n this._applyOverflowFrame = null;\n this._observedDropdown = null;\n }\n\n /**\n * The class name for the component.\n * @type {string}\n */\n className = 'ToolbarAction';\n\n /**\n * Returns the CSS stylesheet for the component.\n * @static\n * @returns {CSSStyleSheet} The CSS stylesheet\n */\n static get cssStyleSheet() {\n return styles;\n }\n\n /**\n * Returns the list of observed attributes.\n * @static\n * @returns {Array} An empty array\n */\n static get observedAttributes() {\n return ['breakpoint', 'max-items', 'visible-items'];\n }\n\n /**\n * Sets the collapse breakpoint token or value.\n * @param {string} value Breakpoint token or CSS size.\n */\n set breakpoint(value) {\n if (value) this.setAttribute('breakpoint', value);\n else this.removeAttribute('breakpoint');\n }\n\n /**\n * Gets the collapse breakpoint token or value.\n * @returns {string}\n */\n get breakpoint() {\n return this.getAttribute('breakpoint') || '';\n }\n\n /**\n * Sets the maximum number of visible actions.\n * @param {number|string} value The maximum number of visible actions.\n */\n set maxItems(value) {\n this.setAttribute('max-items', value || 0);\n }\n\n /**\n * Gets the maximum number of visible actions.\n * @returns {number}\n */\n get maxItems() {\n return +this.getAttribute('max-items') || 0;\n }\n\n /**\n * Sets the responsive visible action count.\n * @param {number|string} value The visible action count.\n */\n set visibleItems(value) {\n if (value === null || value === undefined || value === '') {\n this.removeAttribute('visible-items');\n return;\n }\n\n this.setAttribute('visible-items', value);\n }\n\n /**\n * Gets the responsive visible action count.\n * @returns {number|null}\n */\n get visibleItems() {\n if (!this.hasAttribute('visible-items')) return null;\n const value = +this.getAttribute('visible-items');\n return Number.isFinite(value) ? value : null;\n }\n\n /**\n * Sets up the attributes for the component.\n */\n setupAttributes() {\n this.isShadowRoot = 'open';\n }\n\n /**\n * Draws the component for the toolbar action.\n * @returns {object} Document fragment\n */\n draw() {\n let fragment = document.createDocumentFragment();\n\n let slot = document.createElement('slot');\n\n let element = document.createElement('div');\n element.setAttribute('part', 'native');\n element.classList.add('native-toolbar-action');\n\n let dropdown = document.createElement('wje-dropdown');\n dropdown.setAttribute('placement', 'bottom-end');\n dropdown.setAttribute('collapsible', '');\n dropdown.classList.add('toolbar-action-more');\n dropdown.hidden = true;\n\n let trigger = document.createElement('wje-button');\n trigger.setAttribute('slot', 'trigger');\n trigger.setAttribute('fill', 'link');\n trigger.setAttribute('aria-label', 'Show more actions');\n trigger.innerHTML = '<wje-icon name=\"dots\"></wje-icon>';\n\n let menu = document.createElement('wje-menu');\n menu.setAttribute('variant', 'context');\n\n dropdown.append(trigger, menu);\n\n element.appendChild(slot);\n element.appendChild(dropdown);\n\n fragment.appendChild(element);\n\n this.defaultSlot = slot;\n this.native = element;\n this.moreDropdown = dropdown;\n this.moreMenu = menu;\n\n return fragment;\n }\n\n /**\n * Applies the current visible action limit after the component is drawn.\n */\n afterDraw() {\n this.onSlotChange = () => {\n this.observeExistingDropdown();\n this.scheduleOverflow();\n };\n this.defaultSlot?.addEventListener('slotchange', this.onSlotChange);\n this.handleResize = () => this.handleBreakpointResize();\n\n if (this.getBreakpointWidth()) {\n window.addEventListener('resize', this.handleResize);\n }\n\n this.observeExistingDropdown();\n this.scheduleOverflow(true);\n }\n\n /**\n * Removes listeners after disconnect.\n */\n afterDisconnect() {\n this.defaultSlot?.removeEventListener('slotchange', this.onSlotChange);\n window.removeEventListener('resize', this.handleResize);\n this._isCollapsedByBreakpoint = null;\n\n if (this._overflowRetryFrame) {\n cancelAnimationFrame(this._overflowRetryFrame);\n this._overflowRetryFrame = null;\n }\n\n if (this._applyOverflowFrame) {\n cancelAnimationFrame(this._applyOverflowFrame);\n this._applyOverflowFrame = null;\n }\n\n this._dropdownObserver?.disconnect();\n this._dropdownObserver = null;\n this._observedDropdown = null;\n }\n\n /**\n * Schedules overflow application after layout settles.\n * @param {boolean} [doubleFrame] Wait an extra frame for initial render/hydration.\n */\n scheduleOverflow(doubleFrame = false) {\n if (this._applyOverflowFrame) return;\n\n this._applyOverflowFrame = requestAnimationFrame(() => {\n this._applyOverflowFrame = null;\n\n if (doubleFrame) {\n this.scheduleOverflow(false);\n return;\n }\n\n this.applyOverflow();\n });\n }\n\n /**\n * Returns the actions for the toolbar action.\n * @returns {Array<HTMLElement>} Managed toolbar actions.\n */\n getActions() {\n return this.getAssignedElements().filter(\n (element) =>\n element.getAttribute('slot') !== 'trigger' &&\n (element.tagName?.toLowerCase() === 'wje-button' || element.hasAttribute('data-toolbar-action'))\n );\n }\n\n /**\n * Returns direct children assigned to the default slot.\n * @returns {Array<HTMLElement>}\n */\n getAssignedElements() {\n return this.defaultSlot?.assignedElements?.() || Array.from(this.children);\n }\n\n /**\n * Returns an existing top-level dropdown if present.\n * @returns {HTMLElement|null}\n */\n getExistingDropdown() {\n return this.getAssignedElements().find((element) => element.tagName?.toLowerCase() === 'wje-dropdown') || null;\n }\n\n /**\n * Observes the external dropdown for late menu/content changes.\n */\n observeExistingDropdown() {\n const dropdown = this.getExistingDropdown();\n\n if (dropdown === this._observedDropdown) return;\n\n this._dropdownObserver?.disconnect();\n this._dropdownObserver = null;\n this._observedDropdown = dropdown;\n\n if (!dropdown || typeof MutationObserver !== 'function') return;\n\n this._dropdownObserver = new MutationObserver(() => this.scheduleOverflow());\n this._dropdownObserver.observe(dropdown, {\n childList: true,\n subtree: false,\n });\n }\n\n /**\n * Returns the dropdown that should receive overflow items.\n * @returns {HTMLElement}\n */\n getOverflowDropdown() {\n return this.getExistingDropdown() || this.moreDropdown;\n }\n\n /**\n * Returns the menu used for overflow items.\n * @returns {HTMLElement|null}\n */\n getOverflowMenu() {\n const existingDropdown = this.getExistingDropdown();\n\n if (existingDropdown) {\n return (\n Array.from(existingDropdown.children).find((element) => element.tagName?.toLowerCase() === 'wje-menu') ||\n null\n );\n }\n\n return this.moreMenu;\n }\n\n /**\n * Gets the number of actions that should stay visible.\n * @returns {number}\n */\n getVisibleLimit() {\n const actions = this.getActions();\n\n if (this.isCollapsedByBreakpoint()) {\n return 0;\n }\n\n const maxItems = this.maxItems > 0 ? this.maxItems : actions.length;\n const visibleItems = this.visibleItems;\n const limit = visibleItems === null ? maxItems : Math.min(visibleItems, maxItems);\n\n return Math.max(0, Math.min(limit, actions.length));\n }\n\n /**\n * Returns whether the toolbar action should collapse based on the configured breakpoint.\n * @returns {boolean}\n */\n shouldCollapseByBreakpoint() {\n const breakpointWidth = this.getBreakpointWidth();\n\n if (!breakpointWidth) return false;\n\n return window.innerWidth < breakpointWidth;\n }\n\n /**\n * Returns the cached breakpoint collapse state.\n * @returns {boolean}\n */\n isCollapsedByBreakpoint() {\n if (!this.getBreakpointWidth()) {\n this._isCollapsedByBreakpoint = false;\n return false;\n }\n\n const nextState = this.shouldCollapseByBreakpoint();\n this._isCollapsedByBreakpoint = nextState;\n\n return nextState;\n }\n\n /**\n * Reacts to viewport resize only when the breakpoint mode actually changes.\n * @returns {void}\n */\n handleBreakpointResize() {\n if (!this.getBreakpointWidth()) return;\n\n const nextState = this.shouldCollapseByBreakpoint();\n\n if (this._isCollapsedByBreakpoint === nextState) return;\n\n this._isCollapsedByBreakpoint = nextState;\n this.scheduleOverflow();\n }\n\n /**\n * Resolves the configured breakpoint to a pixel width.\n * @returns {number|null}\n */\n getBreakpointWidth() {\n if (!this.breakpoint) return null;\n\n const token = this.breakpoint.trim().toLowerCase();\n const cssValue = getComputedStyle(this).getPropertyValue(`--wje-toolbar-action-breakpoint-${token}`).trim();\n const namedBreakpoint = ToolbarAction.BREAKPOINTS[token];\n\n if (cssValue) {\n const cssNumber = parseFloat(cssValue);\n if (Number.isFinite(cssNumber)) return cssNumber;\n }\n\n if (Number.isFinite(namedBreakpoint)) {\n return namedBreakpoint;\n }\n\n const directNumber = parseFloat(token);\n return Number.isFinite(directNumber) ? directNumber : null;\n }\n\n /**\n * Updates visible actions and the overflow dropdown.\n * @returns {void}\n */\n applyOverflow() {\n const actions = this.getActions();\n const visibleLimit = this.getVisibleLimit();\n const overflowActions = actions.slice(visibleLimit);\n const existingDropdown = this.getExistingDropdown();\n const overflowMenu = this.getOverflowMenu();\n\n if (this._overflowRetryFrame) {\n cancelAnimationFrame(this._overflowRetryFrame);\n this._overflowRetryFrame = null;\n }\n\n this.restoreManagedActions(actions);\n this.restoreManagedOverflowContent();\n\n if (existingDropdown && overflowActions.length > 0 && !overflowMenu) {\n this._overflowRetryFrame = requestAnimationFrame(() => {\n this._overflowRetryFrame = null;\n this.scheduleOverflow();\n });\n\n return;\n }\n\n if (!existingDropdown) {\n this.moreMenu?.replaceChildren();\n }\n\n overflowActions.forEach((action) => {\n action.hidden = true;\n action.style.display = 'none';\n this._managedHiddenActions.add(action);\n });\n\n if (overflowMenu && existingDropdown && overflowActions.length > 0 && overflowMenu.children.length > 0) {\n overflowMenu.append(this.createOverflowDivider());\n }\n\n overflowActions.forEach((action) => {\n overflowMenu?.append(this.createMenuItem(action));\n });\n\n if (!existingDropdown && this.moreDropdown) {\n this.moreDropdown.hidden = overflowActions.length === 0;\n } else if (existingDropdown && this.moreDropdown) {\n this.moreDropdown.hidden = true;\n }\n }\n\n /**\n * Restores buttons hidden by this component.\n * @param {Array<HTMLElement>} actions Toolbar buttons.\n */\n restoreManagedActions(actions = this.getActions()) {\n actions.forEach((action) => {\n if (this._managedHiddenActions.has(action)) {\n action.hidden = false;\n action.style.removeProperty('display');\n this._managedHiddenActions.delete(action);\n }\n });\n }\n\n /**\n * Removes overflow menu nodes that were previously injected by this component.\n */\n restoreManagedOverflowContent() {\n const dropdown = this.getExistingDropdown();\n\n if (!dropdown) return;\n\n const menu = this.getOverflowMenu();\n if (!menu) return;\n\n Array.from(menu.children).forEach((child) => {\n if (this._managedOverflowNodes.has(child)) {\n child.remove();\n this._managedOverflowNodes.delete(child);\n }\n });\n }\n\n /**\n * Creates a dropdown menu proxy for an overflowed button.\n * @param {HTMLElement} action The original action button.\n * @returns {HTMLElement}\n */\n createMenuItem(action) {\n let menuItem = document.createElement('wje-menu-item');\n menuItem.replaceChildren(...Array.from(action.childNodes).map((node) => this.cloneActionMenuNode(node)));\n\n const label = this.getActionLabel(action);\n if (!menuItem.textContent.trim() && label) {\n menuItem.append(document.createTextNode(label));\n }\n\n if (label) {\n menuItem.setAttribute('aria-label', label);\n }\n\n if (action.hasAttribute('disabled') || action.getAttribute('aria-disabled') === 'true') {\n menuItem.setAttribute('disabled', '');\n }\n\n menuItem.addEventListener('wje-menu-item:click', (e) => this.handleMenuItemClick(e, action));\n menuItem.addEventListener('click', (e) => this.handleMenuItemClick(e, action));\n this._managedOverflowNodes.add(menuItem);\n\n return menuItem;\n }\n\n /**\n * Clones action content for menu usage and normalizes button icon slots.\n * @param {Node} node The source action child node.\n * @returns {Node}\n */\n cloneActionMenuNode(node) {\n const clone = node.cloneNode(true);\n\n if (clone.nodeType === Node.ELEMENT_NODE) {\n this.normalizeActionMenuIconSlot(clone);\n }\n\n return clone;\n }\n\n /**\n * Moves button-only icon slots to the menu item start slot.\n * @param {Element} element The cloned action content node.\n */\n normalizeActionMenuIconSlot(element) {\n if (element.tagName?.toLowerCase() !== 'wje-icon') return;\n\n const slot = element.getAttribute('slot');\n if (!slot || slot === 'icon-only') {\n element.setAttribute('slot', 'start');\n }\n }\n\n /**\n * Resolves readable text for a toolbar action copied into an overflow menu.\n * @param {HTMLElement} action The original action element.\n * @returns {string}\n */\n getActionLabel(action) {\n if (!action) return '';\n\n const explicitLabel = ['aria-label', 'title', 'label', 'data-label', 'tooltip']\n .map((attr) => action.getAttribute(attr)?.trim())\n .find((value) => value && value !== 'true');\n\n if (explicitLabel) return explicitLabel;\n\n return action.textContent.trim();\n }\n\n /**\n * Creates a divider separating existing dropdown actions from responsive overflow actions.\n * @returns {HTMLElement}\n */\n createOverflowDivider() {\n const divider = document.createElement('wje-divider');\n this._managedOverflowNodes.add(divider);\n return divider;\n }\n\n /**\n * Forwards menu item activation to the original button.\n * @param {Event} e The menu event.\n * @param {HTMLElement} action The original action button.\n */\n handleMenuItemClick(e, action) {\n e.preventDefault?.();\n e.stopPropagation();\n\n if (!action || action.hasAttribute('disabled') || action.getAttribute('aria-disabled') === 'true') return;\n\n action.click();\n }\n\n /**\n * Measures action widths while preserving current overflow state.\n * @returns {{count: number, widths: number[], gap: number, moreWidth: number, getWidthForCount: Function}}\n */\n measureActionMetrics() {\n const actions = this.getActions();\n const hasExistingDropdown = !!this.getExistingDropdown();\n\n this.restoreManagedActions(actions);\n\n const widths = actions.map((action) => action.getBoundingClientRect().width);\n const style = this.native ? getComputedStyle(this.native) : null;\n const gap = style ? parseFloat(style.columnGap || style.gap || '0') || 0 : 0;\n const moreWidth = this.measureMoreWidth();\n\n this.applyOverflow();\n\n return {\n count: actions.length,\n widths,\n gap,\n moreWidth,\n getWidthForCount: (visibleCount) => {\n const count = Math.max(0, Math.min(visibleCount, actions.length));\n const overflowCount = actions.length - count;\n const visibleWidth = widths.slice(0, count).reduce((sum, width) => sum + width, 0);\n const visibleGaps = Math.max(count - 1, 0) * gap;\n const usesDropdown = hasExistingDropdown || overflowCount > 0;\n const moreGap = count > 0 && usesDropdown ? gap : 0;\n\n return visibleWidth + visibleGaps + (usesDropdown ? moreWidth + moreGap : 0);\n },\n };\n }\n\n /**\n * Measures the overflow dropdown trigger.\n * @returns {number}\n */\n measureMoreWidth() {\n const dropdown = this.getOverflowDropdown();\n if (!dropdown) return 48;\n\n const isInternalDropdown = dropdown === this.moreDropdown;\n const wasHidden = dropdown.hidden;\n const previousVisibility = dropdown.style.visibility;\n\n if (isInternalDropdown && wasHidden) {\n dropdown.hidden = false;\n dropdown.style.visibility = 'hidden';\n }\n\n const width = dropdown.getBoundingClientRect().width || 48;\n\n if (isInternalDropdown && wasHidden) {\n dropdown.hidden = true;\n dropdown.style.visibility = previousVisibility;\n }\n\n if (dropdown === this.moreDropdown && this.getExistingDropdown()) {\n this.moreDropdown.hidden = true;\n }\n\n return width;\n }\n}\n","import ToolbarAction from './toolbar-action.element.js';\n\nexport default ToolbarAction;\n\nToolbarAction.define('wje-toolbar-action', ToolbarAction);\n"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"wje-toolbar-action.js","sources":["../packages/wje-toolbar-action/toolbar-action.element.js","../packages/wje-toolbar-action/toolbar-action.js"],"sourcesContent":["import { default as WJElement } from '../wje-element/element.js';\nimport styles from './styles/styles.css?inline';\n\n/**\n * `ToolbarAction` is a custom web component that represents a toolbar action.\n * @summary This element represents a toolbar action.\n * @documentation https://elements.webjet.sk/components/toolbar-action\n * @status stable\n * @augments {WJElement}\n * @csspart native - The native toolbar action wrapper.\n * @slot - The default slot for the toolbar action.\n * @tag wje-toolbar-action\n */\nexport default class ToolbarAction extends WJElement {\n static BREAKPOINTS = {\n sm: 576,\n md: 768,\n lg: 992,\n xl: 1200,\n '2xl': 1450,\n xxl: 1450,\n };\n\n /**\n * Creates an instance of ToolbarAction.\n */\n constructor() {\n super();\n this._managedHiddenActions = new WeakSet();\n this._isCollapsedByBreakpoint = null;\n this._managedOverflowNodes = new WeakSet();\n this._overflowRetryFrame = null;\n this._applyOverflowFrame = null;\n this._observedDropdown = null;\n }\n\n /**\n * The class name for the component.\n * @type {string}\n */\n className = 'ToolbarAction';\n\n /**\n * Returns the CSS stylesheet for the component.\n * @static\n * @returns {CSSStyleSheet} The CSS stylesheet\n */\n static get cssStyleSheet() {\n return styles;\n }\n\n /**\n * Returns the list of observed attributes.\n * @static\n * @returns {Array} An empty array\n */\n static get observedAttributes() {\n return ['breakpoint', 'max-items', 'visible-items'];\n }\n\n /**\n * Sets the collapse breakpoint token or value.\n * @param {string} value Breakpoint token or CSS size.\n */\n set breakpoint(value) {\n if (value) this.setAttribute('breakpoint', value);\n else this.removeAttribute('breakpoint');\n }\n\n /**\n * Gets the collapse breakpoint token or value.\n * @returns {string}\n */\n get breakpoint() {\n return this.getAttribute('breakpoint') || '';\n }\n\n /**\n * Sets the maximum number of visible actions.\n * @param {number|string} value The maximum number of visible actions.\n */\n set maxItems(value) {\n this.setAttribute('max-items', value || 0);\n }\n\n /**\n * Gets the maximum number of visible actions.\n * @returns {number}\n */\n get maxItems() {\n return +this.getAttribute('max-items') || 0;\n }\n\n /**\n * Sets the responsive visible action count.\n * @param {number|string} value The visible action count.\n */\n set visibleItems(value) {\n if (value === null || value === undefined || value === '') {\n this.removeAttribute('visible-items');\n return;\n }\n\n this.setAttribute('visible-items', value);\n }\n\n /**\n * Gets the responsive visible action count.\n * @returns {number|null}\n */\n get visibleItems() {\n if (!this.hasAttribute('visible-items')) return null;\n const value = +this.getAttribute('visible-items');\n return Number.isFinite(value) ? value : null;\n }\n\n /**\n * Sets up the attributes for the component.\n */\n setupAttributes() {\n this.isShadowRoot = 'open';\n }\n\n /**\n * Draws the component for the toolbar action.\n * @returns {object} Document fragment\n */\n draw() {\n let fragment = document.createDocumentFragment();\n\n let slot = document.createElement('slot');\n\n let element = document.createElement('div');\n element.setAttribute('part', 'native');\n element.classList.add('native-toolbar-action');\n\n let dropdown = document.createElement('wje-dropdown');\n dropdown.setAttribute('placement', 'bottom-end');\n dropdown.setAttribute('collapsible', '');\n dropdown.classList.add('toolbar-action-more');\n dropdown.hidden = true;\n\n let trigger = document.createElement('wje-button');\n trigger.setAttribute('slot', 'trigger');\n trigger.setAttribute('fill', 'link');\n trigger.setAttribute('label', 'Show more actions');\n trigger.innerHTML = '<wje-icon name=\"dots\"></wje-icon>';\n\n let menu = document.createElement('wje-menu');\n menu.setAttribute('variant', 'context');\n\n dropdown.append(trigger, menu);\n\n element.appendChild(slot);\n element.appendChild(dropdown);\n\n fragment.appendChild(element);\n\n this.defaultSlot = slot;\n this.native = element;\n this.moreDropdown = dropdown;\n this.moreMenu = menu;\n\n return fragment;\n }\n\n /**\n * Applies the current visible action limit after the component is drawn.\n */\n afterDraw() {\n this.onSlotChange = () => {\n this.observeExistingDropdown();\n this.scheduleOverflow();\n };\n this.defaultSlot?.addEventListener('slotchange', this.onSlotChange);\n this.handleResize = () => this.handleBreakpointResize();\n\n if (this.getBreakpointWidth()) {\n window.addEventListener('resize', this.handleResize);\n }\n\n this.observeExistingDropdown();\n this.scheduleOverflow(true);\n }\n\n /**\n * Removes listeners after disconnect.\n */\n afterDisconnect() {\n this.defaultSlot?.removeEventListener('slotchange', this.onSlotChange);\n window.removeEventListener('resize', this.handleResize);\n this._isCollapsedByBreakpoint = null;\n\n if (this._overflowRetryFrame) {\n cancelAnimationFrame(this._overflowRetryFrame);\n this._overflowRetryFrame = null;\n }\n\n if (this._applyOverflowFrame) {\n cancelAnimationFrame(this._applyOverflowFrame);\n this._applyOverflowFrame = null;\n }\n\n this._dropdownObserver?.disconnect();\n this._dropdownObserver = null;\n this._observedDropdown = null;\n }\n\n /**\n * Schedules overflow application after layout settles.\n * @param {boolean} [doubleFrame] Wait an extra frame for initial render/hydration.\n */\n scheduleOverflow(doubleFrame = false) {\n if (this._applyOverflowFrame) return;\n\n this._applyOverflowFrame = requestAnimationFrame(() => {\n this._applyOverflowFrame = null;\n\n if (doubleFrame) {\n this.scheduleOverflow(false);\n return;\n }\n\n this.applyOverflow();\n });\n }\n\n /**\n * Returns the actions for the toolbar action.\n * @returns {Array<HTMLElement>} Managed toolbar actions.\n */\n getActions() {\n return this.getAssignedElements().filter(\n (element) =>\n element.getAttribute('slot') !== 'trigger' &&\n (element.tagName?.toLowerCase() === 'wje-button' || element.hasAttribute('data-toolbar-action'))\n );\n }\n\n /**\n * Returns direct children assigned to the default slot.\n * @returns {Array<HTMLElement>}\n */\n getAssignedElements() {\n return this.defaultSlot?.assignedElements?.() || Array.from(this.children);\n }\n\n /**\n * Returns an existing top-level dropdown if present.\n * @returns {HTMLElement|null}\n */\n getExistingDropdown() {\n return this.getAssignedElements().find((element) => element.tagName?.toLowerCase() === 'wje-dropdown') || null;\n }\n\n /**\n * Observes the external dropdown for late menu/content changes.\n */\n observeExistingDropdown() {\n const dropdown = this.getExistingDropdown();\n\n if (dropdown === this._observedDropdown) return;\n\n this._dropdownObserver?.disconnect();\n this._dropdownObserver = null;\n this._observedDropdown = dropdown;\n\n if (!dropdown || typeof MutationObserver !== 'function') return;\n\n this._dropdownObserver = new MutationObserver(() => this.scheduleOverflow());\n this._dropdownObserver.observe(dropdown, {\n childList: true,\n subtree: false,\n });\n }\n\n /**\n * Returns the dropdown that should receive overflow items.\n * @returns {HTMLElement}\n */\n getOverflowDropdown() {\n return this.getExistingDropdown() || this.moreDropdown;\n }\n\n /**\n * Returns the menu used for overflow items.\n * @returns {HTMLElement|null}\n */\n getOverflowMenu() {\n const existingDropdown = this.getExistingDropdown();\n\n if (existingDropdown) {\n return (\n Array.from(existingDropdown.children).find((element) => element.tagName?.toLowerCase() === 'wje-menu') ||\n null\n );\n }\n\n return this.moreMenu;\n }\n\n /**\n * Gets the number of actions that should stay visible.\n * @returns {number}\n */\n getVisibleLimit() {\n const actions = this.getActions();\n\n if (this.isCollapsedByBreakpoint()) {\n return 0;\n }\n\n const maxItems = this.maxItems > 0 ? this.maxItems : actions.length;\n const visibleItems = this.visibleItems;\n const limit = visibleItems === null ? maxItems : Math.min(visibleItems, maxItems);\n\n return Math.max(0, Math.min(limit, actions.length));\n }\n\n /**\n * Returns whether the toolbar action should collapse based on the configured breakpoint.\n * @returns {boolean}\n */\n shouldCollapseByBreakpoint() {\n const breakpointWidth = this.getBreakpointWidth();\n\n if (!breakpointWidth) return false;\n\n return window.innerWidth < breakpointWidth;\n }\n\n /**\n * Returns the cached breakpoint collapse state.\n * @returns {boolean}\n */\n isCollapsedByBreakpoint() {\n if (!this.getBreakpointWidth()) {\n this._isCollapsedByBreakpoint = false;\n return false;\n }\n\n const nextState = this.shouldCollapseByBreakpoint();\n this._isCollapsedByBreakpoint = nextState;\n\n return nextState;\n }\n\n /**\n * Reacts to viewport resize only when the breakpoint mode actually changes.\n * @returns {void}\n */\n handleBreakpointResize() {\n if (!this.getBreakpointWidth()) return;\n\n const nextState = this.shouldCollapseByBreakpoint();\n\n if (this._isCollapsedByBreakpoint === nextState) return;\n\n this._isCollapsedByBreakpoint = nextState;\n this.scheduleOverflow();\n }\n\n /**\n * Resolves the configured breakpoint to a pixel width.\n * @returns {number|null}\n */\n getBreakpointWidth() {\n if (!this.breakpoint) return null;\n\n const token = this.breakpoint.trim().toLowerCase();\n const cssValue = getComputedStyle(this).getPropertyValue(`--wje-toolbar-action-breakpoint-${token}`).trim();\n const namedBreakpoint = ToolbarAction.BREAKPOINTS[token];\n\n if (cssValue) {\n const cssNumber = parseFloat(cssValue);\n if (Number.isFinite(cssNumber)) return cssNumber;\n }\n\n if (Number.isFinite(namedBreakpoint)) {\n return namedBreakpoint;\n }\n\n const directNumber = parseFloat(token);\n return Number.isFinite(directNumber) ? directNumber : null;\n }\n\n /**\n * Updates visible actions and the overflow dropdown.\n * @returns {void}\n */\n applyOverflow() {\n const actions = this.getActions();\n const visibleLimit = this.getVisibleLimit();\n const overflowActions = actions.slice(visibleLimit);\n const existingDropdown = this.getExistingDropdown();\n const overflowMenu = this.getOverflowMenu();\n\n if (this._overflowRetryFrame) {\n cancelAnimationFrame(this._overflowRetryFrame);\n this._overflowRetryFrame = null;\n }\n\n this.restoreManagedActions(actions);\n this.restoreManagedOverflowContent();\n\n if (existingDropdown && overflowActions.length > 0 && !overflowMenu) {\n this._overflowRetryFrame = requestAnimationFrame(() => {\n this._overflowRetryFrame = null;\n this.scheduleOverflow();\n });\n\n return;\n }\n\n if (!existingDropdown) {\n this.moreMenu?.replaceChildren();\n }\n\n overflowActions.forEach((action) => {\n action.hidden = true;\n action.style.display = 'none';\n this._managedHiddenActions.add(action);\n });\n\n if (overflowMenu && existingDropdown && overflowActions.length > 0 && overflowMenu.children.length > 0) {\n overflowMenu.append(this.createOverflowDivider());\n }\n\n overflowActions.forEach((action) => {\n overflowMenu?.append(this.createMenuItem(action));\n });\n\n if (!existingDropdown && this.moreDropdown) {\n this.moreDropdown.hidden = overflowActions.length === 0;\n } else if (existingDropdown && this.moreDropdown) {\n this.moreDropdown.hidden = true;\n }\n }\n\n /**\n * Restores buttons hidden by this component.\n * @param {Array<HTMLElement>} actions Toolbar buttons.\n */\n restoreManagedActions(actions = this.getActions()) {\n actions.forEach((action) => {\n if (this._managedHiddenActions.has(action)) {\n action.hidden = false;\n action.style.removeProperty('display');\n this._managedHiddenActions.delete(action);\n }\n });\n }\n\n /**\n * Removes overflow menu nodes that were previously injected by this component.\n */\n restoreManagedOverflowContent() {\n const dropdown = this.getExistingDropdown();\n\n if (!dropdown) return;\n\n const menu = this.getOverflowMenu();\n if (!menu) return;\n\n Array.from(menu.children).forEach((child) => {\n if (this._managedOverflowNodes.has(child)) {\n child.remove();\n this._managedOverflowNodes.delete(child);\n }\n });\n }\n\n /**\n * Creates a dropdown menu proxy for an overflowed button.\n * @param {HTMLElement} action The original action button.\n * @returns {HTMLElement}\n */\n createMenuItem(action) {\n let menuItem = document.createElement('wje-menu-item');\n menuItem.replaceChildren(...Array.from(action.childNodes).map((node) => this.cloneActionMenuNode(node)));\n\n const label = this.getActionLabel(action);\n if (!menuItem.textContent.trim() && label) {\n menuItem.append(document.createTextNode(label));\n }\n\n if (label) {\n menuItem.setAttribute('aria-label', label);\n }\n\n if (action.hasAttribute('disabled') || action.getAttribute('aria-disabled') === 'true') {\n menuItem.setAttribute('disabled', '');\n }\n\n menuItem.addEventListener('wje-menu-item:click', (e) => this.handleMenuItemClick(e, action));\n menuItem.addEventListener('click', (e) => this.handleMenuItemClick(e, action));\n this._managedOverflowNodes.add(menuItem);\n\n return menuItem;\n }\n\n /**\n * Clones action content for menu usage and normalizes button icon slots.\n * @param {Node} node The source action child node.\n * @returns {Node}\n */\n cloneActionMenuNode(node) {\n const clone = node.cloneNode(true);\n\n if (clone.nodeType === Node.ELEMENT_NODE) {\n this.normalizeActionMenuIconSlot(clone);\n }\n\n return clone;\n }\n\n /**\n * Moves button-only icon slots to the menu item start slot.\n * @param {Element} element The cloned action content node.\n */\n normalizeActionMenuIconSlot(element) {\n if (element.tagName?.toLowerCase() !== 'wje-icon') return;\n\n const slot = element.getAttribute('slot');\n if (!slot || slot === 'icon-only') {\n element.setAttribute('slot', 'start');\n }\n }\n\n /**\n * Resolves readable text for a toolbar action copied into an overflow menu.\n * @param {HTMLElement} action The original action element.\n * @returns {string}\n */\n getActionLabel(action) {\n if (!action) return '';\n\n const explicitLabel = ['aria-label', 'title', 'label', 'data-label', 'tooltip']\n .map((attr) => action.getAttribute(attr)?.trim())\n .find((value) => value && value !== 'true');\n\n if (explicitLabel) return explicitLabel;\n\n return action.textContent.trim();\n }\n\n /**\n * Creates a divider separating existing dropdown actions from responsive overflow actions.\n * @returns {HTMLElement}\n */\n createOverflowDivider() {\n const divider = document.createElement('wje-divider');\n this._managedOverflowNodes.add(divider);\n return divider;\n }\n\n /**\n * Forwards menu item activation to the original button.\n * @param {Event} e The menu event.\n * @param {HTMLElement} action The original action button.\n */\n handleMenuItemClick(e, action) {\n e.preventDefault?.();\n e.stopPropagation();\n\n if (!action || action.hasAttribute('disabled') || action.getAttribute('aria-disabled') === 'true') return;\n\n action.click();\n }\n\n /**\n * Measures action widths while preserving current overflow state.\n * @returns {{count: number, widths: number[], gap: number, moreWidth: number, getWidthForCount: Function}}\n */\n measureActionMetrics() {\n const actions = this.getActions();\n const hasExistingDropdown = !!this.getExistingDropdown();\n\n this.restoreManagedActions(actions);\n\n const widths = actions.map((action) => action.getBoundingClientRect().width);\n const style = this.native ? getComputedStyle(this.native) : null;\n const gap = style ? parseFloat(style.columnGap || style.gap || '0') || 0 : 0;\n const moreWidth = this.measureMoreWidth();\n\n this.applyOverflow();\n\n return {\n count: actions.length,\n widths,\n gap,\n moreWidth,\n getWidthForCount: (visibleCount) => {\n const count = Math.max(0, Math.min(visibleCount, actions.length));\n const overflowCount = actions.length - count;\n const visibleWidth = widths.slice(0, count).reduce((sum, width) => sum + width, 0);\n const visibleGaps = Math.max(count - 1, 0) * gap;\n const usesDropdown = hasExistingDropdown || overflowCount > 0;\n const moreGap = count > 0 && usesDropdown ? gap : 0;\n\n return visibleWidth + visibleGaps + (usesDropdown ? moreWidth + moreGap : 0);\n },\n };\n }\n\n /**\n * Measures the overflow dropdown trigger.\n * @returns {number}\n */\n measureMoreWidth() {\n const dropdown = this.getOverflowDropdown();\n if (!dropdown) return 48;\n\n const isInternalDropdown = dropdown === this.moreDropdown;\n const wasHidden = dropdown.hidden;\n const previousVisibility = dropdown.style.visibility;\n\n if (isInternalDropdown && wasHidden) {\n dropdown.hidden = false;\n dropdown.style.visibility = 'hidden';\n }\n\n const width = dropdown.getBoundingClientRect().width || 48;\n\n if (isInternalDropdown && wasHidden) {\n dropdown.hidden = true;\n dropdown.style.visibility = previousVisibility;\n }\n\n if (dropdown === this.moreDropdown && this.getExistingDropdown()) {\n this.moreDropdown.hidden = true;\n }\n\n return width;\n }\n}\n","import ToolbarAction from './toolbar-action.element.js';\n\nexport default ToolbarAction;\n\nToolbarAction.define('wje-toolbar-action', ToolbarAction);\n"],"names":["ToolbarAction","WJElement","constructor","super","className","this","_managedHiddenActions","WeakSet","_isCollapsedByBreakpoint","_managedOverflowNodes","_overflowRetryFrame","_applyOverflowFrame","_observedDropdown","observedAttributes","value","setAttribute","removeAttribute","breakpoint","getAttribute","maxItems","visibleItems","hasAttribute","Number","isFinite","setupAttributes","isShadowRoot","draw","fragment","document","createDocumentFragment","slot","createElement","element","classList","add","dropdown","hidden","trigger","innerHTML","menu","append","appendChild","defaultSlot","native","moreDropdown","moreMenu","afterDraw","onSlotChange","observeExistingDropdown","scheduleOverflow","addEventListener","handleResize","handleBreakpointResize","getBreakpointWidth","window","afterDisconnect","removeEventListener","cancelAnimationFrame","_dropdownObserver","disconnect","doubleFrame","requestAnimationFrame","applyOverflow","getActions","getAssignedElements","filter","tagName","toLowerCase","assignedElements","Array","from","children","getExistingDropdown","find","MutationObserver","observe","childList","subtree","getOverflowDropdown","getOverflowMenu","existingDropdown","getVisibleLimit","actions","isCollapsedByBreakpoint","length","limit","Math","min","max","shouldCollapseByBreakpoint","breakpointWidth","innerWidth","nextState","token","trim","cssValue","getComputedStyle","getPropertyValue","namedBreakpoint","BREAKPOINTS","cssNumber","parseFloat","directNumber","visibleLimit","overflowActions","slice","overflowMenu","restoreManagedActions","restoreManagedOverflowContent","replaceChildren","forEach","action","style","display","createOverflowDivider","createMenuItem","has","removeProperty","delete","child","remove","menuItem","childNodes","map","node","cloneActionMenuNode","label","getActionLabel","textContent","createTextNode","e","handleMenuItemClick","clone","cloneNode","nodeType","Node","ELEMENT_NODE","normalizeActionMenuIconSlot","explicitLabel","attr","divider","preventDefault","stopPropagation","click","measureActionMetrics","hasExistingDropdown","widths","getBoundingClientRect","width","gap","columnGap","moreWidth","measureMoreWidth","count","getWidthForCount","visibleCount","overflowCount","visibleWidth","reduce","sum","visibleGaps","usesDropdown","isInternalDropdown","wasHidden","previousVisibility","visibility","static","sm","md","lg","xl","xxl","define"],"mappings":"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"}
|
package/dist/wje-toolbar.js
CHANGED
|
@@ -1,335 +1,140 @@
|
|
|
1
1
|
var __defProp = Object.defineProperty;
|
|
2
2
|
var __defNormalProp = (obj, key, value) => key in obj ? __defProp(obj, key, { enumerable: true, configurable: true, writable: true, value }) : obj[key] = value;
|
|
3
3
|
var __publicField = (obj, key, value) => __defNormalProp(obj, typeof key !== "symbol" ? key + "" : key, value);
|
|
4
|
-
import
|
|
5
|
-
|
|
6
|
-
class Toolbar extends WJElement {
|
|
7
|
-
/**
|
|
8
|
-
* Creates an instance of Toolbar.
|
|
9
|
-
*/
|
|
4
|
+
import t from "./wje-element.js";
|
|
5
|
+
class e extends t {
|
|
10
6
|
constructor() {
|
|
11
7
|
super();
|
|
12
|
-
/**
|
|
13
|
-
* The class name for the component.
|
|
14
|
-
* @type {string}
|
|
15
|
-
*/
|
|
16
8
|
__publicField(this, "className", "Toolbar");
|
|
17
|
-
this._breadcrumbState = /* @__PURE__ */ new WeakMap();
|
|
18
|
-
this._responsiveFrame = null;
|
|
9
|
+
this._breadcrumbState = /* @__PURE__ */ new WeakMap(), this._responsiveFrame = null;
|
|
19
10
|
}
|
|
20
|
-
/**
|
|
21
|
-
* Returns the CSS stylesheet for the component.
|
|
22
|
-
* @static
|
|
23
|
-
* @returns {CSSStyleSheet} The CSS stylesheet
|
|
24
|
-
*/
|
|
25
11
|
static get cssStyleSheet() {
|
|
26
|
-
return
|
|
12
|
+
return ':host{width:100%;height:var(--wje-toolbar-height)}.native-toolbar{background-color:var(--wje-toolbar-background);display:flex;align-items:center;flex-wrap:nowrap;justify-content:flex-start;border-bottom:1px solid var(--wje-toolbar-border-color);padding-inline:var(--wje-toolbar-padding-inline);padding-block:var(--wje-toolbar-padding-block);margin-inline:var(--wje-toolbar-margin-inline);margin-block:var(--wje-toolbar-margin-block);box-shadow:var(--wje-toolbar-shadow);gap:var(--wje-toolbar-action-gap);overflow:hidden}slot[name=start],slot[name=end]{display:flex;align-items:center;gap:var(--wje-toolbar-action-gap)}slot[name=start]{flex:1 1 auto;min-width:0}slot[name=end]{flex:0 0 auto;justify-content:flex-end}::slotted{grid-column:span 4}::slotted([slot="start"]){min-width:0}::slotted([slot="end"]){flex:0 0 auto}:host([sticky]){position:sticky;top:var(--wje-toolbar-top);z-index:99}';
|
|
27
13
|
}
|
|
28
|
-
/**
|
|
29
|
-
* Returns the list of observed attributes.
|
|
30
|
-
* @static
|
|
31
|
-
* @returns {Array} An empty array
|
|
32
|
-
*/
|
|
33
14
|
static get observedAttributes() {
|
|
34
15
|
return [];
|
|
35
16
|
}
|
|
36
|
-
/**
|
|
37
|
-
* Sets up the attributes for the component.
|
|
38
|
-
*/
|
|
39
17
|
setupAttributes() {
|
|
40
|
-
this.isShadowRoot = "open";
|
|
41
|
-
this.syncAria();
|
|
18
|
+
this.isShadowRoot = "open", this.syncAria();
|
|
42
19
|
}
|
|
43
|
-
/**
|
|
44
|
-
* Draws the component for the toolbar.
|
|
45
|
-
* @returns {object} Document fragment
|
|
46
|
-
*/
|
|
47
20
|
draw() {
|
|
48
|
-
let
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
let
|
|
53
|
-
|
|
54
|
-
let end = document.createElement("slot");
|
|
55
|
-
end.setAttribute("name", "end");
|
|
56
|
-
native.appendChild(start);
|
|
57
|
-
native.appendChild(end);
|
|
58
|
-
fragment.appendChild(native);
|
|
59
|
-
this.native = native;
|
|
60
|
-
this.startSlot = start;
|
|
61
|
-
this.endSlot = end;
|
|
62
|
-
return fragment;
|
|
21
|
+
let t2 = document.createDocumentFragment(), e2 = document.createElement("div");
|
|
22
|
+
e2.setAttribute("part", "native"), e2.classList.add("native-toolbar");
|
|
23
|
+
let s = document.createElement("slot");
|
|
24
|
+
s.setAttribute("name", "start");
|
|
25
|
+
let i = document.createElement("slot");
|
|
26
|
+
return i.setAttribute("name", "end"), e2.appendChild(s), e2.appendChild(i), t2.appendChild(e2), this.native = e2, this.startSlot = s, this.endSlot = i, t2;
|
|
63
27
|
}
|
|
64
|
-
/**
|
|
65
|
-
* Initializes responsive layout observers.
|
|
66
|
-
*/
|
|
67
28
|
afterDraw() {
|
|
68
29
|
var _a, _b;
|
|
69
30
|
this.onSlotChange = () => {
|
|
70
|
-
this._breadcrumbState = /* @__PURE__ */ new WeakMap();
|
|
71
|
-
|
|
72
|
-
};
|
|
73
|
-
(_a = this.startSlot) == null ? void 0 : _a.addEventListener("slotchange", this.onSlotChange);
|
|
74
|
-
(_b = this.endSlot) == null ? void 0 : _b.addEventListener("slotchange", this.onSlotChange);
|
|
75
|
-
if (typeof ResizeObserver === "function") {
|
|
76
|
-
this._resizeObserver = new ResizeObserver(() => this.scheduleResponsiveLayout());
|
|
77
|
-
this._resizeObserver.observe(this.native || this);
|
|
78
|
-
}
|
|
79
|
-
this.scheduleResponsiveLayout();
|
|
31
|
+
this._breadcrumbState = /* @__PURE__ */ new WeakMap(), this.scheduleResponsiveLayout();
|
|
32
|
+
}, (_a = this.startSlot) == null ? void 0 : _a.addEventListener("slotchange", this.onSlotChange), (_b = this.endSlot) == null ? void 0 : _b.addEventListener("slotchange", this.onSlotChange), "function" == typeof ResizeObserver && (this._resizeObserver = new ResizeObserver(() => this.scheduleResponsiveLayout()), this._resizeObserver.observe(this.native || this)), this.scheduleResponsiveLayout();
|
|
80
33
|
}
|
|
81
|
-
/**
|
|
82
|
-
* Cleans up responsive layout observers.
|
|
83
|
-
*/
|
|
84
34
|
afterDisconnect() {
|
|
85
35
|
var _a, _b, _c;
|
|
86
|
-
(_a = this.startSlot) == null ? void 0 : _a.removeEventListener("slotchange", this.onSlotChange);
|
|
87
|
-
(_b = this.endSlot) == null ? void 0 : _b.removeEventListener("slotchange", this.onSlotChange);
|
|
88
|
-
(_c = this._resizeObserver) == null ? void 0 : _c.disconnect();
|
|
89
|
-
if (this._responsiveFrame) {
|
|
90
|
-
cancelAnimationFrame(this._responsiveFrame);
|
|
91
|
-
this._responsiveFrame = null;
|
|
92
|
-
}
|
|
36
|
+
(_a = this.startSlot) == null ? void 0 : _a.removeEventListener("slotchange", this.onSlotChange), (_b = this.endSlot) == null ? void 0 : _b.removeEventListener("slotchange", this.onSlotChange), (_c = this._resizeObserver) == null ? void 0 : _c.disconnect(), this._responsiveFrame && (cancelAnimationFrame(this._responsiveFrame), this._responsiveFrame = null);
|
|
93
37
|
}
|
|
94
|
-
/**
|
|
95
|
-
* Sync ARIA attributes on host.
|
|
96
|
-
*/
|
|
97
38
|
syncAria() {
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
}
|
|
101
|
-
const ariaLabel = this.getAttribute("aria-label");
|
|
102
|
-
const label = this.getAttribute("label");
|
|
103
|
-
if (!ariaLabel && label) {
|
|
104
|
-
this.setAriaState({ label });
|
|
105
|
-
}
|
|
39
|
+
this.hasAttribute("role") || this.setAriaState({ role: "toolbar" });
|
|
40
|
+
const t2 = this.getAttribute("aria-label"), e2 = this.getAttribute("label");
|
|
41
|
+
!t2 && e2 && this.setAriaState({ label: e2 });
|
|
106
42
|
}
|
|
107
|
-
/**
|
|
108
|
-
* Schedules responsive layout recalculation.
|
|
109
|
-
*/
|
|
110
43
|
scheduleResponsiveLayout() {
|
|
111
|
-
|
|
112
|
-
|
|
113
|
-
|
|
114
|
-
this.updateResponsiveLayout();
|
|
115
|
-
});
|
|
44
|
+
this._responsiveFrame || (this._responsiveFrame = requestAnimationFrame(() => {
|
|
45
|
+
this._responsiveFrame = null, this.updateResponsiveLayout();
|
|
46
|
+
}));
|
|
116
47
|
}
|
|
117
|
-
/**
|
|
118
|
-
* Updates slotted breadcrumbs and actions to fit the toolbar width.
|
|
119
|
-
* @returns {Promise<void>}
|
|
120
|
-
*/
|
|
121
48
|
async updateResponsiveLayout() {
|
|
122
49
|
var _a;
|
|
123
|
-
const
|
|
124
|
-
|
|
125
|
-
const
|
|
126
|
-
|
|
127
|
-
|
|
128
|
-
|
|
129
|
-
if (
|
|
130
|
-
|
|
131
|
-
|
|
132
|
-
|
|
133
|
-
|
|
134
|
-
if (actionMetrics && breadcrumbMetrics) {
|
|
135
|
-
for (let count = actionMetrics.count; count >= 0; count--) {
|
|
136
|
-
const actionWidth = actionMetrics.getWidthForCount(count);
|
|
137
|
-
const availableBreadcrumbWidth = toolbarWidth - actionWidth;
|
|
138
|
-
if (breadcrumbMetrics.fullWidth <= availableBreadcrumbWidth) {
|
|
139
|
-
visibleActions = count;
|
|
140
|
-
compactBreadcrumbs = false;
|
|
141
|
-
break;
|
|
142
|
-
}
|
|
143
|
-
if (breadcrumbMetrics.compactWidth <= availableBreadcrumbWidth) {
|
|
144
|
-
visibleActions = count;
|
|
145
|
-
compactBreadcrumbs = true;
|
|
146
|
-
break;
|
|
147
|
-
}
|
|
148
|
-
if (count === 0) {
|
|
149
|
-
visibleActions = 0;
|
|
150
|
-
compactBreadcrumbs = true;
|
|
151
|
-
}
|
|
50
|
+
const t2 = this.getToolbarAction(), e2 = this.getBreadcrumbs(), s = this.isSelfManagedAction(t2), i = this.isSelfManagedBreadcrumbs(e2, t2);
|
|
51
|
+
if (!this.native || !t2 && !e2) return;
|
|
52
|
+
const a = this.native.getBoundingClientRect().width;
|
|
53
|
+
if (!a) return;
|
|
54
|
+
const r = t2 && !s ? (_a = t2.measureActionMetrics) == null ? void 0 : _a.call(t2) : null, o = e2 && !i ? await this.measureBreadcrumbs(e2) : null;
|
|
55
|
+
let n = (r == null ? void 0 : r.count) || 0, l = false;
|
|
56
|
+
if (r && o) for (let t3 = r.count; t3 >= 0; t3--) {
|
|
57
|
+
const e3 = a - r.getWidthForCount(t3);
|
|
58
|
+
if (o.fullWidth <= e3) {
|
|
59
|
+
n = t3, l = false;
|
|
60
|
+
break;
|
|
152
61
|
}
|
|
153
|
-
|
|
154
|
-
|
|
155
|
-
|
|
156
|
-
|
|
157
|
-
|
|
158
|
-
if (isSelfManagedAction) {
|
|
159
|
-
this.clearVisibleActions(action);
|
|
160
|
-
} else {
|
|
161
|
-
this.setVisibleActions(action, visibleActions);
|
|
162
|
-
}
|
|
163
|
-
if (!isSelfManagedBreadcrumbs) {
|
|
164
|
-
this.setBreadcrumbCompactState(breadcrumbs, compactBreadcrumbs);
|
|
62
|
+
if (o.compactWidth <= e3) {
|
|
63
|
+
n = t3, l = true;
|
|
64
|
+
break;
|
|
65
|
+
}
|
|
66
|
+
0 === t3 && (n = 0, l = true);
|
|
165
67
|
}
|
|
68
|
+
else r ? n = this.getVisibleActionsForWidth(r, a) : o && (l = o.fullWidth > a);
|
|
69
|
+
s ? this.clearVisibleActions(t2) : this.setVisibleActions(t2, n), i || this.setBreadcrumbCompactState(e2, l);
|
|
166
70
|
}
|
|
167
|
-
|
|
168
|
-
* Measures breadcrumbs in their full state.
|
|
169
|
-
* @param {HTMLElement} breadcrumbs Breadcrumbs component.
|
|
170
|
-
* @returns {Promise<{count: number, fullWidth: number, compactWidth: number}>}
|
|
171
|
-
*/
|
|
172
|
-
async measureBreadcrumbs(breadcrumbs) {
|
|
71
|
+
async measureBreadcrumbs(t2) {
|
|
173
72
|
var _a;
|
|
174
|
-
const
|
|
175
|
-
|
|
176
|
-
|
|
177
|
-
|
|
73
|
+
const e2 = ((_a = t2.getBreadcrumbs) == null ? void 0 : _a.call(t2)) || [], s = e2.length;
|
|
74
|
+
if (0 === s) return { count: 0, fullWidth: 0, compactWidth: 0 };
|
|
75
|
+
const i = this.ensureBreadcrumbState(t2, s);
|
|
76
|
+
if (i.count === s && i.fullWidth) return { count: s, fullWidth: i.fullWidth, compactWidth: i.compactWidth };
|
|
77
|
+
this.setBreadcrumbMaxItems(t2, s), await t2.updateComplete, await this.nextFrame();
|
|
78
|
+
const a = e2.map((t3) => t3.getBoundingClientRect().width), r = a.reduce((t3, e3) => t3 + e3, 0), o = this.ensureBreadcrumbState(t2, s), n = Math.max(1, t2.itemsBeforeCollapse || 1), l = Math.max(1, t2.itemsAfterCollapse || 1), c = a.slice(0, n).reduce((t3, e3) => t3 + e3, 0), u = a.slice(Math.max(s - l, n)).reduce((t3, e3) => t3 + e3, 0), d = s > o.compactMaxItems ? c + u + 48 : r;
|
|
79
|
+
return o.count = s, o.fullWidth = r, o.compactWidth = d, { count: s, fullWidth: r, compactWidth: d };
|
|
80
|
+
}
|
|
81
|
+
ensureBreadcrumbState(t2, e2) {
|
|
82
|
+
if (!this._breadcrumbState.has(t2)) {
|
|
83
|
+
const s = t2.getAttribute("max-items"), i = null === s ? NaN : Number(s), a = Number.isFinite(i) && i > 0 ? i : Math.min(3, e2);
|
|
84
|
+
this._breadcrumbState.set(t2, { compactMaxItems: Math.max(1, Math.min(a, e2)) });
|
|
178
85
|
}
|
|
179
|
-
|
|
180
|
-
if (cachedState.count === count && cachedState.fullWidth) {
|
|
181
|
-
return {
|
|
182
|
-
count,
|
|
183
|
-
fullWidth: cachedState.fullWidth,
|
|
184
|
-
compactWidth: cachedState.compactWidth
|
|
185
|
-
};
|
|
186
|
-
}
|
|
187
|
-
this.setBreadcrumbMaxItems(breadcrumbs, count);
|
|
188
|
-
await breadcrumbs.updateComplete;
|
|
189
|
-
await this.nextFrame();
|
|
190
|
-
const itemWidths = items.map((item) => item.getBoundingClientRect().width);
|
|
191
|
-
const fullWidth = itemWidths.reduce((sum, width) => sum + width, 0);
|
|
192
|
-
const state = this.ensureBreadcrumbState(breadcrumbs, count);
|
|
193
|
-
const before = Math.max(1, breadcrumbs.itemsBeforeCollapse || 1);
|
|
194
|
-
const after = Math.max(1, breadcrumbs.itemsAfterCollapse || 1);
|
|
195
|
-
const visibleBefore = itemWidths.slice(0, before).reduce((sum, width) => sum + width, 0);
|
|
196
|
-
const visibleAfter = itemWidths.slice(Math.max(count - after, before)).reduce((sum, width) => sum + width, 0);
|
|
197
|
-
const compactWidth = count > state.compactMaxItems ? visibleBefore + visibleAfter + 48 : fullWidth;
|
|
198
|
-
state.count = count;
|
|
199
|
-
state.fullWidth = fullWidth;
|
|
200
|
-
state.compactWidth = compactWidth;
|
|
201
|
-
return { count, fullWidth, compactWidth };
|
|
202
|
-
}
|
|
203
|
-
/**
|
|
204
|
-
* Stores original breadcrumb settings used as responsive compact target.
|
|
205
|
-
* @param {HTMLElement} breadcrumbs Breadcrumbs component.
|
|
206
|
-
* @param {number} count Number of breadcrumb elements currently in the trail.
|
|
207
|
-
* @returns {{compactMaxItems: number}}
|
|
208
|
-
*/
|
|
209
|
-
ensureBreadcrumbState(breadcrumbs, count) {
|
|
210
|
-
if (!this._breadcrumbState.has(breadcrumbs)) {
|
|
211
|
-
const attr = breadcrumbs.getAttribute("max-items");
|
|
212
|
-
const parsed = attr === null ? NaN : Number(attr);
|
|
213
|
-
const compactMaxItems = Number.isFinite(parsed) && parsed > 0 ? parsed : Math.min(3, count);
|
|
214
|
-
this._breadcrumbState.set(breadcrumbs, {
|
|
215
|
-
compactMaxItems: Math.max(1, Math.min(compactMaxItems, count))
|
|
216
|
-
});
|
|
217
|
-
}
|
|
218
|
-
return this._breadcrumbState.get(breadcrumbs);
|
|
86
|
+
return this._breadcrumbState.get(t2);
|
|
219
87
|
}
|
|
220
|
-
|
|
221
|
-
* Applies the compact or full breadcrumb state.
|
|
222
|
-
* @param {HTMLElement|null} breadcrumbs Breadcrumbs component.
|
|
223
|
-
* @param {boolean} compact Whether compact mode should be used.
|
|
224
|
-
*/
|
|
225
|
-
setBreadcrumbCompactState(breadcrumbs, compact) {
|
|
88
|
+
setBreadcrumbCompactState(t2, e2) {
|
|
226
89
|
var _a;
|
|
227
|
-
if (!
|
|
228
|
-
const
|
|
229
|
-
|
|
230
|
-
const nextMaxItems = compact ? state.compactMaxItems : count;
|
|
231
|
-
this.setBreadcrumbMaxItems(breadcrumbs, nextMaxItems);
|
|
90
|
+
if (!t2) return;
|
|
91
|
+
const s = ((_a = t2.getBreadcrumbs) == null ? void 0 : _a.call(t2).length) || 0, i = this.ensureBreadcrumbState(t2, s), a = e2 ? i.compactMaxItems : s;
|
|
92
|
+
this.setBreadcrumbMaxItems(t2, a);
|
|
232
93
|
}
|
|
233
|
-
|
|
234
|
-
* Sets breadcrumb max-items only when it changed.
|
|
235
|
-
* @param {HTMLElement} breadcrumbs Breadcrumbs component.
|
|
236
|
-
* @param {number} value The max item count.
|
|
237
|
-
*/
|
|
238
|
-
setBreadcrumbMaxItems(breadcrumbs, value) {
|
|
94
|
+
setBreadcrumbMaxItems(t2, e2) {
|
|
239
95
|
var _a, _b;
|
|
240
|
-
|
|
241
|
-
if (+breadcrumbs.getAttribute("max-items") === value) {
|
|
242
|
-
(_a = breadcrumbs.updateCollapse) == null ? void 0 : _a.call(breadcrumbs);
|
|
243
|
-
return;
|
|
244
|
-
}
|
|
245
|
-
breadcrumbs.setAttribute("max-items", value);
|
|
246
|
-
(_b = breadcrumbs.updateCollapse) == null ? void 0 : _b.call(breadcrumbs);
|
|
96
|
+
t2 && e2 && (+t2.getAttribute("max-items") !== e2 ? (t2.setAttribute("max-items", e2), (_a = t2.updateCollapse) == null ? void 0 : _a.call(t2)) : (_b = t2.updateCollapse) == null ? void 0 : _b.call(t2));
|
|
247
97
|
}
|
|
248
|
-
|
|
249
|
-
|
|
250
|
-
* @param {object} actionMetrics Measured action metrics.
|
|
251
|
-
* @param {number} width Available width.
|
|
252
|
-
* @returns {number}
|
|
253
|
-
*/
|
|
254
|
-
getVisibleActionsForWidth(actionMetrics, width) {
|
|
255
|
-
for (let count = actionMetrics.count; count >= 0; count--) {
|
|
256
|
-
if (actionMetrics.getWidthForCount(count) <= width) return count;
|
|
257
|
-
}
|
|
98
|
+
getVisibleActionsForWidth(t2, e2) {
|
|
99
|
+
for (let s = t2.count; s >= 0; s--) if (t2.getWidthForCount(s) <= e2) return s;
|
|
258
100
|
return 0;
|
|
259
101
|
}
|
|
260
|
-
|
|
261
|
-
* Applies visible action count.
|
|
262
|
-
* @param {HTMLElement|null} action Toolbar action component.
|
|
263
|
-
* @param {number} count Visible action count.
|
|
264
|
-
*/
|
|
265
|
-
setVisibleActions(action, count) {
|
|
102
|
+
setVisibleActions(t2, e2) {
|
|
266
103
|
var _a;
|
|
267
|
-
|
|
268
|
-
if (+action.getAttribute("visible-items") === count) {
|
|
269
|
-
return;
|
|
270
|
-
}
|
|
271
|
-
action.setAttribute("visible-items", count);
|
|
272
|
-
(_a = action.applyOverflow) == null ? void 0 : _a.call(action);
|
|
104
|
+
t2 && +t2.getAttribute("visible-items") !== e2 && (t2.setAttribute("visible-items", e2), (_a = t2.applyOverflow) == null ? void 0 : _a.call(t2));
|
|
273
105
|
}
|
|
274
|
-
|
|
275
|
-
* Clears toolbar-managed visible action state when actions manage themselves.
|
|
276
|
-
* @param {HTMLElement|null} action Toolbar action component.
|
|
277
|
-
*/
|
|
278
|
-
clearVisibleActions(action) {
|
|
106
|
+
clearVisibleActions(t2) {
|
|
279
107
|
var _a;
|
|
280
|
-
|
|
281
|
-
action.removeAttribute("visible-items");
|
|
108
|
+
((_a = t2 == null ? void 0 : t2.hasAttribute) == null ? void 0 : _a.call(t2, "visible-items")) && t2.removeAttribute("visible-items");
|
|
282
109
|
}
|
|
283
|
-
/**
|
|
284
|
-
* Returns the slotted toolbar action.
|
|
285
|
-
* @returns {HTMLElement|null}
|
|
286
|
-
*/
|
|
287
110
|
getToolbarAction() {
|
|
288
111
|
var _a, _b;
|
|
289
|
-
return ((_b = (_a = this.endSlot) == null ? void 0 : _a.assignedElements) == null ? void 0 : _b.call(_a).find((
|
|
112
|
+
return ((_b = (_a = this.endSlot) == null ? void 0 : _a.assignedElements) == null ? void 0 : _b.call(_a).find((t2) => {
|
|
290
113
|
var _a2;
|
|
291
|
-
return ((_a2 =
|
|
114
|
+
return "wje-toolbar-action" === ((_a2 = t2.tagName) == null ? void 0 : _a2.toLowerCase());
|
|
292
115
|
})) || null;
|
|
293
116
|
}
|
|
294
|
-
/**
|
|
295
|
-
* Returns the slotted breadcrumbs.
|
|
296
|
-
* @returns {HTMLElement|null}
|
|
297
|
-
*/
|
|
298
117
|
getBreadcrumbs() {
|
|
299
118
|
var _a, _b;
|
|
300
|
-
return ((_b = (_a = this.startSlot) == null ? void 0 : _a.assignedElements) == null ? void 0 : _b.call(_a).find((
|
|
119
|
+
return ((_b = (_a = this.startSlot) == null ? void 0 : _a.assignedElements) == null ? void 0 : _b.call(_a).find((t2) => {
|
|
301
120
|
var _a2;
|
|
302
|
-
return ((_a2 =
|
|
121
|
+
return "wje-breadcrumbs" === ((_a2 = t2.tagName) == null ? void 0 : _a2.toLowerCase());
|
|
303
122
|
})) || null;
|
|
304
123
|
}
|
|
305
|
-
|
|
306
|
-
* Returns whether toolbar actions are managed by their own breakpoint logic.
|
|
307
|
-
* @param {HTMLElement|null} action Toolbar action component.
|
|
308
|
-
* @returns {boolean}
|
|
309
|
-
*/
|
|
310
|
-
isSelfManagedAction(action) {
|
|
124
|
+
isSelfManagedAction(t2) {
|
|
311
125
|
var _a;
|
|
312
|
-
return !!((_a =
|
|
126
|
+
return !!((_a = t2 == null ? void 0 : t2.getAttribute) == null ? void 0 : _a.call(t2, "breakpoint"));
|
|
313
127
|
}
|
|
314
|
-
|
|
315
|
-
* Returns whether breadcrumb collapse is managed by its own breakpoint logic.
|
|
316
|
-
* @param {HTMLElement|null} breadcrumbs Breadcrumbs component.
|
|
317
|
-
* @returns {boolean}
|
|
318
|
-
*/
|
|
319
|
-
isSelfManagedBreadcrumbs(breadcrumbs, action) {
|
|
128
|
+
isSelfManagedBreadcrumbs(t2, e2) {
|
|
320
129
|
var _a, _b;
|
|
321
|
-
return !!(
|
|
130
|
+
return !!(t2 == null ? void 0 : t2.getAttribute("breakpoint")) || ((_a = t2 == null ? void 0 : t2.hasAttribute) == null ? void 0 : _a.call(t2, "max-items")) && !!((_b = e2 == null ? void 0 : e2.getExistingDropdown) == null ? void 0 : _b.call(e2));
|
|
322
131
|
}
|
|
323
|
-
/**
|
|
324
|
-
* Waits for one animation frame.
|
|
325
|
-
* @returns {Promise<void>}
|
|
326
|
-
*/
|
|
327
132
|
nextFrame() {
|
|
328
|
-
return new Promise((
|
|
133
|
+
return new Promise((t2) => requestAnimationFrame(t2));
|
|
329
134
|
}
|
|
330
135
|
}
|
|
331
|
-
|
|
136
|
+
e.define("wje-toolbar", e);
|
|
332
137
|
export {
|
|
333
|
-
|
|
138
|
+
e as default
|
|
334
139
|
};
|
|
335
140
|
//# sourceMappingURL=wje-toolbar.js.map
|