wj-elements 0.7.7 → 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 +11504 -11499
- 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/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 +760 -760
- 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 -672
- 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 -198
- 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 +3 -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
package/dist/wje-toolbar.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"wje-toolbar.js","sources":["../packages/wje-toolbar/toolbar.element.js","../packages/wje-toolbar/toolbar.js"],"sourcesContent":["import { default as WJElement } from '../wje-element/element.js';\nimport styles from './styles/styles.css?inline';\n\n/**\n * `Toolbar` is a custom web component that represents a toolbar.\n * @summary This element represents a toolbar.\n * @documentation https://elements.webjet.sk/components/toolbar\n * @status stable\n * @augments {WJElement}\n * @csspart native - The native toolbar wrapper.\n * @slot start - The start slot for the toolbar.\n * @slot end - The end slot for the toolbar.\n * @cssproperty [--wje-toolbar-background=var(--wje-background)] - Specifies the background color of the toolbar. Accepts any valid CSS color value, such as `hex`, `rgb`, or `CSS variable`.\n * @cssproperty [--wje-toolbar-height=auto] - Defines the height of the toolbar. If set to `auto`, the height adjusts based on the content.\n * @cssproperty [--wje-toolbar-min-height=70px] - Sets the minimum height of the toolbar. Ensures the toolbar maintains a consistent minimum size.\n * @cssproperty [--wje-toolbar-padding-top=1rem] - Specifies the padding at the top of the toolbar. Accepts any valid CSS length unit.\n * @cssproperty [--wje-toolbar-padding-bottom=1rem] - Specifies the padding at the bottom of the toolbar. Helps create spacing between the content and the bottom edge.\n * @cssproperty [--wje-toolbar-padding-inline=1.5rem] - Defines the horizontal padding (left and right) of the toolbar. Creates consistent spacing on both sides.\n * @cssproperty [--wje-toolbar-margin-block=0] - Defines the vertical margin outside the toolbar. Accepts any valid CSS length value.\n * @cssproperty [--wje-toolbar-margin-inline=0] - Defines the horizontal margin outside the toolbar. Accepts any valid CSS length value.\n * @cssproperty [--wje-toolbar-border-color=var(--wje-border-color)] - Sets the color of the toolbar's border. Accepts any valid CSS color value.\n * @cssproperty [--wje-toolbar-top=0] - Specifies the vertical position of the toolbar relative to its container. Useful for fixed or sticky toolbars.\n * @tag wje-toolbar\n */\n\nexport default class Toolbar extends WJElement {\n /**\n * Creates an instance of Toolbar.\n */\n constructor() {\n super();\n this._breadcrumbState = new WeakMap();\n this._responsiveFrame = null;\n }\n\n /**\n * The class name for the component.\n * @type {string}\n */\n className = 'Toolbar';\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 [];\n }\n\n /**\n * Sets up the attributes for the component.\n */\n setupAttributes() {\n this.isShadowRoot = 'open';\n this.syncAria();\n }\n\n /**\n * Draws the component for the toolbar.\n * @returns {object} Document fragment\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-toolbar');\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.appendChild(start);\n native.appendChild(end);\n fragment.appendChild(native);\n\n this.native = native;\n this.startSlot = start;\n this.endSlot = end;\n\n return fragment;\n }\n\n /**\n * Initializes responsive layout observers.\n */\n afterDraw() {\n this.onSlotChange = () => {\n this._breadcrumbState = new WeakMap();\n this.scheduleResponsiveLayout();\n };\n this.startSlot?.addEventListener('slotchange', this.onSlotChange);\n this.endSlot?.addEventListener('slotchange', this.onSlotChange);\n\n if (typeof ResizeObserver === 'function') {\n this._resizeObserver = new ResizeObserver(() => this.scheduleResponsiveLayout());\n this._resizeObserver.observe(this.native || this);\n }\n\n this.scheduleResponsiveLayout();\n }\n\n /**\n * Cleans up responsive layout observers.\n */\n afterDisconnect() {\n this.startSlot?.removeEventListener('slotchange', this.onSlotChange);\n this.endSlot?.removeEventListener('slotchange', this.onSlotChange);\n this._resizeObserver?.disconnect();\n\n if (this._responsiveFrame) {\n cancelAnimationFrame(this._responsiveFrame);\n this._responsiveFrame = null;\n }\n }\n\n /**\n * Sync ARIA attributes on host.\n */\n syncAria() {\n if (!this.hasAttribute('role')) {\n this.setAriaState({ role: 'toolbar' });\n }\n\n const ariaLabel = this.getAttribute('aria-label');\n const label = this.getAttribute('label');\n if (!ariaLabel && label) {\n this.setAriaState({ label });\n }\n }\n\n /**\n * Schedules responsive layout recalculation.\n */\n scheduleResponsiveLayout() {\n if (this._responsiveFrame) return;\n\n this._responsiveFrame = requestAnimationFrame(() => {\n this._responsiveFrame = null;\n this.updateResponsiveLayout();\n });\n }\n\n /**\n * Updates slotted breadcrumbs and actions to fit the toolbar width.\n * @returns {Promise<void>}\n */\n async updateResponsiveLayout() {\n const action = this.getToolbarAction();\n const breadcrumbs = this.getBreadcrumbs();\n const isSelfManagedAction = this.isSelfManagedAction(action);\n const isSelfManagedBreadcrumbs = this.isSelfManagedBreadcrumbs(breadcrumbs, action);\n\n if (!this.native || (!action && !breadcrumbs)) return;\n\n const toolbarWidth = this.native.getBoundingClientRect().width;\n if (!toolbarWidth) return;\n\n const actionMetrics = action && !isSelfManagedAction ? action.measureActionMetrics?.() : null;\n const breadcrumbMetrics =\n breadcrumbs && !isSelfManagedBreadcrumbs\n ? await this.measureBreadcrumbs(breadcrumbs)\n : null;\n\n let visibleActions = actionMetrics?.count || 0;\n let compactBreadcrumbs = false;\n\n if (actionMetrics && breadcrumbMetrics) {\n for (let count = actionMetrics.count; count >= 0; count--) {\n const actionWidth = actionMetrics.getWidthForCount(count);\n const availableBreadcrumbWidth = toolbarWidth - actionWidth;\n\n if (breadcrumbMetrics.fullWidth <= availableBreadcrumbWidth) {\n visibleActions = count;\n compactBreadcrumbs = false;\n break;\n }\n\n if (breadcrumbMetrics.compactWidth <= availableBreadcrumbWidth) {\n visibleActions = count;\n compactBreadcrumbs = true;\n break;\n }\n\n if (count === 0) {\n visibleActions = 0;\n compactBreadcrumbs = true;\n }\n }\n } else if (actionMetrics) {\n visibleActions = this.getVisibleActionsForWidth(actionMetrics, toolbarWidth);\n } else if (breadcrumbMetrics) {\n compactBreadcrumbs = breadcrumbMetrics.fullWidth > toolbarWidth;\n }\n\n if (isSelfManagedAction) {\n this.clearVisibleActions(action);\n } else {\n this.setVisibleActions(action, visibleActions);\n }\n\n if (!isSelfManagedBreadcrumbs) {\n this.setBreadcrumbCompactState(breadcrumbs, compactBreadcrumbs);\n }\n }\n\n /**\n * Measures breadcrumbs in their full state.\n * @param {HTMLElement} breadcrumbs Breadcrumbs component.\n * @returns {Promise<{count: number, fullWidth: number, compactWidth: number}>}\n */\n async measureBreadcrumbs(breadcrumbs) {\n const items = breadcrumbs.getBreadcrumbs?.() || [];\n const count = items.length;\n\n if (count === 0) {\n return { count: 0, fullWidth: 0, compactWidth: 0 };\n }\n\n const cachedState = this.ensureBreadcrumbState(breadcrumbs, count);\n if (cachedState.count === count && cachedState.fullWidth) {\n return {\n count,\n fullWidth: cachedState.fullWidth,\n compactWidth: cachedState.compactWidth,\n };\n }\n\n this.setBreadcrumbMaxItems(breadcrumbs, count);\n\n await breadcrumbs.updateComplete;\n await this.nextFrame();\n\n const itemWidths = items.map((item) => item.getBoundingClientRect().width);\n const fullWidth = itemWidths.reduce((sum, width) => sum + width, 0);\n const state = this.ensureBreadcrumbState(breadcrumbs, count);\n const before = Math.max(1, breadcrumbs.itemsBeforeCollapse || 1);\n const after = Math.max(1, breadcrumbs.itemsAfterCollapse || 1);\n const visibleBefore = itemWidths.slice(0, before).reduce((sum, width) => sum + width, 0);\n const visibleAfter = itemWidths.slice(Math.max(count - after, before)).reduce((sum, width) => sum + width, 0);\n const compactWidth = count > state.compactMaxItems\n ? visibleBefore + visibleAfter + 48\n : fullWidth;\n\n state.count = count;\n state.fullWidth = fullWidth;\n state.compactWidth = compactWidth;\n\n return { count, fullWidth, compactWidth };\n }\n\n /**\n * Stores original breadcrumb settings used as responsive compact target.\n * @param {HTMLElement} breadcrumbs Breadcrumbs component.\n * @param {number} count Number of breadcrumb elements currently in the trail.\n * @returns {{compactMaxItems: number}}\n */\n ensureBreadcrumbState(breadcrumbs, count) {\n if (!this._breadcrumbState.has(breadcrumbs)) {\n const attr = breadcrumbs.getAttribute('max-items');\n const parsed = attr === null ? NaN : Number(attr);\n const compactMaxItems = Number.isFinite(parsed) && parsed > 0 ? parsed : Math.min(3, count);\n\n this._breadcrumbState.set(breadcrumbs, {\n compactMaxItems: Math.max(1, Math.min(compactMaxItems, count)),\n });\n }\n\n return this._breadcrumbState.get(breadcrumbs);\n }\n\n /**\n * Applies the compact or full breadcrumb state.\n * @param {HTMLElement|null} breadcrumbs Breadcrumbs component.\n * @param {boolean} compact Whether compact mode should be used.\n */\n setBreadcrumbCompactState(breadcrumbs, compact) {\n if (!breadcrumbs) return;\n\n const count = breadcrumbs.getBreadcrumbs?.().length || 0;\n const state = this.ensureBreadcrumbState(breadcrumbs, count);\n const nextMaxItems = compact ? state.compactMaxItems : count;\n\n this.setBreadcrumbMaxItems(breadcrumbs, nextMaxItems);\n }\n\n /**\n * Sets breadcrumb max-items only when it changed.\n * @param {HTMLElement} breadcrumbs Breadcrumbs component.\n * @param {number} value The max item count.\n */\n setBreadcrumbMaxItems(breadcrumbs, value) {\n if (!breadcrumbs || !value) return;\n\n if (+breadcrumbs.getAttribute('max-items') === value) {\n breadcrumbs.updateCollapse?.();\n return;\n }\n\n breadcrumbs.setAttribute('max-items', value);\n breadcrumbs.updateCollapse?.();\n }\n\n /**\n * Finds how many actions fit into the available width.\n * @param {object} actionMetrics Measured action metrics.\n * @param {number} width Available width.\n * @returns {number}\n */\n getVisibleActionsForWidth(actionMetrics, width) {\n for (let count = actionMetrics.count; count >= 0; count--) {\n if (actionMetrics.getWidthForCount(count) <= width) return count;\n }\n\n return 0;\n }\n\n /**\n * Applies visible action count.\n * @param {HTMLElement|null} action Toolbar action component.\n * @param {number} count Visible action count.\n */\n setVisibleActions(action, count) {\n if (!action) return;\n\n if (+action.getAttribute('visible-items') === count) {\n return;\n }\n\n action.setAttribute('visible-items', count);\n action.applyOverflow?.();\n }\n\n /**\n * Clears toolbar-managed visible action state when actions manage themselves.\n * @param {HTMLElement|null} action Toolbar action component.\n */\n clearVisibleActions(action) {\n if (!action?.hasAttribute?.('visible-items')) return;\n\n action.removeAttribute('visible-items');\n }\n\n /**\n * Returns the slotted toolbar action.\n * @returns {HTMLElement|null}\n */\n getToolbarAction() {\n return this.endSlot?.assignedElements?.().find((el) => el.tagName?.toLowerCase() === 'wje-toolbar-action') || null;\n }\n\n /**\n * Returns the slotted breadcrumbs.\n * @returns {HTMLElement|null}\n */\n getBreadcrumbs() {\n return this.startSlot?.assignedElements?.().find((el) => el.tagName?.toLowerCase() === 'wje-breadcrumbs') || null;\n }\n\n /**\n * Returns whether toolbar actions are managed by their own breakpoint logic.\n * @param {HTMLElement|null} action Toolbar action component.\n * @returns {boolean}\n */\n isSelfManagedAction(action) {\n return !!action?.getAttribute?.('breakpoint');\n }\n\n /**\n * Returns whether breadcrumb collapse is managed by its own breakpoint logic.\n * @param {HTMLElement|null} breadcrumbs Breadcrumbs component.\n * @returns {boolean}\n */\n isSelfManagedBreadcrumbs(breadcrumbs, action) {\n return (\n !!breadcrumbs?.getAttribute('breakpoint') ||\n (breadcrumbs?.hasAttribute?.('max-items') && !!action?.getExistingDropdown?.())\n );\n }\n\n /**\n * Waits for one animation frame.\n * @returns {Promise<void>}\n */\n nextFrame() {\n return new Promise((resolve) => requestAnimationFrame(resolve));\n }\n}\n","import Toolbar from './toolbar.element.js';\n\nexport default Toolbar;\n\nToolbar.define('wje-toolbar', Toolbar);\n"],"names":["_a"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"wje-toolbar.js","sources":["../packages/wje-toolbar/toolbar.element.js","../packages/wje-toolbar/toolbar.js"],"sourcesContent":["import { default as WJElement } from '../wje-element/element.js';\nimport styles from './styles/styles.css?inline';\n\n/**\n * `Toolbar` is a custom web component that represents a toolbar.\n * @summary This element represents a toolbar.\n * @documentation https://elements.webjet.sk/components/toolbar\n * @status stable\n * @augments {WJElement}\n * @csspart native - The native toolbar wrapper.\n * @slot start - The start slot for the toolbar.\n * @slot end - The end slot for the toolbar.\n * @cssproperty [--wje-toolbar-background=var(--wje-background)] - Specifies the background color of the toolbar. Accepts any valid CSS color value, such as `hex`, `rgb`, or `CSS variable`.\n * @cssproperty [--wje-toolbar-height=auto] - Defines the height of the toolbar. If set to `auto`, the height adjusts based on the content.\n * @cssproperty [--wje-toolbar-min-height=70px] - Sets the minimum height of the toolbar. Ensures the toolbar maintains a consistent minimum size.\n * @cssproperty [--wje-toolbar-padding-top=1rem] - Specifies the padding at the top of the toolbar. Accepts any valid CSS length unit.\n * @cssproperty [--wje-toolbar-padding-bottom=1rem] - Specifies the padding at the bottom of the toolbar. Helps create spacing between the content and the bottom edge.\n * @cssproperty [--wje-toolbar-padding-inline=1.5rem] - Defines the horizontal padding (left and right) of the toolbar. Creates consistent spacing on both sides.\n * @cssproperty [--wje-toolbar-margin-block=0] - Defines the vertical margin outside the toolbar. Accepts any valid CSS length value.\n * @cssproperty [--wje-toolbar-margin-inline=0] - Defines the horizontal margin outside the toolbar. Accepts any valid CSS length value.\n * @cssproperty [--wje-toolbar-border-color=var(--wje-border-color)] - Sets the color of the toolbar's border. Accepts any valid CSS color value.\n * @cssproperty [--wje-toolbar-top=0] - Specifies the vertical position of the toolbar relative to its container. Useful for fixed or sticky toolbars.\n * @tag wje-toolbar\n */\n\nexport default class Toolbar extends WJElement {\n /**\n * Creates an instance of Toolbar.\n */\n constructor() {\n super();\n this._breadcrumbState = new WeakMap();\n this._responsiveFrame = null;\n }\n\n /**\n * The class name for the component.\n * @type {string}\n */\n className = 'Toolbar';\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 [];\n }\n\n /**\n * Sets up the attributes for the component.\n */\n setupAttributes() {\n this.isShadowRoot = 'open';\n this.syncAria();\n }\n\n /**\n * Draws the component for the toolbar.\n * @returns {object} Document fragment\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-toolbar');\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.appendChild(start);\n native.appendChild(end);\n fragment.appendChild(native);\n\n this.native = native;\n this.startSlot = start;\n this.endSlot = end;\n\n return fragment;\n }\n\n /**\n * Initializes responsive layout observers.\n */\n afterDraw() {\n this.onSlotChange = () => {\n this._breadcrumbState = new WeakMap();\n this.scheduleResponsiveLayout();\n };\n this.startSlot?.addEventListener('slotchange', this.onSlotChange);\n this.endSlot?.addEventListener('slotchange', this.onSlotChange);\n\n if (typeof ResizeObserver === 'function') {\n this._resizeObserver = new ResizeObserver(() => this.scheduleResponsiveLayout());\n this._resizeObserver.observe(this.native || this);\n }\n\n this.scheduleResponsiveLayout();\n }\n\n /**\n * Cleans up responsive layout observers.\n */\n afterDisconnect() {\n this.startSlot?.removeEventListener('slotchange', this.onSlotChange);\n this.endSlot?.removeEventListener('slotchange', this.onSlotChange);\n this._resizeObserver?.disconnect();\n\n if (this._responsiveFrame) {\n cancelAnimationFrame(this._responsiveFrame);\n this._responsiveFrame = null;\n }\n }\n\n /**\n * Sync ARIA attributes on host.\n */\n syncAria() {\n if (!this.hasAttribute('role')) {\n this.setAriaState({ role: 'toolbar' });\n }\n\n const ariaLabel = this.getAttribute('aria-label');\n const label = this.getAttribute('label');\n if (!ariaLabel && label) {\n this.setAriaState({ label });\n }\n }\n\n /**\n * Schedules responsive layout recalculation.\n */\n scheduleResponsiveLayout() {\n if (this._responsiveFrame) return;\n\n this._responsiveFrame = requestAnimationFrame(() => {\n this._responsiveFrame = null;\n this.updateResponsiveLayout();\n });\n }\n\n /**\n * Updates slotted breadcrumbs and actions to fit the toolbar width.\n * @returns {Promise<void>}\n */\n async updateResponsiveLayout() {\n const action = this.getToolbarAction();\n const breadcrumbs = this.getBreadcrumbs();\n const isSelfManagedAction = this.isSelfManagedAction(action);\n const isSelfManagedBreadcrumbs = this.isSelfManagedBreadcrumbs(breadcrumbs, action);\n\n if (!this.native || (!action && !breadcrumbs)) return;\n\n const toolbarWidth = this.native.getBoundingClientRect().width;\n if (!toolbarWidth) return;\n\n const actionMetrics = action && !isSelfManagedAction ? action.measureActionMetrics?.() : null;\n const breadcrumbMetrics =\n breadcrumbs && !isSelfManagedBreadcrumbs\n ? await this.measureBreadcrumbs(breadcrumbs)\n : null;\n\n let visibleActions = actionMetrics?.count || 0;\n let compactBreadcrumbs = false;\n\n if (actionMetrics && breadcrumbMetrics) {\n for (let count = actionMetrics.count; count >= 0; count--) {\n const actionWidth = actionMetrics.getWidthForCount(count);\n const availableBreadcrumbWidth = toolbarWidth - actionWidth;\n\n if (breadcrumbMetrics.fullWidth <= availableBreadcrumbWidth) {\n visibleActions = count;\n compactBreadcrumbs = false;\n break;\n }\n\n if (breadcrumbMetrics.compactWidth <= availableBreadcrumbWidth) {\n visibleActions = count;\n compactBreadcrumbs = true;\n break;\n }\n\n if (count === 0) {\n visibleActions = 0;\n compactBreadcrumbs = true;\n }\n }\n } else if (actionMetrics) {\n visibleActions = this.getVisibleActionsForWidth(actionMetrics, toolbarWidth);\n } else if (breadcrumbMetrics) {\n compactBreadcrumbs = breadcrumbMetrics.fullWidth > toolbarWidth;\n }\n\n if (isSelfManagedAction) {\n this.clearVisibleActions(action);\n } else {\n this.setVisibleActions(action, visibleActions);\n }\n\n if (!isSelfManagedBreadcrumbs) {\n this.setBreadcrumbCompactState(breadcrumbs, compactBreadcrumbs);\n }\n }\n\n /**\n * Measures breadcrumbs in their full state.\n * @param {HTMLElement} breadcrumbs Breadcrumbs component.\n * @returns {Promise<{count: number, fullWidth: number, compactWidth: number}>}\n */\n async measureBreadcrumbs(breadcrumbs) {\n const items = breadcrumbs.getBreadcrumbs?.() || [];\n const count = items.length;\n\n if (count === 0) {\n return { count: 0, fullWidth: 0, compactWidth: 0 };\n }\n\n const cachedState = this.ensureBreadcrumbState(breadcrumbs, count);\n if (cachedState.count === count && cachedState.fullWidth) {\n return {\n count,\n fullWidth: cachedState.fullWidth,\n compactWidth: cachedState.compactWidth,\n };\n }\n\n this.setBreadcrumbMaxItems(breadcrumbs, count);\n\n await breadcrumbs.updateComplete;\n await this.nextFrame();\n\n const itemWidths = items.map((item) => item.getBoundingClientRect().width);\n const fullWidth = itemWidths.reduce((sum, width) => sum + width, 0);\n const state = this.ensureBreadcrumbState(breadcrumbs, count);\n const before = Math.max(1, breadcrumbs.itemsBeforeCollapse || 1);\n const after = Math.max(1, breadcrumbs.itemsAfterCollapse || 1);\n const visibleBefore = itemWidths.slice(0, before).reduce((sum, width) => sum + width, 0);\n const visibleAfter = itemWidths.slice(Math.max(count - after, before)).reduce((sum, width) => sum + width, 0);\n const compactWidth = count > state.compactMaxItems\n ? visibleBefore + visibleAfter + 48\n : fullWidth;\n\n state.count = count;\n state.fullWidth = fullWidth;\n state.compactWidth = compactWidth;\n\n return { count, fullWidth, compactWidth };\n }\n\n /**\n * Stores original breadcrumb settings used as responsive compact target.\n * @param {HTMLElement} breadcrumbs Breadcrumbs component.\n * @param {number} count Number of breadcrumb elements currently in the trail.\n * @returns {{compactMaxItems: number}}\n */\n ensureBreadcrumbState(breadcrumbs, count) {\n if (!this._breadcrumbState.has(breadcrumbs)) {\n const attr = breadcrumbs.getAttribute('max-items');\n const parsed = attr === null ? NaN : Number(attr);\n const compactMaxItems = Number.isFinite(parsed) && parsed > 0 ? parsed : Math.min(3, count);\n\n this._breadcrumbState.set(breadcrumbs, {\n compactMaxItems: Math.max(1, Math.min(compactMaxItems, count)),\n });\n }\n\n return this._breadcrumbState.get(breadcrumbs);\n }\n\n /**\n * Applies the compact or full breadcrumb state.\n * @param {HTMLElement|null} breadcrumbs Breadcrumbs component.\n * @param {boolean} compact Whether compact mode should be used.\n */\n setBreadcrumbCompactState(breadcrumbs, compact) {\n if (!breadcrumbs) return;\n\n const count = breadcrumbs.getBreadcrumbs?.().length || 0;\n const state = this.ensureBreadcrumbState(breadcrumbs, count);\n const nextMaxItems = compact ? state.compactMaxItems : count;\n\n this.setBreadcrumbMaxItems(breadcrumbs, nextMaxItems);\n }\n\n /**\n * Sets breadcrumb max-items only when it changed.\n * @param {HTMLElement} breadcrumbs Breadcrumbs component.\n * @param {number} value The max item count.\n */\n setBreadcrumbMaxItems(breadcrumbs, value) {\n if (!breadcrumbs || !value) return;\n\n if (+breadcrumbs.getAttribute('max-items') === value) {\n breadcrumbs.updateCollapse?.();\n return;\n }\n\n breadcrumbs.setAttribute('max-items', value);\n breadcrumbs.updateCollapse?.();\n }\n\n /**\n * Finds how many actions fit into the available width.\n * @param {object} actionMetrics Measured action metrics.\n * @param {number} width Available width.\n * @returns {number}\n */\n getVisibleActionsForWidth(actionMetrics, width) {\n for (let count = actionMetrics.count; count >= 0; count--) {\n if (actionMetrics.getWidthForCount(count) <= width) return count;\n }\n\n return 0;\n }\n\n /**\n * Applies visible action count.\n * @param {HTMLElement|null} action Toolbar action component.\n * @param {number} count Visible action count.\n */\n setVisibleActions(action, count) {\n if (!action) return;\n\n if (+action.getAttribute('visible-items') === count) {\n return;\n }\n\n action.setAttribute('visible-items', count);\n action.applyOverflow?.();\n }\n\n /**\n * Clears toolbar-managed visible action state when actions manage themselves.\n * @param {HTMLElement|null} action Toolbar action component.\n */\n clearVisibleActions(action) {\n if (!action?.hasAttribute?.('visible-items')) return;\n\n action.removeAttribute('visible-items');\n }\n\n /**\n * Returns the slotted toolbar action.\n * @returns {HTMLElement|null}\n */\n getToolbarAction() {\n return this.endSlot?.assignedElements?.().find((el) => el.tagName?.toLowerCase() === 'wje-toolbar-action') || null;\n }\n\n /**\n * Returns the slotted breadcrumbs.\n * @returns {HTMLElement|null}\n */\n getBreadcrumbs() {\n return this.startSlot?.assignedElements?.().find((el) => el.tagName?.toLowerCase() === 'wje-breadcrumbs') || null;\n }\n\n /**\n * Returns whether toolbar actions are managed by their own breakpoint logic.\n * @param {HTMLElement|null} action Toolbar action component.\n * @returns {boolean}\n */\n isSelfManagedAction(action) {\n return !!action?.getAttribute?.('breakpoint');\n }\n\n /**\n * Returns whether breadcrumb collapse is managed by its own breakpoint logic.\n * @param {HTMLElement|null} breadcrumbs Breadcrumbs component.\n * @returns {boolean}\n */\n isSelfManagedBreadcrumbs(breadcrumbs, action) {\n return (\n !!breadcrumbs?.getAttribute('breakpoint') ||\n (breadcrumbs?.hasAttribute?.('max-items') && !!action?.getExistingDropdown?.())\n );\n }\n\n /**\n * Waits for one animation frame.\n * @returns {Promise<void>}\n */\n nextFrame() {\n return new Promise((resolve) => requestAnimationFrame(resolve));\n }\n}\n","import Toolbar from './toolbar.element.js';\n\nexport default Toolbar;\n\nToolbar.define('wje-toolbar', Toolbar);\n"],"names":["Toolbar","WJElement","super","className","this","_breadcrumbState","WeakMap","_responsiveFrame","cssStyleSheet","observedAttributes","setupAttributes","isShadowRoot","syncAria","draw","fragment","document","createDocumentFragment","native","createElement","setAttribute","classList","add","start","end","appendChild","startSlot","endSlot","afterDraw","onSlotChange","scheduleResponsiveLayout","addEventListener","ResizeObserver","_resizeObserver","observe","afterDisconnect","removeEventListener","disconnect","cancelAnimationFrame","hasAttribute","setAriaState","role","ariaLabel","getAttribute","label","requestAnimationFrame","updateResponsiveLayout","action","getToolbarAction","breadcrumbs","getBreadcrumbs","isSelfManagedAction","isSelfManagedBreadcrumbs","toolbarWidth","getBoundingClientRect","width","actionMetrics","measureActionMetrics","breadcrumbMetrics","measureBreadcrumbs","visibleActions","count","compactBreadcrumbs","availableBreadcrumbWidth","getWidthForCount","fullWidth","compactWidth","getVisibleActionsForWidth","clearVisibleActions","setVisibleActions","setBreadcrumbCompactState","items","length","cachedState","ensureBreadcrumbState","setBreadcrumbMaxItems","updateComplete","nextFrame","itemWidths","map","item","reduce","sum","state","before","Math","max","itemsBeforeCollapse","after","itemsAfterCollapse","visibleBefore","slice","visibleAfter","compactMaxItems","has","attr","parsed","NaN","Number","isFinite","min","set","get","compact","nextMaxItems","value","updateCollapse","applyOverflow","removeAttribute","assignedElements","find","el","tagName","toLowerCase","getExistingDropdown","Promise","resolve","define"],"mappings":"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"}
|
package/dist/wje-tooltip.js
CHANGED
|
@@ -1,185 +1,83 @@
|
|
|
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
|
|
4
|
+
import t from "./wje-element.js";
|
|
5
5
|
import "./wje-popup.js";
|
|
6
|
-
import { P as
|
|
7
|
-
import { event } from "./event.js";
|
|
8
|
-
const
|
|
9
|
-
const _Tooltip = class _Tooltip extends WJElement {
|
|
10
|
-
/**
|
|
11
|
-
* Creates an instance of Tooltip.
|
|
12
|
-
*/
|
|
6
|
+
import { P as e } from "./popup.element-CbkhthPP.js";
|
|
7
|
+
import { event as o } from "./event.js";
|
|
8
|
+
const _i = class _i extends t {
|
|
13
9
|
constructor() {
|
|
14
10
|
super();
|
|
15
|
-
|
|
16
|
-
* Dependencies of the Button element.
|
|
17
|
-
* @type {object}
|
|
18
|
-
*/
|
|
19
|
-
__publicField(this, "dependencies", {
|
|
20
|
-
"wje-popup": Popup
|
|
21
|
-
});
|
|
22
|
-
/**
|
|
23
|
-
* The class name for the component.
|
|
24
|
-
* @type {string}
|
|
25
|
-
*/
|
|
11
|
+
__publicField(this, "dependencies", { "wje-popup": e });
|
|
26
12
|
__publicField(this, "className", "Tooltip");
|
|
27
13
|
__publicField(this, "popupHideCallback", () => {
|
|
28
14
|
this.onHide();
|
|
29
15
|
});
|
|
30
|
-
/**
|
|
31
|
-
* Handles the logic for showing the component's popup or tooltip.
|
|
32
|
-
* Adds the `active` class, invokes lifecycle hooks, and manages the popup visibility.
|
|
33
|
-
* @throws {Error} If the `beforeShow` method returns a non-string value or `false`.
|
|
34
|
-
*/
|
|
35
16
|
__publicField(this, "onShow", () => {
|
|
36
17
|
var _a;
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
return;
|
|
41
|
-
}
|
|
42
|
-
Promise.resolve(this.beforeShow(this)).then((res) => {
|
|
43
|
-
if (!this.classList.contains("active") || !res || typeof res !== "string") {
|
|
44
|
-
throw new Error("beforeShow method returned false or not string");
|
|
45
|
-
}
|
|
46
|
-
this.native.innerHTML = res;
|
|
47
|
-
this.popup.show();
|
|
48
|
-
Promise.resolve(this.afterShow(this));
|
|
18
|
+
o.addListener(this, "wje-popup:hide", null, this.popupHideCallback), this.classList.add("active"), ((_a = this.querySelector("wje-dropdown")) == null ? void 0 : _a.classList.contains("active")) || Promise.resolve(this.beforeShow(this)).then((t2) => {
|
|
19
|
+
if (!this.classList.contains("active") || !t2 || "string" != typeof t2) throw new Error("beforeShow method returned false or not string");
|
|
20
|
+
this.native.innerHTML = t2, this.popup.show(), Promise.resolve(this.afterShow(this));
|
|
49
21
|
}).catch(() => {
|
|
50
|
-
this.classList.remove("active");
|
|
51
|
-
this.popup.hide();
|
|
22
|
+
this.classList.remove("active"), this.popup.hide();
|
|
52
23
|
});
|
|
53
24
|
});
|
|
54
|
-
/**
|
|
55
|
-
* Hides the component's popup or tooltip.
|
|
56
|
-
* Removes the `active` class from the component and hides the popup element.
|
|
57
|
-
*/
|
|
58
25
|
__publicField(this, "onHide", () => {
|
|
59
|
-
|
|
60
|
-
this.classList.remove("active");
|
|
61
|
-
this.popup.hide();
|
|
26
|
+
o.removeListener(this, "wje-popup:hide", null, this.popupHideCallback), this.classList.remove("active"), this.popup.hide();
|
|
62
27
|
});
|
|
63
|
-
this._instanceId = ++
|
|
28
|
+
this._instanceId = ++_i._instanceId;
|
|
64
29
|
}
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
* @param value
|
|
68
|
-
*/
|
|
69
|
-
set content(value) {
|
|
70
|
-
this.setAttribute("content", value);
|
|
30
|
+
set content(t2) {
|
|
31
|
+
this.setAttribute("content", t2);
|
|
71
32
|
}
|
|
72
|
-
/**
|
|
73
|
-
* Get active attribute for the tooltip element.
|
|
74
|
-
* @returns {string}
|
|
75
|
-
*/
|
|
76
33
|
get content() {
|
|
77
|
-
|
|
78
|
-
return "";
|
|
34
|
+
return this.hasAttribute("content") ? this.getAttribute("content") : "";
|
|
79
35
|
}
|
|
80
|
-
/**
|
|
81
|
-
* Returns the CSS stylesheet for the component.
|
|
82
|
-
* @static
|
|
83
|
-
* @returns {CSSStyleSheet} The CSS stylesheet
|
|
84
|
-
*/
|
|
85
36
|
static get cssStyleSheet() {
|
|
86
|
-
return
|
|
37
|
+
return '.native-tooltip{display:flex;align-items:center;padding:var(--wje-tooltip-spacing);color:var(--wje-tooltip-color);background-color:var(--wje-tooltip-background);font-weight:var(--wje-tooltip-font-weight);font-size:var(--wje-tooltip-font-size);border-radius:var(--wje-tooltip-border-radius);line-height:var(--wje-tooltip-line-height);box-sizing:border-box;box-shadow:var(--wje-tooltip-shadow)}::slotted([slot="start"]){margin:0 .3rem 0 0}::slotted([slot="end"]){margin:0 0 0 .3rem}.arrow{position:absolute;width:10px;height:10px;background:var(--wje-tooltip-arrow-color);transform:rotate(45deg)}';
|
|
87
38
|
}
|
|
88
|
-
/**
|
|
89
|
-
* Returns the list of observed attributes.
|
|
90
|
-
* @static
|
|
91
|
-
* @returns {Array} An array of observed attributes
|
|
92
|
-
*/
|
|
93
39
|
static get observedAttributes() {
|
|
94
40
|
return ["active"];
|
|
95
41
|
}
|
|
96
|
-
/**
|
|
97
|
-
* Sets up the attributes for the component.
|
|
98
|
-
*/
|
|
99
42
|
setupAttributes() {
|
|
100
|
-
this.isShadowRoot = "open";
|
|
101
|
-
this.setAriaState({ role: "tooltip" });
|
|
43
|
+
this.isShadowRoot = "open", this.setAriaState({ role: "tooltip" });
|
|
102
44
|
}
|
|
103
|
-
/**
|
|
104
|
-
* Draws the component for the tooltip.
|
|
105
|
-
* @returns {object} Document fragment
|
|
106
|
-
*/
|
|
107
45
|
draw() {
|
|
108
|
-
let
|
|
109
|
-
|
|
110
|
-
|
|
111
|
-
|
|
112
|
-
let
|
|
113
|
-
|
|
114
|
-
|
|
115
|
-
|
|
116
|
-
|
|
117
|
-
|
|
118
|
-
let
|
|
119
|
-
|
|
120
|
-
let
|
|
121
|
-
|
|
122
|
-
let content = document.createElement("div");
|
|
123
|
-
content.innerHTML = this.content;
|
|
124
|
-
let native = document.createElement("div");
|
|
125
|
-
native.setAttribute("part", "native");
|
|
126
|
-
native.classList.add("native-tooltip");
|
|
127
|
-
native.appendChild(start);
|
|
128
|
-
native.appendChild(content);
|
|
129
|
-
native.appendChild(end);
|
|
130
|
-
popup.appendChild(slot);
|
|
131
|
-
popup.appendChild(arrow);
|
|
132
|
-
popup.appendChild(native);
|
|
133
|
-
this.mySlot = slot;
|
|
134
|
-
this.popup = popup;
|
|
135
|
-
this.native = native;
|
|
136
|
-
fragment.appendChild(popup);
|
|
137
|
-
return fragment;
|
|
46
|
+
let t2 = document.createDocumentFragment(), e2 = document.createElement("wje-popup");
|
|
47
|
+
e2.setAttribute("placement", this.placement || "top"), e2.setAttribute("offset", this.offset || "0");
|
|
48
|
+
let o2 = document.createElement("slot");
|
|
49
|
+
o2.setAttribute("name", "anchor"), o2.setAttribute("slot", "anchor");
|
|
50
|
+
let i2 = document.createElement("div");
|
|
51
|
+
i2.classList.add("arrow"), i2.setAttribute("slot", "arrow");
|
|
52
|
+
let s = document.createElement("slot");
|
|
53
|
+
s.setAttribute("name", "start");
|
|
54
|
+
let n = document.createElement("slot");
|
|
55
|
+
n.setAttribute("name", "end");
|
|
56
|
+
let r = document.createElement("div");
|
|
57
|
+
r.innerHTML = this.content;
|
|
58
|
+
let l = document.createElement("div");
|
|
59
|
+
return l.setAttribute("part", "native"), l.classList.add("native-tooltip"), l.appendChild(s), l.appendChild(r), l.appendChild(n), e2.appendChild(o2), e2.appendChild(i2), e2.appendChild(l), this.mySlot = o2, this.popup = e2, this.native = l, t2.appendChild(e2), t2;
|
|
138
60
|
}
|
|
139
|
-
/**
|
|
140
|
-
* Draws the component for the tooltip.
|
|
141
|
-
*/
|
|
142
61
|
afterDraw() {
|
|
143
|
-
const
|
|
144
|
-
let
|
|
145
|
-
if (!
|
|
146
|
-
|
|
147
|
-
|
|
148
|
-
}
|
|
149
|
-
if (this.selector) {
|
|
150
|
-
anchorEl2 = this.checkSelector(anchorEl2);
|
|
151
|
-
}
|
|
152
|
-
if (!anchorEl2) return null;
|
|
153
|
-
const tooltipId = this.id || `wje-tooltip-${this._instanceId}`;
|
|
154
|
-
if (!this.id) this.id = tooltipId;
|
|
155
|
-
anchorEl2.setAttribute("aria-describedby", tooltipId);
|
|
156
|
-
return anchorEl2;
|
|
62
|
+
const t2 = () => {
|
|
63
|
+
let t3 = this.mySlot.assignedElements()[0];
|
|
64
|
+
if (t3 || (t3 = this.querySelector(":scope > *:not([slot])"), t3 && t3.setAttribute("slot", "anchor")), this.selector && (t3 = this.checkSelector(t3)), !t3) return null;
|
|
65
|
+
const e3 = this.id || `wje-tooltip-${this._instanceId}`;
|
|
66
|
+
return this.id || (this.id = e3), t3.setAttribute("aria-describedby", e3), t3;
|
|
157
67
|
};
|
|
158
68
|
this.onSlotChange = () => {
|
|
159
|
-
|
|
160
|
-
};
|
|
161
|
-
|
|
162
|
-
this.
|
|
163
|
-
let anchorEl = resolveAnchor();
|
|
164
|
-
if (!anchorEl) return;
|
|
165
|
-
event.addListener(anchorEl, "mouseenter", null, this.onShow);
|
|
166
|
-
event.addListener(anchorEl, "mouseleave", null, this.onHide);
|
|
167
|
-
event.addListener(this, "wje-dropdown:open", null, this.onHide);
|
|
168
|
-
event.addListener(this, "wje-dropdown:close", null, this.onShow);
|
|
69
|
+
t2();
|
|
70
|
+
}, this.mySlot.addEventListener("slotchange", this.onSlotChange), this.onSlotChange();
|
|
71
|
+
let e2 = t2();
|
|
72
|
+
e2 && (o.addListener(e2, "mouseenter", null, this.onShow), o.addListener(e2, "mouseleave", null, this.onHide), o.addListener(this, "wje-dropdown:open", null, this.onHide), o.addListener(this, "wje-dropdown:close", null, this.onShow));
|
|
169
73
|
}
|
|
170
74
|
afterDisconnect() {
|
|
171
75
|
var _a;
|
|
172
|
-
|
|
173
|
-
event.removeListener(this, "wje-dropdown:close", null, this.onShow);
|
|
174
|
-
event.removeListener(this, "mouseenter", null, this.onShow);
|
|
175
|
-
event.removeListener(this, "mouseleave", null, this.onHide);
|
|
176
|
-
(_a = this.mySlot) == null ? void 0 : _a.removeEventListener("slotchange", this.onSlotChange);
|
|
76
|
+
o.removeListener(this, "wje-dropdown:open", null, this.onHide), o.removeListener(this, "wje-dropdown:close", null, this.onShow), o.removeListener(this, "mouseenter", null, this.onShow), o.removeListener(this, "mouseleave", null, this.onHide), (_a = this.mySlot) == null ? void 0 : _a.removeEventListener("slotchange", this.onSlotChange);
|
|
177
77
|
}
|
|
178
|
-
dispatch(
|
|
179
|
-
return new Promise((
|
|
180
|
-
|
|
181
|
-
resolve
|
|
182
|
-
});
|
|
78
|
+
dispatch(t2) {
|
|
79
|
+
return new Promise((e2) => {
|
|
80
|
+
o.dispatchCustomEvent(this, t2, { resolve: e2 });
|
|
183
81
|
});
|
|
184
82
|
}
|
|
185
83
|
beforeShow() {
|
|
@@ -188,24 +86,15 @@ const _Tooltip = class _Tooltip extends WJElement {
|
|
|
188
86
|
afterShow() {
|
|
189
87
|
return true;
|
|
190
88
|
}
|
|
191
|
-
|
|
192
|
-
|
|
193
|
-
|
|
194
|
-
* @param {HTMLElement} anchorEl The root element to search within.
|
|
195
|
-
* @returns {HTMLElement|null} The first element matching the selector, or `null` if not found.
|
|
196
|
-
*/
|
|
197
|
-
checkSelector(anchorEl) {
|
|
198
|
-
const newAnchorEl = anchorEl.querySelector(this.selector);
|
|
199
|
-
if (newAnchorEl === null) {
|
|
200
|
-
console.error("Selector not found:", this.selector);
|
|
201
|
-
}
|
|
202
|
-
return newAnchorEl;
|
|
89
|
+
checkSelector(t2) {
|
|
90
|
+
const e2 = t2.querySelector(this.selector);
|
|
91
|
+
return null === e2 && console.error("Selector not found:", this.selector), e2;
|
|
203
92
|
}
|
|
204
93
|
};
|
|
205
|
-
__publicField(
|
|
206
|
-
let
|
|
207
|
-
|
|
94
|
+
__publicField(_i, "_instanceId", 0);
|
|
95
|
+
let i = _i;
|
|
96
|
+
i.define("wje-tooltip", i);
|
|
208
97
|
export {
|
|
209
|
-
|
|
98
|
+
i as default
|
|
210
99
|
};
|
|
211
100
|
//# sourceMappingURL=wje-tooltip.js.map
|
package/dist/wje-tooltip.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"wje-tooltip.js","sources":["../packages/wje-tooltip/tooltip.element.js","../packages/wje-tooltip/tooltip.js"],"sourcesContent":["import { default as WJElement, event } from '../wje-element/element.js';\nimport Popup from '../wje-popup/popup.js';\nimport styles from './styles/styles.css?inline';\n\n/**\n * `Tooltip` is a custom web component that represents a tooltip.\n * @summary This element represents a tooltip.\n * @documentation https://elements.webjet.sk/components/tooltip\n * @status stable\n * @augments {WJElement}\n * @attribute {string} content - The content of the tooltip element. Accepts any valid string value.\n * @slot arrow - The arrow slot for the tooltip.\n * @slot anchor - The anchor slot for the tooltip.\n * @csspart native - The native tooltip wrapper.\n * @cssproperty [--wje-tooltip-arrow-color=var(--wje-color-contrast-11)] - Specifies the color of the tooltip's arrow. This property determines the visual color of the arrow that points to the element the tooltip is attached to. Accepts any valid CSS color value such as `hex`, `rgb`, or `CSS variable`.\n * @tag wje-tooltip\n */\nexport default class Tooltip extends WJElement {\n static _instanceId = 0;\n /**\n * Creates an instance of Tooltip.\n */\n constructor() {\n super();\n this._instanceId = ++Tooltip._instanceId;\n }\n\n /**\n * Dependencies of the Button element.\n * @type {object}\n */\n dependencies = {\n 'wje-popup': Popup,\n };\n\n /**\n * Set active attribute for the tooltip element.\n * @param value\n */\n set content(value) {\n this.setAttribute('content', value);\n }\n\n /**\n * Get active attribute for the tooltip element.\n * @returns {string}\n */\n get content() {\n if (this.hasAttribute('content')) return this.getAttribute('content');\n\n return '';\n }\n\n /**\n * The class name for the component.\n * @type {string}\n */\n className = 'Tooltip';\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 array of observed attributes\n */\n static get observedAttributes() {\n return ['active'];\n }\n\n /**\n * Sets up the attributes for the component.\n */\n setupAttributes() {\n this.isShadowRoot = 'open';\n this.setAriaState({ role: 'tooltip' });\n }\n\n /**\n * Draws the component for the tooltip.\n * @returns {object} Document fragment\n */\n draw() {\n let fragment = document.createDocumentFragment();\n\n let popup = document.createElement('wje-popup');\n popup.setAttribute('placement', this.placement || 'top');\n popup.setAttribute('offset', this.offset || '0');\n\n // SLOT - Anchor\n let slot = document.createElement('slot');\n slot.setAttribute('name', 'anchor');\n slot.setAttribute('slot', 'anchor');\n\n let arrow = document.createElement('div');\n arrow.classList.add('arrow');\n arrow.setAttribute('slot', 'arrow');\n\n // SLOT - Start\n let start = document.createElement('slot');\n start.setAttribute('name', 'start');\n\n // SLOT - End\n let end = document.createElement('slot');\n end.setAttribute('name', 'end');\n\n let content = document.createElement('div');\n content.innerHTML = this.content;\n\n let native = document.createElement('div');\n native.setAttribute('part', 'native');\n native.classList.add('native-tooltip');\n\n native.appendChild(start);\n native.appendChild(content);\n native.appendChild(end);\n\n popup.appendChild(slot);\n popup.appendChild(arrow);\n popup.appendChild(native);\n\n this.mySlot = slot;\n this.popup = popup;\n this.native = native;\n\n fragment.appendChild(popup);\n\n return fragment;\n }\n\n /**\n * Draws the component for the tooltip.\n */\n afterDraw() {\n const resolveAnchor = () => {\n let anchorEl = this.mySlot.assignedElements()[0];\n if (!anchorEl) {\n anchorEl = this.querySelector(':scope > *:not([slot])');\n if (anchorEl) anchorEl.setAttribute('slot', 'anchor');\n }\n if (this.selector) {\n anchorEl = this.checkSelector(anchorEl);\n }\n\n if (!anchorEl) return null;\n\n const tooltipId = this.id || `wje-tooltip-${this._instanceId}`;\n if (!this.id) this.id = tooltipId;\n anchorEl.setAttribute('aria-describedby', tooltipId);\n return anchorEl;\n };\n\n this.onSlotChange = () => {\n resolveAnchor();\n };\n\n this.mySlot.addEventListener('slotchange', this.onSlotChange);\n this.onSlotChange();\n\n let anchorEl = resolveAnchor();\n\n if (!anchorEl) return;\n\n event.addListener(anchorEl, 'mouseenter', null, this.onShow);\n event.addListener(anchorEl, 'mouseleave', null, this.onHide);\n event.addListener(this, 'wje-dropdown:open', null, this.onHide);\n event.addListener(this, 'wje-dropdown:close', null, this.onShow);\n }\n\n afterDisconnect() {\n event.removeListener(this, 'wje-dropdown:open', null, this.onHide);\n event.removeListener(this, 'wje-dropdown:close', null, this.onShow);\n event.removeListener(this, 'mouseenter', null, this.onShow);\n event.removeListener(this, 'mouseleave', null, this.onHide);\n this.mySlot?.removeEventListener('slotchange', this.onSlotChange);\n }\n\n dispatch(customEvent) {\n return new Promise((resolve) => {\n event.dispatchCustomEvent(this, customEvent, {\n resolve: resolve,\n });\n });\n }\n\n beforeShow() {\n return this.native.innerHTML;\n }\n\n afterShow() {\n return true;\n }\n\n popupHideCallback = () => {\n this.onHide();\n };\n\n /**\n * Handles the logic for showing the component's popup or tooltip.\n * Adds the `active` class, invokes lifecycle hooks, and manages the popup visibility.\n * @throws {Error} If the `beforeShow` method returns a non-string value or `false`.\n */\n onShow = () => {\n event.addListener(this, 'wje-popup:hide', null, this.popupHideCallback);\n\n this.classList.add('active');\n\n if (this.querySelector('wje-dropdown')?.classList.contains('active')) {\n return;\n }\n\n Promise.resolve(this.beforeShow(this))\n .then((res) => {\n if (!this.classList.contains('active') || !res || typeof res !== 'string') {\n throw new Error('beforeShow method returned false or not string');\n }\n\n this.native.innerHTML = res;\n\n this.popup.show(); // Show tooltip\n\n Promise.resolve(this.afterShow(this));\n })\n .catch(() => {\n // ak je nejaka chyba tak to len zatvorime\n this.classList.remove('active');\n this.popup.hide();\n });\n };\n\n /**\n * Hides the component's popup or tooltip.\n * Removes the `active` class from the component and hides the popup element.\n */\n onHide = () => {\n event.removeListener(this, 'wje-popup:hide', null, this.popupHideCallback);\n\n this.classList.remove('active');\n this.popup.hide();\n };\n\n /**\n * Validates if the specified selector exists within the provided element.\n * Logs an error if the selector is not found and returns the found element or `null`.\n * @param {HTMLElement} anchorEl The root element to search within.\n * @returns {HTMLElement|null} The first element matching the selector, or `null` if not found.\n */\n checkSelector(anchorEl) {\n const newAnchorEl = anchorEl.querySelector(this.selector);\n if (newAnchorEl === null) {\n console.error('Selector not found:', this.selector);\n }\n\n return newAnchorEl;\n }\n}\n","import Tooltip from './tooltip.element.js';\n\nexport default Tooltip;\n\nTooltip.define('wje-tooltip', Tooltip);\n"],"names":["anchorEl"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"wje-tooltip.js","sources":["../packages/wje-tooltip/tooltip.element.js","../packages/wje-tooltip/tooltip.js"],"sourcesContent":["import { default as WJElement, event } from '../wje-element/element.js';\nimport Popup from '../wje-popup/popup.js';\nimport styles from './styles/styles.css?inline';\n\n/**\n * `Tooltip` is a custom web component that represents a tooltip.\n * @summary This element represents a tooltip.\n * @documentation https://elements.webjet.sk/components/tooltip\n * @status stable\n * @augments {WJElement}\n * @attribute {string} content - The content of the tooltip element. Accepts any valid string value.\n * @slot arrow - The arrow slot for the tooltip.\n * @slot anchor - The anchor slot for the tooltip.\n * @csspart native - The native tooltip wrapper.\n * @cssproperty [--wje-tooltip-arrow-color=var(--wje-color-contrast-11)] - Specifies the color of the tooltip's arrow. This property determines the visual color of the arrow that points to the element the tooltip is attached to. Accepts any valid CSS color value such as `hex`, `rgb`, or `CSS variable`.\n * @tag wje-tooltip\n */\nexport default class Tooltip extends WJElement {\n static _instanceId = 0;\n /**\n * Creates an instance of Tooltip.\n */\n constructor() {\n super();\n this._instanceId = ++Tooltip._instanceId;\n }\n\n /**\n * Dependencies of the Button element.\n * @type {object}\n */\n dependencies = {\n 'wje-popup': Popup,\n };\n\n /**\n * Set active attribute for the tooltip element.\n * @param value\n */\n set content(value) {\n this.setAttribute('content', value);\n }\n\n /**\n * Get active attribute for the tooltip element.\n * @returns {string}\n */\n get content() {\n if (this.hasAttribute('content')) return this.getAttribute('content');\n\n return '';\n }\n\n /**\n * The class name for the component.\n * @type {string}\n */\n className = 'Tooltip';\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 array of observed attributes\n */\n static get observedAttributes() {\n return ['active'];\n }\n\n /**\n * Sets up the attributes for the component.\n */\n setupAttributes() {\n this.isShadowRoot = 'open';\n this.setAriaState({ role: 'tooltip' });\n }\n\n /**\n * Draws the component for the tooltip.\n * @returns {object} Document fragment\n */\n draw() {\n let fragment = document.createDocumentFragment();\n\n let popup = document.createElement('wje-popup');\n popup.setAttribute('placement', this.placement || 'top');\n popup.setAttribute('offset', this.offset || '0');\n\n // SLOT - Anchor\n let slot = document.createElement('slot');\n slot.setAttribute('name', 'anchor');\n slot.setAttribute('slot', 'anchor');\n\n let arrow = document.createElement('div');\n arrow.classList.add('arrow');\n arrow.setAttribute('slot', 'arrow');\n\n // SLOT - Start\n let start = document.createElement('slot');\n start.setAttribute('name', 'start');\n\n // SLOT - End\n let end = document.createElement('slot');\n end.setAttribute('name', 'end');\n\n let content = document.createElement('div');\n content.innerHTML = this.content;\n\n let native = document.createElement('div');\n native.setAttribute('part', 'native');\n native.classList.add('native-tooltip');\n\n native.appendChild(start);\n native.appendChild(content);\n native.appendChild(end);\n\n popup.appendChild(slot);\n popup.appendChild(arrow);\n popup.appendChild(native);\n\n this.mySlot = slot;\n this.popup = popup;\n this.native = native;\n\n fragment.appendChild(popup);\n\n return fragment;\n }\n\n /**\n * Draws the component for the tooltip.\n */\n afterDraw() {\n const resolveAnchor = () => {\n let anchorEl = this.mySlot.assignedElements()[0];\n if (!anchorEl) {\n anchorEl = this.querySelector(':scope > *:not([slot])');\n if (anchorEl) anchorEl.setAttribute('slot', 'anchor');\n }\n if (this.selector) {\n anchorEl = this.checkSelector(anchorEl);\n }\n\n if (!anchorEl) return null;\n\n const tooltipId = this.id || `wje-tooltip-${this._instanceId}`;\n if (!this.id) this.id = tooltipId;\n anchorEl.setAttribute('aria-describedby', tooltipId);\n return anchorEl;\n };\n\n this.onSlotChange = () => {\n resolveAnchor();\n };\n\n this.mySlot.addEventListener('slotchange', this.onSlotChange);\n this.onSlotChange();\n\n let anchorEl = resolveAnchor();\n\n if (!anchorEl) return;\n\n event.addListener(anchorEl, 'mouseenter', null, this.onShow);\n event.addListener(anchorEl, 'mouseleave', null, this.onHide);\n event.addListener(this, 'wje-dropdown:open', null, this.onHide);\n event.addListener(this, 'wje-dropdown:close', null, this.onShow);\n }\n\n afterDisconnect() {\n event.removeListener(this, 'wje-dropdown:open', null, this.onHide);\n event.removeListener(this, 'wje-dropdown:close', null, this.onShow);\n event.removeListener(this, 'mouseenter', null, this.onShow);\n event.removeListener(this, 'mouseleave', null, this.onHide);\n this.mySlot?.removeEventListener('slotchange', this.onSlotChange);\n }\n\n dispatch(customEvent) {\n return new Promise((resolve) => {\n event.dispatchCustomEvent(this, customEvent, {\n resolve: resolve,\n });\n });\n }\n\n beforeShow() {\n return this.native.innerHTML;\n }\n\n afterShow() {\n return true;\n }\n\n popupHideCallback = () => {\n this.onHide();\n };\n\n /**\n * Handles the logic for showing the component's popup or tooltip.\n * Adds the `active` class, invokes lifecycle hooks, and manages the popup visibility.\n * @throws {Error} If the `beforeShow` method returns a non-string value or `false`.\n */\n onShow = () => {\n event.addListener(this, 'wje-popup:hide', null, this.popupHideCallback);\n\n this.classList.add('active');\n\n if (this.querySelector('wje-dropdown')?.classList.contains('active')) {\n return;\n }\n\n Promise.resolve(this.beforeShow(this))\n .then((res) => {\n if (!this.classList.contains('active') || !res || typeof res !== 'string') {\n throw new Error('beforeShow method returned false or not string');\n }\n\n this.native.innerHTML = res;\n\n this.popup.show(); // Show tooltip\n\n Promise.resolve(this.afterShow(this));\n })\n .catch(() => {\n // ak je nejaka chyba tak to len zatvorime\n this.classList.remove('active');\n this.popup.hide();\n });\n };\n\n /**\n * Hides the component's popup or tooltip.\n * Removes the `active` class from the component and hides the popup element.\n */\n onHide = () => {\n event.removeListener(this, 'wje-popup:hide', null, this.popupHideCallback);\n\n this.classList.remove('active');\n this.popup.hide();\n };\n\n /**\n * Validates if the specified selector exists within the provided element.\n * Logs an error if the selector is not found and returns the found element or `null`.\n * @param {HTMLElement} anchorEl The root element to search within.\n * @returns {HTMLElement|null} The first element matching the selector, or `null` if not found.\n */\n checkSelector(anchorEl) {\n const newAnchorEl = anchorEl.querySelector(this.selector);\n if (newAnchorEl === null) {\n console.error('Selector not found:', this.selector);\n }\n\n return newAnchorEl;\n }\n}\n","import Tooltip from './tooltip.element.js';\n\nexport default Tooltip;\n\nTooltip.define('wje-tooltip', Tooltip);\n"],"names":["Tooltip","WJElement","super","dependencies","Popup","className","popupHideCallback","this","onHide","onShow","event","addListener","classList","add","querySelector","contains","Promise","resolve","beforeShow","then","res","Error","native","innerHTML","popup","show","afterShow","catch","remove","hide","removeListener","_instanceId","value","setAttribute","content","hasAttribute","getAttribute","cssStyleSheet","observedAttributes","setupAttributes","isShadowRoot","setAriaState","role","draw","fragment","document","createDocumentFragment","createElement","placement","offset","slot","arrow","start","end","appendChild","mySlot","afterDraw","resolveAnchor","anchorEl","assignedElements","selector","checkSelector","tooltipId","id","onSlotChange","addEventListener","afterDisconnect","removeEventListener","customEvent","dispatchCustomEvent","newAnchorEl","console","error","static","define"],"mappings":"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"}
|