@leaflink/stash 51.5.0 → 51.5.2

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 CHANGED
@@ -2,7 +2,7 @@ import { defineComponent as F, inject as b, reactive as j, ref as d, h as _, pro
2
2
  import { t as V } from "./locale.js";
3
3
  import Ue from "./Thumbnail.js";
4
4
  import $e from "./ThumbnailGroup.js";
5
- import { _ as Xe } from "./_plugin-vue_export-helper-CHgC5LLL.js";
5
+ import { _ as ze } from "./_plugin-vue_export-helper-CHgC5LLL.js";
6
6
  /**
7
7
  * Vue 3 Carousel 0.3.4
8
8
  * (c) 2024
@@ -116,7 +116,7 @@ const p = {
116
116
  type: Object
117
117
  }
118
118
  };
119
- function ze({ config: e, slidesCount: n }) {
119
+ function Xe({ config: e, slidesCount: n }) {
120
120
  const { snapAlign: t, wrapAround: a, itemsToShow: r = 1 } = e;
121
121
  if (a)
122
122
  return Math.max(n - 1, 0);
@@ -266,7 +266,7 @@ var qe = F({
266
266
  m.value = o.width / l.itemsToShow;
267
267
  }
268
268
  function $() {
269
- s.value <= 0 || (u.value = Math.ceil((s.value - 1) / 2), y.value = ze({ config: l, slidesCount: s.value }), w.value = He({ config: l, slidesCount: s.value }), l.wrapAround || (c.value = re({
269
+ s.value <= 0 || (u.value = Math.ceil((s.value - 1) / 2), y.value = Xe({ config: l, slidesCount: s.value }), w.value = He({ config: l, slidesCount: s.value }), l.wrapAround || (c.value = re({
270
270
  val: c.value,
271
271
  max: y.value,
272
272
  min: w.value
@@ -280,17 +280,17 @@ var qe = F({
280
280
  });
281
281
  });
282
282
  let x = !1;
283
- const X = { x: 0, y: 0 }, z = { x: 0, y: 0 }, O = j({ x: 0, y: 0 }), H = d(!1), K = d(!1), Me = () => {
283
+ const z = { x: 0, y: 0 }, X = { x: 0, y: 0 }, O = j({ x: 0, y: 0 }), H = d(!1), K = d(!1), Me = () => {
284
284
  H.value = !0;
285
285
  }, Ne = () => {
286
286
  H.value = !1;
287
287
  };
288
288
  function fe(o) {
289
- ["INPUT", "TEXTAREA", "SELECT"].includes(o.target.tagName) || (x = o.type === "touchstart", x || o.preventDefault(), !(!x && o.button !== 0 || I.value) && (X.x = x ? o.touches[0].clientX : o.clientX, X.y = x ? o.touches[0].clientY : o.clientY, document.addEventListener(x ? "touchmove" : "mousemove", pe, !0), document.addEventListener(x ? "touchend" : "mouseup", me, !0)));
289
+ ["INPUT", "TEXTAREA", "SELECT"].includes(o.target.tagName) || (x = o.type === "touchstart", x || o.preventDefault(), !(!x && o.button !== 0 || I.value) && (z.x = x ? o.touches[0].clientX : o.clientX, z.y = x ? o.touches[0].clientY : o.clientY, document.addEventListener(x ? "touchmove" : "mousemove", pe, !0), document.addEventListener(x ? "touchend" : "mouseup", me, !0)));
290
290
  }
291
291
  const pe = Ge((o) => {
292
- K.value = !0, z.x = x ? o.touches[0].clientX : o.clientX, z.y = x ? o.touches[0].clientY : o.clientY;
293
- const h = z.x - X.x, f = z.y - X.y;
292
+ K.value = !0, X.x = x ? o.touches[0].clientX : o.clientX, X.y = x ? o.touches[0].clientY : o.clientY;
293
+ const h = X.x - z.x, f = X.y - z.y;
294
294
  O.y = f, O.x = h;
295
295
  }, l.throttle);
296
296
  function me() {
@@ -617,7 +617,7 @@ const tt = ["src", "title"], nt = /* @__PURE__ */ F({
617
617
  index: T
618
618
  }, () => [
619
619
  Ve("img", {
620
- class: ie(["tw-h-full tw-w-full", [{ "tw-rounded": a.roundBorders }]]),
620
+ class: ie(["tw-size-full", [{ "tw-rounded": a.roundBorders }]]),
621
621
  src: w.imageUrl,
622
622
  title: N(V)("ll.carousel.imageLabel", {
623
623
  index: T + 1,
@@ -670,7 +670,7 @@ const tt = ["src", "title"], nt = /* @__PURE__ */ F({
670
670
  "pagination-dot": "_pagination-dot_4piw3_34"
671
671
  }, st = {
672
672
  $style: rt
673
- }, pt = /* @__PURE__ */ Xe(nt, [["__cssModules", st]]);
673
+ }, pt = /* @__PURE__ */ ze(nt, [["__cssModules", st]]);
674
674
  export {
675
675
  pt as default
676
676
  };
@@ -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 import { CarouselInstanceRef, CarouselSlide } from './Carousel.types';\n\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 * as Vue3Carousel from 'vue3-carousel';\n\n import { t } from '../../locale';\n import Thumbnail from '../Thumbnail/Thumbnail.vue';\n import ThumbnailGroup from '../ThumbnailGroup/ThumbnailGroup.vue';\n\n defineOptions({\n inheritAttrs: false,\n });\n\n const props = withDefaults(\n defineProps<{\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 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\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 <Vue3Carousel.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 <Vue3Carousel.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 </Vue3Carousel.Slide>\n\n <template #addons>\n <Vue3Carousel.Navigation v-if=\"props.slides.length > 1 && !props.hideNavigation\" />\n </template>\n </Vue3Carousel.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]}
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 import { CarouselInstanceRef, CarouselSlide } from './Carousel.types';\n\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 * as Vue3Carousel from 'vue3-carousel';\n\n import { t } from '../../locale';\n import Thumbnail from '../Thumbnail/Thumbnail.vue';\n import ThumbnailGroup from '../ThumbnailGroup/ThumbnailGroup.vue';\n\n defineOptions({\n inheritAttrs: false,\n });\n\n const props = withDefaults(\n defineProps<{\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 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\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 <Vue3Carousel.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 <Vue3Carousel.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-size-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 </Vue3Carousel.Slide>\n\n <template #addons>\n <Vue3Carousel.Navigation v-if=\"props.slides.length > 1 && !props.hideNavigation\" />\n </template>\n </Vue3Carousel.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]}
@@ -35,11 +35,11 @@ const H = { class: "tw-flex tw-place-items-center" }, Q = { class: "tw-flex tw-i
35
35
  pageCount: f,
36
36
  pageSize: N,
37
37
  totalDataCount: V,
38
- goPrevPage: D,
39
- goNextPage: R,
40
- isEmpty: T,
38
+ goPrevPage: z,
39
+ goNextPage: D,
40
+ isEmpty: R,
41
41
  isLoading: u
42
- } = j(y.key, y.defaults), b = M(0), c = U(() => t.radius ? t.radius : r.value ? "none" : m.value === "table" ? t.hasTabsAbove ? "rounded-top-right" : "rounded-top" : "rounded"), z = q({ currentPage: d, pageSize: N, totalItems: V });
42
+ } = j(y.key, y.defaults), b = M(0), c = U(() => t.radius ? t.radius : r.value ? "none" : m.value === "table" ? t.hasTabsAbove ? "rounded-top-right" : "rounded-top" : "rounded"), T = q({ currentPage: d, pageSize: N, totalItems: V });
43
43
  function g() {
44
44
  C("select"), b.value++;
45
45
  }
@@ -58,7 +58,7 @@ const H = { class: "tw-flex tw-place-items-center" }, Q = { class: "tw-flex tw-i
58
58
  "data-test": "stash-data-view-toolbar"
59
59
  }, [
60
60
  h("div", H, [
61
- e(E) && !e(T) ? (a(), J(G, {
61
+ e(E) && !e(R) ? (a(), J(G, {
62
62
  key: b.value,
63
63
  checked: t.allRowsSelected,
64
64
  indeterminate: t.someRowsSelected && !t.allRowsSelected,
@@ -72,7 +72,7 @@ const H = { class: "tw-flex tw-place-items-center" }, Q = { class: "tw-flex tw-i
72
72
  ])
73
73
  ]),
74
74
  e(P) ? (a(), l("div", X, [
75
- t.hidePageStats ? s("", !0) : (a(), l("span", Y, L(e(n)("ll.pageStats", e(z))), 1)),
75
+ t.hidePageStats ? s("", !0) : (a(), l("span", Y, L(e(n)("ll.pageStats", e(T))), 1)),
76
76
  e(f) > 1 ? (a(), l(O, { key: 1 }, [
77
77
  i(x, {
78
78
  icon: "",
@@ -80,7 +80,7 @@ const H = { class: "tw-flex tw-place-items-center" }, Q = { class: "tw-flex tw-i
80
80
  class: "tw-size-9 tw-p-1.5",
81
81
  "data-test": "button|prev-page",
82
82
  disabled: e(u) || e(d) === 1,
83
- onClick: o[0] || (o[0] = (I) => e(D)({ shouldEmit: !0 }))
83
+ onClick: o[0] || (o[0] = (I) => e(z)({ shouldEmit: !0 }))
84
84
  }, {
85
85
  default: v(() => [
86
86
  i(k, {
@@ -93,10 +93,10 @@ const H = { class: "tw-flex tw-place-items-center" }, Q = { class: "tw-flex tw-i
93
93
  i(x, {
94
94
  icon: "",
95
95
  "aria-label": e(n)("ll.next"),
96
- class: "tw-h-9 tw-w-9 tw-p-1.5",
96
+ class: "tw-size-9 tw-p-1.5",
97
97
  "data-test": "button|next-page",
98
98
  disabled: e(u) || e(B) || e(d) === e(f),
99
- onClick: o[1] || (o[1] = (I) => e(R)({ shouldEmit: !0 }))
99
+ onClick: o[1] || (o[1] = (I) => e(D)({ shouldEmit: !0 }))
100
100
  }, {
101
101
  default: v(() => [
102
102
  i(k, {
@@ -1 +1 @@
1
- {"version":3,"file":"DataViewToolbar.js","sources":["../src/components/DataViewToolbar/DataViewToolbar.vue"],"sourcesContent":["<script setup lang=\"ts\">\n import { computed, inject, onBeforeMount, ref } from 'vue';\n\n import usePaginationStats from '../../composables/usePaginationStats/usePaginationStats';\n import { t } from '../../locale';\n import Button from '../Button/Button.vue';\n import Checkbox from '../Checkbox/Checkbox.vue';\n import { DATA_VIEW_INJECTION } from '../DataView/DataView.vue';\n import Icon from '../Icon/Icon.vue';\n import { ToolbarRadiuses } from './DataViewToolbar.types';\n\n export interface DataViewToolbarProps {\n /**\n * When DataView has `variant=\"table\"` and Table has `is-selectable` enabled, it provides a way to flag\n * a checkbox whenever all rows are selected, just like the standalone version on TableHeaderRow.\n */\n allRowsSelected?: boolean;\n\n /**\n * Hides the page statistics (ex: \"1 - 12 of 20\") in the toolbar\n */\n hidePageStats?: boolean;\n\n /**\n * Controls the corners of DataViewToolbar with the \"border-radius\" CSS property. The default value is \"rounded\".\n */\n radius?: ToolbarRadiuses;\n\n /**\n * When DataView has variant=\"table\" and Table has `is-selectable` enabled, it provides a way to flag\n * a checkbox whenever one or more, but not all rows are selected, just like the standalone\n * version on TableHeaderRow.\n */\n someRowsSelected?: boolean;\n\n /**\n * When DataView has tabs above it, we need to remove the top left rounded corner\n */\n hasTabsAbove?: boolean;\n }\n\n const props = withDefaults(defineProps<DataViewToolbarProps>(), {\n allRowsSelected: false,\n hidePageStats: false,\n radius: undefined,\n someRowsSelected: false,\n hasTabsAbove: false,\n });\n\n const emit = defineEmits<{\n (e: 'select'): void;\n }>();\n\n const {\n isWithinModule,\n variant: dataViewVariant,\n density,\n currentPage,\n hasToolbar,\n isPaginateNextDisabled,\n isPaginationEnabled,\n isSelectable,\n pageCount,\n pageSize,\n totalDataCount,\n goPrevPage,\n goNextPage,\n isEmpty,\n isLoading,\n } = inject(DATA_VIEW_INJECTION.key, DATA_VIEW_INJECTION.defaults);\n\n const checkboxKey = ref(0);\n\n const computedRadius = computed<ToolbarRadiuses>(() => {\n if (props.radius) {\n return props.radius;\n }\n\n if (isWithinModule.value) {\n return 'none';\n }\n\n if (dataViewVariant.value === 'table') {\n if (props.hasTabsAbove) {\n return 'rounded-top-right';\n }\n\n return 'rounded-top';\n }\n\n return 'rounded';\n });\n\n const pageStats = usePaginationStats({ currentPage, pageSize, totalItems: totalDataCount });\n\n function onSelect() {\n emit('select');\n\n /**\n * In Vue (as of this writing), if a user checks a native checkbox but the v-model is `false` and does not change from `false`, then the checkbox will display as checked even though the v-model is still `false`.\n * Forcing a re-render with a `key` change allows the checkbox to stay unchecked if its v-model is still `false` and its v-model not been changed.\n * To verify that this is necessary, test the \"select all\" checkbox in the SelectionWithSomeDisabled story in Table.story.ts with and without the `key` attribute.\n */\n checkboxKey.value++;\n }\n\n onBeforeMount(() => {\n if (hasToolbar) {\n hasToolbar.value = true;\n }\n });\n</script>\n\n<template>\n <div\n class=\"stash-data-view-toolbar tw-flex tw-min-h-15 tw-items-center tw-justify-between tw-bg-white tw-py-1.5 tw-shadow\"\n :class=\"{\n 'tw-border-t tw-border-ice-200': isWithinModule,\n 'tw-rounded-tr': computedRadius === 'rounded-top-right',\n 'tw-rounded': computedRadius === 'rounded',\n 'tw-rounded-t': computedRadius === 'rounded-top',\n 'tw-mb-3': dataViewVariant !== 'table' && !isWithinModule,\n 'tw-px-0': density === 'compact',\n 'lg:tw-px-3': density === 'comfortable',\n }\"\n data-test=\"stash-data-view-toolbar\"\n >\n <div class=\"tw-flex tw-place-items-center\">\n <Checkbox\n v-if=\"isSelectable && !isEmpty\"\n :key=\"checkboxKey\"\n :checked=\"props.allRowsSelected\"\n :indeterminate=\"props.someRowsSelected && !props.allRowsSelected\"\n :title=\"t('ll.selectAll')\"\n :disabled=\"isLoading\"\n @update:indeterminate=\"onSelect\"\n @update:checked=\"onSelect\"\n />\n <div class=\"tw-flex tw-items-center tw-gap-x-2 lg:tw-gap-x-6\">\n <!-- @slot default -->\n <slot></slot>\n </div>\n </div>\n\n <!-- Pagination -->\n <div v-if=\"isPaginationEnabled\" class=\"tw-flex tw-items-center\">\n <span v-if=\"!props.hidePageStats\" class=\"tw-mr-1.5\">\n {{ t('ll.pageStats', pageStats) }}\n </span>\n <template v-if=\"pageCount > 1\">\n <Button\n icon\n :aria-label=\"t('ll.previous')\"\n class=\"tw-size-9 tw-p-1.5\"\n data-test=\"button|prev-page\"\n :disabled=\"isLoading || currentPage === 1\"\n @click=\"goPrevPage({ shouldEmit: true })\"\n >\n <Icon name=\"chevron-left\" size=\"dense\" />\n </Button>\n <Button\n icon\n :aria-label=\"t('ll.next')\"\n class=\"tw-h-9 tw-w-9 tw-p-1.5\"\n data-test=\"button|next-page\"\n :disabled=\"isLoading || isPaginateNextDisabled || currentPage === pageCount\"\n @click=\"goNextPage({ shouldEmit: true })\"\n >\n <Icon name=\"chevron-right\" size=\"dense\" />\n </Button>\n </template>\n </div>\n </div>\n</template>\n"],"names":["props","__props","emit","__emit","isWithinModule","dataViewVariant","density","currentPage","hasToolbar","isPaginateNextDisabled","isPaginationEnabled","isSelectable","pageCount","pageSize","totalDataCount","goPrevPage","goNextPage","isEmpty","isLoading","inject","DATA_VIEW_INJECTION","checkboxKey","ref","computedRadius","computed","pageStats","usePaginationStats","onSelect","onBeforeMount"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;AAyCE,UAAMA,IAAQC,GAQRC,IAAOC,GAIP;AAAA,MACJ,gBAAAC;AAAA,MACA,SAASC;AAAA,MACT,SAAAC;AAAA,MACA,aAAAC;AAAA,MACA,YAAAC;AAAA,MACA,wBAAAC;AAAA,MACA,qBAAAC;AAAA,MACA,cAAAC;AAAA,MACA,WAAAC;AAAA,MACA,UAAAC;AAAA,MACA,gBAAAC;AAAA,MACA,YAAAC;AAAA,MACA,YAAAC;AAAA,MACA,SAAAC;AAAA,MACA,WAAAC;AAAA,IACE,IAAAC,EAAOC,EAAoB,KAAKA,EAAoB,QAAQ,GAE1DC,IAAcC,EAAI,CAAC,GAEnBC,IAAiBC,EAA0B,MAC3CxB,EAAM,SACDA,EAAM,SAGXI,EAAe,QACV,SAGLC,EAAgB,UAAU,UACxBL,EAAM,eACD,sBAGF,gBAGF,SACR,GAEKyB,IAAYC,EAAmB,EAAE,aAAAnB,GAAa,UAAAM,GAAU,YAAYC,GAAgB;AAE1F,aAASa,IAAW;AAClB,MAAAzB,EAAK,QAAQ,GAODmB,EAAA;AAAA,IAAA;AAGd,WAAAO,EAAc,MAAM;AAClB,MAAIpB,MACFA,EAAW,QAAQ;AAAA,IACrB,CACD;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;"}
1
+ {"version":3,"file":"DataViewToolbar.js","sources":["../src/components/DataViewToolbar/DataViewToolbar.vue"],"sourcesContent":["<script setup lang=\"ts\">\n import { computed, inject, onBeforeMount, ref } from 'vue';\n\n import usePaginationStats from '../../composables/usePaginationStats/usePaginationStats';\n import { t } from '../../locale';\n import Button from '../Button/Button.vue';\n import Checkbox from '../Checkbox/Checkbox.vue';\n import { DATA_VIEW_INJECTION } from '../DataView/DataView.vue';\n import Icon from '../Icon/Icon.vue';\n import { ToolbarRadiuses } from './DataViewToolbar.types';\n\n export interface DataViewToolbarProps {\n /**\n * When DataView has `variant=\"table\"` and Table has `is-selectable` enabled, it provides a way to flag\n * a checkbox whenever all rows are selected, just like the standalone version on TableHeaderRow.\n */\n allRowsSelected?: boolean;\n\n /**\n * Hides the page statistics (ex: \"1 - 12 of 20\") in the toolbar\n */\n hidePageStats?: boolean;\n\n /**\n * Controls the corners of DataViewToolbar with the \"border-radius\" CSS property. The default value is \"rounded\".\n */\n radius?: ToolbarRadiuses;\n\n /**\n * When DataView has variant=\"table\" and Table has `is-selectable` enabled, it provides a way to flag\n * a checkbox whenever one or more, but not all rows are selected, just like the standalone\n * version on TableHeaderRow.\n */\n someRowsSelected?: boolean;\n\n /**\n * When DataView has tabs above it, we need to remove the top left rounded corner\n */\n hasTabsAbove?: boolean;\n }\n\n const props = withDefaults(defineProps<DataViewToolbarProps>(), {\n allRowsSelected: false,\n hidePageStats: false,\n radius: undefined,\n someRowsSelected: false,\n hasTabsAbove: false,\n });\n\n const emit = defineEmits<{\n (e: 'select'): void;\n }>();\n\n const {\n isWithinModule,\n variant: dataViewVariant,\n density,\n currentPage,\n hasToolbar,\n isPaginateNextDisabled,\n isPaginationEnabled,\n isSelectable,\n pageCount,\n pageSize,\n totalDataCount,\n goPrevPage,\n goNextPage,\n isEmpty,\n isLoading,\n } = inject(DATA_VIEW_INJECTION.key, DATA_VIEW_INJECTION.defaults);\n\n const checkboxKey = ref(0);\n\n const computedRadius = computed<ToolbarRadiuses>(() => {\n if (props.radius) {\n return props.radius;\n }\n\n if (isWithinModule.value) {\n return 'none';\n }\n\n if (dataViewVariant.value === 'table') {\n if (props.hasTabsAbove) {\n return 'rounded-top-right';\n }\n\n return 'rounded-top';\n }\n\n return 'rounded';\n });\n\n const pageStats = usePaginationStats({ currentPage, pageSize, totalItems: totalDataCount });\n\n function onSelect() {\n emit('select');\n\n /**\n * In Vue (as of this writing), if a user checks a native checkbox but the v-model is `false` and does not change from `false`, then the checkbox will display as checked even though the v-model is still `false`.\n * Forcing a re-render with a `key` change allows the checkbox to stay unchecked if its v-model is still `false` and its v-model not been changed.\n * To verify that this is necessary, test the \"select all\" checkbox in the SelectionWithSomeDisabled story in Table.story.ts with and without the `key` attribute.\n */\n checkboxKey.value++;\n }\n\n onBeforeMount(() => {\n if (hasToolbar) {\n hasToolbar.value = true;\n }\n });\n</script>\n\n<template>\n <div\n class=\"stash-data-view-toolbar tw-flex tw-min-h-15 tw-items-center tw-justify-between tw-bg-white tw-py-1.5 tw-shadow\"\n :class=\"{\n 'tw-border-t tw-border-ice-200': isWithinModule,\n 'tw-rounded-tr': computedRadius === 'rounded-top-right',\n 'tw-rounded': computedRadius === 'rounded',\n 'tw-rounded-t': computedRadius === 'rounded-top',\n 'tw-mb-3': dataViewVariant !== 'table' && !isWithinModule,\n 'tw-px-0': density === 'compact',\n 'lg:tw-px-3': density === 'comfortable',\n }\"\n data-test=\"stash-data-view-toolbar\"\n >\n <div class=\"tw-flex tw-place-items-center\">\n <Checkbox\n v-if=\"isSelectable && !isEmpty\"\n :key=\"checkboxKey\"\n :checked=\"props.allRowsSelected\"\n :indeterminate=\"props.someRowsSelected && !props.allRowsSelected\"\n :title=\"t('ll.selectAll')\"\n :disabled=\"isLoading\"\n @update:indeterminate=\"onSelect\"\n @update:checked=\"onSelect\"\n />\n <div class=\"tw-flex tw-items-center tw-gap-x-2 lg:tw-gap-x-6\">\n <!-- @slot default -->\n <slot></slot>\n </div>\n </div>\n\n <!-- Pagination -->\n <div v-if=\"isPaginationEnabled\" class=\"tw-flex tw-items-center\">\n <span v-if=\"!props.hidePageStats\" class=\"tw-mr-1.5\">\n {{ t('ll.pageStats', pageStats) }}\n </span>\n <template v-if=\"pageCount > 1\">\n <Button\n icon\n :aria-label=\"t('ll.previous')\"\n class=\"tw-size-9 tw-p-1.5\"\n data-test=\"button|prev-page\"\n :disabled=\"isLoading || currentPage === 1\"\n @click=\"goPrevPage({ shouldEmit: true })\"\n >\n <Icon name=\"chevron-left\" size=\"dense\" />\n </Button>\n <Button\n icon\n :aria-label=\"t('ll.next')\"\n class=\"tw-size-9 tw-p-1.5\"\n data-test=\"button|next-page\"\n :disabled=\"isLoading || isPaginateNextDisabled || currentPage === pageCount\"\n @click=\"goNextPage({ shouldEmit: true })\"\n >\n <Icon name=\"chevron-right\" size=\"dense\" />\n </Button>\n </template>\n </div>\n </div>\n</template>\n"],"names":["props","__props","emit","__emit","isWithinModule","dataViewVariant","density","currentPage","hasToolbar","isPaginateNextDisabled","isPaginationEnabled","isSelectable","pageCount","pageSize","totalDataCount","goPrevPage","goNextPage","isEmpty","isLoading","inject","DATA_VIEW_INJECTION","checkboxKey","ref","computedRadius","computed","pageStats","usePaginationStats","onSelect","onBeforeMount"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;AAyCE,UAAMA,IAAQC,GAQRC,IAAOC,GAIP;AAAA,MACJ,gBAAAC;AAAA,MACA,SAASC;AAAA,MACT,SAAAC;AAAA,MACA,aAAAC;AAAA,MACA,YAAAC;AAAA,MACA,wBAAAC;AAAA,MACA,qBAAAC;AAAA,MACA,cAAAC;AAAA,MACA,WAAAC;AAAA,MACA,UAAAC;AAAA,MACA,gBAAAC;AAAA,MACA,YAAAC;AAAA,MACA,YAAAC;AAAA,MACA,SAAAC;AAAA,MACA,WAAAC;AAAA,IACE,IAAAC,EAAOC,EAAoB,KAAKA,EAAoB,QAAQ,GAE1DC,IAAcC,EAAI,CAAC,GAEnBC,IAAiBC,EAA0B,MAC3CxB,EAAM,SACDA,EAAM,SAGXI,EAAe,QACV,SAGLC,EAAgB,UAAU,UACxBL,EAAM,eACD,sBAGF,gBAGF,SACR,GAEKyB,IAAYC,EAAmB,EAAE,aAAAnB,GAAa,UAAAM,GAAU,YAAYC,GAAgB;AAE1F,aAASa,IAAW;AAClB,MAAAzB,EAAK,QAAQ,GAODmB,EAAA;AAAA,IAAA;AAGd,WAAAO,EAAc,MAAM;AAClB,MAAIpB,MACFA,EAAW,QAAQ;AAAA,IACrB,CACD;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;"}
@@ -1,4 +1,4 @@
1
- import { defineComponent as n, ref as u, computed as r, createElementBlock as c, openBlock as a, createTextVNode as f, createBlock as i, createCommentVNode as h, toDisplayString as m, withCtx as p, createVNode as d, normalizeClass as g } from "vue";
1
+ import { defineComponent as n, ref as u, computed as r, createElementBlock as c, openBlock as a, createTextVNode as i, createBlock as f, createCommentVNode as m, toDisplayString as h, withCtx as p, createVNode as d, normalizeClass as g } from "vue";
2
2
  import x from "./Button.js";
3
3
  import C from "./Icon.js";
4
4
  import b from "./utils/obfuscateText.js";
@@ -25,10 +25,10 @@ const k = {
25
25
  position: t.position
26
26
  }));
27
27
  return (w, o) => (a(), c("span", k, [
28
- f(m(l.value) + " ", 1),
29
- t.showToggle ? (a(), i(x, {
28
+ i(h(l.value) + " ", 1),
29
+ t.showToggle ? (a(), f(x, {
30
30
  key: 0,
31
- class: "tw-ml-1 tw-h-auto tw-w-auto tw-p-0",
31
+ class: "tw-ml-1 tw-size-auto tw-p-0",
32
32
  icon: "",
33
33
  type: "button",
34
34
  onClick: o[0] || (o[0] = (T) => e.value = !e.value)
@@ -41,7 +41,7 @@ const k = {
41
41
  }, null, 8, ["name", "class", "data-test"])
42
42
  ]),
43
43
  _: 1
44
- })) : h("", !0)
44
+ })) : m("", !0)
45
45
  ]));
46
46
  }
47
47
  });
@@ -1 +1 @@
1
- {"version":3,"file":"ObfuscateText.js","sources":["../src/components/ObfuscateText/ObfuscateText.vue"],"sourcesContent":["<script setup lang=\"ts\">\n import { computed, ref } from 'vue';\n\n import Button from '../Button/Button.vue';\n import Icon from '../Icon/Icon.vue';\n\n defineOptions({ name: 'll-obfuscate-text' });\n\n import obfuscateText, { ObfuscateTextOptions } from '../../utils/obfuscateText';\n\n export interface ObfuscateTextProps extends ObfuscateTextOptions {\n /**\n * The full text\n */\n text: string;\n\n /**\n * Whether to obfuscate all characters.\n * @deprecated omit the lengthToKeep prop to achieve the same result\n */\n obfuscateAll?: boolean;\n\n /**\n * Displays a button for toggling text visibility\n */\n showToggle?: boolean;\n }\n\n const isFullTextVisible = ref(false);\n\n const props = withDefaults(defineProps<ObfuscateTextProps>(), {\n maskChar: '•',\n maskCharCount: 10,\n lengthToKeep: 0,\n position: 'start',\n obfuscateAll: false,\n showToggle: false,\n });\n\n const obfuscatedText = computed(() => {\n if (props.showToggle && isFullTextVisible.value) {\n return props.text;\n }\n\n if (props.obfuscateAll) {\n return props.maskChar.repeat(props.maskCharCount);\n }\n\n return obfuscateText(props.text, {\n maskChar: props.maskChar,\n maskCharCount: props.maskCharCount,\n lengthToKeep: props.lengthToKeep,\n position: props.position,\n });\n });\n</script>\n\n<template>\n <span class=\"stash-obfuscate-text\" data-test=\"stash-obfuscate-text\">\n {{ obfuscatedText }}\n <Button\n v-if=\"props.showToggle\"\n class=\"tw-ml-1 tw-h-auto tw-w-auto tw-p-0\"\n icon\n type=\"button\"\n @click=\"isFullTextVisible = !isFullTextVisible\"\n >\n <Icon\n :name=\"isFullTextVisible ? 'hide' : 'show'\"\n class=\"tw-cursor-pointer\"\n :class=\"isFullTextVisible ? 'stash-obfuscate-text__hide-toggle-icon' : 'stash-obfuscate-text__show-toggle-icon'\"\n :data-test=\"\n isFullTextVisible ? 'stash-obfuscate-text|hide-toggle-icon' : 'stash-obfuscate-text|show-toggle-icon'\n \"\n />\n </Button>\n </span>\n</template>\n"],"names":["isFullTextVisible","ref","props","__props","obfuscatedText","computed","obfuscateText"],"mappings":";;;;;;;;;;;;;;;;;;;;AA4BQ,UAAAA,IAAoBC,EAAI,EAAK,GAE7BC,IAAQC,GASRC,IAAiBC,EAAS,MAC1BH,EAAM,cAAcF,EAAkB,QACjCE,EAAM,OAGXA,EAAM,eACDA,EAAM,SAAS,OAAOA,EAAM,aAAa,IAG3CI,EAAcJ,EAAM,MAAM;AAAA,MAC/B,UAAUA,EAAM;AAAA,MAChB,eAAeA,EAAM;AAAA,MACrB,cAAcA,EAAM;AAAA,MACpB,UAAUA,EAAM;AAAA,IAAA,CACjB,CACF;;;;;;;;;;;;;;;;;;;;;;"}
1
+ {"version":3,"file":"ObfuscateText.js","sources":["../src/components/ObfuscateText/ObfuscateText.vue"],"sourcesContent":["<script setup lang=\"ts\">\n import { computed, ref } from 'vue';\n\n import Button from '../Button/Button.vue';\n import Icon from '../Icon/Icon.vue';\n\n defineOptions({ name: 'll-obfuscate-text' });\n\n import obfuscateText, { ObfuscateTextOptions } from '../../utils/obfuscateText';\n\n export interface ObfuscateTextProps extends ObfuscateTextOptions {\n /**\n * The full text\n */\n text: string;\n\n /**\n * Whether to obfuscate all characters.\n * @deprecated omit the lengthToKeep prop to achieve the same result\n */\n obfuscateAll?: boolean;\n\n /**\n * Displays a button for toggling text visibility\n */\n showToggle?: boolean;\n }\n\n const isFullTextVisible = ref(false);\n\n const props = withDefaults(defineProps<ObfuscateTextProps>(), {\n maskChar: '•',\n maskCharCount: 10,\n lengthToKeep: 0,\n position: 'start',\n obfuscateAll: false,\n showToggle: false,\n });\n\n const obfuscatedText = computed(() => {\n if (props.showToggle && isFullTextVisible.value) {\n return props.text;\n }\n\n if (props.obfuscateAll) {\n return props.maskChar.repeat(props.maskCharCount);\n }\n\n return obfuscateText(props.text, {\n maskChar: props.maskChar,\n maskCharCount: props.maskCharCount,\n lengthToKeep: props.lengthToKeep,\n position: props.position,\n });\n });\n</script>\n\n<template>\n <span class=\"stash-obfuscate-text\" data-test=\"stash-obfuscate-text\">\n {{ obfuscatedText }}\n <Button\n v-if=\"props.showToggle\"\n class=\"tw-ml-1 tw-size-auto tw-p-0\"\n icon\n type=\"button\"\n @click=\"isFullTextVisible = !isFullTextVisible\"\n >\n <Icon\n :name=\"isFullTextVisible ? 'hide' : 'show'\"\n class=\"tw-cursor-pointer\"\n :class=\"isFullTextVisible ? 'stash-obfuscate-text__hide-toggle-icon' : 'stash-obfuscate-text__show-toggle-icon'\"\n :data-test=\"\n isFullTextVisible ? 'stash-obfuscate-text|hide-toggle-icon' : 'stash-obfuscate-text|show-toggle-icon'\n \"\n />\n </Button>\n </span>\n</template>\n"],"names":["isFullTextVisible","ref","props","__props","obfuscatedText","computed","obfuscateText"],"mappings":";;;;;;;;;;;;;;;;;;;;AA4BQ,UAAAA,IAAoBC,EAAI,EAAK,GAE7BC,IAAQC,GASRC,IAAiBC,EAAS,MAC1BH,EAAM,cAAcF,EAAkB,QACjCE,EAAM,OAGXA,EAAM,eACDA,EAAM,SAAS,OAAOA,EAAM,aAAa,IAG3CI,EAAcJ,EAAM,MAAM;AAAA,MAC/B,UAAUA,EAAM;AAAA,MAChB,eAAeA,EAAM;AAAA,MACrB,cAAcA,EAAM;AAAA,MACpB,UAAUA,EAAM;AAAA,IAAA,CACjB,CACF;;;;;;;;;;;;;;;;;;;;;;"}