wj-elements 0.7.6 → 0.8.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (234) 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 +9053 -9048
  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/packages/wje-img/img.element.d.ts +4 -4
  22. package/dist/permissions.js +14 -41
  23. package/dist/permissions.js.map +1 -1
  24. package/dist/popup.element-CbkhthPP.js +806 -0
  25. package/dist/{popup.element-CwXvVFK7.js.map → popup.element-CbkhthPP.js.map} +1 -1
  26. package/dist/router-links-CNsJ-elb.js +105 -0
  27. package/dist/{router-links-wjqCnncc.js.map → router-links-CNsJ-elb.js.map} +1 -1
  28. package/dist/skeleton.css +1 -197
  29. package/dist/styles.css +1 -866
  30. package/dist/universal-service.js +48 -109
  31. package/dist/universal-service.js.map +1 -1
  32. package/dist/utils.js +11 -18
  33. package/dist/utils.js.map +1 -1
  34. package/dist/web-types.json +698 -698
  35. package/dist/wje-accordion-item.js +33 -106
  36. package/dist/wje-accordion-item.js.map +1 -1
  37. package/dist/wje-accordion.js +19 -84
  38. package/dist/wje-accordion.js.map +1 -1
  39. package/dist/wje-animation.js +37 -4258
  40. package/dist/wje-animation.js.map +1 -1
  41. package/dist/wje-aside.js +9 -34
  42. package/dist/wje-aside.js.map +1 -1
  43. package/dist/wje-avatar.js +36 -126
  44. package/dist/wje-avatar.js.map +1 -1
  45. package/dist/wje-badge.js +10 -52
  46. package/dist/wje-badge.js.map +1 -1
  47. package/dist/wje-breadcrumb.js +205 -668
  48. package/dist/wje-breadcrumb.js.map +1 -1
  49. package/dist/wje-breadcrumbs.js +177 -633
  50. package/dist/wje-breadcrumbs.js.map +1 -1
  51. package/dist/wje-button-group.js +48 -153
  52. package/dist/wje-button-group.js.map +1 -1
  53. package/dist/wje-button.js +92 -413
  54. package/dist/wje-button.js.map +1 -1
  55. package/dist/wje-card-content.js +7 -30
  56. package/dist/wje-card-content.js.map +1 -1
  57. package/dist/wje-card-controls.js +7 -30
  58. package/dist/wje-card-controls.js.map +1 -1
  59. package/dist/wje-card-header.js +7 -30
  60. package/dist/wje-card-header.js.map +1 -1
  61. package/dist/wje-card-subtitle.js +7 -34
  62. package/dist/wje-card-subtitle.js.map +1 -1
  63. package/dist/wje-card-title.js +7 -34
  64. package/dist/wje-card-title.js.map +1 -1
  65. package/dist/wje-card.js +15 -71
  66. package/dist/wje-card.js.map +1 -1
  67. package/dist/wje-carousel-item.js +12 -56
  68. package/dist/wje-carousel-item.js.map +1 -1
  69. package/dist/wje-carousel.js +154 -509
  70. package/dist/wje-carousel.js.map +1 -1
  71. package/dist/wje-checkbox.js +50 -227
  72. package/dist/wje-checkbox.js.map +1 -1
  73. package/dist/wje-chip.js +43 -160
  74. package/dist/wje-chip.js.map +1 -1
  75. package/dist/wje-col.js +7 -20
  76. package/dist/wje-col.js.map +1 -1
  77. package/dist/wje-color-picker.js +445 -1464
  78. package/dist/wje-color-picker.js.map +1 -1
  79. package/dist/wje-container.js +9 -35
  80. package/dist/wje-container.js.map +1 -1
  81. package/dist/wje-copy-button.js +64 -204
  82. package/dist/wje-copy-button.js.map +1 -1
  83. package/dist/wje-dialog.js +85 -553
  84. package/dist/wje-dialog.js.map +1 -1
  85. package/dist/wje-divider.js +7 -34
  86. package/dist/wje-divider.js.map +1 -1
  87. package/dist/wje-dropdown.js +78 -305
  88. package/dist/wje-dropdown.js.map +1 -1
  89. package/dist/wje-element.js +191 -700
  90. package/dist/wje-element.js.map +1 -1
  91. package/dist/wje-file-upload-item.js +51 -156
  92. package/dist/wje-file-upload-item.js.map +1 -1
  93. package/dist/wje-file-upload.js +181 -619
  94. package/dist/wje-file-upload.js.map +1 -1
  95. package/dist/wje-footer.js +7 -31
  96. package/dist/wje-footer.js.map +1 -1
  97. package/dist/wje-form.js +7 -32
  98. package/dist/wje-form.js.map +1 -1
  99. package/dist/wje-format-digital.js +26 -118
  100. package/dist/wje-format-digital.js.map +1 -1
  101. package/dist/wje-grid.js +7 -33
  102. package/dist/wje-grid.js.map +1 -1
  103. package/dist/wje-header.js +9 -35
  104. package/dist/wje-header.js.map +1 -1
  105. package/dist/wje-icon-library.js +12 -18
  106. package/dist/wje-icon-library.js.map +1 -1
  107. package/dist/wje-icon-picker.js +65 -320
  108. package/dist/wje-icon-picker.js.map +1 -1
  109. package/dist/wje-icon.js +1 -1
  110. package/dist/wje-img-comparer.js +37 -114
  111. package/dist/wje-img-comparer.js.map +1 -1
  112. package/dist/wje-img.js +50 -197
  113. package/dist/wje-img.js.map +1 -1
  114. package/dist/wje-infinite-scroll.js +94 -346
  115. package/dist/wje-infinite-scroll.js.map +1 -1
  116. package/dist/wje-input-file.js +23 -84
  117. package/dist/wje-input-file.js.map +1 -1
  118. package/dist/wje-input.js +78 -392
  119. package/dist/wje-input.js.map +1 -1
  120. package/dist/wje-item.js +11 -64
  121. package/dist/wje-item.js.map +1 -1
  122. package/dist/wje-kanban.js +124 -401
  123. package/dist/wje-kanban.js.map +1 -1
  124. package/dist/wje-label.js +9 -32
  125. package/dist/wje-label.js.map +1 -1
  126. package/dist/wje-level-indicator.js +38 -157
  127. package/dist/wje-level-indicator.js.map +1 -1
  128. package/dist/wje-list.js +10 -40
  129. package/dist/wje-list.js.map +1 -1
  130. package/dist/wje-main.js +7 -31
  131. package/dist/wje-main.js.map +1 -1
  132. package/dist/wje-masonry.js +66 -211
  133. package/dist/wje-masonry.js.map +1 -1
  134. package/dist/wje-master.js +45 -161
  135. package/dist/wje-master.js.map +1 -1
  136. package/dist/wje-menu-button.js +10 -38
  137. package/dist/wje-menu-button.js.map +1 -1
  138. package/dist/wje-menu-item.js +127 -577
  139. package/dist/wje-menu-item.js.map +1 -1
  140. package/dist/wje-menu-label.js +9 -35
  141. package/dist/wje-menu-label.js.map +1 -1
  142. package/dist/wje-menu.js +14 -49
  143. package/dist/wje-menu.js.map +1 -1
  144. package/dist/wje-option.js +48 -279
  145. package/dist/wje-option.js.map +1 -1
  146. package/dist/wje-options.js +130 -384
  147. package/dist/wje-options.js.map +1 -1
  148. package/dist/wje-orgchart-group.js +16 -52
  149. package/dist/wje-orgchart-group.js.map +1 -1
  150. package/dist/wje-orgchart-item.js +24 -93
  151. package/dist/wje-orgchart-item.js.map +1 -1
  152. package/dist/wje-orgchart.js +18 -68
  153. package/dist/wje-orgchart.js.map +1 -1
  154. package/dist/wje-pagination.js +113 -397
  155. package/dist/wje-pagination.js.map +1 -1
  156. package/dist/wje-popup.js +3 -3
  157. package/dist/wje-popup.js.map +1 -1
  158. package/dist/wje-progress-bar.js +53 -205
  159. package/dist/wje-progress-bar.js.map +1 -1
  160. package/dist/wje-qr-code.js +398 -2980
  161. package/dist/wje-qr-code.js.map +1 -1
  162. package/dist/wje-radio-group.js +52 -190
  163. package/dist/wje-radio-group.js.map +1 -1
  164. package/dist/wje-radio.js +24 -118
  165. package/dist/wje-radio.js.map +1 -1
  166. package/dist/wje-rate.js +62 -266
  167. package/dist/wje-rate.js.map +1 -1
  168. package/dist/wje-relative-time.js +24 -99
  169. package/dist/wje-relative-time.js.map +1 -1
  170. package/dist/wje-reorder-dropzone.js +9 -31
  171. package/dist/wje-reorder-dropzone.js.map +1 -1
  172. package/dist/wje-reorder-handle.js +67 -204
  173. package/dist/wje-reorder-handle.js.map +1 -1
  174. package/dist/wje-reorder-item.js +14 -44
  175. package/dist/wje-reorder-item.js.map +1 -1
  176. package/dist/wje-reorder.js +61 -246
  177. package/dist/wje-reorder.js.map +1 -1
  178. package/dist/wje-route.js +6 -24
  179. package/dist/wje-route.js.map +1 -1
  180. package/dist/wje-router-link.js +11 -39
  181. package/dist/wje-router-link.js.map +1 -1
  182. package/dist/wje-router-outlet.js +76 -172
  183. package/dist/wje-router-outlet.js.map +1 -1
  184. package/dist/wje-routerx.js +537 -1331
  185. package/dist/wje-routerx.js.map +1 -1
  186. package/dist/wje-row.js +9 -31
  187. package/dist/wje-row.js.map +1 -1
  188. package/dist/wje-select.js +326 -1152
  189. package/dist/wje-select.js.map +1 -1
  190. package/dist/wje-slider.js +44 -225
  191. package/dist/wje-slider.js.map +1 -1
  192. package/dist/wje-sliding-container.js +295 -1319
  193. package/dist/wje-sliding-container.js.map +1 -1
  194. package/dist/wje-split-view.js +35 -121
  195. package/dist/wje-split-view.js.map +1 -1
  196. package/dist/wje-status.js +14 -45
  197. package/dist/wje-status.js.map +1 -1
  198. package/dist/wje-step.js +9 -32
  199. package/dist/wje-step.js.map +1 -1
  200. package/dist/wje-stepper.js +109 -357
  201. package/dist/wje-stepper.js.map +1 -1
  202. package/dist/wje-store.js +67 -360
  203. package/dist/wje-store.js.map +1 -1
  204. package/dist/wje-tab-group.js +85 -314
  205. package/dist/wje-tab-group.js.map +1 -1
  206. package/dist/wje-tab-panel.js +7 -28
  207. package/dist/wje-tab-panel.js.map +1 -1
  208. package/dist/wje-tab.js +21 -198
  209. package/dist/wje-tab.js.map +1 -1
  210. package/dist/wje-textarea.js +64 -264
  211. package/dist/wje-textarea.js.map +1 -1
  212. package/dist/wje-thumbnail.js +10 -51
  213. package/dist/wje-thumbnail.js.map +1 -1
  214. package/dist/wje-toast.js +127 -632
  215. package/dist/wje-toast.js.map +1 -1
  216. package/dist/wje-toggle.js +52 -177
  217. package/dist/wje-toggle.js.map +1 -1
  218. package/dist/wje-toolbar-action.js +128 -456
  219. package/dist/wje-toolbar-action.js.map +1 -1
  220. package/dist/wje-toolbar.js +75 -270
  221. package/dist/wje-toolbar.js.map +1 -1
  222. package/dist/wje-tooltip.js +50 -161
  223. package/dist/wje-tooltip.js.map +1 -1
  224. package/dist/wje-tree-item.js +70 -301
  225. package/dist/wje-tree-item.js.map +1 -1
  226. package/dist/wje-tree.js +145 -489
  227. package/dist/wje-tree.js.map +1 -1
  228. package/dist/wje-visually-hidden.js +7 -34
  229. package/dist/wje-visually-hidden.js.map +1 -1
  230. package/package.json +4 -2
  231. package/dist/form-associated-element-DEQ4y-jn.js +0 -245
  232. package/dist/icon-CReYMzAK.js +0 -245
  233. package/dist/popup.element-CwXvVFK7.js +0 -2133
  234. package/dist/router-links-wjqCnncc.js +0 -156
@@ -1 +1 @@
1
- {"version":3,"file":"wje-tab-group.js","sources":["../packages/wje-tab-group/tab-group.element.js","../packages/wje-tab-group/tab-group.js"],"sourcesContent":["import { default as WJElement } from '../wje-element/element.js';\nimport styles from './styles/styles.css?inline';\n\n/**\n * `TabGroup` is a custom web component that represents a group of tabs.\n * @summary This element represents a group of tabs.\n * @documentation https://elements.webjet.sk/components/tab-group\n * @status stable\n * @augments WJElement\n * @param {string} type The type of the tab group. Can be either 'panel' or 'route'.\n * @slot - The default slot for the tab group.\n * @slot nav - Slot for the navigation of the tab group.\n * @cssproperty [--wje-tab-group-padding=1rem] - Specifies the padding inside the tab group. This property defines the space between the content of the tab group and its outer boundary. Accepts any valid CSS length unit (e.g., `px`, `rem`, `em`, `%`).\n * @tag wje-tab-group\n */\n\nexport default class TabGroup extends WJElement {\n static _instanceId = 0;\n\n /**\n * Creates an instance of TabGroup.\n * @class\n */\n constructor() {\n super();\n\n this._instanceId = ++TabGroup._instanceId;\n this._lastNavWidth = null;\n this._initialized = false;\n this._moreWidth = 0;\n }\n\n /**\n * Sets the value for the 'variant' attribute of the element.\n * @param {string} value The value to set for the 'variant' attribute.\n */\n set variant(value) {\n this.setAttribute('variant', value);\n this.setAriaState({\n orientation: (value === 'start' || value === 'end') ? 'vertical' : 'horizontal',\n });\n }\n\n /**\n * Gets the value of the 'variant' attribute.\n * If the attribute is not set, it defaults to 'top'.\n * @returns {string} The value of the 'variant' attribute or the default value 'top' if not set.\n */\n get variant() {\n return this.getAttribute('variant') || 'top';\n }\n\n /**\n * Sets the 'type' attribute of the element to the specified value.\n * @param {string} value The value to set for the 'type' attribute.\n */\n set type(value) {\n this.setAttribute('type', value);\n }\n\n /**\n * Retrieves the `type` attribute of the element.\n * If the `type` attribute is not set, it defaults to `'panel'`.\n * @returns {string} The value of the `type` attribute or the default value `'panel'`.\n */\n get type() {\n return this.getAttribute('type') || 'panel';\n }\n\n className = 'TabGroup';\n\n /**\n * Returns the CSS styles for the component.\n * @static\n * @returns {CSSStyleSheet}\n */\n static get cssStyleSheet() {\n return styles;\n }\n\n /**\n * Sets up the attributes for the component.\n */\n setupAttributes() {\n this.isShadowRoot = 'open';\n\n this.setAriaState({\n role: 'tablist',\n orientation: (this.variant === 'start' || this.variant === 'end') ? 'vertical' : 'horizontal',\n });\n }\n\n /**\n * Sets up the event listeners before the component is drawn.\n * This method is called before the component is drawn.\n * It is used to set up event listeners.\n */\n beforeDraw() {\n let activeTabName = location.hash.replace('#', '');\n\n // skontrolujeme ci sa nachadza v paneloch\n if (this.getPanelAllName().includes(activeTabName)) {\n window.addEventListener('load', (e) => {\n this.setActiveTab(activeTabName);\n });\n }\n }\n\n /**\n * Creates and returns a document fragment containing a structured layout for a tab group.\n * The tab group layout includes a `header` section with navigational elements,\n * a `section` element for tab panels, and slots for customization such as additional navigation items,\n * dropdowns, and more.\n * The structure comprises:\n * - A `div` container with relevant styling and part attributes.\n * - A `header` for tabs, including a slot for navigation (`nav`) and additional tabs in a dropdown (`moreDropdown`).\n * - A `section` for tab panels with a customizable `slot`.\n * This function also initializes the `nav` and `moreDropdown` properties for external use.\n * @returns {DocumentFragment} The completed document fragment containing the tab group layout.\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-tab-group');\n\n let header = document.createElement('header');\n header.setAttribute('part', 'tabs');\n header.classList.add('scroll-snap-x');\n\n let nav = document.createElement('nav');\n nav.setAttribute('part', 'nav');\n\n let section = document.createElement('section');\n section.setAttribute('part', 'panels');\n\n let slot = document.createElement('slot');\n\n let slotNav = document.createElement('slot');\n slotNav.setAttribute('name', 'nav');\n\n // More dropdown\n let icon = document.createElement('wje-icon');\n icon.setAttribute('name', 'dots');\n\n let button = document.createElement('wje-button');\n button.setAttribute('slot', 'trigger');\n button.setAttribute('fill', 'link');\n\n let menu = document.createElement('wje-menu');\n menu.setAttribute('variant', 'context');\n\n let slotMore = document.createElement('slot');\n slotMore.setAttribute('name', 'more');\n\n let moreDropdown = document.createElement('wje-dropdown');\n moreDropdown.setAttribute('placement', 'bottom-end');\n moreDropdown.setAttribute('collapsible', '');\n moreDropdown.classList.add('more-tabs');\n\n // APPEND\n button.append(icon);\n\n menu.append(slotMore);\n\n moreDropdown.append(button);\n moreDropdown.append(menu);\n\n header.append(nav);\n\n nav.append(slotNav);\n\n if(this.variant === 'top' || this.variant === 'bottom') {\n nav.append(moreDropdown);\n }\n\n section.append(slot);\n\n native.append(header);\n native.append(section);\n\n fragment.append(native);\n\n this.nav = nav;\n this.moreDropdown = moreDropdown;\n\n return fragment;\n }\n\n /**\n * Executes necessary initializations and attaches event listeners after a drawing operation.\n * Handles active tab selection, 'wje-tab:change' event binding, and window resize event for overflow checking.\n * @returns {void} Does not return a value.\n */\n afterDraw() {\n let activeTab = this.getActiveTab();\n let activeTabName = activeTab ? activeTab[0][this.type] : this.getTabAll()[0][this.type];\n\n this.setActiveTab(activeTabName);\n\n this.addEventListener('wje-tab:change', (e) => {\n if (e.detail.context.hasAttribute('disabled')) return;\n this.setActiveTab(e.detail.context.panel);\n });\n\n if (this.variant === 'top' || this.variant === 'bottom') {\n this.initTabMetrics();\n\n this._resizeObserver = new ResizeObserver(entries => {\n const width = entries[0].contentRect.width;\n\n if (width !== this._lastNavWidth) {\n this._lastNavWidth = width;\n this.checkOverflow();\n }\n });\n\n this._resizeObserver.observe(this);\n }\n }\n\n /**\n * Removes the 'active' class from all panel and tab elements.\n * @returns {void} This method does not return a value.\n */\n removeActiveTab() {\n this.getPanelAll().forEach((el) => {\n el.classList.remove('active');\n });\n\n this.getTabAll().forEach((el) => {\n el.classList.remove('active');\n });\n }\n\n /**\n * Sets the active tab and panel.\n * @param {string} tab The name of the tab to set as active.\n */\n setActiveTab(tab) {\n this.removeActiveTab();\n\n const el = this.querySelector(`[${this.type}=\"${tab}\"]`)\n el?.classList.add('active');\n\n if(this.type === 'panel')\n this.querySelector(`[name=\"${tab}\"]`)?.classList.add('active');\n\n if(el)\n this.dropdownActive(el);\n\n this.syncAria();\n }\n\n /**\n * Returns the currently active tab.\n * @returns {Element|null} The active tab, or null if no tab is active.\n */\n getActiveTab() {\n let activeTabs = Array.from(this.querySelectorAll('wje-tab.active'));\n return activeTabs.length > 0 ? activeTabs : null;\n }\n\n /**\n * Returns all tabs.\n * @returns {Array<Element>} An array of all tabs.\n */\n getTabAll() {\n return this.context.querySelector('[name=\"nav\"]').assignedElements();\n }\n\n /**\n * Returns all tabs, including those moved to \"more\".\n * @returns {Array<Element>} An array of all tabs.\n */\n getAllTabs() {\n return Array.from(this.querySelectorAll('wje-tab'));\n }\n\n /**\n * Returns all panels.\n * @returns {Array<Element>} An array of all panels.\n */\n getPanelAll() {\n return Array.from(this.querySelectorAll('wje-tab-panel'));\n }\n\n /**\n * Returns the names of all tabs.\n * @returns {Array<string>} An array of all tab names.\n */\n getPanelAllName() {\n return this.getPanelAll().map((el) => el.getAttribute('name'));\n }\n\n /**\n * Toggles the visibility of the \"more\" dropdown based on the presence of tabs in the \"more\" slot.\n * @returns {void} Does not return a value.\n */\n toggleMoreVisibility() {\n const hasTabsInMore = !!this.querySelector('wje-tab[slot=\"more\"]');\n const nextHidden = !hasTabsInMore;\n\n if (this.moreDropdown.hidden !== nextHidden) {\n this.moreDropdown.hidden = nextHidden;\n }\n }\n\n /**\n * Initializes metrics for tabs within the component. Assigns each tab to the navigation slot\n * and calculates their dimensions for further operations.\n * @returns {void} Does not return any value.\n */\n initTabMetrics() {\n requestAnimationFrame(() => {\n this._tabMetrics = this.measureTabMetrics();\n this.measureMoreWidth();\n this._initialized = true;\n this.checkOverflow(); // prvý výpočet\n this._lastNavWidth = this.nav.getBoundingClientRect().width;\n });\n }\n\n /**\n * Measures current tab widths while all tabs are temporarily placed into the main nav slot.\n * @returns {Array<{el: Element, width: number}>}\n */\n measureTabMetrics() {\n const tabs = Array.from(this.querySelectorAll('wje-tab'));\n\n tabs.forEach(tab => tab.setAttribute('slot', 'nav'));\n\n return tabs.map(tab => ({\n el: tab,\n width: tab.getBoundingClientRect().width\n }));\n }\n\n /**\n * Stores the measured width of the more dropdown trigger when available.\n * @returns {void}\n */\n measureMoreWidth() {\n const wasHidden = this.moreDropdown.hidden;\n const previousVisibility = this.moreDropdown.style.visibility;\n\n if (wasHidden) {\n this.moreDropdown.hidden = false;\n this.moreDropdown.style.visibility = 'hidden';\n }\n\n const width = this.moreDropdown.getBoundingClientRect().width || 0;\n\n if (wasHidden) {\n this.moreDropdown.hidden = true;\n this.moreDropdown.style.visibility = previousVisibility;\n }\n\n if (width > 0) {\n this._moreWidth = width;\n }\n }\n\n /**\n * Checks if the tabs within a navigation bar overflow the available space.\n * Moves overflowing tabs into a dropdown menu and updates their state accordingly.\n * @returns {void} This method does not return a value.\n */\n checkOverflow() {\n if (!this._initialized) return;\n\n this._tabMetrics = this.measureTabMetrics();\n this.measureMoreWidth();\n\n const navWidth = this.nav.getBoundingClientRect().width;\n const moreWidth = this._moreWidth || 48;\n const totalWidth = this._tabMetrics.reduce((sum, { width }) => sum + width, 0);\n\n if (totalWidth <= navWidth) {\n this._tabMetrics.forEach(({ el }) => el.setAttribute('slot', 'nav'));\n this.toggleMoreVisibility();\n this.dropdownActive(this.getActiveTab()?.[0]);\n return;\n }\n\n let used = 0;\n let overflowStarted = false;\n const availableWidth = Math.max(navWidth - moreWidth, 0);\n\n for (const { el, width } of this._tabMetrics) {\n used += width;\n\n const shouldOverflow = used > availableWidth;\n\n el.setAttribute('slot', shouldOverflow || overflowStarted ? 'more' : 'nav');\n overflowStarted ||= shouldOverflow;\n }\n\n this.toggleMoreVisibility();\n this.dropdownActive(this.getActiveTab()?.[0]);\n }\n\n /**\n * Toggles the \"dropdown-active\" class on the element based on its \"active\" status\n * and the value of its \"slot\" attribute.\n * @param {HTMLElement} el The HTML element to evaluate and apply the toggle logic.\n * @returns {void} This method does not return any value.\n */\n dropdownActive(el) {\n if (!el) {\n this.moreDropdown.classList.remove('dropdown-active');\n return;\n }\n\n if(el.classList.contains('active')) {\n if(el.getAttribute('slot') === 'more')\n this.moreDropdown.classList.add('dropdown-active');\n else\n this.moreDropdown.classList.remove('dropdown-active');\n }\n }\n\n /**\n * Syncs ARIA attributes on tabs and panels.\n */\n syncAria() {\n const tabs = this.getAllTabs();\n const panels = this.getPanelAll();\n const panelByName = new Map(panels.map((p) => [p.getAttribute('name'), p]));\n const groupId = this.id || `wje-tab-group-${this._instanceId}`;\n\n this.setAriaState({\n orientation: (this.variant === 'start' || this.variant === 'end') ? 'vertical' : 'horizontal',\n });\n\n tabs.forEach((tab, index) => {\n const tabName = tab.getAttribute(this.type) || tab.panel || tab.route || String(index);\n const isActive = tab.classList.contains('active');\n const isDisabled = tab.hasAttribute('disabled');\n\n if (!tab.id) tab.id = `wje-tab-${tabName}`;\n\n let controlsId = '';\n if (this.type === 'panel') {\n const panel = panelByName.get(tabName);\n if (panel) {\n if (!panel.id) panel.id = `wje-tab-panel-${tabName}`;\n controlsId = panel.id;\n panel.setAriaState({\n role: 'tabpanel',\n labelledBy: tab.id,\n });\n }\n }\n\n tab.setAriaState({\n role: 'tab',\n selected: isActive,\n disabled: isDisabled,\n controls: controlsId || '',\n });\n\n if (typeof tab.setRovingTabIndex === 'function') {\n tab.setRovingTabIndex(isActive ? 0 : -1);\n }\n });\n }\n\n disconnectedCallback() {\n super.disconnectedCallback?.();\n this._resizeObserver?.disconnect();\n }\n}\n","import TabGroup from './tab-group.element.js';\n\nexport default TabGroup;\n\nTabGroup.define('wje-tab-group', TabGroup);\n"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"wje-tab-group.js","sources":["../packages/wje-tab-group/tab-group.element.js","../packages/wje-tab-group/tab-group.js"],"sourcesContent":["import { default as WJElement } from '../wje-element/element.js';\nimport styles from './styles/styles.css?inline';\n\n/**\n * `TabGroup` is a custom web component that represents a group of tabs.\n * @summary This element represents a group of tabs.\n * @documentation https://elements.webjet.sk/components/tab-group\n * @status stable\n * @augments WJElement\n * @param {string} type The type of the tab group. Can be either 'panel' or 'route'.\n * @slot - The default slot for the tab group.\n * @slot nav - Slot for the navigation of the tab group.\n * @cssproperty [--wje-tab-group-padding=1rem] - Specifies the padding inside the tab group. This property defines the space between the content of the tab group and its outer boundary. Accepts any valid CSS length unit (e.g., `px`, `rem`, `em`, `%`).\n * @tag wje-tab-group\n */\n\nexport default class TabGroup extends WJElement {\n static _instanceId = 0;\n\n /**\n * Creates an instance of TabGroup.\n * @class\n */\n constructor() {\n super();\n\n this._instanceId = ++TabGroup._instanceId;\n this._lastNavWidth = null;\n this._initialized = false;\n this._moreWidth = 0;\n }\n\n /**\n * Sets the value for the 'variant' attribute of the element.\n * @param {string} value The value to set for the 'variant' attribute.\n */\n set variant(value) {\n this.setAttribute('variant', value);\n this.setAriaState({\n orientation: (value === 'start' || value === 'end') ? 'vertical' : 'horizontal',\n });\n }\n\n /**\n * Gets the value of the 'variant' attribute.\n * If the attribute is not set, it defaults to 'top'.\n * @returns {string} The value of the 'variant' attribute or the default value 'top' if not set.\n */\n get variant() {\n return this.getAttribute('variant') || 'top';\n }\n\n /**\n * Sets the 'type' attribute of the element to the specified value.\n * @param {string} value The value to set for the 'type' attribute.\n */\n set type(value) {\n this.setAttribute('type', value);\n }\n\n /**\n * Retrieves the `type` attribute of the element.\n * If the `type` attribute is not set, it defaults to `'panel'`.\n * @returns {string} The value of the `type` attribute or the default value `'panel'`.\n */\n get type() {\n return this.getAttribute('type') || 'panel';\n }\n\n className = 'TabGroup';\n\n /**\n * Returns the CSS styles for the component.\n * @static\n * @returns {CSSStyleSheet}\n */\n static get cssStyleSheet() {\n return styles;\n }\n\n /**\n * Sets up the attributes for the component.\n */\n setupAttributes() {\n this.isShadowRoot = 'open';\n\n this.setAriaState({\n role: 'tablist',\n orientation: (this.variant === 'start' || this.variant === 'end') ? 'vertical' : 'horizontal',\n });\n }\n\n /**\n * Sets up the event listeners before the component is drawn.\n * This method is called before the component is drawn.\n * It is used to set up event listeners.\n */\n beforeDraw() {\n let activeTabName = location.hash.replace('#', '');\n\n // skontrolujeme ci sa nachadza v paneloch\n if (this.getPanelAllName().includes(activeTabName)) {\n window.addEventListener('load', (e) => {\n this.setActiveTab(activeTabName);\n });\n }\n }\n\n /**\n * Creates and returns a document fragment containing a structured layout for a tab group.\n * The tab group layout includes a `header` section with navigational elements,\n * a `section` element for tab panels, and slots for customization such as additional navigation items,\n * dropdowns, and more.\n * The structure comprises:\n * - A `div` container with relevant styling and part attributes.\n * - A `header` for tabs, including a slot for navigation (`nav`) and additional tabs in a dropdown (`moreDropdown`).\n * - A `section` for tab panels with a customizable `slot`.\n * This function also initializes the `nav` and `moreDropdown` properties for external use.\n * @returns {DocumentFragment} The completed document fragment containing the tab group layout.\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-tab-group');\n\n let header = document.createElement('header');\n header.setAttribute('part', 'tabs');\n header.classList.add('scroll-snap-x');\n\n let nav = document.createElement('nav');\n nav.setAttribute('part', 'nav');\n\n let section = document.createElement('section');\n section.setAttribute('part', 'panels');\n\n let slot = document.createElement('slot');\n\n let slotNav = document.createElement('slot');\n slotNav.setAttribute('name', 'nav');\n\n // More dropdown\n let icon = document.createElement('wje-icon');\n icon.setAttribute('name', 'dots');\n\n let button = document.createElement('wje-button');\n button.setAttribute('slot', 'trigger');\n button.setAttribute('fill', 'link');\n\n let menu = document.createElement('wje-menu');\n menu.setAttribute('variant', 'context');\n\n let slotMore = document.createElement('slot');\n slotMore.setAttribute('name', 'more');\n\n let moreDropdown = document.createElement('wje-dropdown');\n moreDropdown.setAttribute('placement', 'bottom-end');\n moreDropdown.setAttribute('collapsible', '');\n moreDropdown.classList.add('more-tabs');\n\n // APPEND\n button.append(icon);\n\n menu.append(slotMore);\n\n moreDropdown.append(button);\n moreDropdown.append(menu);\n\n header.append(nav);\n\n nav.append(slotNav);\n\n if(this.variant === 'top' || this.variant === 'bottom') {\n nav.append(moreDropdown);\n }\n\n section.append(slot);\n\n native.append(header);\n native.append(section);\n\n fragment.append(native);\n\n this.nav = nav;\n this.moreDropdown = moreDropdown;\n\n return fragment;\n }\n\n /**\n * Executes necessary initializations and attaches event listeners after a drawing operation.\n * Handles active tab selection, 'wje-tab:change' event binding, and window resize event for overflow checking.\n * @returns {void} Does not return a value.\n */\n afterDraw() {\n let activeTab = this.getActiveTab();\n let activeTabName = activeTab ? activeTab[0][this.type] : this.getTabAll()[0][this.type];\n\n this.setActiveTab(activeTabName);\n\n this.addEventListener('wje-tab:change', (e) => {\n if (e.detail.context.hasAttribute('disabled')) return;\n this.setActiveTab(e.detail.context.panel);\n });\n\n if (this.variant === 'top' || this.variant === 'bottom') {\n this.initTabMetrics();\n\n this._resizeObserver = new ResizeObserver(entries => {\n const width = entries[0].contentRect.width;\n\n if (width !== this._lastNavWidth) {\n this._lastNavWidth = width;\n this.checkOverflow();\n }\n });\n\n this._resizeObserver.observe(this);\n }\n }\n\n /**\n * Removes the 'active' class from all panel and tab elements.\n * @returns {void} This method does not return a value.\n */\n removeActiveTab() {\n this.getPanelAll().forEach((el) => {\n el.classList.remove('active');\n });\n\n this.getTabAll().forEach((el) => {\n el.classList.remove('active');\n });\n }\n\n /**\n * Sets the active tab and panel.\n * @param {string} tab The name of the tab to set as active.\n */\n setActiveTab(tab) {\n this.removeActiveTab();\n\n const el = this.querySelector(`[${this.type}=\"${tab}\"]`)\n el?.classList.add('active');\n\n if(this.type === 'panel')\n this.querySelector(`[name=\"${tab}\"]`)?.classList.add('active');\n\n if(el)\n this.dropdownActive(el);\n\n this.syncAria();\n }\n\n /**\n * Returns the currently active tab.\n * @returns {Element|null} The active tab, or null if no tab is active.\n */\n getActiveTab() {\n let activeTabs = Array.from(this.querySelectorAll('wje-tab.active'));\n return activeTabs.length > 0 ? activeTabs : null;\n }\n\n /**\n * Returns all tabs.\n * @returns {Array<Element>} An array of all tabs.\n */\n getTabAll() {\n return this.context.querySelector('[name=\"nav\"]').assignedElements();\n }\n\n /**\n * Returns all tabs, including those moved to \"more\".\n * @returns {Array<Element>} An array of all tabs.\n */\n getAllTabs() {\n return Array.from(this.querySelectorAll('wje-tab'));\n }\n\n /**\n * Returns all panels.\n * @returns {Array<Element>} An array of all panels.\n */\n getPanelAll() {\n return Array.from(this.querySelectorAll('wje-tab-panel'));\n }\n\n /**\n * Returns the names of all tabs.\n * @returns {Array<string>} An array of all tab names.\n */\n getPanelAllName() {\n return this.getPanelAll().map((el) => el.getAttribute('name'));\n }\n\n /**\n * Toggles the visibility of the \"more\" dropdown based on the presence of tabs in the \"more\" slot.\n * @returns {void} Does not return a value.\n */\n toggleMoreVisibility() {\n const hasTabsInMore = !!this.querySelector('wje-tab[slot=\"more\"]');\n const nextHidden = !hasTabsInMore;\n\n if (this.moreDropdown.hidden !== nextHidden) {\n this.moreDropdown.hidden = nextHidden;\n }\n }\n\n /**\n * Initializes metrics for tabs within the component. Assigns each tab to the navigation slot\n * and calculates their dimensions for further operations.\n * @returns {void} Does not return any value.\n */\n initTabMetrics() {\n requestAnimationFrame(() => {\n this._tabMetrics = this.measureTabMetrics();\n this.measureMoreWidth();\n this._initialized = true;\n this.checkOverflow(); // prvý výpočet\n this._lastNavWidth = this.nav.getBoundingClientRect().width;\n });\n }\n\n /**\n * Measures current tab widths while all tabs are temporarily placed into the main nav slot.\n * @returns {Array<{el: Element, width: number}>}\n */\n measureTabMetrics() {\n const tabs = Array.from(this.querySelectorAll('wje-tab'));\n\n tabs.forEach(tab => tab.setAttribute('slot', 'nav'));\n\n return tabs.map(tab => ({\n el: tab,\n width: tab.getBoundingClientRect().width\n }));\n }\n\n /**\n * Stores the measured width of the more dropdown trigger when available.\n * @returns {void}\n */\n measureMoreWidth() {\n const wasHidden = this.moreDropdown.hidden;\n const previousVisibility = this.moreDropdown.style.visibility;\n\n if (wasHidden) {\n this.moreDropdown.hidden = false;\n this.moreDropdown.style.visibility = 'hidden';\n }\n\n const width = this.moreDropdown.getBoundingClientRect().width || 0;\n\n if (wasHidden) {\n this.moreDropdown.hidden = true;\n this.moreDropdown.style.visibility = previousVisibility;\n }\n\n if (width > 0) {\n this._moreWidth = width;\n }\n }\n\n /**\n * Checks if the tabs within a navigation bar overflow the available space.\n * Moves overflowing tabs into a dropdown menu and updates their state accordingly.\n * @returns {void} This method does not return a value.\n */\n checkOverflow() {\n if (!this._initialized) return;\n\n this._tabMetrics = this.measureTabMetrics();\n this.measureMoreWidth();\n\n const navWidth = this.nav.getBoundingClientRect().width;\n const moreWidth = this._moreWidth || 48;\n const totalWidth = this._tabMetrics.reduce((sum, { width }) => sum + width, 0);\n\n if (totalWidth <= navWidth) {\n this._tabMetrics.forEach(({ el }) => el.setAttribute('slot', 'nav'));\n this.toggleMoreVisibility();\n this.dropdownActive(this.getActiveTab()?.[0]);\n return;\n }\n\n let used = 0;\n let overflowStarted = false;\n const availableWidth = Math.max(navWidth - moreWidth, 0);\n\n for (const { el, width } of this._tabMetrics) {\n used += width;\n\n const shouldOverflow = used > availableWidth;\n\n el.setAttribute('slot', shouldOverflow || overflowStarted ? 'more' : 'nav');\n overflowStarted ||= shouldOverflow;\n }\n\n this.toggleMoreVisibility();\n this.dropdownActive(this.getActiveTab()?.[0]);\n }\n\n /**\n * Toggles the \"dropdown-active\" class on the element based on its \"active\" status\n * and the value of its \"slot\" attribute.\n * @param {HTMLElement} el The HTML element to evaluate and apply the toggle logic.\n * @returns {void} This method does not return any value.\n */\n dropdownActive(el) {\n if (!el) {\n this.moreDropdown.classList.remove('dropdown-active');\n return;\n }\n\n if(el.classList.contains('active')) {\n if(el.getAttribute('slot') === 'more')\n this.moreDropdown.classList.add('dropdown-active');\n else\n this.moreDropdown.classList.remove('dropdown-active');\n }\n }\n\n /**\n * Syncs ARIA attributes on tabs and panels.\n */\n syncAria() {\n const tabs = this.getAllTabs();\n const panels = this.getPanelAll();\n const panelByName = new Map(panels.map((p) => [p.getAttribute('name'), p]));\n const groupId = this.id || `wje-tab-group-${this._instanceId}`;\n\n this.setAriaState({\n orientation: (this.variant === 'start' || this.variant === 'end') ? 'vertical' : 'horizontal',\n });\n\n tabs.forEach((tab, index) => {\n const tabName = tab.getAttribute(this.type) || tab.panel || tab.route || String(index);\n const isActive = tab.classList.contains('active');\n const isDisabled = tab.hasAttribute('disabled');\n\n if (!tab.id) tab.id = `wje-tab-${tabName}`;\n\n let controlsId = '';\n if (this.type === 'panel') {\n const panel = panelByName.get(tabName);\n if (panel) {\n if (!panel.id) panel.id = `wje-tab-panel-${tabName}`;\n controlsId = panel.id;\n panel.setAriaState({\n role: 'tabpanel',\n labelledBy: tab.id,\n });\n }\n }\n\n tab.setAriaState({\n role: 'tab',\n selected: isActive,\n disabled: isDisabled,\n controls: controlsId || '',\n });\n\n if (typeof tab.setRovingTabIndex === 'function') {\n tab.setRovingTabIndex(isActive ? 0 : -1);\n }\n });\n }\n\n disconnectedCallback() {\n super.disconnectedCallback?.();\n this._resizeObserver?.disconnect();\n }\n}\n","import TabGroup from './tab-group.element.js';\n\nexport default TabGroup;\n\nTabGroup.define('wje-tab-group', TabGroup);\n"],"names":["TabGroup","WJElement","super","className","this","_instanceId","_lastNavWidth","_initialized","_moreWidth","value","setAttribute","setAriaState","orientation","getAttribute","type","setupAttributes","isShadowRoot","role","variant","beforeDraw","activeTabName","location","hash","replace","getPanelAllName","includes","window","addEventListener","e","setActiveTab","draw","fragment","document","createDocumentFragment","native","createElement","classList","add","header","nav","section","slot","slotNav","icon","button","menu","slotMore","moreDropdown","append","activeTab","getActiveTab","getTabAll","detail","context","hasAttribute","panel","initTabMetrics","_resizeObserver","ResizeObserver","entries","width","contentRect","checkOverflow","observe","getPanelAll","forEach","el","remove","tab","removeActiveTab","querySelector","dropdownActive","syncAria","activeTabs","Array","from","querySelectorAll","length","assignedElements","getAllTabs","map","toggleMoreVisibility","nextHidden","hidden","requestAnimationFrame","_tabMetrics","measureTabMetrics","measureMoreWidth","getBoundingClientRect","tabs","wasHidden","previousVisibility","style","visibility","navWidth","moreWidth","reduce","sum","used","overflowStarted","availableWidth","Math","max","shouldOverflow","contains","panels","panelByName","Map","p","id","index","tabName","route","String","isActive","isDisabled","controlsId","get","labelledBy","selected","disabled","controls","setRovingTabIndex","disconnectedCallback","disconnect","static","define"],"mappings":"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"}
@@ -1,46 +1,25 @@
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";
5
- const styles = "/*\n[ WJ Tab Panel ]\n*/\n\n:host {\n display: none;\n flex-wrap: wrap;\n align-items: center;\n padding: 1rem;\n}\n\n:host(.active) {\n display: block;\n}\n";
6
- class TabPanel extends WJElement {
7
- /**
8
- * Creates an instance of TabPanel.
9
- */
4
+ import e from "./wje-element.js";
5
+ class t extends e {
10
6
  constructor() {
11
7
  super();
12
- /**
13
- * The class name for the component.
14
- */
15
8
  __publicField(this, "className", "TabPanel");
16
9
  }
17
- /**
18
- * Returns the CSS styles for the component.
19
- * @static
20
- * @returns {CSSStyleSheet}
21
- */
22
10
  static get cssStyleSheet() {
23
- return styles;
11
+ return ":host{display:none;flex-wrap:wrap;align-items:center;padding:1rem}:host(.active){display:block}";
24
12
  }
25
- /**
26
- * Sets up the attributes for the component.
27
- */
28
13
  setupAttributes() {
29
14
  this.isShadowRoot = "open";
30
15
  }
31
- /**
32
- * Draws the component for the tab panel.
33
- * @returns {DocumentFragment}
34
- */
35
16
  draw() {
36
- let fragment = document.createDocumentFragment();
37
- let element = document.createElement("slot");
38
- fragment.appendChild(element);
39
- return fragment;
17
+ let e2 = document.createDocumentFragment(), t2 = document.createElement("slot");
18
+ return e2.appendChild(t2), e2;
40
19
  }
41
20
  }
42
- TabPanel.define("wje-tab-panel", TabPanel);
21
+ t.define("wje-tab-panel", t);
43
22
  export {
44
- TabPanel as default
23
+ t as default
45
24
  };
46
25
  //# sourceMappingURL=wje-tab-panel.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"wje-tab-panel.js","sources":["../packages/wje-tab-panel/tab-panel.element.js","../packages/wje-tab-panel/tab-panel.js"],"sourcesContent":["import { default as WJElement } from '../wje-element/element.js';\nimport styles from './styles/styles.css?inline';\n\n/**\n * `TabPanel` is a custom web component that represents a tab panel.\n * @summary This element represents a tab panel.\n * @documentation https://elements.webjet.sk/components/tab-panel\n * @status stable\n * @augments {WJElement}\n * @slot - The default slot for the tab panel.\n * @tag wje-tab-panel\n */\nexport default class TabPanel extends WJElement {\n /**\n * Creates an instance of TabPanel.\n */\n constructor() {\n super();\n }\n\n /**\n * The class name for the component.\n */\n className = 'TabPanel';\n\n /**\n * Returns the CSS styles for the component.\n * @static\n * @returns {CSSStyleSheet}\n */\n static get cssStyleSheet() {\n return styles;\n }\n\n /**\n * Sets up the attributes for the component.\n */\n setupAttributes() {\n this.isShadowRoot = 'open';\n }\n\n /**\n * Draws the component for the tab panel.\n * @returns {DocumentFragment}\n */\n draw() {\n let fragment = document.createDocumentFragment();\n\n let element = document.createElement('slot');\n\n fragment.appendChild(element);\n\n return fragment;\n }\n}\n","import TabPanel from './tab-panel.element.js';\n\nexport default TabPanel;\n\nTabPanel.define('wje-tab-panel', TabPanel);\n"],"names":[],"mappings":";;;;;AAYe,MAAM,iBAAiB,UAAU;AAAA;AAAA;AAAA;AAAA,EAI5C,cAAc;AACV,UAAK;AAMT;AAAA;AAAA;AAAA,qCAAY;AAAA,EALZ;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAYA,WAAW,gBAAgB;AACvB,WAAO;AAAA,EACX;AAAA;AAAA;AAAA;AAAA,EAKA,kBAAkB;AACd,SAAK,eAAe;AAAA,EACxB;AAAA;AAAA;AAAA;AAAA;AAAA,EAMA,OAAO;AACH,QAAI,WAAW,SAAS,uBAAsB;AAE9C,QAAI,UAAU,SAAS,cAAc,MAAM;AAE3C,aAAS,YAAY,OAAO;AAE5B,WAAO;AAAA,EACX;AACJ;AClDA,SAAS,OAAO,iBAAiB,QAAQ;"}
1
+ {"version":3,"file":"wje-tab-panel.js","sources":["../packages/wje-tab-panel/tab-panel.element.js","../packages/wje-tab-panel/tab-panel.js"],"sourcesContent":["import { default as WJElement } from '../wje-element/element.js';\nimport styles from './styles/styles.css?inline';\n\n/**\n * `TabPanel` is a custom web component that represents a tab panel.\n * @summary This element represents a tab panel.\n * @documentation https://elements.webjet.sk/components/tab-panel\n * @status stable\n * @augments {WJElement}\n * @slot - The default slot for the tab panel.\n * @tag wje-tab-panel\n */\nexport default class TabPanel extends WJElement {\n /**\n * Creates an instance of TabPanel.\n */\n constructor() {\n super();\n }\n\n /**\n * The class name for the component.\n */\n className = 'TabPanel';\n\n /**\n * Returns the CSS styles for the component.\n * @static\n * @returns {CSSStyleSheet}\n */\n static get cssStyleSheet() {\n return styles;\n }\n\n /**\n * Sets up the attributes for the component.\n */\n setupAttributes() {\n this.isShadowRoot = 'open';\n }\n\n /**\n * Draws the component for the tab panel.\n * @returns {DocumentFragment}\n */\n draw() {\n let fragment = document.createDocumentFragment();\n\n let element = document.createElement('slot');\n\n fragment.appendChild(element);\n\n return fragment;\n }\n}\n","import TabPanel from './tab-panel.element.js';\n\nexport default TabPanel;\n\nTabPanel.define('wje-tab-panel', TabPanel);\n"],"names":["TabPanel","WJElement","constructor","super","className","setupAttributes","this","isShadowRoot","fragment","document","createDocumentFragment","element","createElement","appendChild","define"],"mappings":";;;;AAYe,MAAMA,UAAiBC;EAIlC,cAAAC;AACIC;AAMJC,qCAAY;AAAA,EALZ;AAAA,EAYA,WAAA;AACI;EACJ;AAAA,EAKA,kBAAAC;AACIC,SAAKC,eAAe;AAAA,EACxB;AAAA,EAMA;AACI,QAAIC,KAAWC,SAASC,uBAAAA,GAEpBC,KAAUF,SAASG,cAAc,MAAA;AAIrC,WAFAJ,GAASK,YAAYF,EAAAA,GAEdH;AAAAA,EACX;;ACjDJR,EAASc,OAAO,iBAAiBd,CAAAA;"}
package/dist/wje-tab.js CHANGED
@@ -1,236 +1,59 @@
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";
5
- import { b as bindRouterLinks } from "./router-links-wjqCnncc.js";
6
- import { event } from "./event.js";
7
- const styles = `/*
8
- [ WJ Tab ]
9
- */
10
-
11
- :host(:not([slot="more"])) {
12
- display: block;
13
- position: relative;
14
- .native-tab {
15
- display: flex;
16
- align-items: center;
17
- white-space: nowrap;
18
- font-family: var(--wje-tab-font-family);
19
- font-size: var(--wje-tab-font-size);
20
- letter-spacing: var(--wje-tab-letter-spacing);
21
- text-transform: var(--wje-tab-text-transfrom);
22
- font-weight: var(--wje-tab-font-weight);
23
- text-decoration: none;
24
- padding-inline: var(--wje-tab-padding-inline);
25
- padding-top: var(--wje-tab-padding-top);
26
- padding-bottom: var(--wje-tab-padding-bottom);
27
- border-radius: var(--wje-tab-border-radius);
28
- color: var(--wje-color);
29
- line-height: var(--wje-tab-line-height);
30
- & > svg {
31
- inline-size: 1.5em;
32
- pointer-events: none;
33
- }
34
-
35
- &:hover {
36
- background: var(--wje-tab-color-hover);
37
- &:after {
38
- display: block;
39
- }
40
- }
41
-
42
- &:after {
43
- content: ' ';
44
- display: none;
45
- block-size: 0.15rem;
46
- writing-mode: var(--wje-tab-writing-mode);
47
- background: var(--wje-tab-color-active);
48
- position: absolute;
49
- bottom: var(--wje-tab-bottom);
50
- left: var(--wje-tab-start);
51
- right: var(--wje-tab-end);
52
- top: var(--wje-tab-top);
53
- }
54
- }
55
- }
56
-
57
- :host([slot="more"]) {
58
- --wje-menu-item-safe-triangle-cursor-x: 0;
59
- --wje-menu-item-safe-triangle-cursor-y: 0;
60
- --wje-menu-item-safe-triangle-submenu-start-x: 0;
61
- --wje-menu-item-safe-triangle-submenu-start-y: 0;
62
- --wje-menu-item-safe-triangle-submenu-end-x: 0;
63
- --wje-menu-item-safe-triangle-submenu-end-y: 0;
64
-
65
- display: block;
66
- .native-tab {
67
- background: var(--wje-menu-item-background);
68
- position: relative;
69
- display: block;
70
- flex-wrap: nowrap;
71
- align-items: center;
72
- justify-content: center;
73
- color: var(--wje-menu-item-color);
74
- padding-top: var(--wje-menu-item-padding-top);
75
- padding-bottom: var(--wje-menu-item-padding-bottom);
76
- padding-inline: var(--wje-spacing-large);
77
- transition: var(--wje-transition-fast) fill;
78
- user-select: none;
79
- white-space: nowrap;
80
- cursor: pointer;
81
- text-decoration: none;
82
-
83
- &:hover {
84
- color: var(--wje-menu-item-color-hover);
85
- background: var(--wje-menu-item-background-hover);
86
- }
87
-
88
- &:focus {
89
- color: var(--wje-menu-item-color-focus);
90
- background: var(--wje-menu-item-background-focus);
91
- }
92
-
93
- &:active {
94
- color: var(--wje-menu-item-color-active);
95
- background: var(--wje-menu-item-background-active);
96
- }
97
- }
98
- }
99
-
100
- :host([disabled]) a {
101
- opacity: 0.5;
102
- cursor: not-allowed;
103
- background: inherit;
104
- &:after {
105
- display: none;
106
- }
107
- }
108
-
109
- :host(:not([slot="more"]).active) a:after {
110
- display: block;
111
- }
112
- `;
113
- class Tab extends WJElement {
114
- /**
115
- * Creates an instance of Tab.
116
- */
4
+ import t from "./wje-element.js";
5
+ import { b as e } from "./router-links-CNsJ-elb.js";
6
+ import { event as a } from "./event.js";
7
+ class o extends t {
117
8
  constructor() {
118
9
  super();
119
- /**
120
- * The class name for the component.
121
- */
122
10
  __publicField(this, "className", "Tab");
123
- this.last = false;
124
- this._hasPanel = false;
11
+ this.last = false, this._hasPanel = false;
125
12
  }
126
- /**
127
- * Sets the panel attribute to the specified value.
128
- * @param {string} value The value to set for the panel attribute.
129
- */
130
- set panel(value) {
131
- this.setAttribute("panel", value);
13
+ set panel(t2) {
14
+ this.setAttribute("panel", t2);
132
15
  }
133
- /**
134
- * Retrieves the value of the 'panel' attribute of the element.
135
- * @returns {string|null} Returns the 'panel' attribute value if it exists; otherwise, returns null.
136
- */
137
16
  get panel() {
138
17
  return this.getAttribute("panel") || null;
139
18
  }
140
- /**
141
- * Sets the value of the 'route' attribute for the current object.
142
- * @param {string} value The new value to set for the 'route' attribute.
143
- */
144
- set route(value) {
145
- this.setAttribute("route", value);
19
+ set route(t2) {
20
+ this.setAttribute("route", t2);
146
21
  }
147
- /**
148
- * Retrieves the value of the 'route' attribute.
149
- * If the 'route' attribute is not set, it returns null.
150
- * @returns {string|null} The value of the 'route' attribute or null if not set.
151
- */
152
22
  get route() {
153
23
  return this.getAttribute("route") || null;
154
24
  }
155
- /**
156
- * Returns the CSS styles for the component.
157
- * @static
158
- * @returns {CSSStyleSheet}
159
- */
160
25
  static get cssStyleSheet() {
161
- return styles;
26
+ return ':host(:not([slot="more"])){display:block;position:relative}:host(:not([slot="more"])) .native-tab{display:flex;align-items:center;white-space:nowrap;font-family:var(--wje-tab-font-family);font-size:var(--wje-tab-font-size);letter-spacing:var(--wje-tab-letter-spacing);text-transform:var(--wje-tab-text-transfrom);font-weight:var(--wje-tab-font-weight);text-decoration:none;padding-inline:var(--wje-tab-padding-inline);padding-top:var(--wje-tab-padding-top);padding-bottom:var(--wje-tab-padding-bottom);border-radius:var(--wje-tab-border-radius);color:var(--wje-color);line-height:var(--wje-tab-line-height)}:host(:not([slot="more"])) .native-tab>svg{inline-size:1.5em;pointer-events:none}:host(:not([slot="more"])) .native-tab:hover{background:var(--wje-tab-color-hover)}:host(:not([slot="more"])) .native-tab:hover:after{display:block}:host(:not([slot="more"])) .native-tab:after{content:" ";display:none;block-size:.15rem;writing-mode:var(--wje-tab-writing-mode);background:var(--wje-tab-color-active);position:absolute;bottom:var(--wje-tab-bottom);left:var(--wje-tab-start);right:var(--wje-tab-end);top:var(--wje-tab-top)}:host([slot="more"]){--wje-menu-item-safe-triangle-cursor-x: 0;--wje-menu-item-safe-triangle-cursor-y: 0;--wje-menu-item-safe-triangle-submenu-start-x: 0;--wje-menu-item-safe-triangle-submenu-start-y: 0;--wje-menu-item-safe-triangle-submenu-end-x: 0;--wje-menu-item-safe-triangle-submenu-end-y: 0;display:block}:host([slot="more"]) .native-tab{background:var(--wje-menu-item-background);position:relative;display:block;flex-wrap:nowrap;align-items:center;justify-content:center;color:var(--wje-menu-item-color);padding-top:var(--wje-menu-item-padding-top);padding-bottom:var(--wje-menu-item-padding-bottom);padding-inline:var(--wje-spacing-large);transition:var(--wje-transition-fast) fill;-webkit-user-select:none;user-select:none;white-space:nowrap;cursor:pointer;text-decoration:none}:host([slot="more"]) .native-tab:hover{color:var(--wje-menu-item-color-hover);background:var(--wje-menu-item-background-hover)}:host([slot="more"]) .native-tab:focus{color:var(--wje-menu-item-color-focus);background:var(--wje-menu-item-background-focus)}:host([slot="more"]) .native-tab:active{color:var(--wje-menu-item-color-active);background:var(--wje-menu-item-background-active)}:host([disabled]) a{opacity:.5;cursor:not-allowed;background:inherit}:host([disabled]) a:after{display:none}:host(:not([slot="more"]).active) a:after{display:block}';
162
27
  }
163
- /**
164
- * Sets up the attributes for the component.
165
- */
166
28
  setupAttributes() {
167
- this.isShadowRoot = "open";
168
- this.setAttribute("active-class", "active");
169
- this.setAriaState({
170
- role: "tab",
171
- selected: false,
172
- disabled: this.hasAttribute("disabled")
173
- });
29
+ this.isShadowRoot = "open", this.setAttribute("active-class", "active"), this.setAriaState({ role: "tab", selected: false, disabled: this.hasAttribute("disabled") });
174
30
  }
175
- /**
176
- * Draws the component for the tab.
177
- * @returns {DocumentFragment}
178
- */
179
31
  draw() {
180
- let fragment = document.createDocumentFragment();
181
- let slot = document.createElement("slot");
182
- let href = this.panel || this.route || "#";
183
- let a = document.createElement("a");
184
- a.setAttribute("href", (this.panel ? "#" : "") + href);
185
- a.setAttribute("part", "native");
186
- a.classList.add("native-tab");
187
- a.appendChild(slot);
188
- fragment.appendChild(a);
189
- this.slotEl = slot;
190
- return fragment;
32
+ let t2 = document.createDocumentFragment(), e2 = document.createElement("slot"), a2 = this.panel || this.route || "#", o2 = document.createElement("a");
33
+ return o2.setAttribute("href", (this.panel ? "#" : "") + a2), o2.setAttribute("part", "native"), o2.classList.add("native-tab"), o2.appendChild(e2), t2.appendChild(o2), this.slotEl = e2, t2;
191
34
  }
192
- /**
193
- * Sets up event listeners after the component is rendered.
194
- * // @fires wje-tab:change - Dispatched when the component is clicked, indicating a tab change.
195
- */
196
35
  afterDraw() {
197
36
  var _a;
198
- this.unbindRouterLinks = bindRouterLinks(this.parentElement, { selector: false });
199
- event.addListener(this, "click", "wje-tab:change");
200
- this.syncAriaLabel();
201
- (_a = this.slotEl) == null ? void 0 : _a.addEventListener("slotchange", () => this.syncAriaLabel());
37
+ this.unbindRouterLinks = e(this.parentElement, { selector: false }), a.addListener(this, "click", "wje-tab:change"), this.syncAriaLabel(), (_a = this.slotEl) == null ? void 0 : _a.addEventListener("slotchange", () => this.syncAriaLabel());
202
38
  }
203
- /**
204
- * Sync aria-label on host based on slotted text when not provided.
205
- */
206
39
  syncAriaLabel() {
207
40
  var _a;
208
41
  if (this.hasAttribute("aria-label") || this.hasAttribute("aria-labelledby")) return;
209
- const text = (((_a = this.slotEl) == null ? void 0 : _a.assignedNodes({ flatten: true })) || []).map((node) => node.textContent || "").join("").trim();
210
- if (text) {
211
- this.setAttribute("aria-label", text);
212
- }
42
+ const t2 = (((_a = this.slotEl) == null ? void 0 : _a.assignedNodes({ flatten: true })) || []).map((t3) => t3.textContent || "").join("").trim();
43
+ t2 && this.setAttribute("aria-label", t2);
213
44
  }
214
- /**
215
- * Sets the roving tabindex on the internal focusable anchor.
216
- * @param {number} value
217
- */
218
- setRovingTabIndex(value) {
45
+ setRovingTabIndex(t2) {
219
46
  var _a;
220
- const anchor = (_a = this.context) == null ? void 0 : _a.querySelector("a");
221
- if (!anchor) return;
222
- anchor.setAttribute("tabindex", String(value));
47
+ const e2 = (_a = this.context) == null ? void 0 : _a.querySelector("a");
48
+ e2 && e2.setAttribute("tabindex", String(t2));
223
49
  }
224
- /**
225
- * Cleans up before the component is disconnected.
226
- */
227
50
  beforeDisconnect() {
228
51
  var _a;
229
52
  (_a = this.unbindRouterLinks) == null ? void 0 : _a.call(this);
230
53
  }
231
54
  }
232
- Tab.define("wje-tab", Tab);
55
+ o.define("wje-tab", o);
233
56
  export {
234
- Tab as default
57
+ o as default
235
58
  };
236
59
  //# sourceMappingURL=wje-tab.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"wje-tab.js","sources":["../packages/wje-tab/tab.element.js","../packages/wje-tab/tab.js"],"sourcesContent":["import { default as WJElement, event } from '../wje-element/element.js';\nimport { bindRouterLinks } from 'slick-router/middlewares/router-links.js';\nimport styles from './styles/styles.css?inline';\n\n/**\n * `Tab` is a custom web component that represents a tab.\n * @summary This element represents a tab.\n * @documentation https://elements.webjet.sk/components/tab\n * @status stable\n * @augments {WJElement}\n * @param {string} panel The name of the tab panel. This is used to identify the corresponding tab panel.\n * @param {string} route The route to navigate to when the tab is clicked.\n * @cssproperty [--wje-tab-text-transform=uppercase] - The text transformation for the tab (e.g., uppercase, lowercase).\n * @cssproperty [--wje-tab-font-weight=500] - The font weight of the tab text.\n * @cssproperty [--wje-tab-letter-spacing=0.06em] - The letter spacing of the tab text.\n * @cssproperty [--wje-tab-padding-inline=1rem] - The horizontal padding of the tab.\n * @cssproperty [--wje-tab-padding-top=.75rem] - The top padding of the tab text.\n * @cssproperty [--wje-tab-padding-bottom=.75rem] - The bottom padding of the tab text.\n * @cssproperty [--wje-tab-color-active=var(--wje-color-primary-11)] - The text color of the active tab.\n * @cssproperty [--wje-tab-color-hover=var(--wje-color-primary-1)] - The text color of the tab when hovered.\n * //@fires wje-tab:change - Dispatched when the tab is changed.\n * @tag wje-tab\n */\nexport default class Tab extends WJElement {\n /**\n * Creates an instance of Tab.\n */\n constructor() {\n super();\n\n /**\n * Indicates whether this is the last tab.\n * @type {boolean}\n */\n this.last = false;\n this._hasPanel = false;\n }\n\n /**\n * Sets the panel attribute to the specified value.\n * @param {string} value The value to set for the panel attribute.\n */\n set panel(value) {\n this.setAttribute('panel', value);\n }\n\n /**\n * Retrieves the value of the 'panel' attribute of the element.\n * @returns {string|null} Returns the 'panel' attribute value if it exists; otherwise, returns null.\n */\n get panel() {\n return this.getAttribute('panel') || null;\n }\n\n /**\n * Sets the value of the 'route' attribute for the current object.\n * @param {string} value The new value to set for the 'route' attribute.\n */\n set route(value) {\n this.setAttribute('route', value);\n }\n\n /**\n * Retrieves the value of the 'route' attribute.\n * If the 'route' attribute is not set, it returns null.\n * @returns {string|null} The value of the 'route' attribute or null if not set.\n */\n get route() {\n return this.getAttribute('route') || null;\n }\n\n /**\n * The class name for the component.\n */\n className = 'Tab';\n\n /**\n * Returns the CSS styles for the component.\n * @static\n * @returns {CSSStyleSheet}\n */\n static get cssStyleSheet() {\n return styles;\n }\n\n /**\n * Sets up the attributes for the component.\n */\n setupAttributes() {\n this.isShadowRoot = 'open';\n this.setAttribute('active-class', 'active');\n\n this.setAriaState({\n role: 'tab',\n selected: false,\n disabled: this.hasAttribute('disabled'),\n });\n }\n\n /**\n * Draws the component for the tab.\n * @returns {DocumentFragment}\n */\n draw() {\n let fragment = document.createDocumentFragment();\n\n let slot = document.createElement('slot');\n\n let href = this.panel || this.route || \"#\";\n\n let a = document.createElement('a');\n a.setAttribute('href', (this.panel ? \"#\" : \"\") + href);\n a.setAttribute('part', 'native');\n a.classList.add('native-tab');\n a.appendChild(slot);\n\n fragment.appendChild(a);\n\n this.slotEl = slot;\n\n return fragment;\n }\n\n /**\n * Sets up event listeners after the component is rendered.\n * // @fires wje-tab:change - Dispatched when the component is clicked, indicating a tab change.\n */\n afterDraw() {\n this.unbindRouterLinks = bindRouterLinks(this.parentElement, { selector: false });\n event.addListener(this, 'click', 'wje-tab:change');\n this.syncAriaLabel();\n this.slotEl?.addEventListener('slotchange', () => this.syncAriaLabel());\n }\n\n /**\n * Sync aria-label on host based on slotted text when not provided.\n */\n syncAriaLabel() {\n if (this.hasAttribute('aria-label') || this.hasAttribute('aria-labelledby')) return;\n const text = (this.slotEl?.assignedNodes({ flatten: true }) || [])\n .map((node) => node.textContent || '')\n .join('')\n .trim();\n if (text) {\n this.setAttribute('aria-label', text);\n }\n }\n\n /**\n * Sets the roving tabindex on the internal focusable anchor.\n * @param {number} value\n */\n setRovingTabIndex(value) {\n const anchor = this.context?.querySelector('a');\n if (!anchor) return;\n anchor.setAttribute('tabindex', String(value));\n }\n\n /**\n * Cleans up before the component is disconnected.\n */\n beforeDisconnect() {\n this.unbindRouterLinks?.();\n }\n}\n","import Tab from './tab.element.js';\n\nexport default Tab;\n\nTab.define('wje-tab', Tab);\n"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAuBe,MAAM,YAAY,UAAU;AAAA;AAAA;AAAA;AAAA,EAIvC,cAAc;AACV,UAAK;AA8CT;AAAA;AAAA;AAAA,qCAAY;AAxCR,SAAK,OAAO;AACZ,SAAK,YAAY;AAAA,EACrB;AAAA;AAAA;AAAA;AAAA;AAAA,EAMA,IAAI,MAAM,OAAO;AACb,SAAK,aAAa,SAAS,KAAK;AAAA,EACpC;AAAA;AAAA;AAAA;AAAA;AAAA,EAMA,IAAI,QAAQ;AACR,WAAO,KAAK,aAAa,OAAO,KAAK;AAAA,EACzC;AAAA;AAAA;AAAA;AAAA;AAAA,EAMA,IAAI,MAAM,OAAO;AACb,SAAK,aAAa,SAAS,KAAK;AAAA,EACpC;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAOA,IAAI,QAAQ;AACR,WAAO,KAAK,aAAa,OAAO,KAAK;AAAA,EACzC;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAYA,WAAW,gBAAgB;AACvB,WAAO;AAAA,EACX;AAAA;AAAA;AAAA;AAAA,EAKA,kBAAkB;AACd,SAAK,eAAe;AACpB,SAAK,aAAa,gBAAgB,QAAQ;AAE1C,SAAK,aAAa;AAAA,MACd,MAAM;AAAA,MACN,UAAU;AAAA,MACV,UAAU,KAAK,aAAa,UAAU;AAAA,IAClD,CAAS;AAAA,EACL;AAAA;AAAA;AAAA;AAAA;AAAA,EAMA,OAAO;AACH,QAAI,WAAW,SAAS,uBAAsB;AAE9C,QAAI,OAAO,SAAS,cAAc,MAAM;AAExC,QAAI,OAAO,KAAK,SAAS,KAAK,SAAS;AAEvC,QAAI,IAAI,SAAS,cAAc,GAAG;AAClC,MAAE,aAAa,SAAS,KAAK,QAAQ,MAAM,MAAM,IAAI;AACrD,MAAE,aAAa,QAAQ,QAAQ;AAC/B,MAAE,UAAU,IAAI,YAAY;AAC5B,MAAE,YAAY,IAAI;AAElB,aAAS,YAAY,CAAC;AAEtB,SAAK,SAAS;AAEd,WAAO;AAAA,EACX;AAAA;AAAA;AAAA;AAAA;AAAA,EAMA,YAAY;;AACR,SAAK,oBAAoB,gBAAgB,KAAK,eAAe,EAAE,UAAU,OAAO;AAChF,UAAM,YAAY,MAAM,SAAS,gBAAgB;AACjD,SAAK,cAAa;AAClB,eAAK,WAAL,mBAAa,iBAAiB,cAAc,MAAM,KAAK;EAC3D;AAAA;AAAA;AAAA;AAAA,EAKA,gBAAgB;;AACZ,QAAI,KAAK,aAAa,YAAY,KAAK,KAAK,aAAa,iBAAiB,EAAG;AAC7E,UAAM,UAAQ,UAAK,WAAL,mBAAa,cAAc,EAAE,SAAS,KAAI,OAAO,CAAA,GAC1D,IAAI,CAAC,SAAS,KAAK,eAAe,EAAE,EACpC,KAAK,EAAE,EACP,KAAI;AACT,QAAI,MAAM;AACN,WAAK,aAAa,cAAc,IAAI;AAAA,IACxC;AAAA,EACJ;AAAA;AAAA;AAAA;AAAA;AAAA,EAMA,kBAAkB,OAAO;;AACrB,UAAM,UAAS,UAAK,YAAL,mBAAc,cAAc;AAC3C,QAAI,CAAC,OAAQ;AACb,WAAO,aAAa,YAAY,OAAO,KAAK,CAAC;AAAA,EACjD;AAAA;AAAA;AAAA;AAAA,EAKA,mBAAmB;;AACf,eAAK,sBAAL;AAAA,EACJ;AACJ;AChKA,IAAI,OAAO,WAAW,GAAG;"}
1
+ {"version":3,"file":"wje-tab.js","sources":["../packages/wje-tab/tab.element.js","../packages/wje-tab/tab.js"],"sourcesContent":["import { default as WJElement, event } from '../wje-element/element.js';\nimport { bindRouterLinks } from 'slick-router/middlewares/router-links.js';\nimport styles from './styles/styles.css?inline';\n\n/**\n * `Tab` is a custom web component that represents a tab.\n * @summary This element represents a tab.\n * @documentation https://elements.webjet.sk/components/tab\n * @status stable\n * @augments {WJElement}\n * @param {string} panel The name of the tab panel. This is used to identify the corresponding tab panel.\n * @param {string} route The route to navigate to when the tab is clicked.\n * @cssproperty [--wje-tab-text-transform=uppercase] - The text transformation for the tab (e.g., uppercase, lowercase).\n * @cssproperty [--wje-tab-font-weight=500] - The font weight of the tab text.\n * @cssproperty [--wje-tab-letter-spacing=0.06em] - The letter spacing of the tab text.\n * @cssproperty [--wje-tab-padding-inline=1rem] - The horizontal padding of the tab.\n * @cssproperty [--wje-tab-padding-top=.75rem] - The top padding of the tab text.\n * @cssproperty [--wje-tab-padding-bottom=.75rem] - The bottom padding of the tab text.\n * @cssproperty [--wje-tab-color-active=var(--wje-color-primary-11)] - The text color of the active tab.\n * @cssproperty [--wje-tab-color-hover=var(--wje-color-primary-1)] - The text color of the tab when hovered.\n * //@fires wje-tab:change - Dispatched when the tab is changed.\n * @tag wje-tab\n */\nexport default class Tab extends WJElement {\n /**\n * Creates an instance of Tab.\n */\n constructor() {\n super();\n\n /**\n * Indicates whether this is the last tab.\n * @type {boolean}\n */\n this.last = false;\n this._hasPanel = false;\n }\n\n /**\n * Sets the panel attribute to the specified value.\n * @param {string} value The value to set for the panel attribute.\n */\n set panel(value) {\n this.setAttribute('panel', value);\n }\n\n /**\n * Retrieves the value of the 'panel' attribute of the element.\n * @returns {string|null} Returns the 'panel' attribute value if it exists; otherwise, returns null.\n */\n get panel() {\n return this.getAttribute('panel') || null;\n }\n\n /**\n * Sets the value of the 'route' attribute for the current object.\n * @param {string} value The new value to set for the 'route' attribute.\n */\n set route(value) {\n this.setAttribute('route', value);\n }\n\n /**\n * Retrieves the value of the 'route' attribute.\n * If the 'route' attribute is not set, it returns null.\n * @returns {string|null} The value of the 'route' attribute or null if not set.\n */\n get route() {\n return this.getAttribute('route') || null;\n }\n\n /**\n * The class name for the component.\n */\n className = 'Tab';\n\n /**\n * Returns the CSS styles for the component.\n * @static\n * @returns {CSSStyleSheet}\n */\n static get cssStyleSheet() {\n return styles;\n }\n\n /**\n * Sets up the attributes for the component.\n */\n setupAttributes() {\n this.isShadowRoot = 'open';\n this.setAttribute('active-class', 'active');\n\n this.setAriaState({\n role: 'tab',\n selected: false,\n disabled: this.hasAttribute('disabled'),\n });\n }\n\n /**\n * Draws the component for the tab.\n * @returns {DocumentFragment}\n */\n draw() {\n let fragment = document.createDocumentFragment();\n\n let slot = document.createElement('slot');\n\n let href = this.panel || this.route || \"#\";\n\n let a = document.createElement('a');\n a.setAttribute('href', (this.panel ? \"#\" : \"\") + href);\n a.setAttribute('part', 'native');\n a.classList.add('native-tab');\n a.appendChild(slot);\n\n fragment.appendChild(a);\n\n this.slotEl = slot;\n\n return fragment;\n }\n\n /**\n * Sets up event listeners after the component is rendered.\n * // @fires wje-tab:change - Dispatched when the component is clicked, indicating a tab change.\n */\n afterDraw() {\n this.unbindRouterLinks = bindRouterLinks(this.parentElement, { selector: false });\n event.addListener(this, 'click', 'wje-tab:change');\n this.syncAriaLabel();\n this.slotEl?.addEventListener('slotchange', () => this.syncAriaLabel());\n }\n\n /**\n * Sync aria-label on host based on slotted text when not provided.\n */\n syncAriaLabel() {\n if (this.hasAttribute('aria-label') || this.hasAttribute('aria-labelledby')) return;\n const text = (this.slotEl?.assignedNodes({ flatten: true }) || [])\n .map((node) => node.textContent || '')\n .join('')\n .trim();\n if (text) {\n this.setAttribute('aria-label', text);\n }\n }\n\n /**\n * Sets the roving tabindex on the internal focusable anchor.\n * @param {number} value\n */\n setRovingTabIndex(value) {\n const anchor = this.context?.querySelector('a');\n if (!anchor) return;\n anchor.setAttribute('tabindex', String(value));\n }\n\n /**\n * Cleans up before the component is disconnected.\n */\n beforeDisconnect() {\n this.unbindRouterLinks?.();\n }\n}\n","import Tab from './tab.element.js';\n\nexport default Tab;\n\nTab.define('wje-tab', Tab);\n"],"names":["Tab","WJElement","constructor","super","className","this","last","_hasPanel","value","setAttribute","getAttribute","route","cssStyleSheet","setupAttributes","isShadowRoot","setAriaState","role","selected","disabled","hasAttribute","draw","fragment","document","createDocumentFragment","slot","createElement","href","panel","a","classList","add","appendChild","slotEl","afterDraw","unbindRouterLinks","bindRouterLinks","parentElement","selector","event","addListener","syncAriaLabel","addEventListener","text","assignedNodes","flatten","map","node","textContent","join","trim","anchor","context","querySelector","String","beforeDisconnect","define"],"mappings":";;;;;;AAuBe,MAAMA,UAAYC,EAAAA;AAAAA,EAI7B,cAAAC;AACIC,UAAAA;AA8CJC,qCAAY;AAxCRC,SAAKC,OAAAA,OACLD,KAAKE,YAAAA;AAAAA,EACT;AAAA,EAMA,IAAA,MAAUC,IAAAA;AACNH,SAAKI,aAAa,SAASD;EAC/B;AAAA,EAMA,IAAA;AACI,WAAOH,KAAKK,aAAa,OAAA,KAAY;AAAA,EACzC;AAAA,EAMA,IAAA,MAAUF,IAAAA;AACNH,SAAKI,aAAa,SAASD,EAAAA;AAAAA,EAC/B;AAAA,EAOA,IAAA,QAAIG;AACA,WAAON,KAAKK,aAAa,OAAA,KAAY;AAAA,EACzC;AAAA,EAYA,WAAA,gBAAWE;AACP;EACJ;AAAA,EAKA,kBAAAC;AACIR,SAAKS,eAAe,QACpBT,KAAKI,aAAa,gBAAgB,QAAA,GAElCJ,KAAKU,aAAa,EACdC,MAAM,OACNC,UAAAA,OACAC,UAAUb,KAAKc,aAAa,UAAA,EAAA,CAAA;AAAA,EAEpC;AAAA,EAMA,OAAAC;AACI,QAAIC,KAAWC,SAASC,0BAEpBC,KAAOF,SAASG,cAAc,MAAA,GAE9BC,KAAOrB,KAAKsB,SAAStB,KAAKM,SAAS,KAEnCiB,KAAIN,SAASG,cAAc;AAU/B,WATAG,GAAEnB,aAAa,SAASJ,KAAKsB,QAAQ,MAAM,MAAMD,EAAAA,GACjDE,GAAEnB,aAAa,QAAQ,WACvBmB,GAAEC,UAAUC,IAAI,YAAA,GAChBF,GAAEG,YAAYP,KAEdH,GAASU,YAAYH,KAErBvB,KAAK2B,SAASR,IAEPH;AAAAA,EACX;AAAA,EAMA,YAAAY;;AACI5B,SAAK6B,oBAAoBC,EAAgB9B,KAAK+B,eAAe,EAAEC,UAAAA,MAAU,CAAA,GACzEC,EAAMC,YAAYlC,MAAM,SAAS,gBAAA,GACjCA,KAAKmC,cAAAA,IACLnC,UAAK2B,WAAL3B,mBAAaoC,iBAAiB,cAAc,MAAMpC,KAAKmC,cAAAA;AAAAA,EAC3D;AAAA,EAKA,gBAAAA;;AACI,QAAInC,KAAKc,aAAa,YAAA,KAAiBd,KAAKc,aAAa,iBAAA,EAAoB;AAC7E,UAAMuB,QAAQrC,UAAK2B,WAAL3B,mBAAasC,cAAc,EAAEC,SAAAA,KAAS,OAAW,CAAA,GAC1DC,IAAKC,CAAAA,OAASA,GAAKC,eAAe,EAAA,EAClCC,KAAK,IACLC,KAAAA;AACDP,IAAAA,MACArC,KAAKI,aAAa,cAAciC,EAAAA;AAAAA,EAExC;AAAA,EAMA,kBAAkBlC;;AACd,UAAM0C,MAAS7C,UAAK8C,YAAL9C,mBAAc+C,cAAc;AACtCF,IAAAA,MACLA,GAAOzC,aAAa,YAAY4C,OAAO7C,EAAAA,CAAAA;AAAAA,EAC3C;AAAA,EAKA,mBAAA8C;;AACIjD,eAAK6B,sBAAL7B;AAAAA,EACJ;AAAA;AC/JJL,EAAIuD,OAAO,WAAWvD,CAAAA;"}