wj-elements 0.7.7 → 0.8.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/animations.js +28 -51
- package/dist/animations.js.map +1 -1
- package/dist/base-path.js +19 -31
- package/dist/base-path.js.map +1 -1
- package/dist/custom-elements.json +11504 -11499
- package/dist/dark.css +1 -302
- package/dist/date.js +16 -36
- package/dist/date.js.map +1 -1
- package/dist/element-utils.js +20 -81
- package/dist/element-utils.js.map +1 -1
- package/dist/event.js +49 -165
- package/dist/event.js.map +1 -1
- package/dist/form-associated-element-BjeJn7j8.js +101 -0
- package/dist/{form-associated-element-DEQ4y-jn.js.map → form-associated-element-BjeJn7j8.js.map} +1 -1
- package/dist/icon-DmsqtDpL.js +102 -0
- package/dist/{icon-CReYMzAK.js.map → icon-DmsqtDpL.js.map} +1 -1
- package/dist/light.css +1 -731
- package/dist/localize.js +36 -111
- package/dist/localize.js.map +1 -1
- package/dist/packages/wje-accordion-item/accordion-item.element.d.ts +3 -2
- package/dist/permissions.js +14 -41
- package/dist/permissions.js.map +1 -1
- package/dist/popup.element-CbkhthPP.js +806 -0
- package/dist/{popup.element-CwXvVFK7.js.map → popup.element-CbkhthPP.js.map} +1 -1
- package/dist/router-links-CNsJ-elb.js +105 -0
- package/dist/{router-links-wjqCnncc.js.map → router-links-CNsJ-elb.js.map} +1 -1
- package/dist/skeleton.css +1 -197
- package/dist/styles.css +1 -866
- package/dist/universal-service.js +48 -109
- package/dist/universal-service.js.map +1 -1
- package/dist/utils.js +11 -18
- package/dist/utils.js.map +1 -1
- package/dist/web-types.json +760 -760
- package/dist/wje-accordion-item.js +33 -106
- package/dist/wje-accordion-item.js.map +1 -1
- package/dist/wje-accordion.js +19 -84
- package/dist/wje-accordion.js.map +1 -1
- package/dist/wje-animation.js +37 -4258
- package/dist/wje-animation.js.map +1 -1
- package/dist/wje-aside.js +9 -34
- package/dist/wje-aside.js.map +1 -1
- package/dist/wje-avatar.js +36 -126
- package/dist/wje-avatar.js.map +1 -1
- package/dist/wje-badge.js +10 -52
- package/dist/wje-badge.js.map +1 -1
- package/dist/wje-breadcrumb.js +205 -672
- package/dist/wje-breadcrumb.js.map +1 -1
- package/dist/wje-breadcrumbs.js +177 -633
- package/dist/wje-breadcrumbs.js.map +1 -1
- package/dist/wje-button-group.js +48 -153
- package/dist/wje-button-group.js.map +1 -1
- package/dist/wje-button.js +92 -413
- package/dist/wje-button.js.map +1 -1
- package/dist/wje-card-content.js +7 -30
- package/dist/wje-card-content.js.map +1 -1
- package/dist/wje-card-controls.js +7 -30
- package/dist/wje-card-controls.js.map +1 -1
- package/dist/wje-card-header.js +7 -30
- package/dist/wje-card-header.js.map +1 -1
- package/dist/wje-card-subtitle.js +7 -34
- package/dist/wje-card-subtitle.js.map +1 -1
- package/dist/wje-card-title.js +7 -34
- package/dist/wje-card-title.js.map +1 -1
- package/dist/wje-card.js +15 -71
- package/dist/wje-card.js.map +1 -1
- package/dist/wje-carousel-item.js +12 -56
- package/dist/wje-carousel-item.js.map +1 -1
- package/dist/wje-carousel.js +154 -509
- package/dist/wje-carousel.js.map +1 -1
- package/dist/wje-checkbox.js +50 -227
- package/dist/wje-checkbox.js.map +1 -1
- package/dist/wje-chip.js +43 -160
- package/dist/wje-chip.js.map +1 -1
- package/dist/wje-col.js +7 -20
- package/dist/wje-col.js.map +1 -1
- package/dist/wje-color-picker.js +445 -1464
- package/dist/wje-color-picker.js.map +1 -1
- package/dist/wje-container.js +9 -35
- package/dist/wje-container.js.map +1 -1
- package/dist/wje-copy-button.js +64 -204
- package/dist/wje-copy-button.js.map +1 -1
- package/dist/wje-dialog.js +85 -553
- package/dist/wje-dialog.js.map +1 -1
- package/dist/wje-divider.js +7 -34
- package/dist/wje-divider.js.map +1 -1
- package/dist/wje-dropdown.js +78 -305
- package/dist/wje-dropdown.js.map +1 -1
- package/dist/wje-element.js +191 -700
- package/dist/wje-element.js.map +1 -1
- package/dist/wje-file-upload-item.js +51 -156
- package/dist/wje-file-upload-item.js.map +1 -1
- package/dist/wje-file-upload.js +181 -619
- package/dist/wje-file-upload.js.map +1 -1
- package/dist/wje-footer.js +7 -31
- package/dist/wje-footer.js.map +1 -1
- package/dist/wje-form.js +7 -32
- package/dist/wje-form.js.map +1 -1
- package/dist/wje-format-digital.js +26 -118
- package/dist/wje-format-digital.js.map +1 -1
- package/dist/wje-grid.js +7 -33
- package/dist/wje-grid.js.map +1 -1
- package/dist/wje-header.js +9 -35
- package/dist/wje-header.js.map +1 -1
- package/dist/wje-icon-library.js +12 -18
- package/dist/wje-icon-library.js.map +1 -1
- package/dist/wje-icon-picker.js +65 -320
- package/dist/wje-icon-picker.js.map +1 -1
- package/dist/wje-icon.js +1 -1
- package/dist/wje-img-comparer.js +37 -114
- package/dist/wje-img-comparer.js.map +1 -1
- package/dist/wje-img.js +50 -198
- package/dist/wje-img.js.map +1 -1
- package/dist/wje-infinite-scroll.js +94 -346
- package/dist/wje-infinite-scroll.js.map +1 -1
- package/dist/wje-input-file.js +23 -84
- package/dist/wje-input-file.js.map +1 -1
- package/dist/wje-input.js +78 -392
- package/dist/wje-input.js.map +1 -1
- package/dist/wje-item.js +11 -64
- package/dist/wje-item.js.map +1 -1
- package/dist/wje-kanban.js +124 -401
- package/dist/wje-kanban.js.map +1 -1
- package/dist/wje-label.js +9 -32
- package/dist/wje-label.js.map +1 -1
- package/dist/wje-level-indicator.js +38 -157
- package/dist/wje-level-indicator.js.map +1 -1
- package/dist/wje-list.js +10 -40
- package/dist/wje-list.js.map +1 -1
- package/dist/wje-main.js +7 -31
- package/dist/wje-main.js.map +1 -1
- package/dist/wje-masonry.js +66 -211
- package/dist/wje-masonry.js.map +1 -1
- package/dist/wje-master.js +45 -161
- package/dist/wje-master.js.map +1 -1
- package/dist/wje-menu-button.js +10 -38
- package/dist/wje-menu-button.js.map +1 -1
- package/dist/wje-menu-item.js +127 -577
- package/dist/wje-menu-item.js.map +1 -1
- package/dist/wje-menu-label.js +9 -35
- package/dist/wje-menu-label.js.map +1 -1
- package/dist/wje-menu.js +14 -49
- package/dist/wje-menu.js.map +1 -1
- package/dist/wje-option.js +48 -279
- package/dist/wje-option.js.map +1 -1
- package/dist/wje-options.js +130 -384
- package/dist/wje-options.js.map +1 -1
- package/dist/wje-orgchart-group.js +16 -52
- package/dist/wje-orgchart-group.js.map +1 -1
- package/dist/wje-orgchart-item.js +24 -93
- package/dist/wje-orgchart-item.js.map +1 -1
- package/dist/wje-orgchart.js +18 -68
- package/dist/wje-orgchart.js.map +1 -1
- package/dist/wje-pagination.js +113 -397
- package/dist/wje-pagination.js.map +1 -1
- package/dist/wje-popup.js +3 -3
- package/dist/wje-popup.js.map +1 -1
- package/dist/wje-progress-bar.js +53 -205
- package/dist/wje-progress-bar.js.map +1 -1
- package/dist/wje-qr-code.js +398 -2980
- package/dist/wje-qr-code.js.map +1 -1
- package/dist/wje-radio-group.js +52 -190
- package/dist/wje-radio-group.js.map +1 -1
- package/dist/wje-radio.js +24 -118
- package/dist/wje-radio.js.map +1 -1
- package/dist/wje-rate.js +62 -266
- package/dist/wje-rate.js.map +1 -1
- package/dist/wje-relative-time.js +24 -99
- package/dist/wje-relative-time.js.map +1 -1
- package/dist/wje-reorder-dropzone.js +9 -31
- package/dist/wje-reorder-dropzone.js.map +1 -1
- package/dist/wje-reorder-handle.js +67 -204
- package/dist/wje-reorder-handle.js.map +1 -1
- package/dist/wje-reorder-item.js +14 -44
- package/dist/wje-reorder-item.js.map +1 -1
- package/dist/wje-reorder.js +61 -246
- package/dist/wje-reorder.js.map +1 -1
- package/dist/wje-route.js +6 -24
- package/dist/wje-route.js.map +1 -1
- package/dist/wje-router-link.js +11 -39
- package/dist/wje-router-link.js.map +1 -1
- package/dist/wje-router-outlet.js +76 -172
- package/dist/wje-router-outlet.js.map +1 -1
- package/dist/wje-routerx.js +537 -1331
- package/dist/wje-routerx.js.map +1 -1
- package/dist/wje-row.js +9 -31
- package/dist/wje-row.js.map +1 -1
- package/dist/wje-select.js +326 -1152
- package/dist/wje-select.js.map +1 -1
- package/dist/wje-slider.js +44 -225
- package/dist/wje-slider.js.map +1 -1
- package/dist/wje-sliding-container.js +295 -1319
- package/dist/wje-sliding-container.js.map +1 -1
- package/dist/wje-split-view.js +35 -121
- package/dist/wje-split-view.js.map +1 -1
- package/dist/wje-status.js +14 -45
- package/dist/wje-status.js.map +1 -1
- package/dist/wje-step.js +9 -32
- package/dist/wje-step.js.map +1 -1
- package/dist/wje-stepper.js +109 -357
- package/dist/wje-stepper.js.map +1 -1
- package/dist/wje-store.js +67 -360
- package/dist/wje-store.js.map +1 -1
- package/dist/wje-tab-group.js +85 -314
- package/dist/wje-tab-group.js.map +1 -1
- package/dist/wje-tab-panel.js +7 -28
- package/dist/wje-tab-panel.js.map +1 -1
- package/dist/wje-tab.js +21 -198
- package/dist/wje-tab.js.map +1 -1
- package/dist/wje-textarea.js +64 -264
- package/dist/wje-textarea.js.map +1 -1
- package/dist/wje-thumbnail.js +10 -51
- package/dist/wje-thumbnail.js.map +1 -1
- package/dist/wje-toast.js +127 -632
- package/dist/wje-toast.js.map +1 -1
- package/dist/wje-toggle.js +52 -177
- package/dist/wje-toggle.js.map +1 -1
- package/dist/wje-toolbar-action.js +128 -456
- package/dist/wje-toolbar-action.js.map +1 -1
- package/dist/wje-toolbar.js +75 -270
- package/dist/wje-toolbar.js.map +1 -1
- package/dist/wje-tooltip.js +50 -161
- package/dist/wje-tooltip.js.map +1 -1
- package/dist/wje-tree-item.js +70 -301
- package/dist/wje-tree-item.js.map +1 -1
- package/dist/wje-tree.js +145 -489
- package/dist/wje-tree.js.map +1 -1
- package/dist/wje-visually-hidden.js +7 -34
- package/dist/wje-visually-hidden.js.map +1 -1
- package/package.json +3 -2
- package/dist/form-associated-element-DEQ4y-jn.js +0 -245
- package/dist/icon-CReYMzAK.js +0 -245
- package/dist/popup.element-CwXvVFK7.js +0 -2133
- package/dist/router-links-wjqCnncc.js +0 -156
package/dist/wje-carousel.js.map
CHANGED
|
@@ -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":"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"}
|
package/dist/wje-checkbox.js
CHANGED
|
@@ -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
|
|
12
|
-
import
|
|
13
|
-
import { F as
|
|
14
|
-
import { event } from "./event.js";
|
|
15
|
-
|
|
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,
|
|
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
|
-
|
|
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,
|
|
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
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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
|
|
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(
|
|
64
|
+
attributeChangedCallback(e2, t2, i2) {
|
|
158
65
|
var _a;
|
|
159
|
-
(_a = super.attributeChangedCallback) == null ? void 0 : _a.call(this,
|
|
160
|
-
|
|
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
|
-
|
|
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
|
|
202
|
-
|
|
203
|
-
|
|
204
|
-
|
|
205
|
-
let
|
|
206
|
-
|
|
207
|
-
|
|
208
|
-
|
|
209
|
-
|
|
210
|
-
|
|
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
|
-
|
|
235
|
-
|
|
236
|
-
|
|
237
|
-
|
|
238
|
-
|
|
239
|
-
|
|
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
|
|
265
|
-
|
|
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
|
-
|
|
104
|
+
i.removeElement(this.input);
|
|
282
105
|
}
|
|
283
106
|
}
|
|
284
|
-
|
|
285
|
-
|
|
107
|
+
_e = new WeakMap();
|
|
108
|
+
e.define("wje-checkbox", o);
|
|
286
109
|
export {
|
|
287
|
-
|
|
110
|
+
o as default
|
|
288
111
|
};
|
|
289
112
|
//# sourceMappingURL=wje-checkbox.js.map
|
package/dist/wje-checkbox.js.map
CHANGED
|
@@ -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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"}
|