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-carousel.js","sources":["../packages/wje-carousel/carousel.element.js","../packages/wje-carousel/carousel.js"],"sourcesContent":["import { default as WJElement, event } from '../wje-element/element.js';\nimport styles from './styles/styles.css?inline';\n\n/**\n * @summary Carousel class that extends WJElement.\n * @documentation https://elements.webjet.sk/components/carousel\n * @status stable\n * @augments WJElement\n * @slot - The carousel main content.\n * @cssproperty [--wje-carousel-size=100%] - Effective size of one carousel item.\n * @cssproperty [--wje-carousel-gap=0.5rem] - Gap between carousel items.\n */\nexport default class Carousel extends WJElement {\n /**\n * Carousel constructor method.\n */\n constructor() {\n super();\n\n this.slidePerPage = 1;\n }\n\n /**\n * Active slide attribute.\n * @param value\n */\n set activeSlide(value) {\n this.setAttribute('active-slide', value);\n }\n\n /**\n * Active slide attribute.\n * @returns {number|number}\n */\n get activeSlide() {\n return +this.getAttribute('active-slide') || 0;\n }\n\n /**\n * Pagination attribute.\n * @returns {boolean}\n */\n get pagination() {\n return this.hasAttribute('pagination');\n }\n\n /**\n * Navigation attribute.\n * @returns {boolean}\n */\n get navigation() {\n return this.hasAttribute('navigation');\n }\n\n /**\n * Thumbnails attribute.\n * @returns {boolean}\n */\n get thumbnails() {\n return this.hasAttribute('thumbnails');\n }\n\n /**\n * Loop attribute.\n * @returns {boolean}\n */\n get loop() {\n return this.hasAttribute('loop');\n }\n\n /**\n * Continuous loop attribute.\n * @returns {boolean}\n */\n get continuousLoop() {\n return this.hasAttribute('continuous-loop');\n }\n\n /**\n * Class name for the Carousel.\n * @type {string}\n */\n className = 'Carousel';\n\n /**\n * Getter for the CSS stylesheet.\n * @returns {*}\n */\n static get cssStyleSheet() {\n return styles;\n }\n\n /**\n * Getter for the observed attributes.\n * @returns {string[]}\n */\n static get observedAttributes() {\n return ['active-slide', 'slide-per-page', 'continuous-loop'];\n }\n\n /**\n * Sets up the attributes for the Carousel.\n * @param name\n * @param old\n * @param newName\n */\n attributeChangedCallback(name, old, newName) {\n if (name === 'active-slide') {\n if (this.pagination) this.changePagination();\n\n if (this.thumbnails) this.changeThumbnails();\n }\n\n if (['slide-per-page', 'continuous-loop'].includes(name) && old !== newName && this.slides) {\n this.syncSlideMetrics();\n\n if (this.loop) {\n this.refresh();\n return;\n }\n\n this.goToSlide(this.activeSlide, 'auto');\n }\n }\n\n /**\n * Sets up the attributes for the Carousel.\n */\n setupAttributes() {\n this.isShadowRoot = 'open';\n this.syncAria();\n }\n\n /**\n * Before draw method for the Carousel.\n */\n beforeDraw() {\n this.syncSlideMetrics();\n this.removeLoopClones();\n this.cloneFirstAndLastItems();\n }\n\n /**\n * Draw method for the Carousel.\n * @returns {DocumentFragment}\n */\n draw() {\n let fragment = document.createDocumentFragment();\n\n let native = document.createElement('div');\n native.classList.add('native-carousel');\n\n let wrapper = document.createElement('div');\n wrapper.classList.add('slides-wrapper');\n\n let slides = document.createElement('div');\n slides.classList.add('carousel-slides');\n\n let slot = document.createElement('slot');\n\n let slotPrev = document.createElement('slot');\n slotPrev.setAttribute('name', 'prev');\n\n let slotNext = document.createElement('slot');\n slotNext.setAttribute('name', 'next');\n\n slides.append(slot);\n native.append(wrapper);\n\n if (this.navigation) {\n let existingPrev = this.querySelector('[slot=\"prev\"]');\n let existingNext = this.querySelector('[slot=\"next\"]');\n\n this.prevButton = existingPrev || this.createPreviousButton();\n this.nextButton = existingNext || this.createNextButton();\n\n if (this.prevButton && !this.prevButton.dataset.wjeCarouselNavBound) {\n this.prevButton.addEventListener('click', () => this.previousSlide());\n this.prevButton.dataset.wjeCarouselNavBound = 'true';\n }\n\n if (this.nextButton && !this.nextButton.dataset.wjeCarouselNavBound) {\n this.nextButton.addEventListener('click', () => this.nextSlide());\n this.nextButton.dataset.wjeCarouselNavBound = 'true';\n }\n\n if (!existingPrev) this.append(this.prevButton);\n if (!existingNext) this.append(this.nextButton);\n\n wrapper.append(slotPrev);\n wrapper.append(slotNext);\n }\n\n wrapper.append(slides);\n\n if (this.pagination) native.append(this.createPagination());\n\n if (this.thumbnails) native.append(this.createThumbnails());\n\n fragment.append(native);\n\n this.slides = slides;\n\n return fragment;\n }\n\n /**\n * After draw method for the Carousel.\n */\n afterDraw() {\n this.setIntersectionObserver();\n this.getSlidesWithClones().forEach((slide, i) => {\n this.intersectionObserver.observe(slide);\n });\n\n this.syncSlideMetrics();\n\n this.goToSlide(this.activeSlide, 'auto');\n\n requestAnimationFrame(() => requestAnimationFrame(() => this.syncActiveToSnapStart()));\n\n this.slides.addEventListener('scrollend', (e) => {\n this.syncActiveToSnapStart();\n });\n\n this.syncAria();\n }\n\n /**\n * Sync `activeSlide` to the slide whose leading edge is closest to the snap start.\n */\n syncActiveToSnapStart() {\n const slides = this.getSlides();\n const withClones = this.getSlidesWithClones();\n if (!withClones.length) return;\n\n const containerRect = this.slides.getBoundingClientRect();\n const snapStartX = containerRect.left + this.getScrollPaddingInlineStart();\n\n let best = null;\n let bestDist = Infinity;\n withClones.forEach((el) => {\n const r = el.getBoundingClientRect();\n const dist = Math.abs(r.left - snapStartX);\n if (dist < bestDist) {\n bestDist = dist;\n best = el;\n }\n });\n\n if (!best) return;\n\n const vIndex = withClones.indexOf(best);\n if (vIndex === -1) return;\n\n const logicalIndex = this.getLogicalIndexForVisual(vIndex);\n this.activeSlide = logicalIndex;\n this.setActiveVisualSlide(vIndex);\n\n const canonicalVisualIndex = this.getVisualIndexForLogical(logicalIndex);\n if (canonicalVisualIndex !== vIndex) {\n this.goToSlide(logicalIndex, 'auto');\n }\n }\n\n /**\n * Syncs computed CSS variables derived from `slide-per-page`.\n */\n syncSlideMetrics() {\n this.slidePerPage = Math.max(parseInt(this.getAttribute('slide-per-page'), 10) || 1, 1);\n const visibleGapCount = Math.max(this.slidePerPage - 1, 0);\n const computedItemSize = `calc((100% - (${visibleGapCount} * var(--wje-carousel-gap, 0.5rem))) / ${this.slidePerPage})`;\n\n this.style.setProperty('--wje-carousel-slides-per-page', `${this.slidePerPage}`);\n this.style.setProperty('--wje-carousel-visible-gap-count', `${visibleGapCount}`);\n this.style.setProperty('--wje-carousel-size', computedItemSize);\n this.style.setProperty('--wje-carousel-item-basis', 'var(--wje-carousel-size)');\n }\n\n /**\n * Returns the inline scroll padding used by the snap area.\n * @returns {number}\n */\n getScrollPaddingInlineStart() {\n if (!this.slides) return 0;\n\n const slideStyles = getComputedStyle(this.slides);\n return parseFloat(slideStyles.scrollPaddingInlineStart || slideStyles.scrollPaddingLeft || '0') || 0;\n }\n\n /**\n * Returns the interaction scroll behavior for UI controls.\n * Continuous multi-slide loops use instant snapping to avoid blank edge states\n * while the browser is still animating a previous smooth scroll.\n * @returns {string}\n */\n getControlBehavior() {\n return this.continuousLoop && this.slidePerPage > 1 ? 'auto' : 'smooth';\n }\n\n /**\n * Sets up the IntersectionObserver for the Carousel.\n */\n setIntersectionObserver() {\n this.intersectionObserver = new IntersectionObserver(\n (entries) => {\n entries.forEach((entry) => {\n this.entriesMap.set(entry.target, entry);\n });\n },\n {\n root: this.context.querySelector('.carousel-slides'),\n threshold: 0.5,\n }\n );\n\n this.entriesMap = new Map();\n this.records = this.intersectionObserver.takeRecords();\n this.records.forEach((entry) => {\n this.entriesMap.set(entry.target, entry);\n });\n }\n\n /**\n * Goes to the slide.\n * @param index\n * @param behavior\n * @param next\n */\n goToSlide(index, behavior = 'smooth', next = true) {\n const slides = this.getSlides();\n const withClones = this.getSlidesWithClones();\n\n // compute logical index: wrap when loop=true, else clamp\n const maxIndex = this.getMaxVisibleStartIndex(slides.length);\n let logical;\n if (this.loop && slides.length > 0) {\n logical = this.normalizeLoopIndex(index, slides.length);\n } else {\n logical = Math.min(Math.max(index, 0), maxIndex);\n }\n this.activeSlide = logical;\n\n // compute visual target considering clones when loop=true\n const vIndex = this.getVisualIndexForLogical(logical);\n const targetEl = withClones[vIndex];\n if (!targetEl) return;\n\n this.setActiveVisualSlide(vIndex);\n this.scrollToVisualIndex(vIndex, behavior);\n\n if (this.navigation && !this.loop) {\n this.nextButton.removeAttribute('disabled');\n this.prevButton.removeAttribute('disabled');\n\n if (this.activeSlide === maxIndex) this.nextButton.setAttribute('disabled', '');\n if (this.activeSlide === 0) this.prevButton.setAttribute('disabled', '');\n }\n\n this.syncAria();\n }\n\n /**\n * Sets the active class on the currently targeted visual slide and removes it elsewhere.\n * @param {number} vIndex\n */\n setActiveVisualSlide(vIndex) {\n this.getSlidesWithClones().forEach((slide, index) => {\n slide.classList.toggle('active', index === vIndex);\n });\n }\n\n /**\n * Syncs ARIA attributes on the carousel and slides.\n */\n syncAria() {\n this.setAriaState({\n role: 'region',\n roledescription: 'carousel',\n });\n\n const slides = this.getSlides();\n const total = slides.length;\n slides.forEach((slide, index) => {\n slide.setAttribute('role', 'group');\n slide.setAttribute('aria-roledescription', 'slide');\n slide.setAttribute('aria-label', `Slide ${index + 1} of ${total}`);\n slide.setAttribute('aria-hidden', slide.classList.contains('active') ? 'false' : 'true');\n });\n\n const clones = this.querySelectorAll('.clone');\n clones.forEach((slide) => {\n slide.setAttribute('aria-hidden', 'true');\n });\n }\n\n /**\n * Clones the first and last items.\n */\n cloneFirstAndLastItems() {\n const items = this.getSlides();\n\n if (items.length && this.loop) {\n const cloneCount = this.getLoopCloneCount(items.length);\n const firstOriginal = items[0];\n\n items.slice(items.length - cloneCount).forEach((item) => {\n const clone = this.createLoopClone(item);\n this.insertBefore(clone, firstOriginal);\n });\n\n items.slice(0, cloneCount).forEach((item) => {\n const clone = this.createLoopClone(item);\n this.append(clone);\n });\n }\n }\n\n /**\n * Creates a sanitized loop clone that does not inherit transient render state\n * such as inline `visibility: hidden` from the source slide.\n * @param {HTMLElement} item\n * @returns {HTMLElement}\n */\n createLoopClone(item) {\n const clone = item.cloneNode(true);\n clone.classList.add('clone');\n clone.classList.remove('active');\n clone.style.removeProperty('visibility');\n\n if (!clone.getAttribute('style')?.trim()) {\n clone.removeAttribute('style');\n }\n\n return clone;\n }\n\n /**\n * Removes loop clones so they can be rebuilt for the current configuration.\n */\n removeLoopClones() {\n this.querySelectorAll('wje-carousel-item.clone').forEach((clone) => clone.remove());\n }\n\n /**\n * Returns how many slides should be cloned on each side when loop is enabled.\n * @param {number} totalSlides\n * @returns {number}\n */\n getLoopCloneCount(totalSlides = this.getSlides().length) {\n if (!this.loop || !totalSlides) return 0;\n\n return this.continuousLoop ? Math.min(this.slidePerPage, totalSlides) : 1;\n }\n\n /**\n * Scrolls the carousel to a visual slide index.\n * @param {number} vIndex\n * @param {string} behavior\n */\n scrollToVisualIndex(vIndex, behavior = 'smooth') {\n const withClones = this.getSlidesWithClones();\n const firstEl = withClones[0];\n const targetEl = withClones[vIndex];\n\n if (!firstEl || !targetEl || !this.slides) return;\n\n const firstRect = firstEl.getBoundingClientRect();\n const targetRect = targetEl.getBoundingClientRect();\n const contentOffsetLeft = targetRect.left - firstRect.left;\n const nextLeft = contentOffsetLeft - this.getScrollPaddingInlineStart();\n const targetLeft = Math.max(nextLeft, 0);\n\n if (behavior === 'smooth') {\n this.slides.scrollTo({\n left: targetLeft,\n top: this.slides.scrollTop,\n behavior: 'smooth',\n });\n return;\n }\n\n if (this.snapRestoreFrame) {\n cancelAnimationFrame(this.snapRestoreFrame);\n }\n\n const inlineSnapType = this.slides.style.scrollSnapType;\n this.slides.style.scrollSnapType = 'none';\n this.slides.scrollTo({\n left: targetLeft,\n top: this.slides.scrollTop,\n behavior: 'auto',\n });\n this.snapRestoreFrame = requestAnimationFrame(() => {\n this.slides.style.scrollSnapType = inlineSnapType;\n this.snapRestoreFrame = null;\n });\n }\n\n /**\n * Goes to the next slide.\n */\n removeActiveSlide() {\n this.getSlidesWithClones().forEach((slide, i) => {\n slide.classList.remove('active');\n });\n\n if (this.pagination) {\n this.context.querySelectorAll('.pagination-item').forEach((item) => {\n item.classList.remove('active');\n });\n }\n\n if (this.thumbnails) {\n this.context.querySelectorAll('wje-thumbnail').forEach((item) => {\n item.classList.remove('active');\n });\n }\n }\n\n /**\n * Goes to the next slide.\n */\n changePagination() {\n if (this.pagination) {\n this.context.querySelectorAll('.pagination-item').forEach((item, i) => {\n item.classList.toggle('active', i === this.activeSlide);\n });\n }\n }\n\n /**\n * Goes to the next slide.\n */\n changeThumbnails() {\n if (this.thumbnails) {\n this.context.querySelectorAll('wje-thumbnail').forEach((item, i) => {\n item.classList.toggle('active', i === this.activeSlide);\n });\n }\n }\n\n /**\n * Goes to the next slide.\n * @returns {Element}\n */\n createNextButton() {\n const nextButton = document.createElement('wje-button');\n nextButton.setAttribute('part', 'next-button');\n nextButton.setAttribute('circle', '');\n nextButton.setAttribute('fill', 'link');\n nextButton.setAttribute('slot', 'next');\n nextButton.innerHTML = '<wje-icon name=\"chevron-right\" size=\"large\"></wje-icon>';\n nextButton.classList.add('next');\n\n return nextButton;\n }\n\n /**\n * Goes to the next slide.\n * @returns {Element}\n */\n createPreviousButton() {\n const previousButton = document.createElement('wje-button');\n previousButton.setAttribute('part', 'previous-button');\n previousButton.setAttribute('circle', '');\n previousButton.setAttribute('fill', 'link');\n previousButton.setAttribute('slot', 'prev');\n previousButton.innerHTML = '<wje-icon name=\"chevron-left\" size=\"large\"></wje-icon>';\n previousButton.classList.add('prev');\n\n return previousButton;\n }\n\n /**\n * Goes to the next slide.\n * @returns {Element}\n */\n createPagination() {\n const pagination = document.createElement('div');\n pagination.setAttribute('part', 'pagination');\n pagination.classList.add('pagination');\n\n this.getPaginationIndexes().forEach((i) => {\n const paginationItem = document.createElement('div');\n paginationItem.classList.add('pagination-item');\n paginationItem.addEventListener('click', (e) => {\n this.removeActiveSlide();\n e.target.classList.add('active');\n this.goToSlide(i, this.getControlBehavior());\n });\n pagination.append(paginationItem);\n });\n\n return pagination;\n }\n\n /**\n * Goes to the next slide.\n * @returns {Element}\n */\n createThumbnails() {\n const thumbnails = document.createElement('div');\n thumbnails.classList.add('thumbnails');\n\n const slides = this.getSlides();\n slides.forEach((slide, i) => {\n const thumbnail = document.createElement('wje-thumbnail');\n thumbnail.innerHTML = `<img src=\"${slide.querySelector('wje-img').getAttribute('src')}\"></img>`;\n thumbnail.addEventListener('click', (e) => {\n this.removeActiveSlide();\n e.target.closest('wje-thumbnail').classList.add('active');\n this.goToSlide(i, this.getControlBehavior());\n });\n thumbnails.append(thumbnail);\n });\n\n return thumbnails;\n }\n\n /**\n * Goes to the next slide.\n */\n nextSlide() {\n this.goToSlide(this.activeSlide + 1, this.getControlBehavior());\n }\n\n /**\n * Goes to the previous slide.\n */\n previousSlide() {\n this.goToSlide(this.activeSlide - 1, this.getControlBehavior());\n }\n\n /**\n * Goes to the slide.\n * @returns {Array}\n */\n getSlides() {\n return Array.from(this.querySelectorAll('wje-carousel-item:not(.clone)'));\n }\n\n /**\n * Goes to the slide.\n * @returns {Array}\n */\n getSlidesWithClones() {\n return Array.from(this.querySelectorAll('wje-carousel-item'));\n }\n\n /** Maps logical index to visual index, including leading clones when loop is enabled. */\n getVisualIndexForLogical(index) {\n return this.loop ? index + this.getLoopCloneCount() : index;\n }\n\n /** Maps visual index to logical index, including edge clones when loop is enabled. */\n getLogicalIndexForVisual(vIndex) {\n const slides = this.getSlides();\n const maxIndex = this.getMaxVisibleStartIndex(slides.length);\n const cloneCount = this.getLoopCloneCount(slides.length);\n if (!this.loop) return Math.min(Math.max(vIndex, 0), maxIndex);\n if (this.continuousLoop) {\n if (vIndex < cloneCount) return slides.length - cloneCount + vIndex;\n if (vIndex >= cloneCount + slides.length) return vIndex - (cloneCount + slides.length);\n return vIndex - cloneCount;\n }\n\n if (vIndex < cloneCount) return maxIndex;\n if (vIndex >= cloneCount + slides.length) return 0;\n return Math.min(Math.max(vIndex - cloneCount, 0), maxIndex);\n }\n\n /**\n * Returns the maximum logical slide index that can still render a full viewport.\n * @param {number} totalSlides\n * @returns {number}\n */\n getMaxVisibleStartIndex(totalSlides = this.getSlides().length) {\n const visibleSlides = Math.min(this.slidePerPage, totalSlides);\n return Math.max(totalSlides - visibleSlides, 0);\n }\n\n /**\n * Normalizes a logical index for the active loop mode.\n * @param {number} index\n * @param {number} totalSlides\n * @returns {number}\n */\n normalizeLoopIndex(index, totalSlides = this.getSlides().length) {\n const logicalCount = this.getLoopLogicalCount(totalSlides);\n if (!logicalCount) return 0;\n\n return ((index % logicalCount) + logicalCount) % logicalCount;\n }\n\n /**\n * Returns how many logical positions are reachable for the current loop mode.\n * @param {number} totalSlides\n * @returns {number}\n */\n getLoopLogicalCount(totalSlides = this.getSlides().length) {\n if (!totalSlides) return 0;\n\n return this.continuousLoop ? totalSlides : this.getMaxVisibleStartIndex(totalSlides) + 1;\n }\n\n /**\n * Returns the pagination indexes for the current carousel mode.\n * @returns {number[]}\n */\n getPaginationIndexes() {\n return Array.from({ length: this.getLoopLogicalCount() }, (_, index) => index);\n }\n\n /**\n * Goes to the slide.\n * @returns {boolean}\n */\n canGoNext() {\n const el = this.context.querySelector('.carousel-slides');\n return el.scrollLeft < (el.scrollWidth - el.clientWidth);\n }\n\n /**\n * Goes to the slide.\n * @returns {boolean}\n */\n canGoPrevious() {\n const el = this.context.querySelector('.carousel-slides');\n return el.scrollLeft > 0;\n }\n}\n","import { default as WJElement } from '../wje-element/element.js';\nimport Carousel from './carousel.element.js';\n\n// export * from \"./carousel.element.js\";\nexport default Carousel;\n\nWJElement.define('wje-carousel', Carousel);\n"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"wje-carousel.js","sources":["../packages/wje-carousel/carousel.element.js","../packages/wje-carousel/carousel.js"],"sourcesContent":["import { default as WJElement, event } from '../wje-element/element.js';\nimport styles from './styles/styles.css?inline';\n\n/**\n * @summary Carousel class that extends WJElement.\n * @documentation https://elements.webjet.sk/components/carousel\n * @status stable\n * @augments WJElement\n * @slot - The carousel main content.\n * @cssproperty [--wje-carousel-size=100%] - Effective size of one carousel item.\n * @cssproperty [--wje-carousel-gap=0.5rem] - Gap between carousel items.\n */\nexport default class Carousel extends WJElement {\n /**\n * Carousel constructor method.\n */\n constructor() {\n super();\n\n this.slidePerPage = 1;\n }\n\n /**\n * Active slide attribute.\n * @param value\n */\n set activeSlide(value) {\n this.setAttribute('active-slide', value);\n }\n\n /**\n * Active slide attribute.\n * @returns {number|number}\n */\n get activeSlide() {\n return +this.getAttribute('active-slide') || 0;\n }\n\n /**\n * Pagination attribute.\n * @returns {boolean}\n */\n get pagination() {\n return this.hasAttribute('pagination');\n }\n\n /**\n * Navigation attribute.\n * @returns {boolean}\n */\n get navigation() {\n return this.hasAttribute('navigation');\n }\n\n /**\n * Thumbnails attribute.\n * @returns {boolean}\n */\n get thumbnails() {\n return this.hasAttribute('thumbnails');\n }\n\n /**\n * Loop attribute.\n * @returns {boolean}\n */\n get loop() {\n return this.hasAttribute('loop');\n }\n\n /**\n * Continuous loop attribute.\n * @returns {boolean}\n */\n get continuousLoop() {\n return this.hasAttribute('continuous-loop');\n }\n\n /**\n * Class name for the Carousel.\n * @type {string}\n */\n className = 'Carousel';\n\n /**\n * Getter for the CSS stylesheet.\n * @returns {*}\n */\n static get cssStyleSheet() {\n return styles;\n }\n\n /**\n * Getter for the observed attributes.\n * @returns {string[]}\n */\n static get observedAttributes() {\n return ['active-slide', 'slide-per-page', 'continuous-loop'];\n }\n\n /**\n * Sets up the attributes for the Carousel.\n * @param name\n * @param old\n * @param newName\n */\n attributeChangedCallback(name, old, newName) {\n if (name === 'active-slide') {\n if (this.pagination) this.changePagination();\n\n if (this.thumbnails) this.changeThumbnails();\n }\n\n if (['slide-per-page', 'continuous-loop'].includes(name) && old !== newName && this.slides) {\n this.syncSlideMetrics();\n\n if (this.loop) {\n this.refresh();\n return;\n }\n\n this.goToSlide(this.activeSlide, 'auto');\n }\n }\n\n /**\n * Sets up the attributes for the Carousel.\n */\n setupAttributes() {\n this.isShadowRoot = 'open';\n this.syncAria();\n }\n\n /**\n * Before draw method for the Carousel.\n */\n beforeDraw() {\n this.syncSlideMetrics();\n this.removeLoopClones();\n this.cloneFirstAndLastItems();\n }\n\n /**\n * Draw method for the Carousel.\n * @returns {DocumentFragment}\n */\n draw() {\n let fragment = document.createDocumentFragment();\n\n let native = document.createElement('div');\n native.classList.add('native-carousel');\n\n let wrapper = document.createElement('div');\n wrapper.classList.add('slides-wrapper');\n\n let slides = document.createElement('div');\n slides.classList.add('carousel-slides');\n\n let slot = document.createElement('slot');\n\n let slotPrev = document.createElement('slot');\n slotPrev.setAttribute('name', 'prev');\n\n let slotNext = document.createElement('slot');\n slotNext.setAttribute('name', 'next');\n\n slides.append(slot);\n native.append(wrapper);\n\n if (this.navigation) {\n let existingPrev = this.querySelector('[slot=\"prev\"]');\n let existingNext = this.querySelector('[slot=\"next\"]');\n\n this.prevButton = existingPrev || this.createPreviousButton();\n this.nextButton = existingNext || this.createNextButton();\n\n if (this.prevButton && !this.prevButton.dataset.wjeCarouselNavBound) {\n this.prevButton.addEventListener('click', () => this.previousSlide());\n this.prevButton.dataset.wjeCarouselNavBound = 'true';\n }\n\n if (this.nextButton && !this.nextButton.dataset.wjeCarouselNavBound) {\n this.nextButton.addEventListener('click', () => this.nextSlide());\n this.nextButton.dataset.wjeCarouselNavBound = 'true';\n }\n\n if (!existingPrev) this.append(this.prevButton);\n if (!existingNext) this.append(this.nextButton);\n\n wrapper.append(slotPrev);\n wrapper.append(slotNext);\n }\n\n wrapper.append(slides);\n\n if (this.pagination) native.append(this.createPagination());\n\n if (this.thumbnails) native.append(this.createThumbnails());\n\n fragment.append(native);\n\n this.slides = slides;\n\n return fragment;\n }\n\n /**\n * After draw method for the Carousel.\n */\n afterDraw() {\n this.setIntersectionObserver();\n this.getSlidesWithClones().forEach((slide, i) => {\n this.intersectionObserver.observe(slide);\n });\n\n this.syncSlideMetrics();\n\n this.goToSlide(this.activeSlide, 'auto');\n\n requestAnimationFrame(() => requestAnimationFrame(() => this.syncActiveToSnapStart()));\n\n this.slides.addEventListener('scrollend', (e) => {\n this.syncActiveToSnapStart();\n });\n\n this.syncAria();\n }\n\n /**\n * Sync `activeSlide` to the slide whose leading edge is closest to the snap start.\n */\n syncActiveToSnapStart() {\n const slides = this.getSlides();\n const withClones = this.getSlidesWithClones();\n if (!withClones.length) return;\n\n const containerRect = this.slides.getBoundingClientRect();\n const snapStartX = containerRect.left + this.getScrollPaddingInlineStart();\n\n let best = null;\n let bestDist = Infinity;\n withClones.forEach((el) => {\n const r = el.getBoundingClientRect();\n const dist = Math.abs(r.left - snapStartX);\n if (dist < bestDist) {\n bestDist = dist;\n best = el;\n }\n });\n\n if (!best) return;\n\n const vIndex = withClones.indexOf(best);\n if (vIndex === -1) return;\n\n const logicalIndex = this.getLogicalIndexForVisual(vIndex);\n this.activeSlide = logicalIndex;\n this.setActiveVisualSlide(vIndex);\n\n const canonicalVisualIndex = this.getVisualIndexForLogical(logicalIndex);\n if (canonicalVisualIndex !== vIndex) {\n this.goToSlide(logicalIndex, 'auto');\n }\n }\n\n /**\n * Syncs computed CSS variables derived from `slide-per-page`.\n */\n syncSlideMetrics() {\n this.slidePerPage = Math.max(parseInt(this.getAttribute('slide-per-page'), 10) || 1, 1);\n const visibleGapCount = Math.max(this.slidePerPage - 1, 0);\n const computedItemSize = `calc((100% - (${visibleGapCount} * var(--wje-carousel-gap, 0.5rem))) / ${this.slidePerPage})`;\n\n this.style.setProperty('--wje-carousel-slides-per-page', `${this.slidePerPage}`);\n this.style.setProperty('--wje-carousel-visible-gap-count', `${visibleGapCount}`);\n this.style.setProperty('--wje-carousel-size', computedItemSize);\n this.style.setProperty('--wje-carousel-item-basis', 'var(--wje-carousel-size)');\n }\n\n /**\n * Returns the inline scroll padding used by the snap area.\n * @returns {number}\n */\n getScrollPaddingInlineStart() {\n if (!this.slides) return 0;\n\n const slideStyles = getComputedStyle(this.slides);\n return parseFloat(slideStyles.scrollPaddingInlineStart || slideStyles.scrollPaddingLeft || '0') || 0;\n }\n\n /**\n * Returns the interaction scroll behavior for UI controls.\n * Continuous multi-slide loops use instant snapping to avoid blank edge states\n * while the browser is still animating a previous smooth scroll.\n * @returns {string}\n */\n getControlBehavior() {\n return this.continuousLoop && this.slidePerPage > 1 ? 'auto' : 'smooth';\n }\n\n /**\n * Sets up the IntersectionObserver for the Carousel.\n */\n setIntersectionObserver() {\n this.intersectionObserver = new IntersectionObserver(\n (entries) => {\n entries.forEach((entry) => {\n this.entriesMap.set(entry.target, entry);\n });\n },\n {\n root: this.context.querySelector('.carousel-slides'),\n threshold: 0.5,\n }\n );\n\n this.entriesMap = new Map();\n this.records = this.intersectionObserver.takeRecords();\n this.records.forEach((entry) => {\n this.entriesMap.set(entry.target, entry);\n });\n }\n\n /**\n * Goes to the slide.\n * @param index\n * @param behavior\n * @param next\n */\n goToSlide(index, behavior = 'smooth', next = true) {\n const slides = this.getSlides();\n const withClones = this.getSlidesWithClones();\n\n // compute logical index: wrap when loop=true, else clamp\n const maxIndex = this.getMaxVisibleStartIndex(slides.length);\n let logical;\n if (this.loop && slides.length > 0) {\n logical = this.normalizeLoopIndex(index, slides.length);\n } else {\n logical = Math.min(Math.max(index, 0), maxIndex);\n }\n this.activeSlide = logical;\n\n // compute visual target considering clones when loop=true\n const vIndex = this.getVisualIndexForLogical(logical);\n const targetEl = withClones[vIndex];\n if (!targetEl) return;\n\n this.setActiveVisualSlide(vIndex);\n this.scrollToVisualIndex(vIndex, behavior);\n\n if (this.navigation && !this.loop) {\n this.nextButton.removeAttribute('disabled');\n this.prevButton.removeAttribute('disabled');\n\n if (this.activeSlide === maxIndex) this.nextButton.setAttribute('disabled', '');\n if (this.activeSlide === 0) this.prevButton.setAttribute('disabled', '');\n }\n\n this.syncAria();\n }\n\n /**\n * Sets the active class on the currently targeted visual slide and removes it elsewhere.\n * @param {number} vIndex\n */\n setActiveVisualSlide(vIndex) {\n this.getSlidesWithClones().forEach((slide, index) => {\n slide.classList.toggle('active', index === vIndex);\n });\n }\n\n /**\n * Syncs ARIA attributes on the carousel and slides.\n */\n syncAria() {\n this.setAriaState({\n role: 'region',\n roledescription: 'carousel',\n });\n\n const slides = this.getSlides();\n const total = slides.length;\n slides.forEach((slide, index) => {\n slide.setAttribute('role', 'group');\n slide.setAttribute('aria-roledescription', 'slide');\n slide.setAttribute('aria-label', `Slide ${index + 1} of ${total}`);\n slide.setAttribute('aria-hidden', slide.classList.contains('active') ? 'false' : 'true');\n });\n\n const clones = this.querySelectorAll('.clone');\n clones.forEach((slide) => {\n slide.setAttribute('aria-hidden', 'true');\n });\n }\n\n /**\n * Clones the first and last items.\n */\n cloneFirstAndLastItems() {\n const items = this.getSlides();\n\n if (items.length && this.loop) {\n const cloneCount = this.getLoopCloneCount(items.length);\n const firstOriginal = items[0];\n\n items.slice(items.length - cloneCount).forEach((item) => {\n const clone = this.createLoopClone(item);\n this.insertBefore(clone, firstOriginal);\n });\n\n items.slice(0, cloneCount).forEach((item) => {\n const clone = this.createLoopClone(item);\n this.append(clone);\n });\n }\n }\n\n /**\n * Creates a sanitized loop clone that does not inherit transient render state\n * such as inline `visibility: hidden` from the source slide.\n * @param {HTMLElement} item\n * @returns {HTMLElement}\n */\n createLoopClone(item) {\n const clone = item.cloneNode(true);\n clone.classList.add('clone');\n clone.classList.remove('active');\n clone.style.removeProperty('visibility');\n\n if (!clone.getAttribute('style')?.trim()) {\n clone.removeAttribute('style');\n }\n\n return clone;\n }\n\n /**\n * Removes loop clones so they can be rebuilt for the current configuration.\n */\n removeLoopClones() {\n this.querySelectorAll('wje-carousel-item.clone').forEach((clone) => clone.remove());\n }\n\n /**\n * Returns how many slides should be cloned on each side when loop is enabled.\n * @param {number} totalSlides\n * @returns {number}\n */\n getLoopCloneCount(totalSlides = this.getSlides().length) {\n if (!this.loop || !totalSlides) return 0;\n\n return this.continuousLoop ? Math.min(this.slidePerPage, totalSlides) : 1;\n }\n\n /**\n * Scrolls the carousel to a visual slide index.\n * @param {number} vIndex\n * @param {string} behavior\n */\n scrollToVisualIndex(vIndex, behavior = 'smooth') {\n const withClones = this.getSlidesWithClones();\n const firstEl = withClones[0];\n const targetEl = withClones[vIndex];\n\n if (!firstEl || !targetEl || !this.slides) return;\n\n const firstRect = firstEl.getBoundingClientRect();\n const targetRect = targetEl.getBoundingClientRect();\n const contentOffsetLeft = targetRect.left - firstRect.left;\n const nextLeft = contentOffsetLeft - this.getScrollPaddingInlineStart();\n const targetLeft = Math.max(nextLeft, 0);\n\n if (behavior === 'smooth') {\n this.slides.scrollTo({\n left: targetLeft,\n top: this.slides.scrollTop,\n behavior: 'smooth',\n });\n return;\n }\n\n if (this.snapRestoreFrame) {\n cancelAnimationFrame(this.snapRestoreFrame);\n }\n\n const inlineSnapType = this.slides.style.scrollSnapType;\n this.slides.style.scrollSnapType = 'none';\n this.slides.scrollTo({\n left: targetLeft,\n top: this.slides.scrollTop,\n behavior: 'auto',\n });\n this.snapRestoreFrame = requestAnimationFrame(() => {\n this.slides.style.scrollSnapType = inlineSnapType;\n this.snapRestoreFrame = null;\n });\n }\n\n /**\n * Goes to the next slide.\n */\n removeActiveSlide() {\n this.getSlidesWithClones().forEach((slide, i) => {\n slide.classList.remove('active');\n });\n\n if (this.pagination) {\n this.context.querySelectorAll('.pagination-item').forEach((item) => {\n item.classList.remove('active');\n });\n }\n\n if (this.thumbnails) {\n this.context.querySelectorAll('wje-thumbnail').forEach((item) => {\n item.classList.remove('active');\n });\n }\n }\n\n /**\n * Goes to the next slide.\n */\n changePagination() {\n if (this.pagination) {\n this.context.querySelectorAll('.pagination-item').forEach((item, i) => {\n item.classList.toggle('active', i === this.activeSlide);\n });\n }\n }\n\n /**\n * Goes to the next slide.\n */\n changeThumbnails() {\n if (this.thumbnails) {\n this.context.querySelectorAll('wje-thumbnail').forEach((item, i) => {\n item.classList.toggle('active', i === this.activeSlide);\n });\n }\n }\n\n /**\n * Goes to the next slide.\n * @returns {Element}\n */\n createNextButton() {\n const nextButton = document.createElement('wje-button');\n nextButton.setAttribute('part', 'next-button');\n nextButton.setAttribute('circle', '');\n nextButton.setAttribute('fill', 'link');\n nextButton.setAttribute('slot', 'next');\n nextButton.innerHTML = '<wje-icon name=\"chevron-right\" size=\"large\"></wje-icon>';\n nextButton.classList.add('next');\n\n return nextButton;\n }\n\n /**\n * Goes to the next slide.\n * @returns {Element}\n */\n createPreviousButton() {\n const previousButton = document.createElement('wje-button');\n previousButton.setAttribute('part', 'previous-button');\n previousButton.setAttribute('circle', '');\n previousButton.setAttribute('fill', 'link');\n previousButton.setAttribute('slot', 'prev');\n previousButton.innerHTML = '<wje-icon name=\"chevron-left\" size=\"large\"></wje-icon>';\n previousButton.classList.add('prev');\n\n return previousButton;\n }\n\n /**\n * Goes to the next slide.\n * @returns {Element}\n */\n createPagination() {\n const pagination = document.createElement('div');\n pagination.setAttribute('part', 'pagination');\n pagination.classList.add('pagination');\n\n this.getPaginationIndexes().forEach((i) => {\n const paginationItem = document.createElement('div');\n paginationItem.classList.add('pagination-item');\n paginationItem.addEventListener('click', (e) => {\n this.removeActiveSlide();\n e.target.classList.add('active');\n this.goToSlide(i, this.getControlBehavior());\n });\n pagination.append(paginationItem);\n });\n\n return pagination;\n }\n\n /**\n * Goes to the next slide.\n * @returns {Element}\n */\n createThumbnails() {\n const thumbnails = document.createElement('div');\n thumbnails.classList.add('thumbnails');\n\n const slides = this.getSlides();\n slides.forEach((slide, i) => {\n const thumbnail = document.createElement('wje-thumbnail');\n thumbnail.innerHTML = `<img src=\"${slide.querySelector('wje-img').getAttribute('src')}\"></img>`;\n thumbnail.addEventListener('click', (e) => {\n this.removeActiveSlide();\n e.target.closest('wje-thumbnail').classList.add('active');\n this.goToSlide(i, this.getControlBehavior());\n });\n thumbnails.append(thumbnail);\n });\n\n return thumbnails;\n }\n\n /**\n * Goes to the next slide.\n */\n nextSlide() {\n this.goToSlide(this.activeSlide + 1, this.getControlBehavior());\n }\n\n /**\n * Goes to the previous slide.\n */\n previousSlide() {\n this.goToSlide(this.activeSlide - 1, this.getControlBehavior());\n }\n\n /**\n * Goes to the slide.\n * @returns {Array}\n */\n getSlides() {\n return Array.from(this.querySelectorAll('wje-carousel-item:not(.clone)'));\n }\n\n /**\n * Goes to the slide.\n * @returns {Array}\n */\n getSlidesWithClones() {\n return Array.from(this.querySelectorAll('wje-carousel-item'));\n }\n\n /** Maps logical index to visual index, including leading clones when loop is enabled. */\n getVisualIndexForLogical(index) {\n return this.loop ? index + this.getLoopCloneCount() : index;\n }\n\n /** Maps visual index to logical index, including edge clones when loop is enabled. */\n getLogicalIndexForVisual(vIndex) {\n const slides = this.getSlides();\n const maxIndex = this.getMaxVisibleStartIndex(slides.length);\n const cloneCount = this.getLoopCloneCount(slides.length);\n if (!this.loop) return Math.min(Math.max(vIndex, 0), maxIndex);\n if (this.continuousLoop) {\n if (vIndex < cloneCount) return slides.length - cloneCount + vIndex;\n if (vIndex >= cloneCount + slides.length) return vIndex - (cloneCount + slides.length);\n return vIndex - cloneCount;\n }\n\n if (vIndex < cloneCount) return maxIndex;\n if (vIndex >= cloneCount + slides.length) return 0;\n return Math.min(Math.max(vIndex - cloneCount, 0), maxIndex);\n }\n\n /**\n * Returns the maximum logical slide index that can still render a full viewport.\n * @param {number} totalSlides\n * @returns {number}\n */\n getMaxVisibleStartIndex(totalSlides = this.getSlides().length) {\n const visibleSlides = Math.min(this.slidePerPage, totalSlides);\n return Math.max(totalSlides - visibleSlides, 0);\n }\n\n /**\n * Normalizes a logical index for the active loop mode.\n * @param {number} index\n * @param {number} totalSlides\n * @returns {number}\n */\n normalizeLoopIndex(index, totalSlides = this.getSlides().length) {\n const logicalCount = this.getLoopLogicalCount(totalSlides);\n if (!logicalCount) return 0;\n\n return ((index % logicalCount) + logicalCount) % logicalCount;\n }\n\n /**\n * Returns how many logical positions are reachable for the current loop mode.\n * @param {number} totalSlides\n * @returns {number}\n */\n getLoopLogicalCount(totalSlides = this.getSlides().length) {\n if (!totalSlides) return 0;\n\n return this.continuousLoop ? totalSlides : this.getMaxVisibleStartIndex(totalSlides) + 1;\n }\n\n /**\n * Returns the pagination indexes for the current carousel mode.\n * @returns {number[]}\n */\n getPaginationIndexes() {\n return Array.from({ length: this.getLoopLogicalCount() }, (_, index) => index);\n }\n\n /**\n * Goes to the slide.\n * @returns {boolean}\n */\n canGoNext() {\n const el = this.context.querySelector('.carousel-slides');\n return el.scrollLeft < (el.scrollWidth - el.clientWidth);\n }\n\n /**\n * Goes to the slide.\n * @returns {boolean}\n */\n canGoPrevious() {\n const el = this.context.querySelector('.carousel-slides');\n return el.scrollLeft > 0;\n }\n}\n","import { default as WJElement } from '../wje-element/element.js';\nimport Carousel from './carousel.element.js';\n\n// export * from \"./carousel.element.js\";\nexport default Carousel;\n\nWJElement.define('wje-carousel', Carousel);\n"],"names":["Carousel","WJElement","super","className","this","slidePerPage","value","setAttribute","activeSlide","getAttribute","pagination","hasAttribute","navigation","loop","continuousLoop","cssStyleSheet","observedAttributes","name","old","newName","changePagination","thumbnails","changeThumbnails","includes","slides","syncSlideMetrics","refresh","goToSlide","isShadowRoot","syncAria","removeLoopClones","cloneFirstAndLastItems","draw","fragment","document","createDocumentFragment","native","createElement","classList","add","wrapper","slot","slotPrev","slotNext","append","existingPrev","querySelector","existingNext","prevButton","createPreviousButton","nextButton","createNextButton","dataset","wjeCarouselNavBound","addEventListener","previousSlide","nextSlide","createPagination","createThumbnails","afterDraw","setIntersectionObserver","getSlidesWithClones","forEach","slide","i","intersectionObserver","observe","requestAnimationFrame","syncActiveToSnapStart","e","getSlides","withClones","length","snapStartX","getBoundingClientRect","left","getScrollPaddingInlineStart","best","bestDist","Infinity","el","r","dist","Math","abs","vIndex","indexOf","logicalIndex","getLogicalIndexForVisual","setActiveVisualSlide","getVisualIndexForLogical","max","parseInt","visibleGapCount","computedItemSize","style","setProperty","slideStyles","getComputedStyle","parseFloat","scrollPaddingInlineStart","scrollPaddingLeft","IntersectionObserver","entries","entry","entriesMap","set","target","root","context","threshold","Map","records","takeRecords","index","behavior","next","maxIndex","getMaxVisibleStartIndex","logical","normalizeLoopIndex","min","scrollToVisualIndex","removeAttribute","toggle","setAriaState","role","roledescription","total","contains","querySelectorAll","items","cloneCount","getLoopCloneCount","firstOriginal","slice","item","clone","createLoopClone","insertBefore","cloneNode","remove","removeProperty","trim","totalSlides","firstEl","targetEl","firstRect","nextLeft","targetLeft","scrollTo","top","scrollTop","snapRestoreFrame","cancelAnimationFrame","inlineSnapType","scrollSnapType","removeActiveSlide","innerHTML","previousButton","getPaginationIndexes","paginationItem","getControlBehavior","thumbnail","closest","Array","from","visibleSlides","logicalCount","getLoopLogicalCount","_","canGoNext","scrollLeft","scrollWidth","clientWidth","define"],"mappings":";;;;AAYe,MAAMA,UAAiBC,EAAAA;AAAAA,EAIlC;AACIC,UAAAA;AAiEJC,qCAAY;AA/DRC,SAAKC,eAAe;AAAA,EACxB;AAAA,EAMA,IAAA,YAAgBC;AACZF,SAAKG,aAAa,gBAAgBD,EAAAA;AAAAA,EACtC;AAAA,EAMA,IAAA,cAAIE;AACA,YAAQJ,KAAKK,aAAa,cAAA,KAAmB;AAAA,EACjD;AAAA,EAMA,IAAA,aAAIC;AACA,WAAON,KAAKO,aAAa,YAAA;AAAA,EAC7B;AAAA,EAMA,iBAAIC;AACA,WAAOR,KAAKO,aAAa,YAAA;AAAA,EAC7B;AAAA,EAMA,IAAA;AACI,WAAOP,KAAKO,aAAa,YAAA;AAAA,EAC7B;AAAA,EAMA,IAAA,OAAIE;AACA,WAAOT,KAAKO,aAAa,MAAA;AAAA,EAC7B;AAAA,EAMA,qBAAIG;AACA,WAAOV,KAAKO,aAAa,iBAAA;AAAA,EAC7B;AAAA,EAYA,WAAA,gBAAWI;AACP;EACJ;AAAA,EAMA,gCAAWC;AACP,WAAO,CAAC,gBAAgB,kBAAkB,iBAAA;AAAA,EAC9C;AAAA,EAQA,yBAAyBC,IAAMC,IAAKC,GAAAA;AAOhC,QANa,mBAATF,OACIb,KAAKM,cAAYN,KAAKgB,iBAAAA,GAEtBhB,KAAKiB,cAAYjB,KAAKkB,iBAAAA,IAG1B,CAAC,kBAAkB,mBAAmBC,SAASN,EAAAA,KAASC,OAAQC,KAAWf,KAAKoB,QAAQ;AAGxF,UAFApB,KAAKqB,iBAAAA,GAEDrB,KAAKS,KAEL,QAAA,KADAT,KAAKsB,QAAAA;AAITtB,WAAKuB,UAAUvB,KAAKI,aAAa,MAAA;AAAA,IACrC;AAAA,EACJ;AAAA,EAKA;AACIJ,SAAKwB,eAAe,QACpBxB,KAAKyB,SAAAA;AAAAA,EACT;AAAA,EAKA;AACIzB,SAAKqB,iBAAAA,GACLrB,KAAK0B,iBAAAA,GACL1B,KAAK2B,uBAAAA;AAAAA,EACT;AAAA,EAMA,OAAAC;AACI,QAAIC,KAAWC,SAASC,0BAEpBC,KAASF,SAASG,cAAc,KAAA;AACpCD,IAAAA,GAAOE,UAAUC,IAAI;AAErB,QAAIC,IAAUN,SAASG,cAAc,KAAA;AACrCG,MAAQF,UAAUC,IAAI,gBAAA;AAEtB,QAAIf,IAASU,SAASG,cAAc;AACpCb,MAAOc,UAAUC,IAAI,iBAAA;AAErB,QAAIE,IAAOP,SAASG,cAAc,MAAA,GAE9BK,IAAWR,SAASG,cAAc;AACtCK,MAASnC,aAAa,QAAQ,MAAA;AAE9B,QAAIoC,IAAWT,SAASG,cAAc,MAAA;AAMtC,QALAM,EAASpC,aAAa,QAAQ,MAAA,GAE9BiB,EAAOoB,OAAOH,CAAAA,GACdL,GAAOQ,OAAOJ,CAAAA,GAEVpC,KAAKQ,YAAY;AACjB,UAAIiC,KAAezC,KAAK0C,cAAc,eAAA,GAClCC,KAAe3C,KAAK0C,cAAc;AAEtC1C,WAAK4C,aAAaH,MAAgBzC,KAAK6C,wBACvC7C,KAAK8C,aAAaH,MAAgB3C,KAAK+C,oBAEnC/C,KAAK4C,cAAAA,CAAe5C,KAAK4C,WAAWI,QAAQC,wBAC5CjD,KAAK4C,WAAWM,iBAAiB,SAAS,MAAMlD,KAAKmD,cAAAA,CAAAA,GACrDnD,KAAK4C,WAAWI,QAAQC,sBAAsB,SAG9CjD,KAAK8C,cAAAA,CAAe9C,KAAK8C,WAAWE,QAAQC,wBAC5CjD,KAAK8C,WAAWI,iBAAiB,SAAS,MAAMlD,KAAKoD,UAAAA,CAAAA,GACrDpD,KAAK8C,WAAWE,QAAQC,sBAAsB,SAG7CR,MAAczC,KAAKwC,OAAOxC,KAAK4C,UAAAA,GAC/BD,MAAc3C,KAAKwC,OAAOxC,KAAK8C,UAAAA,GAEpCV,EAAQI,OAAOF,CAAAA,GACfF,EAAQI,OAAOD,CAAAA;AAAAA,IACnB;AAYA,WAVAH,EAAQI,OAAOpB,CAAAA,GAEXpB,KAAKM,cAAY0B,GAAOQ,OAAOxC,KAAKqD,iBAAAA,CAAAA,GAEpCrD,KAAKiB,cAAYe,GAAOQ,OAAOxC,KAAKsD,qBAExCzB,GAASW,OAAOR,KAEhBhC,KAAKoB,SAASA,GAEPS;AAAAA,EACX;AAAA,EAKA,YAAA0B;AACIvD,SAAKwD,wBAAAA,GACLxD,KAAKyD,oBAAAA,EAAsBC,QAAQ,CAACC,IAAOC,OAAAA;AACvC5D,WAAK6D,qBAAqBC,QAAQH,EAAAA;AAAAA,IAAAA,CAAAA,GAGtC3D,KAAKqB,oBAELrB,KAAKuB,UAAUvB,KAAKI,aAAa,MAAA,GAEjC2D,sBAAsB,MAAMA,sBAAsB,MAAM/D,KAAKgE,2BAE7DhE,KAAKoB,OAAO8B,iBAAiB,aAAce,CAAAA,OAAAA;AACvCjE,WAAKgE,sBAAAA;AAAAA,IAAAA,CAAAA,GAGThE,KAAKyB,SAAAA;AAAAA,EACT;AAAA,EAKA,wBAAAuC;AACmBhE,SAAKkE;AACpB,UAAMC,KAAanE,KAAKyD,oBAAAA;AACxB,SAAKU,GAAWC,OAAQ;AAExB,UACMC,KADgBrE,KAAKoB,OAAOkD,sBAAAA,EACDC,OAAOvE,KAAKwE,4BAAAA;AAE7C,QAAIC,IAAO,MACPC,IAAWC;AAUf,QATAR,GAAWT,QAASkB,CAAAA,OAAAA;AAChB,YAAMC,KAAID,GAAGN,sBAAAA,GACPQ,KAAOC,KAAKC,IAAIH,GAAEN,OAAOF,EAAAA;AAC3BS,MAAAA,KAAOJ,MACPA,IAAWI,IACXL,IAAOG;AAAAA,IAAAA,CAAAA,GAAAA,CAIVH,EAAM;AAEX,UAAMQ,IAASd,GAAWe,QAAQT,CAAAA;AAClC,QAAA,OAAIQ,EAAe;AAEnB,UAAME,IAAenF,KAAKoF,yBAAyBH;AACnDjF,SAAKI,cAAc+E,GACnBnF,KAAKqF,qBAAqBJ;AAEGjF,SAAKsF,yBAAyBH,CAAAA,MAC9BF,KACzBjF,KAAKuB,UAAU4D,GAAc;EAErC;AAAA,EAKA;AACInF,SAAKC,eAAe8E,KAAKQ,IAAIC,SAASxF,KAAKK,aAAa,mBAAmB,EAAA,KAAO,GAAG;AACrF,UAAMoF,KAAkBV,KAAKQ,IAAIvF,KAAKC,eAAe,GAAG,CAAA,GAClDyF,KAAmB,iBAAiBD,EAAAA,0CAAyDzF,KAAKC,YAAAA;AAExGD,SAAK2F,MAAMC,YAAY,kCAAkC,GAAG5F,KAAKC,YAAAA,EAAAA,GACjED,KAAK2F,MAAMC,YAAY,oCAAoC,GAAGH,OAC9DzF,KAAK2F,MAAMC,YAAY,uBAAuBF,KAC9C1F,KAAK2F,MAAMC,YAAY,6BAA6B;EACxD;AAAA,EAMA;AACI,QAAA,CAAK5F,KAAKoB,OAAQ,QAAO;AAEzB,UAAMyE,KAAcC,iBAAiB9F,KAAKoB,MAAAA;AAC1C,WAAO2E,WAAWF,GAAYG,4BAA4BH,GAAYI,qBAAqB,GAAA,KAAQ;AAAA,EACvG;AAAA,EAQA;AACI,WAAOjG,KAAKU,kBAAkBV,KAAKC,eAAe,IAAI,SAAS;AAAA,EACnE;AAAA,EAKA;AACID,SAAK6D,uBAAuB,IAAIqC,qBAC3BC,CAAAA,OAAAA;AACGA,MAAAA,GAAQzC,QAAS0C,CAAAA;AACbpG,aAAKqG,WAAWC,IAAIF,GAAMG,QAAQH;;OAG1C,EACII,MAAMxG,KAAKyG,QAAQ/D,cAAc,kBAAA,GACjCgE,WAAW,IAAA,CAAA,GAInB1G,KAAKqG,aAAa,oBAAIM,OACtB3G,KAAK4G,UAAU5G,KAAK6D,qBAAqBgD,YAAAA,GACzC7G,KAAK4G,QAAQlD,QAAS0C,CAAAA;AAClBpG,WAAKqG,WAAWC,IAAIF,GAAMG,QAAQH,EAAAA;AAAAA,IAAAA,CAAAA;AAAAA,EAE1C;AAAA,EAQA,UAAUU,IAAOC,KAAW,UAAUC,IAAAA,MAAO;AACzC,UAAM5F,IAASpB,KAAKkE,aACdC,IAAanE,KAAKyD,uBAGlBwD,IAAWjH,KAAKkH,wBAAwB9F,EAAOgD;AACrD,QAAI+C;AAEAA,QADAnH,KAAKS,QAAQW,EAAOgD,SAAS,IACnBpE,KAAKoH,mBAAmBN,IAAO1F,EAAOgD,UAEtCW,KAAKsC,IAAItC,KAAKQ,IAAIuB,IAAO,CAAA,GAAIG,CAAAA,GAE3CjH,KAAKI,cAAc+G;AAGnB,UAAMlC,IAASjF,KAAKsF,yBAAyB6B,CAAAA;AAC5BhD,MAAWc,CAAAA,MAG5BjF,KAAKqF,qBAAqBJ,CAAAA,GAC1BjF,KAAKsH,oBAAoBrC,GAAQ8B,EAAAA,GAE7B/G,KAAKQ,cAAAA,CAAeR,KAAKS,SACzBT,KAAK8C,WAAWyE,gBAAgB,UAAA,GAChCvH,KAAK4C,WAAW2E,gBAAgB,UAAA,GAE5BvH,KAAKI,gBAAgB6G,KAAUjH,KAAK8C,WAAW3C,aAAa,YAAY,EAAA,GACnD,MAArBH,KAAKI,eAAmBJ,KAAK4C,WAAWzC,aAAa,YAAY,EAAA,IAGzEH,KAAKyB;EACT;AAAA,EAMA,qBAAqBwD,IAAAA;AACjBjF,SAAKyD,oBAAAA,EAAsBC,QAAQ,CAACC,IAAOmD,MAAAA;AACvCnD,MAAAA,GAAMzB,UAAUsF,OAAO,UAAUV,MAAU7B,EAAAA;AAAAA,IAAAA,CAAAA;AAAAA,EAEnD;AAAA,EAKA;AACIjF,SAAKyH,aAAa,EACdC,MAAM,UACNC,iBAAiB,WAAA,CAAA;AAGrB,UAAMvG,KAASpB,KAAKkE,UAAAA,GACd0D,KAAQxG,GAAOgD;AACrBhD,IAAAA,GAAOsC,QAAQ,CAACC,IAAOmD,MAAAA;AACnBnD,MAAAA,GAAMxD,aAAa,QAAQ,OAAA,GAC3BwD,GAAMxD,aAAa,wBAAwB,UAC3CwD,GAAMxD,aAAa,cAAc,SAAS2G,IAAQ,CAAA,OAAQc,EAAAA,EAAAA,GAC1DjE,GAAMxD,aAAa,eAAewD,GAAMzB,UAAU2F,SAAS,QAAA,IAAY,UAAU;;AAGtE7H,SAAK8H,iBAAiB,QAAA,EAC9BpE,QAASC,CAAAA;AACZA,MAAAA,GAAMxD,aAAa,eAAe,MAAA;AAAA,IAAA,CAAA;AAAA,EAE1C;AAAA,EAKA,yBAAAwB;AACI,UAAMoG,KAAQ/H,KAAKkE;AAEnB,QAAI6D,GAAM3D,UAAUpE,KAAKS,MAAM;AAC3B,YAAMuH,KAAahI,KAAKiI,kBAAkBF,GAAM3D,MAAAA,GAC1C8D,IAAgBH,GAAM;AAE5BA,MAAAA,GAAMI,MAAMJ,GAAM3D,SAAS4D,EAAAA,EAAYtE,QAAS0E,CAAAA,OAAAA;AAC5C,cAAMC,KAAQrI,KAAKsI,gBAAgBF,EAAAA;AACnCpI,aAAKuI,aAAaF,IAAOH;UAG7BH,GAAMI,MAAM,GAAGH,EAAAA,EAAYtE,QAAS0E,CAAAA,OAAAA;AAChC,cAAMC,KAAQrI,KAAKsI,gBAAgBF;AACnCpI,aAAKwC,OAAO6F,EAAAA;AAAAA,MAAAA,CAAAA;AAAAA,IAEpB;AAAA,EACJ;AAAA,EAQA,gBAAgBD;;AACZ,UAAMC,KAAQD,GAAKI,UAAAA,IAAU;AAS7B,WARAH,GAAMnG,UAAUC,IAAI,OAAA,GACpBkG,GAAMnG,UAAUuG,OAAO,WACvBJ,GAAM1C,MAAM+C,eAAe,YAAA,KAEtBL,KAAAA,GAAMhI,aAAa,OAAA,MAAnBgI,mBAA6BM,WAC9BN,GAAMd,gBAAgB,OAAA,GAGnBc;AAAAA,EACX;AAAA,EAKA;AACIrI,SAAK8H,iBAAiB,2BAA2BpE,QAAS2E,CAAAA,OAAUA,GAAMI,OAAAA,CAAAA;AAAAA,EAC9E;AAAA,EAOA,kBAAkBG,KAAc5I,KAAKkE,UAAAA,EAAYE,QAAAA;AAC7C,WAAKpE,KAAKS,QAASmI,KAEZ5I,KAAKU,iBAAiBqE,KAAKsC,IAAIrH,KAAKC,cAAc2I,EAAAA,IAAe,IAFjC;AAAA,EAG3C;AAAA,EAOA,oBAAoB3D,IAAQ8B,KAAW,UAAA;AACnC,UAAM5C,IAAanE,KAAKyD,uBAClBoF,IAAU1E,EAAW,CAAA,GACrB2E,IAAW3E,EAAWc,EAAAA;AAE5B,QAAA,CAAK4D,MAAYC,KAAAA,CAAa9I,KAAKoB,OAAQ;AAE3C,UAAM2H,IAAYF,EAAQvE,yBAGpB0E,IAFaF,EAASxE,wBACSC,OAAOwE,EAAUxE,OACjBvE,KAAKwE,4BAAAA,GACpCyE,IAAalE,KAAKQ,IAAIyD,GAAU,CAAA;AAEtC,QAAiB,aAAbjC,GAMA,aALA/G,KAAKoB,OAAO8H,SAAS,EACjB3E,MAAM0E,GACNE,KAAKnJ,KAAKoB,OAAOgI,WACjBrC,UAAU,SAAA,CAAA;AAKd/G,SAAKqJ,oBACLC,qBAAqBtJ,KAAKqJ,gBAAAA;AAG9B,UAAME,IAAiBvJ,KAAKoB,OAAOuE,MAAM6D;AACzCxJ,SAAKoB,OAAOuE,MAAM6D,iBAAiB,QACnCxJ,KAAKoB,OAAO8H,SAAS,EACjB3E,MAAM0E,GACNE,KAAKnJ,KAAKoB,OAAOgI,WACjBrC,UAAU,OAAA,CAAA,GAEd/G,KAAKqJ,mBAAmBtF,sBAAsB,MAAA;AAC1C/D,WAAKoB,OAAOuE,MAAM6D,iBAAiBD,GACnCvJ,KAAKqJ,mBAAmB;AAAA;EAEhC;AAAA,EAKA,oBAAAI;AACIzJ,SAAKyD,sBAAsBC,QAAQ,CAACC,IAAOC,OAAAA;AACvCD,MAAAA,GAAMzB,UAAUuG,OAAO,QAAA;AAAA,IAAA,CAAA,GAGvBzI,KAAKM,cACLN,KAAKyG,QAAQqB,iBAAiB,oBAAoBpE,QAAS0E,CAAAA,OAAAA;AACvDA,MAAAA,GAAKlG,UAAUuG,OAAO,QAAA;AAAA,IAAA,CAAA,GAI1BzI,KAAKiB,cACLjB,KAAKyG,QAAQqB,iBAAiB,eAAA,EAAiBpE,QAAS0E,CAAAA;AACpDA,MAAAA,GAAKlG,UAAUuG,OAAO,QAAA;AAAA,IAAA,CAAA;AAAA,EAGlC;AAAA,EAKA,mBAAAzH;AACQhB,SAAKM,cACLN,KAAKyG,QAAQqB,iBAAiB,kBAAA,EAAoBpE,QAAQ,CAAC0E,IAAMxE,OAAAA;AAC7DwE,MAAAA,GAAKlG,UAAUsF,OAAO,UAAU5D,OAAM5D,KAAKI,WAAAA;AAAAA,IAAAA,CAAAA;AAAAA,EAGvD;AAAA,EAKA,mBAAAc;AACQlB,SAAKiB,cACLjB,KAAKyG,QAAQqB,iBAAiB,eAAA,EAAiBpE,QAAQ,CAAC0E,IAAMxE,OAAAA;AAC1DwE,MAAAA,GAAKlG,UAAUsF,OAAO,UAAU5D,OAAM5D,KAAKI,WAAAA;AAAAA,IAAAA,CAAAA;AAAAA,EAGvD;AAAA,EAMA;AACI,UAAM0C,KAAahB,SAASG,cAAc;AAQ1C,WAPAa,GAAW3C,aAAa,QAAQ,gBAChC2C,GAAW3C,aAAa,UAAU,EAAA,GAClC2C,GAAW3C,aAAa,QAAQ,MAAA,GAChC2C,GAAW3C,aAAa,QAAQ,MAAA,GAChC2C,GAAW4G,YAAY,2DACvB5G,GAAWZ,UAAUC,IAAI,MAAA,GAElBW;AAAAA,EACX;AAAA,EAMA,uBAAAD;AACI,UAAM8G,KAAiB7H,SAASG,cAAc;AAQ9C,WAPA0H,GAAexJ,aAAa,QAAQ,oBACpCwJ,GAAexJ,aAAa,UAAU,EAAA,GACtCwJ,GAAexJ,aAAa,QAAQ,MAAA,GACpCwJ,GAAexJ,aAAa,QAAQ,MAAA,GACpCwJ,GAAeD,YAAY,0DAC3BC,GAAezH,UAAUC,IAAI,MAAA,GAEtBwH;AAAAA,EACX;AAAA,EAMA,mBAAAtG;AACI,UAAM/C,KAAawB,SAASG,cAAc,KAAA;AAe1C,WAdA3B,GAAWH,aAAa,QAAQ,YAAA,GAChCG,GAAW4B,UAAUC,IAAI,eAEzBnC,KAAK4J,qBAAAA,EAAuBlG,QAASE,CAAAA,OAAAA;AACjC,YAAMiG,IAAiB/H,SAASG,cAAc,KAAA;AAC9C4H,QAAe3H,UAAUC,IAAI,iBAAA,GAC7B0H,EAAe3G,iBAAiB,SAAUe,CAAAA,OAAAA;AACtCjE,aAAKyJ,kBAAAA,GACLxF,GAAEsC,OAAOrE,UAAUC,IAAI,QAAA,GACvBnC,KAAKuB,UAAUqC,IAAG5D,KAAK8J;UAE3BxJ,GAAWkC,OAAOqH;QAGfvJ;AAAAA,EACX;AAAA,EAMA,mBAAAgD;AACI,UAAMrC,KAAaa,SAASG,cAAc,KAAA;AAC1ChB,IAAAA,GAAWiB,UAAUC,IAAI,YAAA;AAczB,WAZenC,KAAKkE,YACbR,QAAQ,CAACC,IAAOC,MAAAA;AACnB,YAAMmG,IAAYjI,SAASG,cAAc,eAAA;AACzC8H,QAAUL,YAAY,aAAa/F,GAAMjB,cAAc,SAAA,EAAWrC,aAAa,KAAA,CAAA,YAC/E0J,EAAU7G,iBAAiB,SAAUe,CAAAA;AACjCjE,aAAKyJ,kBAAAA,GACLxF,GAAEsC,OAAOyD,QAAQ,eAAA,EAAiB9H,UAAUC,IAAI,QAAA,GAChDnC,KAAKuB,UAAUqC,GAAG5D,KAAK8J,mBAAAA,CAAAA;AAAAA,MAAAA,CAAAA,GAE3B7I,GAAWuB,OAAOuH,CAAAA;AAAAA,IAAAA,CAAAA,GAGf9I;AAAAA,EACX;AAAA,EAKA;AACIjB,SAAKuB,UAAUvB,KAAKI,cAAc,GAAGJ,KAAK8J,mBAAAA,CAAAA;AAAAA,EAC9C;AAAA,EAKA;AACI9J,SAAKuB,UAAUvB,KAAKI,cAAc,GAAGJ,KAAK8J,mBAAAA,CAAAA;AAAAA,EAC9C;AAAA,EAMA,YAAA5F;AACI,WAAO+F,MAAMC,KAAKlK,KAAK8H,iBAAiB,+BAAA,CAAA;AAAA,EAC5C;AAAA,EAMA,sBAAArE;AACI,WAAOwG,MAAMC,KAAKlK,KAAK8H,iBAAiB;EAC5C;AAAA,EAGA,yBAAyBhB,IAAAA;AACrB,WAAO9G,KAAKS,OAAOqG,KAAQ9G,KAAKiI,kBAAAA,IAAsBnB;AAAAA,EAC1D;AAAA,EAGA,yBAAyB7B,IAAAA;AACrB,UAAM7D,KAASpB,KAAKkE,UAAAA,GACd+C,IAAWjH,KAAKkH,wBAAwB9F,GAAOgD,SAC/C4D,IAAahI,KAAKiI,kBAAkB7G,GAAOgD;AACjD,WAAKpE,KAAKS,OACNT,KAAKU,iBACDuE,KAAS+C,IAAmB5G,GAAOgD,SAAS4D,IAAa/C,KACzDA,MAAU+C,IAAa5G,GAAOgD,SAAea,MAAU+C,IAAa5G,GAAOgD,UACxEa,KAAS+C,IAGhB/C,KAAS+C,IAAmBf,IAC5BhC,MAAU+C,IAAa5G,GAAOgD,SAAe,IAC1CW,KAAKsC,IAAItC,KAAKQ,IAAIN,KAAS+C,GAAY,CAAA,GAAIf,KAT3BlC,KAAKsC,IAAItC,KAAKQ,IAAIN,IAAQ,CAAA,GAAIgC,CAAAA;AAAAA,EAUzD;AAAA,EAOA,wBAAwB2B,KAAc5I,KAAKkE,UAAAA,EAAYE,QAAAA;AACnD,UAAM+F,KAAgBpF,KAAKsC,IAAIrH,KAAKC,cAAc2I,EAAAA;AAClD,WAAO7D,KAAKQ,IAAIqD,KAAcuB,IAAe;EACjD;AAAA,EAQA,mBAAmBrD,IAAO8B,KAAc5I,KAAKkE,UAAAA,EAAYE,QAAAA;AACrD,UAAMgG,IAAepK,KAAKqK,oBAAoBzB;AAC9C,WAAKwB,KAEItD,KAAQsD,IAAgBA,KAAgBA,IAFvB;AAAA,EAG9B;AAAA,EAOA,oBAAoBxB,KAAc5I,KAAKkE,UAAAA,EAAYE;AAC/C,WAAKwE,KAEE5I,KAAKU,iBAAiBkI,KAAc5I,KAAKkH,wBAAwB0B,MAAe,IAF9D;AAAA,EAG7B;AAAA,EAMA,uBAAAgB;AACI,WAAOK,MAAMC,KAAK,EAAE9F,QAAQpE,KAAKqK,oBAAAA,EAAAA,GAAyB,CAACC,IAAGxD,OAAUA,EAAAA;AAAAA,EAC5E;AAAA,EAMA,YAAAyD;AACI,UAAM3F,KAAK5E,KAAKyG,QAAQ/D,cAAc,kBAAA;AACtC,WAAOkC,GAAG4F,aAAc5F,GAAG6F,cAAc7F,GAAG8F;AAAAA,EAChD;AAAA,EAMA;AAEI,WADW1K,KAAKyG,QAAQ/D,cAAc,oBAC5B8H,aAAa;AAAA,EAC3B;;ACptBJ3K,EAAU8K,OAAO,gBAAgB/K,CAAAA;"}
@@ -8,282 +8,105 @@ var __accessCheck = (obj, member, msg) => member.has(obj) || __typeError("Cannot
8
8
  var __privateGet = (obj, member, getter) => (__accessCheck(obj, member, "read from private field"), getter ? getter.call(obj) : member.get(obj));
9
9
  var __privateAdd = (obj, member, value) => member.has(obj) ? __typeError("Cannot add the same private member more than once") : member instanceof WeakSet ? member.add(obj) : member.set(obj, value);
10
10
  var __privateSet = (obj, member, value, setter) => (__accessCheck(obj, member, "write to private field"), setter ? setter.call(obj, value) : member.set(obj, value), value);
11
- var _internalValue;
12
- import WJElement from "./wje-element.js";
13
- import { F as FormAssociatedElement } from "./form-associated-element-DEQ4y-jn.js";
14
- import { event } from "./event.js";
15
- const styles = "/*\n[ Checkbox ]\n*/\n\n:host {\n display: block;\n margin-top: var(--wje-checkbox-margin-top);\n margin-bottom: var(--wje-checkbox-margin-bottom);\n margin-inline: var(--wje-checkbox-margin-inline);\n line-height: 100%;\n padding-left: 0;\n\n label {\n display: flex;\n align-items: center;\n cursor: pointer;\n position: relative;\n padding-left: calc(var(--wje-checkbox-size) + 0.5rem);\n min-height: var(--wje-checkbox-size);\n margin-bottom: 0;\n &:before {\n content: '';\n position: absolute;\n width: var(--wje-checkbox-size);\n height: var(--wje-checkbox-size);\n left: 0;\n -webkit-box-sizing: inherit;\n box-sizing: border-box;\n background-color: var(--wje-color-contrast-0);\n border-width: 1px;\n border-style: solid;\n border-color: var(--wje-color-contrast-3);\n }\n }\n}\n\n.native-checkbox {\n label {\n &:hover {\n color: var(--wje-color-contrast-11);\n }\n\n &:before {\n border-radius: var(--wje-checkbox-border-radius);\n }\n }\n\n input[type='checkbox'] {\n position: absolute;\n margin: 0;\n z-index: -1;\n width: 16px;\n height: 16px;\n opacity: 0;\n pointer-events: none;\n & + label {\n &::after {\n content: '';\n position: absolute;\n left: 0;\n border-right: 0 solid transparent;\n border-bottom: 0 solid transparent;\n width: var(--wje-checkbox-size);\n height: var(--wje-checkbox-size);\n overflow: hidden;\n }\n }\n }\n\n input[type='checkbox']:checked + label::after {\n content: '';\n mask-image: var(--wje-checkbox-checkmark);\n mask-size: var(--wje-checkbox-size);\n background-color: var(--wje-color-primary-9);\n }\n\n /* Disabled */\n input[type='checkbox'][disabled] {\n & + label {\n cursor: not-allowed !important;\n color: var(--wje-color-contrast-8);\n opacity: 0.58;\n\n &:before {\n background: var(--wje-color-contrast-2);\n }\n &:after {\n background: transparent;\n }\n }\n }\n\n input[type='checkbox']:checked[disabled] {\n & + label {\n cursor: not-allowed !important;\n color: var(--wje-color-contrast-8);\n opacity: 0.58;\n\n &:before {\n background: var(--wje-color-contrast-2);\n }\n &:after {\n background: var(--wje-color-contrast-6);\n }\n }\n }\n\n /* Indeterminate */\n input[type='checkbox']:not(:checked):indeterminate {\n & + label {\n &:after {\n content: '';\n mask-image: var(--wje-checkbox-interminate);\n mask-size: var(--wje-checkbox-size);\n background-color: var(--wje-color-primary-9);\n }\n }\n }\n}\n\n:host([invalid]) {\n label{\n color: var(--wje-input-color-invalid);\n }\n}\n\nslot[name='error'] {\n display: none;\n}\n\n:host([invalid]) slot[name='error'] {\n display: block;\n}\n\n:host([variant='circle']) {\n label {\n &:after {\n border-radius: 99px;\n }\n\n &:before {\n border-radius: 99px;\n }\n }\n}\n\n:host([placement='end']) {\n label {\n padding-left: 0;\n padding-right: 26px;\n\n &:before {\n right: 0;\n left: auto;\n }\n }\n\n input[type='checkbox']:checked {\n & + label {\n position: relative;\n\n &::after {\n position: absolute;\n right: 0;\n left: auto;\n }\n }\n }\n}\n\nslot[name='error'] {\n display: none;\n max-width: 100%;\n min-width: auto;\n border-radius: 50px;\n top: 0;\n width: max-content;\n line-height: normal;\n position: static;\n background: transparent;\n padding: 0.25rem 0;\n left: auto;\n transform: none;\n color: var(--wje-input-color-invalid);\n font-size: 12px;\n}\n\n/*Colors*/\n\n:host([color='primary']) {\n input[type='checkbox']:checked + label::after,\n input[type='checkbox']:indeterminate + label:after {\n background-color: var(--wje-color-contrast-0);\n }\n :is(input[type='checkbox']:checked + label)::before,\n :is(input[type='checkbox']:indeterminate + label)::before {\n border-color: var(--wje-color-primary-9);\n background-color: var(--wje-color-primary-9);\n }\n}\n\n:host([color='complete']) {\n input[type='checkbox']:checked + label::after,\n input[type='checkbox']:indeterminate + label:after {\n background-color: var(--wje-color-contrast-0);\n }\n :is(input[type='checkbox']:checked + label)::before,\n :is(input[type='checkbox']:indeterminate + label)::before {\n border-color: var(--wje-color-complete-9);\n background-color: var(--wje-color-complete-9);\n }\n}\n\n:host([color='success']) {\n input[type='checkbox']:checked + label::after,\n input[type='checkbox']:indeterminate + label:after {\n background-color: var(--wje-color-contrast-0);\n }\n :is(input[type='checkbox']:checked + label)::before,\n :is(input[type='checkbox']:indeterminate + label)::before {\n border-color: var(--wje-color-success-9);\n background-color: var(--wje-color-success-9);\n }\n}\n\n:host([color='warning']) {\n input[type='checkbox']:checked + label::after,\n input[type='checkbox']:indeterminate + label:after {\n background-color: var(--wje-color-contrast-0);\n }\n :is(input[type='checkbox']:checked + label)::before,\n :is(input[type='checkbox']:indeterminate + label)::before {\n border-color: var(--wje-color-warning-9);\n background-color: var(--wje-color-warning-9);\n }\n}\n\n:host([color='danger']) {\n input[type='checkbox']:checked + label::after,\n input[type='checkbox']:indeterminate + label:after {\n background-color: var(--wje-color-contrast-0);\n }\n :is(input[type='checkbox']:checked + label)::before,\n :is(input[type='checkbox']:indeterminate + label)::before {\n border-color: var(--wje-color-danger-9);\n background-color: var(--wje-color-danger-9);\n }\n}\n\n:host([color='info']) {\n input[type='checkbox']:checked + label::after,\n input[type='checkbox']:indeterminate + label:after {\n background-color: var(--wje-color-contrast-0);\n }\n :is(input[type='checkbox']:checked + label)::before,\n :is(input[type='checkbox']:indeterminate + label)::before {\n border-color: var(--wje-color-info-9);\n background-color: var(--wje-color-info-9);\n }\n}\n";
16
- class Checkbox extends FormAssociatedElement {
17
- /**
18
- * Checkbox constructor method.
19
- */
11
+ var _e;
12
+ import e from "./wje-element.js";
13
+ import { F as t } from "./form-associated-element-BjeJn7j8.js";
14
+ import { event as i } from "./event.js";
15
+ class o extends t {
20
16
  constructor() {
21
17
  super();
22
- __privateAdd(this, _internalValue);
23
- /**
24
- * The class name for the Checkbox.
25
- */
18
+ __privateAdd(this, _e);
26
19
  __publicField(this, "className", "Checkbox");
27
- this.invalid = false;
28
- this.pristine = true;
29
- this._valueOff = "off";
20
+ this.invalid = false, this.pristine = true, this._valueOff = "off";
30
21
  }
31
- /**
32
- * Setter for the value attribute.
33
- * @param {string} value The value to set.
34
- */
35
- set value(value) {
36
- __privateSet(this, _internalValue, value);
37
- if (this.input) {
38
- this.input.value = value;
39
- }
22
+ set value(e2) {
23
+ __privateSet(this, _e, e2), this.input && (this.input.value = e2);
40
24
  }
41
- /**
42
- * Getter for the value attribute.
43
- * @returns {string} The value of the attribute.
44
- */
45
25
  get value() {
46
- return __privateGet(this, _internalValue) ?? this.getAttribute("value") ?? "on";
26
+ return __privateGet(this, _e) ?? this.getAttribute("value") ?? "on";
47
27
  }
48
- /**
49
- * Getter for the customErrorDisplay attribute.
50
- * @returns {boolean} Whether the attribute is present.
51
- */
52
28
  get customErrorDisplay() {
53
29
  return this.hasAttribute("custom-error-display");
54
30
  }
55
- /**
56
- * Getter for the validateOnChange attribute.
57
- * @returns {boolean} Whether the attribute is present.
58
- */
59
31
  get validateOnChange() {
60
32
  return this.hasAttribute("validate-on-change");
61
33
  }
62
- /**
63
- * Setter for the label attribute.
64
- * @param {string} value The label to set.
65
- */
66
- set label(value) {
67
- if (value === null || value === void 0) {
68
- this.removeAttribute("label");
69
- } else {
70
- this.setAttribute("label", value);
71
- }
34
+ set label(e2) {
35
+ null == e2 ? this.removeAttribute("label") : this.setAttribute("label", e2);
72
36
  }
73
- /**
74
- * Getter for the label attribute.
75
- * @returns {string|null}
76
- */
77
37
  get label() {
78
38
  return this.getAttribute("label");
79
39
  }
80
- /**
81
- * Setter for the defaultValue attribute.
82
- * This method sets the 'value' attribute of the custom input element to the provided value.
83
- * The 'value' attribute represents the default value of the input element.
84
- * @param {string} value The value to set as the default value.
85
- */
86
- set defaultValue(value) {
87
- this.setAttribute("value", value);
40
+ set defaultValue(e2) {
41
+ this.setAttribute("value", e2);
88
42
  }
89
- /**
90
- * Getter for the defaultValue attribute.
91
- * This method retrieves the 'value' attribute of the custom input element.
92
- * The 'value' attribute represents the default value of the input element.
93
- * If the 'value' attribute is not set, it returns an empty string.
94
- * @returns {string} The default value of the input element.
95
- */
96
43
  get defaultValue() {
97
44
  return this.getAttribute("value") ?? "";
98
45
  }
99
- /**
100
- * Sets or removes the 'indeterminate' attribute for the object.
101
- * This property typically reflects the visual or functional state where
102
- * the component is neither fully active nor inactive.
103
- * @param {boolean} value A boolean where `true` indicates the 'indeterminate'
104
- * state should be set, and `false` removes it.
105
- */
106
- set indeterminate(value) {
107
- if (value) {
108
- this.setAttribute("indeterminate", "");
109
- } else {
110
- this.removeAttribute("indeterminate");
111
- }
46
+ set indeterminate(e2) {
47
+ e2 ? this.setAttribute("indeterminate", "") : this.removeAttribute("indeterminate");
112
48
  }
113
- /**
114
- * Retrieves the current state of the 'indeterminate' attribute.
115
- *
116
- * The 'indeterminate' attribute is typically used to signify a state
117
- * where a checkbox is neither checked nor unchecked, such as a partially
118
- * selected state.
119
- * @returns {boolean} Returns true if the 'indeterminate' attribute is present; otherwise, false.
120
- */
121
49
  get indeterminate() {
122
50
  return this.hasAttribute("indeterminate");
123
51
  }
124
- /**
125
- * Set checked attribute.
126
- * @param {boolean} value true if the toggle is checked, false otherwise
127
- */
128
- set checked(value) {
129
- if (value) {
130
- this.setAttribute("checked", "");
131
- this.internals.setFormValue(this.value);
132
- } else {
133
- this.removeAttribute("checked");
134
- this.internals.setFormValue(this._valueOff);
135
- }
136
- if (this.input) {
137
- this.input.checked = value;
138
- }
52
+ set checked(e2) {
53
+ e2 ? (this.setAttribute("checked", ""), this.internals.setFormValue(this.value)) : (this.removeAttribute("checked"), this.internals.setFormValue(this._valueOff)), this.input && (this.input.checked = e2);
139
54
  }
140
- /**
141
- * Get checked attribute.
142
- * @returns {boolean} true if the toggle is checked, false otherwise
143
- */
144
55
  get checked() {
145
56
  return this.hasAttribute("checked");
146
57
  }
147
- /**
148
- * Getter for the CSS stylesheet.
149
- * @returns {string} The CSS stylesheet.
150
- */
151
58
  static get cssStyleSheet() {
152
- return styles;
59
+ return ':host{display:block;margin-top:var(--wje-checkbox-margin-top);margin-bottom:var(--wje-checkbox-margin-bottom);margin-inline:var(--wje-checkbox-margin-inline);line-height:100%;padding-left:0}:host label{display:flex;align-items:center;cursor:pointer;position:relative;padding-left:calc(var(--wje-checkbox-size) + .5rem);min-height:var(--wje-checkbox-size);margin-bottom:0}:host label:before{content:"";position:absolute;width:var(--wje-checkbox-size);height:var(--wje-checkbox-size);left:0;-webkit-box-sizing:inherit;box-sizing:border-box;background-color:var(--wje-color-contrast-0);border-width:1px;border-style:solid;border-color:var(--wje-color-contrast-3)}.native-checkbox label:hover{color:var(--wje-color-contrast-11)}.native-checkbox label:before{border-radius:var(--wje-checkbox-border-radius)}.native-checkbox input[type=checkbox]{position:absolute;margin:0;z-index:-1;width:16px;height:16px;opacity:0;pointer-events:none}.native-checkbox input[type=checkbox]+label:after{content:"";position:absolute;left:0;border-right:0 solid transparent;border-bottom:0 solid transparent;width:var(--wje-checkbox-size);height:var(--wje-checkbox-size);overflow:hidden}.native-checkbox input[type=checkbox]:checked+label:after{content:"";-webkit-mask-image:var(--wje-checkbox-checkmark);mask-image:var(--wje-checkbox-checkmark);-webkit-mask-size:var(--wje-checkbox-size);mask-size:var(--wje-checkbox-size);background-color:var(--wje-color-primary-9)}.native-checkbox input[type=checkbox][disabled]+label{cursor:not-allowed!important;color:var(--wje-color-contrast-8);opacity:.58}.native-checkbox input[type=checkbox][disabled]+label:before{background:var(--wje-color-contrast-2)}.native-checkbox input[type=checkbox][disabled]+label:after{background:transparent}.native-checkbox input[type=checkbox]:checked[disabled]+label{cursor:not-allowed!important;color:var(--wje-color-contrast-8);opacity:.58}.native-checkbox input[type=checkbox]:checked[disabled]+label:before{background:var(--wje-color-contrast-2)}.native-checkbox input[type=checkbox]:checked[disabled]+label:after{background:var(--wje-color-contrast-6)}.native-checkbox input[type=checkbox]:not(:checked):indeterminate+label:after{content:"";-webkit-mask-image:var(--wje-checkbox-interminate);mask-image:var(--wje-checkbox-interminate);-webkit-mask-size:var(--wje-checkbox-size);mask-size:var(--wje-checkbox-size);background-color:var(--wje-color-primary-9)}:host([invalid]) label{color:var(--wje-input-color-invalid)}slot[name=error]{display:none}:host([invalid]) slot[name=error]{display:block}:host([variant="circle"]) label:after{border-radius:99px}:host([variant="circle"]) label:before{border-radius:99px}:host([placement="end"]) label{padding-left:0;padding-right:26px}:host([placement="end"]) label:before{right:0;left:auto}:host([placement="end"]) input[type=checkbox]:checked+label{position:relative}:host([placement="end"]) input[type=checkbox]:checked+label:after{position:absolute;right:0;left:auto}slot[name=error]{display:none;max-width:100%;min-width:auto;border-radius:50px;top:0;width:max-content;line-height:normal;position:static;background:transparent;padding:.25rem 0;left:auto;transform:none;color:var(--wje-input-color-invalid);font-size:12px}:host([color="primary"]) input[type=checkbox]:checked+label:after,:host([color="primary"]) input[type=checkbox]:indeterminate+label:after{background-color:var(--wje-color-contrast-0)}:host([color="primary"]) :is(input[type=checkbox]:checked+label):before,:host([color="primary"]) :is(input[type=checkbox]:indeterminate+label):before{border-color:var(--wje-color-primary-9);background-color:var(--wje-color-primary-9)}:host([color="complete"]) input[type=checkbox]:checked+label:after,:host([color="complete"]) input[type=checkbox]:indeterminate+label:after{background-color:var(--wje-color-contrast-0)}:host([color="complete"]) :is(input[type=checkbox]:checked+label):before,:host([color="complete"]) :is(input[type=checkbox]:indeterminate+label):before{border-color:var(--wje-color-complete-9);background-color:var(--wje-color-complete-9)}:host([color="success"]) input[type=checkbox]:checked+label:after,:host([color="success"]) input[type=checkbox]:indeterminate+label:after{background-color:var(--wje-color-contrast-0)}:host([color="success"]) :is(input[type=checkbox]:checked+label):before,:host([color="success"]) :is(input[type=checkbox]:indeterminate+label):before{border-color:var(--wje-color-success-9);background-color:var(--wje-color-success-9)}:host([color="warning"]) input[type=checkbox]:checked+label:after,:host([color="warning"]) input[type=checkbox]:indeterminate+label:after{background-color:var(--wje-color-contrast-0)}:host([color="warning"]) :is(input[type=checkbox]:checked+label):before,:host([color="warning"]) :is(input[type=checkbox]:indeterminate+label):before{border-color:var(--wje-color-warning-9);background-color:var(--wje-color-warning-9)}:host([color="danger"]) input[type=checkbox]:checked+label:after,:host([color="danger"]) input[type=checkbox]:indeterminate+label:after{background-color:var(--wje-color-contrast-0)}:host([color="danger"]) :is(input[type=checkbox]:checked+label):before,:host([color="danger"]) :is(input[type=checkbox]:indeterminate+label):before{border-color:var(--wje-color-danger-9);background-color:var(--wje-color-danger-9)}:host([color="info"]) input[type=checkbox]:checked+label:after,:host([color="info"]) input[type=checkbox]:indeterminate+label:after{background-color:var(--wje-color-contrast-0)}:host([color="info"]) :is(input[type=checkbox]:checked+label):before,:host([color="info"]) :is(input[type=checkbox]:indeterminate+label):before{border-color:var(--wje-color-info-9);background-color:var(--wje-color-info-9)}';
153
60
  }
154
61
  static get observedAttributes() {
155
62
  return ["checked", "disabled", "value", "indeterminate", "required", "invalid", "label"];
156
63
  }
157
- attributeChangedCallback(name, oldValue, newValue) {
64
+ attributeChangedCallback(e2, t2, i2) {
158
65
  var _a;
159
- (_a = super.attributeChangedCallback) == null ? void 0 : _a.call(this, name, oldValue, newValue);
160
- if (!this.input) {
66
+ if ((_a = super.attributeChangedCallback) == null ? void 0 : _a.call(this, e2, t2, i2), this.input) {
67
+ if ("checked" === e2) {
68
+ const e3 = this.hasAttribute("checked");
69
+ this.input.checked = e3, e3 ? this.internals.setFormValue(this.value) : this.internals.setFormValue(this._valueOff);
70
+ } else "disabled" === e2 ? this.input.disabled = this.hasAttribute("disabled") : "indeterminate" === e2 ? this.input.indeterminate = this.hasAttribute("indeterminate") : "value" === e2 && (__privateSet(this, _e, i2 ?? void 0), this.input.value = this.value, this.input.checked && this.internals.setFormValue(this.value));
161
71
  this.syncAria();
162
- return;
163
- }
164
- if (name === "checked") {
165
- const isChecked = this.hasAttribute("checked");
166
- this.input.checked = isChecked;
167
- if (isChecked) {
168
- this.internals.setFormValue(this.value);
169
- } else {
170
- this.internals.setFormValue(this._valueOff);
171
- }
172
- } else if (name === "disabled") {
173
- this.input.disabled = this.hasAttribute("disabled");
174
- } else if (name === "indeterminate") {
175
- this.input.indeterminate = this.hasAttribute("indeterminate");
176
- } else if (name === "value") {
177
- __privateSet(this, _internalValue, newValue ?? void 0);
178
- this.input.value = this.value;
179
- if (this.input.checked) {
180
- this.internals.setFormValue(this.value);
181
- }
182
- }
183
- this.syncAria();
72
+ } else this.syncAria();
184
73
  }
185
- /**
186
- * Sets up the attributes for the checkbox.
187
- */
188
74
  setupAttributes() {
189
- this.isShadowRoot = "open";
190
- if (this.pristine) {
191
- this.value = __privateGet(this, _internalValue);
192
- this.pristine = false;
193
- }
194
- this.syncAria();
75
+ this.isShadowRoot = "open", this.pristine && (this.value = __privateGet(this, _e), this.pristine = false), this.syncAria();
195
76
  }
196
- /**
197
- * Draws the checkbox element.
198
- * @returns {DocumentFragment} The created fragment.
199
- */
200
77
  draw() {
201
- let fragment = document.createDocumentFragment();
202
- let native = document.createElement("div");
203
- native.setAttribute("part", "native");
204
- native.classList.add("native-checkbox");
205
- let input = document.createElement("input");
206
- input.type = "checkbox";
207
- input.id = "checkbox";
208
- input.name = this.name || "checkbox";
209
- input.checked = this.checked;
210
- input.disabled = this.disabled;
211
- input.indeterminate = this.indeterminate;
212
- input.required = this.required;
213
- input.value = this.value;
214
- let label = document.createElement("label");
215
- label.htmlFor = "checkbox";
216
- label.innerHTML = "<slot></slot>";
217
- let errorSlot = document.createElement("slot");
218
- errorSlot.setAttribute("name", "error");
219
- let error = document.createElement("div");
220
- error.setAttribute("slot", "error");
221
- native.append(input);
222
- native.append(label);
223
- native.append(errorSlot);
224
- this.append(error);
225
- this.input = input;
226
- fragment.appendChild(native);
227
- return fragment;
78
+ let e2 = document.createDocumentFragment(), t2 = document.createElement("div");
79
+ t2.setAttribute("part", "native"), t2.classList.add("native-checkbox");
80
+ let i2 = document.createElement("input");
81
+ i2.type = "checkbox", i2.id = "checkbox", i2.name = this.name || "checkbox", i2.checked = this.checked, i2.disabled = this.disabled, i2.indeterminate = this.indeterminate, i2.required = this.required, i2.value = this.value;
82
+ let o2 = document.createElement("label");
83
+ o2.htmlFor = "checkbox", o2.innerHTML = "<slot></slot>";
84
+ let r = document.createElement("slot");
85
+ r.setAttribute("name", "error");
86
+ let a = document.createElement("div");
87
+ return a.setAttribute("slot", "error"), t2.append(i2), t2.append(o2), t2.append(r), this.append(a), this.input = i2, e2.appendChild(t2), e2;
228
88
  }
229
- /**
230
- * Adds an event listener after drawing the checkbox.
231
- */
232
89
  afterDraw() {
233
- this.internals.setFormValue(this.checked ? this.value : this._valueOff);
234
- this.syncAria();
235
- if (!this.disabled) {
236
- this.input.addEventListener("input", (e) => {
237
- this.validate();
238
- this.pristine = false;
239
- this.propagateValidation();
240
- this.indeterminate = false;
241
- this.checked = e.target.checked;
242
- this.syncAria();
243
- event.dispatchCustomEvent(this, "wje-toggle:input");
244
- });
245
- this.input.addEventListener("change", (e) => {
246
- event.dispatchCustomEvent(this, "wje-toggle:change");
247
- });
248
- this.addEventListener("invalid", (e) => {
249
- this.invalid = true;
250
- this.pristine = false;
251
- this.showInvalidMessage();
252
- });
253
- this.validate();
254
- if (this.invalid) {
255
- this.showInvalidMessage();
256
- }
257
- }
90
+ this.internals.setFormValue(this.checked ? this.value : this._valueOff), this.syncAria(), this.disabled || (this.input.addEventListener("input", (e2) => {
91
+ this.validate(), this.pristine = false, this.propagateValidation(), this.indeterminate = false, this.checked = e2.target.checked, this.syncAria(), i.dispatchCustomEvent(this, "wje-toggle:input");
92
+ }), this.input.addEventListener("change", (e2) => {
93
+ i.dispatchCustomEvent(this, "wje-toggle:change");
94
+ }), this.addEventListener("invalid", (e2) => {
95
+ this.invalid = true, this.pristine = false, this.showInvalidMessage();
96
+ }), this.validate(), this.invalid && this.showInvalidMessage());
258
97
  }
259
- /**
260
- * Syncs ARIA attributes on the host element.
261
- */
262
98
  syncAria() {
263
99
  var _a;
264
- const checked = this.indeterminate ? "mixed" : this.checked ? "true" : "false";
265
- const requiredInvalid = this.required && !this.checked;
266
- const invalid = this.invalid || requiredInvalid;
267
- const label = (_a = this.label) == null ? void 0 : _a.trim();
268
- this.setAriaState({
269
- role: "checkbox",
270
- checked,
271
- disabled: this.disabled,
272
- required: this.required,
273
- invalid,
274
- ...label ? { label } : {}
275
- });
100
+ const e2 = this.indeterminate ? "mixed" : this.checked ? "true" : "false", t2 = this.required && !this.checked, i2 = this.invalid || t2, o2 = (_a = this.label) == null ? void 0 : _a.trim();
101
+ this.setAriaState({ role: "checkbox", checked: e2, disabled: this.disabled, required: this.required, invalid: i2, ...o2 ? { label: o2 } : {} });
276
102
  }
277
- /**
278
- * Removes the event listener when the checkbox is disconnected.
279
- */
280
103
  beforeDisconnect() {
281
- event.removeElement(this.input);
104
+ i.removeElement(this.input);
282
105
  }
283
106
  }
284
- _internalValue = new WeakMap();
285
- WJElement.define("wje-checkbox", Checkbox);
107
+ _e = new WeakMap();
108
+ e.define("wje-checkbox", o);
286
109
  export {
287
- Checkbox as default
110
+ o as default
288
111
  };
289
112
  //# sourceMappingURL=wje-checkbox.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"wje-checkbox.js","sources":["../packages/wje-checkbox/checkbox.element.js","../packages/wje-checkbox/checkbox.js"],"sourcesContent":["import { FormAssociatedElement } from '../internals/form-associated-element.js';\nimport { event } from '../utils/event.js';\nimport styles from './styles/styles.css?inline';\n\n/**\n * @summary This method dispatches a custom event named \"wje-toggle:change\".\n * It is triggered when the input event is fired, which happens when the state of the checkbox changes.\n * The event is dispatched on the current instance of the Checkbox class.\n * @documentation https://elements.webjet.sk/components/checkbox\n * @status stable\n * @augments {FormAssociatedElement}\n * @slot - The checkbox main content.\n * @csspart native - The component's native wrapper.\n * @cssproperty [--wje-checkbox-border-radius=--wje-border-radius-medium] - Border radius of the component;\n * @cssproperty [--wje-checkbox-border-width=1px] - Border width of the component;\n * @cssproperty [--wje-checkbox-border-style=solid] - Border style of the component;\n * @cssproperty [--wje-checkbox-border-color=--wje-color-contrast-1] - Border color of the component;\n * @cssproperty [--wje-checkbox-margin-inline=0] - Margin inline of the component;\n */\nexport default class Checkbox extends FormAssociatedElement {\n\t#internalValue;\n\t/**\n\t * Checkbox constructor method.\n\t */\n\tconstructor() {\n\t\tsuper();\n\n\t\tthis.invalid = false;\n\t\tthis.pristine = true;\n\t\tthis._valueOff = 'off';\n\t}\n\n\t/**\n\t * Setter for the value attribute.\n\t * @param {string} value The value to set.\n\t */\n\tset value(value) {\n\t\tthis.#internalValue = value;\n\t\tif (this.input) {\n\t\t\tthis.input.value = value;\n\t\t}\n\t}\n\n\t/**\n\t * Getter for the value attribute.\n\t * @returns {string} The value of the attribute.\n\t */\n\tget value() {\n\t\treturn this.#internalValue ?? this.getAttribute('value') ?? 'on';\n\t}\n\n\t/**\n\t * Getter for the customErrorDisplay attribute.\n\t * @returns {boolean} Whether the attribute is present.\n\t */\n\tget customErrorDisplay() {\n\t\treturn this.hasAttribute('custom-error-display');\n\t}\n\n\t/**\n\t * Getter for the validateOnChange attribute.\n\t * @returns {boolean} Whether the attribute is present.\n\t */\n\tget validateOnChange() {\n\t\treturn this.hasAttribute('validate-on-change');\n\t}\n\n\t/**\n\t * Setter for the label attribute.\n\t * @param {string} value The label to set.\n\t */\n\tset label(value) {\n\t\tif (value === null || value === undefined) {\n\t\t\tthis.removeAttribute('label');\n\t\t} else {\n\t\t\tthis.setAttribute('label', value);\n\t\t}\n\t}\n\n\t/**\n\t * Getter for the label attribute.\n\t * @returns {string|null}\n\t */\n\tget label() {\n\t\treturn this.getAttribute('label');\n\t}\n\n\t/**\n\t * Setter for the defaultValue attribute.\n\t * This method sets the 'value' attribute of the custom input element to the provided value.\n\t * The 'value' attribute represents the default value of the input element.\n\t * @param {string} value The value to set as the default value.\n\t */\n\tset defaultValue(value) {\n\t\tthis.setAttribute('value', value);\n\t}\n\n\t/**\n\t * Getter for the defaultValue attribute.\n\t * This method retrieves the 'value' attribute of the custom input element.\n\t * The 'value' attribute represents the default value of the input element.\n\t * If the 'value' attribute is not set, it returns an empty string.\n\t * @returns {string} The default value of the input element.\n\t */\n\tget defaultValue() {\n\t\treturn this.getAttribute('value') ?? '';\n\t}\n\n\t/**\n\t * Sets or removes the 'indeterminate' attribute for the object.\n\t * This property typically reflects the visual or functional state where\n\t * the component is neither fully active nor inactive.\n\t * @param {boolean} value A boolean where `true` indicates the 'indeterminate'\n\t * state should be set, and `false` removes it.\n\t */\n\tset indeterminate(value) {\n\t\tif (value) {\n\t\t\tthis.setAttribute('indeterminate', '');\n\t\t} else {\n\t\t\tthis.removeAttribute('indeterminate');\n\t\t}\n\t}\n\n\t/**\n\t * Retrieves the current state of the 'indeterminate' attribute.\n\t *\n\t * The 'indeterminate' attribute is typically used to signify a state\n\t * where a checkbox is neither checked nor unchecked, such as a partially\n\t * selected state.\n\t * @returns {boolean} Returns true if the 'indeterminate' attribute is present; otherwise, false.\n\t */\n\tget indeterminate() {\n\t\treturn this.hasAttribute('indeterminate');\n\t}\n\n\t/**\n\t * Set checked attribute.\n\t * @param {boolean} value true if the toggle is checked, false otherwise\n\t */\n\tset checked(value) {\n\t\tif (value) {\n\t\t\tthis.setAttribute('checked', '');\n\t\t\tthis.internals.setFormValue(this.value); // len ak je checked\n\t\t} else {\n\t\t\tthis.removeAttribute('checked');\n\t\t\tthis.internals.setFormValue(this._valueOff); // ak nie je checked, nič sa neposiela\n\t\t}\n\t\tif (this.input) {\n\t\t\tthis.input.checked = value;\n\t\t}\n\t}\n\n\t/**\n\t * Get checked attribute.\n\t * @returns {boolean} true if the toggle is checked, false otherwise\n\t */\n\tget checked() {\n\t\treturn this.hasAttribute('checked');\n\t}\n\n\t/**\n\t * The class name for the Checkbox.\n\t */\n\tclassName = 'Checkbox';\n\n\t/**\n\t * Getter for the CSS stylesheet.\n\t * @returns {string} The CSS stylesheet.\n\t */\n\tstatic get cssStyleSheet() {\n\t\treturn styles;\n\t}\n\n\tstatic get observedAttributes() {\n\t\treturn ['checked', 'disabled', 'value', 'indeterminate', 'required', 'invalid', 'label'];\n\t}\n\n\tattributeChangedCallback(name, oldValue, newValue) {\n\t\tsuper.attributeChangedCallback?.(name, oldValue, newValue);\n\t\tif (!this.input) {\n\t\t\tthis.syncAria();\n\t\t\treturn;\n\t\t}\n\t\tif (name === 'checked') {\n\t\t\tconst isChecked = this.hasAttribute('checked');\n\t\t\tthis.input.checked = isChecked;\n\t\t\t// Reflect into form value\n\t\t\tif (isChecked) {\n\t\t\t\tthis.internals.setFormValue(this.value);\n\t\t\t} else {\n\t\t\t\tthis.internals.setFormValue(this._valueOff);\n\t\t\t}\n\t\t} else if (name === 'disabled') {\n\t\t\tthis.input.disabled = this.hasAttribute('disabled');\n\t\t} else if (name === 'indeterminate') {\n\t\t\tthis.input.indeterminate = this.hasAttribute('indeterminate');\n\t\t} else if (name === 'value') {\n\t\t\t// keep payload in sync; do not toggle checked here\n\t\t\tthis.#internalValue = newValue ?? undefined;\n\t\t\tthis.input.value = this.value;\n\t\t\t// If currently checked, update the submitted payload\n\t\t\tif (this.input.checked) {\n\t\t\t\tthis.internals.setFormValue(this.value);\n\t\t\t}\n\t\t}\n\t\tthis.syncAria();\n\t}\n\n\t/**\n\t * Sets up the attributes for the checkbox.\n\t */\n\tsetupAttributes() {\n\t\tthis.isShadowRoot = 'open';\n\t\t// if some value was set via value setter then dont use default value\n\t\tif (this.pristine) {\n\t\t\tthis.value = this.#internalValue;\n\t\t\tthis.pristine = false;\n\t\t}\n\t\tthis.syncAria();\n\t}\n\n\t/**\n\t * Draws the checkbox element.\n\t * @returns {DocumentFragment} The created fragment.\n\t */\n\tdraw() {\n\t\tlet fragment = document.createDocumentFragment();\n\n\t\tlet native = document.createElement('div');\n\t\tnative.setAttribute('part', 'native');\n\t\tnative.classList.add('native-checkbox');\n\n\t\tlet input = document.createElement('input');\n\t\tinput.type = 'checkbox';\n\t\tinput.id = 'checkbox';\n\t\tinput.name = this.name || 'checkbox';\n\t\tinput.checked = this.checked;\n\t\tinput.disabled = this.disabled;\n\t\tinput.indeterminate = this.indeterminate;\n\t\tinput.required = this.required;\n\t\tinput.value = this.value;\n\n\t\tlet label = document.createElement('label');\n\t\tlabel.htmlFor = 'checkbox';\n\t\tlabel.innerHTML = '<slot></slot>';\n\n\t\t// Error\n\t\tlet errorSlot = document.createElement('slot');\n\t\terrorSlot.setAttribute('name', 'error');\n\n\t\tlet error = document.createElement('div');\n\t\terror.setAttribute('slot', 'error');\n\n\t\t// APPEND\n\t\tnative.append(input);\n\t\tnative.append(label);\n\t\tnative.append(errorSlot);\n\n\t\tthis.append(error);\n\n\t\tthis.input = input;\n\n\t\tfragment.appendChild(native);\n\n\t\treturn fragment;\n\t}\n\n\t/**\n\t * Adds an event listener after drawing the checkbox.\n\t */\n\tafterDraw() {\n\t\tthis.internals.setFormValue(this.checked ? this.value : this._valueOff); // Set initial form value based on checked state\n\t\tthis.syncAria();\n\n\t\tif (!this.disabled) {\n\t\t\tthis.input.addEventListener('input', (e) => {\n\t\t\t\tthis.validate();\n\n\t\t\t\tthis.pristine = false;\n\t\t\t\tthis.propagateValidation();\n\n\t\t\t\t// User interaction decides the checked state; value stays as payload\n\t\t\t\tthis.indeterminate = false;\n\t\t\t\tthis.checked = e.target.checked;\n\t\t\t\tthis.syncAria();\n\n\t\t\t\tevent.dispatchCustomEvent(this, 'wje-toggle:input');\n\t\t\t});\n\n\t\t\tthis.input.addEventListener('change', (e) => {\n\t\t\t\tevent.dispatchCustomEvent(this, 'wje-toggle:change');\n\t\t\t});\n\n\t\t\tthis.addEventListener('invalid', (e) => {\n\t\t\t\tthis.invalid = true;\n\t\t\t\tthis.pristine = false;\n\n\t\t\t\tthis.showInvalidMessage();\n\t\t\t});\n\n\t\t\tthis.validate();\n\n\t\t\tif (this.invalid) {\n\t\t\t\tthis.showInvalidMessage();\n\t\t\t}\n\t\t}\n\t}\n\n\t/**\n\t * Syncs ARIA attributes on the host element.\n\t */\n\tsyncAria() {\n\t\tconst checked = this.indeterminate ? 'mixed' : (this.checked ? 'true' : 'false');\n\t\tconst requiredInvalid = this.required && !this.checked;\n\t\tconst invalid = this.invalid || requiredInvalid;\n\t\tconst label = this.label?.trim();\n\t\tthis.setAriaState({\n\t\t\trole: 'checkbox',\n\t\t\tchecked,\n\t\t\tdisabled: this.disabled,\n\t\t\trequired: this.required,\n\t\t\tinvalid,\n\t\t\t...(label ? { label } : {}),\n\t\t});\n\t}\n\n\t/**\n\t * Removes the event listener when the checkbox is disconnected.\n\t */\n\tbeforeDisconnect() {\n\t\tevent.removeElement(this.input);\n\t}\n}\n","import { default as WJElement } from '../wje-element/element.js';\nimport Checkbox from './checkbox.element.js';\n\n// export * from \"./checkbox.element.js\";\nexport default Checkbox;\n\nWJElement.define('wje-checkbox', Checkbox);\n"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"wje-checkbox.js","sources":["../packages/wje-checkbox/checkbox.element.js","../packages/wje-checkbox/checkbox.js"],"sourcesContent":["import { FormAssociatedElement } from '../internals/form-associated-element.js';\nimport { event } from '../utils/event.js';\nimport styles from './styles/styles.css?inline';\n\n/**\n * @summary This method dispatches a custom event named \"wje-toggle:change\".\n * It is triggered when the input event is fired, which happens when the state of the checkbox changes.\n * The event is dispatched on the current instance of the Checkbox class.\n * @documentation https://elements.webjet.sk/components/checkbox\n * @status stable\n * @augments {FormAssociatedElement}\n * @slot - The checkbox main content.\n * @csspart native - The component's native wrapper.\n * @cssproperty [--wje-checkbox-border-radius=--wje-border-radius-medium] - Border radius of the component;\n * @cssproperty [--wje-checkbox-border-width=1px] - Border width of the component;\n * @cssproperty [--wje-checkbox-border-style=solid] - Border style of the component;\n * @cssproperty [--wje-checkbox-border-color=--wje-color-contrast-1] - Border color of the component;\n * @cssproperty [--wje-checkbox-margin-inline=0] - Margin inline of the component;\n */\nexport default class Checkbox extends FormAssociatedElement {\n\t#internalValue;\n\t/**\n\t * Checkbox constructor method.\n\t */\n\tconstructor() {\n\t\tsuper();\n\n\t\tthis.invalid = false;\n\t\tthis.pristine = true;\n\t\tthis._valueOff = 'off';\n\t}\n\n\t/**\n\t * Setter for the value attribute.\n\t * @param {string} value The value to set.\n\t */\n\tset value(value) {\n\t\tthis.#internalValue = value;\n\t\tif (this.input) {\n\t\t\tthis.input.value = value;\n\t\t}\n\t}\n\n\t/**\n\t * Getter for the value attribute.\n\t * @returns {string} The value of the attribute.\n\t */\n\tget value() {\n\t\treturn this.#internalValue ?? this.getAttribute('value') ?? 'on';\n\t}\n\n\t/**\n\t * Getter for the customErrorDisplay attribute.\n\t * @returns {boolean} Whether the attribute is present.\n\t */\n\tget customErrorDisplay() {\n\t\treturn this.hasAttribute('custom-error-display');\n\t}\n\n\t/**\n\t * Getter for the validateOnChange attribute.\n\t * @returns {boolean} Whether the attribute is present.\n\t */\n\tget validateOnChange() {\n\t\treturn this.hasAttribute('validate-on-change');\n\t}\n\n\t/**\n\t * Setter for the label attribute.\n\t * @param {string} value The label to set.\n\t */\n\tset label(value) {\n\t\tif (value === null || value === undefined) {\n\t\t\tthis.removeAttribute('label');\n\t\t} else {\n\t\t\tthis.setAttribute('label', value);\n\t\t}\n\t}\n\n\t/**\n\t * Getter for the label attribute.\n\t * @returns {string|null}\n\t */\n\tget label() {\n\t\treturn this.getAttribute('label');\n\t}\n\n\t/**\n\t * Setter for the defaultValue attribute.\n\t * This method sets the 'value' attribute of the custom input element to the provided value.\n\t * The 'value' attribute represents the default value of the input element.\n\t * @param {string} value The value to set as the default value.\n\t */\n\tset defaultValue(value) {\n\t\tthis.setAttribute('value', value);\n\t}\n\n\t/**\n\t * Getter for the defaultValue attribute.\n\t * This method retrieves the 'value' attribute of the custom input element.\n\t * The 'value' attribute represents the default value of the input element.\n\t * If the 'value' attribute is not set, it returns an empty string.\n\t * @returns {string} The default value of the input element.\n\t */\n\tget defaultValue() {\n\t\treturn this.getAttribute('value') ?? '';\n\t}\n\n\t/**\n\t * Sets or removes the 'indeterminate' attribute for the object.\n\t * This property typically reflects the visual or functional state where\n\t * the component is neither fully active nor inactive.\n\t * @param {boolean} value A boolean where `true` indicates the 'indeterminate'\n\t * state should be set, and `false` removes it.\n\t */\n\tset indeterminate(value) {\n\t\tif (value) {\n\t\t\tthis.setAttribute('indeterminate', '');\n\t\t} else {\n\t\t\tthis.removeAttribute('indeterminate');\n\t\t}\n\t}\n\n\t/**\n\t * Retrieves the current state of the 'indeterminate' attribute.\n\t *\n\t * The 'indeterminate' attribute is typically used to signify a state\n\t * where a checkbox is neither checked nor unchecked, such as a partially\n\t * selected state.\n\t * @returns {boolean} Returns true if the 'indeterminate' attribute is present; otherwise, false.\n\t */\n\tget indeterminate() {\n\t\treturn this.hasAttribute('indeterminate');\n\t}\n\n\t/**\n\t * Set checked attribute.\n\t * @param {boolean} value true if the toggle is checked, false otherwise\n\t */\n\tset checked(value) {\n\t\tif (value) {\n\t\t\tthis.setAttribute('checked', '');\n\t\t\tthis.internals.setFormValue(this.value); // len ak je checked\n\t\t} else {\n\t\t\tthis.removeAttribute('checked');\n\t\t\tthis.internals.setFormValue(this._valueOff); // ak nie je checked, nič sa neposiela\n\t\t}\n\t\tif (this.input) {\n\t\t\tthis.input.checked = value;\n\t\t}\n\t}\n\n\t/**\n\t * Get checked attribute.\n\t * @returns {boolean} true if the toggle is checked, false otherwise\n\t */\n\tget checked() {\n\t\treturn this.hasAttribute('checked');\n\t}\n\n\t/**\n\t * The class name for the Checkbox.\n\t */\n\tclassName = 'Checkbox';\n\n\t/**\n\t * Getter for the CSS stylesheet.\n\t * @returns {string} The CSS stylesheet.\n\t */\n\tstatic get cssStyleSheet() {\n\t\treturn styles;\n\t}\n\n\tstatic get observedAttributes() {\n\t\treturn ['checked', 'disabled', 'value', 'indeterminate', 'required', 'invalid', 'label'];\n\t}\n\n\tattributeChangedCallback(name, oldValue, newValue) {\n\t\tsuper.attributeChangedCallback?.(name, oldValue, newValue);\n\t\tif (!this.input) {\n\t\t\tthis.syncAria();\n\t\t\treturn;\n\t\t}\n\t\tif (name === 'checked') {\n\t\t\tconst isChecked = this.hasAttribute('checked');\n\t\t\tthis.input.checked = isChecked;\n\t\t\t// Reflect into form value\n\t\t\tif (isChecked) {\n\t\t\t\tthis.internals.setFormValue(this.value);\n\t\t\t} else {\n\t\t\t\tthis.internals.setFormValue(this._valueOff);\n\t\t\t}\n\t\t} else if (name === 'disabled') {\n\t\t\tthis.input.disabled = this.hasAttribute('disabled');\n\t\t} else if (name === 'indeterminate') {\n\t\t\tthis.input.indeterminate = this.hasAttribute('indeterminate');\n\t\t} else if (name === 'value') {\n\t\t\t// keep payload in sync; do not toggle checked here\n\t\t\tthis.#internalValue = newValue ?? undefined;\n\t\t\tthis.input.value = this.value;\n\t\t\t// If currently checked, update the submitted payload\n\t\t\tif (this.input.checked) {\n\t\t\t\tthis.internals.setFormValue(this.value);\n\t\t\t}\n\t\t}\n\t\tthis.syncAria();\n\t}\n\n\t/**\n\t * Sets up the attributes for the checkbox.\n\t */\n\tsetupAttributes() {\n\t\tthis.isShadowRoot = 'open';\n\t\t// if some value was set via value setter then dont use default value\n\t\tif (this.pristine) {\n\t\t\tthis.value = this.#internalValue;\n\t\t\tthis.pristine = false;\n\t\t}\n\t\tthis.syncAria();\n\t}\n\n\t/**\n\t * Draws the checkbox element.\n\t * @returns {DocumentFragment} The created fragment.\n\t */\n\tdraw() {\n\t\tlet fragment = document.createDocumentFragment();\n\n\t\tlet native = document.createElement('div');\n\t\tnative.setAttribute('part', 'native');\n\t\tnative.classList.add('native-checkbox');\n\n\t\tlet input = document.createElement('input');\n\t\tinput.type = 'checkbox';\n\t\tinput.id = 'checkbox';\n\t\tinput.name = this.name || 'checkbox';\n\t\tinput.checked = this.checked;\n\t\tinput.disabled = this.disabled;\n\t\tinput.indeterminate = this.indeterminate;\n\t\tinput.required = this.required;\n\t\tinput.value = this.value;\n\n\t\tlet label = document.createElement('label');\n\t\tlabel.htmlFor = 'checkbox';\n\t\tlabel.innerHTML = '<slot></slot>';\n\n\t\t// Error\n\t\tlet errorSlot = document.createElement('slot');\n\t\terrorSlot.setAttribute('name', 'error');\n\n\t\tlet error = document.createElement('div');\n\t\terror.setAttribute('slot', 'error');\n\n\t\t// APPEND\n\t\tnative.append(input);\n\t\tnative.append(label);\n\t\tnative.append(errorSlot);\n\n\t\tthis.append(error);\n\n\t\tthis.input = input;\n\n\t\tfragment.appendChild(native);\n\n\t\treturn fragment;\n\t}\n\n\t/**\n\t * Adds an event listener after drawing the checkbox.\n\t */\n\tafterDraw() {\n\t\tthis.internals.setFormValue(this.checked ? this.value : this._valueOff); // Set initial form value based on checked state\n\t\tthis.syncAria();\n\n\t\tif (!this.disabled) {\n\t\t\tthis.input.addEventListener('input', (e) => {\n\t\t\t\tthis.validate();\n\n\t\t\t\tthis.pristine = false;\n\t\t\t\tthis.propagateValidation();\n\n\t\t\t\t// User interaction decides the checked state; value stays as payload\n\t\t\t\tthis.indeterminate = false;\n\t\t\t\tthis.checked = e.target.checked;\n\t\t\t\tthis.syncAria();\n\n\t\t\t\tevent.dispatchCustomEvent(this, 'wje-toggle:input');\n\t\t\t});\n\n\t\t\tthis.input.addEventListener('change', (e) => {\n\t\t\t\tevent.dispatchCustomEvent(this, 'wje-toggle:change');\n\t\t\t});\n\n\t\t\tthis.addEventListener('invalid', (e) => {\n\t\t\t\tthis.invalid = true;\n\t\t\t\tthis.pristine = false;\n\n\t\t\t\tthis.showInvalidMessage();\n\t\t\t});\n\n\t\t\tthis.validate();\n\n\t\t\tif (this.invalid) {\n\t\t\t\tthis.showInvalidMessage();\n\t\t\t}\n\t\t}\n\t}\n\n\t/**\n\t * Syncs ARIA attributes on the host element.\n\t */\n\tsyncAria() {\n\t\tconst checked = this.indeterminate ? 'mixed' : (this.checked ? 'true' : 'false');\n\t\tconst requiredInvalid = this.required && !this.checked;\n\t\tconst invalid = this.invalid || requiredInvalid;\n\t\tconst label = this.label?.trim();\n\t\tthis.setAriaState({\n\t\t\trole: 'checkbox',\n\t\t\tchecked,\n\t\t\tdisabled: this.disabled,\n\t\t\trequired: this.required,\n\t\t\tinvalid,\n\t\t\t...(label ? { label } : {}),\n\t\t});\n\t}\n\n\t/**\n\t * Removes the event listener when the checkbox is disconnected.\n\t */\n\tbeforeDisconnect() {\n\t\tevent.removeElement(this.input);\n\t}\n}\n","import { default as WJElement } from '../wje-element/element.js';\nimport Checkbox from './checkbox.element.js';\n\n// export * from \"./checkbox.element.js\";\nexport default Checkbox;\n\nWJElement.define('wje-checkbox', Checkbox);\n"],"names":["Checkbox","FormAssociatedElement","constructor","super","internalValue","className","this","invalid","pristine","_valueOff","value","input","getAttribute","customErrorDisplay","hasAttribute","validateOnChange","removeAttribute","setAttribute","label","defaultValue","indeterminate","internals","setFormValue","checked","cssStyleSheet","observedAttributes","name","oldValue","newValue","attributeChangedCallback","isChecked","disabled","syncAria","setupAttributes","isShadowRoot","draw","fragment","document","createDocumentFragment","native","createElement","classList","add","type","id","required","htmlFor","innerHTML","errorSlot","error","append","appendChild","afterDraw","addEventListener","e","validate","propagateValidation","target","event","dispatchCustomEvent","showInvalidMessage","requiredInvalid","trim","setAriaState","role","beforeDisconnect","removeElement","WJElement","define"],"mappings":"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"}