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.
Files changed (233) hide show
  1. package/dist/animations.js +28 -51
  2. package/dist/animations.js.map +1 -1
  3. package/dist/base-path.js +19 -31
  4. package/dist/base-path.js.map +1 -1
  5. package/dist/custom-elements.json +11504 -11499
  6. package/dist/dark.css +1 -302
  7. package/dist/date.js +16 -36
  8. package/dist/date.js.map +1 -1
  9. package/dist/element-utils.js +20 -81
  10. package/dist/element-utils.js.map +1 -1
  11. package/dist/event.js +49 -165
  12. package/dist/event.js.map +1 -1
  13. package/dist/form-associated-element-BjeJn7j8.js +101 -0
  14. package/dist/{form-associated-element-DEQ4y-jn.js.map → form-associated-element-BjeJn7j8.js.map} +1 -1
  15. package/dist/icon-DmsqtDpL.js +102 -0
  16. package/dist/{icon-CReYMzAK.js.map → icon-DmsqtDpL.js.map} +1 -1
  17. package/dist/light.css +1 -731
  18. package/dist/localize.js +36 -111
  19. package/dist/localize.js.map +1 -1
  20. package/dist/packages/wje-accordion-item/accordion-item.element.d.ts +3 -2
  21. package/dist/permissions.js +14 -41
  22. package/dist/permissions.js.map +1 -1
  23. package/dist/popup.element-CbkhthPP.js +806 -0
  24. package/dist/{popup.element-CwXvVFK7.js.map → popup.element-CbkhthPP.js.map} +1 -1
  25. package/dist/router-links-CNsJ-elb.js +105 -0
  26. package/dist/{router-links-wjqCnncc.js.map → router-links-CNsJ-elb.js.map} +1 -1
  27. package/dist/skeleton.css +1 -197
  28. package/dist/styles.css +1 -866
  29. package/dist/universal-service.js +48 -109
  30. package/dist/universal-service.js.map +1 -1
  31. package/dist/utils.js +11 -18
  32. package/dist/utils.js.map +1 -1
  33. package/dist/web-types.json +760 -760
  34. package/dist/wje-accordion-item.js +33 -106
  35. package/dist/wje-accordion-item.js.map +1 -1
  36. package/dist/wje-accordion.js +19 -84
  37. package/dist/wje-accordion.js.map +1 -1
  38. package/dist/wje-animation.js +37 -4258
  39. package/dist/wje-animation.js.map +1 -1
  40. package/dist/wje-aside.js +9 -34
  41. package/dist/wje-aside.js.map +1 -1
  42. package/dist/wje-avatar.js +36 -126
  43. package/dist/wje-avatar.js.map +1 -1
  44. package/dist/wje-badge.js +10 -52
  45. package/dist/wje-badge.js.map +1 -1
  46. package/dist/wje-breadcrumb.js +205 -672
  47. package/dist/wje-breadcrumb.js.map +1 -1
  48. package/dist/wje-breadcrumbs.js +177 -633
  49. package/dist/wje-breadcrumbs.js.map +1 -1
  50. package/dist/wje-button-group.js +48 -153
  51. package/dist/wje-button-group.js.map +1 -1
  52. package/dist/wje-button.js +92 -413
  53. package/dist/wje-button.js.map +1 -1
  54. package/dist/wje-card-content.js +7 -30
  55. package/dist/wje-card-content.js.map +1 -1
  56. package/dist/wje-card-controls.js +7 -30
  57. package/dist/wje-card-controls.js.map +1 -1
  58. package/dist/wje-card-header.js +7 -30
  59. package/dist/wje-card-header.js.map +1 -1
  60. package/dist/wje-card-subtitle.js +7 -34
  61. package/dist/wje-card-subtitle.js.map +1 -1
  62. package/dist/wje-card-title.js +7 -34
  63. package/dist/wje-card-title.js.map +1 -1
  64. package/dist/wje-card.js +15 -71
  65. package/dist/wje-card.js.map +1 -1
  66. package/dist/wje-carousel-item.js +12 -56
  67. package/dist/wje-carousel-item.js.map +1 -1
  68. package/dist/wje-carousel.js +154 -509
  69. package/dist/wje-carousel.js.map +1 -1
  70. package/dist/wje-checkbox.js +50 -227
  71. package/dist/wje-checkbox.js.map +1 -1
  72. package/dist/wje-chip.js +43 -160
  73. package/dist/wje-chip.js.map +1 -1
  74. package/dist/wje-col.js +7 -20
  75. package/dist/wje-col.js.map +1 -1
  76. package/dist/wje-color-picker.js +445 -1464
  77. package/dist/wje-color-picker.js.map +1 -1
  78. package/dist/wje-container.js +9 -35
  79. package/dist/wje-container.js.map +1 -1
  80. package/dist/wje-copy-button.js +64 -204
  81. package/dist/wje-copy-button.js.map +1 -1
  82. package/dist/wje-dialog.js +85 -553
  83. package/dist/wje-dialog.js.map +1 -1
  84. package/dist/wje-divider.js +7 -34
  85. package/dist/wje-divider.js.map +1 -1
  86. package/dist/wje-dropdown.js +78 -305
  87. package/dist/wje-dropdown.js.map +1 -1
  88. package/dist/wje-element.js +191 -700
  89. package/dist/wje-element.js.map +1 -1
  90. package/dist/wje-file-upload-item.js +51 -156
  91. package/dist/wje-file-upload-item.js.map +1 -1
  92. package/dist/wje-file-upload.js +181 -619
  93. package/dist/wje-file-upload.js.map +1 -1
  94. package/dist/wje-footer.js +7 -31
  95. package/dist/wje-footer.js.map +1 -1
  96. package/dist/wje-form.js +7 -32
  97. package/dist/wje-form.js.map +1 -1
  98. package/dist/wje-format-digital.js +26 -118
  99. package/dist/wje-format-digital.js.map +1 -1
  100. package/dist/wje-grid.js +7 -33
  101. package/dist/wje-grid.js.map +1 -1
  102. package/dist/wje-header.js +9 -35
  103. package/dist/wje-header.js.map +1 -1
  104. package/dist/wje-icon-library.js +12 -18
  105. package/dist/wje-icon-library.js.map +1 -1
  106. package/dist/wje-icon-picker.js +65 -320
  107. package/dist/wje-icon-picker.js.map +1 -1
  108. package/dist/wje-icon.js +1 -1
  109. package/dist/wje-img-comparer.js +37 -114
  110. package/dist/wje-img-comparer.js.map +1 -1
  111. package/dist/wje-img.js +50 -198
  112. package/dist/wje-img.js.map +1 -1
  113. package/dist/wje-infinite-scroll.js +94 -346
  114. package/dist/wje-infinite-scroll.js.map +1 -1
  115. package/dist/wje-input-file.js +23 -84
  116. package/dist/wje-input-file.js.map +1 -1
  117. package/dist/wje-input.js +78 -392
  118. package/dist/wje-input.js.map +1 -1
  119. package/dist/wje-item.js +11 -64
  120. package/dist/wje-item.js.map +1 -1
  121. package/dist/wje-kanban.js +124 -401
  122. package/dist/wje-kanban.js.map +1 -1
  123. package/dist/wje-label.js +9 -32
  124. package/dist/wje-label.js.map +1 -1
  125. package/dist/wje-level-indicator.js +38 -157
  126. package/dist/wje-level-indicator.js.map +1 -1
  127. package/dist/wje-list.js +10 -40
  128. package/dist/wje-list.js.map +1 -1
  129. package/dist/wje-main.js +7 -31
  130. package/dist/wje-main.js.map +1 -1
  131. package/dist/wje-masonry.js +66 -211
  132. package/dist/wje-masonry.js.map +1 -1
  133. package/dist/wje-master.js +45 -161
  134. package/dist/wje-master.js.map +1 -1
  135. package/dist/wje-menu-button.js +10 -38
  136. package/dist/wje-menu-button.js.map +1 -1
  137. package/dist/wje-menu-item.js +127 -577
  138. package/dist/wje-menu-item.js.map +1 -1
  139. package/dist/wje-menu-label.js +9 -35
  140. package/dist/wje-menu-label.js.map +1 -1
  141. package/dist/wje-menu.js +14 -49
  142. package/dist/wje-menu.js.map +1 -1
  143. package/dist/wje-option.js +48 -279
  144. package/dist/wje-option.js.map +1 -1
  145. package/dist/wje-options.js +130 -384
  146. package/dist/wje-options.js.map +1 -1
  147. package/dist/wje-orgchart-group.js +16 -52
  148. package/dist/wje-orgchart-group.js.map +1 -1
  149. package/dist/wje-orgchart-item.js +24 -93
  150. package/dist/wje-orgchart-item.js.map +1 -1
  151. package/dist/wje-orgchart.js +18 -68
  152. package/dist/wje-orgchart.js.map +1 -1
  153. package/dist/wje-pagination.js +113 -397
  154. package/dist/wje-pagination.js.map +1 -1
  155. package/dist/wje-popup.js +3 -3
  156. package/dist/wje-popup.js.map +1 -1
  157. package/dist/wje-progress-bar.js +53 -205
  158. package/dist/wje-progress-bar.js.map +1 -1
  159. package/dist/wje-qr-code.js +398 -2980
  160. package/dist/wje-qr-code.js.map +1 -1
  161. package/dist/wje-radio-group.js +52 -190
  162. package/dist/wje-radio-group.js.map +1 -1
  163. package/dist/wje-radio.js +24 -118
  164. package/dist/wje-radio.js.map +1 -1
  165. package/dist/wje-rate.js +62 -266
  166. package/dist/wje-rate.js.map +1 -1
  167. package/dist/wje-relative-time.js +24 -99
  168. package/dist/wje-relative-time.js.map +1 -1
  169. package/dist/wje-reorder-dropzone.js +9 -31
  170. package/dist/wje-reorder-dropzone.js.map +1 -1
  171. package/dist/wje-reorder-handle.js +67 -204
  172. package/dist/wje-reorder-handle.js.map +1 -1
  173. package/dist/wje-reorder-item.js +14 -44
  174. package/dist/wje-reorder-item.js.map +1 -1
  175. package/dist/wje-reorder.js +61 -246
  176. package/dist/wje-reorder.js.map +1 -1
  177. package/dist/wje-route.js +6 -24
  178. package/dist/wje-route.js.map +1 -1
  179. package/dist/wje-router-link.js +11 -39
  180. package/dist/wje-router-link.js.map +1 -1
  181. package/dist/wje-router-outlet.js +76 -172
  182. package/dist/wje-router-outlet.js.map +1 -1
  183. package/dist/wje-routerx.js +537 -1331
  184. package/dist/wje-routerx.js.map +1 -1
  185. package/dist/wje-row.js +9 -31
  186. package/dist/wje-row.js.map +1 -1
  187. package/dist/wje-select.js +326 -1152
  188. package/dist/wje-select.js.map +1 -1
  189. package/dist/wje-slider.js +44 -225
  190. package/dist/wje-slider.js.map +1 -1
  191. package/dist/wje-sliding-container.js +295 -1319
  192. package/dist/wje-sliding-container.js.map +1 -1
  193. package/dist/wje-split-view.js +35 -121
  194. package/dist/wje-split-view.js.map +1 -1
  195. package/dist/wje-status.js +14 -45
  196. package/dist/wje-status.js.map +1 -1
  197. package/dist/wje-step.js +9 -32
  198. package/dist/wje-step.js.map +1 -1
  199. package/dist/wje-stepper.js +109 -357
  200. package/dist/wje-stepper.js.map +1 -1
  201. package/dist/wje-store.js +67 -360
  202. package/dist/wje-store.js.map +1 -1
  203. package/dist/wje-tab-group.js +85 -314
  204. package/dist/wje-tab-group.js.map +1 -1
  205. package/dist/wje-tab-panel.js +7 -28
  206. package/dist/wje-tab-panel.js.map +1 -1
  207. package/dist/wje-tab.js +21 -198
  208. package/dist/wje-tab.js.map +1 -1
  209. package/dist/wje-textarea.js +64 -264
  210. package/dist/wje-textarea.js.map +1 -1
  211. package/dist/wje-thumbnail.js +10 -51
  212. package/dist/wje-thumbnail.js.map +1 -1
  213. package/dist/wje-toast.js +127 -632
  214. package/dist/wje-toast.js.map +1 -1
  215. package/dist/wje-toggle.js +52 -177
  216. package/dist/wje-toggle.js.map +1 -1
  217. package/dist/wje-toolbar-action.js +128 -456
  218. package/dist/wje-toolbar-action.js.map +1 -1
  219. package/dist/wje-toolbar.js +75 -270
  220. package/dist/wje-toolbar.js.map +1 -1
  221. package/dist/wje-tooltip.js +50 -161
  222. package/dist/wje-tooltip.js.map +1 -1
  223. package/dist/wje-tree-item.js +70 -301
  224. package/dist/wje-tree-item.js.map +1 -1
  225. package/dist/wje-tree.js +145 -489
  226. package/dist/wje-tree.js.map +1 -1
  227. package/dist/wje-visually-hidden.js +7 -34
  228. package/dist/wje-visually-hidden.js.map +1 -1
  229. package/package.json +3 -2
  230. package/dist/form-associated-element-DEQ4y-jn.js +0 -245
  231. package/dist/icon-CReYMzAK.js +0 -245
  232. package/dist/popup.element-CwXvVFK7.js +0 -2133
  233. package/dist/router-links-wjqCnncc.js +0 -156
@@ -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":";;;;AAyBe,MAAMA,UAAgBC,EAAAA;AAAAA,EAIjC;AACIC,UAAAA;AASJC,qCAAY;AARRC,SAAKC,mBAAmB,oBAAIC,WAC5BF,KAAKG,mBAAmB;AAAA,EAC5B;AAAA,EAaA,WAAA,gBAAWC;AACP;EACJ;AAAA,EAOA,WAAA,qBAAWC;AACP,WAAO,CAAA;AAAA,EACX;AAAA,EAKA,kBAAAC;AACIN,SAAKO,eAAe,QACpBP,KAAKQ,SAAAA;AAAAA,EACT;AAAA,EAMA,OAAAC;AACI,QAAIC,KAAWC,SAASC,uBAAAA,GAEpBC,KAASF,SAASG,cAAc,KAAA;AACpCD,IAAAA,GAAOE,aAAa,QAAQ,QAAA,GAC5BF,GAAOG,UAAUC,IAAI;AAErB,QAAIC,IAAQP,SAASG,cAAc,MAAA;AACnCI,MAAMH,aAAa,QAAQ,OAAA;AAE3B,QAAII,IAAMR,SAASG,cAAc,MAAA;AAWjC,WAVAK,EAAIJ,aAAa,QAAQ,KAAA,GAEzBF,GAAOO,YAAYF,CAAAA,GACnBL,GAAOO,YAAYD,CAAAA,GACnBT,GAASU,YAAYP,EAAAA,GAErBb,KAAKa,SAASA,IACdb,KAAKqB,YAAYH,GACjBlB,KAAKsB,UAAUH,GAERT;AAAAA,EACX;AAAA,EAKA,YAAAa;;AACIvB,SAAKwB,eAAe,MAAA;AAChBxB,WAAKC,mBAAmB,oBAAIC,WAC5BF,KAAKyB,yBAAAA;AAAAA,IAAAA,IAETzB,UAAKqB,cAALrB,mBAAgB0B,iBAAiB,cAAc1B,KAAKwB,gBACpDxB,UAAKsB,YAALtB,mBAAc0B,iBAAiB,cAAc1B,KAAKwB,eAEpB,qBAAnBG,mBACP3B,KAAK4B,kBAAkB,IAAID,eAAe,MAAM3B,KAAKyB,yBAAAA,CAAAA,GACrDzB,KAAK4B,gBAAgBC,QAAQ7B,KAAKa,UAAUb,IAAAA,IAGhDA,KAAKyB;EACT;AAAA,EAKA,kBAAAK;;AACI9B,eAAKqB,cAALrB,mBAAgB+B,oBAAoB,cAAc/B,KAAKwB,gBACvDxB,UAAKsB,YAALtB,mBAAc+B,oBAAoB,cAAc/B,KAAKwB,gBACrDxB,UAAK4B,oBAAL5B,mBAAsBgC,cAElBhC,KAAKG,qBACL8B,qBAAqBjC,KAAKG,gBAAAA,GAC1BH,KAAKG,mBAAmB;AAAA,EAEhC;AAAA,EAKA;AACSH,SAAKkC,aAAa,WACnBlC,KAAKmC,aAAa,EAAEC,MAAM;AAG9B,UAAMC,KAAYrC,KAAKsC,aAAa,eAC9BC,KAAQvC,KAAKsC,aAAa,OAAA;AAAA,KAC3BD,MAAaE,MACdvC,KAAKmC,aAAa,EAAEI,OAAAA,GAAAA,CAAAA;AAAAA,EAE5B;AAAA,EAKA,2BAAAd;AACQzB,SAAKG,qBAETH,KAAKG,mBAAmBqC,sBAAsB,MAAA;AAC1CxC,WAAKG,mBAAmB,MACxBH,KAAKyC,uBAAAA;AAAAA,IAAAA,CAAAA;AAAAA,EAEb;AAAA,EAMA,+BAAMA;;AACF,UAAMC,KAAS1C,KAAK2C,iBAAAA,GACdC,KAAc5C,KAAK6C,eAAAA,GACnBC,IAAsB9C,KAAK8C,oBAAoBJ,EAAAA,GAC/CK,IAA2B/C,KAAK+C,yBAAyBH,IAAaF,EAAAA;AAE5E,QAAA,CAAK1C,KAAKa,UAAAA,CAAY6B,OAAWE,GAAc;AAE/C,UAAMI,IAAehD,KAAKa,OAAOoC,sBAAAA,EAAwBC;AACzD,QAAA,CAAKF,EAAc;AAEnB,UAAMG,IAAgBT,MAAAA,CAAWI,KAAsBJ,KAAAA,GAAOU,yBAAPV,wBAAAA,MAAkC,MACnFW,IACFT,MAAAA,CAAgBG,UACJ/C,KAAKsD,mBAAmBV,MAC9B;AAEV,QAAIW,KAAiBJ,uBAAeK,UAAS,GACzCC,IAAAA;AAEJ,QAAIN,KAAiBE,EACjB,UAASG,KAAQL,EAAcK,OAAOA,MAAS,GAAGA,MAAS;AACvD,YACME,KAA2BV,IADbG,EAAcQ,iBAAiBH,EAAAA;AAGnD,UAAIH,EAAkBO,aAAaF,IAA0B;AACzDH,YAAiBC,IACjBC;AACA;AAAA,MACJ;AAEA,UAAIJ,EAAkBQ,gBAAgBH,IAA0B;AAC5DH,YAAiBC,IACjBC;AACA;AAAA,MACJ;AAEc,YAAVD,OACAD,IAAiB,GACjBE,IAAAA;AAAAA,IAER;AAAA,QACON,KACPI,IAAiBvD,KAAK8D,0BAA0BX,GAAeH,CAAAA,IACxDK,MACPI,IAAqBJ,EAAkBO,YAAYZ;AAGnDF,QACA9C,KAAK+D,oBAAoBrB,EAAAA,IAEzB1C,KAAKgE,kBAAkBtB,IAAQa,IAG9BR,KACD/C,KAAKiE,0BAA0BrB,IAAaa,CAAAA;AAAAA,EAEpD;AAAA,EAOA,MAAA,mBAAyBb,IAAAA;;AACrB,UAAMsB,OAAQtB,KAAAA,GAAYC,mBAAZD,wBAAAA,QAAkC,IAC1CY,IAAQU,GAAMC;AAEpB,QAAc,MAAVX,EACA,QAAO,EAAEA,OAAO,GAAGI,WAAW,GAAGC,cAAc,EAAA;AAGnD,UAAMO,IAAcpE,KAAKqE,sBAAsBzB,IAAaY,CAAAA;AAC5D,QAAIY,EAAYZ,UAAUA,KAASY,EAAYR,UAC3C,QAAO,EACHJ,OAAAA,GACAI,WAAWQ,EAAYR,WACvBC,cAAcO,EAAYP,aAAAA;AAIlC7D,SAAKsE,sBAAsB1B,IAAaY,UAElCZ,GAAY2B,gBAAAA,MACZvE,KAAKwE,UAAAA;AAEX,UAAMC,IAAaP,GAAMQ,IAAKC,CAAAA,OAASA,GAAK1B,sBAAAA,EAAwBC,KAAAA,GAC9DU,IAAYa,EAAWG,OAAO,CAACC,IAAK3B,OAAU2B,KAAM3B,IAAO,IAC3D4B,IAAQ9E,KAAKqE,sBAAsBzB,IAAaY,CAAAA,GAChDuB,IAASC,KAAKC,IAAI,GAAGrC,GAAYsC,uBAAuB,CAAA,GACxDC,IAAQH,KAAKC,IAAI,GAAGrC,GAAYwC,sBAAsB,CAAA,GACtDC,IAAgBZ,EAAWa,MAAM,GAAGP,GAAQH,OAAO,CAACC,IAAK3B,OAAU2B,KAAM3B,IAAO,CAAA,GAChFqC,IAAed,EAAWa,MAAMN,KAAKC,IAAIzB,IAAQ2B,GAAOJ,IAASH,OAAO,CAACC,IAAK3B,OAAU2B,KAAM3B,IAAO,CAAA,GACrGW,IAAeL,IAAQsB,EAAMU,kBAC7BH,IAAgBE,IAAe,KAC/B3B;AAMN,WAJAkB,EAAMtB,QAAQA,GACdsB,EAAMlB,YAAYA,GAClBkB,EAAMjB,eAAeA,GAEd,EAAEL,UAAOI,WAAAA,GAAWC,cAAAA,EAAAA;AAAAA,EAC/B;AAAA,EAQA,sBAAsBjB,IAAaY,IAAAA;AAC/B,QAAA,CAAKxD,KAAKC,iBAAiBwF,IAAI7C,EAAAA,GAAc;AACzC,YAAM8C,IAAO9C,GAAYN,aAAa,cAChCqD,IAAkB,SAATD,IAAgBE,MAAMC,OAAOH,CAAAA,GACtCF,IAAkBK,OAAOC,SAASH,CAAAA,KAAWA,IAAS,IAAIA,IAASX,KAAKe,IAAI,GAAGvC,EAAAA;AAErFxD,WAAKC,iBAAiB+F,IAAIpD,IAAa,EACnC4C,iBAAiBR,KAAKC,IAAI,GAAGD,KAAKe,IAAIP,GAAiBhC;IAE/D;AAEA,WAAOxD,KAAKC,iBAAiBgG,IAAIrD,EAAAA;AAAAA,EACrC;AAAA,EAOA,0BAA0BA,IAAasD,IAAAA;;AACnC,QAAA,CAAKtD,GAAa;AAElB,UAAMY,MAAQZ,KAAAA,GAAYC,mBAAZD,wBAAAA,IAA+BuB,WAAU,GACjDW,IAAQ9E,KAAKqE,sBAAsBzB,IAAaY,CAAAA,GAChD2C,IAAeD,KAAUpB,EAAMU,kBAAkBhC;AAEvDxD,SAAKsE,sBAAsB1B,IAAauD;EAC5C;AAAA,EAOA,sBAAsBvD,IAAawD,IAAAA;;AAC1BxD,IAAAA,MAAgBwD,OAAAA,CAEhBxD,GAAYN,aAAa,WAAA,MAAiB8D,MAK/CxD,GAAY7B,aAAa,aAAaqF,EAAAA,IACtCxD,KAAAA,GAAYyD,mBAAZzD,wBAAAA,QALIA,KAAAA,GAAYyD,mBAAZzD,wBAAAA;AAAAA,EAMR;AAAA,EAQA,0BAA0BO,IAAeD;AACrC,aAASM,IAAQL,GAAcK,OAAOA,KAAS,GAAGA,IAC9C,KAAIL,GAAcQ,iBAAiBH,CAAAA,KAAUN,GAAO,QAAOM;AAG/D,WAAO;AAAA,EACX;AAAA,EAOA,kBAAkBd,IAAQc,IAAAA;;AACjBd,IAAAA,MAAAA,CAEAA,GAAOJ,aAAa,qBAAqBkB,OAI9Cd,GAAO3B,aAAa,iBAAiByC,MACrCd,KAAAA,GAAO4D,kBAAP5D,wBAAAA;AAAAA,EACJ;AAAA,EAMA,oBAAoBA,IAAAA;;AACXA,WAAAA,MAAAA,gBAAAA,GAAQR,iBAARQ,wBAAAA,IAAuB,qBAE5BA,GAAO6D,gBAAgB,eAAA;AAAA,EAC3B;AAAA,EAMA,mBAAA5D;;AACI,aAAO3C,gBAAKsB,YAALtB,mBAAcwG,qBAAdxG,4BAAmCyG,KAAMC,CAAAA;;AAAqC,wCAA9BA,MAAAA,GAAGC,YAAHD,gBAAAA,IAAYE;AAAAA,WAA2C;AAAA,EAClH;AAAA,EAMA;;AACI,aAAO5G,gBAAKqB,cAALrB,mBAAgBwG,qBAAhBxG,4BAAqCyG,KAAMC,CAAAA,OAAAA;;AAAqC,qCAA9BA,MAAAA,GAAGC,YAAHD,gBAAAA,IAAYE;AAAAA,WAAwC;AAAA,EACjH;AAAA,EAOA,oBAAoBlE,IAAAA;;AAChB,WAAA,CAAA,GAASA,KAAAA,MAAAA,gBAAAA,GAAQJ,iBAARI,wBAAAA,IAAuB;AAAA,EACpC;AAAA,EAOA,yBAAyBE,IAAaF;;AAClC,WAAA,CAAA,EACME,MAAAA,gBAAAA,GAAaN,aAAa,oBAC3BM,KAAAA,MAAAA,gBAAAA,GAAaV,iBAAbU,wBAAAA,IAA4B,iBAAA,CAAA,GAAkBF,KAAAA,MAAAA,gBAAAA,GAAQmE,wBAARnE,wBAAAA;AAAAA,EAEvD;AAAA,EAMA,YAAA8B;AACI,WAAO,IAAIsC,QAASC,CAAAA,OAAYvE,sBAAsBuE,EAAAA,CAAAA;AAAAA,EAC1D;;AC1YJnH,EAAQoH,OAAO,eAAepH,CAAAA;"}
@@ -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 WJElement from "./wje-element.js";
4
+ import t from "./wje-element.js";
5
5
  import "./wje-popup.js";
6
- import { P as Popup } from "./popup.element-CwXvVFK7.js";
7
- import { event } from "./event.js";
8
- const styles = "/*\n[ WJ Tooltip ]\n*/\n\n.native-tooltip {\n display: flex;\n align-items: center;\n padding: var(--wje-tooltip-spacing);\n color: var(--wje-tooltip-color);\n background-color: var(--wje-tooltip-background);\n font-weight: var(--wje-tooltip-font-weight);\n font-size: var(--wje-tooltip-font-size);\n border-radius: var(--wje-tooltip-border-radius);\n line-height: var(--wje-tooltip-line-height);\n box-sizing: border-box;\n box-shadow: var(--wje-tooltip-shadow);\n}\n\n::slotted([slot='start']) {\n margin: 0 0.3rem 0 0;\n}\n\n::slotted([slot='end']) {\n margin: 0 0 0 0.3rem;\n}\n\n.arrow {\n position: absolute;\n width: 10px;\n height: 10px;\n background: var(--wje-tooltip-arrow-color);\n transform: rotate(45deg);\n}\n";
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
- event.addListener(this, "wje-popup:hide", null, this.popupHideCallback);
38
- this.classList.add("active");
39
- if ((_a = this.querySelector("wje-dropdown")) == null ? void 0 : _a.classList.contains("active")) {
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
- event.removeListener(this, "wje-popup:hide", null, this.popupHideCallback);
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 = ++_Tooltip._instanceId;
28
+ this._instanceId = ++_i._instanceId;
64
29
  }
65
- /**
66
- * Set active attribute for the tooltip element.
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
- if (this.hasAttribute("content")) return this.getAttribute("content");
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 styles;
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 fragment = document.createDocumentFragment();
109
- let popup = document.createElement("wje-popup");
110
- popup.setAttribute("placement", this.placement || "top");
111
- popup.setAttribute("offset", this.offset || "0");
112
- let slot = document.createElement("slot");
113
- slot.setAttribute("name", "anchor");
114
- slot.setAttribute("slot", "anchor");
115
- let arrow = document.createElement("div");
116
- arrow.classList.add("arrow");
117
- arrow.setAttribute("slot", "arrow");
118
- let start = document.createElement("slot");
119
- start.setAttribute("name", "start");
120
- let end = document.createElement("slot");
121
- end.setAttribute("name", "end");
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 resolveAnchor = () => {
144
- let anchorEl2 = this.mySlot.assignedElements()[0];
145
- if (!anchorEl2) {
146
- anchorEl2 = this.querySelector(":scope > *:not([slot])");
147
- if (anchorEl2) anchorEl2.setAttribute("slot", "anchor");
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
- resolveAnchor();
160
- };
161
- this.mySlot.addEventListener("slotchange", this.onSlotChange);
162
- this.onSlotChange();
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
- event.removeListener(this, "wje-dropdown:open", null, this.onHide);
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(customEvent) {
179
- return new Promise((resolve) => {
180
- event.dispatchCustomEvent(this, customEvent, {
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
- * Validates if the specified selector exists within the provided element.
193
- * Logs an error if the selector is not found and returns the found element or `null`.
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(_Tooltip, "_instanceId", 0);
206
- let Tooltip = _Tooltip;
207
- Tooltip.define("wje-tooltip", Tooltip);
94
+ __publicField(_i, "_instanceId", 0);
95
+ let i = _i;
96
+ i.define("wje-tooltip", i);
208
97
  export {
209
- Tooltip as default
98
+ i as default
210
99
  };
211
100
  //# sourceMappingURL=wje-tooltip.js.map
@@ -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":";;;;;;;;AAiBe,MAAM,WAAN,MAAM,iBAAgB,UAAU;AAAA;AAAA;AAAA;AAAA,EAK3C,cAAc;AACV,UAAK;AAQT;AAAA;AAAA;AAAA;AAAA,wCAAe;AAAA,MACX,aAAa;AAAA,IACrB;AAwBI;AAAA;AAAA;AAAA;AAAA,qCAAY;AA+IZ,6CAAoB,MAAM;AACtB,WAAK,OAAM;AAAA,IACf;AAOA;AAAA;AAAA;AAAA;AAAA;AAAA,kCAAS,MAAM;;AACX,YAAM,YAAY,MAAM,kBAAkB,MAAM,KAAK,iBAAiB;AAEtE,WAAK,UAAU,IAAI,QAAQ;AAE3B,WAAI,UAAK,cAAc,cAAc,MAAjC,mBAAoC,UAAU,SAAS,WAAW;AAClE;AAAA,MACJ;AAEA,cAAQ,QAAQ,KAAK,WAAW,IAAI,CAAC,EAChC,KAAK,CAAC,QAAQ;AACX,YAAI,CAAC,KAAK,UAAU,SAAS,QAAQ,KAAK,CAAC,OAAO,OAAO,QAAQ,UAAU;AACvE,gBAAM,IAAI,MAAM,gDAAgD;AAAA,QACpE;AAEA,aAAK,OAAO,YAAY;AAExB,aAAK,MAAM;AAEX,gBAAQ,QAAQ,KAAK,UAAU,IAAI,CAAC;AAAA,MACxC,CAAC,EACA,MAAM,MAAM;AAET,aAAK,UAAU,OAAO,QAAQ;AAC9B,aAAK,MAAM,KAAI;AAAA,MACnB,CAAC;AAAA,IACT;AAMA;AAAA;AAAA;AAAA;AAAA,kCAAS,MAAM;AACX,YAAM,eAAe,MAAM,kBAAkB,MAAM,KAAK,iBAAiB;AAEzE,WAAK,UAAU,OAAO,QAAQ;AAC9B,WAAK,MAAM,KAAI;AAAA,IACnB;AA9NI,SAAK,cAAc,EAAE,SAAQ;AAAA,EACjC;AAAA;AAAA;AAAA;AAAA;AAAA,EAcA,IAAI,QAAQ,OAAO;AACf,SAAK,aAAa,WAAW,KAAK;AAAA,EACtC;AAAA;AAAA;AAAA;AAAA;AAAA,EAMA,IAAI,UAAU;AACV,QAAI,KAAK,aAAa,SAAS,EAAG,QAAO,KAAK,aAAa,SAAS;AAEpE,WAAO;AAAA,EACX;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAaA,WAAW,gBAAgB;AACvB,WAAO;AAAA,EACX;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAOA,WAAW,qBAAqB;AAC5B,WAAO,CAAC,QAAQ;AAAA,EACpB;AAAA;AAAA;AAAA;AAAA,EAKA,kBAAkB;AACd,SAAK,eAAe;AACpB,SAAK,aAAa,EAAE,MAAM,UAAS,CAAE;AAAA,EACzC;AAAA;AAAA;AAAA;AAAA;AAAA,EAMA,OAAO;AACH,QAAI,WAAW,SAAS,uBAAsB;AAE9C,QAAI,QAAQ,SAAS,cAAc,WAAW;AAC9C,UAAM,aAAa,aAAa,KAAK,aAAa,KAAK;AACvD,UAAM,aAAa,UAAU,KAAK,UAAU,GAAG;AAG/C,QAAI,OAAO,SAAS,cAAc,MAAM;AACxC,SAAK,aAAa,QAAQ,QAAQ;AAClC,SAAK,aAAa,QAAQ,QAAQ;AAElC,QAAI,QAAQ,SAAS,cAAc,KAAK;AACxC,UAAM,UAAU,IAAI,OAAO;AAC3B,UAAM,aAAa,QAAQ,OAAO;AAGlC,QAAI,QAAQ,SAAS,cAAc,MAAM;AACzC,UAAM,aAAa,QAAQ,OAAO;AAGlC,QAAI,MAAM,SAAS,cAAc,MAAM;AACvC,QAAI,aAAa,QAAQ,KAAK;AAE9B,QAAI,UAAU,SAAS,cAAc,KAAK;AAC1C,YAAQ,YAAY,KAAK;AAEzB,QAAI,SAAS,SAAS,cAAc,KAAK;AACzC,WAAO,aAAa,QAAQ,QAAQ;AACpC,WAAO,UAAU,IAAI,gBAAgB;AAErC,WAAO,YAAY,KAAK;AACxB,WAAO,YAAY,OAAO;AAC1B,WAAO,YAAY,GAAG;AAEtB,UAAM,YAAY,IAAI;AACtB,UAAM,YAAY,KAAK;AACvB,UAAM,YAAY,MAAM;AAExB,SAAK,SAAS;AACd,SAAK,QAAQ;AACb,SAAK,SAAS;AAEd,aAAS,YAAY,KAAK;AAE1B,WAAO;AAAA,EACX;AAAA;AAAA;AAAA;AAAA,EAKA,YAAY;AACR,UAAM,gBAAgB,MAAM;AACxB,UAAIA,YAAW,KAAK,OAAO,iBAAgB,EAAG,CAAC;AAC/C,UAAI,CAACA,WAAU;AACX,QAAAA,YAAW,KAAK,cAAc,wBAAwB;AACtD,YAAIA,UAAU,CAAAA,UAAS,aAAa,QAAQ,QAAQ;AAAA,MACxD;AACA,UAAI,KAAK,UAAU;AACf,QAAAA,YAAW,KAAK,cAAcA,SAAQ;AAAA,MAC1C;AAEA,UAAI,CAACA,UAAU,QAAO;AAEtB,YAAM,YAAY,KAAK,MAAM,eAAe,KAAK,WAAW;AAC5D,UAAI,CAAC,KAAK,GAAI,MAAK,KAAK;AACxB,MAAAA,UAAS,aAAa,oBAAoB,SAAS;AACnD,aAAOA;AAAA,IACX;AAEA,SAAK,eAAe,MAAM;AACtB,oBAAa;AAAA,IACjB;AAEA,SAAK,OAAO,iBAAiB,cAAc,KAAK,YAAY;AAC5D,SAAK,aAAY;AAEjB,QAAI,WAAW,cAAa;AAE5B,QAAI,CAAC,SAAU;AAEf,UAAM,YAAY,UAAU,cAAc,MAAM,KAAK,MAAM;AAC3D,UAAM,YAAY,UAAU,cAAc,MAAM,KAAK,MAAM;AAC3D,UAAM,YAAY,MAAM,qBAAqB,MAAM,KAAK,MAAM;AAC9D,UAAM,YAAY,MAAM,sBAAsB,MAAM,KAAK,MAAM;AAAA,EACnE;AAAA,EAEA,kBAAkB;;AACd,UAAM,eAAe,MAAM,qBAAqB,MAAM,KAAK,MAAM;AACjE,UAAM,eAAe,MAAM,sBAAsB,MAAM,KAAK,MAAM;AAClE,UAAM,eAAe,MAAM,cAAc,MAAM,KAAK,MAAM;AAC1D,UAAM,eAAe,MAAM,cAAc,MAAM,KAAK,MAAM;AAC1D,eAAK,WAAL,mBAAa,oBAAoB,cAAc,KAAK;AAAA,EACxD;AAAA,EAEA,SAAS,aAAa;AAClB,WAAO,IAAI,QAAQ,CAAC,YAAY;AAC5B,YAAM,oBAAoB,MAAM,aAAa;AAAA,QACzC;AAAA,MAChB,CAAa;AAAA,IACL,CAAC;AAAA,EACL;AAAA,EAEA,aAAa;AACT,WAAO,KAAK,OAAO;AAAA,EACvB;AAAA,EAEA,YAAY;AACR,WAAO;AAAA,EACX;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAwDA,cAAc,UAAU;AACpB,UAAM,cAAc,SAAS,cAAc,KAAK,QAAQ;AACxD,QAAI,gBAAgB,MAAM;AACtB,cAAQ,MAAM,uBAAuB,KAAK,QAAQ;AAAA,IACtD;AAEA,WAAO;AAAA,EACX;AACJ;AApPI,cADiB,UACV,eAAc;AADV,IAAM,UAAN;ACbf,QAAQ,OAAO,eAAe,OAAO;"}
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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"}