@leaflink/stash 50.4.0 → 50.5.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/Carousel.js +321 -324
- package/dist/Carousel.js.map +1 -1
- package/dist/Carousel.vue.d.ts +4 -0
- package/dist/DatePicker.vue.d.ts +1 -1
- package/dist/Filters.vue.d.ts +9 -9
- package/dist/Image.js +6 -166
- package/dist/Image.js.map +1 -1
- package/dist/Image.vue_vue_type_script_setup_true_lang-YUNunj71.js +169 -0
- package/dist/Image.vue_vue_type_script_setup_true_lang-YUNunj71.js.map +1 -0
- package/dist/InlineEdit.vue.d.ts +1 -1
- package/dist/ListView.vue.d.ts +9 -9
- package/dist/Module.vue.d.ts +1 -1
- package/dist/Thumbnail.js +91 -0
- package/dist/Thumbnail.js.map +1 -0
- package/dist/Thumbnail.vue.d.ts +63 -0
- package/dist/ThumbnailEmpty.js +33 -0
- package/dist/ThumbnailEmpty.js.map +1 -0
- package/dist/ThumbnailEmpty.vue.d.ts +9 -0
- package/dist/ThumbnailGroup.js +73 -0
- package/dist/ThumbnailGroup.js.map +1 -0
- package/dist/ThumbnailGroup.keys-D6WL5xQ5.js +16 -0
- package/dist/ThumbnailGroup.keys-D6WL5xQ5.js.map +1 -0
- package/dist/ThumbnailGroup.vue.d.ts +191 -0
- package/dist/Tooltip.js +6 -6
- package/dist/components.css +1 -1
- package/dist/{index-Ck3Dl09q.js → index-Bbc2pg2X.js} +3 -3
- package/dist/index-Bbc2pg2X.js.map +1 -0
- package/dist/locale.js +16 -12
- package/dist/locale.js.map +1 -1
- package/dist/useSortable.js +1 -1
- package/package.json +2 -1
- package/dist/index-Ck3Dl09q.js.map +0 -1
package/dist/Carousel.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Carousel.js","sources":["../node_modules/vue3-carousel/dist/carousel.es.js","../src/components/Carousel/Carousel.vue"],"sourcesContent":["/**\n * Vue 3 Carousel 0.3.4\n * (c) 2024\n * @license MIT\n */\nimport { Fragment, defineComponent, inject, reactive, ref, h, provide, onMounted, nextTick, onUnmounted, computed, watch, cloneVNode } from 'vue';\n\nconst defaultConfigs = {\n itemsToShow: 1,\n itemsToScroll: 1,\n modelValue: 0,\n transition: 300,\n autoplay: 0,\n snapAlign: 'center',\n wrapAround: false,\n throttle: 16,\n pauseAutoplayOnHover: false,\n mouseDrag: true,\n touchDrag: true,\n dir: 'ltr',\n breakpoints: undefined,\n i18n: {\n ariaNextSlide: 'Navigate to next slide',\n ariaPreviousSlide: 'Navigate to previous slide',\n ariaNavigateToSlide: 'Navigate to slide {slideNumber}',\n ariaGallery: 'Gallery',\n itemXofY: 'Item {currentSlide} of {slidesCount}',\n iconArrowUp: 'Arrow pointing upwards',\n iconArrowDown: 'Arrow pointing downwards',\n iconArrowRight: 'Arrow pointing to the right',\n iconArrowLeft: 'Arrow pointing to the left',\n },\n};\n\nconst carouselProps = {\n // count of items to showed per view\n itemsToShow: {\n default: defaultConfigs.itemsToShow,\n type: Number,\n },\n // count of items to be scrolled\n itemsToScroll: {\n default: defaultConfigs.itemsToScroll,\n type: Number,\n },\n // control infinite scrolling mode\n wrapAround: {\n default: defaultConfigs.wrapAround,\n type: Boolean,\n },\n // control max drag\n throttle: {\n default: defaultConfigs.throttle,\n type: Number,\n },\n // control snap position alignment\n snapAlign: {\n default: defaultConfigs.snapAlign,\n validator(value) {\n // The value must match one of these strings\n return ['start', 'end', 'center', 'center-even', 'center-odd'].includes(value);\n },\n },\n // sliding transition time in ms\n transition: {\n default: defaultConfigs.transition,\n type: Number,\n },\n // an object to store breakpoints\n breakpoints: {\n default: defaultConfigs.breakpoints,\n type: Object,\n },\n // time to auto advance slides in ms\n autoplay: {\n default: defaultConfigs.autoplay,\n type: Number,\n },\n // pause autoplay when mouse hover over the carousel\n pauseAutoplayOnHover: {\n default: defaultConfigs.pauseAutoplayOnHover,\n type: Boolean,\n },\n // slide number number of initial slide\n modelValue: {\n default: undefined,\n type: Number,\n },\n // toggle mouse dragging.\n mouseDrag: {\n default: defaultConfigs.mouseDrag,\n type: Boolean,\n },\n // toggle mouse dragging.\n touchDrag: {\n default: defaultConfigs.touchDrag,\n type: Boolean,\n },\n // control snap position alignment\n dir: {\n default: defaultConfigs.dir,\n validator(value) {\n // The value must match one of these strings\n return ['rtl', 'ltr'].includes(value);\n },\n },\n // aria-labels and additional text labels\n i18n: {\n default: defaultConfigs.i18n,\n type: Object,\n },\n // an object to pass all settings\n settings: {\n default() {\n return {};\n },\n type: Object,\n },\n};\n\nfunction getMaxSlideIndex({ config, slidesCount }) {\n const { snapAlign, wrapAround, itemsToShow = 1 } = config;\n if (wrapAround) {\n return Math.max(slidesCount - 1, 0);\n }\n let output;\n switch (snapAlign) {\n case 'start':\n output = slidesCount - itemsToShow;\n break;\n case 'end':\n output = slidesCount - 1;\n break;\n case 'center':\n case 'center-odd':\n output = slidesCount - Math.ceil((itemsToShow - 0.5) / 2);\n break;\n case 'center-even':\n output = slidesCount - Math.ceil(itemsToShow / 2);\n break;\n default:\n output = 0;\n break;\n }\n return Math.max(output, 0);\n}\n\nfunction getMinSlideIndex({ config, slidesCount }) {\n const { wrapAround, snapAlign, itemsToShow = 1 } = config;\n let output = 0;\n if (wrapAround || itemsToShow > slidesCount) {\n return output;\n }\n switch (snapAlign) {\n case 'start':\n output = 0;\n break;\n case 'end':\n output = itemsToShow - 1;\n break;\n case 'center':\n case 'center-odd':\n output = Math.floor((itemsToShow - 1) / 2);\n break;\n case 'center-even':\n output = Math.floor((itemsToShow - 2) / 2);\n break;\n default:\n output = 0;\n break;\n }\n return output;\n}\n\nfunction getNumberInRange({ val, max, min }) {\n if (max < min) {\n return val;\n }\n return Math.min(Math.max(val, min), max);\n}\n\nfunction getSlidesToScroll({ config, currentSlide, slidesCount }) {\n const { snapAlign, wrapAround, itemsToShow = 1 } = config;\n let output = currentSlide;\n switch (snapAlign) {\n case 'center':\n case 'center-odd':\n output -= (itemsToShow - 1) / 2;\n break;\n case 'center-even':\n output -= (itemsToShow - 2) / 2;\n break;\n case 'end':\n output -= itemsToShow - 1;\n break;\n }\n if (wrapAround) {\n return output;\n }\n return getNumberInRange({\n val: output,\n max: slidesCount - itemsToShow,\n min: 0,\n });\n}\n\nfunction getSlidesVNodes(vNode) {\n if (!vNode)\n return [];\n return vNode.reduce((acc, node) => {\n var _a;\n if (node.type === Fragment) {\n return [...acc, ...getSlidesVNodes(node.children)];\n }\n if (((_a = node.type) === null || _a === void 0 ? void 0 : _a.name) === 'CarouselSlide') {\n return [...acc, node];\n }\n return acc;\n }, []);\n}\n\nfunction mapNumberToRange({ val, max, min = 0 }) {\n if (val > max) {\n return mapNumberToRange({ val: val - (max + 1), max, min });\n }\n if (val < min) {\n return mapNumberToRange({ val: val + (max + 1), max, min });\n }\n return val;\n}\n\n/**\n * return a throttle version of the function\n * Throttling\n *\n */\n// eslint-disable-next-line no-unused-vars\nfunction throttle(fn, limit) {\n let inThrottle;\n if (!limit) {\n return fn;\n }\n return function (...args) {\n const self = this;\n if (!inThrottle) {\n fn.apply(self, args);\n inThrottle = true;\n setTimeout(() => (inThrottle = false), limit);\n }\n };\n}\n\n/**\n * return a debounced version of the function\n * @param fn\n * @param delay\n */\n// eslint-disable-next-line no-unused-vars\nfunction debounce(fn, delay) {\n let timerId;\n return function (...args) {\n if (timerId) {\n clearTimeout(timerId);\n }\n timerId = setTimeout(() => {\n fn(...args);\n timerId = null;\n }, delay);\n };\n}\n\nfunction i18nFormatter(string = '', values = {}) {\n return Object.entries(values).reduce((acc, [key, value]) => acc.replace(`{${key}}`, String(value)), string);\n}\n\nvar ARIAComponent = defineComponent({\n name: 'ARIA',\n setup() {\n const config = inject('config', reactive(Object.assign({}, defaultConfigs)));\n const currentSlide = inject('currentSlide', ref(0));\n const slidesCount = inject('slidesCount', ref(0));\n return () => h('div', {\n class: ['carousel__liveregion', 'carousel__sr-only'],\n 'aria-live': 'polite',\n 'aria-atomic': 'true',\n }, i18nFormatter(config.i18n['itemXofY'], {\n currentSlide: currentSlide.value + 1,\n slidesCount: slidesCount.value,\n }));\n },\n});\n\nvar Carousel = defineComponent({\n name: 'Carousel',\n props: carouselProps,\n setup(props, { slots, emit, expose }) {\n var _a;\n const root = ref(null);\n const slides = ref([]);\n const slideWidth = ref(0);\n const slidesCount = ref(0);\n // current config\n const config = reactive(Object.assign({}, defaultConfigs));\n // default carousel configs\n let __defaultConfig = Object.assign({}, defaultConfigs);\n // breakpoints configs\n let breakpoints;\n // slides\n const currentSlideIndex = ref((_a = props.modelValue) !== null && _a !== void 0 ? _a : 0);\n const prevSlideIndex = ref(0);\n const middleSlideIndex = ref(0);\n const maxSlideIndex = ref(0);\n const minSlideIndex = ref(0);\n let autoplayTimer;\n let transitionTimer;\n provide('config', config);\n provide('slidesCount', slidesCount);\n provide('currentSlide', currentSlideIndex);\n provide('maxSlide', maxSlideIndex);\n provide('minSlide', minSlideIndex);\n provide('slideWidth', slideWidth);\n /**\n * Configs\n */\n function initDefaultConfigs() {\n breakpoints = Object.assign({}, props.breakpoints);\n __defaultConfig = Object.assign(Object.assign(Object.assign({}, __defaultConfig), props), { i18n: Object.assign(Object.assign({}, __defaultConfig.i18n), props.i18n), breakpoints: undefined });\n bindConfigs(__defaultConfig);\n }\n function updateBreakpointsConfigs() {\n if (!breakpoints || !Object.keys(breakpoints).length)\n return;\n const breakpointsArray = Object.keys(breakpoints)\n .map((key) => Number(key))\n .sort((a, b) => +b - +a);\n let newConfig = Object.assign({}, __defaultConfig);\n breakpointsArray.some((breakpoint) => {\n const isMatched = window.matchMedia(`(min-width: ${breakpoint}px)`).matches;\n if (isMatched) {\n newConfig = Object.assign(Object.assign({}, newConfig), breakpoints[breakpoint]);\n }\n return isMatched;\n });\n bindConfigs(newConfig);\n }\n function bindConfigs(newConfig) {\n // eslint-disable-next-line @typescript-eslint/ban-ts-comment\n //@ts-ignore\n Object.entries(newConfig).forEach(([key, val]) => (config[key] = val));\n }\n const handleWindowResize = debounce(() => {\n updateBreakpointsConfigs();\n updateSlidesData();\n updateSlideWidth();\n }, 16);\n /**\n * Setup functions\n */\n function updateSlideWidth() {\n if (!root.value)\n return;\n const rect = root.value.getBoundingClientRect();\n slideWidth.value = rect.width / config.itemsToShow;\n }\n function updateSlidesData() {\n if (slidesCount.value <= 0)\n return;\n middleSlideIndex.value = Math.ceil((slidesCount.value - 1) / 2);\n maxSlideIndex.value = getMaxSlideIndex({ config, slidesCount: slidesCount.value });\n minSlideIndex.value = getMinSlideIndex({ config, slidesCount: slidesCount.value });\n if (!config.wrapAround) {\n currentSlideIndex.value = getNumberInRange({\n val: currentSlideIndex.value,\n max: maxSlideIndex.value,\n min: minSlideIndex.value,\n });\n }\n }\n onMounted(() => {\n nextTick(() => updateSlideWidth());\n // Overcome some edge cases\n setTimeout(() => updateSlideWidth(), 1000);\n updateBreakpointsConfigs();\n initAutoplay();\n window.addEventListener('resize', handleWindowResize, { passive: true });\n emit('init');\n });\n onUnmounted(() => {\n if (transitionTimer) {\n clearTimeout(transitionTimer);\n }\n if (autoplayTimer) {\n clearInterval(autoplayTimer);\n }\n window.removeEventListener('resize', handleWindowResize, {\n passive: true,\n });\n });\n /**\n * Carousel Event listeners\n */\n let isTouch = false;\n const startPosition = { x: 0, y: 0 };\n const endPosition = { x: 0, y: 0 };\n const dragged = reactive({ x: 0, y: 0 });\n const isHover = ref(false);\n const isDragging = ref(false);\n const handleMouseEnter = () => {\n isHover.value = true;\n };\n const handleMouseLeave = () => {\n isHover.value = false;\n };\n function handleDragStart(event) {\n if (['INPUT', 'TEXTAREA', 'SELECT'].includes(event.target.tagName)) {\n return;\n }\n isTouch = event.type === 'touchstart';\n if (!isTouch) {\n event.preventDefault();\n }\n if ((!isTouch && event.button !== 0) || isSliding.value) {\n return;\n }\n startPosition.x = isTouch ? event.touches[0].clientX : event.clientX;\n startPosition.y = isTouch ? event.touches[0].clientY : event.clientY;\n document.addEventListener(isTouch ? 'touchmove' : 'mousemove', handleDragging, true);\n document.addEventListener(isTouch ? 'touchend' : 'mouseup', handleDragEnd, true);\n }\n const handleDragging = throttle((event) => {\n isDragging.value = true;\n endPosition.x = isTouch ? event.touches[0].clientX : event.clientX;\n endPosition.y = isTouch ? event.touches[0].clientY : event.clientY;\n const deltaX = endPosition.x - startPosition.x;\n const deltaY = endPosition.y - startPosition.y;\n dragged.y = deltaY;\n dragged.x = deltaX;\n }, config.throttle);\n function handleDragEnd() {\n const direction = config.dir === 'rtl' ? -1 : 1;\n const tolerance = Math.sign(dragged.x) * 0.4;\n const draggedSlides = Math.round(dragged.x / slideWidth.value + tolerance) * direction;\n // Prevent clicking if there is clicked slides\n if (draggedSlides && !isTouch) {\n const captureClick = (e) => {\n window.removeEventListener('click', captureClick, true);\n };\n window.addEventListener('click', captureClick, true);\n }\n slideTo(currentSlideIndex.value - draggedSlides);\n dragged.x = 0;\n dragged.y = 0;\n isDragging.value = false;\n document.removeEventListener(isTouch ? 'touchmove' : 'mousemove', handleDragging, true);\n document.removeEventListener(isTouch ? 'touchend' : 'mouseup', handleDragEnd, true);\n }\n /**\n * Autoplay\n */\n function initAutoplay() {\n if (!config.autoplay || config.autoplay <= 0) {\n return;\n }\n autoplayTimer = setInterval(() => {\n if (config.pauseAutoplayOnHover && isHover.value) {\n return;\n }\n next();\n }, config.autoplay);\n }\n function resetAutoplay() {\n if (autoplayTimer) {\n clearInterval(autoplayTimer);\n autoplayTimer = null;\n }\n initAutoplay();\n }\n /**\n * Navigation function\n */\n const isSliding = ref(false);\n function slideTo(slideIndex) {\n const currentVal = config.wrapAround\n ? slideIndex\n : getNumberInRange({\n val: slideIndex,\n max: maxSlideIndex.value,\n min: minSlideIndex.value,\n });\n if (currentSlideIndex.value === currentVal || isSliding.value) {\n return;\n }\n emit('slide-start', {\n slidingToIndex: slideIndex,\n currentSlideIndex: currentSlideIndex.value,\n prevSlideIndex: prevSlideIndex.value,\n slidesCount: slidesCount.value,\n });\n isSliding.value = true;\n prevSlideIndex.value = currentSlideIndex.value;\n currentSlideIndex.value = currentVal;\n transitionTimer = setTimeout(() => {\n if (config.wrapAround) {\n const mappedNumber = mapNumberToRange({\n val: currentVal,\n max: maxSlideIndex.value,\n min: 0,\n });\n if (mappedNumber !== currentSlideIndex.value) {\n currentSlideIndex.value = mappedNumber;\n emit('loop', {\n currentSlideIndex: currentSlideIndex.value,\n slidingToIndex: slideIndex,\n });\n }\n }\n emit('update:modelValue', currentSlideIndex.value);\n emit('slide-end', {\n currentSlideIndex: currentSlideIndex.value,\n prevSlideIndex: prevSlideIndex.value,\n slidesCount: slidesCount.value,\n });\n isSliding.value = false;\n resetAutoplay();\n }, config.transition);\n }\n function next() {\n slideTo(currentSlideIndex.value + config.itemsToScroll);\n }\n function prev() {\n slideTo(currentSlideIndex.value - config.itemsToScroll);\n }\n const nav = { slideTo, next, prev };\n provide('nav', nav);\n provide('isSliding', isSliding);\n /**\n * Track style\n */\n const slidesToScroll = computed(() => getSlidesToScroll({\n config,\n currentSlide: currentSlideIndex.value,\n slidesCount: slidesCount.value,\n }));\n provide('slidesToScroll', slidesToScroll);\n const trackStyle = computed(() => {\n const direction = config.dir === 'rtl' ? -1 : 1;\n const xScroll = slidesToScroll.value * slideWidth.value * direction;\n return {\n transform: `translateX(${dragged.x - xScroll}px)`,\n transition: `${isSliding.value ? config.transition : 0}ms`,\n margin: config.wrapAround ? `0 -${slidesCount.value * slideWidth.value}px` : '',\n width: `100%`,\n };\n });\n function restartCarousel() {\n initDefaultConfigs();\n updateBreakpointsConfigs();\n updateSlidesData();\n updateSlideWidth();\n resetAutoplay();\n }\n // Update the carousel on props change\n Object.keys(carouselProps).forEach((prop) => {\n if (['modelValue'].includes(prop))\n return;\n watch(() => props[prop], restartCarousel);\n });\n // Handle changing v-model value\n watch(() => props['modelValue'], (val) => {\n if (val === currentSlideIndex.value) {\n return;\n }\n slideTo(Number(val));\n });\n // Handel when slides added/removed\n watch(slidesCount, updateSlidesData);\n // Init carousel\n emit('before-init');\n initDefaultConfigs();\n const data = {\n config,\n slidesCount,\n slideWidth,\n next,\n prev,\n slideTo,\n currentSlide: currentSlideIndex,\n maxSlide: maxSlideIndex,\n minSlide: minSlideIndex,\n middleSlide: middleSlideIndex,\n };\n expose({\n updateBreakpointsConfigs,\n updateSlidesData,\n updateSlideWidth,\n initDefaultConfigs,\n restartCarousel,\n slideTo,\n next,\n prev,\n nav,\n data,\n });\n const slotSlides = slots.default || slots.slides;\n const slotAddons = slots.addons;\n const slotsProps = reactive(data);\n return () => {\n const slidesElements = getSlidesVNodes(slotSlides === null || slotSlides === void 0 ? void 0 : slotSlides(slotsProps));\n const addonsElements = (slotAddons === null || slotAddons === void 0 ? void 0 : slotAddons(slotsProps)) || [];\n slidesElements.forEach((el, index) => (el.props.index = index));\n let output = slidesElements;\n if (config.wrapAround) {\n const slidesBefore = slidesElements.map((el, index) => cloneVNode(el, {\n index: -slidesElements.length + index,\n isClone: true,\n key: `clone-before-${index}`,\n }));\n const slidesAfter = slidesElements.map((el, index) => cloneVNode(el, {\n index: slidesElements.length + index,\n isClone: true,\n key: `clone-after-${index}`,\n }));\n output = [...slidesBefore, ...slidesElements, ...slidesAfter];\n }\n slides.value = slidesElements;\n slidesCount.value = Math.max(slidesElements.length, 1);\n const trackEl = h('ol', {\n class: 'carousel__track',\n style: trackStyle.value,\n onMousedownCapture: config.mouseDrag ? handleDragStart : null,\n onTouchstartPassiveCapture: config.touchDrag ? handleDragStart : null,\n }, output);\n const viewPortEl = h('div', { class: 'carousel__viewport' }, trackEl);\n return h('section', {\n ref: root,\n class: {\n carousel: true,\n 'is-sliding': isSliding.value,\n 'is-dragging': isDragging.value,\n 'is-hover': isHover.value,\n 'carousel--rtl': config.dir === 'rtl',\n },\n dir: config.dir,\n 'aria-label': config.i18n['ariaGallery'],\n tabindex: '0',\n onMouseenter: handleMouseEnter,\n onMouseleave: handleMouseLeave,\n }, [viewPortEl, addonsElements, h(ARIAComponent)]);\n };\n },\n});\n\nvar IconName;\n(function (IconName) {\n IconName[\"arrowUp\"] = \"arrowUp\";\n IconName[\"arrowDown\"] = \"arrowDown\";\n IconName[\"arrowRight\"] = \"arrowRight\";\n IconName[\"arrowLeft\"] = \"arrowLeft\";\n})(IconName || (IconName = {}));\nconst icons = {\n arrowUp: 'M7.41 15.41L12 10.83l4.59 4.58L18 14l-6-6-6 6z',\n arrowDown: 'M7.41 8.59L12 13.17l4.59-4.58L18 10l-6 6-6-6 1.41-1.41z',\n arrowRight: 'M8.59 16.59L13.17 12 8.59 7.41 10 6l6 6-6 6-1.41-1.41z',\n arrowLeft: 'M15.41 16.59L10.83 12l4.58-4.59L14 6l-6 6 6 6 1.41-1.41z',\n};\n\nfunction isIconName(candidate) {\n return candidate in IconName;\n}\nconst Icon = (props) => {\n const config = inject('config', reactive(Object.assign({}, defaultConfigs)));\n const iconName = String(props.name);\n const iconI18n = `icon${iconName.charAt(0).toUpperCase() + iconName.slice(1)}`;\n if (!iconName || typeof iconName !== 'string' || !isIconName(iconName)) {\n return;\n }\n const path = icons[iconName];\n const pathEl = h('path', { d: path });\n const iconTitle = config.i18n[iconI18n] || props.title || iconName;\n const titleEl = h('title', iconTitle);\n return h('svg', {\n class: 'carousel__icon',\n viewBox: '0 0 24 24',\n role: 'img',\n 'aria-label': iconTitle,\n }, [titleEl, pathEl]);\n};\nIcon.props = { name: String, title: String };\n\nconst Navigation = (props, { slots, attrs }) => {\n const { next: slotNext, prev: slotPrev } = slots || {};\n const config = inject('config', reactive(Object.assign({}, defaultConfigs)));\n const maxSlide = inject('maxSlide', ref(1));\n const minSlide = inject('minSlide', ref(1));\n const currentSlide = inject('currentSlide', ref(1));\n const nav = inject('nav', {});\n const { dir, wrapAround, i18n } = config;\n const isRTL = dir === 'rtl';\n const prevButton = h('button', {\n type: 'button',\n class: [\n 'carousel__prev',\n !wrapAround && currentSlide.value <= minSlide.value && 'carousel__prev--disabled',\n attrs === null || attrs === void 0 ? void 0 : attrs.class,\n ],\n 'aria-label': i18n['ariaPreviousSlide'],\n onClick: nav.prev,\n }, (slotPrev === null || slotPrev === void 0 ? void 0 : slotPrev()) || h(Icon, { name: isRTL ? 'arrowRight' : 'arrowLeft' }));\n const nextButton = h('button', {\n type: 'button',\n class: [\n 'carousel__next',\n !wrapAround && currentSlide.value >= maxSlide.value && 'carousel__next--disabled',\n attrs === null || attrs === void 0 ? void 0 : attrs.class,\n ],\n 'aria-label': i18n['ariaNextSlide'],\n onClick: nav.next,\n }, (slotNext === null || slotNext === void 0 ? void 0 : slotNext()) || h(Icon, { name: isRTL ? 'arrowLeft' : 'arrowRight' }));\n return [prevButton, nextButton];\n};\n\nconst Pagination = () => {\n const config = inject('config', reactive(Object.assign({}, defaultConfigs)));\n const maxSlide = inject('maxSlide', ref(1));\n const minSlide = inject('minSlide', ref(1));\n const currentSlide = inject('currentSlide', ref(1));\n const nav = inject('nav', {});\n const isActive = (slide) => mapNumberToRange({\n val: currentSlide.value,\n max: maxSlide.value,\n min: 0,\n }) === slide;\n const children = [];\n for (let slide = minSlide.value; slide < maxSlide.value + 1; slide++) {\n const button = h('button', {\n type: 'button',\n class: {\n 'carousel__pagination-button': true,\n 'carousel__pagination-button--active': isActive(slide),\n },\n 'aria-label': i18nFormatter(config.i18n['ariaNavigateToSlide'], {\n slideNumber: slide + 1,\n }),\n onClick: () => nav.slideTo(slide),\n });\n const item = h('li', { class: 'carousel__pagination-item', key: slide }, button);\n children.push(item);\n }\n return h('ol', { class: 'carousel__pagination' }, children);\n};\n\nvar Slide = defineComponent({\n name: 'CarouselSlide',\n props: {\n index: {\n type: Number,\n default: 1,\n },\n isClone: {\n type: Boolean,\n default: false,\n },\n },\n setup(props, { slots }) {\n const config = inject('config', reactive(Object.assign({}, defaultConfigs)));\n const currentSlide = inject('currentSlide', ref(0));\n const slidesToScroll = inject('slidesToScroll', ref(0));\n const isSliding = inject('isSliding', ref(false));\n const isActive = computed(() => props.index === currentSlide.value);\n const isPrev = computed(() => props.index === currentSlide.value - 1);\n const isNext = computed(() => props.index === currentSlide.value + 1);\n const isVisible = computed(() => {\n const min = Math.floor(slidesToScroll.value);\n const max = Math.ceil(slidesToScroll.value + config.itemsToShow - 1);\n return props.index >= min && props.index <= max;\n });\n return () => {\n var _a;\n return h('li', {\n style: { width: `${100 / config.itemsToShow}%` },\n class: {\n carousel__slide: true,\n 'carousel__slide--clone': props.isClone,\n 'carousel__slide--visible': isVisible.value,\n 'carousel__slide--active': isActive.value,\n 'carousel__slide--prev': isPrev.value,\n 'carousel__slide--next': isNext.value,\n 'carousel__slide--sliding': isSliding.value,\n },\n 'aria-hidden': !isVisible.value,\n }, (_a = slots.default) === null || _a === void 0 ? void 0 : _a.call(slots, {\n isActive: isActive.value,\n isClone: props.isClone,\n isPrev: isPrev.value,\n isNext: isNext.value,\n isSliding: isSliding.value,\n isVisible: isVisible.value\n }));\n };\n },\n});\n\nexport { Carousel, Icon, Navigation, Pagination, Slide };\n","<script lang=\"ts\">\n export * from './Carousel.types';\n</script>\n\n<script setup lang=\"ts\" generic=\"Slide extends CarouselSlide\">\n import 'vue3-carousel/dist/carousel.css';\n import { ref, useAttrs, useCssModule } from 'vue';\n import { Carousel, Navigation, Slide } from 'vue3-carousel';\n\n import { t } from '../../locale';\n import { CarouselInstanceRef, CarouselSlide } from './Carousel.types';\n\n defineOptions({\n inheritAttrs: false,\n });\n\n interface CarouselProps {\n /**\n * The slides to display in the carousel.\n */\n slides: Slide[];\n\n /**\n * Time, in ms, before slides will automatically transition.\n * If not specified, slides are static until manually transitioned.\n */\n autoplayInterval?: number;\n\n /**\n * Hide the navigation buttons\n */\n hideNavigation?: boolean;\n\n /**\n * Hide the pagination dots/tile\n */\n hidePagination?: boolean;\n\n /**\n * Number of slides to be scrolled at a time\n */\n itemsToScroll?: number;\n\n /**\n * Number of items to show on each slide\n */\n itemsToShow?: number;\n\n /**\n * Whether the carousel should loop back to the first slide after the last slide.\n */\n loop?: boolean;\n\n /**\n * The type of pagination to display.\n */\n pagination?: 'tile' | 'dot';\n\n /**\n * The radius of the pagination tiles.\n */\n paginationTileRadius?: 'standard' | 'full';\n\n /**\n * Prevents slides from automatically transitioning when hovering over the slide.\n */\n pauseAutoplayOnHover?: boolean;\n\n /**\n * Whether to round the borders of the slides.\n */\n roundBorders?: boolean;\n\n /**\n * Whether to show the pagination dots on all screen sizes.\n */\n staticPaginationDots?: boolean;\n }\n\n const props = withDefaults(defineProps<CarouselProps>(), {\n slides: () => [],\n autoplayInterval: 0,\n hideNavigation: false,\n hidePagination: false,\n itemsToScroll: 1,\n itemsToShow: 1,\n loop: false,\n pagination: 'tile',\n paginationTileRadius: 'standard',\n pauseAutoplayOnHover: false,\n roundBorders: false,\n staticPaginationDots: false,\n });\n\n const attrs = useAttrs();\n const classes = useCssModule();\n const carouselRef = ref<CarouselInstanceRef>();\n\n /**\n * Expose the carousel's next and prev methods to the parent component\n */\n defineExpose({\n next: () => carouselRef.value?.next(),\n prev: () => carouselRef.value?.prev(),\n });\n\n const emit = defineEmits<{\n (e: 'click', slide: Slide): void;\n (e: 'transition', slide: Slide): void;\n (e: 'transition:multi', slides: Slide[]): void;\n }>();\n\n const currentIndex = ref(0);\n\n const onCarouselInit = () => {\n // carousel does not fire a transition event to the first slide when mounted.\n // subsequent transition events are fired in the slide-end event handler.\n onSlideTransition();\n };\n\n const onSlideClick = () => {\n emit('click', props.slides[currentIndex.value]);\n };\n\n const onSlideTransition = () => {\n // by default only one slide is displayed at a time for each\n // page in the carousel. In this case, we will only emit a\n // transition event with a single slide object.\n if (props.itemsToShow === 1) {\n emit('transition', props.slides[currentIndex.value]);\n return;\n }\n\n // otherwise, we will emit a transition event with an array of\n // slides currently in view on the current page of the carousel.\n const slidesInView = props.slides.slice(currentIndex.value, currentIndex.value + props.itemsToShow);\n\n emit('transition:multi', slidesInView);\n return;\n };\n</script>\n\n<template>\n <Carousel\n ref=\"carouselRef\"\n v-model=\"currentIndex\"\n aria-live=\"polite\"\n aria-roledescription=\"carousel\"\n class=\"stash-carousel tw-mb-6\"\n data-test=\"stash-carousel\"\n :autoplay=\"autoplayInterval\"\n :class=\"classes.root\"\n :i18n=\"{\n ariaNextSlide: t('ll.next'),\n ariaPreviousSlide: t('ll.previous'),\n iconArrowLeft: t('ll.previous'),\n iconArrowRight: t('ll.next'),\n }\"\n :items-to-scroll=\"props.itemsToScroll\"\n :items-to-show=\"props.itemsToShow\"\n :pause-autoplay-on-hover=\"pauseAutoplayOnHover\"\n :wrap-around=\"props.loop\"\n v-bind=\"attrs\"\n @init=\"onCarouselInit\"\n @slide-end=\"onSlideTransition\"\n >\n <Slide\n v-for=\"(slide, index) in props.slides\"\n :key=\"slide.id\"\n data-test=\"stash-carousel|slide\"\n class=\"tw-cursor-pointer\"\n @click=\"onSlideClick\"\n >\n <slot name=\"slide\" :slide=\"slide\" :index=\"index\">\n <img\n class=\"tw-h-full tw-w-full\"\n :class=\"[{ 'tw-rounded': props.roundBorders }]\"\n :src=\"slide.imageUrl\"\n :title=\"\n t('ll.carousel.imageLabel', {\n index: index + 1,\n total: slides.length,\n })\n \"\n />\n </slot>\n </Slide>\n\n <template #addons>\n <Navigation v-if=\"props.slides.length > 1 && !props.hideNavigation\" />\n </template>\n </Carousel>\n\n <template v-if=\"!props.hidePagination\">\n <!-- Pagination Tiles -->\n <ul v-if=\"props.pagination === 'tile'\" class=\"tw-flex tw-list-none\" data-test=\"stash-carousel|pagination-tiles\">\n <li\n v-for=\"(slide, index) in slides\"\n :key=\"slide.imageUrl\"\n class=\"tw-mr-3 tw-cursor-pointer\"\n :aria-current=\"currentIndex === index\"\n @click=\"currentIndex = index\"\n >\n <img\n class=\"tw-rounded\"\n :class=\"[\n classes['pagination-tile'],\n {\n [classes['is-current-tile']]: currentIndex === index,\n 'tw-rounded-full': props.paginationTileRadius === 'full',\n },\n ]\"\n :data-test=\"`stash-carousel|pagination-tile-${index}`\"\n :src=\"slide.imageUrl\"\n :title=\"t('ll.carousel.paginationLabel', { index: index + 1 })\"\n />\n </li>\n </ul>\n\n <!-- Pagination Dots -->\n <ul\n v-else\n class=\"tw-text-center\"\n data-test=\"stash-carousel|pagination-dots\"\n :class=\"[!staticPaginationDots && 'lg:tw-hidden']\"\n >\n <li\n v-for=\"(slide, index) in slides\"\n :key=\"slide.imageUrl\"\n class=\"tw-inline-block tw-rounded-full\"\n :class=\"[classes['pagination-dot'], [currentIndex === index ? 'tw-bg-blue-500' : 'tw-bg-blue-100']]\"\n />\n </ul>\n </template>\n</template>\n\n<style module>\n .root :deep(.carousel__icon) {\n background-color: var(--color-white);\n border-radius: theme('borderRadius.DEFAULT');\n color: var(--color-blue-500);\n height: theme('spacing.9');\n position: absolute;\n top: 50%;\n transform: translateY(-50%);\n width: theme('spacing.9');\n }\n\n .root :deep(.carousel__icon:hover) {\n background-color: var(--color-ice-100);\n color: var(--color-blue-700);\n }\n\n .root :deep(.carousel__next) {\n padding-right: theme('spacing.9');\n }\n\n .root :deep(.carousel__next--disabled) {\n display: none;\n }\n\n .root :deep(.carousel__prev) {\n padding-left: theme('spacing.9');\n }\n\n .root :deep(.carousel__prev--disabled) {\n display: none;\n }\n\n .pagination-dot {\n height: 4px;\n margin-right: 2px;\n width: 4px;\n }\n\n .pagination-tile {\n height: theme('spacing.12');\n opacity: 0.4;\n object-fit: cover;\n width: theme('spacing.12');\n\n &.is-current-tile {\n opacity: 1;\n }\n }\n</style>\n"],"names":["defaultConfigs","carouselProps","value","getMaxSlideIndex","config","slidesCount","snapAlign","wrapAround","itemsToShow","output","getMinSlideIndex","getNumberInRange","val","max","min","getSlidesToScroll","currentSlide","getSlidesVNodes","vNode","acc","node","_a","Fragment","mapNumberToRange","throttle","fn","limit","inThrottle","args","self","debounce","delay","timerId","i18nFormatter","string","values","key","ARIAComponent","defineComponent","inject","reactive","ref","h","Carousel","props","slots","emit","expose","root","slides","slideWidth","__defaultConfig","breakpoints","currentSlideIndex","prevSlideIndex","middleSlideIndex","maxSlideIndex","minSlideIndex","autoplayTimer","transitionTimer","provide","initDefaultConfigs","bindConfigs","updateBreakpointsConfigs","breakpointsArray","a","b","newConfig","breakpoint","isMatched","handleWindowResize","updateSlidesData","updateSlideWidth","rect","onMounted","nextTick","initAutoplay","onUnmounted","isTouch","startPosition","endPosition","dragged","isHover","isDragging","handleMouseEnter","handleMouseLeave","handleDragStart","event","isSliding","handleDragging","handleDragEnd","deltaX","deltaY","direction","tolerance","draggedSlides","captureClick","e","slideTo","next","resetAutoplay","slideIndex","currentVal","mappedNumber","prev","nav","slidesToScroll","computed","trackStyle","xScroll","restartCarousel","prop","watch","data","slotSlides","slotAddons","slotsProps","slidesElements","addonsElements","el","index","slidesBefore","cloneVNode","slidesAfter","trackEl","viewPortEl","IconName","icons","isIconName","candidate","Icon","iconName","iconI18n","path","pathEl","iconTitle","titleEl","Navigation","attrs","slotNext","slotPrev","maxSlide","minSlide","dir","i18n","isRTL","prevButton","nextButton","Slide","isActive","isPrev","isNext","isVisible","__props","useAttrs","classes","useCssModule","carouselRef","__expose","__emit","currentIndex","onCarouselInit","onSlideTransition","onSlideClick","slidesInView"],"mappings":"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","x_google_ignoreList":[0]}
|
|
1
|
+
{"version":3,"file":"Carousel.js","sources":["../node_modules/vue3-carousel/dist/carousel.es.js","../src/components/Carousel/Carousel.vue"],"sourcesContent":["/**\n * Vue 3 Carousel 0.3.4\n * (c) 2024\n * @license MIT\n */\nimport { Fragment, defineComponent, inject, reactive, ref, h, provide, onMounted, nextTick, onUnmounted, computed, watch, cloneVNode } from 'vue';\n\nconst defaultConfigs = {\n itemsToShow: 1,\n itemsToScroll: 1,\n modelValue: 0,\n transition: 300,\n autoplay: 0,\n snapAlign: 'center',\n wrapAround: false,\n throttle: 16,\n pauseAutoplayOnHover: false,\n mouseDrag: true,\n touchDrag: true,\n dir: 'ltr',\n breakpoints: undefined,\n i18n: {\n ariaNextSlide: 'Navigate to next slide',\n ariaPreviousSlide: 'Navigate to previous slide',\n ariaNavigateToSlide: 'Navigate to slide {slideNumber}',\n ariaGallery: 'Gallery',\n itemXofY: 'Item {currentSlide} of {slidesCount}',\n iconArrowUp: 'Arrow pointing upwards',\n iconArrowDown: 'Arrow pointing downwards',\n iconArrowRight: 'Arrow pointing to the right',\n iconArrowLeft: 'Arrow pointing to the left',\n },\n};\n\nconst carouselProps = {\n // count of items to showed per view\n itemsToShow: {\n default: defaultConfigs.itemsToShow,\n type: Number,\n },\n // count of items to be scrolled\n itemsToScroll: {\n default: defaultConfigs.itemsToScroll,\n type: Number,\n },\n // control infinite scrolling mode\n wrapAround: {\n default: defaultConfigs.wrapAround,\n type: Boolean,\n },\n // control max drag\n throttle: {\n default: defaultConfigs.throttle,\n type: Number,\n },\n // control snap position alignment\n snapAlign: {\n default: defaultConfigs.snapAlign,\n validator(value) {\n // The value must match one of these strings\n return ['start', 'end', 'center', 'center-even', 'center-odd'].includes(value);\n },\n },\n // sliding transition time in ms\n transition: {\n default: defaultConfigs.transition,\n type: Number,\n },\n // an object to store breakpoints\n breakpoints: {\n default: defaultConfigs.breakpoints,\n type: Object,\n },\n // time to auto advance slides in ms\n autoplay: {\n default: defaultConfigs.autoplay,\n type: Number,\n },\n // pause autoplay when mouse hover over the carousel\n pauseAutoplayOnHover: {\n default: defaultConfigs.pauseAutoplayOnHover,\n type: Boolean,\n },\n // slide number number of initial slide\n modelValue: {\n default: undefined,\n type: Number,\n },\n // toggle mouse dragging.\n mouseDrag: {\n default: defaultConfigs.mouseDrag,\n type: Boolean,\n },\n // toggle mouse dragging.\n touchDrag: {\n default: defaultConfigs.touchDrag,\n type: Boolean,\n },\n // control snap position alignment\n dir: {\n default: defaultConfigs.dir,\n validator(value) {\n // The value must match one of these strings\n return ['rtl', 'ltr'].includes(value);\n },\n },\n // aria-labels and additional text labels\n i18n: {\n default: defaultConfigs.i18n,\n type: Object,\n },\n // an object to pass all settings\n settings: {\n default() {\n return {};\n },\n type: Object,\n },\n};\n\nfunction getMaxSlideIndex({ config, slidesCount }) {\n const { snapAlign, wrapAround, itemsToShow = 1 } = config;\n if (wrapAround) {\n return Math.max(slidesCount - 1, 0);\n }\n let output;\n switch (snapAlign) {\n case 'start':\n output = slidesCount - itemsToShow;\n break;\n case 'end':\n output = slidesCount - 1;\n break;\n case 'center':\n case 'center-odd':\n output = slidesCount - Math.ceil((itemsToShow - 0.5) / 2);\n break;\n case 'center-even':\n output = slidesCount - Math.ceil(itemsToShow / 2);\n break;\n default:\n output = 0;\n break;\n }\n return Math.max(output, 0);\n}\n\nfunction getMinSlideIndex({ config, slidesCount }) {\n const { wrapAround, snapAlign, itemsToShow = 1 } = config;\n let output = 0;\n if (wrapAround || itemsToShow > slidesCount) {\n return output;\n }\n switch (snapAlign) {\n case 'start':\n output = 0;\n break;\n case 'end':\n output = itemsToShow - 1;\n break;\n case 'center':\n case 'center-odd':\n output = Math.floor((itemsToShow - 1) / 2);\n break;\n case 'center-even':\n output = Math.floor((itemsToShow - 2) / 2);\n break;\n default:\n output = 0;\n break;\n }\n return output;\n}\n\nfunction getNumberInRange({ val, max, min }) {\n if (max < min) {\n return val;\n }\n return Math.min(Math.max(val, min), max);\n}\n\nfunction getSlidesToScroll({ config, currentSlide, slidesCount }) {\n const { snapAlign, wrapAround, itemsToShow = 1 } = config;\n let output = currentSlide;\n switch (snapAlign) {\n case 'center':\n case 'center-odd':\n output -= (itemsToShow - 1) / 2;\n break;\n case 'center-even':\n output -= (itemsToShow - 2) / 2;\n break;\n case 'end':\n output -= itemsToShow - 1;\n break;\n }\n if (wrapAround) {\n return output;\n }\n return getNumberInRange({\n val: output,\n max: slidesCount - itemsToShow,\n min: 0,\n });\n}\n\nfunction getSlidesVNodes(vNode) {\n if (!vNode)\n return [];\n return vNode.reduce((acc, node) => {\n var _a;\n if (node.type === Fragment) {\n return [...acc, ...getSlidesVNodes(node.children)];\n }\n if (((_a = node.type) === null || _a === void 0 ? void 0 : _a.name) === 'CarouselSlide') {\n return [...acc, node];\n }\n return acc;\n }, []);\n}\n\nfunction mapNumberToRange({ val, max, min = 0 }) {\n if (val > max) {\n return mapNumberToRange({ val: val - (max + 1), max, min });\n }\n if (val < min) {\n return mapNumberToRange({ val: val + (max + 1), max, min });\n }\n return val;\n}\n\n/**\n * return a throttle version of the function\n * Throttling\n *\n */\n// eslint-disable-next-line no-unused-vars\nfunction throttle(fn, limit) {\n let inThrottle;\n if (!limit) {\n return fn;\n }\n return function (...args) {\n const self = this;\n if (!inThrottle) {\n fn.apply(self, args);\n inThrottle = true;\n setTimeout(() => (inThrottle = false), limit);\n }\n };\n}\n\n/**\n * return a debounced version of the function\n * @param fn\n * @param delay\n */\n// eslint-disable-next-line no-unused-vars\nfunction debounce(fn, delay) {\n let timerId;\n return function (...args) {\n if (timerId) {\n clearTimeout(timerId);\n }\n timerId = setTimeout(() => {\n fn(...args);\n timerId = null;\n }, delay);\n };\n}\n\nfunction i18nFormatter(string = '', values = {}) {\n return Object.entries(values).reduce((acc, [key, value]) => acc.replace(`{${key}}`, String(value)), string);\n}\n\nvar ARIAComponent = defineComponent({\n name: 'ARIA',\n setup() {\n const config = inject('config', reactive(Object.assign({}, defaultConfigs)));\n const currentSlide = inject('currentSlide', ref(0));\n const slidesCount = inject('slidesCount', ref(0));\n return () => h('div', {\n class: ['carousel__liveregion', 'carousel__sr-only'],\n 'aria-live': 'polite',\n 'aria-atomic': 'true',\n }, i18nFormatter(config.i18n['itemXofY'], {\n currentSlide: currentSlide.value + 1,\n slidesCount: slidesCount.value,\n }));\n },\n});\n\nvar Carousel = defineComponent({\n name: 'Carousel',\n props: carouselProps,\n setup(props, { slots, emit, expose }) {\n var _a;\n const root = ref(null);\n const slides = ref([]);\n const slideWidth = ref(0);\n const slidesCount = ref(0);\n // current config\n const config = reactive(Object.assign({}, defaultConfigs));\n // default carousel configs\n let __defaultConfig = Object.assign({}, defaultConfigs);\n // breakpoints configs\n let breakpoints;\n // slides\n const currentSlideIndex = ref((_a = props.modelValue) !== null && _a !== void 0 ? _a : 0);\n const prevSlideIndex = ref(0);\n const middleSlideIndex = ref(0);\n const maxSlideIndex = ref(0);\n const minSlideIndex = ref(0);\n let autoplayTimer;\n let transitionTimer;\n provide('config', config);\n provide('slidesCount', slidesCount);\n provide('currentSlide', currentSlideIndex);\n provide('maxSlide', maxSlideIndex);\n provide('minSlide', minSlideIndex);\n provide('slideWidth', slideWidth);\n /**\n * Configs\n */\n function initDefaultConfigs() {\n breakpoints = Object.assign({}, props.breakpoints);\n __defaultConfig = Object.assign(Object.assign(Object.assign({}, __defaultConfig), props), { i18n: Object.assign(Object.assign({}, __defaultConfig.i18n), props.i18n), breakpoints: undefined });\n bindConfigs(__defaultConfig);\n }\n function updateBreakpointsConfigs() {\n if (!breakpoints || !Object.keys(breakpoints).length)\n return;\n const breakpointsArray = Object.keys(breakpoints)\n .map((key) => Number(key))\n .sort((a, b) => +b - +a);\n let newConfig = Object.assign({}, __defaultConfig);\n breakpointsArray.some((breakpoint) => {\n const isMatched = window.matchMedia(`(min-width: ${breakpoint}px)`).matches;\n if (isMatched) {\n newConfig = Object.assign(Object.assign({}, newConfig), breakpoints[breakpoint]);\n }\n return isMatched;\n });\n bindConfigs(newConfig);\n }\n function bindConfigs(newConfig) {\n // eslint-disable-next-line @typescript-eslint/ban-ts-comment\n //@ts-ignore\n Object.entries(newConfig).forEach(([key, val]) => (config[key] = val));\n }\n const handleWindowResize = debounce(() => {\n updateBreakpointsConfigs();\n updateSlidesData();\n updateSlideWidth();\n }, 16);\n /**\n * Setup functions\n */\n function updateSlideWidth() {\n if (!root.value)\n return;\n const rect = root.value.getBoundingClientRect();\n slideWidth.value = rect.width / config.itemsToShow;\n }\n function updateSlidesData() {\n if (slidesCount.value <= 0)\n return;\n middleSlideIndex.value = Math.ceil((slidesCount.value - 1) / 2);\n maxSlideIndex.value = getMaxSlideIndex({ config, slidesCount: slidesCount.value });\n minSlideIndex.value = getMinSlideIndex({ config, slidesCount: slidesCount.value });\n if (!config.wrapAround) {\n currentSlideIndex.value = getNumberInRange({\n val: currentSlideIndex.value,\n max: maxSlideIndex.value,\n min: minSlideIndex.value,\n });\n }\n }\n onMounted(() => {\n nextTick(() => updateSlideWidth());\n // Overcome some edge cases\n setTimeout(() => updateSlideWidth(), 1000);\n updateBreakpointsConfigs();\n initAutoplay();\n window.addEventListener('resize', handleWindowResize, { passive: true });\n emit('init');\n });\n onUnmounted(() => {\n if (transitionTimer) {\n clearTimeout(transitionTimer);\n }\n if (autoplayTimer) {\n clearInterval(autoplayTimer);\n }\n window.removeEventListener('resize', handleWindowResize, {\n passive: true,\n });\n });\n /**\n * Carousel Event listeners\n */\n let isTouch = false;\n const startPosition = { x: 0, y: 0 };\n const endPosition = { x: 0, y: 0 };\n const dragged = reactive({ x: 0, y: 0 });\n const isHover = ref(false);\n const isDragging = ref(false);\n const handleMouseEnter = () => {\n isHover.value = true;\n };\n const handleMouseLeave = () => {\n isHover.value = false;\n };\n function handleDragStart(event) {\n if (['INPUT', 'TEXTAREA', 'SELECT'].includes(event.target.tagName)) {\n return;\n }\n isTouch = event.type === 'touchstart';\n if (!isTouch) {\n event.preventDefault();\n }\n if ((!isTouch && event.button !== 0) || isSliding.value) {\n return;\n }\n startPosition.x = isTouch ? event.touches[0].clientX : event.clientX;\n startPosition.y = isTouch ? event.touches[0].clientY : event.clientY;\n document.addEventListener(isTouch ? 'touchmove' : 'mousemove', handleDragging, true);\n document.addEventListener(isTouch ? 'touchend' : 'mouseup', handleDragEnd, true);\n }\n const handleDragging = throttle((event) => {\n isDragging.value = true;\n endPosition.x = isTouch ? event.touches[0].clientX : event.clientX;\n endPosition.y = isTouch ? event.touches[0].clientY : event.clientY;\n const deltaX = endPosition.x - startPosition.x;\n const deltaY = endPosition.y - startPosition.y;\n dragged.y = deltaY;\n dragged.x = deltaX;\n }, config.throttle);\n function handleDragEnd() {\n const direction = config.dir === 'rtl' ? -1 : 1;\n const tolerance = Math.sign(dragged.x) * 0.4;\n const draggedSlides = Math.round(dragged.x / slideWidth.value + tolerance) * direction;\n // Prevent clicking if there is clicked slides\n if (draggedSlides && !isTouch) {\n const captureClick = (e) => {\n window.removeEventListener('click', captureClick, true);\n };\n window.addEventListener('click', captureClick, true);\n }\n slideTo(currentSlideIndex.value - draggedSlides);\n dragged.x = 0;\n dragged.y = 0;\n isDragging.value = false;\n document.removeEventListener(isTouch ? 'touchmove' : 'mousemove', handleDragging, true);\n document.removeEventListener(isTouch ? 'touchend' : 'mouseup', handleDragEnd, true);\n }\n /**\n * Autoplay\n */\n function initAutoplay() {\n if (!config.autoplay || config.autoplay <= 0) {\n return;\n }\n autoplayTimer = setInterval(() => {\n if (config.pauseAutoplayOnHover && isHover.value) {\n return;\n }\n next();\n }, config.autoplay);\n }\n function resetAutoplay() {\n if (autoplayTimer) {\n clearInterval(autoplayTimer);\n autoplayTimer = null;\n }\n initAutoplay();\n }\n /**\n * Navigation function\n */\n const isSliding = ref(false);\n function slideTo(slideIndex) {\n const currentVal = config.wrapAround\n ? slideIndex\n : getNumberInRange({\n val: slideIndex,\n max: maxSlideIndex.value,\n min: minSlideIndex.value,\n });\n if (currentSlideIndex.value === currentVal || isSliding.value) {\n return;\n }\n emit('slide-start', {\n slidingToIndex: slideIndex,\n currentSlideIndex: currentSlideIndex.value,\n prevSlideIndex: prevSlideIndex.value,\n slidesCount: slidesCount.value,\n });\n isSliding.value = true;\n prevSlideIndex.value = currentSlideIndex.value;\n currentSlideIndex.value = currentVal;\n transitionTimer = setTimeout(() => {\n if (config.wrapAround) {\n const mappedNumber = mapNumberToRange({\n val: currentVal,\n max: maxSlideIndex.value,\n min: 0,\n });\n if (mappedNumber !== currentSlideIndex.value) {\n currentSlideIndex.value = mappedNumber;\n emit('loop', {\n currentSlideIndex: currentSlideIndex.value,\n slidingToIndex: slideIndex,\n });\n }\n }\n emit('update:modelValue', currentSlideIndex.value);\n emit('slide-end', {\n currentSlideIndex: currentSlideIndex.value,\n prevSlideIndex: prevSlideIndex.value,\n slidesCount: slidesCount.value,\n });\n isSliding.value = false;\n resetAutoplay();\n }, config.transition);\n }\n function next() {\n slideTo(currentSlideIndex.value + config.itemsToScroll);\n }\n function prev() {\n slideTo(currentSlideIndex.value - config.itemsToScroll);\n }\n const nav = { slideTo, next, prev };\n provide('nav', nav);\n provide('isSliding', isSliding);\n /**\n * Track style\n */\n const slidesToScroll = computed(() => getSlidesToScroll({\n config,\n currentSlide: currentSlideIndex.value,\n slidesCount: slidesCount.value,\n }));\n provide('slidesToScroll', slidesToScroll);\n const trackStyle = computed(() => {\n const direction = config.dir === 'rtl' ? -1 : 1;\n const xScroll = slidesToScroll.value * slideWidth.value * direction;\n return {\n transform: `translateX(${dragged.x - xScroll}px)`,\n transition: `${isSliding.value ? config.transition : 0}ms`,\n margin: config.wrapAround ? `0 -${slidesCount.value * slideWidth.value}px` : '',\n width: `100%`,\n };\n });\n function restartCarousel() {\n initDefaultConfigs();\n updateBreakpointsConfigs();\n updateSlidesData();\n updateSlideWidth();\n resetAutoplay();\n }\n // Update the carousel on props change\n Object.keys(carouselProps).forEach((prop) => {\n if (['modelValue'].includes(prop))\n return;\n watch(() => props[prop], restartCarousel);\n });\n // Handle changing v-model value\n watch(() => props['modelValue'], (val) => {\n if (val === currentSlideIndex.value) {\n return;\n }\n slideTo(Number(val));\n });\n // Handel when slides added/removed\n watch(slidesCount, updateSlidesData);\n // Init carousel\n emit('before-init');\n initDefaultConfigs();\n const data = {\n config,\n slidesCount,\n slideWidth,\n next,\n prev,\n slideTo,\n currentSlide: currentSlideIndex,\n maxSlide: maxSlideIndex,\n minSlide: minSlideIndex,\n middleSlide: middleSlideIndex,\n };\n expose({\n updateBreakpointsConfigs,\n updateSlidesData,\n updateSlideWidth,\n initDefaultConfigs,\n restartCarousel,\n slideTo,\n next,\n prev,\n nav,\n data,\n });\n const slotSlides = slots.default || slots.slides;\n const slotAddons = slots.addons;\n const slotsProps = reactive(data);\n return () => {\n const slidesElements = getSlidesVNodes(slotSlides === null || slotSlides === void 0 ? void 0 : slotSlides(slotsProps));\n const addonsElements = (slotAddons === null || slotAddons === void 0 ? void 0 : slotAddons(slotsProps)) || [];\n slidesElements.forEach((el, index) => (el.props.index = index));\n let output = slidesElements;\n if (config.wrapAround) {\n const slidesBefore = slidesElements.map((el, index) => cloneVNode(el, {\n index: -slidesElements.length + index,\n isClone: true,\n key: `clone-before-${index}`,\n }));\n const slidesAfter = slidesElements.map((el, index) => cloneVNode(el, {\n index: slidesElements.length + index,\n isClone: true,\n key: `clone-after-${index}`,\n }));\n output = [...slidesBefore, ...slidesElements, ...slidesAfter];\n }\n slides.value = slidesElements;\n slidesCount.value = Math.max(slidesElements.length, 1);\n const trackEl = h('ol', {\n class: 'carousel__track',\n style: trackStyle.value,\n onMousedownCapture: config.mouseDrag ? handleDragStart : null,\n onTouchstartPassiveCapture: config.touchDrag ? handleDragStart : null,\n }, output);\n const viewPortEl = h('div', { class: 'carousel__viewport' }, trackEl);\n return h('section', {\n ref: root,\n class: {\n carousel: true,\n 'is-sliding': isSliding.value,\n 'is-dragging': isDragging.value,\n 'is-hover': isHover.value,\n 'carousel--rtl': config.dir === 'rtl',\n },\n dir: config.dir,\n 'aria-label': config.i18n['ariaGallery'],\n tabindex: '0',\n onMouseenter: handleMouseEnter,\n onMouseleave: handleMouseLeave,\n }, [viewPortEl, addonsElements, h(ARIAComponent)]);\n };\n },\n});\n\nvar IconName;\n(function (IconName) {\n IconName[\"arrowUp\"] = \"arrowUp\";\n IconName[\"arrowDown\"] = \"arrowDown\";\n IconName[\"arrowRight\"] = \"arrowRight\";\n IconName[\"arrowLeft\"] = \"arrowLeft\";\n})(IconName || (IconName = {}));\nconst icons = {\n arrowUp: 'M7.41 15.41L12 10.83l4.59 4.58L18 14l-6-6-6 6z',\n arrowDown: 'M7.41 8.59L12 13.17l4.59-4.58L18 10l-6 6-6-6 1.41-1.41z',\n arrowRight: 'M8.59 16.59L13.17 12 8.59 7.41 10 6l6 6-6 6-1.41-1.41z',\n arrowLeft: 'M15.41 16.59L10.83 12l4.58-4.59L14 6l-6 6 6 6 1.41-1.41z',\n};\n\nfunction isIconName(candidate) {\n return candidate in IconName;\n}\nconst Icon = (props) => {\n const config = inject('config', reactive(Object.assign({}, defaultConfigs)));\n const iconName = String(props.name);\n const iconI18n = `icon${iconName.charAt(0).toUpperCase() + iconName.slice(1)}`;\n if (!iconName || typeof iconName !== 'string' || !isIconName(iconName)) {\n return;\n }\n const path = icons[iconName];\n const pathEl = h('path', { d: path });\n const iconTitle = config.i18n[iconI18n] || props.title || iconName;\n const titleEl = h('title', iconTitle);\n return h('svg', {\n class: 'carousel__icon',\n viewBox: '0 0 24 24',\n role: 'img',\n 'aria-label': iconTitle,\n }, [titleEl, pathEl]);\n};\nIcon.props = { name: String, title: String };\n\nconst Navigation = (props, { slots, attrs }) => {\n const { next: slotNext, prev: slotPrev } = slots || {};\n const config = inject('config', reactive(Object.assign({}, defaultConfigs)));\n const maxSlide = inject('maxSlide', ref(1));\n const minSlide = inject('minSlide', ref(1));\n const currentSlide = inject('currentSlide', ref(1));\n const nav = inject('nav', {});\n const { dir, wrapAround, i18n } = config;\n const isRTL = dir === 'rtl';\n const prevButton = h('button', {\n type: 'button',\n class: [\n 'carousel__prev',\n !wrapAround && currentSlide.value <= minSlide.value && 'carousel__prev--disabled',\n attrs === null || attrs === void 0 ? void 0 : attrs.class,\n ],\n 'aria-label': i18n['ariaPreviousSlide'],\n onClick: nav.prev,\n }, (slotPrev === null || slotPrev === void 0 ? void 0 : slotPrev()) || h(Icon, { name: isRTL ? 'arrowRight' : 'arrowLeft' }));\n const nextButton = h('button', {\n type: 'button',\n class: [\n 'carousel__next',\n !wrapAround && currentSlide.value >= maxSlide.value && 'carousel__next--disabled',\n attrs === null || attrs === void 0 ? void 0 : attrs.class,\n ],\n 'aria-label': i18n['ariaNextSlide'],\n onClick: nav.next,\n }, (slotNext === null || slotNext === void 0 ? void 0 : slotNext()) || h(Icon, { name: isRTL ? 'arrowLeft' : 'arrowRight' }));\n return [prevButton, nextButton];\n};\n\nconst Pagination = () => {\n const config = inject('config', reactive(Object.assign({}, defaultConfigs)));\n const maxSlide = inject('maxSlide', ref(1));\n const minSlide = inject('minSlide', ref(1));\n const currentSlide = inject('currentSlide', ref(1));\n const nav = inject('nav', {});\n const isActive = (slide) => mapNumberToRange({\n val: currentSlide.value,\n max: maxSlide.value,\n min: 0,\n }) === slide;\n const children = [];\n for (let slide = minSlide.value; slide < maxSlide.value + 1; slide++) {\n const button = h('button', {\n type: 'button',\n class: {\n 'carousel__pagination-button': true,\n 'carousel__pagination-button--active': isActive(slide),\n },\n 'aria-label': i18nFormatter(config.i18n['ariaNavigateToSlide'], {\n slideNumber: slide + 1,\n }),\n onClick: () => nav.slideTo(slide),\n });\n const item = h('li', { class: 'carousel__pagination-item', key: slide }, button);\n children.push(item);\n }\n return h('ol', { class: 'carousel__pagination' }, children);\n};\n\nvar Slide = defineComponent({\n name: 'CarouselSlide',\n props: {\n index: {\n type: Number,\n default: 1,\n },\n isClone: {\n type: Boolean,\n default: false,\n },\n },\n setup(props, { slots }) {\n const config = inject('config', reactive(Object.assign({}, defaultConfigs)));\n const currentSlide = inject('currentSlide', ref(0));\n const slidesToScroll = inject('slidesToScroll', ref(0));\n const isSliding = inject('isSliding', ref(false));\n const isActive = computed(() => props.index === currentSlide.value);\n const isPrev = computed(() => props.index === currentSlide.value - 1);\n const isNext = computed(() => props.index === currentSlide.value + 1);\n const isVisible = computed(() => {\n const min = Math.floor(slidesToScroll.value);\n const max = Math.ceil(slidesToScroll.value + config.itemsToShow - 1);\n return props.index >= min && props.index <= max;\n });\n return () => {\n var _a;\n return h('li', {\n style: { width: `${100 / config.itemsToShow}%` },\n class: {\n carousel__slide: true,\n 'carousel__slide--clone': props.isClone,\n 'carousel__slide--visible': isVisible.value,\n 'carousel__slide--active': isActive.value,\n 'carousel__slide--prev': isPrev.value,\n 'carousel__slide--next': isNext.value,\n 'carousel__slide--sliding': isSliding.value,\n },\n 'aria-hidden': !isVisible.value,\n }, (_a = slots.default) === null || _a === void 0 ? void 0 : _a.call(slots, {\n isActive: isActive.value,\n isClone: props.isClone,\n isPrev: isPrev.value,\n isNext: isNext.value,\n isSliding: isSliding.value,\n isVisible: isVisible.value\n }));\n };\n },\n});\n\nexport { Carousel, Icon, Navigation, Pagination, Slide };\n","<script lang=\"ts\">\n export * from './Carousel.types';\n</script>\n\n<script setup lang=\"ts\" generic=\"Slide extends CarouselSlide\">\n import 'vue3-carousel/dist/carousel.css';\n import { ref, useAttrs, useCssModule } from 'vue';\n import { Carousel, Navigation, Slide } from 'vue3-carousel';\n\n import { t } from '../../locale';\n import Thumbnail from '../Thumbnail/Thumbnail.vue';\n import ThumbnailGroup from '../ThumbnailGroup/ThumbnailGroup.vue';\n import { CarouselInstanceRef, CarouselSlide } from './Carousel.types';\n\n defineOptions({\n inheritAttrs: false,\n });\n\n interface CarouselProps {\n /**\n * The slides to display in the carousel.\n */\n slides: Slide[];\n\n /**\n * Time, in ms, before slides will automatically transition.\n * If not specified, slides are static until manually transitioned.\n */\n autoplayInterval?: number;\n\n /**\n * Hide the navigation buttons\n */\n hideNavigation?: boolean;\n\n /**\n * Hide the pagination dots/tile\n */\n hidePagination?: boolean;\n\n /**\n * Number of slides to be scrolled at a time\n */\n itemsToScroll?: number;\n\n /**\n * Number of items to show on each slide\n */\n itemsToShow?: number;\n\n /**\n * Whether the carousel should loop back to the first slide after the last slide.\n */\n loop?: boolean;\n\n /**\n * The type of pagination to display.\n */\n pagination?: 'tile' | 'dot';\n\n /**\n * The radius of the pagination tiles.\n */\n paginationTileRadius?: 'standard' | 'full';\n\n /**\n * Prevents slides from automatically transitioning when hovering over the slide.\n */\n pauseAutoplayOnHover?: boolean;\n\n /**\n * Whether to round the borders of the slides.\n */\n roundBorders?: boolean;\n\n /**\n * Whether to show the pagination dots on all screen sizes.\n */\n staticPaginationDots?: boolean;\n }\n\n const props = withDefaults(defineProps<CarouselProps>(), {\n slides: () => [],\n autoplayInterval: 0,\n hideNavigation: false,\n hidePagination: false,\n itemsToScroll: 1,\n itemsToShow: 1,\n loop: false,\n pagination: 'tile',\n paginationTileRadius: 'standard',\n pauseAutoplayOnHover: false,\n roundBorders: false,\n staticPaginationDots: false,\n });\n\n const attrs = useAttrs();\n const classes = useCssModule();\n const carouselRef = ref<CarouselInstanceRef>();\n\n const emit = defineEmits<{\n (e: 'click', slide: Slide): void;\n (e: 'transition', slide: Slide): void;\n (e: 'transition:multi', slides: Slide[]): void;\n }>();\n\n const currentIndex = ref(0);\n\n function handleUpdateCarouselModelValue(...args: unknown[]) {\n const [index] = args;\n if (index === undefined) return;\n slideTo(index as number);\n }\n\n const slideTo = (index: number) => {\n currentIndex.value = index;\n };\n\n const onCarouselInit = () => {\n // carousel does not fire a transition event to the first slide when mounted.\n // subsequent transition events are fired in the slide-end event handler.\n onSlideTransition();\n };\n\n const onSlideClick = () => {\n emit('click', props.slides[currentIndex.value]);\n };\n\n const onSlideTransition = () => {\n // by default only one slide is displayed at a time for each\n // page in the carousel. In this case, we will only emit a\n // transition event with a single slide object.\n if (props.itemsToShow === 1) {\n emit('transition', props.slides[currentIndex.value]);\n return;\n }\n\n // otherwise, we will emit a transition event with an array of\n // slides currently in view on the current page of the carousel.\n const slidesInView = props.slides.slice(currentIndex.value, currentIndex.value + props.itemsToShow);\n\n emit('transition:multi', slidesInView);\n return;\n };\n\n /**\n * Expose the carousel's next and prev and a move slide methods to the parent component\n */\n defineExpose({\n next: () => carouselRef.value?.next(),\n prev: () => carouselRef.value?.prev(),\n slideTo,\n });\n</script>\n\n<template>\n <Carousel\n ref=\"carouselRef\"\n :model-value=\"currentIndex\"\n aria-live=\"polite\"\n aria-roledescription=\"carousel\"\n class=\"stash-carousel tw-mb-6\"\n data-test=\"stash-carousel\"\n :autoplay=\"autoplayInterval\"\n :class=\"classes.root\"\n :i18n=\"{\n ariaNextSlide: t('ll.next'),\n ariaPreviousSlide: t('ll.previous'),\n iconArrowLeft: t('ll.previous'),\n iconArrowRight: t('ll.next'),\n }\"\n :items-to-scroll=\"props.itemsToScroll\"\n :items-to-show=\"props.itemsToShow\"\n :pause-autoplay-on-hover=\"pauseAutoplayOnHover\"\n :wrap-around=\"props.loop\"\n v-bind=\"attrs\"\n @init=\"onCarouselInit\"\n @slide-end=\"onSlideTransition\"\n @update:model-value=\"handleUpdateCarouselModelValue\"\n >\n <Slide\n v-for=\"(slide, index) in props.slides\"\n :key=\"slide.id\"\n data-test=\"stash-carousel|slide\"\n class=\"tw-cursor-pointer\"\n @click=\"onSlideClick\"\n >\n <slot name=\"slide\" :slide=\"slide\" :index=\"index\">\n <img\n class=\"tw-h-full tw-w-full\"\n :class=\"[{ 'tw-rounded': props.roundBorders }]\"\n :src=\"slide.imageUrl\"\n :title=\"\n t('ll.carousel.imageLabel', {\n index: index + 1,\n total: slides.length,\n })\n \"\n />\n </slot>\n </Slide>\n\n <template #addons>\n <Navigation v-if=\"props.slides.length > 1 && !props.hideNavigation\" />\n </template>\n </Carousel>\n\n <template v-if=\"!props.hidePagination\">\n <!-- Pagination Tiles -->\n <ThumbnailGroup\n v-if=\"props.pagination === 'tile'\"\n :active-thumbnail=\"currentIndex\"\n :thumbnails=\"slides\"\n :radius=\"props.paginationTileRadius === 'full' ? 'circle' : 'rounded'\"\n @update:active-thumbnail=\"slideTo\"\n >\n <Thumbnail v-for=\"slide in slides\" :key=\"slide.id\" :thumbnail=\"slide\" variant=\"translucent\" />\n </ThumbnailGroup>\n\n <!-- Pagination Dots -->\n <ul\n v-else\n class=\"tw-text-center\"\n data-test=\"stash-carousel|pagination-dots\"\n :class=\"[!staticPaginationDots && 'lg:tw-hidden']\"\n >\n <li\n v-for=\"(slide, index) in slides\"\n :key=\"slide.imageUrl\"\n class=\"tw-inline-block tw-rounded-full\"\n :class=\"[classes['pagination-dot'], [currentIndex === index ? 'tw-bg-blue-500' : 'tw-bg-blue-100']]\"\n />\n </ul>\n </template>\n</template>\n\n<style module>\n .root :deep(.carousel__icon) {\n background-color: var(--color-white);\n border-radius: theme('borderRadius.DEFAULT');\n color: var(--color-blue-500);\n height: theme('spacing.9');\n position: absolute;\n top: 50%;\n transform: translateY(-50%);\n width: theme('spacing.9');\n }\n\n .root :deep(.carousel__icon:hover) {\n background-color: var(--color-ice-100);\n color: var(--color-blue-700);\n }\n\n .root :deep(.carousel__next) {\n padding-right: theme('spacing.9');\n }\n\n .root :deep(.carousel__next--disabled) {\n display: none;\n }\n\n .root :deep(.carousel__prev) {\n padding-left: theme('spacing.9');\n }\n\n .root :deep(.carousel__prev--disabled) {\n display: none;\n }\n\n .pagination-dot {\n height: 4px;\n margin-right: 2px;\n width: 4px;\n }\n</style>\n"],"names":["defaultConfigs","carouselProps","value","getMaxSlideIndex","config","slidesCount","snapAlign","wrapAround","itemsToShow","output","getMinSlideIndex","getNumberInRange","val","max","min","getSlidesToScroll","currentSlide","getSlidesVNodes","vNode","acc","node","_a","Fragment","mapNumberToRange","throttle","fn","limit","inThrottle","args","self","debounce","delay","timerId","i18nFormatter","string","values","key","ARIAComponent","defineComponent","inject","reactive","ref","h","Carousel","props","slots","emit","expose","root","slides","slideWidth","__defaultConfig","breakpoints","currentSlideIndex","prevSlideIndex","middleSlideIndex","maxSlideIndex","minSlideIndex","autoplayTimer","transitionTimer","provide","initDefaultConfigs","bindConfigs","updateBreakpointsConfigs","breakpointsArray","a","b","newConfig","breakpoint","isMatched","handleWindowResize","updateSlidesData","updateSlideWidth","rect","onMounted","nextTick","initAutoplay","onUnmounted","isTouch","startPosition","endPosition","dragged","isHover","isDragging","handleMouseEnter","handleMouseLeave","handleDragStart","event","isSliding","handleDragging","handleDragEnd","deltaX","deltaY","direction","tolerance","draggedSlides","captureClick","e","slideTo","next","resetAutoplay","slideIndex","currentVal","mappedNumber","prev","nav","slidesToScroll","computed","trackStyle","xScroll","restartCarousel","prop","watch","data","slotSlides","slotAddons","slotsProps","slidesElements","addonsElements","el","index","slidesBefore","cloneVNode","slidesAfter","trackEl","viewPortEl","IconName","icons","isIconName","candidate","Icon","iconName","iconI18n","path","pathEl","iconTitle","titleEl","Navigation","attrs","slotNext","slotPrev","maxSlide","minSlide","dir","i18n","isRTL","prevButton","nextButton","Slide","isActive","isPrev","isNext","isVisible","__props","useAttrs","classes","useCssModule","carouselRef","__emit","currentIndex","handleUpdateCarouselModelValue","onCarouselInit","onSlideTransition","onSlideClick","slidesInView","__expose"],"mappings":"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","x_google_ignoreList":[0]}
|
package/dist/Carousel.vue.d.ts
CHANGED
|
@@ -21,6 +21,7 @@ import { VNodeProps } from 'vue';
|
|
|
21
21
|
export declare type CarouselInstanceRef = Ref<InstanceType<typeof Carousel>> & {
|
|
22
22
|
next: () => void;
|
|
23
23
|
prev: () => void;
|
|
24
|
+
slideTo: (index: number) => void;
|
|
24
25
|
};
|
|
25
26
|
|
|
26
27
|
/**
|
|
@@ -69,6 +70,7 @@ declare const _default: <Slide extends CarouselSlide>(__VLS_props: {
|
|
|
69
70
|
} | undefined, __VLS_expose?: ((exposed: ShallowUnwrapRef< {
|
|
70
71
|
next: () => void | undefined;
|
|
71
72
|
prev: () => void | undefined;
|
|
73
|
+
slideTo: (index: number) => void;
|
|
72
74
|
}>) => void) | undefined, __VLS_setup?: Promise<{
|
|
73
75
|
props: {
|
|
74
76
|
readonly onClick?: ((slide: Slide) => any) | undefined;
|
|
@@ -90,6 +92,7 @@ prev: () => void | undefined;
|
|
|
90
92
|
expose(exposed: ShallowUnwrapRef< {
|
|
91
93
|
next: () => void | undefined;
|
|
92
94
|
prev: () => void | undefined;
|
|
95
|
+
slideTo: (index: number) => void;
|
|
93
96
|
}>): void;
|
|
94
97
|
attrs: any;
|
|
95
98
|
slots: {
|
|
@@ -127,6 +130,7 @@ prev: () => void | undefined;
|
|
|
127
130
|
expose(exposed: ShallowUnwrapRef< {
|
|
128
131
|
next: () => void | undefined;
|
|
129
132
|
prev: () => void | undefined;
|
|
133
|
+
slideTo: (index: number) => void;
|
|
130
134
|
}>): void;
|
|
131
135
|
attrs: any;
|
|
132
136
|
slots: {
|
package/dist/DatePicker.vue.d.ts
CHANGED
|
@@ -212,8 +212,8 @@ hintText: string;
|
|
|
212
212
|
placeholder: string;
|
|
213
213
|
modelValue: string;
|
|
214
214
|
enableTeleport: boolean;
|
|
215
|
-
timeZone: string;
|
|
216
215
|
format: string;
|
|
216
|
+
timeZone: string;
|
|
217
217
|
availableDates: DateRangeSource_2[];
|
|
218
218
|
disabledDates: DateRangeSource_2[];
|
|
219
219
|
hideClearButton: boolean;
|
package/dist/Filters.vue.d.ts
CHANGED
|
@@ -1775,11 +1775,11 @@ enableTeleport: {
|
|
|
1775
1775
|
type: PropType<boolean>;
|
|
1776
1776
|
default: boolean;
|
|
1777
1777
|
};
|
|
1778
|
-
|
|
1778
|
+
format: {
|
|
1779
1779
|
type: PropType<string>;
|
|
1780
1780
|
default: string;
|
|
1781
1781
|
};
|
|
1782
|
-
|
|
1782
|
+
timeZone: {
|
|
1783
1783
|
type: PropType<string>;
|
|
1784
1784
|
default: string;
|
|
1785
1785
|
};
|
|
@@ -1842,8 +1842,8 @@ hintText: string;
|
|
|
1842
1842
|
placeholder: string;
|
|
1843
1843
|
modelValue: string;
|
|
1844
1844
|
enableTeleport: boolean;
|
|
1845
|
-
timeZone: string;
|
|
1846
1845
|
format: string;
|
|
1846
|
+
timeZone: string;
|
|
1847
1847
|
availableDates: DateRangeSource[];
|
|
1848
1848
|
disabledDates: DateRangeSource[];
|
|
1849
1849
|
hideClearButton: boolean;
|
|
@@ -1910,11 +1910,11 @@ enableTeleport: {
|
|
|
1910
1910
|
type: PropType<boolean>;
|
|
1911
1911
|
default: boolean;
|
|
1912
1912
|
};
|
|
1913
|
-
|
|
1913
|
+
format: {
|
|
1914
1914
|
type: PropType<string>;
|
|
1915
1915
|
default: string;
|
|
1916
1916
|
};
|
|
1917
|
-
|
|
1917
|
+
timeZone: {
|
|
1918
1918
|
type: PropType<string>;
|
|
1919
1919
|
default: string;
|
|
1920
1920
|
};
|
|
@@ -1974,8 +1974,8 @@ hintText: string;
|
|
|
1974
1974
|
placeholder: string;
|
|
1975
1975
|
modelValue: string;
|
|
1976
1976
|
enableTeleport: boolean;
|
|
1977
|
-
timeZone: string;
|
|
1978
1977
|
format: string;
|
|
1978
|
+
timeZone: string;
|
|
1979
1979
|
availableDates: DateRangeSource[];
|
|
1980
1980
|
disabledDates: DateRangeSource[];
|
|
1981
1981
|
hideClearButton: boolean;
|
|
@@ -2039,11 +2039,11 @@ enableTeleport: {
|
|
|
2039
2039
|
type: PropType<boolean>;
|
|
2040
2040
|
default: boolean;
|
|
2041
2041
|
};
|
|
2042
|
-
|
|
2042
|
+
format: {
|
|
2043
2043
|
type: PropType<string>;
|
|
2044
2044
|
default: string;
|
|
2045
2045
|
};
|
|
2046
|
-
|
|
2046
|
+
timeZone: {
|
|
2047
2047
|
type: PropType<string>;
|
|
2048
2048
|
default: string;
|
|
2049
2049
|
};
|
|
@@ -2106,8 +2106,8 @@ hintText: string;
|
|
|
2106
2106
|
placeholder: string;
|
|
2107
2107
|
modelValue: string;
|
|
2108
2108
|
enableTeleport: boolean;
|
|
2109
|
-
timeZone: string;
|
|
2110
2109
|
format: string;
|
|
2110
|
+
timeZone: string;
|
|
2111
2111
|
availableDates: DateRangeSource[];
|
|
2112
2112
|
disabledDates: DateRangeSource[];
|
|
2113
2113
|
hideClearButton: boolean;
|
package/dist/Image.js
CHANGED
|
@@ -1,169 +1,9 @@
|
|
|
1
|
-
import {
|
|
2
|
-
import {
|
|
3
|
-
import q from "lodash-es/merge";
|
|
4
|
-
const j = {
|
|
5
|
-
xs: 160,
|
|
6
|
-
sm: 338,
|
|
7
|
-
md: 676,
|
|
8
|
-
lg: 1352,
|
|
9
|
-
xl: 2704
|
|
10
|
-
};
|
|
11
|
-
var z = /* @__PURE__ */ ((t) => (t.None = "none", t.Rounded = "rounded", t.Circle = "circle", t))(z || {}), b = /* @__PURE__ */ ((t) => (t.Cloudinary = "cloudinary", t.Static = "static", t))(b || {});
|
|
12
|
-
function P(t) {
|
|
13
|
-
return (s) => t[s] || s;
|
|
14
|
-
}
|
|
15
|
-
function G({
|
|
16
|
-
formatter: t = (m, c) => `${m}=${c}`,
|
|
17
|
-
keyMap: s,
|
|
18
|
-
joinWith: i = "/",
|
|
19
|
-
valueMap: e = {}
|
|
20
|
-
} = {}) {
|
|
21
|
-
const m = typeof s == "function" ? s : P(s || {});
|
|
22
|
-
return Object.keys(e).forEach((c) => {
|
|
23
|
-
typeof e[c] != "function" && (e[c] = P(e[c]));
|
|
24
|
-
}), (c = {}) => Object.entries(c).map(([l, d]) => {
|
|
25
|
-
const p = e[l], g = m(l);
|
|
26
|
-
let v = d;
|
|
27
|
-
return typeof p == "function" && (v = p(c[l])), t(g, v);
|
|
28
|
-
}).join(i);
|
|
29
|
-
}
|
|
30
|
-
const Q = N.CLOUDINARY, T = (t) => t.startsWith("#") ? t.replace("#", "rgb_") : t, E = G({
|
|
31
|
-
keyMap: {
|
|
32
|
-
fit: "c",
|
|
33
|
-
width: "w",
|
|
34
|
-
height: "h",
|
|
35
|
-
format: "f",
|
|
36
|
-
quality: "q",
|
|
37
|
-
background: "b",
|
|
38
|
-
dpr: "dpr"
|
|
39
|
-
},
|
|
40
|
-
valueMap: {
|
|
41
|
-
fit: {
|
|
42
|
-
fill: "fill",
|
|
43
|
-
inside: "pad",
|
|
44
|
-
outside: "lpad",
|
|
45
|
-
cover: "fit",
|
|
46
|
-
contain: "scale"
|
|
47
|
-
},
|
|
48
|
-
format: {
|
|
49
|
-
jpeg: "jpg"
|
|
50
|
-
},
|
|
51
|
-
background(t) {
|
|
52
|
-
return T(t);
|
|
53
|
-
}
|
|
54
|
-
},
|
|
55
|
-
joinWith: ",",
|
|
56
|
-
formatter: (t, s) => `${t}_${s}`
|
|
57
|
-
}), D = {
|
|
58
|
-
format: "auto",
|
|
59
|
-
quality: "auto:best"
|
|
60
|
-
};
|
|
61
|
-
function F(t, s = {}) {
|
|
62
|
-
const i = q(D, s), e = E(i);
|
|
63
|
-
return `${Q}/${e}/${t}`;
|
|
64
|
-
}
|
|
65
|
-
const V = /* @__PURE__ */ Object.freeze(/* @__PURE__ */ Object.defineProperty({
|
|
66
|
-
__proto__: null,
|
|
67
|
-
getImageUrl: F,
|
|
68
|
-
operationsGenerator: E
|
|
69
|
-
}, Symbol.toStringTag, { value: "Module" }));
|
|
70
|
-
function H(t = "") {
|
|
71
|
-
return t;
|
|
72
|
-
}
|
|
73
|
-
const Y = /* @__PURE__ */ Object.freeze(/* @__PURE__ */ Object.defineProperty({
|
|
74
|
-
__proto__: null,
|
|
75
|
-
getImageUrl: H
|
|
76
|
-
}, Symbol.toStringTag, { value: "Module" })), Z = {
|
|
77
|
-
cloudinary: V,
|
|
78
|
-
static: Y
|
|
79
|
-
}, J = ["src"], et = /* @__PURE__ */ W({
|
|
80
|
-
inheritAttrs: !1,
|
|
81
|
-
__name: "Image",
|
|
82
|
-
props: {
|
|
83
|
-
src: { default: "" },
|
|
84
|
-
srcset: { default: void 0 },
|
|
85
|
-
sizes: { default: void 0 },
|
|
86
|
-
provider: { default: void 0 },
|
|
87
|
-
radius: { default: "none" },
|
|
88
|
-
staticPath: { default: void 0 }
|
|
89
|
-
},
|
|
90
|
-
setup(t) {
|
|
91
|
-
const s = {
|
|
92
|
-
md: w.md,
|
|
93
|
-
lg: w.lg
|
|
94
|
-
}, i = C("stashOptions"), e = t, m = a(() => {
|
|
95
|
-
const { src: r, ...n } = M();
|
|
96
|
-
return n.sizes = v.value, n.srcset = I.value, n;
|
|
97
|
-
}), c = a(() => {
|
|
98
|
-
try {
|
|
99
|
-
return new URL(e.src), !0;
|
|
100
|
-
} catch {
|
|
101
|
-
return !1;
|
|
102
|
-
}
|
|
103
|
-
}), S = a(() => {
|
|
104
|
-
var r;
|
|
105
|
-
return e.provider || ((r = i == null ? void 0 : i.images) == null ? void 0 : r.provider) || b.Static;
|
|
106
|
-
}), l = a(() => e.staticPath ?? (i == null ? void 0 : i.staticPath)), d = a(() => S.value === b.Static), p = a(() => Z[S.value]), g = a(() => d.value ? _() : _({ width: j.md })), v = a(() => e.sizes ? O() : e.sizes), I = a(() => e.sizes && !e.srcset && !d.value ? R() : e.srcset), U = a(() => e.sizes ? x(e.sizes) : []);
|
|
107
|
-
function _(r = {}) {
|
|
108
|
-
if (d.value && c.value)
|
|
109
|
-
return e.src;
|
|
110
|
-
const n = d.value && l.value ? `${l.value}/${e.src}` : e.src;
|
|
111
|
-
return p.value.getImageUrl(n, r);
|
|
112
|
-
}
|
|
113
|
-
function R() {
|
|
114
|
-
return Object.values(j).map((r) => `${_({ width: r })} ${r}w`).join(", ");
|
|
115
|
-
}
|
|
116
|
-
function O() {
|
|
117
|
-
var r;
|
|
118
|
-
return (r = e.sizes) != null && r.includes("(") ? e.sizes : U.value.map((n) => `${n.mediaQuery ? n.mediaQuery + " " : ""}${n.size}`).join(", ");
|
|
119
|
-
}
|
|
120
|
-
function x(r = "") {
|
|
121
|
-
const n = [], h = {
|
|
122
|
-
default: "100vw"
|
|
123
|
-
};
|
|
124
|
-
if (typeof r == "string") {
|
|
125
|
-
const f = r.split(/[\s]+/).filter((u) => u);
|
|
126
|
-
for (const u of f) {
|
|
127
|
-
const o = u.split(":");
|
|
128
|
-
if (o.length !== 2) {
|
|
129
|
-
h.default = o[0].trim();
|
|
130
|
-
continue;
|
|
131
|
-
}
|
|
132
|
-
h[o[0].trim()] = o[1].trim();
|
|
133
|
-
}
|
|
134
|
-
} else
|
|
135
|
-
throw new Error("`sizes` needs to be a string");
|
|
136
|
-
for (const f in h) {
|
|
137
|
-
const u = parseInt(s[f] || 0);
|
|
138
|
-
let o = String(h[f]);
|
|
139
|
-
const y = o.endsWith("vw");
|
|
140
|
-
if (!y && /^\d+$/.test(o) && (o = `${o}px`), !y && o.endsWith("%"))
|
|
141
|
-
throw new Error("Image: `sizes` does not support percentage values");
|
|
142
|
-
const A = {
|
|
143
|
-
mediaQuery: u ? `(min-width: ${u}px)` : "",
|
|
144
|
-
screenMinWidth: u,
|
|
145
|
-
size: o
|
|
146
|
-
};
|
|
147
|
-
n.push(A);
|
|
148
|
-
}
|
|
149
|
-
return n.sort((f, u) => f.screenMinWidth > u.screenMinWidth ? -1 : 1), n;
|
|
150
|
-
}
|
|
151
|
-
return (r, n) => (B(), k("img", L({
|
|
152
|
-
ref: "img",
|
|
153
|
-
key: g.value,
|
|
154
|
-
"data-test": "stash-image",
|
|
155
|
-
class: ["stash-image", {
|
|
156
|
-
"tw-rounded": e.radius === $(z).Rounded,
|
|
157
|
-
"tw-rounded-full": e.radius === $(z).Circle
|
|
158
|
-
}],
|
|
159
|
-
src: g.value
|
|
160
|
-
}, m.value), null, 16, J));
|
|
161
|
-
}
|
|
162
|
-
});
|
|
1
|
+
import { _ as s } from "./Image.vue_vue_type_script_setup_true_lang-YUNunj71.js";
|
|
2
|
+
import { a as m, I as o, S as f } from "./Image.vue_vue_type_script_setup_true_lang-YUNunj71.js";
|
|
163
3
|
export {
|
|
164
|
-
|
|
165
|
-
|
|
166
|
-
|
|
167
|
-
|
|
4
|
+
m as ImageProviders,
|
|
5
|
+
o as ImageRadius,
|
|
6
|
+
f as Screens,
|
|
7
|
+
s as default
|
|
168
8
|
};
|
|
169
9
|
//# sourceMappingURL=Image.js.map
|
package/dist/Image.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Image.js","sources":["../src/components/Image/Image.types.ts","../src/components/Image/providers/utils.ts","../src/components/Image/providers/cloudinary.ts","../src/components/Image/providers/static.ts","../src/components/Image/providers/index.ts","../src/components/Image/Image.vue"],"sourcesContent":["// Sizes used to generate resized and optimized versions of an image.\n// Generated in `srcset`, and informed by `sizes`.\nexport const Screens = {\n xs: 160,\n sm: 338,\n md: 676,\n lg: 1352,\n xl: 2704,\n} as const;\n\nexport interface ImageSizeCondition {\n mediaQuery: string;\n screenMinWidth: number;\n size: string;\n}\n\nexport enum ImageRadius {\n None = 'none',\n Rounded = 'rounded',\n Circle = 'circle',\n}\n\nexport type ImageRadii = `${ImageRadius}`;\n\nexport enum ImageProviders {\n Cloudinary = 'cloudinary',\n Static = 'static',\n}\n","export interface ImageModifiers {\n format?: string;\n height?: number;\n width?: number;\n [key: string]: any /* eslint-disable-line @typescript-eslint/no-explicit-any */;\n}\n\nexport type ParamFormatter = (key: string, value: string) => string;\n\nexport type ParamMapper = { [key: string]: string } | ((key: string) => string);\n\nexport interface ProviderUrlBuilder {\n keyMap?: ParamMapper;\n formatter?: ParamFormatter;\n joinWith?: string;\n valueMap?: {\n [key: string]: ParamMapper;\n };\n}\n\nfunction createMapper(map: ParamMapper) {\n return (key: string) => {\n return map[key] || key;\n };\n}\n\n/**\n * Builds the parameterized Cloudinary url\n */\nexport function buildProviderUrl({\n formatter = (key, value) => `${key}=${value}`,\n keyMap,\n joinWith = '/',\n valueMap = {},\n}: ProviderUrlBuilder = {}) {\n const keyMapper = typeof keyMap === 'function' ? keyMap : createMapper(keyMap || {});\n\n Object.keys(valueMap).forEach((valueKey) => {\n if (typeof valueMap[valueKey] !== 'function') {\n valueMap[valueKey] = createMapper(valueMap[valueKey]);\n }\n });\n\n return (modifiers: { [key: string]: string } = {}) => {\n const operations = Object.entries(modifiers).map(([key, value]) => {\n const mapper = valueMap[key];\n const newKey = keyMapper(key);\n let newVal = value;\n\n if (typeof mapper === 'function') {\n newVal = mapper(modifiers[key]);\n }\n\n return formatter(newKey, newVal);\n });\n\n return operations.join(joinWith);\n };\n}\n\n/**\n * Checks if a (sub)domain is included in a list of acceptable domains\n * @param str the (sub)domain to check\n * @param domains an array of valid domains\n */\nexport function isDomainValid(str = '', domains: string[] = []): boolean {\n const url = new URL(str);\n const host = url.host;\n\n return domains.some((domain) => {\n if (domain === host) {\n return true;\n }\n\n return domain.endsWith(`.${host}`);\n });\n}\n","import merge from 'lodash-es/merge';\n\nimport { IMAGE_PROVIDER_URLS } from '../../../constants';\nimport { buildProviderUrl, ImageModifiers } from './utils';\n\nconst BASE_URL = IMAGE_PROVIDER_URLS.CLOUDINARY;\n\nconst convertHextoRGBFormat = (value: string) => (value.startsWith('#') ? value.replace('#', 'rgb_') : value);\n\n/**\n * Parameters (option and value pairs) that can be used in the <transformations> segment of the Cloudinary transformation URL.\n * Options and their respective values are connected by an underscore (eg `w_250` for width of 250px.).\n * Multiple parameters are comma separated (eg. `w_250,h_250`).\n *\n * `keyMap` maps the option to its option prefix.\n * `valueMap` is used for grouping options using the same `keyMap` value under a 'category', allowing for easier usage and custom labelling in the component context.\n *\n * Transformation URL structure:\n * https://cloudinary.com/documentation/transformation_reference\n *\n * Transformation URL parameters (options and values):\n * https://cloudinary.com/documentation/image_transformations#transformation_url_syntax\n *\n */\nexport const operationsGenerator = buildProviderUrl({\n keyMap: {\n fit: 'c',\n width: 'w',\n height: 'h',\n format: 'f',\n quality: 'q',\n background: 'b',\n dpr: 'dpr',\n },\n valueMap: {\n fit: {\n fill: 'fill',\n inside: 'pad',\n outside: 'lpad',\n cover: 'fit',\n contain: 'scale',\n },\n format: {\n jpeg: 'jpg',\n },\n background(value: string) {\n return convertHextoRGBFormat(value);\n },\n },\n joinWith: ',',\n formatter: (key, value) => `${key}_${value}`,\n});\n\n// Note: Not configurable via Image props (for now).\nconst defaultModifiers = {\n format: 'auto',\n quality: 'auto:best',\n};\n\nexport function getImageUrl(src: string, modifiers: Partial<ImageModifiers> = {}): string {\n const mergeModifiers = merge(defaultModifiers, modifiers);\n const operations = operationsGenerator(mergeModifiers);\n\n return `${BASE_URL}/${operations}/${src}`;\n}\n","export function getImageUrl(src = ''): string {\n return src;\n}\n","import * as cloudinary from './cloudinary';\nimport * as staticProvider from './static';\n\nexport default {\n cloudinary,\n static: staticProvider,\n};\n","<script lang=\"ts\">\n export * from './Image.types';\n</script>\n\n<script setup lang=\"ts\">\n import { computed, inject, useAttrs } from 'vue';\n\n import { StashImageProviders, StashProvideState } from '../../../types/misc';\n import { SCREEN_SIZES } from '../../constants';\n import { ImageProviders, ImageRadii, ImageRadius, ImageSizeCondition, Screens } from './Image.types';\n import providers from './providers';\n import { ImageModifiers } from './providers/utils';\n\n export interface ImageProps {\n /**\n * The path to the image you want to embed.\n */\n src: string;\n\n /**\n * Native srcset attribute.\n * One or more strings separated by commas, indicating possible image sources\n * Can only be used with provider=static, otherwise it's ignored and auto-generated with `sizes` usage\n */\n srcset?: string;\n\n /**\n * For specifying responsive sizes\n */\n sizes?: string;\n\n /**\n * Where the image is served from.\n * If not provided, the provider will inherit from the Stash config `stashOptions.images.provider` (default: `static`).\n * - `static` for relative or absolute paths\n * - `cloudinary` for images served via Cloudinary\n */\n provider?: StashImageProviders;\n\n /**\n * For applying border radius\n */\n radius?: ImageRadii;\n\n /**\n * A custom static path the image src will be appended onto when provider=static.\n * Can be used to override the library-level default.\n */\n staticPath?: string;\n\n /**\n * TODO - https://leaflink.atlassian.net/browse/GRO-204\n * A custom function used to resolve a URL string for the image\n */\n // loader?: () => string;\n }\n\n defineOptions({\n inheritAttrs: false,\n });\n\n const BREAKPOINTS = {\n md: SCREEN_SIZES.md,\n lg: SCREEN_SIZES.lg,\n };\n const stashOptions = inject<StashProvideState>('stashOptions');\n const props = withDefaults(defineProps<ImageProps>(), {\n src: '',\n srcset: undefined,\n sizes: undefined,\n staticPath: undefined,\n provider: undefined,\n radius: 'none',\n // loader: undefined, // TODO - https://leaflink.atlassian.net/browse/GRO-204\n });\n\n const attrs = computed(() => {\n const { src, ...attrs } = useAttrs();\n\n attrs.sizes = imgSizes.value;\n attrs.srcset = imgSrcset.value;\n\n return attrs;\n });\n\n const isAbsoluteUrl = computed(() => {\n // return true if not an absolute url\n try {\n new URL(props.src);\n return true;\n } catch (e) {\n return false;\n }\n });\n\n const computedProvider = computed(() => props.provider || stashOptions?.images?.provider || ImageProviders.Static);\n\n const computedStaticPath = computed(() => props.staticPath ?? stashOptions?.staticPath);\n\n const isStatic = computed(() => computedProvider.value === ImageProviders.Static);\n\n const imgProvider = computed(() => providers[computedProvider.value]);\n\n const imgSrc = computed(() => (isStatic.value ? getProviderImage() : getProviderImage({ width: Screens.md })));\n\n const imgSizes = computed(() => (props.sizes ? getSizes() : props.sizes));\n\n const imgSrcset = computed(() => (props.sizes && !props.srcset && !isStatic.value ? getSources() : props.srcset));\n\n const parsedSizes = computed(() => {\n return props.sizes ? parseSizes(props.sizes) : [];\n });\n\n function getProviderImage(modifiers: ImageModifiers = {}) {\n if (isStatic.value && isAbsoluteUrl.value) {\n return props.src;\n }\n\n const src = isStatic.value && computedStaticPath.value ? `${computedStaticPath.value}/${props.src}` : props.src;\n\n return imgProvider.value.getImageUrl(src, modifiers);\n }\n\n function getSources() {\n return Object.values(Screens)\n .map((width) => {\n const src = getProviderImage({ width });\n\n return `${src} ${width}w`;\n })\n .join(', ');\n }\n\n function getSizes() {\n // return if using native media conditions\n if (props.sizes?.includes('(')) {\n return props.sizes;\n }\n\n return parsedSizes.value.map((v) => `${v.mediaQuery ? v.mediaQuery + ' ' : ''}${v.size}`).join(', ');\n }\n\n function parseSizes(providedSizes = '') {\n const conditions: ImageSizeCondition[] = [];\n const sizes = {\n default: '100vw',\n };\n\n // parse sizes and convert to object\n if (typeof providedSizes === 'string') {\n const definitions = providedSizes.split(/[\\s]+/).filter((size) => size);\n\n for (const entry of definitions) {\n const size = entry.split(':');\n\n if (size.length !== 2) {\n sizes['default'] = size[0].trim();\n continue;\n }\n\n sizes[size[0].trim()] = size[1].trim();\n }\n } else {\n throw new Error('`sizes` needs to be a string');\n }\n\n for (const key in sizes) {\n const screenMinWidth = parseInt(BREAKPOINTS[key] || 0);\n let size = String(sizes[key]);\n const isFluidSize = size.endsWith('vw');\n\n // convert integer to pixels\n if (!isFluidSize && /^\\d+$/.test(size)) {\n size = `${size}px`;\n }\n\n if (!isFluidSize && size.endsWith('%')) {\n throw new Error('Image: `sizes` does not support percentage values');\n }\n\n const condition = {\n mediaQuery: screenMinWidth ? `(min-width: ${screenMinWidth}px)` : '',\n screenMinWidth,\n size,\n };\n\n conditions.push(condition);\n }\n\n conditions.sort((v1, v2) => (v1.screenMinWidth > v2.screenMinWidth ? -1 : 1));\n\n return conditions;\n }\n</script>\n\n<template>\n <img\n ref=\"img\"\n :key=\"imgSrc\"\n data-test=\"stash-image\"\n class=\"stash-image\"\n :class=\"{\n 'tw-rounded': props.radius === ImageRadius.Rounded,\n 'tw-rounded-full': props.radius === ImageRadius.Circle,\n }\"\n :src=\"imgSrc\"\n v-bind=\"attrs\"\n />\n</template>\n"],"names":["Screens","ImageRadius","ImageProviders","createMapper","map","key","buildProviderUrl","formatter","value","keyMap","joinWith","valueMap","keyMapper","valueKey","modifiers","mapper","newKey","newVal","BASE_URL","IMAGE_PROVIDER_URLS","convertHextoRGBFormat","operationsGenerator","defaultModifiers","getImageUrl","src","mergeModifiers","merge","operations","providers","cloudinary","staticProvider","BREAKPOINTS","SCREEN_SIZES","stashOptions","inject","props","__props","attrs","computed","useAttrs","imgSizes","imgSrcset","isAbsoluteUrl","computedProvider","_a","computedStaticPath","isStatic","imgProvider","imgSrc","getProviderImage","getSizes","getSources","parsedSizes","parseSizes","width","v","providedSizes","conditions","sizes","definitions","size","entry","screenMinWidth","isFluidSize","condition","v1","v2"],"mappings":";;;AAEO,MAAMA,IAAU;AAAA,EACrB,IAAI;AAAA,EACJ,IAAI;AAAA,EACJ,IAAI;AAAA,EACJ,IAAI;AAAA,EACJ,IAAI;AACN;AAQY,IAAAC,sBAAAA,OACVA,EAAA,OAAO,QACPA,EAAA,UAAU,WACVA,EAAA,SAAS,UAHCA,IAAAA,KAAA,CAAA,CAAA,GAQAC,sBAAAA,OACVA,EAAA,aAAa,cACbA,EAAA,SAAS,UAFCA,IAAAA,KAAA,CAAA,CAAA;ACJZ,SAASC,EAAaC,GAAkB;AACtC,SAAO,CAACC,MACCD,EAAIC,CAAG,KAAKA;AAEvB;AAKO,SAASC,EAAiB;AAAA,EAC/B,WAAAC,IAAY,CAACF,GAAKG,MAAU,GAAGH,CAAG,IAAIG,CAAK;AAAA,EAC3C,QAAAC;AAAA,EACA,UAAAC,IAAW;AAAA,EACX,UAAAC,IAAW,CAAC;AACd,IAAwB,IAAI;AACpB,QAAAC,IAAY,OAAOH,KAAW,aAAaA,IAASN,EAAaM,KAAU,CAAA,CAAE;AAEnF,gBAAO,KAAKE,CAAQ,EAAE,QAAQ,CAACE,MAAa;AAC1C,IAAI,OAAOF,EAASE,CAAQ,KAAM,eAChCF,EAASE,CAAQ,IAAIV,EAAaQ,EAASE,CAAQ,CAAC;AAAA,EACtD,CACD,GAEM,CAACC,IAAuC,OAC1B,OAAO,QAAQA,CAAS,EAAE,IAAI,CAAC,CAACT,GAAKG,CAAK,MAAM;AAC3D,UAAAO,IAASJ,EAASN,CAAG,GACrBW,IAASJ,EAAUP,CAAG;AAC5B,QAAIY,IAAST;AAET,WAAA,OAAOO,KAAW,eACXE,IAAAF,EAAOD,EAAUT,CAAG,CAAC,IAGzBE,EAAUS,GAAQC,CAAM;AAAA,EAAA,CAChC,EAEiB,KAAKP,CAAQ;AAEnC;ACrDA,MAAMQ,IAAWC,EAAoB,YAE/BC,IAAwB,CAACZ,MAAmBA,EAAM,WAAW,GAAG,IAAIA,EAAM,QAAQ,KAAK,MAAM,IAAIA,GAiB1Fa,IAAsBf,EAAiB;AAAA,EAClD,QAAQ;AAAA,IACN,KAAK;AAAA,IACL,OAAO;AAAA,IACP,QAAQ;AAAA,IACR,QAAQ;AAAA,IACR,SAAS;AAAA,IACT,YAAY;AAAA,IACZ,KAAK;AAAA,EACP;AAAA,EACA,UAAU;AAAA,IACR,KAAK;AAAA,MACH,MAAM;AAAA,MACN,QAAQ;AAAA,MACR,SAAS;AAAA,MACT,OAAO;AAAA,MACP,SAAS;AAAA,IACX;AAAA,IACA,QAAQ;AAAA,MACN,MAAM;AAAA,IACR;AAAA,IACA,WAAWE,GAAe;AACxB,aAAOY,EAAsBZ,CAAK;AAAA,IACpC;AAAA,EACF;AAAA,EACA,UAAU;AAAA,EACV,WAAW,CAACH,GAAKG,MAAU,GAAGH,CAAG,IAAIG,CAAK;AAC5C,CAAC,GAGKc,IAAmB;AAAA,EACvB,QAAQ;AAAA,EACR,SAAS;AACX;AAEO,SAASC,EAAYC,GAAaV,IAAqC,IAAY;AAClF,QAAAW,IAAiBC,EAAMJ,GAAkBR,CAAS,GAClDa,IAAaN,EAAoBI,CAAc;AAErD,SAAO,GAAGP,CAAQ,IAAIS,CAAU,IAAIH,CAAG;AACzC;;;;;;AChEgB,SAAAD,EAAYC,IAAM,IAAY;AACrC,SAAAA;AACT;;;;8CCCeI,IAAA;AAAA,EACb,YAAAC;AAAA,EACA,QAAQC;AACV;;;;;;;;;;;;ACuDE,UAAMC,IAAc;AAAA,MAClB,IAAIC,EAAa;AAAA,MACjB,IAAIA,EAAa;AAAA,IAAA,GAEbC,IAAeC,EAA0B,cAAc,GACvDC,IAAQC,GAURC,IAAQC,EAAS,MAAM;AAC3B,YAAM,EAAE,KAAAd,GAAK,GAAGa,MAAUE,EAAS;AAEnCF,aAAAA,EAAM,QAAQG,EAAS,OACvBH,EAAM,SAASI,EAAU,OAElBJ;AAAAA,IAAA,CACR,GAEKK,IAAgBJ,EAAS,MAAM;AAE/B,UAAA;AACE,mBAAA,IAAIH,EAAM,GAAG,GACV;AAAA,cACG;AACH,eAAA;AAAA,MACT;AAAA,IAAA,CACD,GAEKQ,IAAmBL,EAAS,MAAM;;AAAA,aAAAH,EAAM,cAAYS,IAAAX,KAAA,gBAAAA,EAAc,WAAd,gBAAAW,EAAsB,aAAY1C,EAAe;AAAA,KAAM,GAE3G2C,IAAqBP,EAAS,MAAMH,EAAM,eAAcF,KAAA,gBAAAA,EAAc,WAAU,GAEhFa,IAAWR,EAAS,MAAMK,EAAiB,UAAUzC,EAAe,MAAM,GAE1E6C,IAAcT,EAAS,MAAMV,EAAUe,EAAiB,KAAK,CAAC,GAE9DK,IAASV,EAAS,MAAOQ,EAAS,QAAQG,EAAA,IAAqBA,EAAiB,EAAE,OAAOjD,EAAQ,GAAA,CAAI,CAAE,GAEvGwC,IAAWF,EAAS,MAAOH,EAAM,QAAQe,EAAS,IAAIf,EAAM,KAAM,GAElEM,IAAYH,EAAS,MAAOH,EAAM,SAAS,CAACA,EAAM,UAAU,CAACW,EAAS,QAAQK,EAAW,IAAIhB,EAAM,MAAO,GAE1GiB,IAAcd,EAAS,MACpBH,EAAM,QAAQkB,EAAWlB,EAAM,KAAK,IAAI,EAChD;AAEQ,aAAAc,EAAiBnC,IAA4B,IAAI;AACpD,UAAAgC,EAAS,SAASJ,EAAc;AAClC,eAAOP,EAAM;AAGf,YAAMX,IAAMsB,EAAS,SAASD,EAAmB,QAAQ,GAAGA,EAAmB,KAAK,IAAIV,EAAM,GAAG,KAAKA,EAAM;AAE5G,aAAOY,EAAY,MAAM,YAAYvB,GAAKV,CAAS;AAAA,IACrD;AAEA,aAASqC,IAAa;AACpB,aAAO,OAAO,OAAOnD,CAAO,EACzB,IAAI,CAACsD,MAGG,GAFKL,EAAiB,EAAE,OAAAK,EAAO,CAAA,CAEzB,IAAIA,CAAK,GACvB,EACA,KAAK,IAAI;AAAA,IACd;AAEA,aAASJ,IAAW;;AAElB,cAAIN,IAAAT,EAAM,UAAN,QAAAS,EAAa,SAAS,OACjBT,EAAM,QAGRiB,EAAY,MAAM,IAAI,CAACG,MAAM,GAAGA,EAAE,aAAaA,EAAE,aAAa,MAAM,EAAE,GAAGA,EAAE,IAAI,EAAE,EAAE,KAAK,IAAI;AAAA,IACrG;AAES,aAAAF,EAAWG,IAAgB,IAAI;AACtC,YAAMC,IAAmC,CAAA,GACnCC,IAAQ;AAAA,QACZ,SAAS;AAAA,MAAA;AAIP,UAAA,OAAOF,KAAkB,UAAU;AAC/B,cAAAG,IAAcH,EAAc,MAAM,OAAO,EAAE,OAAO,CAACI,MAASA,CAAI;AAEtE,mBAAWC,KAASF,GAAa;AACzB,gBAAAC,IAAOC,EAAM,MAAM,GAAG;AAExB,cAAAD,EAAK,WAAW,GAAG;AACrB,YAAAF,EAAM,UAAaE,EAAK,CAAC,EAAE,KAAK;AAChC;AAAA,UACF;AAEM,UAAAF,EAAAE,EAAK,CAAC,EAAE,KAAA,CAAM,IAAIA,EAAK,CAAC,EAAE;QAClC;AAAA,MAAA;AAEM,cAAA,IAAI,MAAM,8BAA8B;AAGhD,iBAAWvD,KAAOqD,GAAO;AACvB,cAAMI,IAAiB,SAAS/B,EAAY1B,CAAG,KAAK,CAAC;AACrD,YAAIuD,IAAO,OAAOF,EAAMrD,CAAG,CAAC;AACtB,cAAA0D,IAAcH,EAAK,SAAS,IAAI;AAOtC,YAJI,CAACG,KAAe,QAAQ,KAAKH,CAAI,MACnCA,IAAO,GAAGA,CAAI,OAGZ,CAACG,KAAeH,EAAK,SAAS,GAAG;AAC7B,gBAAA,IAAI,MAAM,mDAAmD;AAGrE,cAAMI,IAAY;AAAA,UAChB,YAAYF,IAAiB,eAAeA,CAAc,QAAQ;AAAA,UAClE,gBAAAA;AAAA,UACA,MAAAF;AAAA,QAAA;AAGF,QAAAH,EAAW,KAAKO,CAAS;AAAA,MAC3B;AAEW,aAAAP,EAAA,KAAK,CAACQ,GAAIC,MAAQD,EAAG,iBAAiBC,EAAG,iBAAiB,KAAK,CAAE,GAErET;AAAA,IACT;;;;;;;;;;;;;"}
|
|
1
|
+
{"version":3,"file":"Image.js","sources":[],"sourcesContent":[],"names":[],"mappings":";;"}
|