@shopito/design-system-fe 0.1.17 → 0.1.18

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/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","names":["isObject","extend","getComputedStyle","isObject","extend","Swiper","extend","Pagination"],"sources":["../src/components/common/Container/Container.tsx","../src/components/common/Main/Main.tsx","../node_modules/classnames/index.js","../src/components/common/Button/Button.tsx","../src/components/common/LoadingSpin/LoadingSpin.tsx","../src/components/common/IconButton/IconButton.tsx","../src/components/common/Input/Input.tsx","../src/components/common/Select/Select.tsx","../src/components/common/Typography/Heading.tsx","../src/components/common/Typography/Text.tsx","../src/components/common/Badge/Badge.tsx","../src/components/common/Card/Card.tsx","../src/components/common/Spinner/Spinner.tsx","../src/components/common/Alert/Alert.tsx","../src/components/common/Modal/Modal.tsx","../src/components/common/Checkbox/Checkbox.tsx","../src/components/common/Toggle/Toggle.tsx","../src/components/common/Avatar/Avatar.tsx","../src/components/common/Stack/Stack.tsx","../src/components/common/Grid/Grid.tsx","../src/components/common/QuantityInput/QuantityInput.tsx","../src/components/common/Pagination/Pagination.tsx","../node_modules/swiper/shared/ssr-window.esm.mjs","../node_modules/swiper/shared/utils.mjs","../node_modules/swiper/shared/swiper-core.mjs","../node_modules/swiper/shared/update-swiper.mjs","../node_modules/swiper/shared/update-on-virtual-data.mjs","../node_modules/swiper/swiper-react.mjs","../node_modules/swiper/shared/create-element-if-not-defined.mjs","../node_modules/swiper/modules/navigation.mjs","../node_modules/swiper/shared/classes-to-selector.mjs","../node_modules/swiper/modules/pagination.mjs","../node_modules/swiper/modules/autoplay.mjs","../src/components/common/Carousel/Carousel.tsx","../src/components/Header/Header.tsx","../src/components/CategoryTree/CategoryTree.tsx","../src/components/MegaMenu/MegaMenu.tsx","../src/components/BannerCarousel/BannerCarousel.tsx","../src/components/ProductCard/ProductCard.tsx","../src/components/ProductGrid/ProductGrid.tsx","../src/components/CallToAction/CallToAction.tsx","../src/components/Footer/Footer.tsx"],"sourcesContent":["import { type ReactNode } from 'react';\n\nexport interface ContainerProps {\n children: ReactNode;\n}\n\nexport const Container = ({ children }: ContainerProps) => {\n return <div className=\"container\">{children}</div>;\n};\n","import { type ReactNode } from 'react';\nimport { Container } from '../Container';\n\nexport interface MainProps {\n children: ReactNode;\n}\n\nexport const Main = ({ children }: MainProps) => {\n return (\n <main className=\"main\">\n <Container>{children}</Container>\n </main>\n );\n};\n","/*!\n\tCopyright (c) 2018 Jed Watson.\n\tLicensed under the MIT License (MIT), see\n\thttp://jedwatson.github.io/classnames\n*/\n/* global define */\n\n(function () {\n\t'use strict';\n\n\tvar hasOwn = {}.hasOwnProperty;\n\n\tfunction classNames () {\n\t\tvar classes = '';\n\n\t\tfor (var i = 0; i < arguments.length; i++) {\n\t\t\tvar arg = arguments[i];\n\t\t\tif (arg) {\n\t\t\t\tclasses = appendClass(classes, parseValue(arg));\n\t\t\t}\n\t\t}\n\n\t\treturn classes;\n\t}\n\n\tfunction parseValue (arg) {\n\t\tif (typeof arg === 'string' || typeof arg === 'number') {\n\t\t\treturn arg;\n\t\t}\n\n\t\tif (typeof arg !== 'object') {\n\t\t\treturn '';\n\t\t}\n\n\t\tif (Array.isArray(arg)) {\n\t\t\treturn classNames.apply(null, arg);\n\t\t}\n\n\t\tif (arg.toString !== Object.prototype.toString && !arg.toString.toString().includes('[native code]')) {\n\t\t\treturn arg.toString();\n\t\t}\n\n\t\tvar classes = '';\n\n\t\tfor (var key in arg) {\n\t\t\tif (hasOwn.call(arg, key) && arg[key]) {\n\t\t\t\tclasses = appendClass(classes, key);\n\t\t\t}\n\t\t}\n\n\t\treturn classes;\n\t}\n\n\tfunction appendClass (value, newClass) {\n\t\tif (!newClass) {\n\t\t\treturn value;\n\t\t}\n\t\n\t\tif (value) {\n\t\t\treturn value + ' ' + newClass;\n\t\t}\n\t\n\t\treturn value + newClass;\n\t}\n\n\tif (typeof module !== 'undefined' && module.exports) {\n\t\tclassNames.default = classNames;\n\t\tmodule.exports = classNames;\n\t} else if (typeof define === 'function' && typeof define.amd === 'object' && define.amd) {\n\t\t// register as 'classnames', consistent with npm package name\n\t\tdefine('classnames', [], function () {\n\t\t\treturn classNames;\n\t\t});\n\t} else {\n\t\twindow.classNames = classNames;\n\t}\n}());\n","import { forwardRef } from 'react';\nimport type { ButtonHTMLAttributes } from 'react';\nimport clx from 'classnames';\n\ntype Variant = 'primary' | 'secondary' | 'outline' | 'ghost' | 'danger';\ntype Size = 'xs' | 'sm' | 'md' | 'lg';\n\nexport interface ButtonProps extends ButtonHTMLAttributes<HTMLButtonElement> {\n variant?: Variant;\n size?: Size;\n loading?: boolean;\n fullWidth?: boolean;\n}\n\n// const variantClasses: Record<Variant, string> = {\n// primary:\n// 'bg-primary-600 text-white hover:bg-primary-700 active:bg-primary-800 focus-visible:ring-primary-500',\n// secondary:\n// 'bg-gray-100 text-gray-900 hover:bg-gray-200 active:bg-gray-300 focus-visible:ring-gray-400',\n// outline:\n// 'border border-gray-300 bg-white text-gray-700 hover:bg-gray-50 active:bg-gray-100 focus-visible:ring-gray-400',\n// ghost:\n// 'bg-transparent text-gray-700 hover:bg-gray-100 active:bg-gray-200 focus-visible:ring-gray-400',\n// danger:\n// 'bg-danger-600 text-white hover:bg-danger-700 active:bg-danger-800 focus-visible:ring-danger-500',\n// };\n\n// const sizeClasses: Record<Size, string> = {\n// xs: 'h-7 px-2.5 text-xs gap-1',\n// sm: 'h-8 px-3 text-sm gap-1.5',\n// md: 'h-10 px-4 text-sm gap-2',\n// lg: 'h-11 px-5 text-base gap-2',\n// };\n\nexport const Button = forwardRef<HTMLButtonElement, ButtonProps>(\n (\n {\n variant = 'primary',\n size = 'md',\n loading = false,\n fullWidth = false,\n disabled,\n children,\n className = '',\n ...props\n },\n ref,\n ) => {\n const isDisabled = disabled || loading;\n\n return (\n <button\n ref={ref}\n disabled={isDisabled}\n className={clx(\n 'btn',\n variant && `btn-${variant}`,\n size && `btn-${size}`,\n fullWidth && 'w-full',\n className,\n )}\n {...props}\n >\n {loading && (\n <svg\n className=\"animate-spin h-4 w-4 shrink-0\"\n xmlns=\"http://www.w3.org/2000/svg\"\n fill=\"none\"\n viewBox=\"0 0 24 24\"\n >\n <circle\n className=\"opacity-25\"\n cx=\"12\"\n cy=\"12\"\n r=\"10\"\n stroke=\"currentColor\"\n strokeWidth=\"4\"\n />\n <path\n className=\"opacity-75\"\n fill=\"currentColor\"\n d=\"M4 12a8 8 0 018-8V0C5.373 0 0 5.373 0 12h4z\"\n />\n </svg>\n )}\n {children}\n </button>\n );\n },\n);\n\nButton.displayName = 'Button';\n","import clx from 'classnames';\n\ntype Size = 'xs' | 'sm' | 'md' | 'lg';\n\nexport interface LoadingSpinProps {\n size: Size;\n}\n\nexport const LoadingSpin = ({ size = 'md' }: LoadingSpinProps) => {\n return (\n <svg\n className={clx('loading-spin', `loading-spin-${size}`)}\n xmlns=\"http://www.w3.org/2000/svg\"\n fill=\"none\"\n viewBox=\"0 0 24 24\"\n >\n <circle\n className=\"opacity-25\"\n cx=\"12\"\n cy=\"12\"\n r=\"10\"\n stroke=\"currentColor\"\n strokeWidth=\"4\"\n />\n <path\n className=\"opacity-75\"\n fill=\"currentColor\"\n d=\"M4 12a8 8 0 018-8V0C5.373 0 0 5.373 0 12h4z\"\n />\n </svg>\n );\n};\n","import { forwardRef } from 'react';\nimport type { ButtonHTMLAttributes, ReactNode } from 'react';\nimport clx from 'classnames';\nimport { LoadingSpin } from '../LoadingSpin';\n\ntype Variant = 'primary' | 'secondary' | 'outline' | 'ghost' | 'danger';\ntype Size = 'xs' | 'sm' | 'md' | 'lg';\n\nexport interface IconButtonProps extends ButtonHTMLAttributes<HTMLButtonElement> {\n icon: ReactNode;\n label: string;\n variant?: Variant;\n size?: Size;\n loading?: boolean;\n}\n\nexport const IconButton = forwardRef<HTMLButtonElement, IconButtonProps>(\n (\n {\n icon,\n label,\n variant = 'ghost',\n size = 'md',\n loading = false,\n disabled,\n className = '',\n ...props\n },\n ref,\n ) => {\n const isDisabled = disabled || loading;\n\n return (\n <button\n ref={ref}\n disabled={isDisabled}\n aria-label={label}\n title={label}\n className={clx(\n 'icon-button',\n `icon-button-${variant}`,\n `icon-button-${size}`,\n className,\n )}\n {...props}\n >\n {loading ? <LoadingSpin size={size} /> : icon}\n </button>\n );\n },\n);\n\nIconButton.displayName = 'IconButton';\n","import { forwardRef } from 'react';\nimport type { InputHTMLAttributes, ReactNode } from 'react';\nimport clx from 'classnames';\n\nexport interface InputProps extends InputHTMLAttributes<HTMLInputElement> {\n label?: string;\n error?: string;\n hint?: string;\n leftIcon?: ReactNode;\n rightIcon?: ReactNode;\n}\n\nexport const Input = forwardRef<HTMLInputElement, InputProps>(\n (\n { label, error, hint, leftIcon, rightIcon, className = '', id, ...props },\n ref,\n ) => {\n const inputId = id ?? label?.toLowerCase().replace(/\\s+/g, '-');\n\n return (\n <div className={'w-full'}>\n {label && (\n <label htmlFor={inputId} className=\"input-label\">\n {label}\n </label>\n )}\n <div className=\"relative\">\n {leftIcon && <span className=\"left-icon\">{leftIcon}</span>}\n <input\n ref={ref}\n id={inputId}\n className={clx(\n 'input',\n error && 'has-error',\n !!leftIcon && 'with-left-icon',\n !!rightIcon && 'with-right-icon',\n 'w-full',\n className,\n )}\n {...props}\n />\n {rightIcon && <span className=\"right-icon\">{rightIcon}</span>}\n </div>\n {(error || hint) && (\n <p className={clx('helper-text', error && 'has-error')}>\n {error ?? hint}\n </p>\n )}\n </div>\n );\n },\n);\n\nInput.displayName = 'Input';\n","import { forwardRef } from 'react';\nimport type { SelectHTMLAttributes } from 'react';\nimport clx from 'classnames';\n\nexport interface SelectOption {\n value: string;\n label: string;\n disabled?: boolean;\n}\n\nexport interface SelectProps extends SelectHTMLAttributes<HTMLSelectElement> {\n label?: string;\n error?: string;\n hint?: string;\n options: SelectOption[];\n placeholder?: string;\n}\n\nexport const Select = forwardRef<HTMLSelectElement, SelectProps>(\n (\n { label, error, hint, options, placeholder, className = '', id, ...props },\n ref,\n ) => {\n const selectId = id ?? label?.toLowerCase().replace(/\\s+/g, '-');\n\n return (\n <div className={clx('select-wrapper', 'w-full')}>\n {label && (\n <label htmlFor={selectId} className=\"select-label\">\n {label}\n </label>\n )}\n <div className=\"relative\">\n <select\n ref={ref}\n id={selectId}\n className={clx('select', 'w-full', error && 'has-error', className)}\n {...props}\n >\n {placeholder && (\n <option value=\"\" disabled>\n {placeholder}\n </option>\n )}\n {options.map((opt) => (\n <option key={opt.value} value={opt.value} disabled={opt.disabled}>\n {opt.label}\n </option>\n ))}\n </select>\n {/* Chevron icon */}\n <span className=\"select-chevron-icon\">\n <svg\n xmlns=\"http://www.w3.org/2000/svg\"\n fill=\"none\"\n viewBox=\"0 0 24 24\"\n strokeWidth={2}\n stroke=\"currentColor\"\n className=\"w-4 h-4\"\n >\n <path\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n d=\"M19.5 8.25l-7.5 7.5-7.5-7.5\"\n />\n </svg>\n </span>\n </div>\n {(error || hint) && (\n <p className={clx('select-helper', error && 'has-error')}>\n {error ?? hint}\n </p>\n )}\n </div>\n );\n },\n);\n\nSelect.displayName = 'Select';\n","import type { HTMLAttributes, ReactNode } from 'react';\nimport cx from 'classnames';\nimport type { Color } from './Text';\n\ntype HeadingLevel = 'h1' | 'h2' | 'h3' | 'h4' | 'h5' | 'h6';\n\ninterface HeadingProps extends HTMLAttributes<HTMLHeadingElement> {\n as?: HeadingLevel;\n level?: 1 | 2 | 3 | 4 | 5 | 6;\n color?: Color;\n children: ReactNode;\n}\n\nexport const Heading = ({\n as,\n level = 1,\n color = 'default',\n className = '',\n children,\n ...props\n}: HeadingProps) => {\n const Tag = as ?? (`h${level}` as HeadingLevel);\n\n return (\n <Tag\n className={cx(`text-color-${color}`, `heading-size-${level}`, className)}\n {...props}\n >\n {children}\n </Tag>\n );\n};\n","import type { ElementType, HTMLAttributes, ReactNode } from 'react';\nimport cx from 'classnames';\n\ntype TextVariant = 'body' | 'body-sm' | 'caption' | 'overline' | 'code';\n\nexport type Color =\n | 'default'\n | 'muted'\n | 'primary'\n | 'success'\n | 'warning'\n | 'danger'\n | 'inherit';\n\ninterface TextProps extends HTMLAttributes<HTMLElement> {\n variant?: TextVariant;\n color?: Color;\n as?: ElementType;\n children: ReactNode;\n}\n\nexport const Text = ({\n variant = 'body',\n color = 'default',\n as: Tag = 'p',\n className = '',\n children,\n ...props\n}: TextProps) => {\n return (\n <Tag\n className={cx(\n `text-color-${color}`,\n `text-variant-${variant}`,\n className,\n )}\n {...props}\n >\n {children}\n </Tag>\n );\n};\n","import type { HTMLAttributes, ReactNode } from 'react';\nimport clx from 'classnames';\n\ntype BadgeVariant =\n | 'default'\n | 'primary'\n | 'success'\n | 'warning'\n | 'danger'\n | 'outline';\n\ntype BadgeSize = 'sm' | 'md';\n\nexport interface BadgeProps extends HTMLAttributes<HTMLSpanElement> {\n variant?: BadgeVariant;\n size?: BadgeSize;\n dot?: boolean;\n children: ReactNode;\n}\n\nexport function Badge({\n variant = 'default',\n size = 'md',\n dot = false,\n className,\n children,\n ...props\n}: BadgeProps) {\n return (\n <span\n className={clx('badge', `badge-${variant}`, `badge-${size}`, className)}\n {...props}\n >\n {dot && <span className={clx('badge-dot', `badge-dot-${variant}`)} />}\n {children}\n </span>\n );\n}\n","import type { HTMLAttributes, ReactNode } from 'react'\n\nexport interface CardProps extends HTMLAttributes<HTMLDivElement> {\n children: ReactNode\n padding?: 'none' | 'sm' | 'md' | 'lg'\n shadow?: boolean\n border?: boolean\n}\n\nexport interface CardHeaderProps extends HTMLAttributes<HTMLDivElement> {\n children: ReactNode\n}\n\nexport interface CardBodyProps extends HTMLAttributes<HTMLDivElement> {\n children: ReactNode\n}\n\nexport interface CardFooterProps extends HTMLAttributes<HTMLDivElement> {\n children: ReactNode\n}\n\nconst paddingClasses = {\n none: '',\n sm: 'p-4',\n md: 'p-6',\n lg: 'p-8',\n}\n\nexport function Card({\n children,\n padding = 'md',\n shadow = true,\n border = true,\n className = '',\n ...props\n}: CardProps) {\n return (\n <div\n className={[\n 'bg-white rounded-xl overflow-hidden',\n border ? 'border border-gray-200' : '',\n shadow ? 'shadow-sm' : '',\n paddingClasses[padding],\n className,\n ]\n .filter(Boolean)\n .join(' ')}\n {...props}\n >\n {children}\n </div>\n )\n}\n\nexport function CardHeader({ children, className = '', ...props }: CardHeaderProps) {\n return (\n <div\n className={['px-6 py-4 border-b border-gray-100', className].filter(Boolean).join(' ')}\n {...props}\n >\n {children}\n </div>\n )\n}\n\nexport function CardBody({ children, className = '', ...props }: CardBodyProps) {\n return (\n <div className={['p-6', className].filter(Boolean).join(' ')} {...props}>\n {children}\n </div>\n )\n}\n\nexport function CardFooter({ children, className = '', ...props }: CardFooterProps) {\n return (\n <div\n className={[\n 'px-6 py-4 border-t border-gray-100 bg-gray-50',\n className,\n ]\n .filter(Boolean)\n .join(' ')}\n {...props}\n >\n {children}\n </div>\n )\n}\n","import type { HTMLAttributes } from 'react';\nimport clx from 'classnames';\n\ntype SpinnerSize = 'xs' | 'sm' | 'md' | 'lg' | 'xl';\ntype SpinnerColor = 'primary' | 'white' | 'gray';\n\nexport interface SpinnerProps extends HTMLAttributes<HTMLSpanElement> {\n size?: SpinnerSize;\n color?: SpinnerColor;\n label?: string;\n}\n\nexport function Spinner({\n size = 'md',\n color = 'primary',\n label = 'Loading…',\n className = '',\n ...props\n}: SpinnerProps) {\n return (\n <span\n role=\"status\"\n aria-label={label}\n className={clx('spinner-wrapper', className)}\n {...props}\n >\n <span className={clx('spinner', `spinner-${size}`, `spinner-${color}`)} />\n <span className=\"sr-only\">{label}</span>\n </span>\n );\n}\n","import type { HTMLAttributes, ReactNode } from 'react';\nimport clx from 'classnames';\n\ntype AlertVariant = 'info' | 'success' | 'warning' | 'danger';\n\nexport interface AlertProps extends HTMLAttributes<HTMLDivElement> {\n variant?: AlertVariant;\n title?: string;\n children: ReactNode;\n onClose?: () => void;\n}\n\nconst variantIcon: Record<AlertVariant, ReactNode> = {\n info: (\n <path\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n d=\"M11.25 11.25l.041-.02a.75.75 0 011.063.852l-.708 2.836a.75.75 0 001.063.853l.041-.021M21 12a9 9 0 11-18 0 9 9 0 0118 0zm-9-3.75h.008v.008H12V8.25z\"\n />\n ),\n success: (\n <path\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n d=\"M9 12.75L11.25 15 15 9.75M21 12a9 9 0 11-18 0 9 9 0 0118 0z\"\n />\n ),\n warning: (\n <path\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n d=\"M12 9v3.75m-9.303 3.376c-.866 1.5.217 3.374 1.948 3.374h14.71c1.73 0 2.813-1.874 1.948-3.374L13.949 3.378c-.866-1.5-3.032-1.5-3.898 0L2.697 16.126zM12 15.75h.007v.008H12v-.008z\"\n />\n ),\n danger: (\n <path\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n d=\"M12 9v3.75m9-.75a9 9 0 11-18 0 9 9 0 0118 0zm-9 3.75h.008v.008H12v-.008z\"\n />\n ),\n};\n\nexport function Alert({\n variant = 'info',\n title,\n children,\n onClose,\n className = '',\n ...props\n}: AlertProps) {\n return (\n <div\n role=\"alert\"\n className={clx('alert', `alert-${variant}`, 'w-full', className)}\n {...props}\n >\n <svg\n xmlns=\"http://www.w3.org/2000/svg\"\n fill=\"none\"\n viewBox=\"0 0 24 24\"\n strokeWidth={1.5}\n stroke=\"currentColor\"\n className={clx('alert-icon', `alert-icon-${variant}`)}\n >\n {variantIcon[variant]}\n </svg>\n <div className=\"flex-1 min-w-0\">\n {title && <p className=\"alert-title\">{title}</p>}\n <div className=\"alert-text\">{children}</div>\n </div>\n {onClose && (\n <button\n onClick={onClose}\n className=\"alert-close-btn\"\n aria-label=\"Close\"\n >\n <svg\n xmlns=\"http://www.w3.org/2000/svg\"\n fill=\"none\"\n viewBox=\"0 0 24 24\"\n strokeWidth={1.5}\n stroke=\"currentColor\"\n className=\"w-4 h-4\"\n >\n <path\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n d=\"M6 18L18 6M6 6l12 12\"\n />\n </svg>\n </button>\n )}\n </div>\n );\n}\n","import { useEffect, useRef } from 'react'\nimport type { ReactNode } from 'react'\nimport { createPortal } from 'react-dom'\n\ntype ModalSize = 'sm' | 'md' | 'lg' | 'xl' | 'full'\n\nexport interface ModalProps {\n open: boolean\n onClose: () => void\n title?: string\n children: ReactNode\n footer?: ReactNode\n size?: ModalSize\n closeOnBackdrop?: boolean\n}\n\nconst sizeClasses: Record<ModalSize, string> = {\n sm: 'max-w-sm',\n md: 'max-w-md',\n lg: 'max-w-lg',\n xl: 'max-w-xl',\n full: 'max-w-full mx-4',\n}\n\nexport function Modal({\n open,\n onClose,\n title,\n children,\n footer,\n size = 'md',\n closeOnBackdrop = true,\n}: ModalProps) {\n const backdropRef = useRef<HTMLDivElement>(null)\n\n useEffect(() => {\n if (!open) return\n const prev = document.body.style.overflow\n document.body.style.overflow = 'hidden'\n return () => {\n document.body.style.overflow = prev\n }\n }, [open])\n\n useEffect(() => {\n if (!open) return\n const onKey = (e: KeyboardEvent) => {\n if (e.key === 'Escape') onClose()\n }\n document.addEventListener('keydown', onKey)\n return () => document.removeEventListener('keydown', onKey)\n }, [open, onClose])\n\n if (!open) return null\n\n return createPortal(\n <div\n ref={backdropRef}\n className=\"fixed inset-0 z-50 flex items-center justify-center p-4 bg-black/50 backdrop-blur-sm\"\n onClick={(e) => {\n if (closeOnBackdrop && e.target === backdropRef.current) onClose()\n }}\n >\n <div\n role=\"dialog\"\n aria-modal=\"true\"\n aria-labelledby={title ? 'modal-title' : undefined}\n className={[\n 'relative w-full bg-white rounded-xl shadow-xl flex flex-col max-h-[90vh]',\n sizeClasses[size],\n ].join(' ')}\n >\n {title && (\n <div className=\"flex items-center justify-between px-6 py-4 border-b border-gray-100 shrink-0\">\n <h2 id=\"modal-title\" className=\"text-lg font-semibold text-gray-900\">\n {title}\n </h2>\n <button\n onClick={onClose}\n className=\"text-gray-400 hover:text-gray-600 transition-colors\"\n aria-label=\"Close modal\"\n >\n <svg\n xmlns=\"http://www.w3.org/2000/svg\"\n fill=\"none\"\n viewBox=\"0 0 24 24\"\n strokeWidth={1.5}\n stroke=\"currentColor\"\n className=\"w-5 h-5\"\n >\n <path\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n d=\"M6 18L18 6M6 6l12 12\"\n />\n </svg>\n </button>\n </div>\n )}\n <div className=\"flex-1 overflow-y-auto px-6 py-4\">{children}</div>\n {footer && (\n <div className=\"px-6 py-4 border-t border-gray-100 shrink-0 bg-gray-50 rounded-b-xl\">\n {footer}\n </div>\n )}\n </div>\n </div>,\n document.body,\n )\n}\n","import { forwardRef } from 'react';\nimport type { InputHTMLAttributes } from 'react';\nimport clx from 'classnames';\n\nexport interface CheckboxProps extends Omit<\n InputHTMLAttributes<HTMLInputElement>,\n 'type'\n> {\n label?: string;\n description?: string;\n error?: string;\n indeterminate?: boolean;\n}\n\nexport const Checkbox = forwardRef<HTMLInputElement, CheckboxProps>(\n (\n { label, description, error, indeterminate, className = '', id, ...props },\n ref,\n ) => {\n const inputId = id ?? label?.toLowerCase().replace(/\\s+/g, '-');\n\n return (\n <div className={clx('checkbox-wrapper', className)}>\n <div className=\"checkbox-wrapper-inner\">\n <input\n ref={(el) => {\n if (el) el.indeterminate = indeterminate ?? false;\n if (typeof ref === 'function') ref(el);\n else if (ref) ref.current = el;\n }}\n id={inputId}\n type=\"checkbox\"\n className={clx('checkbox', error && 'has-error')}\n {...props}\n />\n </div>\n {(label || description) && (\n <div>\n {label && (\n <label htmlFor={inputId} className=\"checkbox-label\">\n {label}\n </label>\n )}\n {description && (\n <p className=\"checkbox-description\">{description}</p>\n )}\n {error && <p className=\"checkbox-error\">{error}</p>}\n </div>\n )}\n </div>\n );\n },\n);\n\nCheckbox.displayName = 'Checkbox';\n","import { forwardRef } from 'react';\nimport type { InputHTMLAttributes } from 'react';\nimport clx from 'classnames';\n\ntype ToggleSize = 'sm' | 'md' | 'lg';\n\nexport interface ToggleProps extends Omit<\n InputHTMLAttributes<HTMLInputElement>,\n 'type' | 'size'\n> {\n label?: string;\n description?: string;\n size?: ToggleSize;\n}\n\nexport const Toggle = forwardRef<HTMLInputElement, ToggleProps>(\n ({ label, description, size = 'md', className = '', id, ...props }, ref) => {\n const inputId = id ?? label?.toLowerCase().replace(/\\s+/g, '-');\n\n return (\n <label\n htmlFor={inputId}\n className={clx(\n 'toggle',\n props.disabled && 'toggle-disabled',\n className,\n )}\n >\n <div className={clx('toggle-wrapper', `toggle-wrapper-${size}`)}>\n <input\n ref={ref}\n id={inputId}\n type=\"checkbox\"\n role=\"switch\"\n className=\"sr-only peer\"\n {...props}\n />\n <div className=\"toggle-track\" />\n <div className={clx('toggle-thumb', `toggle-thumb-${size}`)} />\n </div>\n {(label || description) && (\n <div>\n {label && <span className=\"toggle-label\">{label}</span>}\n {description && (\n <span className=\"toggle-description\">{description}</span>\n )}\n </div>\n )}\n </label>\n );\n },\n);\n\nToggle.displayName = 'Toggle';\n","import type { HTMLAttributes, ReactNode } from 'react';\nimport clx from 'classnames';\n\ntype AvatarSize = 'xs' | 'sm' | 'md' | 'lg' | 'xl';\n\nexport interface AvatarProps extends HTMLAttributes<HTMLSpanElement> {\n src?: string;\n alt?: string;\n name?: string;\n size?: AvatarSize;\n}\n\nexport interface AvatarGroupProps extends HTMLAttributes<HTMLDivElement> {\n max?: number;\n size?: AvatarSize;\n children: ReactNode;\n}\n\nconst bgColors = [\n 'bg-red-500',\n 'bg-orange-500',\n 'bg-amber-500',\n 'bg-emerald-500',\n 'bg-teal-500',\n 'bg-cyan-500',\n 'bg-blue-500',\n 'bg-violet-500',\n 'bg-pink-500',\n];\n\nexport function Avatar({\n src,\n alt,\n name,\n size = 'md',\n className,\n ...props\n}: AvatarProps) {\n const baseClasses = ['avatar', `avatar-${size}`, className];\n\n const nameToColor = (n: string) => {\n let hash = 0;\n for (let i = 0; i < n.length; i++) hash += n.charCodeAt(i);\n return bgColors[hash % bgColors.length];\n };\n\n const getInitials = (name: string) =>\n name\n .split(' ')\n .slice(0, 2)\n .map((n) => n[0])\n .join('')\n .toUpperCase();\n\n if (src) {\n return (\n <span className={clx(baseClasses)} {...props}>\n <img\n src={src}\n alt={alt ?? name ?? ''}\n className=\"w-full h-full object-cover\"\n />\n </span>\n );\n }\n\n if (name) {\n return (\n <span\n className={clx(baseClasses, nameToColor(name))}\n aria-label={name}\n {...props}\n >\n {getInitials(name)}\n </span>\n );\n }\n\n // Fallback icon\n return (\n <span className={clx(baseClasses, 'avatar-fallback')} {...props}>\n <svg\n xmlns=\"http://www.w3.org/2000/svg\"\n fill=\"currentColor\"\n viewBox=\"0 0 24 24\"\n className=\"w-3/5 h-3/5\"\n >\n <path\n fillRule=\"evenodd\"\n d=\"M7.5 6a4.5 4.5 0 119 0 4.5 4.5 0 01-9 0zM3.751 20.105a8.25 8.25 0 0116.498 0 .75.75 0 01-.437.695A18.683 18.683 0 0112 22.5c-2.786 0-5.433-.608-7.812-1.7a.75.75 0 01-.437-.695z\"\n clipRule=\"evenodd\"\n />\n </svg>\n </span>\n );\n}\n","import type { ReactNode } from 'react';\nimport cx from 'classnames';\n\ninterface StackProps {\n direction?: 'row' | 'column';\n gap?: number;\n alignItems?: 'start' | 'end' | 'center' | 'baseline' | 'stretch';\n justifyItems?: 'start' | 'end' | 'center' | 'stretch';\n justifyContent?:\n | 'normal'\n | 'start'\n | 'end'\n | 'center'\n | 'between'\n | 'around'\n | 'evenly'\n | 'stretch';\n className?: string;\n children?: ReactNode;\n}\n\nexport const Stack = ({\n direction = 'row',\n gap,\n alignItems = 'start',\n justifyItems = 'start',\n justifyContent = 'normal',\n className,\n children,\n}: StackProps) => {\n const alignItemsMap: Record<string, string> = {\n start: 'items-start',\n end: 'items-end',\n center: 'items-center',\n baseline: 'items-baseline',\n stretch: 'items-stretch',\n };\n\n const justifyItemsMap: Record<string, string> = {\n start: 'justify-items-start',\n end: 'justify-items-end',\n center: 'justify-items-center',\n stretch: 'justify-items-stretch',\n };\n\n const justifyContentMap: Record<string, string> = {\n normal: 'justify-normal',\n start: 'justify-start',\n end: 'justify-end',\n center: 'justify-center',\n between: 'justify-between',\n around: 'justify-around',\n evenly: 'justify-evenly',\n stretch: 'justify-stretch',\n };\n\n return (\n <div\n className={cx(\n 'stack',\n `stack-${direction}`,\n gap && `gap-${gap}`,\n alignItemsMap[alignItems],\n justifyItemsMap[justifyItems],\n justifyContentMap[justifyContent],\n className,\n )}\n >\n {children}\n </div>\n );\n};\n","import type { ElementType, HTMLAttributes, ReactNode } from 'react';\nimport cx from 'classnames';\n\n// ─── Types ────────────────────────────────────────────────────────────────────\n\nexport type ColSpan = 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12;\nexport type ColOffset = 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11;\nexport type GridCols = 1 | 2 | 3 | 4 | 6 | 12;\nexport type GapSize = 0 | 1 | 2 | 3 | 4 | 5 | 6 | 8 | 10 | 12 | 16;\n\nexport interface GridProps {\n children?: ReactNode;\n cols?: GridCols;\n gap?: GapSize;\n rowGap?: GapSize;\n colGap?: GapSize;\n as?: ElementType;\n className?: string;\n}\n\nexport interface ColProps extends HTMLAttributes<HTMLDivElement> {\n children?: ReactNode;\n /** Výchozí šířka (mobile-first) */\n span?: ColSpan;\n sm?: ColSpan;\n md?: ColSpan;\n lg?: ColSpan;\n xl?: ColSpan;\n /** Přeskočit N sloupců od aktuální pozice (mobile-first) */\n offset?: ColOffset;\n smOffset?: ColOffset;\n mdOffset?: ColOffset;\n lgOffset?: ColOffset;\n xlOffset?: ColOffset;\n}\n\n// ─── Class maps — všechny literální stringy, Tailwind je detekuje při scanu ──\n\nconst colsMap: Record<GridCols, string> = {\n 1: 'grid-cols-1',\n 2: 'grid-cols-2',\n 3: 'grid-cols-3',\n 4: 'grid-cols-4',\n 6: 'grid-cols-6',\n 12: 'grid-cols-12',\n};\n\nconst gapMap: Record<GapSize, string> = {\n 0: 'gap-0',\n 1: 'gap-1',\n 2: 'gap-2',\n 3: 'gap-3',\n 4: 'gap-4',\n 5: 'gap-5',\n 6: 'gap-6',\n 8: 'gap-8',\n 10: 'gap-10',\n 12: 'gap-12',\n 16: 'gap-16',\n};\n\nconst rowGapMap: Record<GapSize, string> = {\n 0: 'gap-y-0',\n 1: 'gap-y-1',\n 2: 'gap-y-2',\n 3: 'gap-y-3',\n 4: 'gap-y-4',\n 5: 'gap-y-5',\n 6: 'gap-y-6',\n 8: 'gap-y-8',\n 10: 'gap-y-10',\n 12: 'gap-y-12',\n 16: 'gap-y-16',\n};\n\nconst colGapMap: Record<GapSize, string> = {\n 0: 'gap-x-0',\n 1: 'gap-x-1',\n 2: 'gap-x-2',\n 3: 'gap-x-3',\n 4: 'gap-x-4',\n 5: 'gap-x-5',\n 6: 'gap-x-6',\n 8: 'gap-x-8',\n 10: 'gap-x-10',\n 12: 'gap-x-12',\n 16: 'gap-x-16',\n};\n\n// Span — bez prefixu (výchozí, mobile-first)\nconst spanMap: Record<ColSpan, string> = {\n 1: 'col-span-1',\n 2: 'col-span-2',\n 3: 'col-span-3',\n 4: 'col-span-4',\n 5: 'col-span-5',\n 6: 'col-span-6',\n 7: 'col-span-7',\n 8: 'col-span-8',\n 9: 'col-span-9',\n 10: 'col-span-10',\n 11: 'col-span-11',\n 12: 'col-span-12',\n};\n\nconst smSpanMap: Record<ColSpan, string> = {\n 1: 'sm:col-span-1',\n 2: 'sm:col-span-2',\n 3: 'sm:col-span-3',\n 4: 'sm:col-span-4',\n 5: 'sm:col-span-5',\n 6: 'sm:col-span-6',\n 7: 'sm:col-span-7',\n 8: 'sm:col-span-8',\n 9: 'sm:col-span-9',\n 10: 'sm:col-span-10',\n 11: 'sm:col-span-11',\n 12: 'sm:col-span-12',\n};\n\nconst mdSpanMap: Record<ColSpan, string> = {\n 1: 'md:col-span-1',\n 2: 'md:col-span-2',\n 3: 'md:col-span-3',\n 4: 'md:col-span-4',\n 5: 'md:col-span-5',\n 6: 'md:col-span-6',\n 7: 'md:col-span-7',\n 8: 'md:col-span-8',\n 9: 'md:col-span-9',\n 10: 'md:col-span-10',\n 11: 'md:col-span-11',\n 12: 'md:col-span-12',\n};\n\nconst lgSpanMap: Record<ColSpan, string> = {\n 1: 'lg:col-span-1',\n 2: 'lg:col-span-2',\n 3: 'lg:col-span-3',\n 4: 'lg:col-span-4',\n 5: 'lg:col-span-5',\n 6: 'lg:col-span-6',\n 7: 'lg:col-span-7',\n 8: 'lg:col-span-8',\n 9: 'lg:col-span-9',\n 10: 'lg:col-span-10',\n 11: 'lg:col-span-11',\n 12: 'lg:col-span-12',\n};\n\nconst xlSpanMap: Record<ColSpan, string> = {\n 1: 'xl:col-span-1',\n 2: 'xl:col-span-2',\n 3: 'xl:col-span-3',\n 4: 'xl:col-span-4',\n 5: 'xl:col-span-5',\n 6: 'xl:col-span-6',\n 7: 'xl:col-span-7',\n 8: 'xl:col-span-8',\n 9: 'xl:col-span-9',\n 10: 'xl:col-span-10',\n 11: 'xl:col-span-11',\n 12: 'xl:col-span-12',\n};\n\n// Offset: přeskočit N sloupců → col-start-(N+1)\nconst offsetMap: Record<ColOffset, string> = {\n 1: 'col-start-2',\n 2: 'col-start-3',\n 3: 'col-start-4',\n 4: 'col-start-5',\n 5: 'col-start-6',\n 6: 'col-start-7',\n 7: 'col-start-8',\n 8: 'col-start-9',\n 9: 'col-start-10',\n 10: 'col-start-11',\n 11: 'col-start-12',\n};\n\nconst smOffsetMap: Record<ColOffset, string> = {\n 1: 'sm:col-start-2',\n 2: 'sm:col-start-3',\n 3: 'sm:col-start-4',\n 4: 'sm:col-start-5',\n 5: 'sm:col-start-6',\n 6: 'sm:col-start-7',\n 7: 'sm:col-start-8',\n 8: 'sm:col-start-9',\n 9: 'sm:col-start-10',\n 10: 'sm:col-start-11',\n 11: 'sm:col-start-12',\n};\n\nconst mdOffsetMap: Record<ColOffset, string> = {\n 1: 'md:col-start-2',\n 2: 'md:col-start-3',\n 3: 'md:col-start-4',\n 4: 'md:col-start-5',\n 5: 'md:col-start-6',\n 6: 'md:col-start-7',\n 7: 'md:col-start-8',\n 8: 'md:col-start-9',\n 9: 'md:col-start-10',\n 10: 'md:col-start-11',\n 11: 'md:col-start-12',\n};\n\nconst lgOffsetMap: Record<ColOffset, string> = {\n 1: 'lg:col-start-2',\n 2: 'lg:col-start-3',\n 3: 'lg:col-start-4',\n 4: 'lg:col-start-5',\n 5: 'lg:col-start-6',\n 6: 'lg:col-start-7',\n 7: 'lg:col-start-8',\n 8: 'lg:col-start-9',\n 9: 'lg:col-start-10',\n 10: 'lg:col-start-11',\n 11: 'lg:col-start-12',\n};\n\nconst xlOffsetMap: Record<ColOffset, string> = {\n 1: 'xl:col-start-2',\n 2: 'xl:col-start-3',\n 3: 'xl:col-start-4',\n 4: 'xl:col-start-5',\n 5: 'xl:col-start-6',\n 6: 'xl:col-start-7',\n 7: 'xl:col-start-8',\n 8: 'xl:col-start-9',\n 9: 'xl:col-start-10',\n 10: 'xl:col-start-11',\n 11: 'xl:col-start-12',\n};\n\n// ─── Components ───────────────────────────────────────────────────────────────\n\nexport const Grid = ({\n children,\n cols = 12,\n gap,\n rowGap,\n colGap,\n as: Tag = 'div',\n className,\n}: GridProps) => (\n <Tag\n className={cx(\n 'grid',\n 'w-full',\n colsMap[cols],\n gap !== undefined && gapMap[gap],\n rowGap !== undefined && rowGapMap[rowGap],\n colGap !== undefined && colGapMap[colGap],\n className,\n )}\n >\n {children}\n </Tag>\n);\n\nGrid.displayName = 'Grid';\n\nexport const Col = ({\n children,\n span,\n sm,\n md,\n lg,\n xl,\n offset,\n smOffset,\n mdOffset,\n lgOffset,\n xlOffset,\n className,\n ...rest\n}: ColProps) => (\n <div\n className={cx(\n span && spanMap[span],\n sm && smSpanMap[sm],\n md && mdSpanMap[md],\n lg && lgSpanMap[lg],\n xl && xlSpanMap[xl],\n offset && offsetMap[offset],\n smOffset && smOffsetMap[smOffset],\n mdOffset && mdOffsetMap[mdOffset],\n lgOffset && lgOffsetMap[lgOffset],\n xlOffset && xlOffsetMap[xlOffset],\n className,\n )}\n {...rest}\n >\n {children}\n </div>\n);\n\nCol.displayName = 'Col';\n","import { useEffect, useId, useRef, useState } from 'react';\nimport clx from 'classnames';\n\nexport interface QuantityInputProps {\n value: number;\n onChange: (value: number) => void;\n min?: number;\n max?: number;\n step?: number;\n disabled?: boolean;\n label?: string;\n error?: string;\n hint?: string;\n id?: string;\n className?: string;\n}\n\nexport const QuantityInput = ({\n value,\n onChange,\n min = 1,\n max = 999,\n step = 1,\n disabled = false,\n label,\n error,\n hint,\n id,\n className,\n}: QuantityInputProps) => {\n const generatedId = useId();\n const inputId = id ?? generatedId;\n const inputRef = useRef<HTMLInputElement>(null);\n\n // Lokální string stav — umožňuje volné psaní, clamping proběhne při blur\n const [inputValue, setInputValue] = useState(String(value));\n\n // Synchronizace při změně value zvenčí (controlled)\n useEffect(() => {\n if (document.activeElement !== inputRef.current) {\n setInputValue(String(value));\n }\n }, [value]);\n\n const clamp = (n: number) => Math.min(max, Math.max(min, n));\n\n const commitValue = (raw: string) => {\n const parsed = parseInt(raw, 10);\n const next = isNaN(parsed) ? value : clamp(parsed);\n setInputValue(String(next));\n if (next !== value) onChange(next);\n };\n\n const handleChange = (e: React.ChangeEvent<HTMLInputElement>) => {\n const raw = e.target.value.replace(/[^0-9]/g, '');\n setInputValue(raw);\n // Průběžně volej onChange jen pokud je platné číslo\n const parsed = parseInt(raw, 10);\n if (!isNaN(parsed)) onChange(clamp(parsed));\n };\n\n const handleBlur = () => commitValue(inputValue);\n\n const handleKeyDown = (e: React.KeyboardEvent<HTMLInputElement>) => {\n if (e.key === 'Enter') {\n commitValue(inputValue);\n inputRef.current?.blur();\n return;\n }\n // Blokuj vše kromě číslic a ovládacích kláves\n const allowed = [\n 'Backspace', 'Delete', 'Tab', 'Escape',\n 'ArrowLeft', 'ArrowRight', 'Home', 'End',\n ];\n if (!allowed.includes(e.key) && !/^[0-9]$/.test(e.key) && !e.metaKey && !e.ctrlKey) {\n e.preventDefault();\n }\n };\n\n const decrement = () => onChange(clamp(value - step));\n const increment = () => onChange(clamp(value + step));\n\n const canDecrement = value - step >= min;\n const canIncrement = value + step <= max;\n\n return (\n <div className={clx('quantity-input-wrapper', className)}>\n {label && (\n <label htmlFor={inputId} className=\"input-label\">\n {label}\n </label>\n )}\n\n <div className={clx('quantity-input', error && 'has-error', disabled && 'is-disabled')}>\n <button\n type=\"button\"\n className=\"quantity-btn\"\n onClick={decrement}\n disabled={disabled || !canDecrement}\n aria-label=\"Snížit množství\"\n tabIndex={-1}\n >\n <MinusIcon />\n </button>\n\n <input\n ref={inputRef}\n id={inputId}\n type=\"text\"\n inputMode=\"numeric\"\n className=\"quantity-field\"\n value={inputValue}\n onChange={handleChange}\n onBlur={handleBlur}\n onKeyDown={handleKeyDown}\n disabled={disabled}\n aria-label={label ?? 'Množství'}\n aria-valuemin={min}\n aria-valuemax={max}\n aria-valuenow={value}\n />\n\n <button\n type=\"button\"\n className=\"quantity-btn\"\n onClick={increment}\n disabled={disabled || !canIncrement}\n aria-label=\"Zvýšit množství\"\n tabIndex={-1}\n >\n <PlusIcon />\n </button>\n </div>\n\n {(error || hint) && (\n <p className={clx('helper-text', error && 'has-error')}>{error ?? hint}</p>\n )}\n </div>\n );\n};\n\nQuantityInput.displayName = 'QuantityInput';\n\nconst MinusIcon = () => (\n <svg width=\"12\" height=\"2\" viewBox=\"0 0 12 2\" fill=\"none\" aria-hidden=\"true\">\n <path d=\"M1 1H11\" stroke=\"currentColor\" strokeWidth=\"1.5\" strokeLinecap=\"round\" />\n </svg>\n);\n\nconst PlusIcon = () => (\n <svg width=\"12\" height=\"12\" viewBox=\"0 0 12 12\" fill=\"none\" aria-hidden=\"true\">\n <path d=\"M6 1V11M1 6H11\" stroke=\"currentColor\" strokeWidth=\"1.5\" strokeLinecap=\"round\" />\n </svg>\n);\n","'use client';\n\nimport type { ButtonHTMLAttributes } from 'react';\nimport clx from 'classnames';\n\nexport interface PaginationProps {\n page: number;\n totalPages: number;\n onPageChange: (page: number) => void;\n siblingsCount?: number;\n}\n\nconst range = (start: number, end: number) =>\n Array.from({ length: end - start + 1 }, (_, i) => start + i);\n\nconst buildPages = (\n page: number,\n totalPages: number,\n siblings: number,\n): (number | '…')[] => {\n const totalNumbers = siblings * 2 + 5;\n\n if (totalPages <= totalNumbers) return range(1, totalPages);\n\n const leftSibling = Math.max(page - siblings, 1);\n const rightSibling = Math.min(page + siblings, totalPages);\n const showLeftDots = leftSibling > 2;\n const showRightDots = rightSibling < totalPages - 1;\n\n if (!showLeftDots && showRightDots) {\n const leftRange = range(1, 3 + siblings * 2);\n return [...leftRange, '…', totalPages];\n }\n\n if (showLeftDots && !showRightDots) {\n const rightRange = range(totalPages - (2 + siblings * 2), totalPages);\n return [1, '…', ...rightRange];\n }\n\n return [1, '…', ...range(leftSibling, rightSibling), '…', totalPages];\n};\n\nconst PageButton = ({\n active,\n disabled,\n children,\n ...props\n}: ButtonHTMLAttributes<HTMLButtonElement> & { active?: boolean }) => {\n return (\n <button\n disabled={disabled}\n className={clx(\n 'pagination-button',\n `pagination-button-${active ? 'active' : 'inactive'}`,\n )}\n {...props}\n >\n {children}\n </button>\n );\n};\n\nexport const Pagination = ({\n page,\n totalPages,\n onPageChange,\n siblingsCount = 1,\n}: PaginationProps) => {\n const pages = buildPages(page, totalPages, siblingsCount);\n\n return (\n <nav aria-label=\"Pagination\" className=\"pagination\">\n <PageButton\n disabled={page <= 1}\n onClick={() => onPageChange(page - 1)}\n aria-label=\"Previous page\"\n >\n <svg\n xmlns=\"http://www.w3.org/2000/svg\"\n fill=\"none\"\n viewBox=\"0 0 24 24\"\n strokeWidth={2}\n stroke=\"currentColor\"\n className=\"w-4 h-4\"\n >\n <path\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n d=\"M15.75 19.5L8.25 12l7.5-7.5\"\n />\n </svg>\n </PageButton>\n\n {pages.map((p, i) =>\n p === '…' ? (\n <span key={`dots-${i}`} className=\"pagination-dots\">\n …\n </span>\n ) : (\n <PageButton\n key={p}\n active={p === page}\n onClick={() => onPageChange(p)}\n aria-label={`Page ${p}`}\n aria-current={p === page ? 'page' : undefined}\n >\n {p}\n </PageButton>\n ),\n )}\n\n <PageButton\n disabled={page >= totalPages}\n onClick={() => onPageChange(page + 1)}\n aria-label=\"Next page\"\n >\n <svg\n xmlns=\"http://www.w3.org/2000/svg\"\n fill=\"none\"\n viewBox=\"0 0 24 24\"\n strokeWidth={2}\n stroke=\"currentColor\"\n className=\"w-4 h-4\"\n >\n <path\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n d=\"M8.25 4.5l7.5 7.5-7.5 7.5\"\n />\n </svg>\n </PageButton>\n </nav>\n );\n};\n","/**\n * SSR Window 5.0.1\n * Better handling for window object in SSR environment\n * https://github.com/nolimits4web/ssr-window\n *\n * Copyright 2025, Vladimir Kharlampidi\n *\n * Licensed under MIT\n *\n * Released on: June 27, 2025\n */\n/* eslint-disable no-param-reassign */\nfunction isObject(obj) {\n return obj !== null && typeof obj === 'object' && 'constructor' in obj && obj.constructor === Object;\n}\nfunction extend(target = {}, src = {}) {\n const noExtend = ['__proto__', 'constructor', 'prototype'];\n Object.keys(src).filter(key => noExtend.indexOf(key) < 0).forEach(key => {\n if (typeof target[key] === 'undefined') target[key] = src[key];else if (isObject(src[key]) && isObject(target[key]) && Object.keys(src[key]).length > 0) {\n extend(target[key], src[key]);\n }\n });\n}\nconst ssrDocument = {\n body: {},\n addEventListener() {},\n removeEventListener() {},\n activeElement: {\n blur() {},\n nodeName: ''\n },\n querySelector() {\n return null;\n },\n querySelectorAll() {\n return [];\n },\n getElementById() {\n return null;\n },\n createEvent() {\n return {\n initEvent() {}\n };\n },\n createElement() {\n return {\n children: [],\n childNodes: [],\n style: {},\n setAttribute() {},\n getElementsByTagName() {\n return [];\n }\n };\n },\n createElementNS() {\n return {};\n },\n importNode() {\n return null;\n },\n location: {\n hash: '',\n host: '',\n hostname: '',\n href: '',\n origin: '',\n pathname: '',\n protocol: '',\n search: ''\n }\n};\nfunction getDocument() {\n const doc = typeof document !== 'undefined' ? document : {};\n extend(doc, ssrDocument);\n return doc;\n}\nconst ssrWindow = {\n document: ssrDocument,\n navigator: {\n userAgent: ''\n },\n location: {\n hash: '',\n host: '',\n hostname: '',\n href: '',\n origin: '',\n pathname: '',\n protocol: '',\n search: ''\n },\n history: {\n replaceState() {},\n pushState() {},\n go() {},\n back() {}\n },\n CustomEvent: function CustomEvent() {\n return this;\n },\n addEventListener() {},\n removeEventListener() {},\n getComputedStyle() {\n return {\n getPropertyValue() {\n return '';\n }\n };\n },\n Image() {},\n Date() {},\n screen: {},\n setTimeout() {},\n clearTimeout() {},\n matchMedia() {\n return {};\n },\n requestAnimationFrame(callback) {\n if (typeof setTimeout === 'undefined') {\n callback();\n return null;\n }\n return setTimeout(callback, 0);\n },\n cancelAnimationFrame(id) {\n if (typeof setTimeout === 'undefined') {\n return;\n }\n clearTimeout(id);\n }\n};\nfunction getWindow() {\n const win = typeof window !== 'undefined' ? window : {};\n extend(win, ssrWindow);\n return win;\n}\n\nexport { getWindow as a, getDocument as g };\n","import { a as getWindow, g as getDocument } from './ssr-window.esm.mjs';\n\nfunction classesToTokens(classes = '') {\n return classes.trim().split(' ').filter(c => !!c.trim());\n}\n\nfunction deleteProps(obj) {\n const object = obj;\n Object.keys(object).forEach(key => {\n try {\n object[key] = null;\n } catch (e) {\n // no getter for object\n }\n try {\n delete object[key];\n } catch (e) {\n // something got wrong\n }\n });\n}\nfunction nextTick(callback, delay = 0) {\n return setTimeout(callback, delay);\n}\nfunction now() {\n return Date.now();\n}\nfunction getComputedStyle(el) {\n const window = getWindow();\n let style;\n if (window.getComputedStyle) {\n style = window.getComputedStyle(el, null);\n }\n if (!style && el.currentStyle) {\n style = el.currentStyle;\n }\n if (!style) {\n style = el.style;\n }\n return style;\n}\nfunction getTranslate(el, axis = 'x') {\n const window = getWindow();\n let matrix;\n let curTransform;\n let transformMatrix;\n const curStyle = getComputedStyle(el);\n if (window.WebKitCSSMatrix) {\n curTransform = curStyle.transform || curStyle.webkitTransform;\n if (curTransform.split(',').length > 6) {\n curTransform = curTransform.split(', ').map(a => a.replace(',', '.')).join(', ');\n }\n // Some old versions of Webkit choke when 'none' is passed; pass\n // empty string instead in this case\n transformMatrix = new window.WebKitCSSMatrix(curTransform === 'none' ? '' : curTransform);\n } else {\n transformMatrix = curStyle.MozTransform || curStyle.OTransform || curStyle.MsTransform || curStyle.msTransform || curStyle.transform || curStyle.getPropertyValue('transform').replace('translate(', 'matrix(1, 0, 0, 1,');\n matrix = transformMatrix.toString().split(',');\n }\n if (axis === 'x') {\n // Latest Chrome and webkits Fix\n if (window.WebKitCSSMatrix) curTransform = transformMatrix.m41;\n // Crazy IE10 Matrix\n else if (matrix.length === 16) curTransform = parseFloat(matrix[12]);\n // Normal Browsers\n else curTransform = parseFloat(matrix[4]);\n }\n if (axis === 'y') {\n // Latest Chrome and webkits Fix\n if (window.WebKitCSSMatrix) curTransform = transformMatrix.m42;\n // Crazy IE10 Matrix\n else if (matrix.length === 16) curTransform = parseFloat(matrix[13]);\n // Normal Browsers\n else curTransform = parseFloat(matrix[5]);\n }\n return curTransform || 0;\n}\nfunction isObject(o) {\n return typeof o === 'object' && o !== null && o.constructor && Object.prototype.toString.call(o).slice(8, -1) === 'Object';\n}\nfunction isNode(node) {\n // eslint-disable-next-line\n if (typeof window !== 'undefined' && typeof window.HTMLElement !== 'undefined') {\n return node instanceof HTMLElement;\n }\n return node && (node.nodeType === 1 || node.nodeType === 11);\n}\nfunction extend(...args) {\n const to = Object(args[0]);\n for (let i = 1; i < args.length; i += 1) {\n const nextSource = args[i];\n if (nextSource !== undefined && nextSource !== null && !isNode(nextSource)) {\n const keysArray = Object.keys(Object(nextSource)).filter(key => key !== '__proto__' && key !== 'constructor' && key !== 'prototype');\n for (let nextIndex = 0, len = keysArray.length; nextIndex < len; nextIndex += 1) {\n const nextKey = keysArray[nextIndex];\n const desc = Object.getOwnPropertyDescriptor(nextSource, nextKey);\n if (desc !== undefined && desc.enumerable) {\n if (isObject(to[nextKey]) && isObject(nextSource[nextKey])) {\n if (nextSource[nextKey].__swiper__) {\n to[nextKey] = nextSource[nextKey];\n } else {\n extend(to[nextKey], nextSource[nextKey]);\n }\n } else if (!isObject(to[nextKey]) && isObject(nextSource[nextKey])) {\n to[nextKey] = {};\n if (nextSource[nextKey].__swiper__) {\n to[nextKey] = nextSource[nextKey];\n } else {\n extend(to[nextKey], nextSource[nextKey]);\n }\n } else {\n to[nextKey] = nextSource[nextKey];\n }\n }\n }\n }\n }\n return to;\n}\nfunction setCSSProperty(el, varName, varValue) {\n el.style.setProperty(varName, varValue);\n}\nfunction animateCSSModeScroll({\n swiper,\n targetPosition,\n side\n}) {\n const window = getWindow();\n const startPosition = -swiper.translate;\n let startTime = null;\n let time;\n const duration = swiper.params.speed;\n swiper.wrapperEl.style.scrollSnapType = 'none';\n window.cancelAnimationFrame(swiper.cssModeFrameID);\n const dir = targetPosition > startPosition ? 'next' : 'prev';\n const isOutOfBound = (current, target) => {\n return dir === 'next' && current >= target || dir === 'prev' && current <= target;\n };\n const animate = () => {\n time = new Date().getTime();\n if (startTime === null) {\n startTime = time;\n }\n const progress = Math.max(Math.min((time - startTime) / duration, 1), 0);\n const easeProgress = 0.5 - Math.cos(progress * Math.PI) / 2;\n let currentPosition = startPosition + easeProgress * (targetPosition - startPosition);\n if (isOutOfBound(currentPosition, targetPosition)) {\n currentPosition = targetPosition;\n }\n swiper.wrapperEl.scrollTo({\n [side]: currentPosition\n });\n if (isOutOfBound(currentPosition, targetPosition)) {\n swiper.wrapperEl.style.overflow = 'hidden';\n swiper.wrapperEl.style.scrollSnapType = '';\n setTimeout(() => {\n swiper.wrapperEl.style.overflow = '';\n swiper.wrapperEl.scrollTo({\n [side]: currentPosition\n });\n });\n window.cancelAnimationFrame(swiper.cssModeFrameID);\n return;\n }\n swiper.cssModeFrameID = window.requestAnimationFrame(animate);\n };\n animate();\n}\nfunction getSlideTransformEl(slideEl) {\n return slideEl.querySelector('.swiper-slide-transform') || slideEl.shadowRoot && slideEl.shadowRoot.querySelector('.swiper-slide-transform') || slideEl;\n}\nfunction elementChildren(element, selector = '') {\n const window = getWindow();\n const children = [...element.children];\n if (window.HTMLSlotElement && element instanceof HTMLSlotElement) {\n children.push(...element.assignedElements());\n }\n if (!selector) {\n return children;\n }\n return children.filter(el => el.matches(selector));\n}\nfunction elementIsChildOfSlot(el, slot) {\n // Breadth-first search through all parent's children and assigned elements\n const elementsQueue = [slot];\n while (elementsQueue.length > 0) {\n const elementToCheck = elementsQueue.shift();\n if (el === elementToCheck) {\n return true;\n }\n elementsQueue.push(...elementToCheck.children, ...(elementToCheck.shadowRoot ? elementToCheck.shadowRoot.children : []), ...(elementToCheck.assignedElements ? elementToCheck.assignedElements() : []));\n }\n}\nfunction elementIsChildOf(el, parent) {\n const window = getWindow();\n let isChild = parent.contains(el);\n if (!isChild && window.HTMLSlotElement && parent instanceof HTMLSlotElement) {\n const children = [...parent.assignedElements()];\n isChild = children.includes(el);\n if (!isChild) {\n isChild = elementIsChildOfSlot(el, parent);\n }\n }\n return isChild;\n}\nfunction showWarning(text) {\n try {\n console.warn(text);\n return;\n } catch (err) {\n // err\n }\n}\nfunction createElement(tag, classes = []) {\n const el = document.createElement(tag);\n el.classList.add(...(Array.isArray(classes) ? classes : classesToTokens(classes)));\n return el;\n}\nfunction elementOffset(el) {\n const window = getWindow();\n const document = getDocument();\n const box = el.getBoundingClientRect();\n const body = document.body;\n const clientTop = el.clientTop || body.clientTop || 0;\n const clientLeft = el.clientLeft || body.clientLeft || 0;\n const scrollTop = el === window ? window.scrollY : el.scrollTop;\n const scrollLeft = el === window ? window.scrollX : el.scrollLeft;\n return {\n top: box.top + scrollTop - clientTop,\n left: box.left + scrollLeft - clientLeft\n };\n}\nfunction elementPrevAll(el, selector) {\n const prevEls = [];\n while (el.previousElementSibling) {\n const prev = el.previousElementSibling; // eslint-disable-line\n if (selector) {\n if (prev.matches(selector)) prevEls.push(prev);\n } else prevEls.push(prev);\n el = prev;\n }\n return prevEls;\n}\nfunction elementNextAll(el, selector) {\n const nextEls = [];\n while (el.nextElementSibling) {\n const next = el.nextElementSibling; // eslint-disable-line\n if (selector) {\n if (next.matches(selector)) nextEls.push(next);\n } else nextEls.push(next);\n el = next;\n }\n return nextEls;\n}\nfunction elementStyle(el, prop) {\n const window = getWindow();\n return window.getComputedStyle(el, null).getPropertyValue(prop);\n}\nfunction elementIndex(el) {\n let child = el;\n let i;\n if (child) {\n i = 0;\n // eslint-disable-next-line\n while ((child = child.previousSibling) !== null) {\n if (child.nodeType === 1) i += 1;\n }\n return i;\n }\n return undefined;\n}\nfunction elementParents(el, selector) {\n const parents = []; // eslint-disable-line\n let parent = el.parentElement; // eslint-disable-line\n while (parent) {\n if (selector) {\n if (parent.matches(selector)) parents.push(parent);\n } else {\n parents.push(parent);\n }\n parent = parent.parentElement;\n }\n return parents;\n}\nfunction elementTransitionEnd(el, callback) {\n function fireCallBack(e) {\n if (e.target !== el) return;\n callback.call(el, e);\n el.removeEventListener('transitionend', fireCallBack);\n }\n if (callback) {\n el.addEventListener('transitionend', fireCallBack);\n }\n}\nfunction elementOuterSize(el, size, includeMargins) {\n const window = getWindow();\n if (includeMargins) {\n return el[size === 'width' ? 'offsetWidth' : 'offsetHeight'] + parseFloat(window.getComputedStyle(el, null).getPropertyValue(size === 'width' ? 'margin-right' : 'margin-top')) + parseFloat(window.getComputedStyle(el, null).getPropertyValue(size === 'width' ? 'margin-left' : 'margin-bottom'));\n }\n return el.offsetWidth;\n}\nfunction makeElementsArray(el) {\n return (Array.isArray(el) ? el : [el]).filter(e => !!e);\n}\nfunction getRotateFix(swiper) {\n return v => {\n if (Math.abs(v) > 0 && swiper.browser && swiper.browser.need3dFix && Math.abs(v) % 90 === 0) {\n return v + 0.001;\n }\n return v;\n };\n}\nfunction setInnerHTML(el, html = '') {\n if (typeof trustedTypes !== 'undefined') {\n el.innerHTML = trustedTypes.createPolicy('html', {\n createHTML: s => s\n }).createHTML(html);\n } else {\n el.innerHTML = html;\n }\n}\n\nexport { getRotateFix as a, setCSSProperty as b, createElement as c, elementParents as d, elementChildren as e, elementOffset as f, getSlideTransformEl as g, now as h, elementOuterSize as i, elementIndex as j, classesToTokens as k, getTranslate as l, makeElementsArray as m, nextTick as n, elementTransitionEnd as o, isObject as p, elementStyle as q, elementNextAll as r, setInnerHTML as s, elementPrevAll as t, animateCSSModeScroll as u, showWarning as v, elementIsChildOf as w, extend as x, deleteProps as y };\n","import { a as getWindow, g as getDocument } from './ssr-window.esm.mjs';\nimport { d as elementParents, q as elementStyle, e as elementChildren, b as setCSSProperty, i as elementOuterSize, r as elementNextAll, t as elementPrevAll, l as getTranslate, u as animateCSSModeScroll, n as nextTick, v as showWarning, c as createElement, w as elementIsChildOf, h as now, x as extend, j as elementIndex, y as deleteProps } from './utils.mjs';\n\nlet support;\nfunction calcSupport() {\n const window = getWindow();\n const document = getDocument();\n return {\n smoothScroll: document.documentElement && document.documentElement.style && 'scrollBehavior' in document.documentElement.style,\n touch: !!('ontouchstart' in window || window.DocumentTouch && document instanceof window.DocumentTouch)\n };\n}\nfunction getSupport() {\n if (!support) {\n support = calcSupport();\n }\n return support;\n}\n\nlet deviceCached;\nfunction calcDevice({\n userAgent\n} = {}) {\n const support = getSupport();\n const window = getWindow();\n const platform = window.navigator.platform;\n const ua = userAgent || window.navigator.userAgent;\n const device = {\n ios: false,\n android: false\n };\n const screenWidth = window.screen.width;\n const screenHeight = window.screen.height;\n const android = ua.match(/(Android);?[\\s\\/]+([\\d.]+)?/); // eslint-disable-line\n let ipad = ua.match(/(iPad)(?!\\1).*OS\\s([\\d_]+)/);\n const ipod = ua.match(/(iPod)(.*OS\\s([\\d_]+))?/);\n const iphone = !ipad && ua.match(/(iPhone\\sOS|iOS)\\s([\\d_]+)/);\n const windows = platform === 'Win32';\n let macos = platform === 'MacIntel';\n\n // iPadOs 13 fix\n const iPadScreens = ['1024x1366', '1366x1024', '834x1194', '1194x834', '834x1112', '1112x834', '768x1024', '1024x768', '820x1180', '1180x820', '810x1080', '1080x810'];\n if (!ipad && macos && support.touch && iPadScreens.indexOf(`${screenWidth}x${screenHeight}`) >= 0) {\n ipad = ua.match(/(Version)\\/([\\d.]+)/);\n if (!ipad) ipad = [0, 1, '13_0_0'];\n macos = false;\n }\n\n // Android\n if (android && !windows) {\n device.os = 'android';\n device.android = true;\n }\n if (ipad || iphone || ipod) {\n device.os = 'ios';\n device.ios = true;\n }\n\n // Export object\n return device;\n}\nfunction getDevice(overrides = {}) {\n if (!deviceCached) {\n deviceCached = calcDevice(overrides);\n }\n return deviceCached;\n}\n\nlet browser;\nfunction calcBrowser() {\n const window = getWindow();\n const device = getDevice();\n let needPerspectiveFix = false;\n function isSafari() {\n const ua = window.navigator.userAgent.toLowerCase();\n return ua.indexOf('safari') >= 0 && ua.indexOf('chrome') < 0 && ua.indexOf('android') < 0;\n }\n if (isSafari()) {\n const ua = String(window.navigator.userAgent);\n if (ua.includes('Version/')) {\n const [major, minor] = ua.split('Version/')[1].split(' ')[0].split('.').map(num => Number(num));\n needPerspectiveFix = major < 16 || major === 16 && minor < 2;\n }\n }\n const isWebView = /(iPhone|iPod|iPad).*AppleWebKit(?!.*Safari)/i.test(window.navigator.userAgent);\n const isSafariBrowser = isSafari();\n const need3dFix = isSafariBrowser || isWebView && device.ios;\n return {\n isSafari: needPerspectiveFix || isSafariBrowser,\n needPerspectiveFix,\n need3dFix,\n isWebView\n };\n}\nfunction getBrowser() {\n if (!browser) {\n browser = calcBrowser();\n }\n return browser;\n}\n\nfunction Resize({\n swiper,\n on,\n emit\n}) {\n const window = getWindow();\n let observer = null;\n let animationFrame = null;\n const resizeHandler = () => {\n if (!swiper || swiper.destroyed || !swiper.initialized) return;\n emit('beforeResize');\n emit('resize');\n };\n const createObserver = () => {\n if (!swiper || swiper.destroyed || !swiper.initialized) return;\n observer = new ResizeObserver(entries => {\n animationFrame = window.requestAnimationFrame(() => {\n const {\n width,\n height\n } = swiper;\n let newWidth = width;\n let newHeight = height;\n entries.forEach(({\n contentBoxSize,\n contentRect,\n target\n }) => {\n if (target && target !== swiper.el) return;\n newWidth = contentRect ? contentRect.width : (contentBoxSize[0] || contentBoxSize).inlineSize;\n newHeight = contentRect ? contentRect.height : (contentBoxSize[0] || contentBoxSize).blockSize;\n });\n if (newWidth !== width || newHeight !== height) {\n resizeHandler();\n }\n });\n });\n observer.observe(swiper.el);\n };\n const removeObserver = () => {\n if (animationFrame) {\n window.cancelAnimationFrame(animationFrame);\n }\n if (observer && observer.unobserve && swiper.el) {\n observer.unobserve(swiper.el);\n observer = null;\n }\n };\n const orientationChangeHandler = () => {\n if (!swiper || swiper.destroyed || !swiper.initialized) return;\n emit('orientationchange');\n };\n on('init', () => {\n if (swiper.params.resizeObserver && typeof window.ResizeObserver !== 'undefined') {\n createObserver();\n return;\n }\n window.addEventListener('resize', resizeHandler);\n window.addEventListener('orientationchange', orientationChangeHandler);\n });\n on('destroy', () => {\n removeObserver();\n window.removeEventListener('resize', resizeHandler);\n window.removeEventListener('orientationchange', orientationChangeHandler);\n });\n}\n\nfunction Observer({\n swiper,\n extendParams,\n on,\n emit\n}) {\n const observers = [];\n const window = getWindow();\n const attach = (target, options = {}) => {\n const ObserverFunc = window.MutationObserver || window.WebkitMutationObserver;\n const observer = new ObserverFunc(mutations => {\n // The observerUpdate event should only be triggered\n // once despite the number of mutations. Additional\n // triggers are redundant and are very costly\n if (swiper.__preventObserver__) return;\n if (mutations.length === 1) {\n emit('observerUpdate', mutations[0]);\n return;\n }\n const observerUpdate = function observerUpdate() {\n emit('observerUpdate', mutations[0]);\n };\n if (window.requestAnimationFrame) {\n window.requestAnimationFrame(observerUpdate);\n } else {\n window.setTimeout(observerUpdate, 0);\n }\n });\n observer.observe(target, {\n attributes: typeof options.attributes === 'undefined' ? true : options.attributes,\n childList: swiper.isElement || (typeof options.childList === 'undefined' ? true : options).childList,\n characterData: typeof options.characterData === 'undefined' ? true : options.characterData\n });\n observers.push(observer);\n };\n const init = () => {\n if (!swiper.params.observer) return;\n if (swiper.params.observeParents) {\n const containerParents = elementParents(swiper.hostEl);\n for (let i = 0; i < containerParents.length; i += 1) {\n attach(containerParents[i]);\n }\n }\n // Observe container\n attach(swiper.hostEl, {\n childList: swiper.params.observeSlideChildren\n });\n\n // Observe wrapper\n attach(swiper.wrapperEl, {\n attributes: false\n });\n };\n const destroy = () => {\n observers.forEach(observer => {\n observer.disconnect();\n });\n observers.splice(0, observers.length);\n };\n extendParams({\n observer: false,\n observeParents: false,\n observeSlideChildren: false\n });\n on('init', init);\n on('destroy', destroy);\n}\n\n/* eslint-disable no-underscore-dangle */\n\nvar eventsEmitter = {\n on(events, handler, priority) {\n const self = this;\n if (!self.eventsListeners || self.destroyed) return self;\n if (typeof handler !== 'function') return self;\n const method = priority ? 'unshift' : 'push';\n events.split(' ').forEach(event => {\n if (!self.eventsListeners[event]) self.eventsListeners[event] = [];\n self.eventsListeners[event][method](handler);\n });\n return self;\n },\n once(events, handler, priority) {\n const self = this;\n if (!self.eventsListeners || self.destroyed) return self;\n if (typeof handler !== 'function') return self;\n function onceHandler(...args) {\n self.off(events, onceHandler);\n if (onceHandler.__emitterProxy) {\n delete onceHandler.__emitterProxy;\n }\n handler.apply(self, args);\n }\n onceHandler.__emitterProxy = handler;\n return self.on(events, onceHandler, priority);\n },\n onAny(handler, priority) {\n const self = this;\n if (!self.eventsListeners || self.destroyed) return self;\n if (typeof handler !== 'function') return self;\n const method = priority ? 'unshift' : 'push';\n if (self.eventsAnyListeners.indexOf(handler) < 0) {\n self.eventsAnyListeners[method](handler);\n }\n return self;\n },\n offAny(handler) {\n const self = this;\n if (!self.eventsListeners || self.destroyed) return self;\n if (!self.eventsAnyListeners) return self;\n const index = self.eventsAnyListeners.indexOf(handler);\n if (index >= 0) {\n self.eventsAnyListeners.splice(index, 1);\n }\n return self;\n },\n off(events, handler) {\n const self = this;\n if (!self.eventsListeners || self.destroyed) return self;\n if (!self.eventsListeners) return self;\n events.split(' ').forEach(event => {\n if (typeof handler === 'undefined') {\n self.eventsListeners[event] = [];\n } else if (self.eventsListeners[event]) {\n self.eventsListeners[event].forEach((eventHandler, index) => {\n if (eventHandler === handler || eventHandler.__emitterProxy && eventHandler.__emitterProxy === handler) {\n self.eventsListeners[event].splice(index, 1);\n }\n });\n }\n });\n return self;\n },\n emit(...args) {\n const self = this;\n if (!self.eventsListeners || self.destroyed) return self;\n if (!self.eventsListeners) return self;\n let events;\n let data;\n let context;\n if (typeof args[0] === 'string' || Array.isArray(args[0])) {\n events = args[0];\n data = args.slice(1, args.length);\n context = self;\n } else {\n events = args[0].events;\n data = args[0].data;\n context = args[0].context || self;\n }\n data.unshift(context);\n const eventsArray = Array.isArray(events) ? events : events.split(' ');\n eventsArray.forEach(event => {\n if (self.eventsAnyListeners && self.eventsAnyListeners.length) {\n self.eventsAnyListeners.forEach(eventHandler => {\n eventHandler.apply(context, [event, ...data]);\n });\n }\n if (self.eventsListeners && self.eventsListeners[event]) {\n self.eventsListeners[event].forEach(eventHandler => {\n eventHandler.apply(context, data);\n });\n }\n });\n return self;\n }\n};\n\nfunction updateSize() {\n const swiper = this;\n let width;\n let height;\n const el = swiper.el;\n if (typeof swiper.params.width !== 'undefined' && swiper.params.width !== null) {\n width = swiper.params.width;\n } else {\n width = el.clientWidth;\n }\n if (typeof swiper.params.height !== 'undefined' && swiper.params.height !== null) {\n height = swiper.params.height;\n } else {\n height = el.clientHeight;\n }\n if (width === 0 && swiper.isHorizontal() || height === 0 && swiper.isVertical()) {\n return;\n }\n\n // Subtract paddings\n width = width - parseInt(elementStyle(el, 'padding-left') || 0, 10) - parseInt(elementStyle(el, 'padding-right') || 0, 10);\n height = height - parseInt(elementStyle(el, 'padding-top') || 0, 10) - parseInt(elementStyle(el, 'padding-bottom') || 0, 10);\n if (Number.isNaN(width)) width = 0;\n if (Number.isNaN(height)) height = 0;\n Object.assign(swiper, {\n width,\n height,\n size: swiper.isHorizontal() ? width : height\n });\n}\n\nfunction updateSlides() {\n const swiper = this;\n function getDirectionPropertyValue(node, label) {\n return parseFloat(node.getPropertyValue(swiper.getDirectionLabel(label)) || 0);\n }\n const params = swiper.params;\n const {\n wrapperEl,\n slidesEl,\n rtlTranslate: rtl,\n wrongRTL\n } = swiper;\n const isVirtual = swiper.virtual && params.virtual.enabled;\n const previousSlidesLength = isVirtual ? swiper.virtual.slides.length : swiper.slides.length;\n const slides = elementChildren(slidesEl, `.${swiper.params.slideClass}, swiper-slide`);\n const slidesLength = isVirtual ? swiper.virtual.slides.length : slides.length;\n let snapGrid = [];\n const slidesGrid = [];\n const slidesSizesGrid = [];\n let offsetBefore = params.slidesOffsetBefore;\n if (typeof offsetBefore === 'function') {\n offsetBefore = params.slidesOffsetBefore.call(swiper);\n }\n let offsetAfter = params.slidesOffsetAfter;\n if (typeof offsetAfter === 'function') {\n offsetAfter = params.slidesOffsetAfter.call(swiper);\n }\n const previousSnapGridLength = swiper.snapGrid.length;\n const previousSlidesGridLength = swiper.slidesGrid.length;\n const swiperSize = swiper.size - offsetBefore - offsetAfter;\n let spaceBetween = params.spaceBetween;\n let slidePosition = -offsetBefore;\n let prevSlideSize = 0;\n let index = 0;\n if (typeof swiperSize === 'undefined') {\n return;\n }\n if (typeof spaceBetween === 'string' && spaceBetween.indexOf('%') >= 0) {\n spaceBetween = parseFloat(spaceBetween.replace('%', '')) / 100 * swiperSize;\n } else if (typeof spaceBetween === 'string') {\n spaceBetween = parseFloat(spaceBetween);\n }\n swiper.virtualSize = -spaceBetween - offsetBefore - offsetAfter;\n\n // reset margins\n slides.forEach(slideEl => {\n if (rtl) {\n slideEl.style.marginLeft = '';\n } else {\n slideEl.style.marginRight = '';\n }\n slideEl.style.marginBottom = '';\n slideEl.style.marginTop = '';\n });\n\n // reset cssMode offsets\n if (params.centeredSlides && params.cssMode) {\n setCSSProperty(wrapperEl, '--swiper-centered-offset-before', '');\n setCSSProperty(wrapperEl, '--swiper-centered-offset-after', '');\n }\n\n // set cssMode offsets\n if (params.cssMode) {\n setCSSProperty(wrapperEl, '--swiper-slides-offset-before', `${offsetBefore}px`);\n setCSSProperty(wrapperEl, '--swiper-slides-offset-after', `${offsetAfter}px`);\n }\n const gridEnabled = params.grid && params.grid.rows > 1 && swiper.grid;\n if (gridEnabled) {\n swiper.grid.initSlides(slides);\n } else if (swiper.grid) {\n swiper.grid.unsetSlides();\n }\n\n // Calc slides\n let slideSize;\n const shouldResetSlideSize = params.slidesPerView === 'auto' && params.breakpoints && Object.keys(params.breakpoints).filter(key => {\n return typeof params.breakpoints[key].slidesPerView !== 'undefined';\n }).length > 0;\n for (let i = 0; i < slidesLength; i += 1) {\n slideSize = 0;\n const slide = slides[i];\n if (slide) {\n if (gridEnabled) {\n swiper.grid.updateSlide(i, slide, slides);\n }\n if (elementStyle(slide, 'display') === 'none') continue; // eslint-disable-line\n }\n\n if (isVirtual && params.slidesPerView === 'auto') {\n if (params.virtual.slidesPerViewAutoSlideSize) {\n slideSize = params.virtual.slidesPerViewAutoSlideSize;\n }\n if (slideSize && slide) {\n if (params.roundLengths) slideSize = Math.floor(slideSize);\n slide.style[swiper.getDirectionLabel('width')] = `${slideSize}px`;\n }\n } else if (params.slidesPerView === 'auto') {\n if (shouldResetSlideSize) {\n slide.style[swiper.getDirectionLabel('width')] = ``;\n }\n const slideStyles = getComputedStyle(slide);\n const currentTransform = slide.style.transform;\n const currentWebKitTransform = slide.style.webkitTransform;\n if (currentTransform) {\n slide.style.transform = 'none';\n }\n if (currentWebKitTransform) {\n slide.style.webkitTransform = 'none';\n }\n if (params.roundLengths) {\n slideSize = swiper.isHorizontal() ? elementOuterSize(slide, 'width', true) : elementOuterSize(slide, 'height', true);\n } else {\n // eslint-disable-next-line\n const width = getDirectionPropertyValue(slideStyles, 'width');\n const paddingLeft = getDirectionPropertyValue(slideStyles, 'padding-left');\n const paddingRight = getDirectionPropertyValue(slideStyles, 'padding-right');\n const marginLeft = getDirectionPropertyValue(slideStyles, 'margin-left');\n const marginRight = getDirectionPropertyValue(slideStyles, 'margin-right');\n const boxSizing = slideStyles.getPropertyValue('box-sizing');\n if (boxSizing && boxSizing === 'border-box') {\n slideSize = width + marginLeft + marginRight;\n } else {\n const {\n clientWidth,\n offsetWidth\n } = slide;\n slideSize = width + paddingLeft + paddingRight + marginLeft + marginRight + (offsetWidth - clientWidth);\n }\n }\n if (currentTransform) {\n slide.style.transform = currentTransform;\n }\n if (currentWebKitTransform) {\n slide.style.webkitTransform = currentWebKitTransform;\n }\n if (params.roundLengths) slideSize = Math.floor(slideSize);\n } else {\n slideSize = (swiperSize - (params.slidesPerView - 1) * spaceBetween) / params.slidesPerView;\n if (params.roundLengths) slideSize = Math.floor(slideSize);\n if (slide) {\n slide.style[swiper.getDirectionLabel('width')] = `${slideSize}px`;\n }\n }\n if (slide) {\n slide.swiperSlideSize = slideSize;\n }\n slidesSizesGrid.push(slideSize);\n if (params.centeredSlides) {\n slidePosition = slidePosition + slideSize / 2 + prevSlideSize / 2 + spaceBetween;\n if (prevSlideSize === 0 && i !== 0) slidePosition = slidePosition - swiperSize / 2 - spaceBetween;\n if (i === 0) slidePosition = slidePosition - swiperSize / 2 - spaceBetween;\n if (Math.abs(slidePosition) < 1 / 1000) slidePosition = 0;\n if (params.roundLengths) slidePosition = Math.floor(slidePosition);\n if (index % params.slidesPerGroup === 0) snapGrid.push(slidePosition);\n slidesGrid.push(slidePosition);\n } else {\n if (params.roundLengths) slidePosition = Math.floor(slidePosition);\n if ((index - Math.min(swiper.params.slidesPerGroupSkip, index)) % swiper.params.slidesPerGroup === 0) snapGrid.push(slidePosition);\n slidesGrid.push(slidePosition);\n slidePosition = slidePosition + slideSize + spaceBetween;\n }\n swiper.virtualSize += slideSize + spaceBetween;\n prevSlideSize = slideSize;\n index += 1;\n }\n swiper.virtualSize = Math.max(swiper.virtualSize, swiperSize) + offsetAfter;\n if (rtl && wrongRTL && (params.effect === 'slide' || params.effect === 'coverflow')) {\n wrapperEl.style.width = `${swiper.virtualSize + spaceBetween}px`;\n }\n if (params.setWrapperSize) {\n wrapperEl.style[swiper.getDirectionLabel('width')] = `${swiper.virtualSize + spaceBetween}px`;\n }\n if (gridEnabled) {\n swiper.grid.updateWrapperSize(slideSize, snapGrid);\n }\n\n // Remove last grid elements depending on width\n if (!params.centeredSlides) {\n // Check if snapToSlideEdge should be applied\n const isFractionalSlidesPerView = params.slidesPerView !== 'auto' && params.slidesPerView % 1 !== 0;\n const shouldSnapToSlideEdge = params.snapToSlideEdge && !params.loop && (params.slidesPerView === 'auto' || isFractionalSlidesPerView);\n\n // Calculate the last allowed snap index when snapToSlideEdge is enabled\n // This ensures minimum slides are visible at the end\n let lastAllowedSnapIndex = snapGrid.length;\n if (shouldSnapToSlideEdge) {\n let minVisibleSlides;\n if (params.slidesPerView === 'auto') {\n // For 'auto' mode, calculate how many slides fit based on actual sizes\n minVisibleSlides = 1;\n let accumulatedSize = 0;\n for (let i = slidesSizesGrid.length - 1; i >= 0; i -= 1) {\n accumulatedSize += slidesSizesGrid[i] + (i < slidesSizesGrid.length - 1 ? spaceBetween : 0);\n if (accumulatedSize <= swiperSize) {\n minVisibleSlides = slidesSizesGrid.length - i;\n } else {\n break;\n }\n }\n } else {\n minVisibleSlides = Math.floor(params.slidesPerView);\n }\n lastAllowedSnapIndex = Math.max(slidesLength - minVisibleSlides, 0);\n }\n const newSlidesGrid = [];\n for (let i = 0; i < snapGrid.length; i += 1) {\n let slidesGridItem = snapGrid[i];\n if (params.roundLengths) slidesGridItem = Math.floor(slidesGridItem);\n if (shouldSnapToSlideEdge) {\n // When snapToSlideEdge is enabled, only keep snaps up to lastAllowedSnapIndex\n if (i <= lastAllowedSnapIndex) {\n newSlidesGrid.push(slidesGridItem);\n }\n } else if (snapGrid[i] <= swiper.virtualSize - swiperSize) {\n // When snapToSlideEdge is disabled, keep snaps that fit within scrollable area\n newSlidesGrid.push(slidesGridItem);\n }\n }\n snapGrid = newSlidesGrid;\n if (Math.floor(swiper.virtualSize - swiperSize) - Math.floor(snapGrid[snapGrid.length - 1]) > 1) {\n // Only add edge-aligned snap if snapToSlideEdge is not enabled\n if (!shouldSnapToSlideEdge) {\n snapGrid.push(swiper.virtualSize - swiperSize);\n }\n }\n }\n if (isVirtual && params.loop) {\n const size = slidesSizesGrid[0] + spaceBetween;\n if (params.slidesPerGroup > 1) {\n const groups = Math.ceil((swiper.virtual.slidesBefore + swiper.virtual.slidesAfter) / params.slidesPerGroup);\n const groupSize = size * params.slidesPerGroup;\n for (let i = 0; i < groups; i += 1) {\n snapGrid.push(snapGrid[snapGrid.length - 1] + groupSize);\n }\n }\n for (let i = 0; i < swiper.virtual.slidesBefore + swiper.virtual.slidesAfter; i += 1) {\n if (params.slidesPerGroup === 1) {\n snapGrid.push(snapGrid[snapGrid.length - 1] + size);\n }\n slidesGrid.push(slidesGrid[slidesGrid.length - 1] + size);\n swiper.virtualSize += size;\n }\n }\n if (snapGrid.length === 0) snapGrid = [0];\n if (spaceBetween !== 0) {\n const key = swiper.isHorizontal() && rtl ? 'marginLeft' : swiper.getDirectionLabel('marginRight');\n slides.filter((_, slideIndex) => {\n if (!params.cssMode || params.loop) return true;\n if (slideIndex === slides.length - 1) {\n return false;\n }\n return true;\n }).forEach(slideEl => {\n slideEl.style[key] = `${spaceBetween}px`;\n });\n }\n if (params.centeredSlides && params.centeredSlidesBounds) {\n let allSlidesSize = 0;\n slidesSizesGrid.forEach(slideSizeValue => {\n allSlidesSize += slideSizeValue + (spaceBetween || 0);\n });\n allSlidesSize -= spaceBetween;\n const maxSnap = allSlidesSize > swiperSize ? allSlidesSize - swiperSize : 0;\n snapGrid = snapGrid.map(snap => {\n if (snap <= 0) return -offsetBefore;\n if (snap > maxSnap) return maxSnap + offsetAfter;\n return snap;\n });\n }\n if (params.centerInsufficientSlides) {\n let allSlidesSize = 0;\n slidesSizesGrid.forEach(slideSizeValue => {\n allSlidesSize += slideSizeValue + (spaceBetween || 0);\n });\n allSlidesSize -= spaceBetween;\n if (allSlidesSize < swiperSize) {\n const allSlidesOffset = (swiperSize - allSlidesSize) / 2;\n snapGrid.forEach((snap, snapIndex) => {\n snapGrid[snapIndex] = snap - allSlidesOffset;\n });\n slidesGrid.forEach((snap, snapIndex) => {\n slidesGrid[snapIndex] = snap + allSlidesOffset;\n });\n }\n }\n Object.assign(swiper, {\n slides,\n snapGrid,\n slidesGrid,\n slidesSizesGrid\n });\n if (params.centeredSlides && params.cssMode && !params.centeredSlidesBounds) {\n setCSSProperty(wrapperEl, '--swiper-centered-offset-before', `${-snapGrid[0]}px`);\n setCSSProperty(wrapperEl, '--swiper-centered-offset-after', `${swiper.size / 2 - slidesSizesGrid[slidesSizesGrid.length - 1] / 2}px`);\n const addToSnapGrid = -swiper.snapGrid[0];\n const addToSlidesGrid = -swiper.slidesGrid[0];\n swiper.snapGrid = swiper.snapGrid.map(v => v + addToSnapGrid);\n swiper.slidesGrid = swiper.slidesGrid.map(v => v + addToSlidesGrid);\n }\n if (slidesLength !== previousSlidesLength) {\n swiper.emit('slidesLengthChange');\n }\n if (snapGrid.length !== previousSnapGridLength) {\n if (swiper.params.watchOverflow) swiper.checkOverflow();\n swiper.emit('snapGridLengthChange');\n }\n if (slidesGrid.length !== previousSlidesGridLength) {\n swiper.emit('slidesGridLengthChange');\n }\n if (params.watchSlidesProgress) {\n swiper.updateSlidesOffset();\n }\n swiper.emit('slidesUpdated');\n if (!isVirtual && !params.cssMode && (params.effect === 'slide' || params.effect === 'fade')) {\n const backFaceHiddenClass = `${params.containerModifierClass}backface-hidden`;\n const hasClassBackfaceClassAdded = swiper.el.classList.contains(backFaceHiddenClass);\n if (slidesLength <= params.maxBackfaceHiddenSlides) {\n if (!hasClassBackfaceClassAdded) swiper.el.classList.add(backFaceHiddenClass);\n } else if (hasClassBackfaceClassAdded) {\n swiper.el.classList.remove(backFaceHiddenClass);\n }\n }\n}\n\nfunction updateAutoHeight(speed) {\n const swiper = this;\n const activeSlides = [];\n const isVirtual = swiper.virtual && swiper.params.virtual.enabled;\n let newHeight = 0;\n let i;\n if (typeof speed === 'number') {\n swiper.setTransition(speed);\n } else if (speed === true) {\n swiper.setTransition(swiper.params.speed);\n }\n const getSlideByIndex = index => {\n if (isVirtual) {\n return swiper.slides[swiper.getSlideIndexByData(index)];\n }\n return swiper.slides[index];\n };\n // Find slides currently in view\n if (swiper.params.slidesPerView !== 'auto' && swiper.params.slidesPerView > 1) {\n if (swiper.params.centeredSlides) {\n (swiper.visibleSlides || []).forEach(slide => {\n activeSlides.push(slide);\n });\n } else {\n for (i = 0; i < Math.ceil(swiper.params.slidesPerView); i += 1) {\n const index = swiper.activeIndex + i;\n if (index > swiper.slides.length && !isVirtual) break;\n activeSlides.push(getSlideByIndex(index));\n }\n }\n } else {\n activeSlides.push(getSlideByIndex(swiper.activeIndex));\n }\n\n // Find new height from highest slide in view\n for (i = 0; i < activeSlides.length; i += 1) {\n if (typeof activeSlides[i] !== 'undefined') {\n const height = activeSlides[i].offsetHeight;\n newHeight = height > newHeight ? height : newHeight;\n }\n }\n\n // Update Height\n if (newHeight || newHeight === 0) swiper.wrapperEl.style.height = `${newHeight}px`;\n}\n\nfunction updateSlidesOffset() {\n const swiper = this;\n const slides = swiper.slides;\n // eslint-disable-next-line\n const minusOffset = swiper.isElement ? swiper.isHorizontal() ? swiper.wrapperEl.offsetLeft : swiper.wrapperEl.offsetTop : 0;\n for (let i = 0; i < slides.length; i += 1) {\n slides[i].swiperSlideOffset = (swiper.isHorizontal() ? slides[i].offsetLeft : slides[i].offsetTop) - minusOffset - swiper.cssOverflowAdjustment();\n }\n}\n\nconst toggleSlideClasses$1 = (slideEl, condition, className) => {\n if (condition && !slideEl.classList.contains(className)) {\n slideEl.classList.add(className);\n } else if (!condition && slideEl.classList.contains(className)) {\n slideEl.classList.remove(className);\n }\n};\nfunction updateSlidesProgress(translate = this && this.translate || 0) {\n const swiper = this;\n const params = swiper.params;\n const {\n slides,\n rtlTranslate: rtl,\n snapGrid\n } = swiper;\n if (slides.length === 0) return;\n if (typeof slides[0].swiperSlideOffset === 'undefined') swiper.updateSlidesOffset();\n let offsetCenter = -translate;\n if (rtl) offsetCenter = translate;\n swiper.visibleSlidesIndexes = [];\n swiper.visibleSlides = [];\n let spaceBetween = params.spaceBetween;\n if (typeof spaceBetween === 'string' && spaceBetween.indexOf('%') >= 0) {\n spaceBetween = parseFloat(spaceBetween.replace('%', '')) / 100 * swiper.size;\n } else if (typeof spaceBetween === 'string') {\n spaceBetween = parseFloat(spaceBetween);\n }\n for (let i = 0; i < slides.length; i += 1) {\n const slide = slides[i];\n let slideOffset = slide.swiperSlideOffset;\n if (params.cssMode && params.centeredSlides) {\n slideOffset -= slides[0].swiperSlideOffset;\n }\n const slideProgress = (offsetCenter + (params.centeredSlides ? swiper.minTranslate() : 0) - slideOffset) / (slide.swiperSlideSize + spaceBetween);\n const originalSlideProgress = (offsetCenter - snapGrid[0] + (params.centeredSlides ? swiper.minTranslate() : 0) - slideOffset) / (slide.swiperSlideSize + spaceBetween);\n const slideBefore = -(offsetCenter - slideOffset);\n const slideAfter = slideBefore + swiper.slidesSizesGrid[i];\n const isFullyVisible = slideBefore >= 0 && slideBefore <= swiper.size - swiper.slidesSizesGrid[i];\n const isVisible = slideBefore >= 0 && slideBefore < swiper.size - 1 || slideAfter > 1 && slideAfter <= swiper.size || slideBefore <= 0 && slideAfter >= swiper.size;\n if (isVisible) {\n swiper.visibleSlides.push(slide);\n swiper.visibleSlidesIndexes.push(i);\n }\n toggleSlideClasses$1(slide, isVisible, params.slideVisibleClass);\n toggleSlideClasses$1(slide, isFullyVisible, params.slideFullyVisibleClass);\n slide.progress = rtl ? -slideProgress : slideProgress;\n slide.originalProgress = rtl ? -originalSlideProgress : originalSlideProgress;\n }\n}\n\nfunction updateProgress(translate) {\n const swiper = this;\n if (typeof translate === 'undefined') {\n const multiplier = swiper.rtlTranslate ? -1 : 1;\n // eslint-disable-next-line\n translate = swiper && swiper.translate && swiper.translate * multiplier || 0;\n }\n const params = swiper.params;\n const translatesDiff = swiper.maxTranslate() - swiper.minTranslate();\n let {\n progress,\n isBeginning,\n isEnd,\n progressLoop\n } = swiper;\n const wasBeginning = isBeginning;\n const wasEnd = isEnd;\n if (translatesDiff === 0) {\n progress = 0;\n isBeginning = true;\n isEnd = true;\n } else {\n progress = (translate - swiper.minTranslate()) / translatesDiff;\n const isBeginningRounded = Math.abs(translate - swiper.minTranslate()) < 1;\n const isEndRounded = Math.abs(translate - swiper.maxTranslate()) < 1;\n isBeginning = isBeginningRounded || progress <= 0;\n isEnd = isEndRounded || progress >= 1;\n if (isBeginningRounded) progress = 0;\n if (isEndRounded) progress = 1;\n }\n if (params.loop) {\n const firstSlideIndex = swiper.getSlideIndexByData(0);\n const lastSlideIndex = swiper.getSlideIndexByData(swiper.slides.length - 1);\n const firstSlideTranslate = swiper.slidesGrid[firstSlideIndex];\n const lastSlideTranslate = swiper.slidesGrid[lastSlideIndex];\n const translateMax = swiper.slidesGrid[swiper.slidesGrid.length - 1];\n const translateAbs = Math.abs(translate);\n if (translateAbs >= firstSlideTranslate) {\n progressLoop = (translateAbs - firstSlideTranslate) / translateMax;\n } else {\n progressLoop = (translateAbs + translateMax - lastSlideTranslate) / translateMax;\n }\n if (progressLoop > 1) progressLoop -= 1;\n }\n Object.assign(swiper, {\n progress,\n progressLoop,\n isBeginning,\n isEnd\n });\n if (params.watchSlidesProgress || params.centeredSlides && params.autoHeight) swiper.updateSlidesProgress(translate);\n if (isBeginning && !wasBeginning) {\n swiper.emit('reachBeginning toEdge');\n }\n if (isEnd && !wasEnd) {\n swiper.emit('reachEnd toEdge');\n }\n if (wasBeginning && !isBeginning || wasEnd && !isEnd) {\n swiper.emit('fromEdge');\n }\n swiper.emit('progress', progress);\n}\n\nconst toggleSlideClasses = (slideEl, condition, className) => {\n if (condition && !slideEl.classList.contains(className)) {\n slideEl.classList.add(className);\n } else if (!condition && slideEl.classList.contains(className)) {\n slideEl.classList.remove(className);\n }\n};\nfunction updateSlidesClasses() {\n const swiper = this;\n const {\n slides,\n params,\n slidesEl,\n activeIndex\n } = swiper;\n const isVirtual = swiper.virtual && params.virtual.enabled;\n const gridEnabled = swiper.grid && params.grid && params.grid.rows > 1;\n const getFilteredSlide = selector => {\n return elementChildren(slidesEl, `.${params.slideClass}${selector}, swiper-slide${selector}`)[0];\n };\n let activeSlide;\n let prevSlide;\n let nextSlide;\n if (isVirtual) {\n if (params.loop) {\n let slideIndex = activeIndex - swiper.virtual.slidesBefore;\n if (slideIndex < 0) slideIndex = swiper.virtual.slides.length + slideIndex;\n if (slideIndex >= swiper.virtual.slides.length) slideIndex -= swiper.virtual.slides.length;\n activeSlide = getFilteredSlide(`[data-swiper-slide-index=\"${slideIndex}\"]`);\n } else {\n activeSlide = getFilteredSlide(`[data-swiper-slide-index=\"${activeIndex}\"]`);\n }\n } else {\n if (gridEnabled) {\n activeSlide = slides.find(slideEl => slideEl.column === activeIndex);\n nextSlide = slides.find(slideEl => slideEl.column === activeIndex + 1);\n prevSlide = slides.find(slideEl => slideEl.column === activeIndex - 1);\n } else {\n activeSlide = slides[activeIndex];\n }\n }\n if (activeSlide) {\n if (!gridEnabled) {\n // Next Slide\n nextSlide = elementNextAll(activeSlide, `.${params.slideClass}, swiper-slide`)[0];\n if (params.loop && !nextSlide) {\n nextSlide = slides[0];\n }\n\n // Prev Slide\n prevSlide = elementPrevAll(activeSlide, `.${params.slideClass}, swiper-slide`)[0];\n if (params.loop && !prevSlide === 0) {\n prevSlide = slides[slides.length - 1];\n }\n }\n }\n slides.forEach(slideEl => {\n toggleSlideClasses(slideEl, slideEl === activeSlide, params.slideActiveClass);\n toggleSlideClasses(slideEl, slideEl === nextSlide, params.slideNextClass);\n toggleSlideClasses(slideEl, slideEl === prevSlide, params.slidePrevClass);\n });\n swiper.emitSlidesClasses();\n}\n\nconst processLazyPreloader = (swiper, imageEl) => {\n if (!swiper || swiper.destroyed || !swiper.params) return;\n const slideSelector = () => swiper.isElement ? `swiper-slide` : `.${swiper.params.slideClass}`;\n const slideEl = imageEl.closest(slideSelector());\n if (slideEl) {\n let lazyEl = slideEl.querySelector(`.${swiper.params.lazyPreloaderClass}`);\n if (!lazyEl && swiper.isElement) {\n if (slideEl.shadowRoot) {\n lazyEl = slideEl.shadowRoot.querySelector(`.${swiper.params.lazyPreloaderClass}`);\n } else {\n // init later\n requestAnimationFrame(() => {\n if (slideEl.shadowRoot) {\n lazyEl = slideEl.shadowRoot.querySelector(`.${swiper.params.lazyPreloaderClass}`);\n if (lazyEl && !lazyEl.lazyPreloaderManaged) lazyEl.remove();\n }\n });\n }\n }\n // Skip removal if managed by React/Vue component\n if (lazyEl && !lazyEl.lazyPreloaderManaged) lazyEl.remove();\n }\n};\nconst unlazy = (swiper, index) => {\n if (!swiper.slides[index]) return;\n const imageEl = swiper.slides[index].querySelector('[loading=\"lazy\"]');\n if (imageEl) imageEl.removeAttribute('loading');\n};\nconst preload = swiper => {\n if (!swiper || swiper.destroyed || !swiper.params) return;\n let amount = swiper.params.lazyPreloadPrevNext;\n const len = swiper.slides.length;\n if (!len || !amount || amount < 0) return;\n amount = Math.min(amount, len);\n const slidesPerView = swiper.params.slidesPerView === 'auto' ? swiper.slidesPerViewDynamic() : Math.ceil(swiper.params.slidesPerView);\n const activeIndex = swiper.activeIndex;\n if (swiper.params.grid && swiper.params.grid.rows > 1) {\n const activeColumn = activeIndex;\n const preloadColumns = [activeColumn - amount];\n preloadColumns.push(...Array.from({\n length: amount\n }).map((_, i) => {\n return activeColumn + slidesPerView + i;\n }));\n swiper.slides.forEach((slideEl, i) => {\n if (preloadColumns.includes(slideEl.column)) unlazy(swiper, i);\n });\n return;\n }\n const slideIndexLastInView = activeIndex + slidesPerView - 1;\n if (swiper.params.rewind || swiper.params.loop) {\n for (let i = activeIndex - amount; i <= slideIndexLastInView + amount; i += 1) {\n const realIndex = (i % len + len) % len;\n if (realIndex < activeIndex || realIndex > slideIndexLastInView) unlazy(swiper, realIndex);\n }\n } else {\n for (let i = Math.max(activeIndex - amount, 0); i <= Math.min(slideIndexLastInView + amount, len - 1); i += 1) {\n if (i !== activeIndex && (i > slideIndexLastInView || i < activeIndex)) {\n unlazy(swiper, i);\n }\n }\n }\n};\n\nfunction getActiveIndexByTranslate(swiper) {\n const {\n slidesGrid,\n params\n } = swiper;\n const translate = swiper.rtlTranslate ? swiper.translate : -swiper.translate;\n let activeIndex;\n for (let i = 0; i < slidesGrid.length; i += 1) {\n if (typeof slidesGrid[i + 1] !== 'undefined') {\n if (translate >= slidesGrid[i] && translate < slidesGrid[i + 1] - (slidesGrid[i + 1] - slidesGrid[i]) / 2) {\n activeIndex = i;\n } else if (translate >= slidesGrid[i] && translate < slidesGrid[i + 1]) {\n activeIndex = i + 1;\n }\n } else if (translate >= slidesGrid[i]) {\n activeIndex = i;\n }\n }\n // Normalize slideIndex\n if (params.normalizeSlideIndex) {\n if (activeIndex < 0 || typeof activeIndex === 'undefined') activeIndex = 0;\n }\n return activeIndex;\n}\nfunction updateActiveIndex(newActiveIndex) {\n const swiper = this;\n const translate = swiper.rtlTranslate ? swiper.translate : -swiper.translate;\n const {\n snapGrid,\n params,\n activeIndex: previousIndex,\n realIndex: previousRealIndex,\n snapIndex: previousSnapIndex\n } = swiper;\n let activeIndex = newActiveIndex;\n let snapIndex;\n const getVirtualRealIndex = aIndex => {\n let realIndex = aIndex - swiper.virtual.slidesBefore;\n if (realIndex < 0) {\n realIndex = swiper.virtual.slides.length + realIndex;\n }\n if (realIndex >= swiper.virtual.slides.length) {\n realIndex -= swiper.virtual.slides.length;\n }\n return realIndex;\n };\n if (typeof activeIndex === 'undefined') {\n activeIndex = getActiveIndexByTranslate(swiper);\n }\n if (snapGrid.indexOf(translate) >= 0) {\n snapIndex = snapGrid.indexOf(translate);\n } else {\n const skip = Math.min(params.slidesPerGroupSkip, activeIndex);\n snapIndex = skip + Math.floor((activeIndex - skip) / params.slidesPerGroup);\n }\n if (snapIndex >= snapGrid.length) snapIndex = snapGrid.length - 1;\n if (activeIndex === previousIndex && !swiper.params.loop) {\n if (snapIndex !== previousSnapIndex) {\n swiper.snapIndex = snapIndex;\n swiper.emit('snapIndexChange');\n }\n return;\n }\n if (activeIndex === previousIndex && swiper.params.loop && swiper.virtual && swiper.params.virtual.enabled) {\n swiper.realIndex = getVirtualRealIndex(activeIndex);\n return;\n }\n const gridEnabled = swiper.grid && params.grid && params.grid.rows > 1;\n\n // Get real index\n let realIndex;\n if (swiper.virtual && params.virtual.enabled) {\n if (params.loop) {\n realIndex = getVirtualRealIndex(activeIndex);\n } else {\n realIndex = activeIndex;\n }\n } else if (gridEnabled) {\n const firstSlideInColumn = swiper.slides.find(slideEl => slideEl.column === activeIndex);\n let activeSlideIndex = parseInt(firstSlideInColumn.getAttribute('data-swiper-slide-index'), 10);\n if (Number.isNaN(activeSlideIndex)) {\n activeSlideIndex = Math.max(swiper.slides.indexOf(firstSlideInColumn), 0);\n }\n realIndex = Math.floor(activeSlideIndex / params.grid.rows);\n } else if (swiper.slides[activeIndex]) {\n const slideIndex = swiper.slides[activeIndex].getAttribute('data-swiper-slide-index');\n if (slideIndex) {\n realIndex = parseInt(slideIndex, 10);\n } else {\n realIndex = activeIndex;\n }\n } else {\n realIndex = activeIndex;\n }\n Object.assign(swiper, {\n previousSnapIndex,\n snapIndex,\n previousRealIndex,\n realIndex,\n previousIndex,\n activeIndex\n });\n if (swiper.initialized) {\n preload(swiper);\n }\n swiper.emit('activeIndexChange');\n swiper.emit('snapIndexChange');\n if (swiper.initialized || swiper.params.runCallbacksOnInit) {\n if (previousRealIndex !== realIndex) {\n swiper.emit('realIndexChange');\n }\n swiper.emit('slideChange');\n }\n}\n\nfunction updateClickedSlide(el, path) {\n const swiper = this;\n const params = swiper.params;\n let slide = el.closest(`.${params.slideClass}, swiper-slide`);\n if (!slide && swiper.isElement && path && path.length > 1 && path.includes(el)) {\n [...path.slice(path.indexOf(el) + 1, path.length)].forEach(pathEl => {\n if (!slide && pathEl.matches && pathEl.matches(`.${params.slideClass}, swiper-slide`)) {\n slide = pathEl;\n }\n });\n }\n let slideFound = false;\n let slideIndex;\n if (slide) {\n for (let i = 0; i < swiper.slides.length; i += 1) {\n if (swiper.slides[i] === slide) {\n slideFound = true;\n slideIndex = i;\n break;\n }\n }\n }\n if (slide && slideFound) {\n swiper.clickedSlide = slide;\n if (swiper.virtual && swiper.params.virtual.enabled) {\n swiper.clickedIndex = parseInt(slide.getAttribute('data-swiper-slide-index'), 10);\n } else {\n swiper.clickedIndex = slideIndex;\n }\n } else {\n swiper.clickedSlide = undefined;\n swiper.clickedIndex = undefined;\n return;\n }\n if (params.slideToClickedSlide && swiper.clickedIndex !== undefined && swiper.clickedIndex !== swiper.activeIndex) {\n swiper.slideToClickedSlide();\n }\n}\n\nvar update = {\n updateSize,\n updateSlides,\n updateAutoHeight,\n updateSlidesOffset,\n updateSlidesProgress,\n updateProgress,\n updateSlidesClasses,\n updateActiveIndex,\n updateClickedSlide\n};\n\nfunction getSwiperTranslate(axis = this.isHorizontal() ? 'x' : 'y') {\n const swiper = this;\n const {\n params,\n rtlTranslate: rtl,\n translate,\n wrapperEl\n } = swiper;\n if (params.virtualTranslate) {\n return rtl ? -translate : translate;\n }\n if (params.cssMode) {\n return translate;\n }\n let currentTranslate = getTranslate(wrapperEl, axis);\n currentTranslate += swiper.cssOverflowAdjustment();\n if (rtl) currentTranslate = -currentTranslate;\n return currentTranslate || 0;\n}\n\nfunction setTranslate(translate, byController) {\n const swiper = this;\n const {\n rtlTranslate: rtl,\n params,\n wrapperEl,\n progress\n } = swiper;\n let x = 0;\n let y = 0;\n const z = 0;\n if (swiper.isHorizontal()) {\n x = rtl ? -translate : translate;\n } else {\n y = translate;\n }\n if (params.roundLengths) {\n x = Math.floor(x);\n y = Math.floor(y);\n }\n swiper.previousTranslate = swiper.translate;\n swiper.translate = swiper.isHorizontal() ? x : y;\n if (params.cssMode) {\n wrapperEl[swiper.isHorizontal() ? 'scrollLeft' : 'scrollTop'] = swiper.isHorizontal() ? -x : -y;\n } else if (!params.virtualTranslate) {\n if (swiper.isHorizontal()) {\n x -= swiper.cssOverflowAdjustment();\n } else {\n y -= swiper.cssOverflowAdjustment();\n }\n wrapperEl.style.transform = `translate3d(${x}px, ${y}px, ${z}px)`;\n }\n\n // Check if we need to update progress\n let newProgress;\n const translatesDiff = swiper.maxTranslate() - swiper.minTranslate();\n if (translatesDiff === 0) {\n newProgress = 0;\n } else {\n newProgress = (translate - swiper.minTranslate()) / translatesDiff;\n }\n if (newProgress !== progress) {\n swiper.updateProgress(translate);\n }\n swiper.emit('setTranslate', swiper.translate, byController);\n}\n\nfunction minTranslate() {\n return -this.snapGrid[0];\n}\n\nfunction maxTranslate() {\n return -this.snapGrid[this.snapGrid.length - 1];\n}\n\nfunction translateTo(translate = 0, speed = this.params.speed, runCallbacks = true, translateBounds = true, internal) {\n const swiper = this;\n const {\n params,\n wrapperEl\n } = swiper;\n if (swiper.animating && params.preventInteractionOnTransition) {\n return false;\n }\n const minTranslate = swiper.minTranslate();\n const maxTranslate = swiper.maxTranslate();\n let newTranslate;\n if (translateBounds && translate > minTranslate) newTranslate = minTranslate;else if (translateBounds && translate < maxTranslate) newTranslate = maxTranslate;else newTranslate = translate;\n\n // Update progress\n swiper.updateProgress(newTranslate);\n if (params.cssMode) {\n const isH = swiper.isHorizontal();\n if (speed === 0) {\n wrapperEl[isH ? 'scrollLeft' : 'scrollTop'] = -newTranslate;\n } else {\n if (!swiper.support.smoothScroll) {\n animateCSSModeScroll({\n swiper,\n targetPosition: -newTranslate,\n side: isH ? 'left' : 'top'\n });\n return true;\n }\n wrapperEl.scrollTo({\n [isH ? 'left' : 'top']: -newTranslate,\n behavior: 'smooth'\n });\n }\n return true;\n }\n if (speed === 0) {\n swiper.setTransition(0);\n swiper.setTranslate(newTranslate);\n if (runCallbacks) {\n swiper.emit('beforeTransitionStart', speed, internal);\n swiper.emit('transitionEnd');\n }\n } else {\n swiper.setTransition(speed);\n swiper.setTranslate(newTranslate);\n if (runCallbacks) {\n swiper.emit('beforeTransitionStart', speed, internal);\n swiper.emit('transitionStart');\n }\n if (!swiper.animating) {\n swiper.animating = true;\n if (!swiper.onTranslateToWrapperTransitionEnd) {\n swiper.onTranslateToWrapperTransitionEnd = function transitionEnd(e) {\n if (!swiper || swiper.destroyed) return;\n if (e.target !== this) return;\n swiper.wrapperEl.removeEventListener('transitionend', swiper.onTranslateToWrapperTransitionEnd);\n swiper.onTranslateToWrapperTransitionEnd = null;\n delete swiper.onTranslateToWrapperTransitionEnd;\n swiper.animating = false;\n if (runCallbacks) {\n swiper.emit('transitionEnd');\n }\n };\n }\n swiper.wrapperEl.addEventListener('transitionend', swiper.onTranslateToWrapperTransitionEnd);\n }\n }\n return true;\n}\n\nvar translate = {\n getTranslate: getSwiperTranslate,\n setTranslate,\n minTranslate,\n maxTranslate,\n translateTo\n};\n\nfunction setTransition(duration, byController) {\n const swiper = this;\n if (!swiper.params.cssMode) {\n swiper.wrapperEl.style.transitionDuration = `${duration}ms`;\n swiper.wrapperEl.style.transitionDelay = duration === 0 ? `0ms` : '';\n }\n swiper.emit('setTransition', duration, byController);\n}\n\nfunction transitionEmit({\n swiper,\n runCallbacks,\n direction,\n step\n}) {\n const {\n activeIndex,\n previousIndex\n } = swiper;\n let dir = direction;\n if (!dir) {\n if (activeIndex > previousIndex) dir = 'next';else if (activeIndex < previousIndex) dir = 'prev';else dir = 'reset';\n }\n swiper.emit(`transition${step}`);\n if (runCallbacks && dir === 'reset') {\n swiper.emit(`slideResetTransition${step}`);\n } else if (runCallbacks && activeIndex !== previousIndex) {\n swiper.emit(`slideChangeTransition${step}`);\n if (dir === 'next') {\n swiper.emit(`slideNextTransition${step}`);\n } else {\n swiper.emit(`slidePrevTransition${step}`);\n }\n }\n}\n\nfunction transitionStart(runCallbacks = true, direction) {\n const swiper = this;\n const {\n params\n } = swiper;\n if (params.cssMode) return;\n if (params.autoHeight) {\n swiper.updateAutoHeight();\n }\n transitionEmit({\n swiper,\n runCallbacks,\n direction,\n step: 'Start'\n });\n}\n\nfunction transitionEnd(runCallbacks = true, direction) {\n const swiper = this;\n const {\n params\n } = swiper;\n swiper.animating = false;\n if (params.cssMode) return;\n swiper.setTransition(0);\n transitionEmit({\n swiper,\n runCallbacks,\n direction,\n step: 'End'\n });\n}\n\nvar transition = {\n setTransition,\n transitionStart,\n transitionEnd\n};\n\nfunction slideTo(index = 0, speed, runCallbacks = true, internal, initial) {\n if (typeof index === 'string') {\n index = parseInt(index, 10);\n }\n const swiper = this;\n let slideIndex = index;\n if (slideIndex < 0) slideIndex = 0;\n const {\n params,\n snapGrid,\n slidesGrid,\n previousIndex,\n activeIndex,\n rtlTranslate: rtl,\n wrapperEl,\n enabled\n } = swiper;\n if (!enabled && !internal && !initial || swiper.destroyed || swiper.animating && params.preventInteractionOnTransition) {\n return false;\n }\n if (typeof speed === 'undefined') {\n speed = swiper.params.speed;\n }\n const skip = Math.min(swiper.params.slidesPerGroupSkip, slideIndex);\n let snapIndex = skip + Math.floor((slideIndex - skip) / swiper.params.slidesPerGroup);\n if (snapIndex >= snapGrid.length) snapIndex = snapGrid.length - 1;\n const translate = -snapGrid[snapIndex];\n // Normalize slideIndex\n if (params.normalizeSlideIndex) {\n for (let i = 0; i < slidesGrid.length; i += 1) {\n const normalizedTranslate = -Math.floor(translate * 100);\n const normalizedGrid = Math.floor(slidesGrid[i] * 100);\n const normalizedGridNext = Math.floor(slidesGrid[i + 1] * 100);\n if (typeof slidesGrid[i + 1] !== 'undefined') {\n if (normalizedTranslate >= normalizedGrid && normalizedTranslate < normalizedGridNext - (normalizedGridNext - normalizedGrid) / 2) {\n slideIndex = i;\n } else if (normalizedTranslate >= normalizedGrid && normalizedTranslate < normalizedGridNext) {\n slideIndex = i + 1;\n }\n } else if (normalizedTranslate >= normalizedGrid) {\n slideIndex = i;\n }\n }\n }\n // Directions locks\n if (swiper.initialized && slideIndex !== activeIndex) {\n if (!swiper.allowSlideNext && (rtl ? translate > swiper.translate && translate > swiper.minTranslate() : translate < swiper.translate && translate < swiper.minTranslate())) {\n return false;\n }\n if (!swiper.allowSlidePrev && translate > swiper.translate && translate > swiper.maxTranslate()) {\n if ((activeIndex || 0) !== slideIndex) {\n return false;\n }\n }\n }\n if (slideIndex !== (previousIndex || 0) && runCallbacks) {\n swiper.emit('beforeSlideChangeStart');\n }\n\n // Update progress\n swiper.updateProgress(translate);\n let direction;\n if (slideIndex > activeIndex) direction = 'next';else if (slideIndex < activeIndex) direction = 'prev';else direction = 'reset';\n\n // initial virtual\n const isVirtual = swiper.virtual && swiper.params.virtual.enabled;\n const isInitialVirtual = isVirtual && initial;\n // Update Index\n if (!isInitialVirtual && (rtl && -translate === swiper.translate || !rtl && translate === swiper.translate)) {\n swiper.updateActiveIndex(slideIndex);\n // Update Height\n if (params.autoHeight) {\n swiper.updateAutoHeight();\n }\n swiper.updateSlidesClasses();\n if (params.effect !== 'slide') {\n swiper.setTranslate(translate);\n }\n if (direction !== 'reset') {\n swiper.transitionStart(runCallbacks, direction);\n swiper.transitionEnd(runCallbacks, direction);\n }\n return false;\n }\n if (params.cssMode) {\n const isH = swiper.isHorizontal();\n const t = rtl ? translate : -translate;\n if (speed === 0) {\n if (isVirtual) {\n swiper.wrapperEl.style.scrollSnapType = 'none';\n swiper._immediateVirtual = true;\n }\n if (isVirtual && !swiper._cssModeVirtualInitialSet && swiper.params.initialSlide > 0) {\n swiper._cssModeVirtualInitialSet = true;\n requestAnimationFrame(() => {\n wrapperEl[isH ? 'scrollLeft' : 'scrollTop'] = t;\n });\n } else {\n wrapperEl[isH ? 'scrollLeft' : 'scrollTop'] = t;\n }\n if (isVirtual) {\n requestAnimationFrame(() => {\n swiper.wrapperEl.style.scrollSnapType = '';\n swiper._immediateVirtual = false;\n });\n }\n } else {\n if (!swiper.support.smoothScroll) {\n animateCSSModeScroll({\n swiper,\n targetPosition: t,\n side: isH ? 'left' : 'top'\n });\n return true;\n }\n wrapperEl.scrollTo({\n [isH ? 'left' : 'top']: t,\n behavior: 'smooth'\n });\n }\n return true;\n }\n const browser = getBrowser();\n const isSafari = browser.isSafari;\n if (isVirtual && !initial && isSafari && swiper.isElement) {\n swiper.virtual.update(false, false, slideIndex);\n }\n swiper.setTransition(speed);\n swiper.setTranslate(translate);\n swiper.updateActiveIndex(slideIndex);\n swiper.updateSlidesClasses();\n swiper.emit('beforeTransitionStart', speed, internal);\n swiper.transitionStart(runCallbacks, direction);\n if (speed === 0) {\n swiper.transitionEnd(runCallbacks, direction);\n } else if (!swiper.animating) {\n swiper.animating = true;\n if (!swiper.onSlideToWrapperTransitionEnd) {\n swiper.onSlideToWrapperTransitionEnd = function transitionEnd(e) {\n if (!swiper || swiper.destroyed) return;\n if (e.target !== this) return;\n swiper.wrapperEl.removeEventListener('transitionend', swiper.onSlideToWrapperTransitionEnd);\n swiper.onSlideToWrapperTransitionEnd = null;\n delete swiper.onSlideToWrapperTransitionEnd;\n swiper.transitionEnd(runCallbacks, direction);\n };\n }\n swiper.wrapperEl.addEventListener('transitionend', swiper.onSlideToWrapperTransitionEnd);\n }\n return true;\n}\n\nfunction slideToLoop(index = 0, speed, runCallbacks = true, internal) {\n if (typeof index === 'string') {\n const indexAsNumber = parseInt(index, 10);\n index = indexAsNumber;\n }\n const swiper = this;\n if (swiper.destroyed) return;\n if (typeof speed === 'undefined') {\n speed = swiper.params.speed;\n }\n const gridEnabled = swiper.grid && swiper.params.grid && swiper.params.grid.rows > 1;\n let newIndex = index;\n if (swiper.params.loop) {\n if (swiper.virtual && swiper.params.virtual.enabled) {\n // eslint-disable-next-line\n newIndex = newIndex + swiper.virtual.slidesBefore;\n } else {\n let targetSlideIndex;\n if (gridEnabled) {\n const slideIndex = newIndex * swiper.params.grid.rows;\n targetSlideIndex = swiper.slides.find(slideEl => slideEl.getAttribute('data-swiper-slide-index') * 1 === slideIndex).column;\n } else {\n targetSlideIndex = swiper.getSlideIndexByData(newIndex);\n }\n const cols = gridEnabled ? Math.ceil(swiper.slides.length / swiper.params.grid.rows) : swiper.slides.length;\n const {\n centeredSlides,\n slidesOffsetBefore,\n slidesOffsetAfter\n } = swiper.params;\n const bothDirections = centeredSlides || !!slidesOffsetBefore || !!slidesOffsetAfter;\n let slidesPerView = swiper.params.slidesPerView;\n if (slidesPerView === 'auto') {\n slidesPerView = swiper.slidesPerViewDynamic();\n } else {\n slidesPerView = Math.ceil(parseFloat(swiper.params.slidesPerView, 10));\n if (bothDirections && slidesPerView % 2 === 0) {\n slidesPerView = slidesPerView + 1;\n }\n }\n let needLoopFix = cols - targetSlideIndex < slidesPerView;\n if (bothDirections) {\n needLoopFix = needLoopFix || targetSlideIndex < Math.ceil(slidesPerView / 2);\n }\n if (internal && bothDirections && swiper.params.slidesPerView !== 'auto' && !gridEnabled) {\n needLoopFix = false;\n }\n if (needLoopFix) {\n const direction = bothDirections ? targetSlideIndex < swiper.activeIndex ? 'prev' : 'next' : targetSlideIndex - swiper.activeIndex - 1 < swiper.params.slidesPerView ? 'next' : 'prev';\n swiper.loopFix({\n direction,\n slideTo: true,\n activeSlideIndex: direction === 'next' ? targetSlideIndex + 1 : targetSlideIndex - cols + 1,\n slideRealIndex: direction === 'next' ? swiper.realIndex : undefined\n });\n }\n if (gridEnabled) {\n const slideIndex = newIndex * swiper.params.grid.rows;\n newIndex = swiper.slides.find(slideEl => slideEl.getAttribute('data-swiper-slide-index') * 1 === slideIndex).column;\n } else {\n newIndex = swiper.getSlideIndexByData(newIndex);\n }\n }\n }\n requestAnimationFrame(() => {\n swiper.slideTo(newIndex, speed, runCallbacks, internal);\n });\n return swiper;\n}\n\n/* eslint no-unused-vars: \"off\" */\nfunction slideNext(speed, runCallbacks = true, internal) {\n const swiper = this;\n const {\n enabled,\n params,\n animating\n } = swiper;\n if (!enabled || swiper.destroyed) return swiper;\n if (typeof speed === 'undefined') {\n speed = swiper.params.speed;\n }\n let perGroup = params.slidesPerGroup;\n if (params.slidesPerView === 'auto' && params.slidesPerGroup === 1 && params.slidesPerGroupAuto) {\n perGroup = Math.max(swiper.slidesPerViewDynamic('current', true), 1);\n }\n const increment = swiper.activeIndex < params.slidesPerGroupSkip ? 1 : perGroup;\n const isVirtual = swiper.virtual && params.virtual.enabled;\n if (params.loop) {\n if (animating && !isVirtual && params.loopPreventsSliding) return false;\n swiper.loopFix({\n direction: 'next'\n });\n // eslint-disable-next-line\n swiper._clientLeft = swiper.wrapperEl.clientLeft;\n if (swiper.activeIndex === swiper.slides.length - 1 && params.cssMode) {\n requestAnimationFrame(() => {\n swiper.slideTo(swiper.activeIndex + increment, speed, runCallbacks, internal);\n });\n return true;\n }\n }\n if (params.rewind && swiper.isEnd) {\n return swiper.slideTo(0, speed, runCallbacks, internal);\n }\n return swiper.slideTo(swiper.activeIndex + increment, speed, runCallbacks, internal);\n}\n\n/* eslint no-unused-vars: \"off\" */\nfunction slidePrev(speed, runCallbacks = true, internal) {\n const swiper = this;\n const {\n params,\n snapGrid,\n slidesGrid,\n rtlTranslate,\n enabled,\n animating\n } = swiper;\n if (!enabled || swiper.destroyed) return swiper;\n if (typeof speed === 'undefined') {\n speed = swiper.params.speed;\n }\n const isVirtual = swiper.virtual && params.virtual.enabled;\n if (params.loop) {\n if (animating && !isVirtual && params.loopPreventsSliding) return false;\n swiper.loopFix({\n direction: 'prev'\n });\n // eslint-disable-next-line\n swiper._clientLeft = swiper.wrapperEl.clientLeft;\n }\n const translate = rtlTranslate ? swiper.translate : -swiper.translate;\n function normalize(val) {\n if (val < 0) return -Math.floor(Math.abs(val));\n return Math.floor(val);\n }\n const normalizedTranslate = normalize(translate);\n const normalizedSnapGrid = snapGrid.map(val => normalize(val));\n const isFreeMode = params.freeMode && params.freeMode.enabled;\n let prevSnap = snapGrid[normalizedSnapGrid.indexOf(normalizedTranslate) - 1];\n if (typeof prevSnap === 'undefined' && (params.cssMode || isFreeMode)) {\n let prevSnapIndex;\n snapGrid.forEach((snap, snapIndex) => {\n if (normalizedTranslate >= snap) {\n // prevSnap = snap;\n prevSnapIndex = snapIndex;\n }\n });\n if (typeof prevSnapIndex !== 'undefined') {\n prevSnap = isFreeMode ? snapGrid[prevSnapIndex] : snapGrid[prevSnapIndex > 0 ? prevSnapIndex - 1 : prevSnapIndex];\n }\n }\n let prevIndex = 0;\n if (typeof prevSnap !== 'undefined') {\n prevIndex = slidesGrid.indexOf(prevSnap);\n if (prevIndex < 0) prevIndex = swiper.activeIndex - 1;\n if (params.slidesPerView === 'auto' && params.slidesPerGroup === 1 && params.slidesPerGroupAuto) {\n prevIndex = prevIndex - swiper.slidesPerViewDynamic('previous', true) + 1;\n prevIndex = Math.max(prevIndex, 0);\n }\n }\n if (params.rewind && swiper.isBeginning) {\n const lastIndex = swiper.params.virtual && swiper.params.virtual.enabled && swiper.virtual ? swiper.virtual.slides.length - 1 : swiper.slides.length - 1;\n return swiper.slideTo(lastIndex, speed, runCallbacks, internal);\n } else if (params.loop && swiper.activeIndex === 0 && params.cssMode) {\n requestAnimationFrame(() => {\n swiper.slideTo(prevIndex, speed, runCallbacks, internal);\n });\n return true;\n }\n return swiper.slideTo(prevIndex, speed, runCallbacks, internal);\n}\n\n/* eslint no-unused-vars: \"off\" */\nfunction slideReset(speed, runCallbacks = true, internal) {\n const swiper = this;\n if (swiper.destroyed) return;\n if (typeof speed === 'undefined') {\n speed = swiper.params.speed;\n }\n return swiper.slideTo(swiper.activeIndex, speed, runCallbacks, internal);\n}\n\n/* eslint no-unused-vars: \"off\" */\nfunction slideToClosest(speed, runCallbacks = true, internal, threshold = 0.5) {\n const swiper = this;\n if (swiper.destroyed) return;\n if (typeof speed === 'undefined') {\n speed = swiper.params.speed;\n }\n let index = swiper.activeIndex;\n const skip = Math.min(swiper.params.slidesPerGroupSkip, index);\n const snapIndex = skip + Math.floor((index - skip) / swiper.params.slidesPerGroup);\n const translate = swiper.rtlTranslate ? swiper.translate : -swiper.translate;\n if (translate >= swiper.snapGrid[snapIndex]) {\n // The current translate is on or after the current snap index, so the choice\n // is between the current index and the one after it.\n const currentSnap = swiper.snapGrid[snapIndex];\n const nextSnap = swiper.snapGrid[snapIndex + 1];\n if (translate - currentSnap > (nextSnap - currentSnap) * threshold) {\n index += swiper.params.slidesPerGroup;\n }\n } else {\n // The current translate is before the current snap index, so the choice\n // is between the current index and the one before it.\n const prevSnap = swiper.snapGrid[snapIndex - 1];\n const currentSnap = swiper.snapGrid[snapIndex];\n if (translate - prevSnap <= (currentSnap - prevSnap) * threshold) {\n index -= swiper.params.slidesPerGroup;\n }\n }\n index = Math.max(index, 0);\n index = Math.min(index, swiper.slidesGrid.length - 1);\n return swiper.slideTo(index, speed, runCallbacks, internal);\n}\n\nfunction slideToClickedSlide() {\n const swiper = this;\n if (swiper.destroyed) return;\n const {\n params,\n slidesEl\n } = swiper;\n const slidesPerView = params.slidesPerView === 'auto' ? swiper.slidesPerViewDynamic() : params.slidesPerView;\n let slideToIndex = swiper.getSlideIndexWhenGrid(swiper.clickedIndex);\n let realIndex;\n const slideSelector = swiper.isElement ? `swiper-slide` : `.${params.slideClass}`;\n const isGrid = swiper.grid && swiper.params.grid && swiper.params.grid.rows > 1;\n if (params.loop) {\n if (swiper.animating) return;\n realIndex = parseInt(swiper.clickedSlide.getAttribute('data-swiper-slide-index'), 10);\n if (params.centeredSlides) {\n swiper.slideToLoop(realIndex);\n } else if (slideToIndex > (isGrid ? (swiper.slides.length - slidesPerView) / 2 - (swiper.params.grid.rows - 1) : swiper.slides.length - slidesPerView)) {\n swiper.loopFix();\n slideToIndex = swiper.getSlideIndex(elementChildren(slidesEl, `${slideSelector}[data-swiper-slide-index=\"${realIndex}\"]`)[0]);\n nextTick(() => {\n swiper.slideTo(slideToIndex);\n });\n } else {\n swiper.slideTo(slideToIndex);\n }\n } else {\n swiper.slideTo(slideToIndex);\n }\n}\n\nvar slide = {\n slideTo,\n slideToLoop,\n slideNext,\n slidePrev,\n slideReset,\n slideToClosest,\n slideToClickedSlide\n};\n\nfunction loopCreate(slideRealIndex, initial) {\n const swiper = this;\n const {\n params,\n slidesEl\n } = swiper;\n if (!params.loop || swiper.virtual && swiper.params.virtual.enabled) return;\n const initSlides = () => {\n const slides = elementChildren(slidesEl, `.${params.slideClass}, swiper-slide`);\n slides.forEach((el, index) => {\n el.setAttribute('data-swiper-slide-index', index);\n });\n };\n const clearBlankSlides = () => {\n const slides = elementChildren(slidesEl, `.${params.slideBlankClass}`);\n slides.forEach(el => {\n el.remove();\n });\n if (slides.length > 0) {\n swiper.recalcSlides();\n swiper.updateSlides();\n }\n };\n const gridEnabled = swiper.grid && params.grid && params.grid.rows > 1;\n if (params.loopAddBlankSlides && (params.slidesPerGroup > 1 || gridEnabled)) {\n clearBlankSlides();\n }\n const slidesPerGroup = params.slidesPerGroup * (gridEnabled ? params.grid.rows : 1);\n const shouldFillGroup = swiper.slides.length % slidesPerGroup !== 0;\n const shouldFillGrid = gridEnabled && swiper.slides.length % params.grid.rows !== 0;\n const addBlankSlides = amountOfSlides => {\n for (let i = 0; i < amountOfSlides; i += 1) {\n const slideEl = swiper.isElement ? createElement('swiper-slide', [params.slideBlankClass]) : createElement('div', [params.slideClass, params.slideBlankClass]);\n swiper.slidesEl.append(slideEl);\n }\n };\n if (shouldFillGroup) {\n if (params.loopAddBlankSlides) {\n const slidesToAdd = slidesPerGroup - swiper.slides.length % slidesPerGroup;\n addBlankSlides(slidesToAdd);\n swiper.recalcSlides();\n swiper.updateSlides();\n } else {\n showWarning('Swiper Loop Warning: The number of slides is not even to slidesPerGroup, loop mode may not function properly. You need to add more slides (or make duplicates, or empty slides)');\n }\n initSlides();\n } else if (shouldFillGrid) {\n if (params.loopAddBlankSlides) {\n const slidesToAdd = params.grid.rows - swiper.slides.length % params.grid.rows;\n addBlankSlides(slidesToAdd);\n swiper.recalcSlides();\n swiper.updateSlides();\n } else {\n showWarning('Swiper Loop Warning: The number of slides is not even to grid.rows, loop mode may not function properly. You need to add more slides (or make duplicates, or empty slides)');\n }\n initSlides();\n } else {\n initSlides();\n }\n const bothDirections = params.centeredSlides || !!params.slidesOffsetBefore || !!params.slidesOffsetAfter;\n swiper.loopFix({\n slideRealIndex,\n direction: bothDirections ? undefined : 'next',\n initial\n });\n}\n\nfunction loopFix({\n slideRealIndex,\n slideTo = true,\n direction,\n setTranslate,\n activeSlideIndex,\n initial,\n byController,\n byMousewheel\n} = {}) {\n const swiper = this;\n if (!swiper.params.loop) return;\n swiper.emit('beforeLoopFix');\n const {\n slides,\n allowSlidePrev,\n allowSlideNext,\n slidesEl,\n params\n } = swiper;\n const {\n centeredSlides,\n slidesOffsetBefore,\n slidesOffsetAfter,\n initialSlide\n } = params;\n const bothDirections = centeredSlides || !!slidesOffsetBefore || !!slidesOffsetAfter;\n swiper.allowSlidePrev = true;\n swiper.allowSlideNext = true;\n if (swiper.virtual && params.virtual.enabled) {\n if (slideTo) {\n if (!bothDirections && swiper.snapIndex === 0) {\n swiper.slideTo(swiper.virtual.slides.length, 0, false, true);\n } else if (bothDirections && swiper.snapIndex < params.slidesPerView) {\n swiper.slideTo(swiper.virtual.slides.length + swiper.snapIndex, 0, false, true);\n } else if (swiper.snapIndex === swiper.snapGrid.length - 1) {\n swiper.slideTo(swiper.virtual.slidesBefore, 0, false, true);\n }\n }\n swiper.allowSlidePrev = allowSlidePrev;\n swiper.allowSlideNext = allowSlideNext;\n swiper.emit('loopFix');\n return;\n }\n let slidesPerView = params.slidesPerView;\n if (slidesPerView === 'auto') {\n slidesPerView = swiper.slidesPerViewDynamic();\n } else {\n slidesPerView = Math.ceil(parseFloat(params.slidesPerView, 10));\n if (bothDirections && slidesPerView % 2 === 0) {\n slidesPerView = slidesPerView + 1;\n }\n }\n const slidesPerGroup = params.slidesPerGroupAuto ? slidesPerView : params.slidesPerGroup;\n let loopedSlides = bothDirections ? Math.max(slidesPerGroup, Math.ceil(slidesPerView / 2)) : slidesPerGroup;\n if (loopedSlides % slidesPerGroup !== 0) {\n loopedSlides += slidesPerGroup - loopedSlides % slidesPerGroup;\n }\n loopedSlides += params.loopAdditionalSlides;\n swiper.loopedSlides = loopedSlides;\n const gridEnabled = swiper.grid && params.grid && params.grid.rows > 1;\n if (slides.length < slidesPerView + loopedSlides || swiper.params.effect === 'cards' && slides.length < slidesPerView + loopedSlides * 2) {\n showWarning('Swiper Loop Warning: The number of slides is not enough for loop mode, it will be disabled or not function properly. You need to add more slides (or make duplicates) or lower the values of slidesPerView and slidesPerGroup parameters');\n } else if (gridEnabled && params.grid.fill === 'row') {\n showWarning('Swiper Loop Warning: Loop mode is not compatible with grid.fill = `row`');\n }\n const prependSlidesIndexes = [];\n const appendSlidesIndexes = [];\n const cols = gridEnabled ? Math.ceil(slides.length / params.grid.rows) : slides.length;\n const isInitialOverflow = initial && cols - initialSlide < slidesPerView && !bothDirections;\n let activeIndex = isInitialOverflow ? initialSlide : swiper.activeIndex;\n if (typeof activeSlideIndex === 'undefined') {\n activeSlideIndex = swiper.getSlideIndex(slides.find(el => el.classList.contains(params.slideActiveClass)));\n } else {\n activeIndex = activeSlideIndex;\n }\n const isNext = direction === 'next' || !direction;\n const isPrev = direction === 'prev' || !direction;\n let slidesPrepended = 0;\n let slidesAppended = 0;\n const activeColIndex = gridEnabled ? slides[activeSlideIndex].column : activeSlideIndex;\n const activeColIndexWithShift = activeColIndex + (bothDirections && typeof setTranslate === 'undefined' ? -slidesPerView / 2 + 0.5 : 0);\n // prepend last slides before start\n if (activeColIndexWithShift < loopedSlides) {\n slidesPrepended = Math.max(loopedSlides - activeColIndexWithShift, slidesPerGroup);\n for (let i = 0; i < loopedSlides - activeColIndexWithShift; i += 1) {\n const index = i - Math.floor(i / cols) * cols;\n if (gridEnabled) {\n const colIndexToPrepend = cols - index - 1;\n for (let i = slides.length - 1; i >= 0; i -= 1) {\n if (slides[i].column === colIndexToPrepend) prependSlidesIndexes.push(i);\n }\n // slides.forEach((slide, slideIndex) => {\n // if (slide.column === colIndexToPrepend) prependSlidesIndexes.push(slideIndex);\n // });\n } else {\n prependSlidesIndexes.push(cols - index - 1);\n }\n }\n } else if (activeColIndexWithShift + slidesPerView > cols - loopedSlides) {\n slidesAppended = Math.max(activeColIndexWithShift - (cols - loopedSlides * 2), slidesPerGroup);\n if (isInitialOverflow) {\n slidesAppended = Math.max(slidesAppended, slidesPerView - cols + initialSlide + 1);\n }\n for (let i = 0; i < slidesAppended; i += 1) {\n const index = i - Math.floor(i / cols) * cols;\n if (gridEnabled) {\n slides.forEach((slide, slideIndex) => {\n if (slide.column === index) appendSlidesIndexes.push(slideIndex);\n });\n } else {\n appendSlidesIndexes.push(index);\n }\n }\n }\n swiper.__preventObserver__ = true;\n requestAnimationFrame(() => {\n swiper.__preventObserver__ = false;\n });\n if (swiper.params.effect === 'cards' && slides.length < slidesPerView + loopedSlides * 2) {\n if (appendSlidesIndexes.includes(activeSlideIndex)) {\n appendSlidesIndexes.splice(appendSlidesIndexes.indexOf(activeSlideIndex), 1);\n }\n if (prependSlidesIndexes.includes(activeSlideIndex)) {\n prependSlidesIndexes.splice(prependSlidesIndexes.indexOf(activeSlideIndex), 1);\n }\n }\n if (isPrev) {\n prependSlidesIndexes.forEach(index => {\n slides[index].swiperLoopMoveDOM = true;\n slidesEl.prepend(slides[index]);\n slides[index].swiperLoopMoveDOM = false;\n });\n }\n if (isNext) {\n appendSlidesIndexes.forEach(index => {\n slides[index].swiperLoopMoveDOM = true;\n slidesEl.append(slides[index]);\n slides[index].swiperLoopMoveDOM = false;\n });\n }\n swiper.recalcSlides();\n if (params.slidesPerView === 'auto') {\n swiper.updateSlides();\n } else if (gridEnabled && (prependSlidesIndexes.length > 0 && isPrev || appendSlidesIndexes.length > 0 && isNext)) {\n swiper.slides.forEach((slide, slideIndex) => {\n swiper.grid.updateSlide(slideIndex, slide, swiper.slides);\n });\n }\n if (params.watchSlidesProgress) {\n swiper.updateSlidesOffset();\n }\n if (slideTo) {\n if (prependSlidesIndexes.length > 0 && isPrev) {\n if (typeof slideRealIndex === 'undefined') {\n const currentSlideTranslate = swiper.slidesGrid[activeIndex];\n const newSlideTranslate = swiper.slidesGrid[activeIndex + slidesPrepended];\n const diff = newSlideTranslate - currentSlideTranslate;\n if (byMousewheel) {\n swiper.setTranslate(swiper.translate - diff);\n } else {\n swiper.slideTo(activeIndex + Math.ceil(slidesPrepended), 0, false, true);\n if (setTranslate) {\n swiper.touchEventsData.startTranslate = swiper.touchEventsData.startTranslate - diff;\n swiper.touchEventsData.currentTranslate = swiper.touchEventsData.currentTranslate - diff;\n }\n }\n } else {\n if (setTranslate) {\n const shift = gridEnabled ? prependSlidesIndexes.length / params.grid.rows : prependSlidesIndexes.length;\n swiper.slideTo(swiper.activeIndex + shift, 0, false, true);\n swiper.touchEventsData.currentTranslate = swiper.translate;\n }\n }\n } else if (appendSlidesIndexes.length > 0 && isNext) {\n if (typeof slideRealIndex === 'undefined') {\n const currentSlideTranslate = swiper.slidesGrid[activeIndex];\n const newSlideTranslate = swiper.slidesGrid[activeIndex - slidesAppended];\n const diff = newSlideTranslate - currentSlideTranslate;\n if (byMousewheel) {\n swiper.setTranslate(swiper.translate - diff);\n } else {\n swiper.slideTo(activeIndex - slidesAppended, 0, false, true);\n if (setTranslate) {\n swiper.touchEventsData.startTranslate = swiper.touchEventsData.startTranslate - diff;\n swiper.touchEventsData.currentTranslate = swiper.touchEventsData.currentTranslate - diff;\n }\n }\n } else {\n const shift = gridEnabled ? appendSlidesIndexes.length / params.grid.rows : appendSlidesIndexes.length;\n swiper.slideTo(swiper.activeIndex - shift, 0, false, true);\n }\n }\n }\n swiper.allowSlidePrev = allowSlidePrev;\n swiper.allowSlideNext = allowSlideNext;\n if (swiper.controller && swiper.controller.control && !byController) {\n const loopParams = {\n slideRealIndex,\n direction,\n setTranslate,\n activeSlideIndex,\n byController: true\n };\n if (Array.isArray(swiper.controller.control)) {\n swiper.controller.control.forEach(c => {\n if (!c.destroyed && c.params.loop) c.loopFix({\n ...loopParams,\n slideTo: c.params.slidesPerView === params.slidesPerView ? slideTo : false\n });\n });\n } else if (swiper.controller.control instanceof swiper.constructor && swiper.controller.control.params.loop) {\n swiper.controller.control.loopFix({\n ...loopParams,\n slideTo: swiper.controller.control.params.slidesPerView === params.slidesPerView ? slideTo : false\n });\n }\n }\n swiper.emit('loopFix');\n}\n\nfunction loopDestroy() {\n const swiper = this;\n const {\n params,\n slidesEl\n } = swiper;\n if (!params.loop || !slidesEl || swiper.virtual && swiper.params.virtual.enabled) return;\n swiper.recalcSlides();\n const newSlidesOrder = [];\n swiper.slides.forEach(slideEl => {\n const index = typeof slideEl.swiperSlideIndex === 'undefined' ? slideEl.getAttribute('data-swiper-slide-index') * 1 : slideEl.swiperSlideIndex;\n newSlidesOrder[index] = slideEl;\n });\n swiper.slides.forEach(slideEl => {\n slideEl.removeAttribute('data-swiper-slide-index');\n });\n newSlidesOrder.forEach(slideEl => {\n slidesEl.append(slideEl);\n });\n swiper.recalcSlides();\n swiper.slideTo(swiper.realIndex, 0);\n}\n\nvar loop = {\n loopCreate,\n loopFix,\n loopDestroy\n};\n\nfunction setGrabCursor(moving) {\n const swiper = this;\n if (!swiper.params.simulateTouch || swiper.params.watchOverflow && swiper.isLocked || swiper.params.cssMode) return;\n const el = swiper.params.touchEventsTarget === 'container' ? swiper.el : swiper.wrapperEl;\n if (swiper.isElement) {\n swiper.__preventObserver__ = true;\n }\n el.style.cursor = 'move';\n el.style.cursor = moving ? 'grabbing' : 'grab';\n if (swiper.isElement) {\n requestAnimationFrame(() => {\n swiper.__preventObserver__ = false;\n });\n }\n}\n\nfunction unsetGrabCursor() {\n const swiper = this;\n if (swiper.params.watchOverflow && swiper.isLocked || swiper.params.cssMode) {\n return;\n }\n if (swiper.isElement) {\n swiper.__preventObserver__ = true;\n }\n swiper[swiper.params.touchEventsTarget === 'container' ? 'el' : 'wrapperEl'].style.cursor = '';\n if (swiper.isElement) {\n requestAnimationFrame(() => {\n swiper.__preventObserver__ = false;\n });\n }\n}\n\nvar grabCursor = {\n setGrabCursor,\n unsetGrabCursor\n};\n\n// Modified from https://stackoverflow.com/questions/54520554/custom-element-getrootnode-closest-function-crossing-multiple-parent-shadowd\nfunction closestElement(selector, base = this) {\n function __closestFrom(el) {\n if (!el || el === getDocument() || el === getWindow()) return null;\n if (el.assignedSlot) el = el.assignedSlot;\n const found = el.closest(selector);\n if (!found && !el.getRootNode) {\n return null;\n }\n return found || __closestFrom(el.getRootNode().host);\n }\n return __closestFrom(base);\n}\nfunction preventEdgeSwipe(swiper, event, startX) {\n const window = getWindow();\n const {\n params\n } = swiper;\n const edgeSwipeDetection = params.edgeSwipeDetection;\n const edgeSwipeThreshold = params.edgeSwipeThreshold;\n if (edgeSwipeDetection && (startX <= edgeSwipeThreshold || startX >= window.innerWidth - edgeSwipeThreshold)) {\n if (edgeSwipeDetection === 'prevent') {\n event.preventDefault();\n return true;\n }\n return false;\n }\n return true;\n}\nfunction onTouchStart(event) {\n const swiper = this;\n const document = getDocument();\n let e = event;\n if (e.originalEvent) e = e.originalEvent;\n const data = swiper.touchEventsData;\n if (e.type === 'pointerdown') {\n if (data.pointerId !== null && data.pointerId !== e.pointerId) {\n return;\n }\n data.pointerId = e.pointerId;\n } else if (e.type === 'touchstart' && e.targetTouches.length === 1) {\n data.touchId = e.targetTouches[0].identifier;\n }\n if (e.type === 'touchstart') {\n // don't proceed touch event\n preventEdgeSwipe(swiper, e, e.targetTouches[0].pageX);\n return;\n }\n const {\n params,\n touches,\n enabled\n } = swiper;\n if (!enabled) return;\n if (!params.simulateTouch && e.pointerType === 'mouse') return;\n if (swiper.animating && params.preventInteractionOnTransition) {\n return;\n }\n if (!swiper.animating && params.cssMode && params.loop) {\n swiper.loopFix();\n }\n let targetEl = e.target;\n if (params.touchEventsTarget === 'wrapper') {\n if (!elementIsChildOf(targetEl, swiper.wrapperEl)) return;\n }\n if ('which' in e && e.which === 3) return;\n if ('button' in e && e.button > 0) return;\n if (data.isTouched && data.isMoved) return;\n\n // change target el for shadow root component\n const swipingClassHasValue = !!params.noSwipingClass && params.noSwipingClass !== '';\n // eslint-disable-next-line\n const eventPath = e.composedPath ? e.composedPath() : e.path;\n if (swipingClassHasValue && e.target && e.target.shadowRoot && eventPath) {\n targetEl = eventPath[0];\n }\n const noSwipingSelector = params.noSwipingSelector ? params.noSwipingSelector : `.${params.noSwipingClass}`;\n const isTargetShadow = !!(e.target && e.target.shadowRoot);\n\n // use closestElement for shadow root element to get the actual closest for nested shadow root element\n if (params.noSwiping && (isTargetShadow ? closestElement(noSwipingSelector, targetEl) : targetEl.closest(noSwipingSelector))) {\n swiper.allowClick = true;\n return;\n }\n if (params.swipeHandler) {\n if (!targetEl.closest(params.swipeHandler)) return;\n }\n touches.currentX = e.pageX;\n touches.currentY = e.pageY;\n const startX = touches.currentX;\n const startY = touches.currentY;\n\n // Do NOT start if iOS edge swipe is detected. Otherwise iOS app cannot swipe-to-go-back anymore\n\n if (!preventEdgeSwipe(swiper, e, startX)) {\n return;\n }\n Object.assign(data, {\n isTouched: true,\n isMoved: false,\n allowTouchCallbacks: true,\n isScrolling: undefined,\n startMoving: undefined\n });\n touches.startX = startX;\n touches.startY = startY;\n data.touchStartTime = now();\n swiper.allowClick = true;\n swiper.updateSize();\n swiper.swipeDirection = undefined;\n if (params.threshold > 0) data.allowThresholdMove = false;\n let preventDefault = true;\n if (targetEl.matches(data.focusableElements)) {\n preventDefault = false;\n if (targetEl.nodeName === 'SELECT') {\n data.isTouched = false;\n }\n }\n if (document.activeElement && document.activeElement.matches(data.focusableElements) && document.activeElement !== targetEl && (e.pointerType === 'mouse' || e.pointerType !== 'mouse' && !targetEl.matches(data.focusableElements))) {\n document.activeElement.blur();\n }\n const shouldPreventDefault = preventDefault && swiper.allowTouchMove && params.touchStartPreventDefault;\n if ((params.touchStartForcePreventDefault || shouldPreventDefault) && !targetEl.isContentEditable) {\n e.preventDefault();\n }\n if (params.freeMode && params.freeMode.enabled && swiper.freeMode && swiper.animating && !params.cssMode) {\n swiper.freeMode.onTouchStart();\n }\n swiper.emit('touchStart', e);\n}\n\nfunction onTouchMove(event) {\n const document = getDocument();\n const swiper = this;\n const data = swiper.touchEventsData;\n const {\n params,\n touches,\n rtlTranslate: rtl,\n enabled\n } = swiper;\n if (!enabled) return;\n if (!params.simulateTouch && event.pointerType === 'mouse') return;\n let e = event;\n if (e.originalEvent) e = e.originalEvent;\n if (e.type === 'pointermove') {\n if (data.touchId !== null) return; // return from pointer if we use touch\n const id = e.pointerId;\n if (id !== data.pointerId) return;\n }\n let targetTouch;\n if (e.type === 'touchmove') {\n targetTouch = [...e.changedTouches].find(t => t.identifier === data.touchId);\n if (!targetTouch || targetTouch.identifier !== data.touchId) return;\n } else {\n targetTouch = e;\n }\n if (!data.isTouched) {\n if (data.startMoving && data.isScrolling) {\n swiper.emit('touchMoveOpposite', e);\n }\n return;\n }\n const pageX = targetTouch.pageX;\n const pageY = targetTouch.pageY;\n if (e.preventedByNestedSwiper) {\n touches.startX = pageX;\n touches.startY = pageY;\n return;\n }\n if (!swiper.allowTouchMove) {\n if (!e.target.matches(data.focusableElements)) {\n swiper.allowClick = false;\n }\n if (data.isTouched) {\n Object.assign(touches, {\n startX: pageX,\n startY: pageY,\n currentX: pageX,\n currentY: pageY\n });\n data.touchStartTime = now();\n }\n return;\n }\n if (params.touchReleaseOnEdges && !params.loop) {\n if (swiper.isVertical()) {\n // Vertical\n if (pageY < touches.startY && swiper.translate <= swiper.maxTranslate() || pageY > touches.startY && swiper.translate >= swiper.minTranslate()) {\n data.isTouched = false;\n data.isMoved = false;\n return;\n }\n } else if (rtl && (pageX > touches.startX && -swiper.translate <= swiper.maxTranslate() || pageX < touches.startX && -swiper.translate >= swiper.minTranslate())) {\n return;\n } else if (!rtl && (pageX < touches.startX && swiper.translate <= swiper.maxTranslate() || pageX > touches.startX && swiper.translate >= swiper.minTranslate())) {\n return;\n }\n }\n if (document.activeElement && document.activeElement.matches(data.focusableElements) && document.activeElement !== e.target && e.pointerType !== 'mouse') {\n document.activeElement.blur();\n }\n if (document.activeElement) {\n if (e.target === document.activeElement && e.target.matches(data.focusableElements)) {\n data.isMoved = true;\n swiper.allowClick = false;\n return;\n }\n }\n if (data.allowTouchCallbacks) {\n swiper.emit('touchMove', e);\n }\n touches.previousX = touches.currentX;\n touches.previousY = touches.currentY;\n touches.currentX = pageX;\n touches.currentY = pageY;\n const diffX = touches.currentX - touches.startX;\n const diffY = touches.currentY - touches.startY;\n if (swiper.params.threshold && Math.sqrt(diffX ** 2 + diffY ** 2) < swiper.params.threshold) return;\n if (typeof data.isScrolling === 'undefined') {\n let touchAngle;\n if (swiper.isHorizontal() && touches.currentY === touches.startY || swiper.isVertical() && touches.currentX === touches.startX) {\n data.isScrolling = false;\n } else {\n // eslint-disable-next-line\n if (diffX * diffX + diffY * diffY >= 25) {\n touchAngle = Math.atan2(Math.abs(diffY), Math.abs(diffX)) * 180 / Math.PI;\n data.isScrolling = swiper.isHorizontal() ? touchAngle > params.touchAngle : 90 - touchAngle > params.touchAngle;\n }\n }\n }\n if (data.isScrolling) {\n swiper.emit('touchMoveOpposite', e);\n }\n if (typeof data.startMoving === 'undefined') {\n if (touches.currentX !== touches.startX || touches.currentY !== touches.startY) {\n data.startMoving = true;\n }\n }\n if (data.isScrolling || e.type === 'touchmove' && data.preventTouchMoveFromPointerMove) {\n data.isTouched = false;\n return;\n }\n if (!data.startMoving) {\n return;\n }\n swiper.allowClick = false;\n if (!params.cssMode && e.cancelable) {\n e.preventDefault();\n }\n if (params.touchMoveStopPropagation && !params.nested) {\n e.stopPropagation();\n }\n let diff = swiper.isHorizontal() ? diffX : diffY;\n let touchesDiff = swiper.isHorizontal() ? touches.currentX - touches.previousX : touches.currentY - touches.previousY;\n if (params.oneWayMovement) {\n diff = Math.abs(diff) * (rtl ? 1 : -1);\n touchesDiff = Math.abs(touchesDiff) * (rtl ? 1 : -1);\n }\n touches.diff = diff;\n diff *= params.touchRatio;\n if (rtl) {\n diff = -diff;\n touchesDiff = -touchesDiff;\n }\n const prevTouchesDirection = swiper.touchesDirection;\n swiper.swipeDirection = diff > 0 ? 'prev' : 'next';\n swiper.touchesDirection = touchesDiff > 0 ? 'prev' : 'next';\n const isLoop = swiper.params.loop && !params.cssMode;\n const allowLoopFix = swiper.touchesDirection === 'next' && swiper.allowSlideNext || swiper.touchesDirection === 'prev' && swiper.allowSlidePrev;\n if (!data.isMoved) {\n if (isLoop && allowLoopFix) {\n swiper.loopFix({\n direction: swiper.swipeDirection\n });\n }\n data.startTranslate = swiper.getTranslate();\n swiper.setTransition(0);\n if (swiper.animating) {\n const evt = new window.CustomEvent('transitionend', {\n bubbles: true,\n cancelable: true,\n detail: {\n bySwiperTouchMove: true\n }\n });\n swiper.wrapperEl.dispatchEvent(evt);\n }\n data.allowMomentumBounce = false;\n // Grab Cursor\n if (params.grabCursor && (swiper.allowSlideNext === true || swiper.allowSlidePrev === true)) {\n swiper.setGrabCursor(true);\n }\n swiper.emit('sliderFirstMove', e);\n }\n let loopFixed;\n new Date().getTime();\n if (params._loopSwapReset !== false && data.isMoved && data.allowThresholdMove && prevTouchesDirection !== swiper.touchesDirection && isLoop && allowLoopFix && Math.abs(diff) >= 1) {\n Object.assign(touches, {\n startX: pageX,\n startY: pageY,\n currentX: pageX,\n currentY: pageY,\n startTranslate: data.currentTranslate\n });\n data.loopSwapReset = true;\n data.startTranslate = data.currentTranslate;\n return;\n }\n swiper.emit('sliderMove', e);\n data.isMoved = true;\n data.currentTranslate = diff + data.startTranslate;\n let disableParentSwiper = true;\n let resistanceRatio = params.resistanceRatio;\n if (params.touchReleaseOnEdges) {\n resistanceRatio = 0;\n }\n if (diff > 0) {\n if (isLoop && allowLoopFix && !loopFixed && data.allowThresholdMove && data.currentTranslate > (params.centeredSlides ? swiper.minTranslate() - swiper.slidesSizesGrid[swiper.activeIndex + 1] - (params.slidesPerView !== 'auto' && swiper.slides.length - params.slidesPerView >= 2 ? swiper.slidesSizesGrid[swiper.activeIndex + 1] + swiper.params.spaceBetween : 0) - swiper.params.spaceBetween : swiper.minTranslate())) {\n swiper.loopFix({\n direction: 'prev',\n setTranslate: true,\n activeSlideIndex: 0\n });\n }\n if (data.currentTranslate > swiper.minTranslate()) {\n disableParentSwiper = false;\n if (params.resistance) {\n data.currentTranslate = swiper.minTranslate() - 1 + (-swiper.minTranslate() + data.startTranslate + diff) ** resistanceRatio;\n }\n }\n } else if (diff < 0) {\n if (isLoop && allowLoopFix && !loopFixed && data.allowThresholdMove && data.currentTranslate < (params.centeredSlides ? swiper.maxTranslate() + swiper.slidesSizesGrid[swiper.slidesSizesGrid.length - 1] + swiper.params.spaceBetween + (params.slidesPerView !== 'auto' && swiper.slides.length - params.slidesPerView >= 2 ? swiper.slidesSizesGrid[swiper.slidesSizesGrid.length - 1] + swiper.params.spaceBetween : 0) : swiper.maxTranslate())) {\n swiper.loopFix({\n direction: 'next',\n setTranslate: true,\n activeSlideIndex: swiper.slides.length - (params.slidesPerView === 'auto' ? swiper.slidesPerViewDynamic() : Math.ceil(parseFloat(params.slidesPerView, 10)))\n });\n }\n if (data.currentTranslate < swiper.maxTranslate()) {\n disableParentSwiper = false;\n if (params.resistance) {\n data.currentTranslate = swiper.maxTranslate() + 1 - (swiper.maxTranslate() - data.startTranslate - diff) ** resistanceRatio;\n }\n }\n }\n if (disableParentSwiper) {\n e.preventedByNestedSwiper = true;\n }\n\n // Directions locks\n if (!swiper.allowSlideNext && swiper.swipeDirection === 'next' && data.currentTranslate < data.startTranslate) {\n data.currentTranslate = data.startTranslate;\n }\n if (!swiper.allowSlidePrev && swiper.swipeDirection === 'prev' && data.currentTranslate > data.startTranslate) {\n data.currentTranslate = data.startTranslate;\n }\n if (!swiper.allowSlidePrev && !swiper.allowSlideNext) {\n data.currentTranslate = data.startTranslate;\n }\n\n // Threshold\n if (params.threshold > 0) {\n if (Math.abs(diff) > params.threshold || data.allowThresholdMove) {\n if (!data.allowThresholdMove) {\n data.allowThresholdMove = true;\n touches.startX = touches.currentX;\n touches.startY = touches.currentY;\n data.currentTranslate = data.startTranslate;\n touches.diff = swiper.isHorizontal() ? touches.currentX - touches.startX : touches.currentY - touches.startY;\n return;\n }\n } else {\n data.currentTranslate = data.startTranslate;\n return;\n }\n }\n if (!params.followFinger || params.cssMode) return;\n\n // Update active index in free mode\n if (params.freeMode && params.freeMode.enabled && swiper.freeMode || params.watchSlidesProgress) {\n swiper.updateActiveIndex();\n swiper.updateSlidesClasses();\n }\n if (params.freeMode && params.freeMode.enabled && swiper.freeMode) {\n swiper.freeMode.onTouchMove();\n }\n // Update progress\n swiper.updateProgress(data.currentTranslate);\n // Update translate\n swiper.setTranslate(data.currentTranslate);\n}\n\nfunction onTouchEnd(event) {\n const swiper = this;\n const data = swiper.touchEventsData;\n let e = event;\n if (e.originalEvent) e = e.originalEvent;\n let targetTouch;\n const isTouchEvent = e.type === 'touchend' || e.type === 'touchcancel';\n if (!isTouchEvent) {\n if (data.touchId !== null) return; // return from pointer if we use touch\n if (e.pointerId !== data.pointerId) return;\n targetTouch = e;\n } else {\n targetTouch = [...e.changedTouches].find(t => t.identifier === data.touchId);\n if (!targetTouch || targetTouch.identifier !== data.touchId) return;\n }\n if (['pointercancel', 'pointerout', 'pointerleave', 'contextmenu'].includes(e.type)) {\n const proceed = ['pointercancel', 'contextmenu'].includes(e.type) && (swiper.browser.isSafari || swiper.browser.isWebView);\n if (!proceed) {\n return;\n }\n }\n data.pointerId = null;\n data.touchId = null;\n const {\n params,\n touches,\n rtlTranslate: rtl,\n slidesGrid,\n enabled\n } = swiper;\n if (!enabled) return;\n if (!params.simulateTouch && e.pointerType === 'mouse') return;\n if (data.allowTouchCallbacks) {\n swiper.emit('touchEnd', e);\n }\n data.allowTouchCallbacks = false;\n if (!data.isTouched) {\n if (data.isMoved && params.grabCursor) {\n swiper.setGrabCursor(false);\n }\n data.isMoved = false;\n data.startMoving = false;\n return;\n }\n\n // Return Grab Cursor\n if (params.grabCursor && data.isMoved && data.isTouched && (swiper.allowSlideNext === true || swiper.allowSlidePrev === true)) {\n swiper.setGrabCursor(false);\n }\n\n // Time diff\n const touchEndTime = now();\n const timeDiff = touchEndTime - data.touchStartTime;\n\n // Tap, doubleTap, Click\n if (swiper.allowClick) {\n const pathTree = e.path || e.composedPath && e.composedPath();\n swiper.updateClickedSlide(pathTree && pathTree[0] || e.target, pathTree);\n swiper.emit('tap click', e);\n if (timeDiff < 300 && touchEndTime - data.lastClickTime < 300) {\n swiper.emit('doubleTap doubleClick', e);\n }\n }\n data.lastClickTime = now();\n nextTick(() => {\n if (!swiper.destroyed) swiper.allowClick = true;\n });\n if (!data.isTouched || !data.isMoved || !swiper.swipeDirection || touches.diff === 0 && !data.loopSwapReset || data.currentTranslate === data.startTranslate && !data.loopSwapReset) {\n data.isTouched = false;\n data.isMoved = false;\n data.startMoving = false;\n return;\n }\n data.isTouched = false;\n data.isMoved = false;\n data.startMoving = false;\n let currentPos;\n if (params.followFinger) {\n currentPos = rtl ? swiper.translate : -swiper.translate;\n } else {\n currentPos = -data.currentTranslate;\n }\n if (params.cssMode) {\n return;\n }\n if (params.freeMode && params.freeMode.enabled) {\n swiper.freeMode.onTouchEnd({\n currentPos\n });\n return;\n }\n\n // Find current slide\n const swipeToLast = currentPos >= -swiper.maxTranslate() && !swiper.params.loop;\n let stopIndex = 0;\n let groupSize = swiper.slidesSizesGrid[0];\n for (let i = 0; i < slidesGrid.length; i += i < params.slidesPerGroupSkip ? 1 : params.slidesPerGroup) {\n const increment = i < params.slidesPerGroupSkip - 1 ? 1 : params.slidesPerGroup;\n if (typeof slidesGrid[i + increment] !== 'undefined') {\n if (swipeToLast || currentPos >= slidesGrid[i] && currentPos < slidesGrid[i + increment]) {\n stopIndex = i;\n groupSize = slidesGrid[i + increment] - slidesGrid[i];\n }\n } else if (swipeToLast || currentPos >= slidesGrid[i]) {\n stopIndex = i;\n groupSize = slidesGrid[slidesGrid.length - 1] - slidesGrid[slidesGrid.length - 2];\n }\n }\n let rewindFirstIndex = null;\n let rewindLastIndex = null;\n if (params.rewind) {\n if (swiper.isBeginning) {\n rewindLastIndex = params.virtual && params.virtual.enabled && swiper.virtual ? swiper.virtual.slides.length - 1 : swiper.slides.length - 1;\n } else if (swiper.isEnd) {\n rewindFirstIndex = 0;\n }\n }\n // Find current slide size\n const ratio = (currentPos - slidesGrid[stopIndex]) / groupSize;\n const increment = stopIndex < params.slidesPerGroupSkip - 1 ? 1 : params.slidesPerGroup;\n if (timeDiff > params.longSwipesMs) {\n // Long touches\n if (!params.longSwipes) {\n swiper.slideTo(swiper.activeIndex);\n return;\n }\n if (swiper.swipeDirection === 'next') {\n if (ratio >= params.longSwipesRatio) swiper.slideTo(params.rewind && swiper.isEnd ? rewindFirstIndex : stopIndex + increment);else swiper.slideTo(stopIndex);\n }\n if (swiper.swipeDirection === 'prev') {\n if (ratio > 1 - params.longSwipesRatio) {\n swiper.slideTo(stopIndex + increment);\n } else if (rewindLastIndex !== null && ratio < 0 && Math.abs(ratio) > params.longSwipesRatio) {\n swiper.slideTo(rewindLastIndex);\n } else {\n swiper.slideTo(stopIndex);\n }\n }\n } else {\n // Short swipes\n if (!params.shortSwipes) {\n swiper.slideTo(swiper.activeIndex);\n return;\n }\n const isNavButtonTarget = swiper.navigation && (e.target === swiper.navigation.nextEl || e.target === swiper.navigation.prevEl);\n if (!isNavButtonTarget) {\n if (swiper.swipeDirection === 'next') {\n swiper.slideTo(rewindFirstIndex !== null ? rewindFirstIndex : stopIndex + increment);\n }\n if (swiper.swipeDirection === 'prev') {\n swiper.slideTo(rewindLastIndex !== null ? rewindLastIndex : stopIndex);\n }\n } else if (e.target === swiper.navigation.nextEl) {\n swiper.slideTo(stopIndex + increment);\n } else {\n swiper.slideTo(stopIndex);\n }\n }\n}\n\nfunction onResize() {\n const swiper = this;\n const {\n params,\n el\n } = swiper;\n if (el && el.offsetWidth === 0) return;\n\n // Breakpoints\n if (params.breakpoints) {\n swiper.setBreakpoint();\n }\n\n // Save locks\n const {\n allowSlideNext,\n allowSlidePrev,\n snapGrid\n } = swiper;\n const isVirtual = swiper.virtual && swiper.params.virtual.enabled;\n\n // Disable locks on resize\n swiper.allowSlideNext = true;\n swiper.allowSlidePrev = true;\n swiper.updateSize();\n swiper.updateSlides();\n swiper.updateSlidesClasses();\n const isVirtualLoop = isVirtual && params.loop;\n if ((params.slidesPerView === 'auto' || params.slidesPerView > 1) && swiper.isEnd && !swiper.isBeginning && !swiper.params.centeredSlides && !isVirtualLoop) {\n const slides = isVirtual ? swiper.virtual.slides : swiper.slides;\n swiper.slideTo(slides.length - 1, 0, false, true);\n } else {\n if (swiper.params.loop && !isVirtual) {\n swiper.slideToLoop(swiper.realIndex, 0, false, true);\n } else {\n swiper.slideTo(swiper.activeIndex, 0, false, true);\n }\n }\n if (swiper.autoplay && swiper.autoplay.running && swiper.autoplay.paused) {\n clearTimeout(swiper.autoplay.resizeTimeout);\n swiper.autoplay.resizeTimeout = setTimeout(() => {\n if (swiper.autoplay && swiper.autoplay.running && swiper.autoplay.paused) {\n swiper.autoplay.resume();\n }\n }, 500);\n }\n // Return locks after resize\n swiper.allowSlidePrev = allowSlidePrev;\n swiper.allowSlideNext = allowSlideNext;\n if (swiper.params.watchOverflow && snapGrid !== swiper.snapGrid) {\n swiper.checkOverflow();\n }\n}\n\nfunction onClick(e) {\n const swiper = this;\n if (!swiper.enabled) return;\n if (!swiper.allowClick) {\n if (swiper.params.preventClicks) e.preventDefault();\n if (swiper.params.preventClicksPropagation && swiper.animating) {\n e.stopPropagation();\n e.stopImmediatePropagation();\n }\n }\n}\n\nfunction onScroll() {\n const swiper = this;\n const {\n wrapperEl,\n rtlTranslate,\n enabled\n } = swiper;\n if (!enabled) return;\n swiper.previousTranslate = swiper.translate;\n if (swiper.isHorizontal()) {\n swiper.translate = -wrapperEl.scrollLeft;\n } else {\n swiper.translate = -wrapperEl.scrollTop;\n }\n // eslint-disable-next-line\n if (swiper.translate === 0) swiper.translate = 0;\n swiper.updateActiveIndex();\n swiper.updateSlidesClasses();\n let newProgress;\n const translatesDiff = swiper.maxTranslate() - swiper.minTranslate();\n if (translatesDiff === 0) {\n newProgress = 0;\n } else {\n newProgress = (swiper.translate - swiper.minTranslate()) / translatesDiff;\n }\n if (newProgress !== swiper.progress) {\n swiper.updateProgress(rtlTranslate ? -swiper.translate : swiper.translate);\n }\n swiper.emit('setTranslate', swiper.translate, false);\n}\n\nfunction onLoad(e) {\n const swiper = this;\n processLazyPreloader(swiper, e.target);\n if (swiper.params.cssMode || swiper.params.slidesPerView !== 'auto' && !swiper.params.autoHeight) {\n return;\n }\n swiper.update();\n}\n\nfunction onDocumentTouchStart() {\n const swiper = this;\n if (swiper.documentTouchHandlerProceeded) return;\n swiper.documentTouchHandlerProceeded = true;\n if (swiper.params.touchReleaseOnEdges) {\n swiper.el.style.touchAction = 'auto';\n }\n}\n\nconst events = (swiper, method) => {\n const document = getDocument();\n const {\n params,\n el,\n wrapperEl,\n device\n } = swiper;\n const capture = !!params.nested;\n const domMethod = method === 'on' ? 'addEventListener' : 'removeEventListener';\n const swiperMethod = method;\n if (!el || typeof el === 'string') return;\n\n // Touch Events\n document[domMethod]('touchstart', swiper.onDocumentTouchStart, {\n passive: false,\n capture\n });\n el[domMethod]('touchstart', swiper.onTouchStart, {\n passive: false\n });\n el[domMethod]('pointerdown', swiper.onTouchStart, {\n passive: false\n });\n document[domMethod]('touchmove', swiper.onTouchMove, {\n passive: false,\n capture\n });\n document[domMethod]('pointermove', swiper.onTouchMove, {\n passive: false,\n capture\n });\n document[domMethod]('touchend', swiper.onTouchEnd, {\n passive: true\n });\n document[domMethod]('pointerup', swiper.onTouchEnd, {\n passive: true\n });\n document[domMethod]('pointercancel', swiper.onTouchEnd, {\n passive: true\n });\n document[domMethod]('touchcancel', swiper.onTouchEnd, {\n passive: true\n });\n document[domMethod]('pointerout', swiper.onTouchEnd, {\n passive: true\n });\n document[domMethod]('pointerleave', swiper.onTouchEnd, {\n passive: true\n });\n document[domMethod]('contextmenu', swiper.onTouchEnd, {\n passive: true\n });\n\n // Prevent Links Clicks\n if (params.preventClicks || params.preventClicksPropagation) {\n el[domMethod]('click', swiper.onClick, true);\n }\n if (params.cssMode) {\n wrapperEl[domMethod]('scroll', swiper.onScroll);\n }\n\n // Resize handler\n if (params.updateOnWindowResize) {\n swiper[swiperMethod](device.ios || device.android ? 'resize orientationchange observerUpdate' : 'resize observerUpdate', onResize, true);\n } else {\n swiper[swiperMethod]('observerUpdate', onResize, true);\n }\n\n // Images loader\n el[domMethod]('load', swiper.onLoad, {\n capture: true\n });\n};\nfunction attachEvents() {\n const swiper = this;\n const {\n params\n } = swiper;\n swiper.onTouchStart = onTouchStart.bind(swiper);\n swiper.onTouchMove = onTouchMove.bind(swiper);\n swiper.onTouchEnd = onTouchEnd.bind(swiper);\n swiper.onDocumentTouchStart = onDocumentTouchStart.bind(swiper);\n if (params.cssMode) {\n swiper.onScroll = onScroll.bind(swiper);\n }\n swiper.onClick = onClick.bind(swiper);\n swiper.onLoad = onLoad.bind(swiper);\n events(swiper, 'on');\n}\nfunction detachEvents() {\n const swiper = this;\n events(swiper, 'off');\n}\nvar events$1 = {\n attachEvents,\n detachEvents\n};\n\nconst isGridEnabled = (swiper, params) => {\n return swiper.grid && params.grid && params.grid.rows > 1;\n};\nfunction setBreakpoint() {\n const swiper = this;\n const {\n realIndex,\n initialized,\n params,\n el\n } = swiper;\n const breakpoints = params.breakpoints;\n if (!breakpoints || breakpoints && Object.keys(breakpoints).length === 0) return;\n const document = getDocument();\n\n // Get breakpoint for window/container width and update parameters\n const breakpointsBase = params.breakpointsBase === 'window' || !params.breakpointsBase ? params.breakpointsBase : 'container';\n const breakpointContainer = ['window', 'container'].includes(params.breakpointsBase) || !params.breakpointsBase ? swiper.el : document.querySelector(params.breakpointsBase);\n const breakpoint = swiper.getBreakpoint(breakpoints, breakpointsBase, breakpointContainer);\n if (!breakpoint || swiper.currentBreakpoint === breakpoint) return;\n const breakpointOnlyParams = breakpoint in breakpoints ? breakpoints[breakpoint] : undefined;\n const breakpointParams = breakpointOnlyParams || swiper.originalParams;\n const wasMultiRow = isGridEnabled(swiper, params);\n const isMultiRow = isGridEnabled(swiper, breakpointParams);\n const wasGrabCursor = swiper.params.grabCursor;\n const isGrabCursor = breakpointParams.grabCursor;\n const wasEnabled = params.enabled;\n if (wasMultiRow && !isMultiRow) {\n el.classList.remove(`${params.containerModifierClass}grid`, `${params.containerModifierClass}grid-column`);\n swiper.emitContainerClasses();\n } else if (!wasMultiRow && isMultiRow) {\n el.classList.add(`${params.containerModifierClass}grid`);\n if (breakpointParams.grid.fill && breakpointParams.grid.fill === 'column' || !breakpointParams.grid.fill && params.grid.fill === 'column') {\n el.classList.add(`${params.containerModifierClass}grid-column`);\n }\n swiper.emitContainerClasses();\n }\n if (wasGrabCursor && !isGrabCursor) {\n swiper.unsetGrabCursor();\n } else if (!wasGrabCursor && isGrabCursor) {\n swiper.setGrabCursor();\n }\n\n // Toggle navigation, pagination, scrollbar\n ['navigation', 'pagination', 'scrollbar'].forEach(prop => {\n if (typeof breakpointParams[prop] === 'undefined') return;\n const wasModuleEnabled = params[prop] && params[prop].enabled;\n const isModuleEnabled = breakpointParams[prop] && breakpointParams[prop].enabled;\n if (wasModuleEnabled && !isModuleEnabled) {\n swiper[prop].disable();\n }\n if (!wasModuleEnabled && isModuleEnabled) {\n swiper[prop].enable();\n }\n });\n const directionChanged = breakpointParams.direction && breakpointParams.direction !== params.direction;\n const needsReLoop = params.loop && (breakpointParams.slidesPerView !== params.slidesPerView || directionChanged);\n const wasLoop = params.loop;\n if (directionChanged && initialized) {\n swiper.changeDirection();\n }\n extend(swiper.params, breakpointParams);\n const isEnabled = swiper.params.enabled;\n const hasLoop = swiper.params.loop;\n Object.assign(swiper, {\n allowTouchMove: swiper.params.allowTouchMove,\n allowSlideNext: swiper.params.allowSlideNext,\n allowSlidePrev: swiper.params.allowSlidePrev\n });\n if (wasEnabled && !isEnabled) {\n swiper.disable();\n } else if (!wasEnabled && isEnabled) {\n swiper.enable();\n }\n swiper.currentBreakpoint = breakpoint;\n swiper.emit('_beforeBreakpoint', breakpointParams);\n if (initialized) {\n if (needsReLoop) {\n swiper.loopDestroy();\n swiper.loopCreate(realIndex);\n swiper.updateSlides();\n } else if (!wasLoop && hasLoop) {\n swiper.loopCreate(realIndex);\n swiper.updateSlides();\n } else if (wasLoop && !hasLoop) {\n swiper.loopDestroy();\n }\n }\n swiper.emit('breakpoint', breakpointParams);\n}\n\nfunction getBreakpoint(breakpoints, base = 'window', containerEl) {\n if (!breakpoints || base === 'container' && !containerEl) return undefined;\n let breakpoint = false;\n const window = getWindow();\n const currentHeight = base === 'window' ? window.innerHeight : containerEl.clientHeight;\n const points = Object.keys(breakpoints).map(point => {\n if (typeof point === 'string' && point.indexOf('@') === 0) {\n const minRatio = parseFloat(point.substr(1));\n const value = currentHeight * minRatio;\n return {\n value,\n point\n };\n }\n return {\n value: point,\n point\n };\n });\n points.sort((a, b) => parseInt(a.value, 10) - parseInt(b.value, 10));\n for (let i = 0; i < points.length; i += 1) {\n const {\n point,\n value\n } = points[i];\n if (base === 'window') {\n if (window.matchMedia(`(min-width: ${value}px)`).matches) {\n breakpoint = point;\n }\n } else if (value <= containerEl.clientWidth) {\n breakpoint = point;\n }\n }\n return breakpoint || 'max';\n}\n\nvar breakpoints = {\n setBreakpoint,\n getBreakpoint\n};\n\nfunction prepareClasses(entries, prefix) {\n const resultClasses = [];\n entries.forEach(item => {\n if (typeof item === 'object') {\n Object.keys(item).forEach(classNames => {\n if (item[classNames]) {\n resultClasses.push(prefix + classNames);\n }\n });\n } else if (typeof item === 'string') {\n resultClasses.push(prefix + item);\n }\n });\n return resultClasses;\n}\nfunction addClasses() {\n const swiper = this;\n const {\n classNames,\n params,\n rtl,\n el,\n device\n } = swiper;\n // prettier-ignore\n const suffixes = prepareClasses(['initialized', params.direction, {\n 'free-mode': swiper.params.freeMode && params.freeMode.enabled\n }, {\n 'autoheight': params.autoHeight\n }, {\n 'rtl': rtl\n }, {\n 'grid': params.grid && params.grid.rows > 1\n }, {\n 'grid-column': params.grid && params.grid.rows > 1 && params.grid.fill === 'column'\n }, {\n 'android': device.android\n }, {\n 'ios': device.ios\n }, {\n 'css-mode': params.cssMode\n }, {\n 'centered': params.cssMode && params.centeredSlides\n }, {\n 'watch-progress': params.watchSlidesProgress\n }], params.containerModifierClass);\n classNames.push(...suffixes);\n el.classList.add(...classNames);\n swiper.emitContainerClasses();\n}\n\nfunction removeClasses() {\n const swiper = this;\n const {\n el,\n classNames\n } = swiper;\n if (!el || typeof el === 'string') return;\n el.classList.remove(...classNames);\n swiper.emitContainerClasses();\n}\n\nvar classes = {\n addClasses,\n removeClasses\n};\n\nfunction checkOverflow() {\n const swiper = this;\n const {\n isLocked: wasLocked,\n params\n } = swiper;\n const {\n slidesOffsetBefore\n } = params;\n if (slidesOffsetBefore) {\n const lastSlideIndex = swiper.slides.length - 1;\n const lastSlideRightEdge = swiper.slidesGrid[lastSlideIndex] + swiper.slidesSizesGrid[lastSlideIndex] + slidesOffsetBefore * 2;\n swiper.isLocked = swiper.size > lastSlideRightEdge;\n } else {\n swiper.isLocked = swiper.snapGrid.length === 1;\n }\n if (params.allowSlideNext === true) {\n swiper.allowSlideNext = !swiper.isLocked;\n }\n if (params.allowSlidePrev === true) {\n swiper.allowSlidePrev = !swiper.isLocked;\n }\n if (wasLocked && wasLocked !== swiper.isLocked) {\n swiper.isEnd = false;\n }\n if (wasLocked !== swiper.isLocked) {\n swiper.emit(swiper.isLocked ? 'lock' : 'unlock');\n }\n}\nvar checkOverflow$1 = {\n checkOverflow\n};\n\nvar defaults = {\n init: true,\n direction: 'horizontal',\n oneWayMovement: false,\n swiperElementNodeName: 'SWIPER-CONTAINER',\n touchEventsTarget: 'wrapper',\n initialSlide: 0,\n speed: 300,\n cssMode: false,\n updateOnWindowResize: true,\n resizeObserver: true,\n nested: false,\n createElements: false,\n eventsPrefix: 'swiper',\n enabled: true,\n focusableElements: 'input, select, option, textarea, button, video, label',\n // Overrides\n width: null,\n height: null,\n //\n preventInteractionOnTransition: false,\n // ssr\n userAgent: null,\n url: null,\n // To support iOS's swipe-to-go-back gesture (when being used in-app).\n edgeSwipeDetection: false,\n edgeSwipeThreshold: 20,\n // Autoheight\n autoHeight: false,\n // Set wrapper width\n setWrapperSize: false,\n // Virtual Translate\n virtualTranslate: false,\n // Effects\n effect: 'slide',\n // 'slide' or 'fade' or 'cube' or 'coverflow' or 'flip'\n\n // Breakpoints\n breakpoints: undefined,\n breakpointsBase: 'window',\n // Slides grid\n spaceBetween: 0,\n slidesPerView: 1,\n slidesPerGroup: 1,\n slidesPerGroupSkip: 0,\n slidesPerGroupAuto: false,\n centeredSlides: false,\n centeredSlidesBounds: false,\n slidesOffsetBefore: 0,\n // in px\n slidesOffsetAfter: 0,\n // in px\n normalizeSlideIndex: true,\n centerInsufficientSlides: false,\n snapToSlideEdge: false,\n // Disable swiper and hide navigation when container not overflow\n watchOverflow: true,\n // Round length\n roundLengths: false,\n // Touches\n touchRatio: 1,\n touchAngle: 45,\n simulateTouch: true,\n shortSwipes: true,\n longSwipes: true,\n longSwipesRatio: 0.5,\n longSwipesMs: 300,\n followFinger: true,\n allowTouchMove: true,\n threshold: 5,\n touchMoveStopPropagation: false,\n touchStartPreventDefault: true,\n touchStartForcePreventDefault: false,\n touchReleaseOnEdges: false,\n // Unique Navigation Elements\n uniqueNavElements: true,\n // Resistance\n resistance: true,\n resistanceRatio: 0.85,\n // Progress\n watchSlidesProgress: false,\n // Cursor\n grabCursor: false,\n // Clicks\n preventClicks: true,\n preventClicksPropagation: true,\n slideToClickedSlide: false,\n // loop\n loop: false,\n loopAddBlankSlides: true,\n loopAdditionalSlides: 0,\n loopPreventsSliding: true,\n // rewind\n rewind: false,\n // Swiping/no swiping\n allowSlidePrev: true,\n allowSlideNext: true,\n swipeHandler: null,\n // '.swipe-handler',\n noSwiping: true,\n noSwipingClass: 'swiper-no-swiping',\n noSwipingSelector: null,\n // Passive Listeners\n passiveListeners: true,\n maxBackfaceHiddenSlides: 10,\n // NS\n containerModifierClass: 'swiper-',\n // NEW\n slideClass: 'swiper-slide',\n slideBlankClass: 'swiper-slide-blank',\n slideActiveClass: 'swiper-slide-active',\n slideVisibleClass: 'swiper-slide-visible',\n slideFullyVisibleClass: 'swiper-slide-fully-visible',\n slideNextClass: 'swiper-slide-next',\n slidePrevClass: 'swiper-slide-prev',\n wrapperClass: 'swiper-wrapper',\n lazyPreloaderClass: 'swiper-lazy-preloader',\n lazyPreloadPrevNext: 0,\n // Callbacks\n runCallbacksOnInit: true,\n // Internals\n _emitClasses: false\n};\n\nfunction moduleExtendParams(params, allModulesParams) {\n return function extendParams(obj = {}) {\n const moduleParamName = Object.keys(obj)[0];\n const moduleParams = obj[moduleParamName];\n if (typeof moduleParams !== 'object' || moduleParams === null) {\n extend(allModulesParams, obj);\n return;\n }\n if (params[moduleParamName] === true) {\n params[moduleParamName] = {\n enabled: true\n };\n }\n if (moduleParamName === 'navigation' && params[moduleParamName] && params[moduleParamName].enabled && !params[moduleParamName].prevEl && !params[moduleParamName].nextEl) {\n params[moduleParamName].auto = true;\n }\n if (['pagination', 'scrollbar'].indexOf(moduleParamName) >= 0 && params[moduleParamName] && params[moduleParamName].enabled && !params[moduleParamName].el) {\n params[moduleParamName].auto = true;\n }\n if (!(moduleParamName in params && 'enabled' in moduleParams)) {\n extend(allModulesParams, obj);\n return;\n }\n if (typeof params[moduleParamName] === 'object' && !('enabled' in params[moduleParamName])) {\n params[moduleParamName].enabled = true;\n }\n if (!params[moduleParamName]) params[moduleParamName] = {\n enabled: false\n };\n extend(allModulesParams, obj);\n };\n}\n\n/* eslint no-param-reassign: \"off\" */\nconst prototypes = {\n eventsEmitter,\n update,\n translate,\n transition,\n slide,\n loop,\n grabCursor,\n events: events$1,\n breakpoints,\n checkOverflow: checkOverflow$1,\n classes\n};\nconst extendedDefaults = {};\nclass Swiper {\n constructor(...args) {\n let el;\n let params;\n if (args.length === 1 && args[0].constructor && Object.prototype.toString.call(args[0]).slice(8, -1) === 'Object') {\n params = args[0];\n } else {\n [el, params] = args;\n }\n if (!params) params = {};\n params = extend({}, params);\n if (el && !params.el) params.el = el;\n const document = getDocument();\n if (params.el && typeof params.el === 'string' && document.querySelectorAll(params.el).length > 1) {\n const swipers = [];\n document.querySelectorAll(params.el).forEach(containerEl => {\n const newParams = extend({}, params, {\n el: containerEl\n });\n swipers.push(new Swiper(newParams));\n });\n // eslint-disable-next-line no-constructor-return\n return swipers;\n }\n\n // Swiper Instance\n const swiper = this;\n swiper.__swiper__ = true;\n swiper.support = getSupport();\n swiper.device = getDevice({\n userAgent: params.userAgent\n });\n swiper.browser = getBrowser();\n swiper.eventsListeners = {};\n swiper.eventsAnyListeners = [];\n swiper.modules = [...swiper.__modules__];\n if (params.modules && Array.isArray(params.modules)) {\n params.modules.forEach(mod => {\n if (typeof mod === 'function' && swiper.modules.indexOf(mod) < 0) {\n swiper.modules.push(mod);\n }\n });\n }\n const allModulesParams = {};\n swiper.modules.forEach(mod => {\n mod({\n params,\n swiper,\n extendParams: moduleExtendParams(params, allModulesParams),\n on: swiper.on.bind(swiper),\n once: swiper.once.bind(swiper),\n off: swiper.off.bind(swiper),\n emit: swiper.emit.bind(swiper)\n });\n });\n\n // Extend defaults with modules params\n const swiperParams = extend({}, defaults, allModulesParams);\n\n // Extend defaults with passed params\n swiper.params = extend({}, swiperParams, extendedDefaults, params);\n swiper.originalParams = extend({}, swiper.params);\n swiper.passedParams = extend({}, params);\n\n // add event listeners\n if (swiper.params && swiper.params.on) {\n Object.keys(swiper.params.on).forEach(eventName => {\n swiper.on(eventName, swiper.params.on[eventName]);\n });\n }\n if (swiper.params && swiper.params.onAny) {\n swiper.onAny(swiper.params.onAny);\n }\n\n // Extend Swiper\n Object.assign(swiper, {\n enabled: swiper.params.enabled,\n el,\n // Classes\n classNames: [],\n // Slides\n slides: [],\n slidesGrid: [],\n snapGrid: [],\n slidesSizesGrid: [],\n // isDirection\n isHorizontal() {\n return swiper.params.direction === 'horizontal';\n },\n isVertical() {\n return swiper.params.direction === 'vertical';\n },\n // Indexes\n activeIndex: 0,\n realIndex: 0,\n //\n isBeginning: true,\n isEnd: false,\n // Props\n translate: 0,\n previousTranslate: 0,\n progress: 0,\n velocity: 0,\n animating: false,\n cssOverflowAdjustment() {\n // Returns 0 unless `translate` is > 2**23\n // Should be subtracted from css values to prevent overflow\n return Math.trunc(this.translate / 2 ** 23) * 2 ** 23;\n },\n // Locks\n allowSlideNext: swiper.params.allowSlideNext,\n allowSlidePrev: swiper.params.allowSlidePrev,\n // Touch Events\n touchEventsData: {\n isTouched: undefined,\n isMoved: undefined,\n allowTouchCallbacks: undefined,\n touchStartTime: undefined,\n isScrolling: undefined,\n currentTranslate: undefined,\n startTranslate: undefined,\n allowThresholdMove: undefined,\n // Form elements to match\n focusableElements: swiper.params.focusableElements,\n // Last click time\n lastClickTime: 0,\n clickTimeout: undefined,\n // Velocities\n velocities: [],\n allowMomentumBounce: undefined,\n startMoving: undefined,\n pointerId: null,\n touchId: null\n },\n // Clicks\n allowClick: true,\n // Touches\n allowTouchMove: swiper.params.allowTouchMove,\n touches: {\n startX: 0,\n startY: 0,\n currentX: 0,\n currentY: 0,\n diff: 0\n },\n // Images\n imagesToLoad: [],\n imagesLoaded: 0\n });\n swiper.emit('_swiper');\n\n // Init\n if (swiper.params.init) {\n swiper.init();\n }\n\n // Return app instance\n // eslint-disable-next-line no-constructor-return\n return swiper;\n }\n getDirectionLabel(property) {\n if (this.isHorizontal()) {\n return property;\n }\n // prettier-ignore\n return {\n 'width': 'height',\n 'margin-top': 'margin-left',\n 'margin-bottom ': 'margin-right',\n 'margin-left': 'margin-top',\n 'margin-right': 'margin-bottom',\n 'padding-left': 'padding-top',\n 'padding-right': 'padding-bottom',\n 'marginRight': 'marginBottom'\n }[property];\n }\n getSlideIndex(slideEl) {\n const {\n slidesEl,\n params\n } = this;\n const slides = elementChildren(slidesEl, `.${params.slideClass}, swiper-slide`);\n const firstSlideIndex = elementIndex(slides[0]);\n return elementIndex(slideEl) - firstSlideIndex;\n }\n getSlideIndexByData(index) {\n return this.getSlideIndex(this.slides.find(slideEl => slideEl.getAttribute('data-swiper-slide-index') * 1 === index));\n }\n getSlideIndexWhenGrid(index) {\n if (this.grid && this.params.grid && this.params.grid.rows > 1) {\n if (this.params.grid.fill === 'column') {\n index = Math.floor(index / this.params.grid.rows);\n } else if (this.params.grid.fill === 'row') {\n index = index % Math.ceil(this.slides.length / this.params.grid.rows);\n }\n }\n return index;\n }\n recalcSlides() {\n const swiper = this;\n const {\n slidesEl,\n params\n } = swiper;\n swiper.slides = elementChildren(slidesEl, `.${params.slideClass}, swiper-slide`);\n }\n enable() {\n const swiper = this;\n if (swiper.enabled) return;\n swiper.enabled = true;\n if (swiper.params.grabCursor) {\n swiper.setGrabCursor();\n }\n swiper.emit('enable');\n }\n disable() {\n const swiper = this;\n if (!swiper.enabled) return;\n swiper.enabled = false;\n if (swiper.params.grabCursor) {\n swiper.unsetGrabCursor();\n }\n swiper.emit('disable');\n }\n setProgress(progress, speed) {\n const swiper = this;\n progress = Math.min(Math.max(progress, 0), 1);\n const min = swiper.minTranslate();\n const max = swiper.maxTranslate();\n const current = (max - min) * progress + min;\n swiper.translateTo(current, typeof speed === 'undefined' ? 0 : speed);\n swiper.updateActiveIndex();\n swiper.updateSlidesClasses();\n }\n emitContainerClasses() {\n const swiper = this;\n if (!swiper.params._emitClasses || !swiper.el) return;\n const cls = swiper.el.className.split(' ').filter(className => {\n return className.indexOf('swiper') === 0 || className.indexOf(swiper.params.containerModifierClass) === 0;\n });\n swiper.emit('_containerClasses', cls.join(' '));\n }\n getSlideClasses(slideEl) {\n const swiper = this;\n if (swiper.destroyed) return '';\n return slideEl.className.split(' ').filter(className => {\n return className.indexOf('swiper-slide') === 0 || className.indexOf(swiper.params.slideClass) === 0;\n }).join(' ');\n }\n emitSlidesClasses() {\n const swiper = this;\n if (!swiper.params._emitClasses || !swiper.el) return;\n const updates = [];\n swiper.slides.forEach(slideEl => {\n const classNames = swiper.getSlideClasses(slideEl);\n updates.push({\n slideEl,\n classNames\n });\n swiper.emit('_slideClass', slideEl, classNames);\n });\n swiper.emit('_slideClasses', updates);\n }\n slidesPerViewDynamic(view = 'current', exact = false) {\n const swiper = this;\n const {\n params,\n slides,\n slidesGrid,\n slidesSizesGrid,\n size: swiperSize,\n activeIndex\n } = swiper;\n let spv = 1;\n if (typeof params.slidesPerView === 'number') return params.slidesPerView;\n if (params.centeredSlides) {\n let slideSize = slides[activeIndex] ? Math.ceil(slides[activeIndex].swiperSlideSize) : 0;\n let breakLoop;\n for (let i = activeIndex + 1; i < slides.length; i += 1) {\n if (slides[i] && !breakLoop) {\n slideSize += Math.ceil(slides[i].swiperSlideSize);\n spv += 1;\n if (slideSize > swiperSize) breakLoop = true;\n }\n }\n for (let i = activeIndex - 1; i >= 0; i -= 1) {\n if (slides[i] && !breakLoop) {\n slideSize += slides[i].swiperSlideSize;\n spv += 1;\n if (slideSize > swiperSize) breakLoop = true;\n }\n }\n } else {\n // eslint-disable-next-line\n if (view === 'current') {\n for (let i = activeIndex + 1; i < slides.length; i += 1) {\n const slideInView = exact ? slidesGrid[i] + slidesSizesGrid[i] - slidesGrid[activeIndex] < swiperSize : slidesGrid[i] - slidesGrid[activeIndex] < swiperSize;\n if (slideInView) {\n spv += 1;\n }\n }\n } else {\n // previous\n for (let i = activeIndex - 1; i >= 0; i -= 1) {\n const slideInView = slidesGrid[activeIndex] - slidesGrid[i] < swiperSize;\n if (slideInView) {\n spv += 1;\n }\n }\n }\n }\n return spv;\n }\n update() {\n const swiper = this;\n if (!swiper || swiper.destroyed) return;\n const {\n snapGrid,\n params\n } = swiper;\n // Breakpoints\n if (params.breakpoints) {\n swiper.setBreakpoint();\n }\n [...swiper.el.querySelectorAll('[loading=\"lazy\"]')].forEach(imageEl => {\n if (imageEl.complete) {\n processLazyPreloader(swiper, imageEl);\n }\n });\n swiper.updateSize();\n swiper.updateSlides();\n swiper.updateProgress();\n swiper.updateSlidesClasses();\n function setTranslate() {\n const translateValue = swiper.rtlTranslate ? swiper.translate * -1 : swiper.translate;\n const newTranslate = Math.min(Math.max(translateValue, swiper.maxTranslate()), swiper.minTranslate());\n swiper.setTranslate(newTranslate);\n swiper.updateActiveIndex();\n swiper.updateSlidesClasses();\n }\n let translated;\n if (params.freeMode && params.freeMode.enabled && !params.cssMode) {\n setTranslate();\n if (params.autoHeight) {\n swiper.updateAutoHeight();\n }\n } else {\n if ((params.slidesPerView === 'auto' || params.slidesPerView > 1) && swiper.isEnd && !params.centeredSlides) {\n const slides = swiper.virtual && params.virtual.enabled ? swiper.virtual.slides : swiper.slides;\n translated = swiper.slideTo(slides.length - 1, 0, false, true);\n } else {\n translated = swiper.slideTo(swiper.activeIndex, 0, false, true);\n }\n if (!translated) {\n setTranslate();\n }\n }\n if (params.watchOverflow && snapGrid !== swiper.snapGrid) {\n swiper.checkOverflow();\n }\n swiper.emit('update');\n }\n changeDirection(newDirection, needUpdate = true) {\n const swiper = this;\n const currentDirection = swiper.params.direction;\n if (!newDirection) {\n // eslint-disable-next-line\n newDirection = currentDirection === 'horizontal' ? 'vertical' : 'horizontal';\n }\n if (newDirection === currentDirection || newDirection !== 'horizontal' && newDirection !== 'vertical') {\n return swiper;\n }\n swiper.el.classList.remove(`${swiper.params.containerModifierClass}${currentDirection}`);\n swiper.el.classList.add(`${swiper.params.containerModifierClass}${newDirection}`);\n swiper.emitContainerClasses();\n swiper.params.direction = newDirection;\n swiper.slides.forEach(slideEl => {\n if (newDirection === 'vertical') {\n slideEl.style.width = '';\n } else {\n slideEl.style.height = '';\n }\n });\n swiper.emit('changeDirection');\n if (needUpdate) swiper.update();\n return swiper;\n }\n changeLanguageDirection(direction) {\n const swiper = this;\n if (swiper.rtl && direction === 'rtl' || !swiper.rtl && direction === 'ltr') return;\n swiper.rtl = direction === 'rtl';\n swiper.rtlTranslate = swiper.params.direction === 'horizontal' && swiper.rtl;\n if (swiper.rtl) {\n swiper.el.classList.add(`${swiper.params.containerModifierClass}rtl`);\n swiper.el.dir = 'rtl';\n } else {\n swiper.el.classList.remove(`${swiper.params.containerModifierClass}rtl`);\n swiper.el.dir = 'ltr';\n }\n swiper.update();\n }\n mount(element) {\n const swiper = this;\n if (swiper.mounted) return true;\n\n // Find el\n let el = element || swiper.params.el;\n if (typeof el === 'string') {\n el = document.querySelector(el);\n }\n if (!el) {\n return false;\n }\n el.swiper = swiper;\n if (el.parentNode && el.parentNode.host && el.parentNode.host.nodeName === swiper.params.swiperElementNodeName.toUpperCase()) {\n swiper.isElement = true;\n }\n const getWrapperSelector = () => {\n return `.${(swiper.params.wrapperClass || '').trim().split(' ').join('.')}`;\n };\n const getWrapper = () => {\n if (el && el.shadowRoot && el.shadowRoot.querySelector) {\n const res = el.shadowRoot.querySelector(getWrapperSelector());\n // Children needs to return slot items\n return res;\n }\n return elementChildren(el, getWrapperSelector())[0];\n };\n // Find Wrapper\n let wrapperEl = getWrapper();\n if (!wrapperEl && swiper.params.createElements) {\n wrapperEl = createElement('div', swiper.params.wrapperClass);\n el.append(wrapperEl);\n elementChildren(el, `.${swiper.params.slideClass}`).forEach(slideEl => {\n wrapperEl.append(slideEl);\n });\n }\n Object.assign(swiper, {\n el,\n wrapperEl,\n slidesEl: swiper.isElement && !el.parentNode.host.slideSlots ? el.parentNode.host : wrapperEl,\n hostEl: swiper.isElement ? el.parentNode.host : el,\n mounted: true,\n // RTL\n rtl: el.dir.toLowerCase() === 'rtl' || elementStyle(el, 'direction') === 'rtl',\n rtlTranslate: swiper.params.direction === 'horizontal' && (el.dir.toLowerCase() === 'rtl' || elementStyle(el, 'direction') === 'rtl'),\n wrongRTL: elementStyle(wrapperEl, 'display') === '-webkit-box'\n });\n return true;\n }\n init(el) {\n const swiper = this;\n if (swiper.initialized) return swiper;\n const mounted = swiper.mount(el);\n if (mounted === false) return swiper;\n swiper.emit('beforeInit');\n\n // Set breakpoint\n if (swiper.params.breakpoints) {\n swiper.setBreakpoint();\n }\n\n // Add Classes\n swiper.addClasses();\n\n // Update size\n swiper.updateSize();\n\n // Update slides\n swiper.updateSlides();\n if (swiper.params.watchOverflow) {\n swiper.checkOverflow();\n }\n\n // Set Grab Cursor\n if (swiper.params.grabCursor && swiper.enabled) {\n swiper.setGrabCursor();\n }\n\n // Slide To Initial Slide\n if (swiper.params.loop && swiper.virtual && swiper.params.virtual.enabled) {\n swiper.slideTo(swiper.params.initialSlide + swiper.virtual.slidesBefore, 0, swiper.params.runCallbacksOnInit, false, true);\n } else {\n swiper.slideTo(swiper.params.initialSlide, 0, swiper.params.runCallbacksOnInit, false, true);\n }\n\n // Create loop\n if (swiper.params.loop) {\n swiper.loopCreate(undefined, true);\n }\n\n // Attach events\n swiper.attachEvents();\n const lazyElements = [...swiper.el.querySelectorAll('[loading=\"lazy\"]')];\n if (swiper.isElement) {\n lazyElements.push(...swiper.hostEl.querySelectorAll('[loading=\"lazy\"]'));\n }\n lazyElements.forEach(imageEl => {\n if (imageEl.complete) {\n processLazyPreloader(swiper, imageEl);\n } else {\n imageEl.addEventListener('load', e => {\n processLazyPreloader(swiper, e.target);\n });\n }\n });\n preload(swiper);\n\n // Init Flag\n swiper.initialized = true;\n preload(swiper);\n\n // Emit\n swiper.emit('init');\n swiper.emit('afterInit');\n return swiper;\n }\n destroy(deleteInstance = true, cleanStyles = true) {\n const swiper = this;\n const {\n params,\n el,\n wrapperEl,\n slides\n } = swiper;\n if (typeof swiper.params === 'undefined' || swiper.destroyed) {\n return null;\n }\n swiper.emit('beforeDestroy');\n\n // Init Flag\n swiper.initialized = false;\n\n // Detach events\n swiper.detachEvents();\n\n // Destroy loop\n if (params.loop) {\n swiper.loopDestroy();\n }\n\n // Cleanup styles\n if (cleanStyles) {\n swiper.removeClasses();\n if (el && typeof el !== 'string') {\n el.removeAttribute('style');\n }\n if (wrapperEl) {\n wrapperEl.removeAttribute('style');\n }\n if (slides && slides.length) {\n slides.forEach(slideEl => {\n slideEl.classList.remove(params.slideVisibleClass, params.slideFullyVisibleClass, params.slideActiveClass, params.slideNextClass, params.slidePrevClass);\n slideEl.removeAttribute('style');\n slideEl.removeAttribute('data-swiper-slide-index');\n });\n }\n }\n swiper.emit('destroy');\n\n // Detach emitter events\n Object.keys(swiper.eventsListeners).forEach(eventName => {\n swiper.off(eventName);\n });\n if (deleteInstance !== false) {\n if (swiper.el && typeof swiper.el !== 'string') {\n swiper.el.swiper = null;\n }\n deleteProps(swiper);\n }\n swiper.destroyed = true;\n return null;\n }\n static extendDefaults(newDefaults) {\n extend(extendedDefaults, newDefaults);\n }\n static get extendedDefaults() {\n return extendedDefaults;\n }\n static get defaults() {\n return defaults;\n }\n static installModule(mod) {\n if (!Swiper.prototype.__modules__) Swiper.prototype.__modules__ = [];\n const modules = Swiper.prototype.__modules__;\n if (typeof mod === 'function' && modules.indexOf(mod) < 0) {\n modules.push(mod);\n }\n }\n static use(module) {\n if (Array.isArray(module)) {\n module.forEach(m => Swiper.installModule(m));\n return Swiper;\n }\n Swiper.installModule(module);\n return Swiper;\n }\n}\nObject.keys(prototypes).forEach(prototypeGroup => {\n Object.keys(prototypes[prototypeGroup]).forEach(protoMethod => {\n Swiper.prototype[protoMethod] = prototypes[prototypeGroup][protoMethod];\n });\n});\nSwiper.use([Resize, Observer]);\n\nexport { Swiper as S, defaults as d };\n","import { s as setInnerHTML } from './utils.mjs';\n\n/* underscore in name -> watch for changes */\nconst paramsList = ['eventsPrefix', 'injectStyles', 'injectStylesUrls', 'modules', 'init', '_direction', 'oneWayMovement', 'swiperElementNodeName', 'touchEventsTarget', 'initialSlide', '_speed', 'cssMode', 'updateOnWindowResize', 'resizeObserver', 'nested', 'focusableElements', '_enabled', '_width', '_height', 'preventInteractionOnTransition', 'userAgent', 'url', '_edgeSwipeDetection', '_edgeSwipeThreshold', '_freeMode', '_autoHeight', 'setWrapperSize', 'virtualTranslate', '_effect', 'breakpoints', 'breakpointsBase', '_spaceBetween', '_slidesPerView', 'maxBackfaceHiddenSlides', '_grid', '_slidesPerGroup', '_slidesPerGroupSkip', '_slidesPerGroupAuto', '_centeredSlides', '_centeredSlidesBounds', '_slidesOffsetBefore', '_slidesOffsetAfter', 'normalizeSlideIndex', '_centerInsufficientSlides', '_snapToSlideEdge', '_watchOverflow', 'roundLengths', 'touchRatio', 'touchAngle', 'simulateTouch', '_shortSwipes', '_longSwipes', 'longSwipesRatio', 'longSwipesMs', '_followFinger', 'allowTouchMove', '_threshold', 'touchMoveStopPropagation', 'touchStartPreventDefault', 'touchStartForcePreventDefault', 'touchReleaseOnEdges', 'uniqueNavElements', '_resistance', '_resistanceRatio', '_watchSlidesProgress', '_grabCursor', 'preventClicks', 'preventClicksPropagation', '_slideToClickedSlide', '_loop', 'loopAdditionalSlides', 'loopAddBlankSlides', 'loopPreventsSliding', '_rewind', '_allowSlidePrev', '_allowSlideNext', '_swipeHandler', '_noSwiping', 'noSwipingClass', 'noSwipingSelector', 'passiveListeners', 'containerModifierClass', 'slideClass', 'slideActiveClass', 'slideVisibleClass', 'slideFullyVisibleClass', 'slideNextClass', 'slidePrevClass', 'slideBlankClass', 'wrapperClass', 'lazyPreloaderClass', 'lazyPreloadPrevNext', 'runCallbacksOnInit', 'observer', 'observeParents', 'observeSlideChildren',\n// modules\n'a11y', '_autoplay', '_controller', 'coverflowEffect', 'cubeEffect', 'fadeEffect', 'flipEffect', 'creativeEffect', 'cardsEffect', 'hashNavigation', 'history', 'keyboard', 'mousewheel', '_navigation', '_pagination', 'parallax', '_scrollbar', '_thumbs', 'virtual', 'zoom', 'control'];\n\nfunction isObject(o) {\n return typeof o === 'object' && o !== null && o.constructor && Object.prototype.toString.call(o).slice(8, -1) === 'Object' && !o.__swiper__;\n}\nfunction extend(target, src) {\n const noExtend = ['__proto__', 'constructor', 'prototype'];\n Object.keys(src).filter(key => noExtend.indexOf(key) < 0).forEach(key => {\n if (typeof target[key] === 'undefined') target[key] = src[key];else if (isObject(src[key]) && isObject(target[key]) && Object.keys(src[key]).length > 0) {\n if (src[key].__swiper__) target[key] = src[key];else extend(target[key], src[key]);\n } else {\n target[key] = src[key];\n }\n });\n}\nfunction needsNavigation(params = {}) {\n return params.navigation && typeof params.navigation.nextEl === 'undefined' && typeof params.navigation.prevEl === 'undefined';\n}\nfunction needsPagination(params = {}) {\n return params.pagination && typeof params.pagination.el === 'undefined';\n}\nfunction needsScrollbar(params = {}) {\n return params.scrollbar && typeof params.scrollbar.el === 'undefined';\n}\nfunction uniqueClasses(classNames = '') {\n const classes = classNames.split(' ').map(c => c.trim()).filter(c => !!c);\n const unique = [];\n classes.forEach(c => {\n if (unique.indexOf(c) < 0) unique.push(c);\n });\n return unique.join(' ');\n}\nfunction attrToProp(attrName = '') {\n return attrName.replace(/-[a-z]/g, l => l.toUpperCase().replace('-', ''));\n}\nfunction wrapperClass(className = '') {\n if (!className) return 'swiper-wrapper';\n if (!className.includes('swiper-wrapper')) return `swiper-wrapper ${className}`;\n return className;\n}\n\nfunction updateSwiper({\n swiper,\n slides,\n passedParams,\n changedParams,\n nextEl,\n prevEl,\n scrollbarEl,\n paginationEl\n}) {\n const updateParams = changedParams.filter(key => key !== 'children' && key !== 'direction' && key !== 'wrapperClass');\n const {\n params: currentParams,\n pagination,\n navigation,\n scrollbar,\n virtual,\n thumbs\n } = swiper;\n let needThumbsInit;\n let needControllerInit;\n let needPaginationInit;\n let needScrollbarInit;\n let needNavigationInit;\n let loopNeedDestroy;\n let loopNeedEnable;\n let loopNeedReloop;\n if (changedParams.includes('thumbs') && passedParams.thumbs && passedParams.thumbs.swiper && !passedParams.thumbs.swiper.destroyed && currentParams.thumbs && (!currentParams.thumbs.swiper || currentParams.thumbs.swiper.destroyed)) {\n needThumbsInit = true;\n }\n if (changedParams.includes('controller') && passedParams.controller && passedParams.controller.control && currentParams.controller && !currentParams.controller.control) {\n needControllerInit = true;\n }\n if (changedParams.includes('pagination') && passedParams.pagination && (passedParams.pagination.el || paginationEl) && (currentParams.pagination || currentParams.pagination === false) && pagination && !pagination.el) {\n needPaginationInit = true;\n }\n if (changedParams.includes('scrollbar') && passedParams.scrollbar && (passedParams.scrollbar.el || scrollbarEl) && (currentParams.scrollbar || currentParams.scrollbar === false) && scrollbar && !scrollbar.el) {\n needScrollbarInit = true;\n }\n if (changedParams.includes('navigation') && passedParams.navigation && (passedParams.navigation.prevEl || prevEl) && (passedParams.navigation.nextEl || nextEl) && (currentParams.navigation || currentParams.navigation === false) && navigation && !navigation.prevEl && !navigation.nextEl) {\n needNavigationInit = true;\n }\n const destroyModule = mod => {\n if (!swiper[mod]) return;\n swiper[mod].destroy();\n if (mod === 'navigation') {\n if (swiper.isElement) {\n swiper[mod].prevEl.remove();\n swiper[mod].nextEl.remove();\n }\n currentParams[mod].prevEl = undefined;\n currentParams[mod].nextEl = undefined;\n swiper[mod].prevEl = undefined;\n swiper[mod].nextEl = undefined;\n } else {\n if (swiper.isElement) {\n swiper[mod].el.remove();\n }\n currentParams[mod].el = undefined;\n swiper[mod].el = undefined;\n }\n };\n if (changedParams.includes('loop') && swiper.isElement) {\n if (currentParams.loop && !passedParams.loop) {\n loopNeedDestroy = true;\n } else if (!currentParams.loop && passedParams.loop) {\n loopNeedEnable = true;\n } else {\n loopNeedReloop = true;\n }\n }\n updateParams.forEach(key => {\n if (isObject(currentParams[key]) && isObject(passedParams[key])) {\n Object.assign(currentParams[key], passedParams[key]);\n if ((key === 'navigation' || key === 'pagination' || key === 'scrollbar') && 'enabled' in passedParams[key] && !passedParams[key].enabled) {\n destroyModule(key);\n }\n } else {\n const newValue = passedParams[key];\n if ((newValue === true || newValue === false) && (key === 'navigation' || key === 'pagination' || key === 'scrollbar')) {\n if (newValue === false) {\n destroyModule(key);\n }\n } else {\n currentParams[key] = passedParams[key];\n }\n }\n });\n if (updateParams.includes('controller') && !needControllerInit && swiper.controller && swiper.controller.control && currentParams.controller && currentParams.controller.control) {\n swiper.controller.control = currentParams.controller.control;\n }\n if (changedParams.includes('children') && slides && virtual && currentParams.virtual.enabled) {\n virtual.slides = slides;\n virtual.update(true);\n } else if (changedParams.includes('virtual') && virtual && currentParams.virtual.enabled) {\n if (slides) virtual.slides = slides;\n virtual.update(true);\n }\n if (changedParams.includes('children') && slides && currentParams.loop) {\n loopNeedReloop = true;\n }\n if (needThumbsInit) {\n const initialized = thumbs.init();\n if (initialized) thumbs.update(true);\n }\n if (needControllerInit) {\n swiper.controller.control = currentParams.controller.control;\n }\n if (needPaginationInit) {\n if (swiper.isElement && (!paginationEl || typeof paginationEl === 'string')) {\n paginationEl = document.createElement('div');\n paginationEl.classList.add('swiper-pagination');\n paginationEl.part.add('pagination');\n swiper.el.appendChild(paginationEl);\n }\n if (paginationEl) currentParams.pagination.el = paginationEl;\n pagination.init();\n pagination.render();\n pagination.update();\n }\n if (needScrollbarInit) {\n if (swiper.isElement && (!scrollbarEl || typeof scrollbarEl === 'string')) {\n scrollbarEl = document.createElement('div');\n scrollbarEl.classList.add('swiper-scrollbar');\n scrollbarEl.part.add('scrollbar');\n swiper.el.appendChild(scrollbarEl);\n }\n if (scrollbarEl) currentParams.scrollbar.el = scrollbarEl;\n scrollbar.init();\n scrollbar.updateSize();\n scrollbar.setTranslate();\n }\n if (needNavigationInit) {\n if (swiper.isElement) {\n if (!nextEl || typeof nextEl === 'string') {\n nextEl = document.createElement('div');\n nextEl.classList.add('swiper-button-next');\n setInnerHTML(nextEl, swiper.navigation.arrowSvg);\n nextEl.part.add('button-next');\n swiper.el.appendChild(nextEl);\n }\n if (!prevEl || typeof prevEl === 'string') {\n prevEl = document.createElement('div');\n prevEl.classList.add('swiper-button-prev');\n setInnerHTML(prevEl, swiper.navigation.arrowSvg);\n prevEl.part.add('button-prev');\n swiper.el.appendChild(prevEl);\n }\n }\n if (nextEl) currentParams.navigation.nextEl = nextEl;\n if (prevEl) currentParams.navigation.prevEl = prevEl;\n navigation.init();\n navigation.update();\n }\n if (changedParams.includes('allowSlideNext')) {\n swiper.allowSlideNext = passedParams.allowSlideNext;\n }\n if (changedParams.includes('allowSlidePrev')) {\n swiper.allowSlidePrev = passedParams.allowSlidePrev;\n }\n if (changedParams.includes('direction')) {\n swiper.changeDirection(passedParams.direction, false);\n }\n if (loopNeedDestroy || loopNeedReloop) {\n swiper.loopDestroy();\n }\n if (loopNeedEnable || loopNeedReloop) {\n swiper.loopCreate();\n }\n swiper.update();\n}\n\nexport { needsPagination as a, needsScrollbar as b, attrToProp as c, uniqueClasses as d, extend as e, isObject as i, needsNavigation as n, paramsList as p, updateSwiper as u, wrapperClass as w };\n","import { e as extend, p as paramsList, i as isObject, n as needsNavigation, a as needsPagination, b as needsScrollbar } from './update-swiper.mjs';\nimport { d as defaults } from './swiper-core.mjs';\n\nfunction getParams(obj = {}, splitEvents = true) {\n const params = {\n on: {}\n };\n const events = {};\n const passedParams = {};\n extend(params, defaults);\n params._emitClasses = true;\n params.init = false;\n const rest = {};\n const allowedParams = paramsList.map(key => key.replace(/_/, ''));\n const plainObj = Object.assign({}, obj);\n Object.keys(plainObj).forEach(key => {\n if (typeof obj[key] === 'undefined') return;\n if (allowedParams.indexOf(key) >= 0) {\n if (isObject(obj[key])) {\n params[key] = {};\n passedParams[key] = {};\n extend(params[key], obj[key]);\n extend(passedParams[key], obj[key]);\n } else {\n params[key] = obj[key];\n passedParams[key] = obj[key];\n }\n } else if (key.search(/on[A-Z]/) === 0 && typeof obj[key] === 'function') {\n if (splitEvents) {\n events[`${key[2].toLowerCase()}${key.substr(3)}`] = obj[key];\n } else {\n params.on[`${key[2].toLowerCase()}${key.substr(3)}`] = obj[key];\n }\n } else {\n rest[key] = obj[key];\n }\n });\n ['navigation', 'pagination', 'scrollbar'].forEach(key => {\n if (params[key] === true) params[key] = {};\n if (params[key] === false) delete params[key];\n });\n return {\n params,\n passedParams,\n rest,\n events\n };\n}\n\nfunction mountSwiper({\n el,\n nextEl,\n prevEl,\n paginationEl,\n scrollbarEl,\n swiper\n}, swiperParams) {\n if (needsNavigation(swiperParams) && nextEl && prevEl) {\n swiper.params.navigation.nextEl = nextEl;\n swiper.originalParams.navigation.nextEl = nextEl;\n swiper.params.navigation.prevEl = prevEl;\n swiper.originalParams.navigation.prevEl = prevEl;\n }\n if (needsPagination(swiperParams) && paginationEl) {\n swiper.params.pagination.el = paginationEl;\n swiper.originalParams.pagination.el = paginationEl;\n }\n if (needsScrollbar(swiperParams) && scrollbarEl) {\n swiper.params.scrollbar.el = scrollbarEl;\n swiper.originalParams.scrollbar.el = scrollbarEl;\n }\n swiper.init(el);\n}\n\nfunction getChangedParams(swiperParams, oldParams, children, oldChildren, getKey) {\n const keys = [];\n if (!oldParams) return keys;\n const addKey = key => {\n if (keys.indexOf(key) < 0) keys.push(key);\n };\n if (children && oldChildren) {\n const oldChildrenKeys = oldChildren.map(getKey);\n const childrenKeys = children.map(getKey);\n if (oldChildrenKeys.join('') !== childrenKeys.join('')) addKey('children');\n if (oldChildren.length !== children.length) addKey('children');\n }\n const watchParams = paramsList.filter(key => key[0] === '_').map(key => key.replace(/_/, ''));\n watchParams.forEach(key => {\n if (key in swiperParams && key in oldParams) {\n if (isObject(swiperParams[key]) && isObject(oldParams[key])) {\n const newKeys = Object.keys(swiperParams[key]);\n const oldKeys = Object.keys(oldParams[key]);\n if (newKeys.length !== oldKeys.length) {\n addKey(key);\n } else {\n newKeys.forEach(newKey => {\n if (swiperParams[key][newKey] !== oldParams[key][newKey]) {\n addKey(key);\n }\n });\n oldKeys.forEach(oldKey => {\n if (swiperParams[key][oldKey] !== oldParams[key][oldKey]) addKey(key);\n });\n }\n } else if (swiperParams[key] !== oldParams[key]) {\n addKey(key);\n }\n }\n });\n return keys;\n}\n\nconst updateOnVirtualData = swiper => {\n if (!swiper || swiper.destroyed || !swiper.params.virtual || swiper.params.virtual && !swiper.params.virtual.enabled) return;\n swiper.updateSlides();\n swiper.updateProgress();\n swiper.updateSlidesClasses();\n swiper.emit('_virtualUpdated');\n if (swiper.parallax && swiper.params.parallax && swiper.params.parallax.enabled) {\n swiper.parallax.setTranslate();\n }\n};\n\nexport { getChangedParams as a, getParams as g, mountSwiper as m, updateOnVirtualData as u };\n","/**\n * Swiper React 12.1.4\n * Most modern mobile touch slider and framework with hardware accelerated transitions\n * https://swiperjs.com\n *\n * Copyright 2014-2026 Vladimir Kharlampidi\n *\n * Released under the MIT License\n *\n * Released on: April 29, 2026\n */\n\nimport React, { useEffect, useLayoutEffect, useContext, createContext, forwardRef, useState, useRef } from 'react';\nimport { S as Swiper$1 } from './shared/swiper-core.mjs';\nimport { g as getParams, m as mountSwiper, a as getChangedParams, u as updateOnVirtualData } from './shared/update-on-virtual-data.mjs';\nimport { d as uniqueClasses, w as wrapperClass, n as needsNavigation, b as needsScrollbar, a as needsPagination, e as extend, u as updateSwiper } from './shared/update-swiper.mjs';\n\nfunction _extends() {\n _extends = Object.assign ? Object.assign.bind() : function (target) {\n for (var i = 1; i < arguments.length; i++) {\n var source = arguments[i];\n for (var key in source) {\n if (Object.prototype.hasOwnProperty.call(source, key)) {\n target[key] = source[key];\n }\n }\n }\n return target;\n };\n return _extends.apply(this, arguments);\n}\n\nfunction isChildSwiperSlide(child) {\n return child.type && child.type.displayName && child.type.displayName.includes('SwiperSlide');\n}\nfunction processChildren(c) {\n const slides = [];\n React.Children.toArray(c).forEach(child => {\n if (isChildSwiperSlide(child)) {\n slides.push(child);\n } else if (child.props && child.props.children) {\n processChildren(child.props.children).forEach(slide => slides.push(slide));\n }\n });\n return slides;\n}\nfunction getChildren(c) {\n const slides = [];\n const slots = {\n 'container-start': [],\n 'container-end': [],\n 'wrapper-start': [],\n 'wrapper-end': []\n };\n React.Children.toArray(c).forEach(child => {\n if (isChildSwiperSlide(child)) {\n slides.push(child);\n } else if (child.props && child.props.slot && slots[child.props.slot]) {\n slots[child.props.slot].push(child);\n } else if (child.props && child.props.children) {\n const foundSlides = processChildren(child.props.children);\n if (foundSlides.length > 0) {\n foundSlides.forEach(slide => slides.push(slide));\n } else {\n slots['container-end'].push(child);\n }\n } else {\n slots['container-end'].push(child);\n }\n });\n return {\n slides,\n slots\n };\n}\n\nfunction renderVirtual(swiper, slides, virtualData) {\n if (!virtualData) return null;\n const getSlideIndex = index => {\n let slideIndex = index;\n if (index < 0) {\n slideIndex = slides.length + index;\n } else if (slideIndex >= slides.length) {\n // eslint-disable-next-line\n slideIndex = slideIndex - slides.length;\n }\n return slideIndex;\n };\n const style = swiper.isHorizontal() ? {\n [swiper.rtlTranslate ? 'right' : 'left']: `${virtualData.offset}px`\n } : {\n top: `${virtualData.offset}px`\n };\n const {\n from,\n to\n } = virtualData;\n const loopFrom = swiper.params.loop ? -slides.length : 0;\n const loopTo = swiper.params.loop ? slides.length * 2 : slides.length;\n const slidesToRender = [];\n for (let i = loopFrom; i < loopTo; i += 1) {\n if (i >= from && i <= to) {\n slidesToRender.push(slides[getSlideIndex(i)]);\n }\n }\n return slidesToRender.map((child, index) => {\n return /*#__PURE__*/React.cloneElement(child, {\n swiper,\n style,\n key: child.props.virtualIndex || child.key || `slide-${index}`\n });\n });\n}\n\nfunction useIsomorphicLayoutEffect(callback, deps) {\n // eslint-disable-next-line\n if (typeof window === 'undefined') return useEffect(callback, deps);\n return useLayoutEffect(callback, deps);\n}\n\nconst SwiperSlideContext = /*#__PURE__*/createContext(null);\nconst useSwiperSlide = () => {\n return useContext(SwiperSlideContext);\n};\nconst SwiperContext = /*#__PURE__*/createContext(null);\nconst useSwiper = () => {\n return useContext(SwiperContext);\n};\n\nconst Swiper = /*#__PURE__*/forwardRef(({\n className,\n tag: Tag = 'div',\n wrapperTag: WrapperTag = 'div',\n children,\n onSwiper,\n ...rest\n} = {}, externalElRef) => {\n let eventsAssigned = false;\n const [containerClasses, setContainerClasses] = useState('swiper');\n const [virtualData, setVirtualData] = useState(null);\n const [breakpointChanged, setBreakpointChanged] = useState(false);\n const initializedRef = useRef(false);\n const swiperElRef = useRef(null);\n const swiperRef = useRef(null);\n const oldPassedParamsRef = useRef(null);\n const oldSlides = useRef(null);\n const nextElRef = useRef(null);\n const prevElRef = useRef(null);\n const paginationElRef = useRef(null);\n const scrollbarElRef = useRef(null);\n const {\n params: swiperParams,\n passedParams,\n rest: restProps,\n events\n } = getParams(rest);\n const {\n slides,\n slots\n } = getChildren(children);\n const onBeforeBreakpoint = () => {\n setBreakpointChanged(!breakpointChanged);\n };\n Object.assign(swiperParams.on, {\n _containerClasses(swiper, classes) {\n setContainerClasses(classes);\n }\n });\n const initSwiper = () => {\n // init swiper\n Object.assign(swiperParams.on, events);\n eventsAssigned = true;\n const passParams = {\n ...swiperParams\n };\n delete passParams.wrapperClass;\n swiperRef.current = new Swiper$1(passParams);\n if (swiperRef.current.virtual && swiperRef.current.params.virtual.enabled) {\n swiperRef.current.virtual.slides = slides;\n const extendWith = {\n cache: false,\n slides,\n renderExternal: setVirtualData,\n renderExternalUpdate: false\n };\n extend(swiperRef.current.params.virtual, extendWith);\n extend(swiperRef.current.originalParams.virtual, extendWith);\n }\n };\n if (!swiperElRef.current) {\n initSwiper();\n }\n\n // Listen for breakpoints change\n if (swiperRef.current) {\n swiperRef.current.on('_beforeBreakpoint', onBeforeBreakpoint);\n }\n const attachEvents = () => {\n if (eventsAssigned || !events || !swiperRef.current) return;\n Object.keys(events).forEach(eventName => {\n swiperRef.current.on(eventName, events[eventName]);\n });\n };\n const detachEvents = () => {\n if (!events || !swiperRef.current) return;\n Object.keys(events).forEach(eventName => {\n swiperRef.current.off(eventName, events[eventName]);\n });\n };\n useEffect(() => {\n return () => {\n if (swiperRef.current) swiperRef.current.off('_beforeBreakpoint', onBeforeBreakpoint);\n };\n });\n\n // set initialized flag\n useEffect(() => {\n if (!initializedRef.current && swiperRef.current) {\n swiperRef.current.emitSlidesClasses();\n initializedRef.current = true;\n }\n });\n\n // mount swiper\n useIsomorphicLayoutEffect(() => {\n if (externalElRef) {\n externalElRef.current = swiperElRef.current;\n }\n if (!swiperElRef.current) return;\n if (swiperRef.current.destroyed) {\n initSwiper();\n }\n mountSwiper({\n el: swiperElRef.current,\n nextEl: nextElRef.current,\n prevEl: prevElRef.current,\n paginationEl: paginationElRef.current,\n scrollbarEl: scrollbarElRef.current,\n swiper: swiperRef.current\n }, swiperParams);\n if (onSwiper && !swiperRef.current.destroyed) onSwiper(swiperRef.current);\n // eslint-disable-next-line\n return () => {\n if (swiperRef.current && !swiperRef.current.destroyed) {\n swiperRef.current.destroy(true, false);\n }\n };\n }, []);\n\n // watch for params change\n useIsomorphicLayoutEffect(() => {\n attachEvents();\n const changedParams = getChangedParams(passedParams, oldPassedParamsRef.current, slides, oldSlides.current, c => c.key);\n oldPassedParamsRef.current = passedParams;\n oldSlides.current = slides;\n if (changedParams.length && swiperRef.current && !swiperRef.current.destroyed) {\n updateSwiper({\n swiper: swiperRef.current,\n slides,\n passedParams,\n changedParams,\n nextEl: nextElRef.current,\n prevEl: prevElRef.current,\n scrollbarEl: scrollbarElRef.current,\n paginationEl: paginationElRef.current\n });\n }\n return () => {\n detachEvents();\n };\n });\n\n // update on virtual update\n useIsomorphicLayoutEffect(() => {\n updateOnVirtualData(swiperRef.current);\n }, [virtualData]);\n\n // bypass swiper instance to slides\n function renderSlides() {\n if (swiperParams.virtual) {\n return renderVirtual(swiperRef.current, slides, virtualData);\n }\n return slides.map((child, index) => {\n return /*#__PURE__*/React.cloneElement(child, {\n swiper: swiperRef.current,\n swiperSlideIndex: index\n });\n });\n }\n return /*#__PURE__*/React.createElement(Tag, _extends({\n ref: swiperElRef,\n className: uniqueClasses(`${containerClasses}${className ? ` ${className}` : ''}`)\n }, restProps), /*#__PURE__*/React.createElement(SwiperContext.Provider, {\n value: swiperRef.current\n }, slots['container-start'], /*#__PURE__*/React.createElement(WrapperTag, {\n className: wrapperClass(swiperParams.wrapperClass)\n }, slots['wrapper-start'], renderSlides(), slots['wrapper-end']), needsNavigation(swiperParams) && /*#__PURE__*/React.createElement(React.Fragment, null, /*#__PURE__*/React.createElement(\"div\", {\n ref: prevElRef,\n className: \"swiper-button-prev\"\n }), /*#__PURE__*/React.createElement(\"div\", {\n ref: nextElRef,\n className: \"swiper-button-next\"\n })), needsScrollbar(swiperParams) && /*#__PURE__*/React.createElement(\"div\", {\n ref: scrollbarElRef,\n className: \"swiper-scrollbar\"\n }), needsPagination(swiperParams) && /*#__PURE__*/React.createElement(\"div\", {\n ref: paginationElRef,\n className: \"swiper-pagination\"\n }), slots['container-end']));\n});\nSwiper.displayName = 'Swiper';\n\nconst SwiperSlide = /*#__PURE__*/forwardRef(({\n tag: Tag = 'div',\n children,\n className = '',\n swiper,\n zoom,\n lazy,\n virtualIndex,\n swiperSlideIndex,\n ...rest\n} = {}, externalRef) => {\n const slideElRef = useRef(null);\n const [slideClasses, setSlideClasses] = useState('swiper-slide');\n const [lazyLoaded, setLazyLoaded] = useState(false);\n function updateClasses(_s, el, classNames) {\n if (el === slideElRef.current) {\n setSlideClasses(classNames);\n }\n }\n useIsomorphicLayoutEffect(() => {\n if (typeof swiperSlideIndex !== 'undefined') {\n slideElRef.current.swiperSlideIndex = swiperSlideIndex;\n }\n if (externalRef) {\n externalRef.current = slideElRef.current;\n }\n if (!slideElRef.current || !swiper) {\n return;\n }\n if (swiper.destroyed) {\n if (slideClasses !== 'swiper-slide') {\n setSlideClasses('swiper-slide');\n }\n return;\n }\n swiper.on('_slideClass', updateClasses);\n // eslint-disable-next-line\n return () => {\n if (!swiper) return;\n swiper.off('_slideClass', updateClasses);\n };\n });\n useIsomorphicLayoutEffect(() => {\n if (swiper && slideElRef.current && !swiper.destroyed) {\n setSlideClasses(swiper.getSlideClasses(slideElRef.current));\n }\n }, [swiper]);\n const slideData = {\n isActive: slideClasses.indexOf('swiper-slide-active') >= 0,\n isVisible: slideClasses.indexOf('swiper-slide-visible') >= 0,\n isFullyVisible: slideClasses.indexOf('swiper-slide-fully-visible') >= 0,\n isPrev: slideClasses.indexOf('swiper-slide-prev') >= 0,\n isNext: slideClasses.indexOf('swiper-slide-next') >= 0\n };\n const renderChildren = () => {\n return typeof children === 'function' ? children(slideData) : children;\n };\n const onLoad = () => {\n setLazyLoaded(true);\n };\n return /*#__PURE__*/React.createElement(Tag, _extends({\n ref: slideElRef,\n className: uniqueClasses(`${slideClasses}${className ? ` ${className}` : ''}`),\n \"data-swiper-slide-index\": virtualIndex,\n onLoad: onLoad\n }, rest), zoom && /*#__PURE__*/React.createElement(SwiperSlideContext.Provider, {\n value: slideData\n }, /*#__PURE__*/React.createElement(\"div\", {\n className: \"swiper-zoom-container\",\n \"data-swiper-zoom\": typeof zoom === 'number' ? zoom : undefined\n }, renderChildren(), lazy && !lazyLoaded && /*#__PURE__*/React.createElement(\"div\", {\n className: \"swiper-lazy-preloader\",\n ref: node => {\n if (node) node.lazyPreloaderManaged = true;\n }\n }))), !zoom && /*#__PURE__*/React.createElement(SwiperSlideContext.Provider, {\n value: slideData\n }, renderChildren(), lazy && !lazyLoaded && /*#__PURE__*/React.createElement(\"div\", {\n className: \"swiper-lazy-preloader\",\n ref: node => {\n if (node) node.lazyPreloaderManaged = true;\n }\n })));\n});\nSwiperSlide.displayName = 'SwiperSlide';\n\nexport { Swiper, SwiperSlide, useSwiper, useSwiperSlide };\n","import { e as elementChildren, c as createElement } from './utils.mjs';\n\nfunction createElementIfNotDefined(swiper, originalParams, params, checkProps) {\n if (swiper.params.createElements) {\n Object.keys(checkProps).forEach(key => {\n if (!params[key] && params.auto === true) {\n let element = elementChildren(swiper.el, `.${checkProps[key]}`)[0];\n if (!element) {\n element = createElement('div', checkProps[key]);\n element.className = checkProps[key];\n swiper.el.append(element);\n }\n params[key] = element;\n originalParams[key] = element;\n }\n });\n }\n return params;\n}\n\nexport { createElementIfNotDefined as c };\n","import { c as createElementIfNotDefined } from '../shared/create-element-if-not-defined.mjs';\nimport { m as makeElementsArray, s as setInnerHTML } from '../shared/utils.mjs';\n\nconst arrowSvg = `<svg class=\"swiper-navigation-icon\" width=\"11\" height=\"20\" viewBox=\"0 0 11 20\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\"><path d=\"M0.38296 20.0762C0.111788 19.805 0.111788 19.3654 0.38296 19.0942L9.19758 10.2796L0.38296 1.46497C0.111788 1.19379 0.111788 0.754138 0.38296 0.482966C0.654131 0.211794 1.09379 0.211794 1.36496 0.482966L10.4341 9.55214C10.8359 9.9539 10.8359 10.6053 10.4341 11.007L1.36496 20.0762C1.09379 20.3474 0.654131 20.3474 0.38296 20.0762Z\" fill=\"currentColor\"/></svg>`;\nfunction Navigation({\n swiper,\n extendParams,\n on,\n emit\n}) {\n extendParams({\n navigation: {\n nextEl: null,\n prevEl: null,\n addIcons: true,\n hideOnClick: false,\n disabledClass: 'swiper-button-disabled',\n hiddenClass: 'swiper-button-hidden',\n lockClass: 'swiper-button-lock',\n navigationDisabledClass: 'swiper-navigation-disabled'\n }\n });\n swiper.navigation = {\n nextEl: null,\n prevEl: null,\n arrowSvg\n };\n function getEl(el) {\n let res;\n if (el && typeof el === 'string' && swiper.isElement) {\n res = swiper.el.querySelector(el) || swiper.hostEl.querySelector(el);\n if (res) return res;\n }\n if (el) {\n if (typeof el === 'string') res = [...document.querySelectorAll(el)];\n if (swiper.params.uniqueNavElements && typeof el === 'string' && res && res.length > 1 && swiper.el.querySelectorAll(el).length === 1) {\n res = swiper.el.querySelector(el);\n } else if (res && res.length === 1) {\n res = res[0];\n }\n }\n if (el && !res) return el;\n // if (Array.isArray(res) && res.length === 1) res = res[0];\n return res;\n }\n function toggleEl(el, disabled) {\n const params = swiper.params.navigation;\n el = makeElementsArray(el);\n el.forEach(subEl => {\n if (subEl) {\n subEl.classList[disabled ? 'add' : 'remove'](...params.disabledClass.split(' '));\n if (subEl.tagName === 'BUTTON') subEl.disabled = disabled;\n if (swiper.params.watchOverflow && swiper.enabled) {\n subEl.classList[swiper.isLocked ? 'add' : 'remove'](params.lockClass);\n }\n }\n });\n }\n function update() {\n // Update Navigation Buttons\n const {\n nextEl,\n prevEl\n } = swiper.navigation;\n if (swiper.params.loop) {\n toggleEl(prevEl, false);\n toggleEl(nextEl, false);\n return;\n }\n toggleEl(prevEl, swiper.isBeginning && !swiper.params.rewind);\n toggleEl(nextEl, swiper.isEnd && !swiper.params.rewind);\n }\n function onPrevClick(e) {\n e.preventDefault();\n if (swiper.isBeginning && !swiper.params.loop && !swiper.params.rewind) return;\n swiper.slidePrev();\n emit('navigationPrev');\n }\n function onNextClick(e) {\n e.preventDefault();\n if (swiper.isEnd && !swiper.params.loop && !swiper.params.rewind) return;\n swiper.slideNext();\n emit('navigationNext');\n }\n function init() {\n const params = swiper.params.navigation;\n swiper.params.navigation = createElementIfNotDefined(swiper, swiper.originalParams.navigation, swiper.params.navigation, {\n nextEl: 'swiper-button-next',\n prevEl: 'swiper-button-prev'\n });\n if (!(params.nextEl || params.prevEl)) return;\n let nextEl = getEl(params.nextEl);\n let prevEl = getEl(params.prevEl);\n Object.assign(swiper.navigation, {\n nextEl,\n prevEl\n });\n nextEl = makeElementsArray(nextEl);\n prevEl = makeElementsArray(prevEl);\n const initButton = (el, dir) => {\n if (el) {\n if (params.addIcons && el.matches('.swiper-button-next,.swiper-button-prev') && !el.querySelector('svg')) {\n const tempEl = document.createElement('div');\n setInnerHTML(tempEl, arrowSvg);\n el.appendChild(tempEl.querySelector('svg'));\n tempEl.remove();\n }\n el.addEventListener('click', dir === 'next' ? onNextClick : onPrevClick);\n }\n if (!swiper.enabled && el) {\n el.classList.add(...params.lockClass.split(' '));\n }\n };\n nextEl.forEach(el => initButton(el, 'next'));\n prevEl.forEach(el => initButton(el, 'prev'));\n }\n function destroy() {\n let {\n nextEl,\n prevEl\n } = swiper.navigation;\n nextEl = makeElementsArray(nextEl);\n prevEl = makeElementsArray(prevEl);\n const destroyButton = (el, dir) => {\n el.removeEventListener('click', dir === 'next' ? onNextClick : onPrevClick);\n el.classList.remove(...swiper.params.navigation.disabledClass.split(' '));\n };\n nextEl.forEach(el => destroyButton(el, 'next'));\n prevEl.forEach(el => destroyButton(el, 'prev'));\n }\n on('init', () => {\n if (swiper.params.navigation.enabled === false) {\n // eslint-disable-next-line\n disable();\n } else {\n init();\n update();\n }\n });\n on('toEdge fromEdge lock unlock', () => {\n update();\n });\n on('destroy', () => {\n destroy();\n });\n on('enable disable', () => {\n let {\n nextEl,\n prevEl\n } = swiper.navigation;\n nextEl = makeElementsArray(nextEl);\n prevEl = makeElementsArray(prevEl);\n if (swiper.enabled) {\n update();\n return;\n }\n [...nextEl, ...prevEl].filter(el => !!el).forEach(el => el.classList.add(swiper.params.navigation.lockClass));\n });\n on('click', (_s, e) => {\n let {\n nextEl,\n prevEl\n } = swiper.navigation;\n nextEl = makeElementsArray(nextEl);\n prevEl = makeElementsArray(prevEl);\n const targetEl = e.target;\n let targetIsButton = prevEl.includes(targetEl) || nextEl.includes(targetEl);\n if (swiper.isElement && !targetIsButton) {\n const path = e.path || e.composedPath && e.composedPath();\n if (path) {\n targetIsButton = path.find(pathEl => nextEl.includes(pathEl) || prevEl.includes(pathEl));\n }\n }\n if (swiper.params.navigation.hideOnClick && !targetIsButton) {\n if (swiper.pagination && swiper.params.pagination && swiper.params.pagination.clickable && (swiper.pagination.el === targetEl || swiper.pagination.el.contains(targetEl))) return;\n let isHidden;\n if (nextEl.length) {\n isHidden = nextEl[0].classList.contains(swiper.params.navigation.hiddenClass);\n } else if (prevEl.length) {\n isHidden = prevEl[0].classList.contains(swiper.params.navigation.hiddenClass);\n }\n if (isHidden === true) {\n emit('navigationShow');\n } else {\n emit('navigationHide');\n }\n [...nextEl, ...prevEl].filter(el => !!el).forEach(el => el.classList.toggle(swiper.params.navigation.hiddenClass));\n }\n });\n const enable = () => {\n swiper.el.classList.remove(...swiper.params.navigation.navigationDisabledClass.split(' '));\n init();\n update();\n };\n const disable = () => {\n swiper.el.classList.add(...swiper.params.navigation.navigationDisabledClass.split(' '));\n destroy();\n };\n Object.assign(swiper.navigation, {\n enable,\n disable,\n update,\n init,\n destroy\n });\n}\n\nexport { Navigation as default };\n","function classesToSelector(classes = '') {\n // Escape all CSS selector special characters\n return `.${classes.trim().replace(/([\\.:!+\\/()[\\]#>~*^$|=,'\"@{}\\\\])/g, '\\\\$1') // eslint-disable-line\n .replace(/ /g, '.')}`;\n}\n\nexport { classesToSelector as c };\n","import { c as classesToSelector } from '../shared/classes-to-selector.mjs';\nimport { c as createElementIfNotDefined } from '../shared/create-element-if-not-defined.mjs';\nimport { m as makeElementsArray, i as elementOuterSize, j as elementIndex, s as setInnerHTML, d as elementParents } from '../shared/utils.mjs';\n\nfunction Pagination({\n swiper,\n extendParams,\n on,\n emit\n}) {\n const pfx = 'swiper-pagination';\n extendParams({\n pagination: {\n el: null,\n bulletElement: 'span',\n clickable: false,\n hideOnClick: false,\n renderBullet: null,\n renderProgressbar: null,\n renderFraction: null,\n renderCustom: null,\n progressbarOpposite: false,\n type: 'bullets',\n // 'bullets' or 'progressbar' or 'fraction' or 'custom'\n dynamicBullets: false,\n dynamicMainBullets: 1,\n formatFractionCurrent: number => number,\n formatFractionTotal: number => number,\n bulletClass: `${pfx}-bullet`,\n bulletActiveClass: `${pfx}-bullet-active`,\n modifierClass: `${pfx}-`,\n currentClass: `${pfx}-current`,\n totalClass: `${pfx}-total`,\n hiddenClass: `${pfx}-hidden`,\n progressbarFillClass: `${pfx}-progressbar-fill`,\n progressbarOppositeClass: `${pfx}-progressbar-opposite`,\n clickableClass: `${pfx}-clickable`,\n lockClass: `${pfx}-lock`,\n horizontalClass: `${pfx}-horizontal`,\n verticalClass: `${pfx}-vertical`,\n paginationDisabledClass: `${pfx}-disabled`\n }\n });\n swiper.pagination = {\n el: null,\n bullets: []\n };\n let bulletSize;\n let dynamicBulletIndex = 0;\n function isPaginationDisabled() {\n return !swiper.params.pagination.el || !swiper.pagination.el || Array.isArray(swiper.pagination.el) && swiper.pagination.el.length === 0;\n }\n function setSideBullets(bulletEl, position) {\n const {\n bulletActiveClass\n } = swiper.params.pagination;\n if (!bulletEl) return;\n bulletEl = bulletEl[`${position === 'prev' ? 'previous' : 'next'}ElementSibling`];\n if (bulletEl) {\n bulletEl.classList.add(`${bulletActiveClass}-${position}`);\n bulletEl = bulletEl[`${position === 'prev' ? 'previous' : 'next'}ElementSibling`];\n if (bulletEl) {\n bulletEl.classList.add(`${bulletActiveClass}-${position}-${position}`);\n }\n }\n }\n function getMoveDirection(prevIndex, nextIndex, length) {\n prevIndex = prevIndex % length;\n nextIndex = nextIndex % length;\n if (nextIndex === prevIndex + 1) {\n return 'next';\n } else if (nextIndex === prevIndex - 1) {\n return 'previous';\n }\n return;\n }\n function onBulletClick(e) {\n const bulletEl = e.target.closest(classesToSelector(swiper.params.pagination.bulletClass));\n if (!bulletEl) {\n return;\n }\n e.preventDefault();\n const index = elementIndex(bulletEl) * swiper.params.slidesPerGroup;\n if (swiper.params.loop) {\n if (swiper.realIndex === index) return;\n const moveDirection = getMoveDirection(swiper.realIndex, index, swiper.slides.length);\n if (moveDirection === 'next') {\n swiper.slideNext();\n } else if (moveDirection === 'previous') {\n swiper.slidePrev();\n } else {\n swiper.slideToLoop(index);\n }\n } else {\n swiper.slideTo(index);\n }\n }\n function update() {\n // Render || Update Pagination bullets/items\n const rtl = swiper.rtl;\n const params = swiper.params.pagination;\n if (isPaginationDisabled()) return;\n let el = swiper.pagination.el;\n el = makeElementsArray(el);\n // Current/Total\n let current;\n let previousIndex;\n const slidesLength = swiper.virtual && swiper.params.virtual.enabled ? swiper.virtual.slides.length : swiper.slides.length;\n const total = swiper.params.loop ? Math.ceil(slidesLength / swiper.params.slidesPerGroup) : swiper.snapGrid.length;\n if (swiper.params.loop) {\n previousIndex = swiper.previousRealIndex || 0;\n current = swiper.params.slidesPerGroup > 1 ? Math.floor(swiper.realIndex / swiper.params.slidesPerGroup) : swiper.realIndex;\n } else if (typeof swiper.snapIndex !== 'undefined') {\n current = swiper.snapIndex;\n previousIndex = swiper.previousSnapIndex;\n } else {\n previousIndex = swiper.previousIndex || 0;\n current = swiper.activeIndex || 0;\n }\n // Types\n if (params.type === 'bullets' && swiper.pagination.bullets && swiper.pagination.bullets.length > 0) {\n const bullets = swiper.pagination.bullets;\n let firstIndex;\n let lastIndex;\n let midIndex;\n if (params.dynamicBullets) {\n bulletSize = elementOuterSize(bullets[0], swiper.isHorizontal() ? 'width' : 'height', true);\n el.forEach(subEl => {\n subEl.style[swiper.isHorizontal() ? 'width' : 'height'] = `${bulletSize * (params.dynamicMainBullets + 4)}px`;\n });\n if (params.dynamicMainBullets > 1 && previousIndex !== undefined) {\n dynamicBulletIndex += current - (previousIndex || 0);\n if (dynamicBulletIndex > params.dynamicMainBullets - 1) {\n dynamicBulletIndex = params.dynamicMainBullets - 1;\n } else if (dynamicBulletIndex < 0) {\n dynamicBulletIndex = 0;\n }\n }\n firstIndex = Math.max(current - dynamicBulletIndex, 0);\n lastIndex = firstIndex + (Math.min(bullets.length, params.dynamicMainBullets) - 1);\n midIndex = (lastIndex + firstIndex) / 2;\n }\n bullets.forEach(bulletEl => {\n const classesToRemove = [...['', '-next', '-next-next', '-prev', '-prev-prev', '-main'].map(suffix => `${params.bulletActiveClass}${suffix}`)].map(s => typeof s === 'string' && s.includes(' ') ? s.split(' ') : s).flat();\n bulletEl.classList.remove(...classesToRemove);\n });\n if (el.length > 1) {\n bullets.forEach(bullet => {\n const bulletIndex = elementIndex(bullet);\n if (bulletIndex === current) {\n bullet.classList.add(...params.bulletActiveClass.split(' '));\n } else if (swiper.isElement) {\n bullet.setAttribute('part', 'bullet');\n }\n if (params.dynamicBullets) {\n if (bulletIndex >= firstIndex && bulletIndex <= lastIndex) {\n bullet.classList.add(...`${params.bulletActiveClass}-main`.split(' '));\n }\n if (bulletIndex === firstIndex) {\n setSideBullets(bullet, 'prev');\n }\n if (bulletIndex === lastIndex) {\n setSideBullets(bullet, 'next');\n }\n }\n });\n } else {\n const bullet = bullets[current];\n if (bullet) {\n bullet.classList.add(...params.bulletActiveClass.split(' '));\n }\n if (swiper.isElement) {\n bullets.forEach((bulletEl, bulletIndex) => {\n bulletEl.setAttribute('part', bulletIndex === current ? 'bullet-active' : 'bullet');\n });\n }\n if (params.dynamicBullets) {\n const firstDisplayedBullet = bullets[firstIndex];\n const lastDisplayedBullet = bullets[lastIndex];\n for (let i = firstIndex; i <= lastIndex; i += 1) {\n if (bullets[i]) {\n bullets[i].classList.add(...`${params.bulletActiveClass}-main`.split(' '));\n }\n }\n setSideBullets(firstDisplayedBullet, 'prev');\n setSideBullets(lastDisplayedBullet, 'next');\n }\n }\n if (params.dynamicBullets) {\n const dynamicBulletsLength = Math.min(bullets.length, params.dynamicMainBullets + 4);\n const bulletsOffset = (bulletSize * dynamicBulletsLength - bulletSize) / 2 - midIndex * bulletSize;\n const offsetProp = rtl ? 'right' : 'left';\n bullets.forEach(bullet => {\n bullet.style[swiper.isHorizontal() ? offsetProp : 'top'] = `${bulletsOffset}px`;\n });\n }\n }\n el.forEach((subEl, subElIndex) => {\n if (params.type === 'fraction') {\n subEl.querySelectorAll(classesToSelector(params.currentClass)).forEach(fractionEl => {\n fractionEl.textContent = params.formatFractionCurrent(current + 1);\n });\n subEl.querySelectorAll(classesToSelector(params.totalClass)).forEach(totalEl => {\n totalEl.textContent = params.formatFractionTotal(total);\n });\n }\n if (params.type === 'progressbar') {\n let progressbarDirection;\n if (params.progressbarOpposite) {\n progressbarDirection = swiper.isHorizontal() ? 'vertical' : 'horizontal';\n } else {\n progressbarDirection = swiper.isHorizontal() ? 'horizontal' : 'vertical';\n }\n const scale = (current + 1) / total;\n let scaleX = 1;\n let scaleY = 1;\n if (progressbarDirection === 'horizontal') {\n scaleX = scale;\n } else {\n scaleY = scale;\n }\n subEl.querySelectorAll(classesToSelector(params.progressbarFillClass)).forEach(progressEl => {\n progressEl.style.transform = `translate3d(0,0,0) scaleX(${scaleX}) scaleY(${scaleY})`;\n progressEl.style.transitionDuration = `${swiper.params.speed}ms`;\n });\n }\n if (params.type === 'custom' && params.renderCustom) {\n setInnerHTML(subEl, params.renderCustom(swiper, current + 1, total));\n if (subElIndex === 0) emit('paginationRender', subEl);\n } else {\n if (subElIndex === 0) emit('paginationRender', subEl);\n emit('paginationUpdate', subEl);\n }\n if (swiper.params.watchOverflow && swiper.enabled) {\n subEl.classList[swiper.isLocked ? 'add' : 'remove'](params.lockClass);\n }\n });\n }\n function render() {\n // Render Container\n const params = swiper.params.pagination;\n if (isPaginationDisabled()) return;\n const slidesLength = swiper.virtual && swiper.params.virtual.enabled ? swiper.virtual.slides.length : swiper.grid && swiper.params.grid.rows > 1 ? swiper.slides.length / Math.ceil(swiper.params.grid.rows) : swiper.slides.length;\n let el = swiper.pagination.el;\n el = makeElementsArray(el);\n let paginationHTML = '';\n if (params.type === 'bullets') {\n let numberOfBullets = swiper.params.loop ? Math.ceil(slidesLength / swiper.params.slidesPerGroup) : swiper.snapGrid.length;\n if (swiper.params.freeMode && swiper.params.freeMode.enabled && numberOfBullets > slidesLength) {\n numberOfBullets = slidesLength;\n }\n for (let i = 0; i < numberOfBullets; i += 1) {\n if (params.renderBullet) {\n paginationHTML += params.renderBullet.call(swiper, i, params.bulletClass);\n } else {\n // prettier-ignore\n paginationHTML += `<${params.bulletElement} ${swiper.isElement ? 'part=\"bullet\"' : ''} class=\"${params.bulletClass}\"></${params.bulletElement}>`;\n }\n }\n }\n if (params.type === 'fraction') {\n if (params.renderFraction) {\n paginationHTML = params.renderFraction.call(swiper, params.currentClass, params.totalClass);\n } else {\n paginationHTML = `<span class=\"${params.currentClass}\"></span>` + ' / ' + `<span class=\"${params.totalClass}\"></span>`;\n }\n }\n if (params.type === 'progressbar') {\n if (params.renderProgressbar) {\n paginationHTML = params.renderProgressbar.call(swiper, params.progressbarFillClass);\n } else {\n paginationHTML = `<span class=\"${params.progressbarFillClass}\"></span>`;\n }\n }\n swiper.pagination.bullets = [];\n el.forEach(subEl => {\n if (params.type !== 'custom') {\n setInnerHTML(subEl, paginationHTML || '');\n }\n if (params.type === 'bullets') {\n swiper.pagination.bullets.push(...subEl.querySelectorAll(classesToSelector(params.bulletClass)));\n }\n });\n if (params.type !== 'custom') {\n emit('paginationRender', el[0]);\n }\n }\n function init() {\n swiper.params.pagination = createElementIfNotDefined(swiper, swiper.originalParams.pagination, swiper.params.pagination, {\n el: 'swiper-pagination'\n });\n const params = swiper.params.pagination;\n if (!params.el) return;\n let el;\n if (typeof params.el === 'string' && swiper.isElement) {\n el = swiper.el.querySelector(params.el);\n }\n if (!el && typeof params.el === 'string') {\n el = [...document.querySelectorAll(params.el)];\n }\n if (!el) {\n el = params.el;\n }\n if (!el || el.length === 0) return;\n if (swiper.params.uniqueNavElements && typeof params.el === 'string' && Array.isArray(el) && el.length > 1) {\n el = [...swiper.el.querySelectorAll(params.el)];\n // check if it belongs to another nested Swiper\n if (el.length > 1) {\n el = el.find(subEl => {\n if (elementParents(subEl, '.swiper')[0] !== swiper.el) return false;\n return true;\n });\n }\n }\n if (Array.isArray(el) && el.length === 1) el = el[0];\n Object.assign(swiper.pagination, {\n el\n });\n el = makeElementsArray(el);\n el.forEach(subEl => {\n if (params.type === 'bullets' && params.clickable) {\n subEl.classList.add(...(params.clickableClass || '').split(' '));\n }\n subEl.classList.add(params.modifierClass + params.type);\n subEl.classList.add(swiper.isHorizontal() ? params.horizontalClass : params.verticalClass);\n if (params.type === 'bullets' && params.dynamicBullets) {\n subEl.classList.add(`${params.modifierClass}${params.type}-dynamic`);\n dynamicBulletIndex = 0;\n if (params.dynamicMainBullets < 1) {\n params.dynamicMainBullets = 1;\n }\n }\n if (params.type === 'progressbar' && params.progressbarOpposite) {\n subEl.classList.add(params.progressbarOppositeClass);\n }\n if (params.clickable) {\n subEl.addEventListener('click', onBulletClick);\n }\n if (!swiper.enabled) {\n subEl.classList.add(params.lockClass);\n }\n });\n }\n function destroy() {\n const params = swiper.params.pagination;\n if (isPaginationDisabled()) return;\n let el = swiper.pagination.el;\n if (el) {\n el = makeElementsArray(el);\n el.forEach(subEl => {\n subEl.classList.remove(params.hiddenClass);\n subEl.classList.remove(params.modifierClass + params.type);\n subEl.classList.remove(swiper.isHorizontal() ? params.horizontalClass : params.verticalClass);\n if (params.clickable) {\n subEl.classList.remove(...(params.clickableClass || '').split(' '));\n subEl.removeEventListener('click', onBulletClick);\n }\n });\n }\n if (swiper.pagination.bullets) swiper.pagination.bullets.forEach(subEl => subEl.classList.remove(...params.bulletActiveClass.split(' ')));\n }\n on('changeDirection', () => {\n if (!swiper.pagination || !swiper.pagination.el) return;\n const params = swiper.params.pagination;\n let {\n el\n } = swiper.pagination;\n el = makeElementsArray(el);\n el.forEach(subEl => {\n subEl.classList.remove(params.horizontalClass, params.verticalClass);\n subEl.classList.add(swiper.isHorizontal() ? params.horizontalClass : params.verticalClass);\n });\n });\n on('init', () => {\n if (swiper.params.pagination.enabled === false) {\n // eslint-disable-next-line\n disable();\n } else {\n init();\n render();\n update();\n }\n });\n on('activeIndexChange', () => {\n if (typeof swiper.snapIndex === 'undefined') {\n update();\n }\n });\n on('snapIndexChange', () => {\n update();\n });\n on('snapGridLengthChange', () => {\n render();\n update();\n });\n on('destroy', () => {\n destroy();\n });\n on('enable disable', () => {\n let {\n el\n } = swiper.pagination;\n if (el) {\n el = makeElementsArray(el);\n el.forEach(subEl => subEl.classList[swiper.enabled ? 'remove' : 'add'](swiper.params.pagination.lockClass));\n }\n });\n on('lock unlock', () => {\n update();\n });\n on('click', (_s, e) => {\n const targetEl = e.target;\n const el = makeElementsArray(swiper.pagination.el);\n if (swiper.params.pagination.el && swiper.params.pagination.hideOnClick && el && el.length > 0 && !targetEl.classList.contains(swiper.params.pagination.bulletClass)) {\n if (swiper.navigation && (swiper.navigation.nextEl && targetEl === swiper.navigation.nextEl || swiper.navigation.prevEl && targetEl === swiper.navigation.prevEl)) return;\n const isHidden = el[0].classList.contains(swiper.params.pagination.hiddenClass);\n if (isHidden === true) {\n emit('paginationShow');\n } else {\n emit('paginationHide');\n }\n el.forEach(subEl => subEl.classList.toggle(swiper.params.pagination.hiddenClass));\n }\n });\n const enable = () => {\n swiper.el.classList.remove(swiper.params.pagination.paginationDisabledClass);\n let {\n el\n } = swiper.pagination;\n if (el) {\n el = makeElementsArray(el);\n el.forEach(subEl => subEl.classList.remove(swiper.params.pagination.paginationDisabledClass));\n }\n init();\n render();\n update();\n };\n const disable = () => {\n swiper.el.classList.add(swiper.params.pagination.paginationDisabledClass);\n let {\n el\n } = swiper.pagination;\n if (el) {\n el = makeElementsArray(el);\n el.forEach(subEl => subEl.classList.add(swiper.params.pagination.paginationDisabledClass));\n }\n destroy();\n };\n Object.assign(swiper.pagination, {\n enable,\n disable,\n render,\n update,\n init,\n destroy\n });\n}\n\nexport { Pagination as default };\n","import { g as getDocument } from '../shared/ssr-window.esm.mjs';\n\n/* eslint no-underscore-dangle: \"off\" */\n/* eslint no-use-before-define: \"off\" */\nfunction Autoplay({\n swiper,\n extendParams,\n on,\n emit,\n params\n}) {\n swiper.autoplay = {\n running: false,\n paused: false,\n timeLeft: 0\n };\n extendParams({\n autoplay: {\n enabled: false,\n delay: 3000,\n waitForTransition: true,\n disableOnInteraction: false,\n stopOnLastSlide: false,\n reverseDirection: false,\n pauseOnMouseEnter: false\n }\n });\n let timeout;\n let raf;\n let autoplayDelayTotal = params && params.autoplay ? params.autoplay.delay : 3000;\n let autoplayDelayCurrent = params && params.autoplay ? params.autoplay.delay : 3000;\n let autoplayTimeLeft;\n let autoplayStartTime = new Date().getTime();\n let wasPaused;\n let isTouched;\n let pausedByTouch;\n let touchStartTimeout;\n let pausedByInteraction;\n let pausedByPointerEnter;\n function onTransitionEnd(e) {\n if (!swiper || swiper.destroyed || !swiper.wrapperEl) return;\n if (e.target !== swiper.wrapperEl) return;\n swiper.wrapperEl.removeEventListener('transitionend', onTransitionEnd);\n if (pausedByPointerEnter || e.detail && e.detail.bySwiperTouchMove) {\n return;\n }\n resume();\n }\n const calcTimeLeft = () => {\n if (swiper.destroyed || !swiper.autoplay.running) return;\n if (swiper.autoplay.paused) {\n wasPaused = true;\n } else if (wasPaused) {\n autoplayDelayCurrent = autoplayTimeLeft;\n wasPaused = false;\n }\n const timeLeft = swiper.autoplay.paused ? autoplayTimeLeft : autoplayStartTime + autoplayDelayCurrent - new Date().getTime();\n swiper.autoplay.timeLeft = timeLeft;\n emit('autoplayTimeLeft', timeLeft, timeLeft / autoplayDelayTotal);\n raf = requestAnimationFrame(() => {\n calcTimeLeft();\n });\n };\n const getSlideDelay = () => {\n let activeSlideEl;\n if (swiper.virtual && swiper.params.virtual.enabled) {\n activeSlideEl = swiper.slides.find(slideEl => slideEl.classList.contains('swiper-slide-active'));\n } else {\n activeSlideEl = swiper.slides[swiper.activeIndex];\n }\n if (!activeSlideEl) return undefined;\n const currentSlideDelay = parseInt(activeSlideEl.getAttribute('data-swiper-autoplay'), 10);\n return currentSlideDelay;\n };\n const getTotalDelay = () => {\n let totalDelay = swiper.params.autoplay.delay;\n const currentSlideDelay = getSlideDelay();\n if (!Number.isNaN(currentSlideDelay) && currentSlideDelay > 0) {\n totalDelay = currentSlideDelay;\n }\n return totalDelay;\n };\n const run = delayForce => {\n if (swiper.destroyed || !swiper.autoplay.running) return;\n cancelAnimationFrame(raf);\n calcTimeLeft();\n let delay = delayForce;\n if (typeof delay === 'undefined') {\n delay = getTotalDelay();\n autoplayDelayTotal = delay;\n autoplayDelayCurrent = delay;\n }\n autoplayTimeLeft = delay;\n const speed = swiper.params.speed;\n const proceed = () => {\n if (!swiper || swiper.destroyed) return;\n if (swiper.params.autoplay.reverseDirection) {\n if (!swiper.isBeginning || swiper.params.loop || swiper.params.rewind) {\n swiper.slidePrev(speed, true, true);\n emit('autoplay');\n } else if (!swiper.params.autoplay.stopOnLastSlide) {\n swiper.slideTo(swiper.slides.length - 1, speed, true, true);\n emit('autoplay');\n }\n } else {\n if (!swiper.isEnd || swiper.params.loop || swiper.params.rewind) {\n swiper.slideNext(speed, true, true);\n emit('autoplay');\n } else if (!swiper.params.autoplay.stopOnLastSlide) {\n swiper.slideTo(0, speed, true, true);\n emit('autoplay');\n }\n }\n if (swiper.params.cssMode) {\n autoplayStartTime = new Date().getTime();\n requestAnimationFrame(() => {\n run();\n });\n }\n };\n if (delay > 0) {\n clearTimeout(timeout);\n timeout = setTimeout(() => {\n proceed();\n }, delay);\n } else {\n requestAnimationFrame(() => {\n proceed();\n });\n }\n\n // eslint-disable-next-line\n return delay;\n };\n const start = () => {\n autoplayStartTime = new Date().getTime();\n swiper.autoplay.running = true;\n run();\n emit('autoplayStart');\n };\n const stop = () => {\n swiper.autoplay.running = false;\n clearTimeout(timeout);\n cancelAnimationFrame(raf);\n emit('autoplayStop');\n };\n const pause = (internal, reset) => {\n if (swiper.destroyed || !swiper.autoplay.running) return;\n clearTimeout(timeout);\n if (!internal) {\n pausedByInteraction = true;\n }\n const proceed = () => {\n emit('autoplayPause');\n if (swiper.params.autoplay.waitForTransition) {\n swiper.wrapperEl.addEventListener('transitionend', onTransitionEnd);\n } else {\n resume();\n }\n };\n swiper.autoplay.paused = true;\n if (reset) {\n proceed();\n return;\n }\n const delay = autoplayTimeLeft || swiper.params.autoplay.delay;\n autoplayTimeLeft = delay - (new Date().getTime() - autoplayStartTime);\n if (swiper.isEnd && autoplayTimeLeft < 0 && !swiper.params.loop) return;\n if (autoplayTimeLeft < 0) autoplayTimeLeft = 0;\n proceed();\n };\n const resume = () => {\n if (swiper.isEnd && autoplayTimeLeft < 0 && !swiper.params.loop || swiper.destroyed || !swiper.autoplay.running) return;\n autoplayStartTime = new Date().getTime();\n if (pausedByInteraction) {\n pausedByInteraction = false;\n run(autoplayTimeLeft);\n } else {\n run();\n }\n swiper.autoplay.paused = false;\n emit('autoplayResume');\n };\n const onVisibilityChange = () => {\n if (swiper.destroyed || !swiper.autoplay.running) return;\n const document = getDocument();\n if (document.visibilityState === 'hidden') {\n pausedByInteraction = true;\n pause(true);\n }\n if (document.visibilityState === 'visible') {\n resume();\n }\n };\n const onPointerEnter = e => {\n if (e.pointerType !== 'mouse') return;\n pausedByInteraction = true;\n pausedByPointerEnter = true;\n if (swiper.animating || swiper.autoplay.paused) return;\n pause(true);\n };\n const onPointerLeave = e => {\n if (e.pointerType !== 'mouse') return;\n pausedByPointerEnter = false;\n if (swiper.autoplay.paused) {\n resume();\n }\n };\n const attachMouseEvents = () => {\n if (swiper.params.autoplay.pauseOnMouseEnter) {\n swiper.el.addEventListener('pointerenter', onPointerEnter);\n swiper.el.addEventListener('pointerleave', onPointerLeave);\n }\n };\n const detachMouseEvents = () => {\n if (swiper.el && typeof swiper.el !== 'string') {\n swiper.el.removeEventListener('pointerenter', onPointerEnter);\n swiper.el.removeEventListener('pointerleave', onPointerLeave);\n }\n };\n const attachDocumentEvents = () => {\n const document = getDocument();\n document.addEventListener('visibilitychange', onVisibilityChange);\n };\n const detachDocumentEvents = () => {\n const document = getDocument();\n document.removeEventListener('visibilitychange', onVisibilityChange);\n };\n on('init', () => {\n if (swiper.params.autoplay.enabled) {\n attachMouseEvents();\n attachDocumentEvents();\n start();\n }\n });\n on('destroy', () => {\n detachMouseEvents();\n detachDocumentEvents();\n if (swiper.autoplay.running) {\n stop();\n }\n });\n on('_freeModeStaticRelease', () => {\n if (pausedByTouch || pausedByInteraction) {\n resume();\n }\n });\n on('_freeModeNoMomentumRelease', () => {\n if (!swiper.params.autoplay.disableOnInteraction) {\n pause(true, true);\n } else {\n stop();\n }\n });\n on('beforeTransitionStart', (_s, speed, internal) => {\n if (swiper.destroyed || !swiper.autoplay.running) return;\n if (internal || !swiper.params.autoplay.disableOnInteraction) {\n pause(true, true);\n } else {\n stop();\n }\n });\n on('sliderFirstMove', () => {\n if (swiper.destroyed || !swiper.autoplay.running) return;\n if (swiper.params.autoplay.disableOnInteraction) {\n stop();\n return;\n }\n isTouched = true;\n pausedByTouch = false;\n pausedByInteraction = false;\n touchStartTimeout = setTimeout(() => {\n pausedByInteraction = true;\n pausedByTouch = true;\n pause(true);\n }, 200);\n });\n on('touchEnd', () => {\n if (swiper.destroyed || !swiper.autoplay.running || !isTouched) return;\n clearTimeout(touchStartTimeout);\n clearTimeout(timeout);\n if (swiper.params.autoplay.disableOnInteraction) {\n pausedByTouch = false;\n isTouched = false;\n return;\n }\n if (pausedByTouch && swiper.params.cssMode) resume();\n pausedByTouch = false;\n isTouched = false;\n });\n on('slideChange', () => {\n if (swiper.destroyed || !swiper.autoplay.running) return;\n if (swiper.autoplay.paused) {\n autoplayTimeLeft = getTotalDelay();\n autoplayDelayTotal = getTotalDelay();\n }\n });\n Object.assign(swiper.autoplay, {\n start,\n stop,\n pause,\n resume\n });\n}\n\nexport { Autoplay as default };\n","'use client';\n\nimport { Swiper, SwiperSlide } from 'swiper/react';\nimport 'swiper/css';\nimport 'swiper/css/pagination';\nimport 'swiper/css/navigation';\n\nimport { Autoplay, Navigation, Pagination } from 'swiper/modules';\n\ninterface CarouselProps {\n images: string[];\n autoPlay: false | number;\n}\n\nexport const Carousel = ({ images, autoPlay = false }: CarouselProps) => {\n if (images.length === 0) {\n return null;\n }\n\n const swipers = images.map((image) => (\n <SwiperSlide>\n <img src={image} />\n </SwiperSlide>\n ));\n\n return (\n <Swiper\n spaceBetween={30}\n centeredSlides={true}\n autoplay={\n typeof autoPlay === 'number'\n ? {\n delay: autoPlay,\n disableOnInteraction: false,\n }\n : undefined\n }\n pagination={{\n clickable: true,\n }}\n navigation={true}\n modules={[Autoplay, Pagination, Navigation]}\n className=\"swiper\"\n >\n {swipers}\n </Swiper>\n );\n};\n","import { useRef, useState } from 'react';\nimport type { ReactNode, KeyboardEvent } from 'react';\nimport { Input } from '../common/Input/Input';\n\nexport interface CurrencyOption {\n code: string;\n symbol: string;\n label: string;\n}\n\nexport interface LocaleOption {\n code: string;\n label: string;\n flag?: string;\n}\n\nexport interface HeaderProps {\n /** Logo — ReactNode (image, SVG, text) */\n logo?: ReactNode;\n /** Search placeholder */\n searchPlaceholder?: string;\n onSearch?: (query: string) => void;\n /** Cart */\n cartItemCount?: number;\n onCartClick?: () => void;\n /** Customer */\n isLoggedIn?: boolean;\n customerName?: string;\n onCustomerClick?: () => void;\n /** Currency */\n currencies?: CurrencyOption[];\n selectedCurrency?: string;\n onCurrencyChange?: (code: string) => void;\n /** Locale / eshop */\n locales?: LocaleOption[];\n selectedLocale?: string;\n onLocaleChange?: (code: string) => void;\n /** Extra right slot */\n rightSlot?: ReactNode;\n}\n\n// ─── Small internal dropdown ────────────────────────────────────────────────\n\ninterface DropdownProps<T extends { label: string }> {\n trigger: ReactNode;\n items: T[];\n onSelect: (item: T) => void;\n getKey: (item: T) => string;\n renderItem?: (item: T) => ReactNode;\n}\n\nfunction Dropdown<T extends { label: string }>({\n trigger,\n items,\n onSelect,\n getKey,\n renderItem,\n}: DropdownProps<T>) {\n const [open, setOpen] = useState(false);\n const ref = useRef<HTMLDivElement>(null);\n\n const close = () => setOpen(false);\n\n // Close on outside click\n const handleBlur = (e: React.FocusEvent) => {\n if (!ref.current?.contains(e.relatedTarget as Node)) close();\n };\n\n const onKey = (e: KeyboardEvent) => {\n if (e.key === 'Escape') close();\n };\n\n return (\n <div ref={ref} className=\"relative\" onBlur={handleBlur} onKeyDown={onKey}>\n <div\n role=\"button\"\n tabIndex={0}\n onClick={() => setOpen((v) => !v)}\n onKeyDown={(e) => e.key === 'Enter' && setOpen((v) => !v)}\n className=\"cursor-pointer\"\n >\n {trigger}\n </div>\n {open && (\n <ul\n role=\"menu\"\n className=\"absolute right-0 top-full mt-1 z-50 min-w-28 bg-white rounded-lg shadow-lg border border-gray-100 py-1 text-sm\"\n >\n {items.map((item) => (\n <li key={getKey(item)} role=\"none\">\n <button\n role=\"menuitem\"\n className=\"w-full px-3 py-1.5 text-left hover:bg-gray-50 text-gray-700 whitespace-nowrap\"\n onClick={() => {\n onSelect(item);\n close();\n }}\n >\n {renderItem ? renderItem(item) : item.label}\n </button>\n </li>\n ))}\n </ul>\n )}\n </div>\n );\n}\n\n// ─── Search icon ─────────────────────────────────────────────────────────────\n\nfunction SearchIcon() {\n return (\n <svg\n xmlns=\"http://www.w3.org/2000/svg\"\n fill=\"none\"\n viewBox=\"0 0 24 24\"\n strokeWidth={1.5}\n stroke=\"currentColor\"\n className=\"w-4 h-4\"\n >\n <path\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n d=\"M21 21l-5.197-5.197m0 0A7.5 7.5 0 105.196 15.803a7.5 7.5 0 0010.607 10.607z\"\n />\n </svg>\n );\n}\n\n// ─── Header ──────────────────────────────────────────────────────────────────\n\nexport function Header({\n logo,\n searchPlaceholder = 'Hledat produkty…',\n onSearch,\n cartItemCount = 0,\n onCartClick,\n isLoggedIn = false,\n customerName,\n onCustomerClick,\n currencies = [],\n selectedCurrency,\n onCurrencyChange,\n locales = [],\n selectedLocale,\n onLocaleChange,\n rightSlot,\n}: HeaderProps) {\n const [searchQuery, setSearchQuery] = useState('');\n\n const activeCurrency = currencies.find((c) => c.code === selectedCurrency);\n const activeLocale = locales.find((l) => l.code === selectedLocale);\n\n const handleSearchKey = (e: KeyboardEvent<HTMLInputElement>) => {\n if (e.key === 'Enter') onSearch?.(searchQuery);\n };\n\n return (\n <header className=\"bg-white border-b border-gray-200 sticky top-0 z-40\">\n <div className=\"max-w-7xl mx-auto px-4 h-16 flex items-center gap-4\">\n {/* Logo */}\n <div className=\"shrink-0\">\n {logo ?? (\n <span className=\"text-xl font-bold text-primary-600 tracking-tight\">\n shopito\n </span>\n )}\n </div>\n\n {/* Search */}\n <div className=\"flex-1 max-w-xl\">\n <Input\n placeholder={searchPlaceholder}\n value={searchQuery}\n onChange={(e) => setSearchQuery(e.target.value)}\n onKeyDown={handleSearchKey}\n leftIcon={<SearchIcon />}\n rightIcon={\n searchQuery ? (\n <button\n onClick={() => {\n setSearchQuery('');\n onSearch?.('');\n }}\n className=\"hover:text-gray-600 transition-colors\"\n aria-label=\"Clear search\"\n >\n <svg\n xmlns=\"http://www.w3.org/2000/svg\"\n fill=\"none\"\n viewBox=\"0 0 24 24\"\n strokeWidth={2}\n stroke=\"currentColor\"\n className=\"w-3.5 h-3.5\"\n >\n <path\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n d=\"M6 18L18 6M6 6l12 12\"\n />\n </svg>\n </button>\n ) : undefined\n }\n />\n </div>\n\n {/* Right controls */}\n <div className=\"flex items-center gap-1 shrink-0 ml-auto\">\n {/* Currency switcher */}\n {currencies.length > 0 && (\n <Dropdown\n trigger={\n <button className=\"flex items-center gap-1 px-2 py-1.5 rounded-md text-sm text-gray-600 hover:bg-gray-50 transition-colors font-medium\">\n <span>{activeCurrency?.symbol ?? selectedCurrency}</span>\n <span className=\"text-xs text-gray-400\">\n {activeCurrency?.code ?? selectedCurrency}\n </span>\n <ChevronDown className=\"w-3 h-3 text-gray-400\" />\n </button>\n }\n items={currencies}\n getKey={(c) => c.code}\n onSelect={(c) => onCurrencyChange?.(c.code)}\n renderItem={(c) => (\n <span className=\"flex items-center gap-2\">\n <span className=\"w-6 text-center font-medium text-gray-500\">\n {c.symbol}\n </span>\n <span>{c.label}</span>\n </span>\n )}\n />\n )}\n\n {/* Locale switcher */}\n {locales.length > 0 && (\n <Dropdown\n trigger={\n <button className=\"flex items-center gap-1 px-2 py-1.5 rounded-md text-sm text-gray-600 hover:bg-gray-50 transition-colors\">\n {activeLocale?.flag && (\n <span className=\"text-base leading-none\">\n {activeLocale.flag}\n </span>\n )}\n <span className=\"font-medium uppercase\">\n {activeLocale?.code ?? selectedLocale}\n </span>\n <ChevronDown className=\"w-3 h-3 text-gray-400\" />\n </button>\n }\n items={locales}\n getKey={(l) => l.code}\n onSelect={(l) => onLocaleChange?.(l.code)}\n renderItem={(l) => (\n <span className=\"flex items-center gap-2\">\n {l.flag && <span className=\"text-base\">{l.flag}</span>}\n <span>{l.label}</span>\n </span>\n )}\n />\n )}\n\n {/* Divider */}\n {(currencies.length > 0 || locales.length > 0) && (\n <div className=\"w-px h-5 bg-gray-200 mx-1\" />\n )}\n\n {/* Customer button */}\n <button\n onClick={onCustomerClick}\n className=\"flex items-center gap-1.5 px-2.5 py-1.5 rounded-md text-sm text-gray-600 hover:bg-gray-50 transition-colors\"\n aria-label={isLoggedIn ? 'My account' : 'Sign in'}\n >\n {isLoggedIn ? (\n <>\n <div className=\"w-6 h-6 rounded-full bg-primary-600 text-white flex items-center justify-center text-xs font-bold\">\n {(customerName ?? 'U')[0].toUpperCase()}\n </div>\n {customerName && (\n <span className=\"hidden sm:block font-medium max-w-32 truncate\">\n {customerName}\n </span>\n )}\n </>\n ) : (\n <>\n <UserIcon className=\"w-5 h-5\" />\n <span className=\"hidden sm:block font-medium\">\n Přihlásit se\n </span>\n </>\n )}\n </button>\n\n {/* Cart */}\n <button\n onClick={onCartClick}\n className=\"relative flex items-center gap-1.5 px-2.5 py-1.5 rounded-md text-sm text-gray-600 hover:bg-gray-50 transition-colors\"\n aria-label={`Cart, ${cartItemCount} items`}\n >\n <CartIcon className=\"w-5 h-5\" />\n <span className=\"hidden sm:block font-medium\">Košík</span>\n {cartItemCount > 0 && (\n <span className=\"absolute -top-0.5 -right-0.5 min-w-4.5 h-4.5 flex items-center justify-center rounded-full bg-primary-600 text-white text-[10px] font-bold leading-none px-1\">\n {cartItemCount > 99 ? '99+' : cartItemCount}\n </span>\n )}\n </button>\n\n {rightSlot}\n </div>\n </div>\n </header>\n );\n}\n\n// ─── Icon helpers ─────────────────────────────────────────────────────────────\n\nfunction ChevronDown({ className }: { className?: string }) {\n return (\n <svg\n xmlns=\"http://www.w3.org/2000/svg\"\n fill=\"none\"\n viewBox=\"0 0 24 24\"\n strokeWidth={2}\n stroke=\"currentColor\"\n className={className}\n >\n <path\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n d=\"M19.5 8.25l-7.5 7.5-7.5-7.5\"\n />\n </svg>\n );\n}\n\nfunction UserIcon({ className }: { className?: string }) {\n return (\n <svg\n xmlns=\"http://www.w3.org/2000/svg\"\n fill=\"none\"\n viewBox=\"0 0 24 24\"\n strokeWidth={1.5}\n stroke=\"currentColor\"\n className={className}\n >\n <path\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n d=\"M15.75 6a3.75 3.75 0 11-7.5 0 3.75 3.75 0 017.5 0zM4.501 20.118a7.5 7.5 0 0114.998 0A17.933 17.933 0 0112 21.75c-2.676 0-5.216-.584-7.499-1.632z\"\n />\n </svg>\n );\n}\n\nfunction CartIcon({ className }: { className?: string }) {\n return (\n <svg\n xmlns=\"http://www.w3.org/2000/svg\"\n fill=\"none\"\n viewBox=\"0 0 24 24\"\n strokeWidth={1.5}\n stroke=\"currentColor\"\n className={className}\n >\n <path\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n d=\"M2.25 3h1.386c.51 0 .955.343 1.087.835l.383 1.437M7.5 14.25a3 3 0 00-3 3h15.75m-12.75-3h11.218c1.121-2.3 2.1-4.684 2.924-7.138a60.114 60.114 0 00-16.536-1.84M7.5 14.25L5.106 5.272M6 20.25a.75.75 0 11-1.5 0 .75.75 0 011.5 0zm12.75 0a.75.75 0 11-1.5 0 .75.75 0 011.5 0z\"\n />\n </svg>\n );\n}\n","import { useState } from 'react'\n\nexport interface Category {\n id: string\n label: string\n icon?: string\n count?: number\n children?: Category[]\n}\n\nexport interface CategoryTreeProps {\n categories: Category[]\n activeId?: string\n onSelect?: (category: Category) => void\n /** Show product counts */\n showCounts?: boolean\n /** All nodes expanded by default */\n defaultExpandAll?: boolean\n className?: string\n}\n\ninterface TreeNodeProps {\n node: Category\n activeId: string | undefined\n onSelect: (category: Category) => void\n showCounts: boolean\n depth: number\n defaultExpandAll: boolean\n}\n\nfunction TreeNode({\n node,\n activeId,\n onSelect,\n showCounts,\n depth,\n defaultExpandAll,\n}: TreeNodeProps) {\n const hasChildren = node.children && node.children.length > 0\n const [expanded, setExpanded] = useState(defaultExpandAll || isAncestorOf(node, activeId))\n const isActive = node.id === activeId\n\n return (\n <li>\n <div\n className={[\n 'group flex items-center gap-1.5 rounded-lg px-2 py-1.5 cursor-pointer select-none',\n 'transition-colors text-sm',\n isActive\n ? 'bg-primary-50 text-primary-700 font-medium'\n : 'text-gray-700 hover:bg-gray-50 hover:text-gray-900',\n depth > 0 ? `ml-${Math.min(depth * 4, 8)}` : '',\n ]\n .filter(Boolean)\n .join(' ')}\n style={depth > 0 ? { marginLeft: depth * 16 } : undefined}\n onClick={() => {\n onSelect(node)\n if (hasChildren) setExpanded((v) => !v)\n }}\n role=\"button\"\n tabIndex={0}\n onKeyDown={(e) => {\n if (e.key === 'Enter' || e.key === ' ') {\n e.preventDefault()\n onSelect(node)\n if (hasChildren) setExpanded((v) => !v)\n }\n }}\n aria-expanded={hasChildren ? expanded : undefined}\n >\n {/* Expand toggle */}\n {hasChildren ? (\n <span\n className={`shrink-0 text-gray-400 transition-transform duration-150 ${expanded ? 'rotate-90' : ''}`}\n >\n <svg\n xmlns=\"http://www.w3.org/2000/svg\"\n fill=\"none\"\n viewBox=\"0 0 24 24\"\n strokeWidth={2}\n stroke=\"currentColor\"\n className=\"w-3.5 h-3.5\"\n >\n <path strokeLinecap=\"round\" strokeLinejoin=\"round\" d=\"M8.25 4.5l7.5 7.5-7.5 7.5\" />\n </svg>\n </span>\n ) : (\n <span className=\"w-3.5 shrink-0\" />\n )}\n\n {/* Icon */}\n {node.icon && <span className=\"text-base leading-none\">{node.icon}</span>}\n\n {/* Label */}\n <span className=\"flex-1 truncate\">{node.label}</span>\n\n {/* Count */}\n {showCounts && node.count !== undefined && (\n <span\n className={`text-xs rounded-full px-1.5 py-0.5 font-medium ${\n isActive ? 'bg-primary-100 text-primary-600' : 'bg-gray-100 text-gray-500'\n }`}\n >\n {node.count}\n </span>\n )}\n </div>\n\n {/* Children */}\n {hasChildren && expanded && (\n <ul role=\"group\">\n {node.children!.map((child) => (\n <TreeNode\n key={child.id}\n node={child}\n activeId={activeId}\n onSelect={onSelect}\n showCounts={showCounts}\n depth={depth + 1}\n defaultExpandAll={defaultExpandAll}\n />\n ))}\n </ul>\n )}\n </li>\n )\n}\n\nfunction isAncestorOf(node: Category, activeId: string | undefined): boolean {\n if (!activeId) return false\n if (!node.children) return false\n return node.children.some(\n (c) => c.id === activeId || isAncestorOf(c, activeId),\n )\n}\n\nexport function CategoryTree({\n categories,\n activeId,\n onSelect,\n showCounts = true,\n defaultExpandAll = false,\n className = '',\n ...props\n}: CategoryTreeProps) {\n const handleSelect = (cat: Category) => onSelect?.(cat)\n\n return (\n <nav\n aria-label=\"Category navigation\"\n className={['w-full', className].filter(Boolean).join(' ')}\n {...props}\n >\n <ul role=\"tree\" className=\"space-y-0.5\">\n {categories.map((cat) => (\n <TreeNode\n key={cat.id}\n node={cat}\n activeId={activeId}\n onSelect={handleSelect}\n showCounts={showCounts}\n depth={0}\n defaultExpandAll={defaultExpandAll}\n />\n ))}\n </ul>\n </nav>\n )\n}\n","import { useState, useRef } from 'react'\n\nexport interface MegaMenuSubItem {\n id: string\n label: string\n href?: string\n badge?: string\n}\n\nexport interface MegaMenuColumn {\n heading?: string\n items: MegaMenuSubItem[]\n}\n\nexport interface MegaMenuFeatured {\n image?: string\n eyebrow?: string\n title: string\n description?: string\n cta?: string\n href?: string\n}\n\nexport interface MegaMenuItem {\n id: string\n label: string\n icon?: string\n href?: string\n /** If columns are present, hovering opens the mega panel */\n columns?: MegaMenuColumn[]\n featured?: MegaMenuFeatured\n}\n\nexport interface MegaMenuProps {\n items: MegaMenuItem[]\n activeId?: string\n onNavigate?: (item: MegaMenuSubItem | MegaMenuItem) => void\n}\n\n// ─── Mega panel ──────────────────────────────────────────────────────────────\n\ninterface MegaPanelProps {\n item: MegaMenuItem\n onNavigate: (subItem: MegaMenuSubItem | MegaMenuItem) => void\n onClose: () => void\n}\n\nfunction MegaPanel({ item, onNavigate, onClose }: MegaPanelProps) {\n if (!item.columns?.length) return null\n\n return (\n <div className=\"absolute left-0 right-0 top-full z-50 bg-white border-b border-gray-200 shadow-lg\">\n <div className=\"max-w-7xl mx-auto px-4 py-6 flex gap-8\">\n {/* Columns */}\n <div className=\"flex-1 grid grid-cols-2 md:grid-cols-3 lg:grid-cols-4 gap-6\">\n {item.columns.map((col, ci) => (\n <div key={ci}>\n {col.heading && (\n <p className=\"text-xs font-semibold uppercase tracking-wider text-gray-400 mb-2\">\n {col.heading}\n </p>\n )}\n <ul className=\"space-y-1\">\n {col.items.map((sub) => (\n <li key={sub.id}>\n <button\n className=\"flex items-center gap-1.5 text-sm text-gray-700 hover:text-primary-600 transition-colors py-0.5\"\n onClick={() => {\n onNavigate(sub)\n onClose()\n }}\n >\n {sub.label}\n {sub.badge && (\n <span className=\"text-[10px] font-semibold px-1.5 py-0.5 rounded-full bg-danger-50 text-danger-600 leading-none\">\n {sub.badge}\n </span>\n )}\n </button>\n </li>\n ))}\n </ul>\n </div>\n ))}\n </div>\n\n {/* Featured card */}\n {item.featured && (\n <div className=\"w-52 shrink-0\">\n <button\n className=\"group block w-full rounded-xl overflow-hidden border border-gray-100 text-left hover:shadow-md transition-shadow\"\n onClick={() => {\n onNavigate(item)\n onClose()\n }}\n >\n {item.featured.image ? (\n <img\n src={item.featured.image}\n alt={item.featured.title}\n className=\"w-full h-28 object-cover\"\n />\n ) : (\n <div className=\"w-full h-28 bg-linear-to-br from-primary-100 to-primary-200 flex items-center justify-center text-4xl\">\n {item.icon ?? '🛍️'}\n </div>\n )}\n <div className=\"p-3\">\n {item.featured.eyebrow && (\n <p className=\"text-[10px] font-semibold uppercase tracking-wider text-primary-500 mb-0.5\">\n {item.featured.eyebrow}\n </p>\n )}\n <p className=\"text-sm font-semibold text-gray-900 group-hover:text-primary-600 transition-colors\">\n {item.featured.title}\n </p>\n {item.featured.description && (\n <p className=\"text-xs text-gray-500 mt-0.5 line-clamp-2\">\n {item.featured.description}\n </p>\n )}\n {item.featured.cta && (\n <span className=\"inline-block mt-2 text-xs font-medium text-primary-600\">\n {item.featured.cta} →\n </span>\n )}\n </div>\n </button>\n </div>\n )}\n </div>\n </div>\n )\n}\n\n// ─── MegaMenu ────────────────────────────────────────────────────────────────\n\nexport function MegaMenu({\n items,\n activeId,\n onNavigate,\n}: MegaMenuProps) {\n const [openId, setOpenId] = useState<string | null>(null)\n const timeoutRef = useRef<ReturnType<typeof setTimeout> | null>(null)\n\n const open = (id: string) => {\n if (timeoutRef.current) clearTimeout(timeoutRef.current)\n setOpenId(id)\n }\n\n const scheduleClose = () => {\n timeoutRef.current = setTimeout(() => setOpenId(null), 120)\n }\n\n const cancelClose = () => {\n if (timeoutRef.current) clearTimeout(timeoutRef.current)\n }\n\n const activeItem = items.find((i) => i.id === openId)\n\n return (\n <nav\n aria-label=\"Main navigation\"\n className=\"relative bg-white border-b border-gray-100\"\n onMouseLeave={scheduleClose}\n >\n <div className=\"max-w-7xl mx-auto px-4\">\n <ul className=\"flex items-center gap-0\" role=\"menubar\">\n {items.map((item) => {\n const hasMega = !!item.columns?.length\n const isOpen = openId === item.id\n const isActive = activeId === item.id\n\n return (\n <li key={item.id} role=\"none\">\n <button\n role=\"menuitem\"\n aria-haspopup={hasMega ? 'true' : undefined}\n aria-expanded={hasMega ? isOpen : undefined}\n className={[\n 'flex items-center gap-1.5 px-4 py-3.5 text-sm font-medium transition-colors relative',\n 'outline-none focus-visible:ring-2 focus-visible:ring-inset focus-visible:ring-primary-500',\n isActive || isOpen\n ? 'text-primary-600'\n : 'text-gray-700 hover:text-gray-900',\n isOpen\n ? 'after:absolute after:bottom-0 after:left-0 after:right-0 after:h-0.5 after:bg-primary-600'\n : '',\n ]\n .filter(Boolean)\n .join(' ')}\n onMouseEnter={() => hasMega ? open(item.id) : setOpenId(null)}\n onFocus={() => hasMega && open(item.id)}\n onClick={() => {\n if (!hasMega) {\n onNavigate?.(item)\n setOpenId(null)\n }\n }}\n >\n {item.icon && <span className=\"text-base leading-none\">{item.icon}</span>}\n {item.label}\n {hasMega && (\n <svg\n xmlns=\"http://www.w3.org/2000/svg\"\n fill=\"none\"\n viewBox=\"0 0 24 24\"\n strokeWidth={2}\n stroke=\"currentColor\"\n className={`w-3.5 h-3.5 transition-transform duration-150 ${isOpen ? 'rotate-180' : ''}`}\n >\n <path\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n d=\"M19.5 8.25l-7.5 7.5-7.5-7.5\"\n />\n </svg>\n )}\n </button>\n </li>\n )\n })}\n </ul>\n </div>\n\n {/* Mega panel */}\n {activeItem?.columns?.length && (\n <div\n onMouseEnter={cancelClose}\n onMouseLeave={scheduleClose}\n >\n <MegaPanel\n item={activeItem}\n onNavigate={(sub) => onNavigate?.(sub)}\n onClose={() => setOpenId(null)}\n />\n </div>\n )}\n </nav>\n )\n}\n","import { useState, useEffect, useCallback, useRef } from 'react'\n\nexport interface Banner {\n id: string\n /** Background image URL or gradient CSS value */\n backgroundImage?: string\n backgroundColor?: string\n /** Overlaid text content */\n eyebrow?: string\n title: string\n subtitle?: string\n ctaLabel?: string\n ctaHref?: string\n onCtaClick?: () => void\n /** Image on the right side of the banner */\n sideImage?: string\n /** Text colors — default to white for dark backgrounds */\n textColor?: 'light' | 'dark'\n}\n\nexport interface BannerCarouselProps {\n banners: Banner[]\n autoPlay?: boolean\n autoPlayInterval?: number\n /** Show arrow navigation */\n arrows?: boolean\n /** Show dot indicators */\n dots?: boolean\n className?: string\n /** Aspect ratio of the banner — default 3/1 */\n aspectRatio?: string\n}\n\nexport function BannerCarousel({\n banners,\n autoPlay = true,\n autoPlayInterval = 5000,\n arrows = true,\n dots = true,\n className = '',\n aspectRatio = '3 / 1',\n}: BannerCarouselProps) {\n const [current, setCurrent] = useState(0)\n const [paused, setPaused] = useState(false)\n const timerRef = useRef<ReturnType<typeof setInterval> | null>(null)\n const trackRef = useRef<HTMLDivElement>(null)\n\n const count = banners.length\n\n const goTo = useCallback(\n (index: number) => {\n setCurrent(((index % count) + count) % count)\n },\n [count],\n )\n\n const prev = () => goTo(current - 1)\n const next = useCallback(() => goTo(current + 1), [current, goTo])\n\n // Auto-play\n useEffect(() => {\n if (!autoPlay || paused || count <= 1) return\n timerRef.current = setInterval(next, autoPlayInterval)\n return () => {\n if (timerRef.current) clearInterval(timerRef.current)\n }\n }, [autoPlay, paused, autoPlayInterval, next, count])\n\n // Swipe support\n const touchStartX = useRef<number | null>(null)\n const handleTouchStart = (e: React.TouchEvent) => {\n touchStartX.current = e.touches[0].clientX\n }\n const handleTouchEnd = (e: React.TouchEvent) => {\n if (touchStartX.current === null) return\n const delta = e.changedTouches[0].clientX - touchStartX.current\n if (Math.abs(delta) > 50) delta < 0 ? next() : prev()\n touchStartX.current = null\n }\n\n if (count === 0) return null\n\n const banner = banners[current]\n const isLight = banner.textColor === 'light' || !banner.textColor\n\n return (\n <div\n className={['relative overflow-hidden rounded-xl', className].filter(Boolean).join(' ')}\n style={{ aspectRatio }}\n onMouseEnter={() => setPaused(true)}\n onMouseLeave={() => setPaused(false)}\n onTouchStart={handleTouchStart}\n onTouchEnd={handleTouchEnd}\n >\n {/* Slides */}\n <div ref={trackRef} className=\"relative w-full h-full\">\n {banners.map((b, i) => (\n <div\n key={b.id}\n aria-hidden={i !== current}\n className={[\n 'absolute inset-0 transition-opacity duration-700',\n i === current ? 'opacity-100 z-10' : 'opacity-0 z-0',\n ].join(' ')}\n style={{\n background: b.backgroundImage\n ? `url(${b.backgroundImage}) center/cover no-repeat`\n : b.backgroundColor ?? 'linear-gradient(135deg, #1d4ed8 0%, #7c3aed 100%)',\n }}\n >\n {/* Overlay for readability */}\n {b.backgroundImage && (\n <div className=\"absolute inset-0 bg-gradient-to-r from-black/50 via-black/20 to-transparent\" />\n )}\n\n {/* Content */}\n <div className=\"relative z-10 h-full flex items-center px-8 md:px-12 gap-8\">\n <div className=\"flex-1 max-w-lg\">\n {b.eyebrow && (\n <p\n className={`text-xs font-semibold uppercase tracking-widest mb-2 ${\n isLight ? 'text-white/70' : 'text-gray-500'\n }`}\n >\n {b.eyebrow}\n </p>\n )}\n <h2\n className={`text-2xl md:text-3xl lg:text-4xl font-bold leading-tight ${\n isLight ? 'text-white' : 'text-gray-900'\n }`}\n >\n {b.title}\n </h2>\n {b.subtitle && (\n <p\n className={`mt-2 text-sm md:text-base ${\n isLight ? 'text-white/80' : 'text-gray-600'\n }`}\n >\n {b.subtitle}\n </p>\n )}\n {b.ctaLabel && (\n <button\n onClick={b.onCtaClick}\n className={[\n 'mt-5 inline-flex items-center gap-2 px-5 py-2.5 rounded-lg text-sm font-semibold transition-all',\n isLight\n ? 'bg-white text-gray-900 hover:bg-gray-100'\n : 'bg-primary-600 text-white hover:bg-primary-700',\n ].join(' ')}\n >\n {b.ctaLabel}\n <svg\n xmlns=\"http://www.w3.org/2000/svg\"\n fill=\"none\"\n viewBox=\"0 0 24 24\"\n strokeWidth={2}\n stroke=\"currentColor\"\n className=\"w-4 h-4\"\n >\n <path strokeLinecap=\"round\" strokeLinejoin=\"round\" d=\"M8.25 4.5l7.5 7.5-7.5 7.5\" />\n </svg>\n </button>\n )}\n </div>\n\n {/* Side image */}\n {b.sideImage && (\n <div className=\"hidden md:block flex-1 h-full flex items-end justify-end overflow-hidden\">\n <img\n src={b.sideImage}\n alt=\"\"\n className=\"h-full w-auto object-contain object-bottom drop-shadow-2xl\"\n />\n </div>\n )}\n </div>\n </div>\n ))}\n </div>\n\n {/* Arrow navigation */}\n {arrows && count > 1 && (\n <>\n <button\n onClick={prev}\n className=\"absolute left-3 top-1/2 -translate-y-1/2 z-20 w-9 h-9 flex items-center justify-center rounded-full bg-black/30 text-white hover:bg-black/50 transition-colors backdrop-blur-sm\"\n aria-label=\"Previous banner\"\n >\n <svg xmlns=\"http://www.w3.org/2000/svg\" fill=\"none\" viewBox=\"0 0 24 24\" strokeWidth={2} stroke=\"currentColor\" className=\"w-5 h-5\">\n <path strokeLinecap=\"round\" strokeLinejoin=\"round\" d=\"M15.75 19.5L8.25 12l7.5-7.5\" />\n </svg>\n </button>\n <button\n onClick={next}\n className=\"absolute right-3 top-1/2 -translate-y-1/2 z-20 w-9 h-9 flex items-center justify-center rounded-full bg-black/30 text-white hover:bg-black/50 transition-colors backdrop-blur-sm\"\n aria-label=\"Next banner\"\n >\n <svg xmlns=\"http://www.w3.org/2000/svg\" fill=\"none\" viewBox=\"0 0 24 24\" strokeWidth={2} stroke=\"currentColor\" className=\"w-5 h-5\">\n <path strokeLinecap=\"round\" strokeLinejoin=\"round\" d=\"M8.25 4.5l7.5 7.5-7.5 7.5\" />\n </svg>\n </button>\n </>\n )}\n\n {/* Dot indicators */}\n {dots && count > 1 && (\n <div className=\"absolute bottom-3 left-1/2 -translate-x-1/2 z-20 flex gap-1.5\">\n {banners.map((_, i) => (\n <button\n key={i}\n onClick={() => goTo(i)}\n aria-label={`Go to slide ${i + 1}`}\n className={[\n 'rounded-full transition-all duration-300',\n i === current\n ? 'w-5 h-2 bg-white'\n : 'w-2 h-2 bg-white/50 hover:bg-white/80',\n ].join(' ')}\n />\n ))}\n </div>\n )}\n\n {/* Auto-play progress bar */}\n {autoPlay && count > 1 && (\n <div className=\"absolute bottom-0 left-0 right-0 h-0.5 bg-white/20 z-20\">\n <div\n key={`${current}-${paused}`}\n className={`h-full bg-white/60 ${paused ? '' : 'animate-progress'}`}\n style={{\n animation: paused ? 'none' : `progress ${autoPlayInterval}ms linear`,\n }}\n />\n </div>\n )}\n </div>\n )\n}\n","import { useState } from 'react'\nimport { Badge } from '../common/Badge/Badge'\nimport { Button } from '../common/Button/Button'\n\nexport interface ProductCardProduct {\n id: string\n name: string\n slug?: string\n /** Primary image URL */\n image?: string\n /** Secondary image on hover */\n imageHover?: string\n price: number\n originalPrice?: number\n currency?: string\n /** 'new' | 'sale' | 'hot' | custom string */\n badge?: string\n /** 0–5 */\n rating?: number\n reviewCount?: number\n inStock?: boolean\n /** Variants available (e.g. colors) */\n variants?: { id: string; color?: string; label: string }[]\n}\n\nexport interface ProductCardProps {\n product: ProductCardProduct\n onAddToCart?: (product: ProductCardProduct) => void\n onWishlistToggle?: (product: ProductCardProduct) => void\n isWishlisted?: boolean\n onProductClick?: (product: ProductCardProduct) => void\n /** compact — narrower, used in grids with 4+ columns */\n size?: 'default' | 'compact'\n className?: string\n}\n\nfunction StarIcon({ filled }: { filled: boolean }) {\n return (\n <svg\n xmlns=\"http://www.w3.org/2000/svg\"\n viewBox=\"0 0 24 24\"\n className={`w-3.5 h-3.5 ${filled ? 'fill-amber-400 stroke-amber-400' : 'fill-gray-200 stroke-gray-300'}`}\n strokeWidth={1}\n >\n <path\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n d=\"M11.48 3.499a.562.562 0 011.04 0l2.125 5.111a.563.563 0 00.475.345l5.518.442c.499.04.701.663.321.988l-4.204 3.602a.563.563 0 00-.182.557l1.285 5.385a.562.562 0 01-.84.61l-4.725-2.885a.563.563 0 00-.586 0L6.982 20.54a.562.562 0 01-.84-.61l1.285-5.386a.562.562 0 00-.182-.557l-4.204-3.602a.563.563 0 01.321-.988l5.518-.442a.563.563 0 00.475-.345L11.48 3.5z\"\n />\n </svg>\n )\n}\n\nfunction StarRating({ value, count }: { value: number; count?: number }) {\n return (\n <div className=\"flex items-center gap-1\">\n <div className=\"flex gap-0.5\">\n {[1, 2, 3, 4, 5].map((s) => (\n <StarIcon key={s} filled={s <= Math.round(value)} />\n ))}\n </div>\n {count !== undefined && (\n <span className=\"text-xs text-gray-400\">({count})</span>\n )}\n </div>\n )\n}\n\nfunction badgeVariant(badge: string) {\n const b = badge.toLowerCase()\n if (b === 'sale' || b === 'akce') return 'danger' as const\n if (b === 'new' || b === 'nové') return 'primary' as const\n if (b === 'hot') return 'warning' as const\n return 'default' as const\n}\n\nfunction formatPrice(price: number, currency = 'Kč') {\n return `${price.toLocaleString('cs-CZ')} ${currency}`\n}\n\nfunction discountPercent(original: number, current: number) {\n return Math.round((1 - current / original) * 100)\n}\n\nexport function ProductCard({\n product,\n onAddToCart,\n onWishlistToggle,\n isWishlisted = false,\n onProductClick,\n size = 'default',\n className = '',\n}: ProductCardProps) {\n const [hovered, setHovered] = useState(false)\n const [addedToCart, setAddedToCart] = useState(false)\n\n const hasDiscount =\n product.originalPrice !== undefined && product.originalPrice > product.price\n\n const handleAddToCart = (e: React.MouseEvent) => {\n e.stopPropagation()\n onAddToCart?.(product)\n setAddedToCart(true)\n setTimeout(() => setAddedToCart(false), 1500)\n }\n\n const handleWishlist = (e: React.MouseEvent) => {\n e.stopPropagation()\n onWishlistToggle?.(product)\n }\n\n return (\n <article\n className={[\n 'group relative flex flex-col bg-white rounded-xl border border-gray-200',\n 'hover:shadow-md transition-shadow duration-200 overflow-hidden cursor-pointer',\n className,\n ]\n .filter(Boolean)\n .join(' ')}\n onClick={() => onProductClick?.(product)}\n onMouseEnter={() => setHovered(true)}\n onMouseLeave={() => setHovered(false)}\n >\n {/* Image */}\n <div className={`relative overflow-hidden bg-gray-50 ${size === 'compact' ? 'aspect-square' : 'aspect-4/3'}`}>\n {product.image ? (\n <img\n src={hovered && product.imageHover ? product.imageHover : product.image}\n alt={product.name}\n className=\"w-full h-full object-contain p-4 transition-transform duration-300 group-hover:scale-105\"\n />\n ) : (\n <div className=\"w-full h-full flex items-center justify-center text-5xl bg-linear-to-br from-gray-100 to-gray-200\">\n 🛍️\n </div>\n )}\n\n {/* Badge */}\n {product.badge && (\n <div className=\"absolute top-2 left-2\">\n <Badge variant={badgeVariant(product.badge)} size=\"sm\">\n {product.badge === 'sale' && hasDiscount\n ? `-${discountPercent(product.originalPrice!, product.price)}%`\n : product.badge}\n </Badge>\n </div>\n )}\n\n {/* Out of stock overlay */}\n {product.inStock === false && (\n <div className=\"absolute inset-0 bg-white/70 flex items-center justify-center\">\n <span className=\"text-sm font-semibold text-gray-500 bg-white/90 px-3 py-1 rounded-full border border-gray-200\">\n Vyprodáno\n </span>\n </div>\n )}\n\n {/* Wishlist button */}\n <button\n onClick={handleWishlist}\n aria-label={isWishlisted ? 'Remove from wishlist' : 'Add to wishlist'}\n className={[\n 'absolute top-2 right-2 w-8 h-8 flex items-center justify-center rounded-full bg-white shadow-sm border border-gray-100',\n 'transition-all duration-200',\n 'opacity-0 group-hover:opacity-100 focus:opacity-100',\n isWishlisted ? 'text-danger-500' : 'text-gray-400 hover:text-danger-400',\n ].join(' ')}\n >\n <svg\n xmlns=\"http://www.w3.org/2000/svg\"\n viewBox=\"0 0 24 24\"\n strokeWidth={1.5}\n stroke=\"currentColor\"\n className={`w-4 h-4 ${isWishlisted ? 'fill-current' : 'fill-none'}`}\n >\n <path\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n d=\"M21 8.25c0-2.485-2.099-4.5-4.688-4.5-1.935 0-3.597 1.126-4.312 2.733-.715-1.607-2.377-2.733-4.313-2.733C5.1 3.75 3 5.765 3 8.25c0 7.22 9 12 9 12s9-4.78 9-12z\"\n />\n </svg>\n </button>\n\n {/* Quick add — slides up on hover */}\n <div\n className={[\n 'absolute bottom-0 left-0 right-0 p-2 transition-transform duration-200',\n hovered ? 'translate-y-0' : 'translate-y-full',\n ].join(' ')}\n >\n <Button\n variant=\"primary\"\n size=\"sm\"\n fullWidth\n loading={false}\n disabled={product.inStock === false}\n onClick={handleAddToCart}\n className=\"shadow-lg\"\n >\n {addedToCart ? (\n <span className=\"flex items-center gap-1.5\">\n <svg xmlns=\"http://www.w3.org/2000/svg\" fill=\"none\" viewBox=\"0 0 24 24\" strokeWidth={2} stroke=\"currentColor\" className=\"w-4 h-4\">\n <path strokeLinecap=\"round\" strokeLinejoin=\"round\" d=\"M4.5 12.75l6 6 9-13.5\" />\n </svg>\n Přidáno\n </span>\n ) : (\n 'Přidat do košíku'\n )}\n </Button>\n </div>\n </div>\n\n {/* Info */}\n <div className={`flex flex-col gap-1.5 ${size === 'compact' ? 'p-3' : 'p-4'}`}>\n {/* Color variants */}\n {product.variants && product.variants.length > 0 && (\n <div className=\"flex gap-1\">\n {product.variants.slice(0, 5).map((v) => (\n <span\n key={v.id}\n title={v.label}\n className=\"w-4 h-4 rounded-full border border-gray-300 shrink-0\"\n style={{ backgroundColor: v.color ?? '#ccc' }}\n />\n ))}\n {product.variants.length > 5 && (\n <span className=\"text-xs text-gray-400\">+{product.variants.length - 5}</span>\n )}\n </div>\n )}\n\n {/* Name */}\n <h3\n className={`font-medium text-gray-900 leading-snug line-clamp-2 group-hover:text-primary-600 transition-colors ${\n size === 'compact' ? 'text-xs' : 'text-sm'\n }`}\n >\n {product.name}\n </h3>\n\n {/* Rating */}\n {product.rating !== undefined && (\n <StarRating value={product.rating} count={product.reviewCount} />\n )}\n\n {/* Price */}\n <div className=\"flex items-baseline gap-2 mt-auto pt-1\">\n <span\n className={`font-bold text-gray-900 ${size === 'compact' ? 'text-base' : 'text-lg'}`}\n >\n {formatPrice(product.price, product.currency)}\n </span>\n {hasDiscount && (\n <span className=\"text-sm text-gray-400 line-through\">\n {formatPrice(product.originalPrice!, product.currency)}\n </span>\n )}\n </div>\n </div>\n </article>\n )\n}\n","import type { ReactNode } from 'react'\nimport { ProductCard } from '../ProductCard/ProductCard'\nimport type { ProductCardProduct, ProductCardProps } from '../ProductCard/ProductCard'\nimport { Pagination } from '../common/Pagination/Pagination'\nimport { Select } from '../common/Select/Select'\n\nexport type GridColumns = 2 | 3 | 4 | 5\n\nexport interface SortOption {\n value: string\n label: string\n}\n\nexport interface ProductGridProps {\n products: ProductCardProduct[]\n /** Total products (for pagination) */\n totalCount?: number\n /** Current page */\n page?: number\n onPageChange?: (page: number) => void\n /** Products per page */\n perPage?: number\n /** Column count */\n columns?: GridColumns\n /** Sort options */\n sortOptions?: SortOption[]\n selectedSort?: string\n onSortChange?: (value: string) => void\n /** Active filters summary */\n activeFilters?: string[]\n onRemoveFilter?: (filter: string) => void\n onClearFilters?: () => void\n /** Loading skeleton */\n loading?: boolean\n /** Empty state slot */\n emptyState?: ReactNode\n /** ProductCard passthrough props */\n onAddToCart?: ProductCardProps['onAddToCart']\n onWishlistToggle?: ProductCardProps['onWishlistToggle']\n onProductClick?: ProductCardProps['onProductClick']\n wishlisted?: string[]\n className?: string\n}\n\nconst colClasses: Record<GridColumns, string> = {\n 2: 'grid-cols-2',\n 3: 'grid-cols-2 md:grid-cols-3',\n 4: 'grid-cols-2 sm:grid-cols-3 lg:grid-cols-4',\n 5: 'grid-cols-2 sm:grid-cols-3 md:grid-cols-4 lg:grid-cols-5',\n}\n\nconst DEFAULT_SORT_OPTIONS: SortOption[] = [\n { value: 'newest', label: 'Nejnovější' },\n { value: 'price-asc', label: 'Cena: od nejnižší' },\n { value: 'price-desc', label: 'Cena: od nejvyšší' },\n { value: 'rating', label: 'Hodnocení' },\n { value: 'bestseller', label: 'Bestsellery' },\n]\n\nfunction SkeletonCard() {\n return (\n <div className=\"rounded-xl border border-gray-100 overflow-hidden animate-pulse\">\n <div className=\"aspect-4/3 bg-gray-200\" />\n <div className=\"p-4 space-y-2\">\n <div className=\"h-3 bg-gray-200 rounded w-3/4\" />\n <div className=\"h-3 bg-gray-200 rounded w-1/2\" />\n <div className=\"h-5 bg-gray-200 rounded w-1/3 mt-2\" />\n </div>\n </div>\n )\n}\n\nexport function ProductGrid({\n products,\n totalCount,\n page = 1,\n onPageChange,\n perPage = 20,\n columns = 4,\n sortOptions = DEFAULT_SORT_OPTIONS,\n selectedSort,\n onSortChange,\n activeFilters = [],\n onRemoveFilter,\n onClearFilters,\n loading = false,\n emptyState,\n onAddToCart,\n onWishlistToggle,\n onProductClick,\n wishlisted = [],\n className = '',\n}: ProductGridProps) {\n const totalPages = totalCount ? Math.ceil(totalCount / perPage) : undefined\n const cardSize = columns >= 5 ? 'compact' : 'default'\n\n return (\n <div className={['w-full', className].filter(Boolean).join(' ')}>\n {/* Toolbar */}\n <div className=\"flex flex-wrap items-center justify-between gap-3 mb-4\">\n {/* Left: count + active filters */}\n <div className=\"flex flex-wrap items-center gap-2\">\n {totalCount !== undefined && (\n <span className=\"text-sm text-gray-500\">\n <span className=\"font-semibold text-gray-900\">{totalCount}</span> produktů\n </span>\n )}\n {activeFilters.map((f) => (\n <span\n key={f}\n className=\"inline-flex items-center gap-1 text-xs bg-primary-50 text-primary-700 border border-primary-200 rounded-full px-2.5 py-1\"\n >\n {f}\n <button\n onClick={() => onRemoveFilter?.(f)}\n aria-label={`Remove filter ${f}`}\n className=\"hover:text-primary-900 transition-colors\"\n >\n <svg xmlns=\"http://www.w3.org/2000/svg\" fill=\"none\" viewBox=\"0 0 24 24\" strokeWidth={2} stroke=\"currentColor\" className=\"w-3 h-3\">\n <path strokeLinecap=\"round\" strokeLinejoin=\"round\" d=\"M6 18L18 6M6 6l12 12\" />\n </svg>\n </button>\n </span>\n ))}\n {activeFilters.length > 1 && (\n <button\n onClick={onClearFilters}\n className=\"text-xs text-gray-400 hover:text-gray-600 underline underline-offset-2 transition-colors\"\n >\n Zrušit vše\n </button>\n )}\n </div>\n\n {/* Right: sort */}\n <Select\n options={sortOptions}\n value={selectedSort ?? ''}\n onChange={(e) => onSortChange?.(e.target.value)}\n aria-label=\"Sort products\"\n className=\"text-sm\"\n />\n </div>\n\n {/* Grid */}\n {loading ? (\n <div className={`grid gap-4 ${colClasses[columns]}`}>\n {Array.from({ length: perPage > 12 ? 12 : perPage }).map((_, i) => (\n <SkeletonCard key={i} />\n ))}\n </div>\n ) : products.length === 0 ? (\n <div className=\"py-16 text-center\">\n {emptyState ?? (\n <div className=\"space-y-2\">\n <p className=\"text-4xl\">🔍</p>\n <p className=\"font-semibold text-gray-900\">Žádné produkty nenalezeny</p>\n <p className=\"text-sm text-gray-500\">Zkuste upravit filtry nebo hledat jinak.</p>\n {activeFilters.length > 0 && (\n <button\n onClick={onClearFilters}\n className=\"mt-3 text-sm text-primary-600 hover:underline\"\n >\n Zrušit všechny filtry\n </button>\n )}\n </div>\n )}\n </div>\n ) : (\n <div className={`grid gap-4 ${colClasses[columns]}`}>\n {products.map((product) => (\n <ProductCard\n key={product.id}\n product={product}\n size={cardSize}\n onAddToCart={onAddToCart}\n onWishlistToggle={onWishlistToggle}\n onProductClick={onProductClick}\n isWishlisted={wishlisted.includes(product.id)}\n />\n ))}\n </div>\n )}\n\n {/* Pagination */}\n {totalPages && totalPages > 1 && onPageChange && (\n <div className=\"flex justify-center mt-8\">\n <Pagination\n page={page}\n totalPages={totalPages}\n onPageChange={onPageChange}\n />\n </div>\n )}\n </div>\n )\n}\n","import type { ReactNode, CSSProperties } from 'react'\nimport { Button } from '../common/Button/Button'\nimport type { ButtonProps } from '../common/Button/Button'\n\n// ─── Types ────────────────────────────────────────────────────────────────────\n\ntype CtaAlign = 'left' | 'center' | 'right'\ntype CtaSize = 'sm' | 'md' | 'lg' | 'xl'\ntype CtaVariant = 'default' | 'primary' | 'dark' | 'gradient' | 'outline' | 'image'\ntype CtaLayout = 'stacked' | 'inline'\n\nexport interface CtaAction {\n label: string\n onClick?: () => void\n href?: string\n variant?: ButtonProps['variant']\n size?: ButtonProps['size']\n}\n\nexport interface CallToActionProps {\n // Content\n eyebrow?: string\n title: string\n description?: string\n actions?: CtaAction[]\n\n // Layout\n align?: CtaAlign\n layout?: CtaLayout\n size?: CtaSize\n\n // Visual\n variant?: CtaVariant\n /** Custom background colour or gradient CSS value (overrides variant background) */\n background?: string\n /** For variant=\"image\": URL of background image */\n backgroundImage?: string\n /** Extra decorative slot — e.g. an illustration, icon or badge */\n media?: ReactNode\n\n // Misc\n className?: string\n style?: CSSProperties\n}\n\n// ─── Config maps ─────────────────────────────────────────────────────────────\n\nconst variantClasses: Record<CtaVariant, string> = {\n default: 'bg-gray-50 border border-gray-200',\n primary: 'bg-primary-600',\n dark: 'bg-gray-900',\n gradient: 'bg-linear-to-br from-primary-600 via-primary-700 to-violet-700',\n outline: 'bg-white border-2 border-primary-600',\n image: 'relative overflow-hidden', // bg applied inline via style\n}\n\nconst variantTextClasses: Record<CtaVariant, { eyebrow: string; title: string; description: string }> = {\n default: { eyebrow: 'text-primary-600', title: 'text-gray-900', description: 'text-gray-600' },\n primary: { eyebrow: 'text-primary-100', title: 'text-white', description: 'text-primary-100' },\n dark: { eyebrow: 'text-primary-400', title: 'text-white', description: 'text-gray-400' },\n gradient: { eyebrow: 'text-primary-200', title: 'text-white', description: 'text-primary-100' },\n outline: { eyebrow: 'text-primary-600', title: 'text-gray-900', description: 'text-gray-600' },\n image: { eyebrow: 'text-white/70', title: 'text-white', description: 'text-white/80' },\n}\n\nconst sizeClasses: Record<CtaSize, { wrapper: string; title: string; description: string; eyebrow: string }> = {\n sm: { wrapper: 'px-6 py-6 rounded-xl', title: 'text-xl font-bold', description: 'text-sm', eyebrow: 'text-xs' },\n md: { wrapper: 'px-8 py-10 rounded-2xl', title: 'text-2xl font-bold', description: 'text-base', eyebrow: 'text-xs' },\n lg: { wrapper: 'px-10 py-14 rounded-2xl', title: 'text-3xl font-bold', description: 'text-lg', eyebrow: 'text-sm' },\n xl: { wrapper: 'px-12 py-20 rounded-3xl', title: 'text-4xl font-extrabold leading-tight', description: 'text-xl', eyebrow: 'text-sm' },\n}\n\nconst alignClasses: Record<CtaAlign, { wrapper: string; actions: string }> = {\n left: { wrapper: 'items-start text-left', actions: 'justify-start' },\n center: { wrapper: 'items-center text-center', actions: 'justify-center' },\n right: { wrapper: 'items-end text-right', actions: 'justify-end' },\n}\n\n// ─── Component ───────────────────────────────────────────────────────────────\n\nexport function CallToAction({\n eyebrow,\n title,\n description,\n actions = [],\n align = 'center',\n layout = 'stacked',\n size = 'md',\n variant = 'default',\n background,\n backgroundImage,\n media,\n className = '',\n style,\n}: CallToActionProps) {\n const textColors = variantTextClasses[variant]\n const sizes = sizeClasses[size]\n const alignment = alignClasses[align]\n const isInline = layout === 'inline'\n\n const inlineStyle: CSSProperties = {\n ...(background ? { background } : {}),\n ...(backgroundImage ? { backgroundImage: `url(${backgroundImage})`, backgroundSize: 'cover', backgroundPosition: 'center' } : {}),\n ...style,\n }\n\n return (\n <div\n className={[\n 'w-full',\n variantClasses[variant],\n sizes.wrapper,\n className,\n ].filter(Boolean).join(' ')}\n style={Object.keys(inlineStyle).length ? inlineStyle : undefined}\n >\n {/* Image overlay */}\n {(variant === 'image' || backgroundImage) && (\n <div className=\"absolute inset-0 bg-black/50\" />\n )}\n\n <div className={`relative ${isInline ? 'flex flex-wrap items-center justify-between gap-6' : `flex flex-col gap-4 ${alignment.wrapper}`}`}>\n\n {/* Text block */}\n <div className={`flex flex-col gap-2 ${isInline ? 'flex-1 min-w-0' : alignment.wrapper}`}>\n {eyebrow && (\n <p className={`font-semibold uppercase tracking-widest ${sizes.eyebrow} ${textColors.eyebrow}`}>\n {eyebrow}\n </p>\n )}\n <h2 className={`${sizes.title} ${textColors.title}`}>\n {title}\n </h2>\n {description && (\n <p className={`max-w-2xl ${sizes.description} ${textColors.description}`}>\n {description}\n </p>\n )}\n </div>\n\n {/* Media slot */}\n {media && !isInline && (\n <div className=\"mt-2\">{media}</div>\n )}\n\n {/* Actions */}\n {actions.length > 0 && (\n <div className={`flex flex-wrap gap-3 ${isInline ? 'shrink-0' : alignment.actions}`}>\n {actions.map((action, i) => {\n const btn = (\n <Button\n key={i}\n variant={action.variant ?? (i === 0 ? resolveDefaultPrimaryVariant(variant) : 'outline')}\n size={action.size ?? (size === 'sm' ? 'sm' : size === 'xl' ? 'lg' : 'md')}\n onClick={action.onClick}\n >\n {action.label}\n </Button>\n )\n return action.href ? (\n <a key={i} href={action.href} className=\"contents\">{btn}</a>\n ) : btn\n })}\n </div>\n )}\n </div>\n </div>\n )\n}\n\n/** Pick a sensible default button variant that contrasts with the CTA background */\nfunction resolveDefaultPrimaryVariant(ctaVariant: CtaVariant): ButtonProps['variant'] {\n if (ctaVariant === 'default' || ctaVariant === 'outline') return 'primary'\n return 'secondary' // white-ish on dark/coloured backgrounds\n}\n","import type { ReactNode } from 'react';\nimport { Container } from '../common/Container';\n\n// ─── Types ────────────────────────────────────────────────────────────────────\n\nexport interface FooterContact {\n icon?: 'phone' | 'email' | 'address' | 'hours' | ReactNode;\n label: string;\n value: string;\n href?: string;\n}\n\nexport interface FooterLink {\n label: string;\n href?: string;\n onClick?: () => void;\n}\n\nexport interface FooterLinkGroup {\n heading: string;\n links: FooterLink[];\n}\n\nexport interface FooterSocialLink {\n label: string;\n href?: string;\n icon: 'facebook' | 'instagram' | 'twitter' | 'youtube' | 'tiktok' | ReactNode;\n}\n\nexport interface FooterProps {\n // Branding\n logo?: ReactNode;\n tagline?: string;\n\n // Contact section\n contactHeading?: string;\n contacts?: FooterContact[];\n\n // Links section\n linkGroups?: FooterLinkGroup[];\n\n // Social\n socialLinks?: FooterSocialLink[];\n\n // Bottom bar\n copyright?: string;\n bottomLinks?: FooterLink[];\n\n className?: string;\n}\n\n// ─── Icons ────────────────────────────────────────────────────────────────────\n\nfunction PhoneIcon() {\n return (\n <svg\n xmlns=\"http://www.w3.org/2000/svg\"\n fill=\"none\"\n viewBox=\"0 0 24 24\"\n strokeWidth={1.5}\n stroke=\"currentColor\"\n className=\"w-4 h-4 shrink-0\"\n >\n <path\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n d=\"M2.25 6.75c0 8.284 6.716 15 15 15h2.25a2.25 2.25 0 002.25-2.25v-1.372c0-.516-.351-.966-.852-1.091l-4.423-1.106c-.44-.11-.902.055-1.173.417l-.97 1.293c-.282.376-.769.542-1.21.38a12.035 12.035 0 01-7.143-7.143c-.162-.441.004-.928.38-1.21l1.293-.97c.363-.271.527-.734.417-1.173L6.963 3.102a1.125 1.125 0 00-1.091-.852H4.5A2.25 2.25 0 002.25 4.5v2.25z\"\n />\n </svg>\n );\n}\n\nfunction EmailIcon() {\n return (\n <svg\n xmlns=\"http://www.w3.org/2000/svg\"\n fill=\"none\"\n viewBox=\"0 0 24 24\"\n strokeWidth={1.5}\n stroke=\"currentColor\"\n className=\"w-4 h-4 shrink-0\"\n >\n <path\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n d=\"M21.75 6.75v10.5a2.25 2.25 0 01-2.25 2.25h-15a2.25 2.25 0 01-2.25-2.25V6.75m19.5 0A2.25 2.25 0 0019.5 4.5h-15a2.25 2.25 0 00-2.25 2.25m19.5 0v.243a2.25 2.25 0 01-1.07 1.916l-7.5 4.615a2.25 2.25 0 01-2.36 0L3.32 8.91a2.25 2.25 0 01-1.07-1.916V6.75\"\n />\n </svg>\n );\n}\n\nfunction AddressIcon() {\n return (\n <svg\n xmlns=\"http://www.w3.org/2000/svg\"\n fill=\"none\"\n viewBox=\"0 0 24 24\"\n strokeWidth={1.5}\n stroke=\"currentColor\"\n className=\"w-4 h-4 shrink-0\"\n >\n <path\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n d=\"M15 10.5a3 3 0 11-6 0 3 3 0 016 0z\"\n />\n <path\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n d=\"M19.5 10.5c0 7.142-7.5 11.25-7.5 11.25S4.5 17.642 4.5 10.5a7.5 7.5 0 1115 0z\"\n />\n </svg>\n );\n}\n\nfunction HoursIcon() {\n return (\n <svg\n xmlns=\"http://www.w3.org/2000/svg\"\n fill=\"none\"\n viewBox=\"0 0 24 24\"\n strokeWidth={1.5}\n stroke=\"currentColor\"\n className=\"w-4 h-4 shrink-0\"\n >\n <path\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n d=\"M12 6v6h4.5m4.5 0a9 9 0 11-18 0 9 9 0 0118 0z\"\n />\n </svg>\n );\n}\n\nfunction FacebookIcon() {\n return (\n <svg\n xmlns=\"http://www.w3.org/2000/svg\"\n viewBox=\"0 0 24 24\"\n fill=\"currentColor\"\n className=\"w-4 h-4\"\n >\n <path d=\"M24 12.073C24 5.405 18.627 0 12 0S0 5.405 0 12.073C0 18.1 4.388 23.094 10.125 24v-8.437H7.078v-3.49h3.047V9.41c0-3.025 1.792-4.697 4.533-4.697 1.312 0 2.686.236 2.686.236v2.97h-1.513c-1.491 0-1.956.93-1.956 1.886v2.267h3.328l-.532 3.49h-2.796V24C19.612 23.094 24 18.1 24 12.073z\" />\n </svg>\n );\n}\n\nfunction InstagramIcon() {\n return (\n <svg\n xmlns=\"http://www.w3.org/2000/svg\"\n viewBox=\"0 0 24 24\"\n fill=\"currentColor\"\n className=\"w-4 h-4\"\n >\n <path d=\"M12 2.163c3.204 0 3.584.012 4.85.07 3.252.148 4.771 1.691 4.919 4.919.058 1.265.069 1.645.069 4.849 0 3.205-.012 3.584-.069 4.849-.149 3.225-1.664 4.771-4.919 4.919-1.266.058-1.644.07-4.85.07-3.204 0-3.584-.012-4.849-.07-3.26-.149-4.771-1.699-4.919-4.92-.058-1.265-.07-1.644-.07-4.849 0-3.204.013-3.583.07-4.849.149-3.227 1.664-4.771 4.919-4.919 1.266-.057 1.645-.069 4.849-.069zm0-2.163c-3.259 0-3.667.014-4.947.072-4.358.2-6.78 2.618-6.98 6.98-.059 1.281-.073 1.689-.073 4.948 0 3.259.014 3.668.072 4.948.2 4.358 2.618 6.78 6.98 6.98 1.281.058 1.689.072 4.948.072 3.259 0 3.668-.014 4.948-.072 4.354-.2 6.782-2.618 6.979-6.98.059-1.28.073-1.689.073-4.948 0-3.259-.014-3.667-.072-4.947-.196-4.354-2.617-6.78-6.979-6.98-1.281-.059-1.69-.073-4.949-.073zm0 5.838a6.162 6.162 0 100 12.324 6.162 6.162 0 000-12.324zM12 16a4 4 0 110-8 4 4 0 010 8zm6.406-11.845a1.44 1.44 0 100 2.881 1.44 1.44 0 000-2.881z\" />\n </svg>\n );\n}\n\nfunction TwitterIcon() {\n return (\n <svg\n xmlns=\"http://www.w3.org/2000/svg\"\n viewBox=\"0 0 24 24\"\n fill=\"currentColor\"\n className=\"w-4 h-4\"\n >\n <path d=\"M18.244 2.25h3.308l-7.227 8.26 8.502 11.24H16.17l-5.214-6.817L4.99 21.75H1.68l7.73-8.835L1.254 2.25H8.08l4.713 6.231zm-1.161 17.52h1.833L7.084 4.126H5.117z\" />\n </svg>\n );\n}\n\nfunction YoutubeIcon() {\n return (\n <svg\n xmlns=\"http://www.w3.org/2000/svg\"\n viewBox=\"0 0 24 24\"\n fill=\"currentColor\"\n className=\"w-4 h-4\"\n >\n <path d=\"M23.498 6.186a3.016 3.016 0 00-2.122-2.136C19.505 3.545 12 3.545 12 3.545s-7.505 0-9.377.505A3.017 3.017 0 00.502 6.186C0 8.07 0 12 0 12s0 3.93.502 5.814a3.016 3.016 0 002.122 2.136c1.871.505 9.376.505 9.376.505s7.505 0 9.377-.505a3.015 3.015 0 002.122-2.136C24 15.93 24 12 24 12s0-3.93-.502-5.814zM9.545 15.568V8.432L15.818 12l-6.273 3.568z\" />\n </svg>\n );\n}\n\nfunction TiktokIcon() {\n return (\n <svg\n xmlns=\"http://www.w3.org/2000/svg\"\n viewBox=\"0 0 24 24\"\n fill=\"currentColor\"\n className=\"w-4 h-4\"\n >\n <path d=\"M19.59 6.69a4.83 4.83 0 01-3.77-4.25V2h-3.45v13.67a2.89 2.89 0 01-2.88 2.5 2.89 2.89 0 01-2.89-2.89 2.89 2.89 0 012.89-2.89c.28 0 .54.04.79.1V9.01a6.33 6.33 0 00-.79-.05 6.34 6.34 0 00-6.34 6.34 6.34 6.34 0 006.34 6.34 6.34 6.34 0 006.33-6.34V8.69a8.18 8.18 0 004.78 1.52V6.76a4.85 4.85 0 01-1.01-.07z\" />\n </svg>\n );\n}\n\nconst SOCIAL_ICONS = {\n facebook: FacebookIcon,\n instagram: InstagramIcon,\n twitter: TwitterIcon,\n youtube: YoutubeIcon,\n tiktok: TiktokIcon,\n};\nconst CONTACT_ICONS = {\n phone: PhoneIcon,\n email: EmailIcon,\n address: AddressIcon,\n hours: HoursIcon,\n};\n\nfunction resolveContactIcon(icon: FooterContact['icon']) {\n if (!icon) return null;\n if (typeof icon === 'string') {\n const Icon = CONTACT_ICONS[icon as keyof typeof CONTACT_ICONS];\n return Icon ? <Icon /> : null;\n }\n return icon;\n}\n\nfunction resolveSocialIcon(icon: FooterSocialLink['icon']) {\n if (typeof icon === 'string') {\n const Icon = SOCIAL_ICONS[icon as keyof typeof SOCIAL_ICONS];\n return Icon ? <Icon /> : null;\n }\n return icon;\n}\n\n// ─── Component ────────────────────────────────────────────────────────────────\n\nexport function Footer({\n logo,\n tagline,\n contactHeading = 'Kontakty',\n contacts = [],\n linkGroups = [],\n socialLinks = [],\n copyright,\n bottomLinks = [],\n className = '',\n}: FooterProps) {\n const year = new Date().getFullYear();\n\n return (\n <footer\n className={['bg-gray-900 text-gray-300', className]\n .filter(Boolean)\n .join(' ')}\n >\n <Container>\n {/* ── Main section ───────────────────────────────────────────────────── */}\n <div className=\"max-w-7xl mx-auto px-4 py-12 grid grid-cols-1 md:grid-cols-2 gap-10 lg:gap-16\">\n {/* ── Left: Contact section ──────────────────────────────────────── */}\n <div className=\"flex flex-col gap-6\">\n {/* Logo + tagline */}\n <div>\n {logo ? (\n <div className=\"mb-3\">{logo}</div>\n ) : (\n <span className=\"text-xl font-bold text-white tracking-tight mb-3 block\">\n shopito\n </span>\n )}\n {tagline && (\n <p className=\"text-sm text-gray-400 max-w-xs\">{tagline}</p>\n )}\n </div>\n\n {/* Contacts */}\n {contacts.length > 0 && (\n <div>\n <h3 className=\"text-xs font-semibold uppercase tracking-widest text-gray-500 mb-3\">\n {contactHeading}\n </h3>\n <ul className=\"space-y-3\">\n {contacts.map((c, i) => {\n const icon = resolveContactIcon(c.icon);\n const inner = (\n <div className=\"flex items-start gap-2.5\">\n {icon && (\n <span className=\"mt-0.5 text-primary-400\">\n {icon}\n </span>\n )}\n <div>\n <p className=\"text-xs text-gray-500 leading-none mb-0.5\">\n {c.label}\n </p>\n <p\n className={`text-sm text-gray-200 ${c.href ? 'hover:text-white transition-colors' : ''}`}\n >\n {c.value}\n </p>\n </div>\n </div>\n );\n\n return (\n <li key={i}>\n {c.href ? <a href={c.href}>{inner}</a> : inner}\n </li>\n );\n })}\n </ul>\n </div>\n )}\n\n {/* Social links */}\n {socialLinks.length > 0 && (\n <div className=\"flex gap-2 flex-wrap\">\n {socialLinks.map((s, i) => (\n <a\n key={i}\n href={s.href}\n aria-label={s.label}\n className=\"w-8 h-8 flex items-center justify-center rounded-lg bg-gray-800 text-gray-400 hover:bg-primary-600 hover:text-white transition-colors\"\n >\n {resolveSocialIcon(s.icon)}\n </a>\n ))}\n </div>\n )}\n </div>\n\n {/* ── Right: Link groups ─────────────────────────────────────────── */}\n {linkGroups.length > 0 && (\n <div\n className={`grid gap-8 ${linkGroups.length === 1 ? 'grid-cols-1' : linkGroups.length === 2 ? 'grid-cols-2' : 'grid-cols-2 sm:grid-cols-3'}`}\n >\n {linkGroups.map((group, gi) => (\n <div key={gi}>\n <h3 className=\"text-xs font-semibold uppercase tracking-widest text-gray-500 mb-3\">\n {group.heading}\n </h3>\n <ul className=\"space-y-2\">\n {group.links.map((link, li) => (\n <li key={li}>\n {link.href ? (\n <a\n href={link.href}\n className=\"text-sm text-gray-400 hover:text-white transition-colors\"\n >\n {link.label}\n </a>\n ) : (\n <button\n onClick={link.onClick}\n className=\"text-sm text-gray-400 hover:text-white transition-colors text-left\"\n >\n {link.label}\n </button>\n )}\n </li>\n ))}\n </ul>\n </div>\n ))}\n </div>\n )}\n </div>\n\n {/* ── Bottom bar ─────────────────────────────────────────────────────── */}\n <div className=\"border-t border-gray-800\">\n <div className=\"max-w-7xl mx-auto px-4 py-4 flex flex-wrap items-center justify-between gap-3\">\n <p className=\"text-xs text-gray-500\">\n {copyright ?? `© ${year} Shopito. Všechna práva vyhrazena.`}\n </p>\n {bottomLinks.length > 0 && (\n <nav className=\"flex flex-wrap gap-4\">\n {bottomLinks.map((link, i) =>\n link.href ? (\n <a\n key={i}\n href={link.href}\n className=\"text-xs text-gray-500 hover:text-gray-300 transition-colors\"\n >\n {link.label}\n </a>\n ) : (\n <button\n key={i}\n onClick={link.onClick}\n className=\"text-xs text-gray-500 hover:text-gray-300 transition-colors\"\n >\n {link.label}\n </button>\n ),\n )}\n </nav>\n )}\n </div>\n </div>\n </Container>\n </footer>\n );\n}\n"],"x_google_ignoreList":[2,22,23,24,25,26,27,28,29,30,31,32],"mappings":"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"}
1
+ {"version":3,"file":"index.js","names":["isObject","extend","getComputedStyle","isObject","extend","Swiper","extend","Pagination"],"sources":["../src/components/common/Container/Container.tsx","../src/components/common/Main/Main.tsx","../node_modules/classnames/index.js","../src/components/common/Button/Button.tsx","../src/components/common/LoadingSpin/LoadingSpin.tsx","../src/components/common/IconButton/IconButton.tsx","../src/components/common/Input/Input.tsx","../src/components/common/Select/Select.tsx","../src/components/common/Typography/Heading.tsx","../src/components/common/Typography/Text.tsx","../src/components/common/Badge/Badge.tsx","../src/components/common/Card/Card.tsx","../src/components/common/Spinner/Spinner.tsx","../src/components/common/Alert/Alert.tsx","../src/components/common/Modal/Modal.tsx","../src/components/common/Checkbox/Checkbox.tsx","../src/components/common/Toggle/Toggle.tsx","../src/components/common/Avatar/Avatar.tsx","../src/components/common/Stack/Stack.tsx","../src/components/common/Grid/Grid.tsx","../src/components/common/QuantityInput/QuantityInput.tsx","../src/components/common/Pagination/Pagination.tsx","../node_modules/swiper/shared/ssr-window.esm.mjs","../node_modules/swiper/shared/utils.mjs","../node_modules/swiper/shared/swiper-core.mjs","../node_modules/swiper/shared/update-swiper.mjs","../node_modules/swiper/shared/update-on-virtual-data.mjs","../node_modules/swiper/swiper-react.mjs","../node_modules/swiper/shared/create-element-if-not-defined.mjs","../node_modules/swiper/modules/navigation.mjs","../node_modules/swiper/shared/classes-to-selector.mjs","../node_modules/swiper/modules/pagination.mjs","../node_modules/swiper/modules/autoplay.mjs","../src/components/common/Carousel/Carousel.tsx","../src/components/Header/Header.tsx","../src/components/CategoryTree/CategoryTree.tsx","../src/components/MegaMenu/MegaMenu.tsx","../src/components/BannerCarousel/BannerCarousel.tsx","../src/components/ProductCard/ProductCard.tsx","../src/components/ProductGrid/ProductGrid.tsx","../src/components/CallToAction/CallToAction.tsx","../src/components/Footer/Footer.tsx"],"sourcesContent":["import { type ReactNode } from 'react';\n\nexport interface ContainerProps {\n children: ReactNode;\n}\n\nexport const Container = ({ children }: ContainerProps) => {\n return <div className=\"container\">{children}</div>;\n};\n","import { type ReactNode } from 'react';\nimport { Container } from '../Container';\n\nexport interface MainProps {\n children: ReactNode;\n}\n\nexport const Main = ({ children }: MainProps) => {\n return (\n <main className=\"main\">\n <Container>{children}</Container>\n </main>\n );\n};\n","/*!\n\tCopyright (c) 2018 Jed Watson.\n\tLicensed under the MIT License (MIT), see\n\thttp://jedwatson.github.io/classnames\n*/\n/* global define */\n\n(function () {\n\t'use strict';\n\n\tvar hasOwn = {}.hasOwnProperty;\n\n\tfunction classNames () {\n\t\tvar classes = '';\n\n\t\tfor (var i = 0; i < arguments.length; i++) {\n\t\t\tvar arg = arguments[i];\n\t\t\tif (arg) {\n\t\t\t\tclasses = appendClass(classes, parseValue(arg));\n\t\t\t}\n\t\t}\n\n\t\treturn classes;\n\t}\n\n\tfunction parseValue (arg) {\n\t\tif (typeof arg === 'string' || typeof arg === 'number') {\n\t\t\treturn arg;\n\t\t}\n\n\t\tif (typeof arg !== 'object') {\n\t\t\treturn '';\n\t\t}\n\n\t\tif (Array.isArray(arg)) {\n\t\t\treturn classNames.apply(null, arg);\n\t\t}\n\n\t\tif (arg.toString !== Object.prototype.toString && !arg.toString.toString().includes('[native code]')) {\n\t\t\treturn arg.toString();\n\t\t}\n\n\t\tvar classes = '';\n\n\t\tfor (var key in arg) {\n\t\t\tif (hasOwn.call(arg, key) && arg[key]) {\n\t\t\t\tclasses = appendClass(classes, key);\n\t\t\t}\n\t\t}\n\n\t\treturn classes;\n\t}\n\n\tfunction appendClass (value, newClass) {\n\t\tif (!newClass) {\n\t\t\treturn value;\n\t\t}\n\t\n\t\tif (value) {\n\t\t\treturn value + ' ' + newClass;\n\t\t}\n\t\n\t\treturn value + newClass;\n\t}\n\n\tif (typeof module !== 'undefined' && module.exports) {\n\t\tclassNames.default = classNames;\n\t\tmodule.exports = classNames;\n\t} else if (typeof define === 'function' && typeof define.amd === 'object' && define.amd) {\n\t\t// register as 'classnames', consistent with npm package name\n\t\tdefine('classnames', [], function () {\n\t\t\treturn classNames;\n\t\t});\n\t} else {\n\t\twindow.classNames = classNames;\n\t}\n}());\n","import { forwardRef } from 'react';\nimport type { ButtonHTMLAttributes } from 'react';\nimport clx from 'classnames';\n\ntype Variant = 'primary' | 'secondary' | 'outline' | 'ghost' | 'danger';\ntype Size = 'xs' | 'sm' | 'md' | 'lg';\n\nexport interface ButtonProps extends ButtonHTMLAttributes<HTMLButtonElement> {\n variant?: Variant;\n size?: Size;\n loading?: boolean;\n fullWidth?: boolean;\n}\n\n// const variantClasses: Record<Variant, string> = {\n// primary:\n// 'bg-primary-600 text-white hover:bg-primary-700 active:bg-primary-800 focus-visible:ring-primary-500',\n// secondary:\n// 'bg-gray-100 text-gray-900 hover:bg-gray-200 active:bg-gray-300 focus-visible:ring-gray-400',\n// outline:\n// 'border border-gray-300 bg-white text-gray-700 hover:bg-gray-50 active:bg-gray-100 focus-visible:ring-gray-400',\n// ghost:\n// 'bg-transparent text-gray-700 hover:bg-gray-100 active:bg-gray-200 focus-visible:ring-gray-400',\n// danger:\n// 'bg-danger-600 text-white hover:bg-danger-700 active:bg-danger-800 focus-visible:ring-danger-500',\n// };\n\n// const sizeClasses: Record<Size, string> = {\n// xs: 'h-7 px-2.5 text-xs gap-1',\n// sm: 'h-8 px-3 text-sm gap-1.5',\n// md: 'h-10 px-4 text-sm gap-2',\n// lg: 'h-11 px-5 text-base gap-2',\n// };\n\nexport const Button = forwardRef<HTMLButtonElement, ButtonProps>(\n (\n {\n variant = 'primary',\n size = 'md',\n loading = false,\n fullWidth = false,\n disabled,\n children,\n className = '',\n ...props\n },\n ref,\n ) => {\n const isDisabled = disabled || loading;\n\n return (\n <button\n ref={ref}\n disabled={isDisabled}\n className={clx(\n 'btn',\n variant && `btn-${variant}`,\n size && `btn-${size}`,\n fullWidth && 'w-full',\n className,\n )}\n {...props}\n >\n {loading && (\n <svg\n className=\"animate-spin h-4 w-4 shrink-0\"\n xmlns=\"http://www.w3.org/2000/svg\"\n fill=\"none\"\n viewBox=\"0 0 24 24\"\n >\n <circle\n className=\"opacity-25\"\n cx=\"12\"\n cy=\"12\"\n r=\"10\"\n stroke=\"currentColor\"\n strokeWidth=\"4\"\n />\n <path\n className=\"opacity-75\"\n fill=\"currentColor\"\n d=\"M4 12a8 8 0 018-8V0C5.373 0 0 5.373 0 12h4z\"\n />\n </svg>\n )}\n {children}\n </button>\n );\n },\n);\n\nButton.displayName = 'Button';\n","import clx from 'classnames';\n\ntype Size = 'xs' | 'sm' | 'md' | 'lg';\n\nexport interface LoadingSpinProps {\n size: Size;\n}\n\nexport const LoadingSpin = ({ size = 'md' }: LoadingSpinProps) => {\n return (\n <svg\n className={clx('loading-spin', `loading-spin-${size}`)}\n xmlns=\"http://www.w3.org/2000/svg\"\n fill=\"none\"\n viewBox=\"0 0 24 24\"\n >\n <circle\n className=\"opacity-25\"\n cx=\"12\"\n cy=\"12\"\n r=\"10\"\n stroke=\"currentColor\"\n strokeWidth=\"4\"\n />\n <path\n className=\"opacity-75\"\n fill=\"currentColor\"\n d=\"M4 12a8 8 0 018-8V0C5.373 0 0 5.373 0 12h4z\"\n />\n </svg>\n );\n};\n","import { forwardRef } from 'react';\nimport type { ButtonHTMLAttributes, ReactNode } from 'react';\nimport clx from 'classnames';\nimport { LoadingSpin } from '../LoadingSpin';\n\ntype Variant = 'primary' | 'secondary' | 'outline' | 'ghost' | 'danger';\ntype Size = 'xs' | 'sm' | 'md' | 'lg';\n\nexport interface IconButtonProps extends ButtonHTMLAttributes<HTMLButtonElement> {\n icon: ReactNode;\n label: string;\n variant?: Variant;\n size?: Size;\n loading?: boolean;\n}\n\nexport const IconButton = forwardRef<HTMLButtonElement, IconButtonProps>(\n (\n {\n icon,\n label,\n variant = 'ghost',\n size = 'md',\n loading = false,\n disabled,\n className = '',\n ...props\n },\n ref,\n ) => {\n const isDisabled = disabled || loading;\n\n return (\n <button\n ref={ref}\n disabled={isDisabled}\n aria-label={label}\n title={label}\n className={clx(\n 'icon-button',\n `icon-button-${variant}`,\n `icon-button-${size}`,\n className,\n )}\n {...props}\n >\n {loading ? <LoadingSpin size={size} /> : icon}\n </button>\n );\n },\n);\n\nIconButton.displayName = 'IconButton';\n","import { forwardRef } from 'react';\nimport type { InputHTMLAttributes, ReactNode } from 'react';\nimport clx from 'classnames';\n\nexport interface InputProps extends InputHTMLAttributes<HTMLInputElement> {\n label?: string;\n error?: string;\n hint?: string;\n leftIcon?: ReactNode;\n rightIcon?: ReactNode;\n}\n\nexport const Input = forwardRef<HTMLInputElement, InputProps>(\n (\n { label, error, hint, leftIcon, rightIcon, className = '', id, ...props },\n ref,\n ) => {\n const inputId = id ?? label?.toLowerCase().replace(/\\s+/g, '-');\n\n return (\n <div className={'w-full'}>\n {label && (\n <label htmlFor={inputId} className=\"input-label\">\n {label}\n </label>\n )}\n <div className=\"relative\">\n {leftIcon && <span className=\"left-icon\">{leftIcon}</span>}\n <input\n ref={ref}\n id={inputId}\n className={clx(\n 'input',\n error && 'has-error',\n !!leftIcon && 'with-left-icon',\n !!rightIcon && 'with-right-icon',\n 'w-full',\n className,\n )}\n {...props}\n />\n {rightIcon && <span className=\"right-icon\">{rightIcon}</span>}\n </div>\n {(error || hint) && (\n <p className={clx('helper-text', error && 'has-error')}>\n {error ?? hint}\n </p>\n )}\n </div>\n );\n },\n);\n\nInput.displayName = 'Input';\n","import { forwardRef } from 'react';\nimport type { SelectHTMLAttributes } from 'react';\nimport clx from 'classnames';\n\nexport interface SelectOption {\n value: string;\n label: string;\n disabled?: boolean;\n}\n\nexport interface SelectProps extends SelectHTMLAttributes<HTMLSelectElement> {\n label?: string;\n error?: string;\n hint?: string;\n options: SelectOption[];\n placeholder?: string;\n}\n\nexport const Select = forwardRef<HTMLSelectElement, SelectProps>(\n (\n { label, error, hint, options, placeholder, className = '', id, ...props },\n ref,\n ) => {\n const selectId = id ?? label?.toLowerCase().replace(/\\s+/g, '-');\n\n return (\n <div className={clx('select-wrapper', 'w-full')}>\n {label && (\n <label htmlFor={selectId} className=\"select-label\">\n {label}\n </label>\n )}\n <div className=\"relative\">\n <select\n ref={ref}\n id={selectId}\n className={clx('select', 'w-full', error && 'has-error', className)}\n {...props}\n >\n {placeholder && (\n <option value=\"\" disabled>\n {placeholder}\n </option>\n )}\n {options.map((opt) => (\n <option key={opt.value} value={opt.value} disabled={opt.disabled}>\n {opt.label}\n </option>\n ))}\n </select>\n {/* Chevron icon */}\n <span className=\"select-chevron-icon\">\n <svg\n xmlns=\"http://www.w3.org/2000/svg\"\n fill=\"none\"\n viewBox=\"0 0 24 24\"\n strokeWidth={2}\n stroke=\"currentColor\"\n className=\"w-4 h-4\"\n >\n <path\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n d=\"M19.5 8.25l-7.5 7.5-7.5-7.5\"\n />\n </svg>\n </span>\n </div>\n {(error || hint) && (\n <p className={clx('select-helper', error && 'has-error')}>\n {error ?? hint}\n </p>\n )}\n </div>\n );\n },\n);\n\nSelect.displayName = 'Select';\n","import type { HTMLAttributes, ReactNode } from 'react';\nimport cx from 'classnames';\nimport type { Color } from './Text';\n\ntype HeadingLevel = 'h1' | 'h2' | 'h3' | 'h4' | 'h5' | 'h6';\n\ninterface HeadingProps extends HTMLAttributes<HTMLHeadingElement> {\n as?: HeadingLevel;\n level?: 1 | 2 | 3 | 4 | 5 | 6;\n color?: Color;\n children: ReactNode;\n}\n\nexport const Heading = ({\n as,\n level = 1,\n color = 'default',\n className = '',\n children,\n ...props\n}: HeadingProps) => {\n const Tag = as ?? (`h${level}` as HeadingLevel);\n\n return (\n <Tag\n className={cx(`text-color-${color}`, `heading-size-${level}`, className)}\n {...props}\n >\n {children}\n </Tag>\n );\n};\n","import type { ElementType, HTMLAttributes, ReactNode } from 'react';\nimport cx from 'classnames';\n\ntype TextVariant = 'body' | 'body-sm' | 'caption' | 'overline' | 'code';\n\nexport type Color =\n | 'default'\n | 'muted'\n | 'primary'\n | 'success'\n | 'warning'\n | 'danger'\n | 'inherit';\n\ninterface TextProps extends HTMLAttributes<HTMLElement> {\n variant?: TextVariant;\n color?: Color;\n as?: ElementType;\n children: ReactNode;\n}\n\nexport const Text = ({\n variant = 'body',\n color = 'default',\n as: Tag = 'p',\n className = '',\n children,\n ...props\n}: TextProps) => {\n return (\n <Tag\n className={cx(\n `text-color-${color}`,\n `text-variant-${variant}`,\n className,\n )}\n {...props}\n >\n {children}\n </Tag>\n );\n};\n","import type { HTMLAttributes, ReactNode } from 'react';\nimport clx from 'classnames';\n\ntype BadgeVariant =\n | 'default'\n | 'primary'\n | 'success'\n | 'warning'\n | 'danger'\n | 'outline';\n\ntype BadgeSize = 'sm' | 'md';\n\nexport interface BadgeProps extends HTMLAttributes<HTMLSpanElement> {\n variant?: BadgeVariant;\n size?: BadgeSize;\n dot?: boolean;\n children: ReactNode;\n}\n\nexport function Badge({\n variant = 'default',\n size = 'md',\n dot = false,\n className,\n children,\n ...props\n}: BadgeProps) {\n return (\n <span\n className={clx('badge', `badge-${variant}`, `badge-${size}`, className)}\n {...props}\n >\n {dot && <span className={clx('badge-dot', `badge-dot-${variant}`)} />}\n {children}\n </span>\n );\n}\n","import type { HTMLAttributes, ReactNode } from 'react'\n\nexport interface CardProps extends HTMLAttributes<HTMLDivElement> {\n children: ReactNode\n padding?: 'none' | 'sm' | 'md' | 'lg'\n shadow?: boolean\n border?: boolean\n}\n\nexport interface CardHeaderProps extends HTMLAttributes<HTMLDivElement> {\n children: ReactNode\n}\n\nexport interface CardBodyProps extends HTMLAttributes<HTMLDivElement> {\n children: ReactNode\n}\n\nexport interface CardFooterProps extends HTMLAttributes<HTMLDivElement> {\n children: ReactNode\n}\n\nconst paddingClasses = {\n none: '',\n sm: 'p-4',\n md: 'p-6',\n lg: 'p-8',\n}\n\nexport function Card({\n children,\n padding = 'md',\n shadow = true,\n border = true,\n className = '',\n ...props\n}: CardProps) {\n return (\n <div\n className={[\n 'bg-white rounded-xl overflow-hidden',\n border ? 'border border-gray-200' : '',\n shadow ? 'shadow-sm' : '',\n paddingClasses[padding],\n className,\n ]\n .filter(Boolean)\n .join(' ')}\n {...props}\n >\n {children}\n </div>\n )\n}\n\nexport function CardHeader({ children, className = '', ...props }: CardHeaderProps) {\n return (\n <div\n className={['px-6 py-4 border-b border-gray-100', className].filter(Boolean).join(' ')}\n {...props}\n >\n {children}\n </div>\n )\n}\n\nexport function CardBody({ children, className = '', ...props }: CardBodyProps) {\n return (\n <div className={['p-6', className].filter(Boolean).join(' ')} {...props}>\n {children}\n </div>\n )\n}\n\nexport function CardFooter({ children, className = '', ...props }: CardFooterProps) {\n return (\n <div\n className={[\n 'px-6 py-4 border-t border-gray-100 bg-gray-50',\n className,\n ]\n .filter(Boolean)\n .join(' ')}\n {...props}\n >\n {children}\n </div>\n )\n}\n","import type { HTMLAttributes } from 'react';\nimport clx from 'classnames';\n\ntype SpinnerSize = 'xs' | 'sm' | 'md' | 'lg' | 'xl';\ntype SpinnerColor = 'primary' | 'white' | 'gray';\n\nexport interface SpinnerProps extends HTMLAttributes<HTMLSpanElement> {\n size?: SpinnerSize;\n color?: SpinnerColor;\n label?: string;\n}\n\nexport function Spinner({\n size = 'md',\n color = 'primary',\n label = 'Loading…',\n className = '',\n ...props\n}: SpinnerProps) {\n return (\n <span\n role=\"status\"\n aria-label={label}\n className={clx('spinner-wrapper', className)}\n {...props}\n >\n <span className={clx('spinner', `spinner-${size}`, `spinner-${color}`)} />\n <span className=\"sr-only\">{label}</span>\n </span>\n );\n}\n","import type { HTMLAttributes, ReactNode } from 'react';\nimport clx from 'classnames';\n\ntype AlertVariant = 'info' | 'success' | 'warning' | 'danger';\n\nexport interface AlertProps extends HTMLAttributes<HTMLDivElement> {\n variant?: AlertVariant;\n title?: string;\n children: ReactNode;\n onClose?: () => void;\n}\n\nconst variantIcon: Record<AlertVariant, ReactNode> = {\n info: (\n <path\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n d=\"M11.25 11.25l.041-.02a.75.75 0 011.063.852l-.708 2.836a.75.75 0 001.063.853l.041-.021M21 12a9 9 0 11-18 0 9 9 0 0118 0zm-9-3.75h.008v.008H12V8.25z\"\n />\n ),\n success: (\n <path\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n d=\"M9 12.75L11.25 15 15 9.75M21 12a9 9 0 11-18 0 9 9 0 0118 0z\"\n />\n ),\n warning: (\n <path\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n d=\"M12 9v3.75m-9.303 3.376c-.866 1.5.217 3.374 1.948 3.374h14.71c1.73 0 2.813-1.874 1.948-3.374L13.949 3.378c-.866-1.5-3.032-1.5-3.898 0L2.697 16.126zM12 15.75h.007v.008H12v-.008z\"\n />\n ),\n danger: (\n <path\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n d=\"M12 9v3.75m9-.75a9 9 0 11-18 0 9 9 0 0118 0zm-9 3.75h.008v.008H12v-.008z\"\n />\n ),\n};\n\nexport function Alert({\n variant = 'info',\n title,\n children,\n onClose,\n className = '',\n ...props\n}: AlertProps) {\n return (\n <div\n role=\"alert\"\n className={clx('alert', `alert-${variant}`, 'w-full', className)}\n {...props}\n >\n <svg\n xmlns=\"http://www.w3.org/2000/svg\"\n fill=\"none\"\n viewBox=\"0 0 24 24\"\n strokeWidth={1.5}\n stroke=\"currentColor\"\n className={clx('alert-icon', `alert-icon-${variant}`)}\n >\n {variantIcon[variant]}\n </svg>\n <div className=\"flex-1 min-w-0\">\n {title && <p className=\"alert-title\">{title}</p>}\n <div className=\"alert-text\">{children}</div>\n </div>\n {onClose && (\n <button\n onClick={onClose}\n className=\"alert-close-btn\"\n aria-label=\"Close\"\n >\n <svg\n xmlns=\"http://www.w3.org/2000/svg\"\n fill=\"none\"\n viewBox=\"0 0 24 24\"\n strokeWidth={1.5}\n stroke=\"currentColor\"\n className=\"w-4 h-4\"\n >\n <path\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n d=\"M6 18L18 6M6 6l12 12\"\n />\n </svg>\n </button>\n )}\n </div>\n );\n}\n","import { useEffect, useRef } from 'react'\nimport type { ReactNode } from 'react'\nimport { createPortal } from 'react-dom'\n\ntype ModalSize = 'sm' | 'md' | 'lg' | 'xl' | 'full'\n\nexport interface ModalProps {\n open: boolean\n onClose: () => void\n title?: string\n children: ReactNode\n footer?: ReactNode\n size?: ModalSize\n closeOnBackdrop?: boolean\n}\n\nconst sizeClasses: Record<ModalSize, string> = {\n sm: 'max-w-sm',\n md: 'max-w-md',\n lg: 'max-w-lg',\n xl: 'max-w-xl',\n full: 'max-w-full mx-4',\n}\n\nexport function Modal({\n open,\n onClose,\n title,\n children,\n footer,\n size = 'md',\n closeOnBackdrop = true,\n}: ModalProps) {\n const backdropRef = useRef<HTMLDivElement>(null)\n\n useEffect(() => {\n if (!open) return\n const prev = document.body.style.overflow\n document.body.style.overflow = 'hidden'\n return () => {\n document.body.style.overflow = prev\n }\n }, [open])\n\n useEffect(() => {\n if (!open) return\n const onKey = (e: KeyboardEvent) => {\n if (e.key === 'Escape') onClose()\n }\n document.addEventListener('keydown', onKey)\n return () => document.removeEventListener('keydown', onKey)\n }, [open, onClose])\n\n if (!open) return null\n\n return createPortal(\n <div\n ref={backdropRef}\n className=\"fixed inset-0 z-50 flex items-center justify-center p-4 bg-black/50 backdrop-blur-sm\"\n onClick={(e) => {\n if (closeOnBackdrop && e.target === backdropRef.current) onClose()\n }}\n >\n <div\n role=\"dialog\"\n aria-modal=\"true\"\n aria-labelledby={title ? 'modal-title' : undefined}\n className={[\n 'relative w-full bg-white rounded-xl shadow-xl flex flex-col max-h-[90vh]',\n sizeClasses[size],\n ].join(' ')}\n >\n {title && (\n <div className=\"flex items-center justify-between px-6 py-4 border-b border-gray-100 shrink-0\">\n <h2 id=\"modal-title\" className=\"text-lg font-semibold text-gray-900\">\n {title}\n </h2>\n <button\n onClick={onClose}\n className=\"text-gray-400 hover:text-gray-600 transition-colors\"\n aria-label=\"Close modal\"\n >\n <svg\n xmlns=\"http://www.w3.org/2000/svg\"\n fill=\"none\"\n viewBox=\"0 0 24 24\"\n strokeWidth={1.5}\n stroke=\"currentColor\"\n className=\"w-5 h-5\"\n >\n <path\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n d=\"M6 18L18 6M6 6l12 12\"\n />\n </svg>\n </button>\n </div>\n )}\n <div className=\"flex-1 overflow-y-auto px-6 py-4\">{children}</div>\n {footer && (\n <div className=\"px-6 py-4 border-t border-gray-100 shrink-0 bg-gray-50 rounded-b-xl\">\n {footer}\n </div>\n )}\n </div>\n </div>,\n document.body,\n )\n}\n","import { forwardRef } from 'react';\nimport type { InputHTMLAttributes } from 'react';\nimport clx from 'classnames';\n\nexport interface CheckboxProps extends Omit<\n InputHTMLAttributes<HTMLInputElement>,\n 'type'\n> {\n label?: string;\n description?: string;\n error?: string;\n indeterminate?: boolean;\n}\n\nexport const Checkbox = forwardRef<HTMLInputElement, CheckboxProps>(\n (\n { label, description, error, indeterminate, className = '', id, ...props },\n ref,\n ) => {\n const inputId = id ?? label?.toLowerCase().replace(/\\s+/g, '-');\n\n return (\n <div className={clx('checkbox-wrapper', className)}>\n <div className=\"checkbox-wrapper-inner\">\n <input\n ref={(el) => {\n if (el) el.indeterminate = indeterminate ?? false;\n if (typeof ref === 'function') ref(el);\n else if (ref) ref.current = el;\n }}\n id={inputId}\n type=\"checkbox\"\n className={clx('checkbox', error && 'has-error')}\n {...props}\n />\n </div>\n {(label || description) && (\n <div>\n {label && (\n <label htmlFor={inputId} className=\"checkbox-label\">\n {label}\n </label>\n )}\n {description && (\n <p className=\"checkbox-description\">{description}</p>\n )}\n {error && <p className=\"checkbox-error\">{error}</p>}\n </div>\n )}\n </div>\n );\n },\n);\n\nCheckbox.displayName = 'Checkbox';\n","import { forwardRef } from 'react';\nimport type { InputHTMLAttributes } from 'react';\nimport clx from 'classnames';\n\ntype ToggleSize = 'sm' | 'md' | 'lg';\n\nexport interface ToggleProps extends Omit<\n InputHTMLAttributes<HTMLInputElement>,\n 'type' | 'size'\n> {\n label?: string;\n description?: string;\n size?: ToggleSize;\n}\n\nexport const Toggle = forwardRef<HTMLInputElement, ToggleProps>(\n ({ label, description, size = 'md', className = '', id, ...props }, ref) => {\n const inputId = id ?? label?.toLowerCase().replace(/\\s+/g, '-');\n\n return (\n <label\n htmlFor={inputId}\n className={clx(\n 'toggle',\n props.disabled && 'toggle-disabled',\n className,\n )}\n >\n <div className={clx('toggle-wrapper', `toggle-wrapper-${size}`)}>\n <input\n ref={ref}\n id={inputId}\n type=\"checkbox\"\n role=\"switch\"\n className=\"sr-only peer\"\n {...props}\n />\n <div className=\"toggle-track\" />\n <div className={clx('toggle-thumb', `toggle-thumb-${size}`)} />\n </div>\n {(label || description) && (\n <div>\n {label && <span className=\"toggle-label\">{label}</span>}\n {description && (\n <span className=\"toggle-description\">{description}</span>\n )}\n </div>\n )}\n </label>\n );\n },\n);\n\nToggle.displayName = 'Toggle';\n","import type { HTMLAttributes, ReactNode } from 'react';\nimport clx from 'classnames';\n\ntype AvatarSize = 'xs' | 'sm' | 'md' | 'lg' | 'xl';\n\nexport interface AvatarProps extends HTMLAttributes<HTMLSpanElement> {\n src?: string;\n alt?: string;\n name?: string;\n size?: AvatarSize;\n}\n\nexport interface AvatarGroupProps extends HTMLAttributes<HTMLDivElement> {\n max?: number;\n size?: AvatarSize;\n children: ReactNode;\n}\n\nconst bgColors = [\n 'bg-red-500',\n 'bg-orange-500',\n 'bg-amber-500',\n 'bg-emerald-500',\n 'bg-teal-500',\n 'bg-cyan-500',\n 'bg-blue-500',\n 'bg-violet-500',\n 'bg-pink-500',\n];\n\nexport function Avatar({\n src,\n alt,\n name,\n size = 'md',\n className,\n ...props\n}: AvatarProps) {\n const baseClasses = ['avatar', `avatar-${size}`, className];\n\n const nameToColor = (n: string) => {\n let hash = 0;\n for (let i = 0; i < n.length; i++) hash += n.charCodeAt(i);\n return bgColors[hash % bgColors.length];\n };\n\n const getInitials = (name: string) =>\n name\n .split(' ')\n .slice(0, 2)\n .map((n) => n[0])\n .join('')\n .toUpperCase();\n\n if (src) {\n return (\n <span className={clx(baseClasses)} {...props}>\n <img\n src={src}\n alt={alt ?? name ?? ''}\n className=\"w-full h-full object-cover\"\n />\n </span>\n );\n }\n\n if (name) {\n return (\n <span\n className={clx(baseClasses, nameToColor(name))}\n aria-label={name}\n {...props}\n >\n {getInitials(name)}\n </span>\n );\n }\n\n // Fallback icon\n return (\n <span className={clx(baseClasses, 'avatar-fallback')} {...props}>\n <svg\n xmlns=\"http://www.w3.org/2000/svg\"\n fill=\"currentColor\"\n viewBox=\"0 0 24 24\"\n className=\"w-3/5 h-3/5\"\n >\n <path\n fillRule=\"evenodd\"\n d=\"M7.5 6a4.5 4.5 0 119 0 4.5 4.5 0 01-9 0zM3.751 20.105a8.25 8.25 0 0116.498 0 .75.75 0 01-.437.695A18.683 18.683 0 0112 22.5c-2.786 0-5.433-.608-7.812-1.7a.75.75 0 01-.437-.695z\"\n clipRule=\"evenodd\"\n />\n </svg>\n </span>\n );\n}\n","import type { ReactNode } from 'react';\nimport cx from 'classnames';\n\ninterface StackProps {\n direction?: 'row' | 'column';\n gap?: number;\n alignItems?: 'start' | 'end' | 'center' | 'baseline' | 'stretch';\n justifyItems?: 'start' | 'end' | 'center' | 'stretch';\n justifyContent?:\n | 'normal'\n | 'start'\n | 'end'\n | 'center'\n | 'between'\n | 'around'\n | 'evenly'\n | 'stretch';\n className?: string;\n children?: ReactNode;\n}\n\nexport const Stack = ({\n direction = 'row',\n gap,\n alignItems = 'start',\n justifyItems = 'start',\n justifyContent = 'normal',\n className,\n children,\n}: StackProps) => {\n const alignItemsMap: Record<string, string> = {\n start: 'items-start',\n end: 'items-end',\n center: 'items-center',\n baseline: 'items-baseline',\n stretch: 'items-stretch',\n };\n\n const justifyItemsMap: Record<string, string> = {\n start: 'justify-items-start',\n end: 'justify-items-end',\n center: 'justify-items-center',\n stretch: 'justify-items-stretch',\n };\n\n const justifyContentMap: Record<string, string> = {\n normal: 'justify-normal',\n start: 'justify-start',\n end: 'justify-end',\n center: 'justify-center',\n between: 'justify-between',\n around: 'justify-around',\n evenly: 'justify-evenly',\n stretch: 'justify-stretch',\n };\n\n return (\n <div\n className={cx(\n 'stack',\n `stack-${direction}`,\n gap && `gap-${gap}`,\n alignItemsMap[alignItems],\n justifyItemsMap[justifyItems],\n justifyContentMap[justifyContent],\n className,\n )}\n >\n {children}\n </div>\n );\n};\n","import type { ElementType, HTMLAttributes, ReactNode } from 'react';\nimport cx from 'classnames';\n\n// ─── Types ────────────────────────────────────────────────────────────────────\n\nexport type ColSpan = 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12;\nexport type ColOffset = 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11;\nexport type GridCols = 1 | 2 | 3 | 4 | 6 | 12;\nexport type GapSize = 0 | 1 | 2 | 3 | 4 | 5 | 6 | 8 | 10 | 12 | 16;\n\nexport interface GridProps {\n children?: ReactNode;\n cols?: GridCols;\n gap?: GapSize;\n rowGap?: GapSize;\n colGap?: GapSize;\n as?: ElementType;\n className?: string;\n}\n\nexport interface ColProps extends HTMLAttributes<HTMLDivElement> {\n children?: ReactNode;\n /** Výchozí šířka (mobile-first) */\n span?: ColSpan;\n sm?: ColSpan;\n md?: ColSpan;\n lg?: ColSpan;\n xl?: ColSpan;\n /** Přeskočit N sloupců od aktuální pozice (mobile-first) */\n offset?: ColOffset;\n smOffset?: ColOffset;\n mdOffset?: ColOffset;\n lgOffset?: ColOffset;\n xlOffset?: ColOffset;\n}\n\n// ─── Class maps — všechny literální stringy, Tailwind je detekuje při scanu ──\n\nconst colsMap: Record<GridCols, string> = {\n 1: 'grid-cols-1',\n 2: 'grid-cols-2',\n 3: 'grid-cols-3',\n 4: 'grid-cols-4',\n 6: 'grid-cols-6',\n 12: 'grid-cols-12',\n};\n\nconst gapMap: Record<GapSize, string> = {\n 0: 'gap-0',\n 1: 'gap-1',\n 2: 'gap-2',\n 3: 'gap-3',\n 4: 'gap-4',\n 5: 'gap-5',\n 6: 'gap-6',\n 8: 'gap-8',\n 10: 'gap-10',\n 12: 'gap-12',\n 16: 'gap-16',\n};\n\nconst rowGapMap: Record<GapSize, string> = {\n 0: 'gap-y-0',\n 1: 'gap-y-1',\n 2: 'gap-y-2',\n 3: 'gap-y-3',\n 4: 'gap-y-4',\n 5: 'gap-y-5',\n 6: 'gap-y-6',\n 8: 'gap-y-8',\n 10: 'gap-y-10',\n 12: 'gap-y-12',\n 16: 'gap-y-16',\n};\n\nconst colGapMap: Record<GapSize, string> = {\n 0: 'gap-x-0',\n 1: 'gap-x-1',\n 2: 'gap-x-2',\n 3: 'gap-x-3',\n 4: 'gap-x-4',\n 5: 'gap-x-5',\n 6: 'gap-x-6',\n 8: 'gap-x-8',\n 10: 'gap-x-10',\n 12: 'gap-x-12',\n 16: 'gap-x-16',\n};\n\n// Span — bez prefixu (výchozí, mobile-first)\nconst spanMap: Record<ColSpan, string> = {\n 1: 'col-span-1',\n 2: 'col-span-2',\n 3: 'col-span-3',\n 4: 'col-span-4',\n 5: 'col-span-5',\n 6: 'col-span-6',\n 7: 'col-span-7',\n 8: 'col-span-8',\n 9: 'col-span-9',\n 10: 'col-span-10',\n 11: 'col-span-11',\n 12: 'col-span-12',\n};\n\nconst smSpanMap: Record<ColSpan, string> = {\n 1: 'sm:col-span-1',\n 2: 'sm:col-span-2',\n 3: 'sm:col-span-3',\n 4: 'sm:col-span-4',\n 5: 'sm:col-span-5',\n 6: 'sm:col-span-6',\n 7: 'sm:col-span-7',\n 8: 'sm:col-span-8',\n 9: 'sm:col-span-9',\n 10: 'sm:col-span-10',\n 11: 'sm:col-span-11',\n 12: 'sm:col-span-12',\n};\n\nconst mdSpanMap: Record<ColSpan, string> = {\n 1: 'md:col-span-1',\n 2: 'md:col-span-2',\n 3: 'md:col-span-3',\n 4: 'md:col-span-4',\n 5: 'md:col-span-5',\n 6: 'md:col-span-6',\n 7: 'md:col-span-7',\n 8: 'md:col-span-8',\n 9: 'md:col-span-9',\n 10: 'md:col-span-10',\n 11: 'md:col-span-11',\n 12: 'md:col-span-12',\n};\n\nconst lgSpanMap: Record<ColSpan, string> = {\n 1: 'lg:col-span-1',\n 2: 'lg:col-span-2',\n 3: 'lg:col-span-3',\n 4: 'lg:col-span-4',\n 5: 'lg:col-span-5',\n 6: 'lg:col-span-6',\n 7: 'lg:col-span-7',\n 8: 'lg:col-span-8',\n 9: 'lg:col-span-9',\n 10: 'lg:col-span-10',\n 11: 'lg:col-span-11',\n 12: 'lg:col-span-12',\n};\n\nconst xlSpanMap: Record<ColSpan, string> = {\n 1: 'xl:col-span-1',\n 2: 'xl:col-span-2',\n 3: 'xl:col-span-3',\n 4: 'xl:col-span-4',\n 5: 'xl:col-span-5',\n 6: 'xl:col-span-6',\n 7: 'xl:col-span-7',\n 8: 'xl:col-span-8',\n 9: 'xl:col-span-9',\n 10: 'xl:col-span-10',\n 11: 'xl:col-span-11',\n 12: 'xl:col-span-12',\n};\n\n// Offset: přeskočit N sloupců → col-start-(N+1)\nconst offsetMap: Record<ColOffset, string> = {\n 1: 'col-start-2',\n 2: 'col-start-3',\n 3: 'col-start-4',\n 4: 'col-start-5',\n 5: 'col-start-6',\n 6: 'col-start-7',\n 7: 'col-start-8',\n 8: 'col-start-9',\n 9: 'col-start-10',\n 10: 'col-start-11',\n 11: 'col-start-12',\n};\n\nconst smOffsetMap: Record<ColOffset, string> = {\n 1: 'sm:col-start-2',\n 2: 'sm:col-start-3',\n 3: 'sm:col-start-4',\n 4: 'sm:col-start-5',\n 5: 'sm:col-start-6',\n 6: 'sm:col-start-7',\n 7: 'sm:col-start-8',\n 8: 'sm:col-start-9',\n 9: 'sm:col-start-10',\n 10: 'sm:col-start-11',\n 11: 'sm:col-start-12',\n};\n\nconst mdOffsetMap: Record<ColOffset, string> = {\n 1: 'md:col-start-2',\n 2: 'md:col-start-3',\n 3: 'md:col-start-4',\n 4: 'md:col-start-5',\n 5: 'md:col-start-6',\n 6: 'md:col-start-7',\n 7: 'md:col-start-8',\n 8: 'md:col-start-9',\n 9: 'md:col-start-10',\n 10: 'md:col-start-11',\n 11: 'md:col-start-12',\n};\n\nconst lgOffsetMap: Record<ColOffset, string> = {\n 1: 'lg:col-start-2',\n 2: 'lg:col-start-3',\n 3: 'lg:col-start-4',\n 4: 'lg:col-start-5',\n 5: 'lg:col-start-6',\n 6: 'lg:col-start-7',\n 7: 'lg:col-start-8',\n 8: 'lg:col-start-9',\n 9: 'lg:col-start-10',\n 10: 'lg:col-start-11',\n 11: 'lg:col-start-12',\n};\n\nconst xlOffsetMap: Record<ColOffset, string> = {\n 1: 'xl:col-start-2',\n 2: 'xl:col-start-3',\n 3: 'xl:col-start-4',\n 4: 'xl:col-start-5',\n 5: 'xl:col-start-6',\n 6: 'xl:col-start-7',\n 7: 'xl:col-start-8',\n 8: 'xl:col-start-9',\n 9: 'xl:col-start-10',\n 10: 'xl:col-start-11',\n 11: 'xl:col-start-12',\n};\n\n// ─── Components ───────────────────────────────────────────────────────────────\n\nexport const Grid = ({\n children,\n cols = 12,\n gap,\n rowGap,\n colGap,\n as: Tag = 'div',\n className,\n}: GridProps) => (\n <Tag\n className={cx(\n 'grid',\n 'w-full',\n colsMap[cols],\n gap !== undefined && gapMap[gap],\n rowGap !== undefined && rowGapMap[rowGap],\n colGap !== undefined && colGapMap[colGap],\n className,\n )}\n >\n {children}\n </Tag>\n);\n\nGrid.displayName = 'Grid';\n\nexport const Col = ({\n children,\n span,\n sm,\n md,\n lg,\n xl,\n offset,\n smOffset,\n mdOffset,\n lgOffset,\n xlOffset,\n className,\n ...rest\n}: ColProps) => (\n <div\n className={cx(\n span && spanMap[span],\n sm && smSpanMap[sm],\n md && mdSpanMap[md],\n lg && lgSpanMap[lg],\n xl && xlSpanMap[xl],\n offset && offsetMap[offset],\n smOffset && smOffsetMap[smOffset],\n mdOffset && mdOffsetMap[mdOffset],\n lgOffset && lgOffsetMap[lgOffset],\n xlOffset && xlOffsetMap[xlOffset],\n className,\n )}\n {...rest}\n >\n {children}\n </div>\n);\n\nCol.displayName = 'Col';\n","import { useEffect, useId, useRef, useState } from 'react';\nimport clx from 'classnames';\n\nexport interface QuantityInputProps {\n value: number;\n onChange: (value: number) => void;\n min?: number;\n max?: number;\n step?: number;\n disabled?: boolean;\n label?: string;\n error?: string;\n hint?: string;\n id?: string;\n className?: string;\n}\n\nexport const QuantityInput = ({\n value,\n onChange,\n min = 1,\n max = 999,\n step = 1,\n disabled = false,\n label,\n error,\n hint,\n id,\n className,\n}: QuantityInputProps) => {\n const generatedId = useId();\n const inputId = id ?? generatedId;\n const inputRef = useRef<HTMLInputElement>(null);\n\n // Lokální string stav — umožňuje volné psaní, clamping proběhne při blur\n const [inputValue, setInputValue] = useState(String(value));\n\n // Synchronizace při změně value zvenčí (controlled)\n useEffect(() => {\n if (document.activeElement !== inputRef.current) {\n setInputValue(String(value));\n }\n }, [value]);\n\n const clamp = (n: number) => Math.min(max, Math.max(min, n));\n\n const commitValue = (raw: string) => {\n const parsed = parseInt(raw, 10);\n const next = isNaN(parsed) ? value : clamp(parsed);\n setInputValue(String(next));\n if (next !== value) onChange(next);\n };\n\n const handleChange = (e: React.ChangeEvent<HTMLInputElement>) => {\n const raw = e.target.value.replace(/[^0-9]/g, '');\n setInputValue(raw);\n // Průběžně volej onChange jen pokud je platné číslo\n const parsed = parseInt(raw, 10);\n if (!isNaN(parsed)) onChange(clamp(parsed));\n };\n\n const handleBlur = () => commitValue(inputValue);\n\n const handleKeyDown = (e: React.KeyboardEvent<HTMLInputElement>) => {\n if (e.key === 'Enter') {\n commitValue(inputValue);\n inputRef.current?.blur();\n return;\n }\n // Blokuj vše kromě číslic a ovládacích kláves\n const allowed = [\n 'Backspace', 'Delete', 'Tab', 'Escape',\n 'ArrowLeft', 'ArrowRight', 'Home', 'End',\n ];\n if (!allowed.includes(e.key) && !/^[0-9]$/.test(e.key) && !e.metaKey && !e.ctrlKey) {\n e.preventDefault();\n }\n };\n\n const decrement = () => onChange(clamp(value - step));\n const increment = () => onChange(clamp(value + step));\n\n const canDecrement = value - step >= min;\n const canIncrement = value + step <= max;\n\n return (\n <div className={clx('quantity-input-wrapper', className)}>\n {label && (\n <label htmlFor={inputId} className=\"input-label\">\n {label}\n </label>\n )}\n\n <div className={clx('quantity-input', error && 'has-error', disabled && 'is-disabled')}>\n <button\n type=\"button\"\n className=\"quantity-btn\"\n onClick={decrement}\n disabled={disabled || !canDecrement}\n aria-label=\"Snížit množství\"\n tabIndex={-1}\n >\n <MinusIcon />\n </button>\n\n <input\n ref={inputRef}\n id={inputId}\n type=\"text\"\n inputMode=\"numeric\"\n className=\"quantity-field\"\n value={inputValue}\n onChange={handleChange}\n onBlur={handleBlur}\n onKeyDown={handleKeyDown}\n disabled={disabled}\n aria-label={label ?? 'Množství'}\n aria-valuemin={min}\n aria-valuemax={max}\n aria-valuenow={value}\n />\n\n <button\n type=\"button\"\n className=\"quantity-btn\"\n onClick={increment}\n disabled={disabled || !canIncrement}\n aria-label=\"Zvýšit množství\"\n tabIndex={-1}\n >\n <PlusIcon />\n </button>\n </div>\n\n {(error || hint) && (\n <p className={clx('helper-text', error && 'has-error')}>{error ?? hint}</p>\n )}\n </div>\n );\n};\n\nQuantityInput.displayName = 'QuantityInput';\n\nconst MinusIcon = () => (\n <svg width=\"12\" height=\"2\" viewBox=\"0 0 12 2\" fill=\"none\" aria-hidden=\"true\">\n <path d=\"M1 1H11\" stroke=\"currentColor\" strokeWidth=\"1.5\" strokeLinecap=\"round\" />\n </svg>\n);\n\nconst PlusIcon = () => (\n <svg width=\"12\" height=\"12\" viewBox=\"0 0 12 12\" fill=\"none\" aria-hidden=\"true\">\n <path d=\"M6 1V11M1 6H11\" stroke=\"currentColor\" strokeWidth=\"1.5\" strokeLinecap=\"round\" />\n </svg>\n);\n","'use client';\n\nimport type { ButtonHTMLAttributes } from 'react';\nimport clx from 'classnames';\n\nexport interface PaginationProps {\n page: number;\n totalPages: number;\n onPageChange: (page: number) => void;\n siblingsCount?: number;\n}\n\nconst range = (start: number, end: number) =>\n Array.from({ length: end - start + 1 }, (_, i) => start + i);\n\nconst buildPages = (\n page: number,\n totalPages: number,\n siblings: number,\n): (number | '…')[] => {\n const totalNumbers = siblings * 2 + 5;\n\n if (totalPages <= totalNumbers) return range(1, totalPages);\n\n const leftSibling = Math.max(page - siblings, 1);\n const rightSibling = Math.min(page + siblings, totalPages);\n const showLeftDots = leftSibling > 2;\n const showRightDots = rightSibling < totalPages - 1;\n\n if (!showLeftDots && showRightDots) {\n const leftRange = range(1, 3 + siblings * 2);\n return [...leftRange, '…', totalPages];\n }\n\n if (showLeftDots && !showRightDots) {\n const rightRange = range(totalPages - (2 + siblings * 2), totalPages);\n return [1, '…', ...rightRange];\n }\n\n return [1, '…', ...range(leftSibling, rightSibling), '…', totalPages];\n};\n\nconst PageButton = ({\n active,\n disabled,\n children,\n ...props\n}: ButtonHTMLAttributes<HTMLButtonElement> & { active?: boolean }) => {\n return (\n <button\n disabled={disabled}\n className={clx(\n 'pagination-button',\n `pagination-button-${active ? 'active' : 'inactive'}`,\n )}\n {...props}\n >\n {children}\n </button>\n );\n};\n\nexport const Pagination = ({\n page,\n totalPages,\n onPageChange,\n siblingsCount = 1,\n}: PaginationProps) => {\n const pages = buildPages(page, totalPages, siblingsCount);\n\n return (\n <nav aria-label=\"Pagination\" className=\"pagination\">\n <PageButton\n disabled={page <= 1}\n onClick={() => onPageChange(page - 1)}\n aria-label=\"Previous page\"\n >\n <svg\n xmlns=\"http://www.w3.org/2000/svg\"\n fill=\"none\"\n viewBox=\"0 0 24 24\"\n strokeWidth={2}\n stroke=\"currentColor\"\n className=\"w-4 h-4\"\n >\n <path\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n d=\"M15.75 19.5L8.25 12l7.5-7.5\"\n />\n </svg>\n </PageButton>\n\n {pages.map((p, i) =>\n p === '…' ? (\n <span key={`dots-${i}`} className=\"pagination-dots\">\n …\n </span>\n ) : (\n <PageButton\n key={p}\n active={p === page}\n onClick={() => onPageChange(p)}\n aria-label={`Page ${p}`}\n aria-current={p === page ? 'page' : undefined}\n >\n {p}\n </PageButton>\n ),\n )}\n\n <PageButton\n disabled={page >= totalPages}\n onClick={() => onPageChange(page + 1)}\n aria-label=\"Next page\"\n >\n <svg\n xmlns=\"http://www.w3.org/2000/svg\"\n fill=\"none\"\n viewBox=\"0 0 24 24\"\n strokeWidth={2}\n stroke=\"currentColor\"\n className=\"w-4 h-4\"\n >\n <path\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n d=\"M8.25 4.5l7.5 7.5-7.5 7.5\"\n />\n </svg>\n </PageButton>\n </nav>\n );\n};\n","/**\n * SSR Window 5.0.1\n * Better handling for window object in SSR environment\n * https://github.com/nolimits4web/ssr-window\n *\n * Copyright 2025, Vladimir Kharlampidi\n *\n * Licensed under MIT\n *\n * Released on: June 27, 2025\n */\n/* eslint-disable no-param-reassign */\nfunction isObject(obj) {\n return obj !== null && typeof obj === 'object' && 'constructor' in obj && obj.constructor === Object;\n}\nfunction extend(target = {}, src = {}) {\n const noExtend = ['__proto__', 'constructor', 'prototype'];\n Object.keys(src).filter(key => noExtend.indexOf(key) < 0).forEach(key => {\n if (typeof target[key] === 'undefined') target[key] = src[key];else if (isObject(src[key]) && isObject(target[key]) && Object.keys(src[key]).length > 0) {\n extend(target[key], src[key]);\n }\n });\n}\nconst ssrDocument = {\n body: {},\n addEventListener() {},\n removeEventListener() {},\n activeElement: {\n blur() {},\n nodeName: ''\n },\n querySelector() {\n return null;\n },\n querySelectorAll() {\n return [];\n },\n getElementById() {\n return null;\n },\n createEvent() {\n return {\n initEvent() {}\n };\n },\n createElement() {\n return {\n children: [],\n childNodes: [],\n style: {},\n setAttribute() {},\n getElementsByTagName() {\n return [];\n }\n };\n },\n createElementNS() {\n return {};\n },\n importNode() {\n return null;\n },\n location: {\n hash: '',\n host: '',\n hostname: '',\n href: '',\n origin: '',\n pathname: '',\n protocol: '',\n search: ''\n }\n};\nfunction getDocument() {\n const doc = typeof document !== 'undefined' ? document : {};\n extend(doc, ssrDocument);\n return doc;\n}\nconst ssrWindow = {\n document: ssrDocument,\n navigator: {\n userAgent: ''\n },\n location: {\n hash: '',\n host: '',\n hostname: '',\n href: '',\n origin: '',\n pathname: '',\n protocol: '',\n search: ''\n },\n history: {\n replaceState() {},\n pushState() {},\n go() {},\n back() {}\n },\n CustomEvent: function CustomEvent() {\n return this;\n },\n addEventListener() {},\n removeEventListener() {},\n getComputedStyle() {\n return {\n getPropertyValue() {\n return '';\n }\n };\n },\n Image() {},\n Date() {},\n screen: {},\n setTimeout() {},\n clearTimeout() {},\n matchMedia() {\n return {};\n },\n requestAnimationFrame(callback) {\n if (typeof setTimeout === 'undefined') {\n callback();\n return null;\n }\n return setTimeout(callback, 0);\n },\n cancelAnimationFrame(id) {\n if (typeof setTimeout === 'undefined') {\n return;\n }\n clearTimeout(id);\n }\n};\nfunction getWindow() {\n const win = typeof window !== 'undefined' ? window : {};\n extend(win, ssrWindow);\n return win;\n}\n\nexport { getWindow as a, getDocument as g };\n","import { a as getWindow, g as getDocument } from './ssr-window.esm.mjs';\n\nfunction classesToTokens(classes = '') {\n return classes.trim().split(' ').filter(c => !!c.trim());\n}\n\nfunction deleteProps(obj) {\n const object = obj;\n Object.keys(object).forEach(key => {\n try {\n object[key] = null;\n } catch (e) {\n // no getter for object\n }\n try {\n delete object[key];\n } catch (e) {\n // something got wrong\n }\n });\n}\nfunction nextTick(callback, delay = 0) {\n return setTimeout(callback, delay);\n}\nfunction now() {\n return Date.now();\n}\nfunction getComputedStyle(el) {\n const window = getWindow();\n let style;\n if (window.getComputedStyle) {\n style = window.getComputedStyle(el, null);\n }\n if (!style && el.currentStyle) {\n style = el.currentStyle;\n }\n if (!style) {\n style = el.style;\n }\n return style;\n}\nfunction getTranslate(el, axis = 'x') {\n const window = getWindow();\n let matrix;\n let curTransform;\n let transformMatrix;\n const curStyle = getComputedStyle(el);\n if (window.WebKitCSSMatrix) {\n curTransform = curStyle.transform || curStyle.webkitTransform;\n if (curTransform.split(',').length > 6) {\n curTransform = curTransform.split(', ').map(a => a.replace(',', '.')).join(', ');\n }\n // Some old versions of Webkit choke when 'none' is passed; pass\n // empty string instead in this case\n transformMatrix = new window.WebKitCSSMatrix(curTransform === 'none' ? '' : curTransform);\n } else {\n transformMatrix = curStyle.MozTransform || curStyle.OTransform || curStyle.MsTransform || curStyle.msTransform || curStyle.transform || curStyle.getPropertyValue('transform').replace('translate(', 'matrix(1, 0, 0, 1,');\n matrix = transformMatrix.toString().split(',');\n }\n if (axis === 'x') {\n // Latest Chrome and webkits Fix\n if (window.WebKitCSSMatrix) curTransform = transformMatrix.m41;\n // Crazy IE10 Matrix\n else if (matrix.length === 16) curTransform = parseFloat(matrix[12]);\n // Normal Browsers\n else curTransform = parseFloat(matrix[4]);\n }\n if (axis === 'y') {\n // Latest Chrome and webkits Fix\n if (window.WebKitCSSMatrix) curTransform = transformMatrix.m42;\n // Crazy IE10 Matrix\n else if (matrix.length === 16) curTransform = parseFloat(matrix[13]);\n // Normal Browsers\n else curTransform = parseFloat(matrix[5]);\n }\n return curTransform || 0;\n}\nfunction isObject(o) {\n return typeof o === 'object' && o !== null && o.constructor && Object.prototype.toString.call(o).slice(8, -1) === 'Object';\n}\nfunction isNode(node) {\n // eslint-disable-next-line\n if (typeof window !== 'undefined' && typeof window.HTMLElement !== 'undefined') {\n return node instanceof HTMLElement;\n }\n return node && (node.nodeType === 1 || node.nodeType === 11);\n}\nfunction extend(...args) {\n const to = Object(args[0]);\n for (let i = 1; i < args.length; i += 1) {\n const nextSource = args[i];\n if (nextSource !== undefined && nextSource !== null && !isNode(nextSource)) {\n const keysArray = Object.keys(Object(nextSource)).filter(key => key !== '__proto__' && key !== 'constructor' && key !== 'prototype');\n for (let nextIndex = 0, len = keysArray.length; nextIndex < len; nextIndex += 1) {\n const nextKey = keysArray[nextIndex];\n const desc = Object.getOwnPropertyDescriptor(nextSource, nextKey);\n if (desc !== undefined && desc.enumerable) {\n if (isObject(to[nextKey]) && isObject(nextSource[nextKey])) {\n if (nextSource[nextKey].__swiper__) {\n to[nextKey] = nextSource[nextKey];\n } else {\n extend(to[nextKey], nextSource[nextKey]);\n }\n } else if (!isObject(to[nextKey]) && isObject(nextSource[nextKey])) {\n to[nextKey] = {};\n if (nextSource[nextKey].__swiper__) {\n to[nextKey] = nextSource[nextKey];\n } else {\n extend(to[nextKey], nextSource[nextKey]);\n }\n } else {\n to[nextKey] = nextSource[nextKey];\n }\n }\n }\n }\n }\n return to;\n}\nfunction setCSSProperty(el, varName, varValue) {\n el.style.setProperty(varName, varValue);\n}\nfunction animateCSSModeScroll({\n swiper,\n targetPosition,\n side\n}) {\n const window = getWindow();\n const startPosition = -swiper.translate;\n let startTime = null;\n let time;\n const duration = swiper.params.speed;\n swiper.wrapperEl.style.scrollSnapType = 'none';\n window.cancelAnimationFrame(swiper.cssModeFrameID);\n const dir = targetPosition > startPosition ? 'next' : 'prev';\n const isOutOfBound = (current, target) => {\n return dir === 'next' && current >= target || dir === 'prev' && current <= target;\n };\n const animate = () => {\n time = new Date().getTime();\n if (startTime === null) {\n startTime = time;\n }\n const progress = Math.max(Math.min((time - startTime) / duration, 1), 0);\n const easeProgress = 0.5 - Math.cos(progress * Math.PI) / 2;\n let currentPosition = startPosition + easeProgress * (targetPosition - startPosition);\n if (isOutOfBound(currentPosition, targetPosition)) {\n currentPosition = targetPosition;\n }\n swiper.wrapperEl.scrollTo({\n [side]: currentPosition\n });\n if (isOutOfBound(currentPosition, targetPosition)) {\n swiper.wrapperEl.style.overflow = 'hidden';\n swiper.wrapperEl.style.scrollSnapType = '';\n setTimeout(() => {\n swiper.wrapperEl.style.overflow = '';\n swiper.wrapperEl.scrollTo({\n [side]: currentPosition\n });\n });\n window.cancelAnimationFrame(swiper.cssModeFrameID);\n return;\n }\n swiper.cssModeFrameID = window.requestAnimationFrame(animate);\n };\n animate();\n}\nfunction getSlideTransformEl(slideEl) {\n return slideEl.querySelector('.swiper-slide-transform') || slideEl.shadowRoot && slideEl.shadowRoot.querySelector('.swiper-slide-transform') || slideEl;\n}\nfunction elementChildren(element, selector = '') {\n const window = getWindow();\n const children = [...element.children];\n if (window.HTMLSlotElement && element instanceof HTMLSlotElement) {\n children.push(...element.assignedElements());\n }\n if (!selector) {\n return children;\n }\n return children.filter(el => el.matches(selector));\n}\nfunction elementIsChildOfSlot(el, slot) {\n // Breadth-first search through all parent's children and assigned elements\n const elementsQueue = [slot];\n while (elementsQueue.length > 0) {\n const elementToCheck = elementsQueue.shift();\n if (el === elementToCheck) {\n return true;\n }\n elementsQueue.push(...elementToCheck.children, ...(elementToCheck.shadowRoot ? elementToCheck.shadowRoot.children : []), ...(elementToCheck.assignedElements ? elementToCheck.assignedElements() : []));\n }\n}\nfunction elementIsChildOf(el, parent) {\n const window = getWindow();\n let isChild = parent.contains(el);\n if (!isChild && window.HTMLSlotElement && parent instanceof HTMLSlotElement) {\n const children = [...parent.assignedElements()];\n isChild = children.includes(el);\n if (!isChild) {\n isChild = elementIsChildOfSlot(el, parent);\n }\n }\n return isChild;\n}\nfunction showWarning(text) {\n try {\n console.warn(text);\n return;\n } catch (err) {\n // err\n }\n}\nfunction createElement(tag, classes = []) {\n const el = document.createElement(tag);\n el.classList.add(...(Array.isArray(classes) ? classes : classesToTokens(classes)));\n return el;\n}\nfunction elementOffset(el) {\n const window = getWindow();\n const document = getDocument();\n const box = el.getBoundingClientRect();\n const body = document.body;\n const clientTop = el.clientTop || body.clientTop || 0;\n const clientLeft = el.clientLeft || body.clientLeft || 0;\n const scrollTop = el === window ? window.scrollY : el.scrollTop;\n const scrollLeft = el === window ? window.scrollX : el.scrollLeft;\n return {\n top: box.top + scrollTop - clientTop,\n left: box.left + scrollLeft - clientLeft\n };\n}\nfunction elementPrevAll(el, selector) {\n const prevEls = [];\n while (el.previousElementSibling) {\n const prev = el.previousElementSibling; // eslint-disable-line\n if (selector) {\n if (prev.matches(selector)) prevEls.push(prev);\n } else prevEls.push(prev);\n el = prev;\n }\n return prevEls;\n}\nfunction elementNextAll(el, selector) {\n const nextEls = [];\n while (el.nextElementSibling) {\n const next = el.nextElementSibling; // eslint-disable-line\n if (selector) {\n if (next.matches(selector)) nextEls.push(next);\n } else nextEls.push(next);\n el = next;\n }\n return nextEls;\n}\nfunction elementStyle(el, prop) {\n const window = getWindow();\n return window.getComputedStyle(el, null).getPropertyValue(prop);\n}\nfunction elementIndex(el) {\n let child = el;\n let i;\n if (child) {\n i = 0;\n // eslint-disable-next-line\n while ((child = child.previousSibling) !== null) {\n if (child.nodeType === 1) i += 1;\n }\n return i;\n }\n return undefined;\n}\nfunction elementParents(el, selector) {\n const parents = []; // eslint-disable-line\n let parent = el.parentElement; // eslint-disable-line\n while (parent) {\n if (selector) {\n if (parent.matches(selector)) parents.push(parent);\n } else {\n parents.push(parent);\n }\n parent = parent.parentElement;\n }\n return parents;\n}\nfunction elementTransitionEnd(el, callback) {\n function fireCallBack(e) {\n if (e.target !== el) return;\n callback.call(el, e);\n el.removeEventListener('transitionend', fireCallBack);\n }\n if (callback) {\n el.addEventListener('transitionend', fireCallBack);\n }\n}\nfunction elementOuterSize(el, size, includeMargins) {\n const window = getWindow();\n if (includeMargins) {\n return el[size === 'width' ? 'offsetWidth' : 'offsetHeight'] + parseFloat(window.getComputedStyle(el, null).getPropertyValue(size === 'width' ? 'margin-right' : 'margin-top')) + parseFloat(window.getComputedStyle(el, null).getPropertyValue(size === 'width' ? 'margin-left' : 'margin-bottom'));\n }\n return el.offsetWidth;\n}\nfunction makeElementsArray(el) {\n return (Array.isArray(el) ? el : [el]).filter(e => !!e);\n}\nfunction getRotateFix(swiper) {\n return v => {\n if (Math.abs(v) > 0 && swiper.browser && swiper.browser.need3dFix && Math.abs(v) % 90 === 0) {\n return v + 0.001;\n }\n return v;\n };\n}\nfunction setInnerHTML(el, html = '') {\n if (typeof trustedTypes !== 'undefined') {\n el.innerHTML = trustedTypes.createPolicy('html', {\n createHTML: s => s\n }).createHTML(html);\n } else {\n el.innerHTML = html;\n }\n}\n\nexport { getRotateFix as a, setCSSProperty as b, createElement as c, elementParents as d, elementChildren as e, elementOffset as f, getSlideTransformEl as g, now as h, elementOuterSize as i, elementIndex as j, classesToTokens as k, getTranslate as l, makeElementsArray as m, nextTick as n, elementTransitionEnd as o, isObject as p, elementStyle as q, elementNextAll as r, setInnerHTML as s, elementPrevAll as t, animateCSSModeScroll as u, showWarning as v, elementIsChildOf as w, extend as x, deleteProps as y };\n","import { a as getWindow, g as getDocument } from './ssr-window.esm.mjs';\nimport { d as elementParents, q as elementStyle, e as elementChildren, b as setCSSProperty, i as elementOuterSize, r as elementNextAll, t as elementPrevAll, l as getTranslate, u as animateCSSModeScroll, n as nextTick, v as showWarning, c as createElement, w as elementIsChildOf, h as now, x as extend, j as elementIndex, y as deleteProps } from './utils.mjs';\n\nlet support;\nfunction calcSupport() {\n const window = getWindow();\n const document = getDocument();\n return {\n smoothScroll: document.documentElement && document.documentElement.style && 'scrollBehavior' in document.documentElement.style,\n touch: !!('ontouchstart' in window || window.DocumentTouch && document instanceof window.DocumentTouch)\n };\n}\nfunction getSupport() {\n if (!support) {\n support = calcSupport();\n }\n return support;\n}\n\nlet deviceCached;\nfunction calcDevice({\n userAgent\n} = {}) {\n const support = getSupport();\n const window = getWindow();\n const platform = window.navigator.platform;\n const ua = userAgent || window.navigator.userAgent;\n const device = {\n ios: false,\n android: false\n };\n const screenWidth = window.screen.width;\n const screenHeight = window.screen.height;\n const android = ua.match(/(Android);?[\\s\\/]+([\\d.]+)?/); // eslint-disable-line\n let ipad = ua.match(/(iPad)(?!\\1).*OS\\s([\\d_]+)/);\n const ipod = ua.match(/(iPod)(.*OS\\s([\\d_]+))?/);\n const iphone = !ipad && ua.match(/(iPhone\\sOS|iOS)\\s([\\d_]+)/);\n const windows = platform === 'Win32';\n let macos = platform === 'MacIntel';\n\n // iPadOs 13 fix\n const iPadScreens = ['1024x1366', '1366x1024', '834x1194', '1194x834', '834x1112', '1112x834', '768x1024', '1024x768', '820x1180', '1180x820', '810x1080', '1080x810'];\n if (!ipad && macos && support.touch && iPadScreens.indexOf(`${screenWidth}x${screenHeight}`) >= 0) {\n ipad = ua.match(/(Version)\\/([\\d.]+)/);\n if (!ipad) ipad = [0, 1, '13_0_0'];\n macos = false;\n }\n\n // Android\n if (android && !windows) {\n device.os = 'android';\n device.android = true;\n }\n if (ipad || iphone || ipod) {\n device.os = 'ios';\n device.ios = true;\n }\n\n // Export object\n return device;\n}\nfunction getDevice(overrides = {}) {\n if (!deviceCached) {\n deviceCached = calcDevice(overrides);\n }\n return deviceCached;\n}\n\nlet browser;\nfunction calcBrowser() {\n const window = getWindow();\n const device = getDevice();\n let needPerspectiveFix = false;\n function isSafari() {\n const ua = window.navigator.userAgent.toLowerCase();\n return ua.indexOf('safari') >= 0 && ua.indexOf('chrome') < 0 && ua.indexOf('android') < 0;\n }\n if (isSafari()) {\n const ua = String(window.navigator.userAgent);\n if (ua.includes('Version/')) {\n const [major, minor] = ua.split('Version/')[1].split(' ')[0].split('.').map(num => Number(num));\n needPerspectiveFix = major < 16 || major === 16 && minor < 2;\n }\n }\n const isWebView = /(iPhone|iPod|iPad).*AppleWebKit(?!.*Safari)/i.test(window.navigator.userAgent);\n const isSafariBrowser = isSafari();\n const need3dFix = isSafariBrowser || isWebView && device.ios;\n return {\n isSafari: needPerspectiveFix || isSafariBrowser,\n needPerspectiveFix,\n need3dFix,\n isWebView\n };\n}\nfunction getBrowser() {\n if (!browser) {\n browser = calcBrowser();\n }\n return browser;\n}\n\nfunction Resize({\n swiper,\n on,\n emit\n}) {\n const window = getWindow();\n let observer = null;\n let animationFrame = null;\n const resizeHandler = () => {\n if (!swiper || swiper.destroyed || !swiper.initialized) return;\n emit('beforeResize');\n emit('resize');\n };\n const createObserver = () => {\n if (!swiper || swiper.destroyed || !swiper.initialized) return;\n observer = new ResizeObserver(entries => {\n animationFrame = window.requestAnimationFrame(() => {\n const {\n width,\n height\n } = swiper;\n let newWidth = width;\n let newHeight = height;\n entries.forEach(({\n contentBoxSize,\n contentRect,\n target\n }) => {\n if (target && target !== swiper.el) return;\n newWidth = contentRect ? contentRect.width : (contentBoxSize[0] || contentBoxSize).inlineSize;\n newHeight = contentRect ? contentRect.height : (contentBoxSize[0] || contentBoxSize).blockSize;\n });\n if (newWidth !== width || newHeight !== height) {\n resizeHandler();\n }\n });\n });\n observer.observe(swiper.el);\n };\n const removeObserver = () => {\n if (animationFrame) {\n window.cancelAnimationFrame(animationFrame);\n }\n if (observer && observer.unobserve && swiper.el) {\n observer.unobserve(swiper.el);\n observer = null;\n }\n };\n const orientationChangeHandler = () => {\n if (!swiper || swiper.destroyed || !swiper.initialized) return;\n emit('orientationchange');\n };\n on('init', () => {\n if (swiper.params.resizeObserver && typeof window.ResizeObserver !== 'undefined') {\n createObserver();\n return;\n }\n window.addEventListener('resize', resizeHandler);\n window.addEventListener('orientationchange', orientationChangeHandler);\n });\n on('destroy', () => {\n removeObserver();\n window.removeEventListener('resize', resizeHandler);\n window.removeEventListener('orientationchange', orientationChangeHandler);\n });\n}\n\nfunction Observer({\n swiper,\n extendParams,\n on,\n emit\n}) {\n const observers = [];\n const window = getWindow();\n const attach = (target, options = {}) => {\n const ObserverFunc = window.MutationObserver || window.WebkitMutationObserver;\n const observer = new ObserverFunc(mutations => {\n // The observerUpdate event should only be triggered\n // once despite the number of mutations. Additional\n // triggers are redundant and are very costly\n if (swiper.__preventObserver__) return;\n if (mutations.length === 1) {\n emit('observerUpdate', mutations[0]);\n return;\n }\n const observerUpdate = function observerUpdate() {\n emit('observerUpdate', mutations[0]);\n };\n if (window.requestAnimationFrame) {\n window.requestAnimationFrame(observerUpdate);\n } else {\n window.setTimeout(observerUpdate, 0);\n }\n });\n observer.observe(target, {\n attributes: typeof options.attributes === 'undefined' ? true : options.attributes,\n childList: swiper.isElement || (typeof options.childList === 'undefined' ? true : options).childList,\n characterData: typeof options.characterData === 'undefined' ? true : options.characterData\n });\n observers.push(observer);\n };\n const init = () => {\n if (!swiper.params.observer) return;\n if (swiper.params.observeParents) {\n const containerParents = elementParents(swiper.hostEl);\n for (let i = 0; i < containerParents.length; i += 1) {\n attach(containerParents[i]);\n }\n }\n // Observe container\n attach(swiper.hostEl, {\n childList: swiper.params.observeSlideChildren\n });\n\n // Observe wrapper\n attach(swiper.wrapperEl, {\n attributes: false\n });\n };\n const destroy = () => {\n observers.forEach(observer => {\n observer.disconnect();\n });\n observers.splice(0, observers.length);\n };\n extendParams({\n observer: false,\n observeParents: false,\n observeSlideChildren: false\n });\n on('init', init);\n on('destroy', destroy);\n}\n\n/* eslint-disable no-underscore-dangle */\n\nvar eventsEmitter = {\n on(events, handler, priority) {\n const self = this;\n if (!self.eventsListeners || self.destroyed) return self;\n if (typeof handler !== 'function') return self;\n const method = priority ? 'unshift' : 'push';\n events.split(' ').forEach(event => {\n if (!self.eventsListeners[event]) self.eventsListeners[event] = [];\n self.eventsListeners[event][method](handler);\n });\n return self;\n },\n once(events, handler, priority) {\n const self = this;\n if (!self.eventsListeners || self.destroyed) return self;\n if (typeof handler !== 'function') return self;\n function onceHandler(...args) {\n self.off(events, onceHandler);\n if (onceHandler.__emitterProxy) {\n delete onceHandler.__emitterProxy;\n }\n handler.apply(self, args);\n }\n onceHandler.__emitterProxy = handler;\n return self.on(events, onceHandler, priority);\n },\n onAny(handler, priority) {\n const self = this;\n if (!self.eventsListeners || self.destroyed) return self;\n if (typeof handler !== 'function') return self;\n const method = priority ? 'unshift' : 'push';\n if (self.eventsAnyListeners.indexOf(handler) < 0) {\n self.eventsAnyListeners[method](handler);\n }\n return self;\n },\n offAny(handler) {\n const self = this;\n if (!self.eventsListeners || self.destroyed) return self;\n if (!self.eventsAnyListeners) return self;\n const index = self.eventsAnyListeners.indexOf(handler);\n if (index >= 0) {\n self.eventsAnyListeners.splice(index, 1);\n }\n return self;\n },\n off(events, handler) {\n const self = this;\n if (!self.eventsListeners || self.destroyed) return self;\n if (!self.eventsListeners) return self;\n events.split(' ').forEach(event => {\n if (typeof handler === 'undefined') {\n self.eventsListeners[event] = [];\n } else if (self.eventsListeners[event]) {\n self.eventsListeners[event].forEach((eventHandler, index) => {\n if (eventHandler === handler || eventHandler.__emitterProxy && eventHandler.__emitterProxy === handler) {\n self.eventsListeners[event].splice(index, 1);\n }\n });\n }\n });\n return self;\n },\n emit(...args) {\n const self = this;\n if (!self.eventsListeners || self.destroyed) return self;\n if (!self.eventsListeners) return self;\n let events;\n let data;\n let context;\n if (typeof args[0] === 'string' || Array.isArray(args[0])) {\n events = args[0];\n data = args.slice(1, args.length);\n context = self;\n } else {\n events = args[0].events;\n data = args[0].data;\n context = args[0].context || self;\n }\n data.unshift(context);\n const eventsArray = Array.isArray(events) ? events : events.split(' ');\n eventsArray.forEach(event => {\n if (self.eventsAnyListeners && self.eventsAnyListeners.length) {\n self.eventsAnyListeners.forEach(eventHandler => {\n eventHandler.apply(context, [event, ...data]);\n });\n }\n if (self.eventsListeners && self.eventsListeners[event]) {\n self.eventsListeners[event].forEach(eventHandler => {\n eventHandler.apply(context, data);\n });\n }\n });\n return self;\n }\n};\n\nfunction updateSize() {\n const swiper = this;\n let width;\n let height;\n const el = swiper.el;\n if (typeof swiper.params.width !== 'undefined' && swiper.params.width !== null) {\n width = swiper.params.width;\n } else {\n width = el.clientWidth;\n }\n if (typeof swiper.params.height !== 'undefined' && swiper.params.height !== null) {\n height = swiper.params.height;\n } else {\n height = el.clientHeight;\n }\n if (width === 0 && swiper.isHorizontal() || height === 0 && swiper.isVertical()) {\n return;\n }\n\n // Subtract paddings\n width = width - parseInt(elementStyle(el, 'padding-left') || 0, 10) - parseInt(elementStyle(el, 'padding-right') || 0, 10);\n height = height - parseInt(elementStyle(el, 'padding-top') || 0, 10) - parseInt(elementStyle(el, 'padding-bottom') || 0, 10);\n if (Number.isNaN(width)) width = 0;\n if (Number.isNaN(height)) height = 0;\n Object.assign(swiper, {\n width,\n height,\n size: swiper.isHorizontal() ? width : height\n });\n}\n\nfunction updateSlides() {\n const swiper = this;\n function getDirectionPropertyValue(node, label) {\n return parseFloat(node.getPropertyValue(swiper.getDirectionLabel(label)) || 0);\n }\n const params = swiper.params;\n const {\n wrapperEl,\n slidesEl,\n rtlTranslate: rtl,\n wrongRTL\n } = swiper;\n const isVirtual = swiper.virtual && params.virtual.enabled;\n const previousSlidesLength = isVirtual ? swiper.virtual.slides.length : swiper.slides.length;\n const slides = elementChildren(slidesEl, `.${swiper.params.slideClass}, swiper-slide`);\n const slidesLength = isVirtual ? swiper.virtual.slides.length : slides.length;\n let snapGrid = [];\n const slidesGrid = [];\n const slidesSizesGrid = [];\n let offsetBefore = params.slidesOffsetBefore;\n if (typeof offsetBefore === 'function') {\n offsetBefore = params.slidesOffsetBefore.call(swiper);\n }\n let offsetAfter = params.slidesOffsetAfter;\n if (typeof offsetAfter === 'function') {\n offsetAfter = params.slidesOffsetAfter.call(swiper);\n }\n const previousSnapGridLength = swiper.snapGrid.length;\n const previousSlidesGridLength = swiper.slidesGrid.length;\n const swiperSize = swiper.size - offsetBefore - offsetAfter;\n let spaceBetween = params.spaceBetween;\n let slidePosition = -offsetBefore;\n let prevSlideSize = 0;\n let index = 0;\n if (typeof swiperSize === 'undefined') {\n return;\n }\n if (typeof spaceBetween === 'string' && spaceBetween.indexOf('%') >= 0) {\n spaceBetween = parseFloat(spaceBetween.replace('%', '')) / 100 * swiperSize;\n } else if (typeof spaceBetween === 'string') {\n spaceBetween = parseFloat(spaceBetween);\n }\n swiper.virtualSize = -spaceBetween - offsetBefore - offsetAfter;\n\n // reset margins\n slides.forEach(slideEl => {\n if (rtl) {\n slideEl.style.marginLeft = '';\n } else {\n slideEl.style.marginRight = '';\n }\n slideEl.style.marginBottom = '';\n slideEl.style.marginTop = '';\n });\n\n // reset cssMode offsets\n if (params.centeredSlides && params.cssMode) {\n setCSSProperty(wrapperEl, '--swiper-centered-offset-before', '');\n setCSSProperty(wrapperEl, '--swiper-centered-offset-after', '');\n }\n\n // set cssMode offsets\n if (params.cssMode) {\n setCSSProperty(wrapperEl, '--swiper-slides-offset-before', `${offsetBefore}px`);\n setCSSProperty(wrapperEl, '--swiper-slides-offset-after', `${offsetAfter}px`);\n }\n const gridEnabled = params.grid && params.grid.rows > 1 && swiper.grid;\n if (gridEnabled) {\n swiper.grid.initSlides(slides);\n } else if (swiper.grid) {\n swiper.grid.unsetSlides();\n }\n\n // Calc slides\n let slideSize;\n const shouldResetSlideSize = params.slidesPerView === 'auto' && params.breakpoints && Object.keys(params.breakpoints).filter(key => {\n return typeof params.breakpoints[key].slidesPerView !== 'undefined';\n }).length > 0;\n for (let i = 0; i < slidesLength; i += 1) {\n slideSize = 0;\n const slide = slides[i];\n if (slide) {\n if (gridEnabled) {\n swiper.grid.updateSlide(i, slide, slides);\n }\n if (elementStyle(slide, 'display') === 'none') continue; // eslint-disable-line\n }\n\n if (isVirtual && params.slidesPerView === 'auto') {\n if (params.virtual.slidesPerViewAutoSlideSize) {\n slideSize = params.virtual.slidesPerViewAutoSlideSize;\n }\n if (slideSize && slide) {\n if (params.roundLengths) slideSize = Math.floor(slideSize);\n slide.style[swiper.getDirectionLabel('width')] = `${slideSize}px`;\n }\n } else if (params.slidesPerView === 'auto') {\n if (shouldResetSlideSize) {\n slide.style[swiper.getDirectionLabel('width')] = ``;\n }\n const slideStyles = getComputedStyle(slide);\n const currentTransform = slide.style.transform;\n const currentWebKitTransform = slide.style.webkitTransform;\n if (currentTransform) {\n slide.style.transform = 'none';\n }\n if (currentWebKitTransform) {\n slide.style.webkitTransform = 'none';\n }\n if (params.roundLengths) {\n slideSize = swiper.isHorizontal() ? elementOuterSize(slide, 'width', true) : elementOuterSize(slide, 'height', true);\n } else {\n // eslint-disable-next-line\n const width = getDirectionPropertyValue(slideStyles, 'width');\n const paddingLeft = getDirectionPropertyValue(slideStyles, 'padding-left');\n const paddingRight = getDirectionPropertyValue(slideStyles, 'padding-right');\n const marginLeft = getDirectionPropertyValue(slideStyles, 'margin-left');\n const marginRight = getDirectionPropertyValue(slideStyles, 'margin-right');\n const boxSizing = slideStyles.getPropertyValue('box-sizing');\n if (boxSizing && boxSizing === 'border-box') {\n slideSize = width + marginLeft + marginRight;\n } else {\n const {\n clientWidth,\n offsetWidth\n } = slide;\n slideSize = width + paddingLeft + paddingRight + marginLeft + marginRight + (offsetWidth - clientWidth);\n }\n }\n if (currentTransform) {\n slide.style.transform = currentTransform;\n }\n if (currentWebKitTransform) {\n slide.style.webkitTransform = currentWebKitTransform;\n }\n if (params.roundLengths) slideSize = Math.floor(slideSize);\n } else {\n slideSize = (swiperSize - (params.slidesPerView - 1) * spaceBetween) / params.slidesPerView;\n if (params.roundLengths) slideSize = Math.floor(slideSize);\n if (slide) {\n slide.style[swiper.getDirectionLabel('width')] = `${slideSize}px`;\n }\n }\n if (slide) {\n slide.swiperSlideSize = slideSize;\n }\n slidesSizesGrid.push(slideSize);\n if (params.centeredSlides) {\n slidePosition = slidePosition + slideSize / 2 + prevSlideSize / 2 + spaceBetween;\n if (prevSlideSize === 0 && i !== 0) slidePosition = slidePosition - swiperSize / 2 - spaceBetween;\n if (i === 0) slidePosition = slidePosition - swiperSize / 2 - spaceBetween;\n if (Math.abs(slidePosition) < 1 / 1000) slidePosition = 0;\n if (params.roundLengths) slidePosition = Math.floor(slidePosition);\n if (index % params.slidesPerGroup === 0) snapGrid.push(slidePosition);\n slidesGrid.push(slidePosition);\n } else {\n if (params.roundLengths) slidePosition = Math.floor(slidePosition);\n if ((index - Math.min(swiper.params.slidesPerGroupSkip, index)) % swiper.params.slidesPerGroup === 0) snapGrid.push(slidePosition);\n slidesGrid.push(slidePosition);\n slidePosition = slidePosition + slideSize + spaceBetween;\n }\n swiper.virtualSize += slideSize + spaceBetween;\n prevSlideSize = slideSize;\n index += 1;\n }\n swiper.virtualSize = Math.max(swiper.virtualSize, swiperSize) + offsetAfter;\n if (rtl && wrongRTL && (params.effect === 'slide' || params.effect === 'coverflow')) {\n wrapperEl.style.width = `${swiper.virtualSize + spaceBetween}px`;\n }\n if (params.setWrapperSize) {\n wrapperEl.style[swiper.getDirectionLabel('width')] = `${swiper.virtualSize + spaceBetween}px`;\n }\n if (gridEnabled) {\n swiper.grid.updateWrapperSize(slideSize, snapGrid);\n }\n\n // Remove last grid elements depending on width\n if (!params.centeredSlides) {\n // Check if snapToSlideEdge should be applied\n const isFractionalSlidesPerView = params.slidesPerView !== 'auto' && params.slidesPerView % 1 !== 0;\n const shouldSnapToSlideEdge = params.snapToSlideEdge && !params.loop && (params.slidesPerView === 'auto' || isFractionalSlidesPerView);\n\n // Calculate the last allowed snap index when snapToSlideEdge is enabled\n // This ensures minimum slides are visible at the end\n let lastAllowedSnapIndex = snapGrid.length;\n if (shouldSnapToSlideEdge) {\n let minVisibleSlides;\n if (params.slidesPerView === 'auto') {\n // For 'auto' mode, calculate how many slides fit based on actual sizes\n minVisibleSlides = 1;\n let accumulatedSize = 0;\n for (let i = slidesSizesGrid.length - 1; i >= 0; i -= 1) {\n accumulatedSize += slidesSizesGrid[i] + (i < slidesSizesGrid.length - 1 ? spaceBetween : 0);\n if (accumulatedSize <= swiperSize) {\n minVisibleSlides = slidesSizesGrid.length - i;\n } else {\n break;\n }\n }\n } else {\n minVisibleSlides = Math.floor(params.slidesPerView);\n }\n lastAllowedSnapIndex = Math.max(slidesLength - minVisibleSlides, 0);\n }\n const newSlidesGrid = [];\n for (let i = 0; i < snapGrid.length; i += 1) {\n let slidesGridItem = snapGrid[i];\n if (params.roundLengths) slidesGridItem = Math.floor(slidesGridItem);\n if (shouldSnapToSlideEdge) {\n // When snapToSlideEdge is enabled, only keep snaps up to lastAllowedSnapIndex\n if (i <= lastAllowedSnapIndex) {\n newSlidesGrid.push(slidesGridItem);\n }\n } else if (snapGrid[i] <= swiper.virtualSize - swiperSize) {\n // When snapToSlideEdge is disabled, keep snaps that fit within scrollable area\n newSlidesGrid.push(slidesGridItem);\n }\n }\n snapGrid = newSlidesGrid;\n if (Math.floor(swiper.virtualSize - swiperSize) - Math.floor(snapGrid[snapGrid.length - 1]) > 1) {\n // Only add edge-aligned snap if snapToSlideEdge is not enabled\n if (!shouldSnapToSlideEdge) {\n snapGrid.push(swiper.virtualSize - swiperSize);\n }\n }\n }\n if (isVirtual && params.loop) {\n const size = slidesSizesGrid[0] + spaceBetween;\n if (params.slidesPerGroup > 1) {\n const groups = Math.ceil((swiper.virtual.slidesBefore + swiper.virtual.slidesAfter) / params.slidesPerGroup);\n const groupSize = size * params.slidesPerGroup;\n for (let i = 0; i < groups; i += 1) {\n snapGrid.push(snapGrid[snapGrid.length - 1] + groupSize);\n }\n }\n for (let i = 0; i < swiper.virtual.slidesBefore + swiper.virtual.slidesAfter; i += 1) {\n if (params.slidesPerGroup === 1) {\n snapGrid.push(snapGrid[snapGrid.length - 1] + size);\n }\n slidesGrid.push(slidesGrid[slidesGrid.length - 1] + size);\n swiper.virtualSize += size;\n }\n }\n if (snapGrid.length === 0) snapGrid = [0];\n if (spaceBetween !== 0) {\n const key = swiper.isHorizontal() && rtl ? 'marginLeft' : swiper.getDirectionLabel('marginRight');\n slides.filter((_, slideIndex) => {\n if (!params.cssMode || params.loop) return true;\n if (slideIndex === slides.length - 1) {\n return false;\n }\n return true;\n }).forEach(slideEl => {\n slideEl.style[key] = `${spaceBetween}px`;\n });\n }\n if (params.centeredSlides && params.centeredSlidesBounds) {\n let allSlidesSize = 0;\n slidesSizesGrid.forEach(slideSizeValue => {\n allSlidesSize += slideSizeValue + (spaceBetween || 0);\n });\n allSlidesSize -= spaceBetween;\n const maxSnap = allSlidesSize > swiperSize ? allSlidesSize - swiperSize : 0;\n snapGrid = snapGrid.map(snap => {\n if (snap <= 0) return -offsetBefore;\n if (snap > maxSnap) return maxSnap + offsetAfter;\n return snap;\n });\n }\n if (params.centerInsufficientSlides) {\n let allSlidesSize = 0;\n slidesSizesGrid.forEach(slideSizeValue => {\n allSlidesSize += slideSizeValue + (spaceBetween || 0);\n });\n allSlidesSize -= spaceBetween;\n if (allSlidesSize < swiperSize) {\n const allSlidesOffset = (swiperSize - allSlidesSize) / 2;\n snapGrid.forEach((snap, snapIndex) => {\n snapGrid[snapIndex] = snap - allSlidesOffset;\n });\n slidesGrid.forEach((snap, snapIndex) => {\n slidesGrid[snapIndex] = snap + allSlidesOffset;\n });\n }\n }\n Object.assign(swiper, {\n slides,\n snapGrid,\n slidesGrid,\n slidesSizesGrid\n });\n if (params.centeredSlides && params.cssMode && !params.centeredSlidesBounds) {\n setCSSProperty(wrapperEl, '--swiper-centered-offset-before', `${-snapGrid[0]}px`);\n setCSSProperty(wrapperEl, '--swiper-centered-offset-after', `${swiper.size / 2 - slidesSizesGrid[slidesSizesGrid.length - 1] / 2}px`);\n const addToSnapGrid = -swiper.snapGrid[0];\n const addToSlidesGrid = -swiper.slidesGrid[0];\n swiper.snapGrid = swiper.snapGrid.map(v => v + addToSnapGrid);\n swiper.slidesGrid = swiper.slidesGrid.map(v => v + addToSlidesGrid);\n }\n if (slidesLength !== previousSlidesLength) {\n swiper.emit('slidesLengthChange');\n }\n if (snapGrid.length !== previousSnapGridLength) {\n if (swiper.params.watchOverflow) swiper.checkOverflow();\n swiper.emit('snapGridLengthChange');\n }\n if (slidesGrid.length !== previousSlidesGridLength) {\n swiper.emit('slidesGridLengthChange');\n }\n if (params.watchSlidesProgress) {\n swiper.updateSlidesOffset();\n }\n swiper.emit('slidesUpdated');\n if (!isVirtual && !params.cssMode && (params.effect === 'slide' || params.effect === 'fade')) {\n const backFaceHiddenClass = `${params.containerModifierClass}backface-hidden`;\n const hasClassBackfaceClassAdded = swiper.el.classList.contains(backFaceHiddenClass);\n if (slidesLength <= params.maxBackfaceHiddenSlides) {\n if (!hasClassBackfaceClassAdded) swiper.el.classList.add(backFaceHiddenClass);\n } else if (hasClassBackfaceClassAdded) {\n swiper.el.classList.remove(backFaceHiddenClass);\n }\n }\n}\n\nfunction updateAutoHeight(speed) {\n const swiper = this;\n const activeSlides = [];\n const isVirtual = swiper.virtual && swiper.params.virtual.enabled;\n let newHeight = 0;\n let i;\n if (typeof speed === 'number') {\n swiper.setTransition(speed);\n } else if (speed === true) {\n swiper.setTransition(swiper.params.speed);\n }\n const getSlideByIndex = index => {\n if (isVirtual) {\n return swiper.slides[swiper.getSlideIndexByData(index)];\n }\n return swiper.slides[index];\n };\n // Find slides currently in view\n if (swiper.params.slidesPerView !== 'auto' && swiper.params.slidesPerView > 1) {\n if (swiper.params.centeredSlides) {\n (swiper.visibleSlides || []).forEach(slide => {\n activeSlides.push(slide);\n });\n } else {\n for (i = 0; i < Math.ceil(swiper.params.slidesPerView); i += 1) {\n const index = swiper.activeIndex + i;\n if (index > swiper.slides.length && !isVirtual) break;\n activeSlides.push(getSlideByIndex(index));\n }\n }\n } else {\n activeSlides.push(getSlideByIndex(swiper.activeIndex));\n }\n\n // Find new height from highest slide in view\n for (i = 0; i < activeSlides.length; i += 1) {\n if (typeof activeSlides[i] !== 'undefined') {\n const height = activeSlides[i].offsetHeight;\n newHeight = height > newHeight ? height : newHeight;\n }\n }\n\n // Update Height\n if (newHeight || newHeight === 0) swiper.wrapperEl.style.height = `${newHeight}px`;\n}\n\nfunction updateSlidesOffset() {\n const swiper = this;\n const slides = swiper.slides;\n // eslint-disable-next-line\n const minusOffset = swiper.isElement ? swiper.isHorizontal() ? swiper.wrapperEl.offsetLeft : swiper.wrapperEl.offsetTop : 0;\n for (let i = 0; i < slides.length; i += 1) {\n slides[i].swiperSlideOffset = (swiper.isHorizontal() ? slides[i].offsetLeft : slides[i].offsetTop) - minusOffset - swiper.cssOverflowAdjustment();\n }\n}\n\nconst toggleSlideClasses$1 = (slideEl, condition, className) => {\n if (condition && !slideEl.classList.contains(className)) {\n slideEl.classList.add(className);\n } else if (!condition && slideEl.classList.contains(className)) {\n slideEl.classList.remove(className);\n }\n};\nfunction updateSlidesProgress(translate = this && this.translate || 0) {\n const swiper = this;\n const params = swiper.params;\n const {\n slides,\n rtlTranslate: rtl,\n snapGrid\n } = swiper;\n if (slides.length === 0) return;\n if (typeof slides[0].swiperSlideOffset === 'undefined') swiper.updateSlidesOffset();\n let offsetCenter = -translate;\n if (rtl) offsetCenter = translate;\n swiper.visibleSlidesIndexes = [];\n swiper.visibleSlides = [];\n let spaceBetween = params.spaceBetween;\n if (typeof spaceBetween === 'string' && spaceBetween.indexOf('%') >= 0) {\n spaceBetween = parseFloat(spaceBetween.replace('%', '')) / 100 * swiper.size;\n } else if (typeof spaceBetween === 'string') {\n spaceBetween = parseFloat(spaceBetween);\n }\n for (let i = 0; i < slides.length; i += 1) {\n const slide = slides[i];\n let slideOffset = slide.swiperSlideOffset;\n if (params.cssMode && params.centeredSlides) {\n slideOffset -= slides[0].swiperSlideOffset;\n }\n const slideProgress = (offsetCenter + (params.centeredSlides ? swiper.minTranslate() : 0) - slideOffset) / (slide.swiperSlideSize + spaceBetween);\n const originalSlideProgress = (offsetCenter - snapGrid[0] + (params.centeredSlides ? swiper.minTranslate() : 0) - slideOffset) / (slide.swiperSlideSize + spaceBetween);\n const slideBefore = -(offsetCenter - slideOffset);\n const slideAfter = slideBefore + swiper.slidesSizesGrid[i];\n const isFullyVisible = slideBefore >= 0 && slideBefore <= swiper.size - swiper.slidesSizesGrid[i];\n const isVisible = slideBefore >= 0 && slideBefore < swiper.size - 1 || slideAfter > 1 && slideAfter <= swiper.size || slideBefore <= 0 && slideAfter >= swiper.size;\n if (isVisible) {\n swiper.visibleSlides.push(slide);\n swiper.visibleSlidesIndexes.push(i);\n }\n toggleSlideClasses$1(slide, isVisible, params.slideVisibleClass);\n toggleSlideClasses$1(slide, isFullyVisible, params.slideFullyVisibleClass);\n slide.progress = rtl ? -slideProgress : slideProgress;\n slide.originalProgress = rtl ? -originalSlideProgress : originalSlideProgress;\n }\n}\n\nfunction updateProgress(translate) {\n const swiper = this;\n if (typeof translate === 'undefined') {\n const multiplier = swiper.rtlTranslate ? -1 : 1;\n // eslint-disable-next-line\n translate = swiper && swiper.translate && swiper.translate * multiplier || 0;\n }\n const params = swiper.params;\n const translatesDiff = swiper.maxTranslate() - swiper.minTranslate();\n let {\n progress,\n isBeginning,\n isEnd,\n progressLoop\n } = swiper;\n const wasBeginning = isBeginning;\n const wasEnd = isEnd;\n if (translatesDiff === 0) {\n progress = 0;\n isBeginning = true;\n isEnd = true;\n } else {\n progress = (translate - swiper.minTranslate()) / translatesDiff;\n const isBeginningRounded = Math.abs(translate - swiper.minTranslate()) < 1;\n const isEndRounded = Math.abs(translate - swiper.maxTranslate()) < 1;\n isBeginning = isBeginningRounded || progress <= 0;\n isEnd = isEndRounded || progress >= 1;\n if (isBeginningRounded) progress = 0;\n if (isEndRounded) progress = 1;\n }\n if (params.loop) {\n const firstSlideIndex = swiper.getSlideIndexByData(0);\n const lastSlideIndex = swiper.getSlideIndexByData(swiper.slides.length - 1);\n const firstSlideTranslate = swiper.slidesGrid[firstSlideIndex];\n const lastSlideTranslate = swiper.slidesGrid[lastSlideIndex];\n const translateMax = swiper.slidesGrid[swiper.slidesGrid.length - 1];\n const translateAbs = Math.abs(translate);\n if (translateAbs >= firstSlideTranslate) {\n progressLoop = (translateAbs - firstSlideTranslate) / translateMax;\n } else {\n progressLoop = (translateAbs + translateMax - lastSlideTranslate) / translateMax;\n }\n if (progressLoop > 1) progressLoop -= 1;\n }\n Object.assign(swiper, {\n progress,\n progressLoop,\n isBeginning,\n isEnd\n });\n if (params.watchSlidesProgress || params.centeredSlides && params.autoHeight) swiper.updateSlidesProgress(translate);\n if (isBeginning && !wasBeginning) {\n swiper.emit('reachBeginning toEdge');\n }\n if (isEnd && !wasEnd) {\n swiper.emit('reachEnd toEdge');\n }\n if (wasBeginning && !isBeginning || wasEnd && !isEnd) {\n swiper.emit('fromEdge');\n }\n swiper.emit('progress', progress);\n}\n\nconst toggleSlideClasses = (slideEl, condition, className) => {\n if (condition && !slideEl.classList.contains(className)) {\n slideEl.classList.add(className);\n } else if (!condition && slideEl.classList.contains(className)) {\n slideEl.classList.remove(className);\n }\n};\nfunction updateSlidesClasses() {\n const swiper = this;\n const {\n slides,\n params,\n slidesEl,\n activeIndex\n } = swiper;\n const isVirtual = swiper.virtual && params.virtual.enabled;\n const gridEnabled = swiper.grid && params.grid && params.grid.rows > 1;\n const getFilteredSlide = selector => {\n return elementChildren(slidesEl, `.${params.slideClass}${selector}, swiper-slide${selector}`)[0];\n };\n let activeSlide;\n let prevSlide;\n let nextSlide;\n if (isVirtual) {\n if (params.loop) {\n let slideIndex = activeIndex - swiper.virtual.slidesBefore;\n if (slideIndex < 0) slideIndex = swiper.virtual.slides.length + slideIndex;\n if (slideIndex >= swiper.virtual.slides.length) slideIndex -= swiper.virtual.slides.length;\n activeSlide = getFilteredSlide(`[data-swiper-slide-index=\"${slideIndex}\"]`);\n } else {\n activeSlide = getFilteredSlide(`[data-swiper-slide-index=\"${activeIndex}\"]`);\n }\n } else {\n if (gridEnabled) {\n activeSlide = slides.find(slideEl => slideEl.column === activeIndex);\n nextSlide = slides.find(slideEl => slideEl.column === activeIndex + 1);\n prevSlide = slides.find(slideEl => slideEl.column === activeIndex - 1);\n } else {\n activeSlide = slides[activeIndex];\n }\n }\n if (activeSlide) {\n if (!gridEnabled) {\n // Next Slide\n nextSlide = elementNextAll(activeSlide, `.${params.slideClass}, swiper-slide`)[0];\n if (params.loop && !nextSlide) {\n nextSlide = slides[0];\n }\n\n // Prev Slide\n prevSlide = elementPrevAll(activeSlide, `.${params.slideClass}, swiper-slide`)[0];\n if (params.loop && !prevSlide === 0) {\n prevSlide = slides[slides.length - 1];\n }\n }\n }\n slides.forEach(slideEl => {\n toggleSlideClasses(slideEl, slideEl === activeSlide, params.slideActiveClass);\n toggleSlideClasses(slideEl, slideEl === nextSlide, params.slideNextClass);\n toggleSlideClasses(slideEl, slideEl === prevSlide, params.slidePrevClass);\n });\n swiper.emitSlidesClasses();\n}\n\nconst processLazyPreloader = (swiper, imageEl) => {\n if (!swiper || swiper.destroyed || !swiper.params) return;\n const slideSelector = () => swiper.isElement ? `swiper-slide` : `.${swiper.params.slideClass}`;\n const slideEl = imageEl.closest(slideSelector());\n if (slideEl) {\n let lazyEl = slideEl.querySelector(`.${swiper.params.lazyPreloaderClass}`);\n if (!lazyEl && swiper.isElement) {\n if (slideEl.shadowRoot) {\n lazyEl = slideEl.shadowRoot.querySelector(`.${swiper.params.lazyPreloaderClass}`);\n } else {\n // init later\n requestAnimationFrame(() => {\n if (slideEl.shadowRoot) {\n lazyEl = slideEl.shadowRoot.querySelector(`.${swiper.params.lazyPreloaderClass}`);\n if (lazyEl && !lazyEl.lazyPreloaderManaged) lazyEl.remove();\n }\n });\n }\n }\n // Skip removal if managed by React/Vue component\n if (lazyEl && !lazyEl.lazyPreloaderManaged) lazyEl.remove();\n }\n};\nconst unlazy = (swiper, index) => {\n if (!swiper.slides[index]) return;\n const imageEl = swiper.slides[index].querySelector('[loading=\"lazy\"]');\n if (imageEl) imageEl.removeAttribute('loading');\n};\nconst preload = swiper => {\n if (!swiper || swiper.destroyed || !swiper.params) return;\n let amount = swiper.params.lazyPreloadPrevNext;\n const len = swiper.slides.length;\n if (!len || !amount || amount < 0) return;\n amount = Math.min(amount, len);\n const slidesPerView = swiper.params.slidesPerView === 'auto' ? swiper.slidesPerViewDynamic() : Math.ceil(swiper.params.slidesPerView);\n const activeIndex = swiper.activeIndex;\n if (swiper.params.grid && swiper.params.grid.rows > 1) {\n const activeColumn = activeIndex;\n const preloadColumns = [activeColumn - amount];\n preloadColumns.push(...Array.from({\n length: amount\n }).map((_, i) => {\n return activeColumn + slidesPerView + i;\n }));\n swiper.slides.forEach((slideEl, i) => {\n if (preloadColumns.includes(slideEl.column)) unlazy(swiper, i);\n });\n return;\n }\n const slideIndexLastInView = activeIndex + slidesPerView - 1;\n if (swiper.params.rewind || swiper.params.loop) {\n for (let i = activeIndex - amount; i <= slideIndexLastInView + amount; i += 1) {\n const realIndex = (i % len + len) % len;\n if (realIndex < activeIndex || realIndex > slideIndexLastInView) unlazy(swiper, realIndex);\n }\n } else {\n for (let i = Math.max(activeIndex - amount, 0); i <= Math.min(slideIndexLastInView + amount, len - 1); i += 1) {\n if (i !== activeIndex && (i > slideIndexLastInView || i < activeIndex)) {\n unlazy(swiper, i);\n }\n }\n }\n};\n\nfunction getActiveIndexByTranslate(swiper) {\n const {\n slidesGrid,\n params\n } = swiper;\n const translate = swiper.rtlTranslate ? swiper.translate : -swiper.translate;\n let activeIndex;\n for (let i = 0; i < slidesGrid.length; i += 1) {\n if (typeof slidesGrid[i + 1] !== 'undefined') {\n if (translate >= slidesGrid[i] && translate < slidesGrid[i + 1] - (slidesGrid[i + 1] - slidesGrid[i]) / 2) {\n activeIndex = i;\n } else if (translate >= slidesGrid[i] && translate < slidesGrid[i + 1]) {\n activeIndex = i + 1;\n }\n } else if (translate >= slidesGrid[i]) {\n activeIndex = i;\n }\n }\n // Normalize slideIndex\n if (params.normalizeSlideIndex) {\n if (activeIndex < 0 || typeof activeIndex === 'undefined') activeIndex = 0;\n }\n return activeIndex;\n}\nfunction updateActiveIndex(newActiveIndex) {\n const swiper = this;\n const translate = swiper.rtlTranslate ? swiper.translate : -swiper.translate;\n const {\n snapGrid,\n params,\n activeIndex: previousIndex,\n realIndex: previousRealIndex,\n snapIndex: previousSnapIndex\n } = swiper;\n let activeIndex = newActiveIndex;\n let snapIndex;\n const getVirtualRealIndex = aIndex => {\n let realIndex = aIndex - swiper.virtual.slidesBefore;\n if (realIndex < 0) {\n realIndex = swiper.virtual.slides.length + realIndex;\n }\n if (realIndex >= swiper.virtual.slides.length) {\n realIndex -= swiper.virtual.slides.length;\n }\n return realIndex;\n };\n if (typeof activeIndex === 'undefined') {\n activeIndex = getActiveIndexByTranslate(swiper);\n }\n if (snapGrid.indexOf(translate) >= 0) {\n snapIndex = snapGrid.indexOf(translate);\n } else {\n const skip = Math.min(params.slidesPerGroupSkip, activeIndex);\n snapIndex = skip + Math.floor((activeIndex - skip) / params.slidesPerGroup);\n }\n if (snapIndex >= snapGrid.length) snapIndex = snapGrid.length - 1;\n if (activeIndex === previousIndex && !swiper.params.loop) {\n if (snapIndex !== previousSnapIndex) {\n swiper.snapIndex = snapIndex;\n swiper.emit('snapIndexChange');\n }\n return;\n }\n if (activeIndex === previousIndex && swiper.params.loop && swiper.virtual && swiper.params.virtual.enabled) {\n swiper.realIndex = getVirtualRealIndex(activeIndex);\n return;\n }\n const gridEnabled = swiper.grid && params.grid && params.grid.rows > 1;\n\n // Get real index\n let realIndex;\n if (swiper.virtual && params.virtual.enabled) {\n if (params.loop) {\n realIndex = getVirtualRealIndex(activeIndex);\n } else {\n realIndex = activeIndex;\n }\n } else if (gridEnabled) {\n const firstSlideInColumn = swiper.slides.find(slideEl => slideEl.column === activeIndex);\n let activeSlideIndex = parseInt(firstSlideInColumn.getAttribute('data-swiper-slide-index'), 10);\n if (Number.isNaN(activeSlideIndex)) {\n activeSlideIndex = Math.max(swiper.slides.indexOf(firstSlideInColumn), 0);\n }\n realIndex = Math.floor(activeSlideIndex / params.grid.rows);\n } else if (swiper.slides[activeIndex]) {\n const slideIndex = swiper.slides[activeIndex].getAttribute('data-swiper-slide-index');\n if (slideIndex) {\n realIndex = parseInt(slideIndex, 10);\n } else {\n realIndex = activeIndex;\n }\n } else {\n realIndex = activeIndex;\n }\n Object.assign(swiper, {\n previousSnapIndex,\n snapIndex,\n previousRealIndex,\n realIndex,\n previousIndex,\n activeIndex\n });\n if (swiper.initialized) {\n preload(swiper);\n }\n swiper.emit('activeIndexChange');\n swiper.emit('snapIndexChange');\n if (swiper.initialized || swiper.params.runCallbacksOnInit) {\n if (previousRealIndex !== realIndex) {\n swiper.emit('realIndexChange');\n }\n swiper.emit('slideChange');\n }\n}\n\nfunction updateClickedSlide(el, path) {\n const swiper = this;\n const params = swiper.params;\n let slide = el.closest(`.${params.slideClass}, swiper-slide`);\n if (!slide && swiper.isElement && path && path.length > 1 && path.includes(el)) {\n [...path.slice(path.indexOf(el) + 1, path.length)].forEach(pathEl => {\n if (!slide && pathEl.matches && pathEl.matches(`.${params.slideClass}, swiper-slide`)) {\n slide = pathEl;\n }\n });\n }\n let slideFound = false;\n let slideIndex;\n if (slide) {\n for (let i = 0; i < swiper.slides.length; i += 1) {\n if (swiper.slides[i] === slide) {\n slideFound = true;\n slideIndex = i;\n break;\n }\n }\n }\n if (slide && slideFound) {\n swiper.clickedSlide = slide;\n if (swiper.virtual && swiper.params.virtual.enabled) {\n swiper.clickedIndex = parseInt(slide.getAttribute('data-swiper-slide-index'), 10);\n } else {\n swiper.clickedIndex = slideIndex;\n }\n } else {\n swiper.clickedSlide = undefined;\n swiper.clickedIndex = undefined;\n return;\n }\n if (params.slideToClickedSlide && swiper.clickedIndex !== undefined && swiper.clickedIndex !== swiper.activeIndex) {\n swiper.slideToClickedSlide();\n }\n}\n\nvar update = {\n updateSize,\n updateSlides,\n updateAutoHeight,\n updateSlidesOffset,\n updateSlidesProgress,\n updateProgress,\n updateSlidesClasses,\n updateActiveIndex,\n updateClickedSlide\n};\n\nfunction getSwiperTranslate(axis = this.isHorizontal() ? 'x' : 'y') {\n const swiper = this;\n const {\n params,\n rtlTranslate: rtl,\n translate,\n wrapperEl\n } = swiper;\n if (params.virtualTranslate) {\n return rtl ? -translate : translate;\n }\n if (params.cssMode) {\n return translate;\n }\n let currentTranslate = getTranslate(wrapperEl, axis);\n currentTranslate += swiper.cssOverflowAdjustment();\n if (rtl) currentTranslate = -currentTranslate;\n return currentTranslate || 0;\n}\n\nfunction setTranslate(translate, byController) {\n const swiper = this;\n const {\n rtlTranslate: rtl,\n params,\n wrapperEl,\n progress\n } = swiper;\n let x = 0;\n let y = 0;\n const z = 0;\n if (swiper.isHorizontal()) {\n x = rtl ? -translate : translate;\n } else {\n y = translate;\n }\n if (params.roundLengths) {\n x = Math.floor(x);\n y = Math.floor(y);\n }\n swiper.previousTranslate = swiper.translate;\n swiper.translate = swiper.isHorizontal() ? x : y;\n if (params.cssMode) {\n wrapperEl[swiper.isHorizontal() ? 'scrollLeft' : 'scrollTop'] = swiper.isHorizontal() ? -x : -y;\n } else if (!params.virtualTranslate) {\n if (swiper.isHorizontal()) {\n x -= swiper.cssOverflowAdjustment();\n } else {\n y -= swiper.cssOverflowAdjustment();\n }\n wrapperEl.style.transform = `translate3d(${x}px, ${y}px, ${z}px)`;\n }\n\n // Check if we need to update progress\n let newProgress;\n const translatesDiff = swiper.maxTranslate() - swiper.minTranslate();\n if (translatesDiff === 0) {\n newProgress = 0;\n } else {\n newProgress = (translate - swiper.minTranslate()) / translatesDiff;\n }\n if (newProgress !== progress) {\n swiper.updateProgress(translate);\n }\n swiper.emit('setTranslate', swiper.translate, byController);\n}\n\nfunction minTranslate() {\n return -this.snapGrid[0];\n}\n\nfunction maxTranslate() {\n return -this.snapGrid[this.snapGrid.length - 1];\n}\n\nfunction translateTo(translate = 0, speed = this.params.speed, runCallbacks = true, translateBounds = true, internal) {\n const swiper = this;\n const {\n params,\n wrapperEl\n } = swiper;\n if (swiper.animating && params.preventInteractionOnTransition) {\n return false;\n }\n const minTranslate = swiper.minTranslate();\n const maxTranslate = swiper.maxTranslate();\n let newTranslate;\n if (translateBounds && translate > minTranslate) newTranslate = minTranslate;else if (translateBounds && translate < maxTranslate) newTranslate = maxTranslate;else newTranslate = translate;\n\n // Update progress\n swiper.updateProgress(newTranslate);\n if (params.cssMode) {\n const isH = swiper.isHorizontal();\n if (speed === 0) {\n wrapperEl[isH ? 'scrollLeft' : 'scrollTop'] = -newTranslate;\n } else {\n if (!swiper.support.smoothScroll) {\n animateCSSModeScroll({\n swiper,\n targetPosition: -newTranslate,\n side: isH ? 'left' : 'top'\n });\n return true;\n }\n wrapperEl.scrollTo({\n [isH ? 'left' : 'top']: -newTranslate,\n behavior: 'smooth'\n });\n }\n return true;\n }\n if (speed === 0) {\n swiper.setTransition(0);\n swiper.setTranslate(newTranslate);\n if (runCallbacks) {\n swiper.emit('beforeTransitionStart', speed, internal);\n swiper.emit('transitionEnd');\n }\n } else {\n swiper.setTransition(speed);\n swiper.setTranslate(newTranslate);\n if (runCallbacks) {\n swiper.emit('beforeTransitionStart', speed, internal);\n swiper.emit('transitionStart');\n }\n if (!swiper.animating) {\n swiper.animating = true;\n if (!swiper.onTranslateToWrapperTransitionEnd) {\n swiper.onTranslateToWrapperTransitionEnd = function transitionEnd(e) {\n if (!swiper || swiper.destroyed) return;\n if (e.target !== this) return;\n swiper.wrapperEl.removeEventListener('transitionend', swiper.onTranslateToWrapperTransitionEnd);\n swiper.onTranslateToWrapperTransitionEnd = null;\n delete swiper.onTranslateToWrapperTransitionEnd;\n swiper.animating = false;\n if (runCallbacks) {\n swiper.emit('transitionEnd');\n }\n };\n }\n swiper.wrapperEl.addEventListener('transitionend', swiper.onTranslateToWrapperTransitionEnd);\n }\n }\n return true;\n}\n\nvar translate = {\n getTranslate: getSwiperTranslate,\n setTranslate,\n minTranslate,\n maxTranslate,\n translateTo\n};\n\nfunction setTransition(duration, byController) {\n const swiper = this;\n if (!swiper.params.cssMode) {\n swiper.wrapperEl.style.transitionDuration = `${duration}ms`;\n swiper.wrapperEl.style.transitionDelay = duration === 0 ? `0ms` : '';\n }\n swiper.emit('setTransition', duration, byController);\n}\n\nfunction transitionEmit({\n swiper,\n runCallbacks,\n direction,\n step\n}) {\n const {\n activeIndex,\n previousIndex\n } = swiper;\n let dir = direction;\n if (!dir) {\n if (activeIndex > previousIndex) dir = 'next';else if (activeIndex < previousIndex) dir = 'prev';else dir = 'reset';\n }\n swiper.emit(`transition${step}`);\n if (runCallbacks && dir === 'reset') {\n swiper.emit(`slideResetTransition${step}`);\n } else if (runCallbacks && activeIndex !== previousIndex) {\n swiper.emit(`slideChangeTransition${step}`);\n if (dir === 'next') {\n swiper.emit(`slideNextTransition${step}`);\n } else {\n swiper.emit(`slidePrevTransition${step}`);\n }\n }\n}\n\nfunction transitionStart(runCallbacks = true, direction) {\n const swiper = this;\n const {\n params\n } = swiper;\n if (params.cssMode) return;\n if (params.autoHeight) {\n swiper.updateAutoHeight();\n }\n transitionEmit({\n swiper,\n runCallbacks,\n direction,\n step: 'Start'\n });\n}\n\nfunction transitionEnd(runCallbacks = true, direction) {\n const swiper = this;\n const {\n params\n } = swiper;\n swiper.animating = false;\n if (params.cssMode) return;\n swiper.setTransition(0);\n transitionEmit({\n swiper,\n runCallbacks,\n direction,\n step: 'End'\n });\n}\n\nvar transition = {\n setTransition,\n transitionStart,\n transitionEnd\n};\n\nfunction slideTo(index = 0, speed, runCallbacks = true, internal, initial) {\n if (typeof index === 'string') {\n index = parseInt(index, 10);\n }\n const swiper = this;\n let slideIndex = index;\n if (slideIndex < 0) slideIndex = 0;\n const {\n params,\n snapGrid,\n slidesGrid,\n previousIndex,\n activeIndex,\n rtlTranslate: rtl,\n wrapperEl,\n enabled\n } = swiper;\n if (!enabled && !internal && !initial || swiper.destroyed || swiper.animating && params.preventInteractionOnTransition) {\n return false;\n }\n if (typeof speed === 'undefined') {\n speed = swiper.params.speed;\n }\n const skip = Math.min(swiper.params.slidesPerGroupSkip, slideIndex);\n let snapIndex = skip + Math.floor((slideIndex - skip) / swiper.params.slidesPerGroup);\n if (snapIndex >= snapGrid.length) snapIndex = snapGrid.length - 1;\n const translate = -snapGrid[snapIndex];\n // Normalize slideIndex\n if (params.normalizeSlideIndex) {\n for (let i = 0; i < slidesGrid.length; i += 1) {\n const normalizedTranslate = -Math.floor(translate * 100);\n const normalizedGrid = Math.floor(slidesGrid[i] * 100);\n const normalizedGridNext = Math.floor(slidesGrid[i + 1] * 100);\n if (typeof slidesGrid[i + 1] !== 'undefined') {\n if (normalizedTranslate >= normalizedGrid && normalizedTranslate < normalizedGridNext - (normalizedGridNext - normalizedGrid) / 2) {\n slideIndex = i;\n } else if (normalizedTranslate >= normalizedGrid && normalizedTranslate < normalizedGridNext) {\n slideIndex = i + 1;\n }\n } else if (normalizedTranslate >= normalizedGrid) {\n slideIndex = i;\n }\n }\n }\n // Directions locks\n if (swiper.initialized && slideIndex !== activeIndex) {\n if (!swiper.allowSlideNext && (rtl ? translate > swiper.translate && translate > swiper.minTranslate() : translate < swiper.translate && translate < swiper.minTranslate())) {\n return false;\n }\n if (!swiper.allowSlidePrev && translate > swiper.translate && translate > swiper.maxTranslate()) {\n if ((activeIndex || 0) !== slideIndex) {\n return false;\n }\n }\n }\n if (slideIndex !== (previousIndex || 0) && runCallbacks) {\n swiper.emit('beforeSlideChangeStart');\n }\n\n // Update progress\n swiper.updateProgress(translate);\n let direction;\n if (slideIndex > activeIndex) direction = 'next';else if (slideIndex < activeIndex) direction = 'prev';else direction = 'reset';\n\n // initial virtual\n const isVirtual = swiper.virtual && swiper.params.virtual.enabled;\n const isInitialVirtual = isVirtual && initial;\n // Update Index\n if (!isInitialVirtual && (rtl && -translate === swiper.translate || !rtl && translate === swiper.translate)) {\n swiper.updateActiveIndex(slideIndex);\n // Update Height\n if (params.autoHeight) {\n swiper.updateAutoHeight();\n }\n swiper.updateSlidesClasses();\n if (params.effect !== 'slide') {\n swiper.setTranslate(translate);\n }\n if (direction !== 'reset') {\n swiper.transitionStart(runCallbacks, direction);\n swiper.transitionEnd(runCallbacks, direction);\n }\n return false;\n }\n if (params.cssMode) {\n const isH = swiper.isHorizontal();\n const t = rtl ? translate : -translate;\n if (speed === 0) {\n if (isVirtual) {\n swiper.wrapperEl.style.scrollSnapType = 'none';\n swiper._immediateVirtual = true;\n }\n if (isVirtual && !swiper._cssModeVirtualInitialSet && swiper.params.initialSlide > 0) {\n swiper._cssModeVirtualInitialSet = true;\n requestAnimationFrame(() => {\n wrapperEl[isH ? 'scrollLeft' : 'scrollTop'] = t;\n });\n } else {\n wrapperEl[isH ? 'scrollLeft' : 'scrollTop'] = t;\n }\n if (isVirtual) {\n requestAnimationFrame(() => {\n swiper.wrapperEl.style.scrollSnapType = '';\n swiper._immediateVirtual = false;\n });\n }\n } else {\n if (!swiper.support.smoothScroll) {\n animateCSSModeScroll({\n swiper,\n targetPosition: t,\n side: isH ? 'left' : 'top'\n });\n return true;\n }\n wrapperEl.scrollTo({\n [isH ? 'left' : 'top']: t,\n behavior: 'smooth'\n });\n }\n return true;\n }\n const browser = getBrowser();\n const isSafari = browser.isSafari;\n if (isVirtual && !initial && isSafari && swiper.isElement) {\n swiper.virtual.update(false, false, slideIndex);\n }\n swiper.setTransition(speed);\n swiper.setTranslate(translate);\n swiper.updateActiveIndex(slideIndex);\n swiper.updateSlidesClasses();\n swiper.emit('beforeTransitionStart', speed, internal);\n swiper.transitionStart(runCallbacks, direction);\n if (speed === 0) {\n swiper.transitionEnd(runCallbacks, direction);\n } else if (!swiper.animating) {\n swiper.animating = true;\n if (!swiper.onSlideToWrapperTransitionEnd) {\n swiper.onSlideToWrapperTransitionEnd = function transitionEnd(e) {\n if (!swiper || swiper.destroyed) return;\n if (e.target !== this) return;\n swiper.wrapperEl.removeEventListener('transitionend', swiper.onSlideToWrapperTransitionEnd);\n swiper.onSlideToWrapperTransitionEnd = null;\n delete swiper.onSlideToWrapperTransitionEnd;\n swiper.transitionEnd(runCallbacks, direction);\n };\n }\n swiper.wrapperEl.addEventListener('transitionend', swiper.onSlideToWrapperTransitionEnd);\n }\n return true;\n}\n\nfunction slideToLoop(index = 0, speed, runCallbacks = true, internal) {\n if (typeof index === 'string') {\n const indexAsNumber = parseInt(index, 10);\n index = indexAsNumber;\n }\n const swiper = this;\n if (swiper.destroyed) return;\n if (typeof speed === 'undefined') {\n speed = swiper.params.speed;\n }\n const gridEnabled = swiper.grid && swiper.params.grid && swiper.params.grid.rows > 1;\n let newIndex = index;\n if (swiper.params.loop) {\n if (swiper.virtual && swiper.params.virtual.enabled) {\n // eslint-disable-next-line\n newIndex = newIndex + swiper.virtual.slidesBefore;\n } else {\n let targetSlideIndex;\n if (gridEnabled) {\n const slideIndex = newIndex * swiper.params.grid.rows;\n targetSlideIndex = swiper.slides.find(slideEl => slideEl.getAttribute('data-swiper-slide-index') * 1 === slideIndex).column;\n } else {\n targetSlideIndex = swiper.getSlideIndexByData(newIndex);\n }\n const cols = gridEnabled ? Math.ceil(swiper.slides.length / swiper.params.grid.rows) : swiper.slides.length;\n const {\n centeredSlides,\n slidesOffsetBefore,\n slidesOffsetAfter\n } = swiper.params;\n const bothDirections = centeredSlides || !!slidesOffsetBefore || !!slidesOffsetAfter;\n let slidesPerView = swiper.params.slidesPerView;\n if (slidesPerView === 'auto') {\n slidesPerView = swiper.slidesPerViewDynamic();\n } else {\n slidesPerView = Math.ceil(parseFloat(swiper.params.slidesPerView, 10));\n if (bothDirections && slidesPerView % 2 === 0) {\n slidesPerView = slidesPerView + 1;\n }\n }\n let needLoopFix = cols - targetSlideIndex < slidesPerView;\n if (bothDirections) {\n needLoopFix = needLoopFix || targetSlideIndex < Math.ceil(slidesPerView / 2);\n }\n if (internal && bothDirections && swiper.params.slidesPerView !== 'auto' && !gridEnabled) {\n needLoopFix = false;\n }\n if (needLoopFix) {\n const direction = bothDirections ? targetSlideIndex < swiper.activeIndex ? 'prev' : 'next' : targetSlideIndex - swiper.activeIndex - 1 < swiper.params.slidesPerView ? 'next' : 'prev';\n swiper.loopFix({\n direction,\n slideTo: true,\n activeSlideIndex: direction === 'next' ? targetSlideIndex + 1 : targetSlideIndex - cols + 1,\n slideRealIndex: direction === 'next' ? swiper.realIndex : undefined\n });\n }\n if (gridEnabled) {\n const slideIndex = newIndex * swiper.params.grid.rows;\n newIndex = swiper.slides.find(slideEl => slideEl.getAttribute('data-swiper-slide-index') * 1 === slideIndex).column;\n } else {\n newIndex = swiper.getSlideIndexByData(newIndex);\n }\n }\n }\n requestAnimationFrame(() => {\n swiper.slideTo(newIndex, speed, runCallbacks, internal);\n });\n return swiper;\n}\n\n/* eslint no-unused-vars: \"off\" */\nfunction slideNext(speed, runCallbacks = true, internal) {\n const swiper = this;\n const {\n enabled,\n params,\n animating\n } = swiper;\n if (!enabled || swiper.destroyed) return swiper;\n if (typeof speed === 'undefined') {\n speed = swiper.params.speed;\n }\n let perGroup = params.slidesPerGroup;\n if (params.slidesPerView === 'auto' && params.slidesPerGroup === 1 && params.slidesPerGroupAuto) {\n perGroup = Math.max(swiper.slidesPerViewDynamic('current', true), 1);\n }\n const increment = swiper.activeIndex < params.slidesPerGroupSkip ? 1 : perGroup;\n const isVirtual = swiper.virtual && params.virtual.enabled;\n if (params.loop) {\n if (animating && !isVirtual && params.loopPreventsSliding) return false;\n swiper.loopFix({\n direction: 'next'\n });\n // eslint-disable-next-line\n swiper._clientLeft = swiper.wrapperEl.clientLeft;\n if (swiper.activeIndex === swiper.slides.length - 1 && params.cssMode) {\n requestAnimationFrame(() => {\n swiper.slideTo(swiper.activeIndex + increment, speed, runCallbacks, internal);\n });\n return true;\n }\n }\n if (params.rewind && swiper.isEnd) {\n return swiper.slideTo(0, speed, runCallbacks, internal);\n }\n return swiper.slideTo(swiper.activeIndex + increment, speed, runCallbacks, internal);\n}\n\n/* eslint no-unused-vars: \"off\" */\nfunction slidePrev(speed, runCallbacks = true, internal) {\n const swiper = this;\n const {\n params,\n snapGrid,\n slidesGrid,\n rtlTranslate,\n enabled,\n animating\n } = swiper;\n if (!enabled || swiper.destroyed) return swiper;\n if (typeof speed === 'undefined') {\n speed = swiper.params.speed;\n }\n const isVirtual = swiper.virtual && params.virtual.enabled;\n if (params.loop) {\n if (animating && !isVirtual && params.loopPreventsSliding) return false;\n swiper.loopFix({\n direction: 'prev'\n });\n // eslint-disable-next-line\n swiper._clientLeft = swiper.wrapperEl.clientLeft;\n }\n const translate = rtlTranslate ? swiper.translate : -swiper.translate;\n function normalize(val) {\n if (val < 0) return -Math.floor(Math.abs(val));\n return Math.floor(val);\n }\n const normalizedTranslate = normalize(translate);\n const normalizedSnapGrid = snapGrid.map(val => normalize(val));\n const isFreeMode = params.freeMode && params.freeMode.enabled;\n let prevSnap = snapGrid[normalizedSnapGrid.indexOf(normalizedTranslate) - 1];\n if (typeof prevSnap === 'undefined' && (params.cssMode || isFreeMode)) {\n let prevSnapIndex;\n snapGrid.forEach((snap, snapIndex) => {\n if (normalizedTranslate >= snap) {\n // prevSnap = snap;\n prevSnapIndex = snapIndex;\n }\n });\n if (typeof prevSnapIndex !== 'undefined') {\n prevSnap = isFreeMode ? snapGrid[prevSnapIndex] : snapGrid[prevSnapIndex > 0 ? prevSnapIndex - 1 : prevSnapIndex];\n }\n }\n let prevIndex = 0;\n if (typeof prevSnap !== 'undefined') {\n prevIndex = slidesGrid.indexOf(prevSnap);\n if (prevIndex < 0) prevIndex = swiper.activeIndex - 1;\n if (params.slidesPerView === 'auto' && params.slidesPerGroup === 1 && params.slidesPerGroupAuto) {\n prevIndex = prevIndex - swiper.slidesPerViewDynamic('previous', true) + 1;\n prevIndex = Math.max(prevIndex, 0);\n }\n }\n if (params.rewind && swiper.isBeginning) {\n const lastIndex = swiper.params.virtual && swiper.params.virtual.enabled && swiper.virtual ? swiper.virtual.slides.length - 1 : swiper.slides.length - 1;\n return swiper.slideTo(lastIndex, speed, runCallbacks, internal);\n } else if (params.loop && swiper.activeIndex === 0 && params.cssMode) {\n requestAnimationFrame(() => {\n swiper.slideTo(prevIndex, speed, runCallbacks, internal);\n });\n return true;\n }\n return swiper.slideTo(prevIndex, speed, runCallbacks, internal);\n}\n\n/* eslint no-unused-vars: \"off\" */\nfunction slideReset(speed, runCallbacks = true, internal) {\n const swiper = this;\n if (swiper.destroyed) return;\n if (typeof speed === 'undefined') {\n speed = swiper.params.speed;\n }\n return swiper.slideTo(swiper.activeIndex, speed, runCallbacks, internal);\n}\n\n/* eslint no-unused-vars: \"off\" */\nfunction slideToClosest(speed, runCallbacks = true, internal, threshold = 0.5) {\n const swiper = this;\n if (swiper.destroyed) return;\n if (typeof speed === 'undefined') {\n speed = swiper.params.speed;\n }\n let index = swiper.activeIndex;\n const skip = Math.min(swiper.params.slidesPerGroupSkip, index);\n const snapIndex = skip + Math.floor((index - skip) / swiper.params.slidesPerGroup);\n const translate = swiper.rtlTranslate ? swiper.translate : -swiper.translate;\n if (translate >= swiper.snapGrid[snapIndex]) {\n // The current translate is on or after the current snap index, so the choice\n // is between the current index and the one after it.\n const currentSnap = swiper.snapGrid[snapIndex];\n const nextSnap = swiper.snapGrid[snapIndex + 1];\n if (translate - currentSnap > (nextSnap - currentSnap) * threshold) {\n index += swiper.params.slidesPerGroup;\n }\n } else {\n // The current translate is before the current snap index, so the choice\n // is between the current index and the one before it.\n const prevSnap = swiper.snapGrid[snapIndex - 1];\n const currentSnap = swiper.snapGrid[snapIndex];\n if (translate - prevSnap <= (currentSnap - prevSnap) * threshold) {\n index -= swiper.params.slidesPerGroup;\n }\n }\n index = Math.max(index, 0);\n index = Math.min(index, swiper.slidesGrid.length - 1);\n return swiper.slideTo(index, speed, runCallbacks, internal);\n}\n\nfunction slideToClickedSlide() {\n const swiper = this;\n if (swiper.destroyed) return;\n const {\n params,\n slidesEl\n } = swiper;\n const slidesPerView = params.slidesPerView === 'auto' ? swiper.slidesPerViewDynamic() : params.slidesPerView;\n let slideToIndex = swiper.getSlideIndexWhenGrid(swiper.clickedIndex);\n let realIndex;\n const slideSelector = swiper.isElement ? `swiper-slide` : `.${params.slideClass}`;\n const isGrid = swiper.grid && swiper.params.grid && swiper.params.grid.rows > 1;\n if (params.loop) {\n if (swiper.animating) return;\n realIndex = parseInt(swiper.clickedSlide.getAttribute('data-swiper-slide-index'), 10);\n if (params.centeredSlides) {\n swiper.slideToLoop(realIndex);\n } else if (slideToIndex > (isGrid ? (swiper.slides.length - slidesPerView) / 2 - (swiper.params.grid.rows - 1) : swiper.slides.length - slidesPerView)) {\n swiper.loopFix();\n slideToIndex = swiper.getSlideIndex(elementChildren(slidesEl, `${slideSelector}[data-swiper-slide-index=\"${realIndex}\"]`)[0]);\n nextTick(() => {\n swiper.slideTo(slideToIndex);\n });\n } else {\n swiper.slideTo(slideToIndex);\n }\n } else {\n swiper.slideTo(slideToIndex);\n }\n}\n\nvar slide = {\n slideTo,\n slideToLoop,\n slideNext,\n slidePrev,\n slideReset,\n slideToClosest,\n slideToClickedSlide\n};\n\nfunction loopCreate(slideRealIndex, initial) {\n const swiper = this;\n const {\n params,\n slidesEl\n } = swiper;\n if (!params.loop || swiper.virtual && swiper.params.virtual.enabled) return;\n const initSlides = () => {\n const slides = elementChildren(slidesEl, `.${params.slideClass}, swiper-slide`);\n slides.forEach((el, index) => {\n el.setAttribute('data-swiper-slide-index', index);\n });\n };\n const clearBlankSlides = () => {\n const slides = elementChildren(slidesEl, `.${params.slideBlankClass}`);\n slides.forEach(el => {\n el.remove();\n });\n if (slides.length > 0) {\n swiper.recalcSlides();\n swiper.updateSlides();\n }\n };\n const gridEnabled = swiper.grid && params.grid && params.grid.rows > 1;\n if (params.loopAddBlankSlides && (params.slidesPerGroup > 1 || gridEnabled)) {\n clearBlankSlides();\n }\n const slidesPerGroup = params.slidesPerGroup * (gridEnabled ? params.grid.rows : 1);\n const shouldFillGroup = swiper.slides.length % slidesPerGroup !== 0;\n const shouldFillGrid = gridEnabled && swiper.slides.length % params.grid.rows !== 0;\n const addBlankSlides = amountOfSlides => {\n for (let i = 0; i < amountOfSlides; i += 1) {\n const slideEl = swiper.isElement ? createElement('swiper-slide', [params.slideBlankClass]) : createElement('div', [params.slideClass, params.slideBlankClass]);\n swiper.slidesEl.append(slideEl);\n }\n };\n if (shouldFillGroup) {\n if (params.loopAddBlankSlides) {\n const slidesToAdd = slidesPerGroup - swiper.slides.length % slidesPerGroup;\n addBlankSlides(slidesToAdd);\n swiper.recalcSlides();\n swiper.updateSlides();\n } else {\n showWarning('Swiper Loop Warning: The number of slides is not even to slidesPerGroup, loop mode may not function properly. You need to add more slides (or make duplicates, or empty slides)');\n }\n initSlides();\n } else if (shouldFillGrid) {\n if (params.loopAddBlankSlides) {\n const slidesToAdd = params.grid.rows - swiper.slides.length % params.grid.rows;\n addBlankSlides(slidesToAdd);\n swiper.recalcSlides();\n swiper.updateSlides();\n } else {\n showWarning('Swiper Loop Warning: The number of slides is not even to grid.rows, loop mode may not function properly. You need to add more slides (or make duplicates, or empty slides)');\n }\n initSlides();\n } else {\n initSlides();\n }\n const bothDirections = params.centeredSlides || !!params.slidesOffsetBefore || !!params.slidesOffsetAfter;\n swiper.loopFix({\n slideRealIndex,\n direction: bothDirections ? undefined : 'next',\n initial\n });\n}\n\nfunction loopFix({\n slideRealIndex,\n slideTo = true,\n direction,\n setTranslate,\n activeSlideIndex,\n initial,\n byController,\n byMousewheel\n} = {}) {\n const swiper = this;\n if (!swiper.params.loop) return;\n swiper.emit('beforeLoopFix');\n const {\n slides,\n allowSlidePrev,\n allowSlideNext,\n slidesEl,\n params\n } = swiper;\n const {\n centeredSlides,\n slidesOffsetBefore,\n slidesOffsetAfter,\n initialSlide\n } = params;\n const bothDirections = centeredSlides || !!slidesOffsetBefore || !!slidesOffsetAfter;\n swiper.allowSlidePrev = true;\n swiper.allowSlideNext = true;\n if (swiper.virtual && params.virtual.enabled) {\n if (slideTo) {\n if (!bothDirections && swiper.snapIndex === 0) {\n swiper.slideTo(swiper.virtual.slides.length, 0, false, true);\n } else if (bothDirections && swiper.snapIndex < params.slidesPerView) {\n swiper.slideTo(swiper.virtual.slides.length + swiper.snapIndex, 0, false, true);\n } else if (swiper.snapIndex === swiper.snapGrid.length - 1) {\n swiper.slideTo(swiper.virtual.slidesBefore, 0, false, true);\n }\n }\n swiper.allowSlidePrev = allowSlidePrev;\n swiper.allowSlideNext = allowSlideNext;\n swiper.emit('loopFix');\n return;\n }\n let slidesPerView = params.slidesPerView;\n if (slidesPerView === 'auto') {\n slidesPerView = swiper.slidesPerViewDynamic();\n } else {\n slidesPerView = Math.ceil(parseFloat(params.slidesPerView, 10));\n if (bothDirections && slidesPerView % 2 === 0) {\n slidesPerView = slidesPerView + 1;\n }\n }\n const slidesPerGroup = params.slidesPerGroupAuto ? slidesPerView : params.slidesPerGroup;\n let loopedSlides = bothDirections ? Math.max(slidesPerGroup, Math.ceil(slidesPerView / 2)) : slidesPerGroup;\n if (loopedSlides % slidesPerGroup !== 0) {\n loopedSlides += slidesPerGroup - loopedSlides % slidesPerGroup;\n }\n loopedSlides += params.loopAdditionalSlides;\n swiper.loopedSlides = loopedSlides;\n const gridEnabled = swiper.grid && params.grid && params.grid.rows > 1;\n if (slides.length < slidesPerView + loopedSlides || swiper.params.effect === 'cards' && slides.length < slidesPerView + loopedSlides * 2) {\n showWarning('Swiper Loop Warning: The number of slides is not enough for loop mode, it will be disabled or not function properly. You need to add more slides (or make duplicates) or lower the values of slidesPerView and slidesPerGroup parameters');\n } else if (gridEnabled && params.grid.fill === 'row') {\n showWarning('Swiper Loop Warning: Loop mode is not compatible with grid.fill = `row`');\n }\n const prependSlidesIndexes = [];\n const appendSlidesIndexes = [];\n const cols = gridEnabled ? Math.ceil(slides.length / params.grid.rows) : slides.length;\n const isInitialOverflow = initial && cols - initialSlide < slidesPerView && !bothDirections;\n let activeIndex = isInitialOverflow ? initialSlide : swiper.activeIndex;\n if (typeof activeSlideIndex === 'undefined') {\n activeSlideIndex = swiper.getSlideIndex(slides.find(el => el.classList.contains(params.slideActiveClass)));\n } else {\n activeIndex = activeSlideIndex;\n }\n const isNext = direction === 'next' || !direction;\n const isPrev = direction === 'prev' || !direction;\n let slidesPrepended = 0;\n let slidesAppended = 0;\n const activeColIndex = gridEnabled ? slides[activeSlideIndex].column : activeSlideIndex;\n const activeColIndexWithShift = activeColIndex + (bothDirections && typeof setTranslate === 'undefined' ? -slidesPerView / 2 + 0.5 : 0);\n // prepend last slides before start\n if (activeColIndexWithShift < loopedSlides) {\n slidesPrepended = Math.max(loopedSlides - activeColIndexWithShift, slidesPerGroup);\n for (let i = 0; i < loopedSlides - activeColIndexWithShift; i += 1) {\n const index = i - Math.floor(i / cols) * cols;\n if (gridEnabled) {\n const colIndexToPrepend = cols - index - 1;\n for (let i = slides.length - 1; i >= 0; i -= 1) {\n if (slides[i].column === colIndexToPrepend) prependSlidesIndexes.push(i);\n }\n // slides.forEach((slide, slideIndex) => {\n // if (slide.column === colIndexToPrepend) prependSlidesIndexes.push(slideIndex);\n // });\n } else {\n prependSlidesIndexes.push(cols - index - 1);\n }\n }\n } else if (activeColIndexWithShift + slidesPerView > cols - loopedSlides) {\n slidesAppended = Math.max(activeColIndexWithShift - (cols - loopedSlides * 2), slidesPerGroup);\n if (isInitialOverflow) {\n slidesAppended = Math.max(slidesAppended, slidesPerView - cols + initialSlide + 1);\n }\n for (let i = 0; i < slidesAppended; i += 1) {\n const index = i - Math.floor(i / cols) * cols;\n if (gridEnabled) {\n slides.forEach((slide, slideIndex) => {\n if (slide.column === index) appendSlidesIndexes.push(slideIndex);\n });\n } else {\n appendSlidesIndexes.push(index);\n }\n }\n }\n swiper.__preventObserver__ = true;\n requestAnimationFrame(() => {\n swiper.__preventObserver__ = false;\n });\n if (swiper.params.effect === 'cards' && slides.length < slidesPerView + loopedSlides * 2) {\n if (appendSlidesIndexes.includes(activeSlideIndex)) {\n appendSlidesIndexes.splice(appendSlidesIndexes.indexOf(activeSlideIndex), 1);\n }\n if (prependSlidesIndexes.includes(activeSlideIndex)) {\n prependSlidesIndexes.splice(prependSlidesIndexes.indexOf(activeSlideIndex), 1);\n }\n }\n if (isPrev) {\n prependSlidesIndexes.forEach(index => {\n slides[index].swiperLoopMoveDOM = true;\n slidesEl.prepend(slides[index]);\n slides[index].swiperLoopMoveDOM = false;\n });\n }\n if (isNext) {\n appendSlidesIndexes.forEach(index => {\n slides[index].swiperLoopMoveDOM = true;\n slidesEl.append(slides[index]);\n slides[index].swiperLoopMoveDOM = false;\n });\n }\n swiper.recalcSlides();\n if (params.slidesPerView === 'auto') {\n swiper.updateSlides();\n } else if (gridEnabled && (prependSlidesIndexes.length > 0 && isPrev || appendSlidesIndexes.length > 0 && isNext)) {\n swiper.slides.forEach((slide, slideIndex) => {\n swiper.grid.updateSlide(slideIndex, slide, swiper.slides);\n });\n }\n if (params.watchSlidesProgress) {\n swiper.updateSlidesOffset();\n }\n if (slideTo) {\n if (prependSlidesIndexes.length > 0 && isPrev) {\n if (typeof slideRealIndex === 'undefined') {\n const currentSlideTranslate = swiper.slidesGrid[activeIndex];\n const newSlideTranslate = swiper.slidesGrid[activeIndex + slidesPrepended];\n const diff = newSlideTranslate - currentSlideTranslate;\n if (byMousewheel) {\n swiper.setTranslate(swiper.translate - diff);\n } else {\n swiper.slideTo(activeIndex + Math.ceil(slidesPrepended), 0, false, true);\n if (setTranslate) {\n swiper.touchEventsData.startTranslate = swiper.touchEventsData.startTranslate - diff;\n swiper.touchEventsData.currentTranslate = swiper.touchEventsData.currentTranslate - diff;\n }\n }\n } else {\n if (setTranslate) {\n const shift = gridEnabled ? prependSlidesIndexes.length / params.grid.rows : prependSlidesIndexes.length;\n swiper.slideTo(swiper.activeIndex + shift, 0, false, true);\n swiper.touchEventsData.currentTranslate = swiper.translate;\n }\n }\n } else if (appendSlidesIndexes.length > 0 && isNext) {\n if (typeof slideRealIndex === 'undefined') {\n const currentSlideTranslate = swiper.slidesGrid[activeIndex];\n const newSlideTranslate = swiper.slidesGrid[activeIndex - slidesAppended];\n const diff = newSlideTranslate - currentSlideTranslate;\n if (byMousewheel) {\n swiper.setTranslate(swiper.translate - diff);\n } else {\n swiper.slideTo(activeIndex - slidesAppended, 0, false, true);\n if (setTranslate) {\n swiper.touchEventsData.startTranslate = swiper.touchEventsData.startTranslate - diff;\n swiper.touchEventsData.currentTranslate = swiper.touchEventsData.currentTranslate - diff;\n }\n }\n } else {\n const shift = gridEnabled ? appendSlidesIndexes.length / params.grid.rows : appendSlidesIndexes.length;\n swiper.slideTo(swiper.activeIndex - shift, 0, false, true);\n }\n }\n }\n swiper.allowSlidePrev = allowSlidePrev;\n swiper.allowSlideNext = allowSlideNext;\n if (swiper.controller && swiper.controller.control && !byController) {\n const loopParams = {\n slideRealIndex,\n direction,\n setTranslate,\n activeSlideIndex,\n byController: true\n };\n if (Array.isArray(swiper.controller.control)) {\n swiper.controller.control.forEach(c => {\n if (!c.destroyed && c.params.loop) c.loopFix({\n ...loopParams,\n slideTo: c.params.slidesPerView === params.slidesPerView ? slideTo : false\n });\n });\n } else if (swiper.controller.control instanceof swiper.constructor && swiper.controller.control.params.loop) {\n swiper.controller.control.loopFix({\n ...loopParams,\n slideTo: swiper.controller.control.params.slidesPerView === params.slidesPerView ? slideTo : false\n });\n }\n }\n swiper.emit('loopFix');\n}\n\nfunction loopDestroy() {\n const swiper = this;\n const {\n params,\n slidesEl\n } = swiper;\n if (!params.loop || !slidesEl || swiper.virtual && swiper.params.virtual.enabled) return;\n swiper.recalcSlides();\n const newSlidesOrder = [];\n swiper.slides.forEach(slideEl => {\n const index = typeof slideEl.swiperSlideIndex === 'undefined' ? slideEl.getAttribute('data-swiper-slide-index') * 1 : slideEl.swiperSlideIndex;\n newSlidesOrder[index] = slideEl;\n });\n swiper.slides.forEach(slideEl => {\n slideEl.removeAttribute('data-swiper-slide-index');\n });\n newSlidesOrder.forEach(slideEl => {\n slidesEl.append(slideEl);\n });\n swiper.recalcSlides();\n swiper.slideTo(swiper.realIndex, 0);\n}\n\nvar loop = {\n loopCreate,\n loopFix,\n loopDestroy\n};\n\nfunction setGrabCursor(moving) {\n const swiper = this;\n if (!swiper.params.simulateTouch || swiper.params.watchOverflow && swiper.isLocked || swiper.params.cssMode) return;\n const el = swiper.params.touchEventsTarget === 'container' ? swiper.el : swiper.wrapperEl;\n if (swiper.isElement) {\n swiper.__preventObserver__ = true;\n }\n el.style.cursor = 'move';\n el.style.cursor = moving ? 'grabbing' : 'grab';\n if (swiper.isElement) {\n requestAnimationFrame(() => {\n swiper.__preventObserver__ = false;\n });\n }\n}\n\nfunction unsetGrabCursor() {\n const swiper = this;\n if (swiper.params.watchOverflow && swiper.isLocked || swiper.params.cssMode) {\n return;\n }\n if (swiper.isElement) {\n swiper.__preventObserver__ = true;\n }\n swiper[swiper.params.touchEventsTarget === 'container' ? 'el' : 'wrapperEl'].style.cursor = '';\n if (swiper.isElement) {\n requestAnimationFrame(() => {\n swiper.__preventObserver__ = false;\n });\n }\n}\n\nvar grabCursor = {\n setGrabCursor,\n unsetGrabCursor\n};\n\n// Modified from https://stackoverflow.com/questions/54520554/custom-element-getrootnode-closest-function-crossing-multiple-parent-shadowd\nfunction closestElement(selector, base = this) {\n function __closestFrom(el) {\n if (!el || el === getDocument() || el === getWindow()) return null;\n if (el.assignedSlot) el = el.assignedSlot;\n const found = el.closest(selector);\n if (!found && !el.getRootNode) {\n return null;\n }\n return found || __closestFrom(el.getRootNode().host);\n }\n return __closestFrom(base);\n}\nfunction preventEdgeSwipe(swiper, event, startX) {\n const window = getWindow();\n const {\n params\n } = swiper;\n const edgeSwipeDetection = params.edgeSwipeDetection;\n const edgeSwipeThreshold = params.edgeSwipeThreshold;\n if (edgeSwipeDetection && (startX <= edgeSwipeThreshold || startX >= window.innerWidth - edgeSwipeThreshold)) {\n if (edgeSwipeDetection === 'prevent') {\n event.preventDefault();\n return true;\n }\n return false;\n }\n return true;\n}\nfunction onTouchStart(event) {\n const swiper = this;\n const document = getDocument();\n let e = event;\n if (e.originalEvent) e = e.originalEvent;\n const data = swiper.touchEventsData;\n if (e.type === 'pointerdown') {\n if (data.pointerId !== null && data.pointerId !== e.pointerId) {\n return;\n }\n data.pointerId = e.pointerId;\n } else if (e.type === 'touchstart' && e.targetTouches.length === 1) {\n data.touchId = e.targetTouches[0].identifier;\n }\n if (e.type === 'touchstart') {\n // don't proceed touch event\n preventEdgeSwipe(swiper, e, e.targetTouches[0].pageX);\n return;\n }\n const {\n params,\n touches,\n enabled\n } = swiper;\n if (!enabled) return;\n if (!params.simulateTouch && e.pointerType === 'mouse') return;\n if (swiper.animating && params.preventInteractionOnTransition) {\n return;\n }\n if (!swiper.animating && params.cssMode && params.loop) {\n swiper.loopFix();\n }\n let targetEl = e.target;\n if (params.touchEventsTarget === 'wrapper') {\n if (!elementIsChildOf(targetEl, swiper.wrapperEl)) return;\n }\n if ('which' in e && e.which === 3) return;\n if ('button' in e && e.button > 0) return;\n if (data.isTouched && data.isMoved) return;\n\n // change target el for shadow root component\n const swipingClassHasValue = !!params.noSwipingClass && params.noSwipingClass !== '';\n // eslint-disable-next-line\n const eventPath = e.composedPath ? e.composedPath() : e.path;\n if (swipingClassHasValue && e.target && e.target.shadowRoot && eventPath) {\n targetEl = eventPath[0];\n }\n const noSwipingSelector = params.noSwipingSelector ? params.noSwipingSelector : `.${params.noSwipingClass}`;\n const isTargetShadow = !!(e.target && e.target.shadowRoot);\n\n // use closestElement for shadow root element to get the actual closest for nested shadow root element\n if (params.noSwiping && (isTargetShadow ? closestElement(noSwipingSelector, targetEl) : targetEl.closest(noSwipingSelector))) {\n swiper.allowClick = true;\n return;\n }\n if (params.swipeHandler) {\n if (!targetEl.closest(params.swipeHandler)) return;\n }\n touches.currentX = e.pageX;\n touches.currentY = e.pageY;\n const startX = touches.currentX;\n const startY = touches.currentY;\n\n // Do NOT start if iOS edge swipe is detected. Otherwise iOS app cannot swipe-to-go-back anymore\n\n if (!preventEdgeSwipe(swiper, e, startX)) {\n return;\n }\n Object.assign(data, {\n isTouched: true,\n isMoved: false,\n allowTouchCallbacks: true,\n isScrolling: undefined,\n startMoving: undefined\n });\n touches.startX = startX;\n touches.startY = startY;\n data.touchStartTime = now();\n swiper.allowClick = true;\n swiper.updateSize();\n swiper.swipeDirection = undefined;\n if (params.threshold > 0) data.allowThresholdMove = false;\n let preventDefault = true;\n if (targetEl.matches(data.focusableElements)) {\n preventDefault = false;\n if (targetEl.nodeName === 'SELECT') {\n data.isTouched = false;\n }\n }\n if (document.activeElement && document.activeElement.matches(data.focusableElements) && document.activeElement !== targetEl && (e.pointerType === 'mouse' || e.pointerType !== 'mouse' && !targetEl.matches(data.focusableElements))) {\n document.activeElement.blur();\n }\n const shouldPreventDefault = preventDefault && swiper.allowTouchMove && params.touchStartPreventDefault;\n if ((params.touchStartForcePreventDefault || shouldPreventDefault) && !targetEl.isContentEditable) {\n e.preventDefault();\n }\n if (params.freeMode && params.freeMode.enabled && swiper.freeMode && swiper.animating && !params.cssMode) {\n swiper.freeMode.onTouchStart();\n }\n swiper.emit('touchStart', e);\n}\n\nfunction onTouchMove(event) {\n const document = getDocument();\n const swiper = this;\n const data = swiper.touchEventsData;\n const {\n params,\n touches,\n rtlTranslate: rtl,\n enabled\n } = swiper;\n if (!enabled) return;\n if (!params.simulateTouch && event.pointerType === 'mouse') return;\n let e = event;\n if (e.originalEvent) e = e.originalEvent;\n if (e.type === 'pointermove') {\n if (data.touchId !== null) return; // return from pointer if we use touch\n const id = e.pointerId;\n if (id !== data.pointerId) return;\n }\n let targetTouch;\n if (e.type === 'touchmove') {\n targetTouch = [...e.changedTouches].find(t => t.identifier === data.touchId);\n if (!targetTouch || targetTouch.identifier !== data.touchId) return;\n } else {\n targetTouch = e;\n }\n if (!data.isTouched) {\n if (data.startMoving && data.isScrolling) {\n swiper.emit('touchMoveOpposite', e);\n }\n return;\n }\n const pageX = targetTouch.pageX;\n const pageY = targetTouch.pageY;\n if (e.preventedByNestedSwiper) {\n touches.startX = pageX;\n touches.startY = pageY;\n return;\n }\n if (!swiper.allowTouchMove) {\n if (!e.target.matches(data.focusableElements)) {\n swiper.allowClick = false;\n }\n if (data.isTouched) {\n Object.assign(touches, {\n startX: pageX,\n startY: pageY,\n currentX: pageX,\n currentY: pageY\n });\n data.touchStartTime = now();\n }\n return;\n }\n if (params.touchReleaseOnEdges && !params.loop) {\n if (swiper.isVertical()) {\n // Vertical\n if (pageY < touches.startY && swiper.translate <= swiper.maxTranslate() || pageY > touches.startY && swiper.translate >= swiper.minTranslate()) {\n data.isTouched = false;\n data.isMoved = false;\n return;\n }\n } else if (rtl && (pageX > touches.startX && -swiper.translate <= swiper.maxTranslate() || pageX < touches.startX && -swiper.translate >= swiper.minTranslate())) {\n return;\n } else if (!rtl && (pageX < touches.startX && swiper.translate <= swiper.maxTranslate() || pageX > touches.startX && swiper.translate >= swiper.minTranslate())) {\n return;\n }\n }\n if (document.activeElement && document.activeElement.matches(data.focusableElements) && document.activeElement !== e.target && e.pointerType !== 'mouse') {\n document.activeElement.blur();\n }\n if (document.activeElement) {\n if (e.target === document.activeElement && e.target.matches(data.focusableElements)) {\n data.isMoved = true;\n swiper.allowClick = false;\n return;\n }\n }\n if (data.allowTouchCallbacks) {\n swiper.emit('touchMove', e);\n }\n touches.previousX = touches.currentX;\n touches.previousY = touches.currentY;\n touches.currentX = pageX;\n touches.currentY = pageY;\n const diffX = touches.currentX - touches.startX;\n const diffY = touches.currentY - touches.startY;\n if (swiper.params.threshold && Math.sqrt(diffX ** 2 + diffY ** 2) < swiper.params.threshold) return;\n if (typeof data.isScrolling === 'undefined') {\n let touchAngle;\n if (swiper.isHorizontal() && touches.currentY === touches.startY || swiper.isVertical() && touches.currentX === touches.startX) {\n data.isScrolling = false;\n } else {\n // eslint-disable-next-line\n if (diffX * diffX + diffY * diffY >= 25) {\n touchAngle = Math.atan2(Math.abs(diffY), Math.abs(diffX)) * 180 / Math.PI;\n data.isScrolling = swiper.isHorizontal() ? touchAngle > params.touchAngle : 90 - touchAngle > params.touchAngle;\n }\n }\n }\n if (data.isScrolling) {\n swiper.emit('touchMoveOpposite', e);\n }\n if (typeof data.startMoving === 'undefined') {\n if (touches.currentX !== touches.startX || touches.currentY !== touches.startY) {\n data.startMoving = true;\n }\n }\n if (data.isScrolling || e.type === 'touchmove' && data.preventTouchMoveFromPointerMove) {\n data.isTouched = false;\n return;\n }\n if (!data.startMoving) {\n return;\n }\n swiper.allowClick = false;\n if (!params.cssMode && e.cancelable) {\n e.preventDefault();\n }\n if (params.touchMoveStopPropagation && !params.nested) {\n e.stopPropagation();\n }\n let diff = swiper.isHorizontal() ? diffX : diffY;\n let touchesDiff = swiper.isHorizontal() ? touches.currentX - touches.previousX : touches.currentY - touches.previousY;\n if (params.oneWayMovement) {\n diff = Math.abs(diff) * (rtl ? 1 : -1);\n touchesDiff = Math.abs(touchesDiff) * (rtl ? 1 : -1);\n }\n touches.diff = diff;\n diff *= params.touchRatio;\n if (rtl) {\n diff = -diff;\n touchesDiff = -touchesDiff;\n }\n const prevTouchesDirection = swiper.touchesDirection;\n swiper.swipeDirection = diff > 0 ? 'prev' : 'next';\n swiper.touchesDirection = touchesDiff > 0 ? 'prev' : 'next';\n const isLoop = swiper.params.loop && !params.cssMode;\n const allowLoopFix = swiper.touchesDirection === 'next' && swiper.allowSlideNext || swiper.touchesDirection === 'prev' && swiper.allowSlidePrev;\n if (!data.isMoved) {\n if (isLoop && allowLoopFix) {\n swiper.loopFix({\n direction: swiper.swipeDirection\n });\n }\n data.startTranslate = swiper.getTranslate();\n swiper.setTransition(0);\n if (swiper.animating) {\n const evt = new window.CustomEvent('transitionend', {\n bubbles: true,\n cancelable: true,\n detail: {\n bySwiperTouchMove: true\n }\n });\n swiper.wrapperEl.dispatchEvent(evt);\n }\n data.allowMomentumBounce = false;\n // Grab Cursor\n if (params.grabCursor && (swiper.allowSlideNext === true || swiper.allowSlidePrev === true)) {\n swiper.setGrabCursor(true);\n }\n swiper.emit('sliderFirstMove', e);\n }\n let loopFixed;\n new Date().getTime();\n if (params._loopSwapReset !== false && data.isMoved && data.allowThresholdMove && prevTouchesDirection !== swiper.touchesDirection && isLoop && allowLoopFix && Math.abs(diff) >= 1) {\n Object.assign(touches, {\n startX: pageX,\n startY: pageY,\n currentX: pageX,\n currentY: pageY,\n startTranslate: data.currentTranslate\n });\n data.loopSwapReset = true;\n data.startTranslate = data.currentTranslate;\n return;\n }\n swiper.emit('sliderMove', e);\n data.isMoved = true;\n data.currentTranslate = diff + data.startTranslate;\n let disableParentSwiper = true;\n let resistanceRatio = params.resistanceRatio;\n if (params.touchReleaseOnEdges) {\n resistanceRatio = 0;\n }\n if (diff > 0) {\n if (isLoop && allowLoopFix && !loopFixed && data.allowThresholdMove && data.currentTranslate > (params.centeredSlides ? swiper.minTranslate() - swiper.slidesSizesGrid[swiper.activeIndex + 1] - (params.slidesPerView !== 'auto' && swiper.slides.length - params.slidesPerView >= 2 ? swiper.slidesSizesGrid[swiper.activeIndex + 1] + swiper.params.spaceBetween : 0) - swiper.params.spaceBetween : swiper.minTranslate())) {\n swiper.loopFix({\n direction: 'prev',\n setTranslate: true,\n activeSlideIndex: 0\n });\n }\n if (data.currentTranslate > swiper.minTranslate()) {\n disableParentSwiper = false;\n if (params.resistance) {\n data.currentTranslate = swiper.minTranslate() - 1 + (-swiper.minTranslate() + data.startTranslate + diff) ** resistanceRatio;\n }\n }\n } else if (diff < 0) {\n if (isLoop && allowLoopFix && !loopFixed && data.allowThresholdMove && data.currentTranslate < (params.centeredSlides ? swiper.maxTranslate() + swiper.slidesSizesGrid[swiper.slidesSizesGrid.length - 1] + swiper.params.spaceBetween + (params.slidesPerView !== 'auto' && swiper.slides.length - params.slidesPerView >= 2 ? swiper.slidesSizesGrid[swiper.slidesSizesGrid.length - 1] + swiper.params.spaceBetween : 0) : swiper.maxTranslate())) {\n swiper.loopFix({\n direction: 'next',\n setTranslate: true,\n activeSlideIndex: swiper.slides.length - (params.slidesPerView === 'auto' ? swiper.slidesPerViewDynamic() : Math.ceil(parseFloat(params.slidesPerView, 10)))\n });\n }\n if (data.currentTranslate < swiper.maxTranslate()) {\n disableParentSwiper = false;\n if (params.resistance) {\n data.currentTranslate = swiper.maxTranslate() + 1 - (swiper.maxTranslate() - data.startTranslate - diff) ** resistanceRatio;\n }\n }\n }\n if (disableParentSwiper) {\n e.preventedByNestedSwiper = true;\n }\n\n // Directions locks\n if (!swiper.allowSlideNext && swiper.swipeDirection === 'next' && data.currentTranslate < data.startTranslate) {\n data.currentTranslate = data.startTranslate;\n }\n if (!swiper.allowSlidePrev && swiper.swipeDirection === 'prev' && data.currentTranslate > data.startTranslate) {\n data.currentTranslate = data.startTranslate;\n }\n if (!swiper.allowSlidePrev && !swiper.allowSlideNext) {\n data.currentTranslate = data.startTranslate;\n }\n\n // Threshold\n if (params.threshold > 0) {\n if (Math.abs(diff) > params.threshold || data.allowThresholdMove) {\n if (!data.allowThresholdMove) {\n data.allowThresholdMove = true;\n touches.startX = touches.currentX;\n touches.startY = touches.currentY;\n data.currentTranslate = data.startTranslate;\n touches.diff = swiper.isHorizontal() ? touches.currentX - touches.startX : touches.currentY - touches.startY;\n return;\n }\n } else {\n data.currentTranslate = data.startTranslate;\n return;\n }\n }\n if (!params.followFinger || params.cssMode) return;\n\n // Update active index in free mode\n if (params.freeMode && params.freeMode.enabled && swiper.freeMode || params.watchSlidesProgress) {\n swiper.updateActiveIndex();\n swiper.updateSlidesClasses();\n }\n if (params.freeMode && params.freeMode.enabled && swiper.freeMode) {\n swiper.freeMode.onTouchMove();\n }\n // Update progress\n swiper.updateProgress(data.currentTranslate);\n // Update translate\n swiper.setTranslate(data.currentTranslate);\n}\n\nfunction onTouchEnd(event) {\n const swiper = this;\n const data = swiper.touchEventsData;\n let e = event;\n if (e.originalEvent) e = e.originalEvent;\n let targetTouch;\n const isTouchEvent = e.type === 'touchend' || e.type === 'touchcancel';\n if (!isTouchEvent) {\n if (data.touchId !== null) return; // return from pointer if we use touch\n if (e.pointerId !== data.pointerId) return;\n targetTouch = e;\n } else {\n targetTouch = [...e.changedTouches].find(t => t.identifier === data.touchId);\n if (!targetTouch || targetTouch.identifier !== data.touchId) return;\n }\n if (['pointercancel', 'pointerout', 'pointerleave', 'contextmenu'].includes(e.type)) {\n const proceed = ['pointercancel', 'contextmenu'].includes(e.type) && (swiper.browser.isSafari || swiper.browser.isWebView);\n if (!proceed) {\n return;\n }\n }\n data.pointerId = null;\n data.touchId = null;\n const {\n params,\n touches,\n rtlTranslate: rtl,\n slidesGrid,\n enabled\n } = swiper;\n if (!enabled) return;\n if (!params.simulateTouch && e.pointerType === 'mouse') return;\n if (data.allowTouchCallbacks) {\n swiper.emit('touchEnd', e);\n }\n data.allowTouchCallbacks = false;\n if (!data.isTouched) {\n if (data.isMoved && params.grabCursor) {\n swiper.setGrabCursor(false);\n }\n data.isMoved = false;\n data.startMoving = false;\n return;\n }\n\n // Return Grab Cursor\n if (params.grabCursor && data.isMoved && data.isTouched && (swiper.allowSlideNext === true || swiper.allowSlidePrev === true)) {\n swiper.setGrabCursor(false);\n }\n\n // Time diff\n const touchEndTime = now();\n const timeDiff = touchEndTime - data.touchStartTime;\n\n // Tap, doubleTap, Click\n if (swiper.allowClick) {\n const pathTree = e.path || e.composedPath && e.composedPath();\n swiper.updateClickedSlide(pathTree && pathTree[0] || e.target, pathTree);\n swiper.emit('tap click', e);\n if (timeDiff < 300 && touchEndTime - data.lastClickTime < 300) {\n swiper.emit('doubleTap doubleClick', e);\n }\n }\n data.lastClickTime = now();\n nextTick(() => {\n if (!swiper.destroyed) swiper.allowClick = true;\n });\n if (!data.isTouched || !data.isMoved || !swiper.swipeDirection || touches.diff === 0 && !data.loopSwapReset || data.currentTranslate === data.startTranslate && !data.loopSwapReset) {\n data.isTouched = false;\n data.isMoved = false;\n data.startMoving = false;\n return;\n }\n data.isTouched = false;\n data.isMoved = false;\n data.startMoving = false;\n let currentPos;\n if (params.followFinger) {\n currentPos = rtl ? swiper.translate : -swiper.translate;\n } else {\n currentPos = -data.currentTranslate;\n }\n if (params.cssMode) {\n return;\n }\n if (params.freeMode && params.freeMode.enabled) {\n swiper.freeMode.onTouchEnd({\n currentPos\n });\n return;\n }\n\n // Find current slide\n const swipeToLast = currentPos >= -swiper.maxTranslate() && !swiper.params.loop;\n let stopIndex = 0;\n let groupSize = swiper.slidesSizesGrid[0];\n for (let i = 0; i < slidesGrid.length; i += i < params.slidesPerGroupSkip ? 1 : params.slidesPerGroup) {\n const increment = i < params.slidesPerGroupSkip - 1 ? 1 : params.slidesPerGroup;\n if (typeof slidesGrid[i + increment] !== 'undefined') {\n if (swipeToLast || currentPos >= slidesGrid[i] && currentPos < slidesGrid[i + increment]) {\n stopIndex = i;\n groupSize = slidesGrid[i + increment] - slidesGrid[i];\n }\n } else if (swipeToLast || currentPos >= slidesGrid[i]) {\n stopIndex = i;\n groupSize = slidesGrid[slidesGrid.length - 1] - slidesGrid[slidesGrid.length - 2];\n }\n }\n let rewindFirstIndex = null;\n let rewindLastIndex = null;\n if (params.rewind) {\n if (swiper.isBeginning) {\n rewindLastIndex = params.virtual && params.virtual.enabled && swiper.virtual ? swiper.virtual.slides.length - 1 : swiper.slides.length - 1;\n } else if (swiper.isEnd) {\n rewindFirstIndex = 0;\n }\n }\n // Find current slide size\n const ratio = (currentPos - slidesGrid[stopIndex]) / groupSize;\n const increment = stopIndex < params.slidesPerGroupSkip - 1 ? 1 : params.slidesPerGroup;\n if (timeDiff > params.longSwipesMs) {\n // Long touches\n if (!params.longSwipes) {\n swiper.slideTo(swiper.activeIndex);\n return;\n }\n if (swiper.swipeDirection === 'next') {\n if (ratio >= params.longSwipesRatio) swiper.slideTo(params.rewind && swiper.isEnd ? rewindFirstIndex : stopIndex + increment);else swiper.slideTo(stopIndex);\n }\n if (swiper.swipeDirection === 'prev') {\n if (ratio > 1 - params.longSwipesRatio) {\n swiper.slideTo(stopIndex + increment);\n } else if (rewindLastIndex !== null && ratio < 0 && Math.abs(ratio) > params.longSwipesRatio) {\n swiper.slideTo(rewindLastIndex);\n } else {\n swiper.slideTo(stopIndex);\n }\n }\n } else {\n // Short swipes\n if (!params.shortSwipes) {\n swiper.slideTo(swiper.activeIndex);\n return;\n }\n const isNavButtonTarget = swiper.navigation && (e.target === swiper.navigation.nextEl || e.target === swiper.navigation.prevEl);\n if (!isNavButtonTarget) {\n if (swiper.swipeDirection === 'next') {\n swiper.slideTo(rewindFirstIndex !== null ? rewindFirstIndex : stopIndex + increment);\n }\n if (swiper.swipeDirection === 'prev') {\n swiper.slideTo(rewindLastIndex !== null ? rewindLastIndex : stopIndex);\n }\n } else if (e.target === swiper.navigation.nextEl) {\n swiper.slideTo(stopIndex + increment);\n } else {\n swiper.slideTo(stopIndex);\n }\n }\n}\n\nfunction onResize() {\n const swiper = this;\n const {\n params,\n el\n } = swiper;\n if (el && el.offsetWidth === 0) return;\n\n // Breakpoints\n if (params.breakpoints) {\n swiper.setBreakpoint();\n }\n\n // Save locks\n const {\n allowSlideNext,\n allowSlidePrev,\n snapGrid\n } = swiper;\n const isVirtual = swiper.virtual && swiper.params.virtual.enabled;\n\n // Disable locks on resize\n swiper.allowSlideNext = true;\n swiper.allowSlidePrev = true;\n swiper.updateSize();\n swiper.updateSlides();\n swiper.updateSlidesClasses();\n const isVirtualLoop = isVirtual && params.loop;\n if ((params.slidesPerView === 'auto' || params.slidesPerView > 1) && swiper.isEnd && !swiper.isBeginning && !swiper.params.centeredSlides && !isVirtualLoop) {\n const slides = isVirtual ? swiper.virtual.slides : swiper.slides;\n swiper.slideTo(slides.length - 1, 0, false, true);\n } else {\n if (swiper.params.loop && !isVirtual) {\n swiper.slideToLoop(swiper.realIndex, 0, false, true);\n } else {\n swiper.slideTo(swiper.activeIndex, 0, false, true);\n }\n }\n if (swiper.autoplay && swiper.autoplay.running && swiper.autoplay.paused) {\n clearTimeout(swiper.autoplay.resizeTimeout);\n swiper.autoplay.resizeTimeout = setTimeout(() => {\n if (swiper.autoplay && swiper.autoplay.running && swiper.autoplay.paused) {\n swiper.autoplay.resume();\n }\n }, 500);\n }\n // Return locks after resize\n swiper.allowSlidePrev = allowSlidePrev;\n swiper.allowSlideNext = allowSlideNext;\n if (swiper.params.watchOverflow && snapGrid !== swiper.snapGrid) {\n swiper.checkOverflow();\n }\n}\n\nfunction onClick(e) {\n const swiper = this;\n if (!swiper.enabled) return;\n if (!swiper.allowClick) {\n if (swiper.params.preventClicks) e.preventDefault();\n if (swiper.params.preventClicksPropagation && swiper.animating) {\n e.stopPropagation();\n e.stopImmediatePropagation();\n }\n }\n}\n\nfunction onScroll() {\n const swiper = this;\n const {\n wrapperEl,\n rtlTranslate,\n enabled\n } = swiper;\n if (!enabled) return;\n swiper.previousTranslate = swiper.translate;\n if (swiper.isHorizontal()) {\n swiper.translate = -wrapperEl.scrollLeft;\n } else {\n swiper.translate = -wrapperEl.scrollTop;\n }\n // eslint-disable-next-line\n if (swiper.translate === 0) swiper.translate = 0;\n swiper.updateActiveIndex();\n swiper.updateSlidesClasses();\n let newProgress;\n const translatesDiff = swiper.maxTranslate() - swiper.minTranslate();\n if (translatesDiff === 0) {\n newProgress = 0;\n } else {\n newProgress = (swiper.translate - swiper.minTranslate()) / translatesDiff;\n }\n if (newProgress !== swiper.progress) {\n swiper.updateProgress(rtlTranslate ? -swiper.translate : swiper.translate);\n }\n swiper.emit('setTranslate', swiper.translate, false);\n}\n\nfunction onLoad(e) {\n const swiper = this;\n processLazyPreloader(swiper, e.target);\n if (swiper.params.cssMode || swiper.params.slidesPerView !== 'auto' && !swiper.params.autoHeight) {\n return;\n }\n swiper.update();\n}\n\nfunction onDocumentTouchStart() {\n const swiper = this;\n if (swiper.documentTouchHandlerProceeded) return;\n swiper.documentTouchHandlerProceeded = true;\n if (swiper.params.touchReleaseOnEdges) {\n swiper.el.style.touchAction = 'auto';\n }\n}\n\nconst events = (swiper, method) => {\n const document = getDocument();\n const {\n params,\n el,\n wrapperEl,\n device\n } = swiper;\n const capture = !!params.nested;\n const domMethod = method === 'on' ? 'addEventListener' : 'removeEventListener';\n const swiperMethod = method;\n if (!el || typeof el === 'string') return;\n\n // Touch Events\n document[domMethod]('touchstart', swiper.onDocumentTouchStart, {\n passive: false,\n capture\n });\n el[domMethod]('touchstart', swiper.onTouchStart, {\n passive: false\n });\n el[domMethod]('pointerdown', swiper.onTouchStart, {\n passive: false\n });\n document[domMethod]('touchmove', swiper.onTouchMove, {\n passive: false,\n capture\n });\n document[domMethod]('pointermove', swiper.onTouchMove, {\n passive: false,\n capture\n });\n document[domMethod]('touchend', swiper.onTouchEnd, {\n passive: true\n });\n document[domMethod]('pointerup', swiper.onTouchEnd, {\n passive: true\n });\n document[domMethod]('pointercancel', swiper.onTouchEnd, {\n passive: true\n });\n document[domMethod]('touchcancel', swiper.onTouchEnd, {\n passive: true\n });\n document[domMethod]('pointerout', swiper.onTouchEnd, {\n passive: true\n });\n document[domMethod]('pointerleave', swiper.onTouchEnd, {\n passive: true\n });\n document[domMethod]('contextmenu', swiper.onTouchEnd, {\n passive: true\n });\n\n // Prevent Links Clicks\n if (params.preventClicks || params.preventClicksPropagation) {\n el[domMethod]('click', swiper.onClick, true);\n }\n if (params.cssMode) {\n wrapperEl[domMethod]('scroll', swiper.onScroll);\n }\n\n // Resize handler\n if (params.updateOnWindowResize) {\n swiper[swiperMethod](device.ios || device.android ? 'resize orientationchange observerUpdate' : 'resize observerUpdate', onResize, true);\n } else {\n swiper[swiperMethod]('observerUpdate', onResize, true);\n }\n\n // Images loader\n el[domMethod]('load', swiper.onLoad, {\n capture: true\n });\n};\nfunction attachEvents() {\n const swiper = this;\n const {\n params\n } = swiper;\n swiper.onTouchStart = onTouchStart.bind(swiper);\n swiper.onTouchMove = onTouchMove.bind(swiper);\n swiper.onTouchEnd = onTouchEnd.bind(swiper);\n swiper.onDocumentTouchStart = onDocumentTouchStart.bind(swiper);\n if (params.cssMode) {\n swiper.onScroll = onScroll.bind(swiper);\n }\n swiper.onClick = onClick.bind(swiper);\n swiper.onLoad = onLoad.bind(swiper);\n events(swiper, 'on');\n}\nfunction detachEvents() {\n const swiper = this;\n events(swiper, 'off');\n}\nvar events$1 = {\n attachEvents,\n detachEvents\n};\n\nconst isGridEnabled = (swiper, params) => {\n return swiper.grid && params.grid && params.grid.rows > 1;\n};\nfunction setBreakpoint() {\n const swiper = this;\n const {\n realIndex,\n initialized,\n params,\n el\n } = swiper;\n const breakpoints = params.breakpoints;\n if (!breakpoints || breakpoints && Object.keys(breakpoints).length === 0) return;\n const document = getDocument();\n\n // Get breakpoint for window/container width and update parameters\n const breakpointsBase = params.breakpointsBase === 'window' || !params.breakpointsBase ? params.breakpointsBase : 'container';\n const breakpointContainer = ['window', 'container'].includes(params.breakpointsBase) || !params.breakpointsBase ? swiper.el : document.querySelector(params.breakpointsBase);\n const breakpoint = swiper.getBreakpoint(breakpoints, breakpointsBase, breakpointContainer);\n if (!breakpoint || swiper.currentBreakpoint === breakpoint) return;\n const breakpointOnlyParams = breakpoint in breakpoints ? breakpoints[breakpoint] : undefined;\n const breakpointParams = breakpointOnlyParams || swiper.originalParams;\n const wasMultiRow = isGridEnabled(swiper, params);\n const isMultiRow = isGridEnabled(swiper, breakpointParams);\n const wasGrabCursor = swiper.params.grabCursor;\n const isGrabCursor = breakpointParams.grabCursor;\n const wasEnabled = params.enabled;\n if (wasMultiRow && !isMultiRow) {\n el.classList.remove(`${params.containerModifierClass}grid`, `${params.containerModifierClass}grid-column`);\n swiper.emitContainerClasses();\n } else if (!wasMultiRow && isMultiRow) {\n el.classList.add(`${params.containerModifierClass}grid`);\n if (breakpointParams.grid.fill && breakpointParams.grid.fill === 'column' || !breakpointParams.grid.fill && params.grid.fill === 'column') {\n el.classList.add(`${params.containerModifierClass}grid-column`);\n }\n swiper.emitContainerClasses();\n }\n if (wasGrabCursor && !isGrabCursor) {\n swiper.unsetGrabCursor();\n } else if (!wasGrabCursor && isGrabCursor) {\n swiper.setGrabCursor();\n }\n\n // Toggle navigation, pagination, scrollbar\n ['navigation', 'pagination', 'scrollbar'].forEach(prop => {\n if (typeof breakpointParams[prop] === 'undefined') return;\n const wasModuleEnabled = params[prop] && params[prop].enabled;\n const isModuleEnabled = breakpointParams[prop] && breakpointParams[prop].enabled;\n if (wasModuleEnabled && !isModuleEnabled) {\n swiper[prop].disable();\n }\n if (!wasModuleEnabled && isModuleEnabled) {\n swiper[prop].enable();\n }\n });\n const directionChanged = breakpointParams.direction && breakpointParams.direction !== params.direction;\n const needsReLoop = params.loop && (breakpointParams.slidesPerView !== params.slidesPerView || directionChanged);\n const wasLoop = params.loop;\n if (directionChanged && initialized) {\n swiper.changeDirection();\n }\n extend(swiper.params, breakpointParams);\n const isEnabled = swiper.params.enabled;\n const hasLoop = swiper.params.loop;\n Object.assign(swiper, {\n allowTouchMove: swiper.params.allowTouchMove,\n allowSlideNext: swiper.params.allowSlideNext,\n allowSlidePrev: swiper.params.allowSlidePrev\n });\n if (wasEnabled && !isEnabled) {\n swiper.disable();\n } else if (!wasEnabled && isEnabled) {\n swiper.enable();\n }\n swiper.currentBreakpoint = breakpoint;\n swiper.emit('_beforeBreakpoint', breakpointParams);\n if (initialized) {\n if (needsReLoop) {\n swiper.loopDestroy();\n swiper.loopCreate(realIndex);\n swiper.updateSlides();\n } else if (!wasLoop && hasLoop) {\n swiper.loopCreate(realIndex);\n swiper.updateSlides();\n } else if (wasLoop && !hasLoop) {\n swiper.loopDestroy();\n }\n }\n swiper.emit('breakpoint', breakpointParams);\n}\n\nfunction getBreakpoint(breakpoints, base = 'window', containerEl) {\n if (!breakpoints || base === 'container' && !containerEl) return undefined;\n let breakpoint = false;\n const window = getWindow();\n const currentHeight = base === 'window' ? window.innerHeight : containerEl.clientHeight;\n const points = Object.keys(breakpoints).map(point => {\n if (typeof point === 'string' && point.indexOf('@') === 0) {\n const minRatio = parseFloat(point.substr(1));\n const value = currentHeight * minRatio;\n return {\n value,\n point\n };\n }\n return {\n value: point,\n point\n };\n });\n points.sort((a, b) => parseInt(a.value, 10) - parseInt(b.value, 10));\n for (let i = 0; i < points.length; i += 1) {\n const {\n point,\n value\n } = points[i];\n if (base === 'window') {\n if (window.matchMedia(`(min-width: ${value}px)`).matches) {\n breakpoint = point;\n }\n } else if (value <= containerEl.clientWidth) {\n breakpoint = point;\n }\n }\n return breakpoint || 'max';\n}\n\nvar breakpoints = {\n setBreakpoint,\n getBreakpoint\n};\n\nfunction prepareClasses(entries, prefix) {\n const resultClasses = [];\n entries.forEach(item => {\n if (typeof item === 'object') {\n Object.keys(item).forEach(classNames => {\n if (item[classNames]) {\n resultClasses.push(prefix + classNames);\n }\n });\n } else if (typeof item === 'string') {\n resultClasses.push(prefix + item);\n }\n });\n return resultClasses;\n}\nfunction addClasses() {\n const swiper = this;\n const {\n classNames,\n params,\n rtl,\n el,\n device\n } = swiper;\n // prettier-ignore\n const suffixes = prepareClasses(['initialized', params.direction, {\n 'free-mode': swiper.params.freeMode && params.freeMode.enabled\n }, {\n 'autoheight': params.autoHeight\n }, {\n 'rtl': rtl\n }, {\n 'grid': params.grid && params.grid.rows > 1\n }, {\n 'grid-column': params.grid && params.grid.rows > 1 && params.grid.fill === 'column'\n }, {\n 'android': device.android\n }, {\n 'ios': device.ios\n }, {\n 'css-mode': params.cssMode\n }, {\n 'centered': params.cssMode && params.centeredSlides\n }, {\n 'watch-progress': params.watchSlidesProgress\n }], params.containerModifierClass);\n classNames.push(...suffixes);\n el.classList.add(...classNames);\n swiper.emitContainerClasses();\n}\n\nfunction removeClasses() {\n const swiper = this;\n const {\n el,\n classNames\n } = swiper;\n if (!el || typeof el === 'string') return;\n el.classList.remove(...classNames);\n swiper.emitContainerClasses();\n}\n\nvar classes = {\n addClasses,\n removeClasses\n};\n\nfunction checkOverflow() {\n const swiper = this;\n const {\n isLocked: wasLocked,\n params\n } = swiper;\n const {\n slidesOffsetBefore\n } = params;\n if (slidesOffsetBefore) {\n const lastSlideIndex = swiper.slides.length - 1;\n const lastSlideRightEdge = swiper.slidesGrid[lastSlideIndex] + swiper.slidesSizesGrid[lastSlideIndex] + slidesOffsetBefore * 2;\n swiper.isLocked = swiper.size > lastSlideRightEdge;\n } else {\n swiper.isLocked = swiper.snapGrid.length === 1;\n }\n if (params.allowSlideNext === true) {\n swiper.allowSlideNext = !swiper.isLocked;\n }\n if (params.allowSlidePrev === true) {\n swiper.allowSlidePrev = !swiper.isLocked;\n }\n if (wasLocked && wasLocked !== swiper.isLocked) {\n swiper.isEnd = false;\n }\n if (wasLocked !== swiper.isLocked) {\n swiper.emit(swiper.isLocked ? 'lock' : 'unlock');\n }\n}\nvar checkOverflow$1 = {\n checkOverflow\n};\n\nvar defaults = {\n init: true,\n direction: 'horizontal',\n oneWayMovement: false,\n swiperElementNodeName: 'SWIPER-CONTAINER',\n touchEventsTarget: 'wrapper',\n initialSlide: 0,\n speed: 300,\n cssMode: false,\n updateOnWindowResize: true,\n resizeObserver: true,\n nested: false,\n createElements: false,\n eventsPrefix: 'swiper',\n enabled: true,\n focusableElements: 'input, select, option, textarea, button, video, label',\n // Overrides\n width: null,\n height: null,\n //\n preventInteractionOnTransition: false,\n // ssr\n userAgent: null,\n url: null,\n // To support iOS's swipe-to-go-back gesture (when being used in-app).\n edgeSwipeDetection: false,\n edgeSwipeThreshold: 20,\n // Autoheight\n autoHeight: false,\n // Set wrapper width\n setWrapperSize: false,\n // Virtual Translate\n virtualTranslate: false,\n // Effects\n effect: 'slide',\n // 'slide' or 'fade' or 'cube' or 'coverflow' or 'flip'\n\n // Breakpoints\n breakpoints: undefined,\n breakpointsBase: 'window',\n // Slides grid\n spaceBetween: 0,\n slidesPerView: 1,\n slidesPerGroup: 1,\n slidesPerGroupSkip: 0,\n slidesPerGroupAuto: false,\n centeredSlides: false,\n centeredSlidesBounds: false,\n slidesOffsetBefore: 0,\n // in px\n slidesOffsetAfter: 0,\n // in px\n normalizeSlideIndex: true,\n centerInsufficientSlides: false,\n snapToSlideEdge: false,\n // Disable swiper and hide navigation when container not overflow\n watchOverflow: true,\n // Round length\n roundLengths: false,\n // Touches\n touchRatio: 1,\n touchAngle: 45,\n simulateTouch: true,\n shortSwipes: true,\n longSwipes: true,\n longSwipesRatio: 0.5,\n longSwipesMs: 300,\n followFinger: true,\n allowTouchMove: true,\n threshold: 5,\n touchMoveStopPropagation: false,\n touchStartPreventDefault: true,\n touchStartForcePreventDefault: false,\n touchReleaseOnEdges: false,\n // Unique Navigation Elements\n uniqueNavElements: true,\n // Resistance\n resistance: true,\n resistanceRatio: 0.85,\n // Progress\n watchSlidesProgress: false,\n // Cursor\n grabCursor: false,\n // Clicks\n preventClicks: true,\n preventClicksPropagation: true,\n slideToClickedSlide: false,\n // loop\n loop: false,\n loopAddBlankSlides: true,\n loopAdditionalSlides: 0,\n loopPreventsSliding: true,\n // rewind\n rewind: false,\n // Swiping/no swiping\n allowSlidePrev: true,\n allowSlideNext: true,\n swipeHandler: null,\n // '.swipe-handler',\n noSwiping: true,\n noSwipingClass: 'swiper-no-swiping',\n noSwipingSelector: null,\n // Passive Listeners\n passiveListeners: true,\n maxBackfaceHiddenSlides: 10,\n // NS\n containerModifierClass: 'swiper-',\n // NEW\n slideClass: 'swiper-slide',\n slideBlankClass: 'swiper-slide-blank',\n slideActiveClass: 'swiper-slide-active',\n slideVisibleClass: 'swiper-slide-visible',\n slideFullyVisibleClass: 'swiper-slide-fully-visible',\n slideNextClass: 'swiper-slide-next',\n slidePrevClass: 'swiper-slide-prev',\n wrapperClass: 'swiper-wrapper',\n lazyPreloaderClass: 'swiper-lazy-preloader',\n lazyPreloadPrevNext: 0,\n // Callbacks\n runCallbacksOnInit: true,\n // Internals\n _emitClasses: false\n};\n\nfunction moduleExtendParams(params, allModulesParams) {\n return function extendParams(obj = {}) {\n const moduleParamName = Object.keys(obj)[0];\n const moduleParams = obj[moduleParamName];\n if (typeof moduleParams !== 'object' || moduleParams === null) {\n extend(allModulesParams, obj);\n return;\n }\n if (params[moduleParamName] === true) {\n params[moduleParamName] = {\n enabled: true\n };\n }\n if (moduleParamName === 'navigation' && params[moduleParamName] && params[moduleParamName].enabled && !params[moduleParamName].prevEl && !params[moduleParamName].nextEl) {\n params[moduleParamName].auto = true;\n }\n if (['pagination', 'scrollbar'].indexOf(moduleParamName) >= 0 && params[moduleParamName] && params[moduleParamName].enabled && !params[moduleParamName].el) {\n params[moduleParamName].auto = true;\n }\n if (!(moduleParamName in params && 'enabled' in moduleParams)) {\n extend(allModulesParams, obj);\n return;\n }\n if (typeof params[moduleParamName] === 'object' && !('enabled' in params[moduleParamName])) {\n params[moduleParamName].enabled = true;\n }\n if (!params[moduleParamName]) params[moduleParamName] = {\n enabled: false\n };\n extend(allModulesParams, obj);\n };\n}\n\n/* eslint no-param-reassign: \"off\" */\nconst prototypes = {\n eventsEmitter,\n update,\n translate,\n transition,\n slide,\n loop,\n grabCursor,\n events: events$1,\n breakpoints,\n checkOverflow: checkOverflow$1,\n classes\n};\nconst extendedDefaults = {};\nclass Swiper {\n constructor(...args) {\n let el;\n let params;\n if (args.length === 1 && args[0].constructor && Object.prototype.toString.call(args[0]).slice(8, -1) === 'Object') {\n params = args[0];\n } else {\n [el, params] = args;\n }\n if (!params) params = {};\n params = extend({}, params);\n if (el && !params.el) params.el = el;\n const document = getDocument();\n if (params.el && typeof params.el === 'string' && document.querySelectorAll(params.el).length > 1) {\n const swipers = [];\n document.querySelectorAll(params.el).forEach(containerEl => {\n const newParams = extend({}, params, {\n el: containerEl\n });\n swipers.push(new Swiper(newParams));\n });\n // eslint-disable-next-line no-constructor-return\n return swipers;\n }\n\n // Swiper Instance\n const swiper = this;\n swiper.__swiper__ = true;\n swiper.support = getSupport();\n swiper.device = getDevice({\n userAgent: params.userAgent\n });\n swiper.browser = getBrowser();\n swiper.eventsListeners = {};\n swiper.eventsAnyListeners = [];\n swiper.modules = [...swiper.__modules__];\n if (params.modules && Array.isArray(params.modules)) {\n params.modules.forEach(mod => {\n if (typeof mod === 'function' && swiper.modules.indexOf(mod) < 0) {\n swiper.modules.push(mod);\n }\n });\n }\n const allModulesParams = {};\n swiper.modules.forEach(mod => {\n mod({\n params,\n swiper,\n extendParams: moduleExtendParams(params, allModulesParams),\n on: swiper.on.bind(swiper),\n once: swiper.once.bind(swiper),\n off: swiper.off.bind(swiper),\n emit: swiper.emit.bind(swiper)\n });\n });\n\n // Extend defaults with modules params\n const swiperParams = extend({}, defaults, allModulesParams);\n\n // Extend defaults with passed params\n swiper.params = extend({}, swiperParams, extendedDefaults, params);\n swiper.originalParams = extend({}, swiper.params);\n swiper.passedParams = extend({}, params);\n\n // add event listeners\n if (swiper.params && swiper.params.on) {\n Object.keys(swiper.params.on).forEach(eventName => {\n swiper.on(eventName, swiper.params.on[eventName]);\n });\n }\n if (swiper.params && swiper.params.onAny) {\n swiper.onAny(swiper.params.onAny);\n }\n\n // Extend Swiper\n Object.assign(swiper, {\n enabled: swiper.params.enabled,\n el,\n // Classes\n classNames: [],\n // Slides\n slides: [],\n slidesGrid: [],\n snapGrid: [],\n slidesSizesGrid: [],\n // isDirection\n isHorizontal() {\n return swiper.params.direction === 'horizontal';\n },\n isVertical() {\n return swiper.params.direction === 'vertical';\n },\n // Indexes\n activeIndex: 0,\n realIndex: 0,\n //\n isBeginning: true,\n isEnd: false,\n // Props\n translate: 0,\n previousTranslate: 0,\n progress: 0,\n velocity: 0,\n animating: false,\n cssOverflowAdjustment() {\n // Returns 0 unless `translate` is > 2**23\n // Should be subtracted from css values to prevent overflow\n return Math.trunc(this.translate / 2 ** 23) * 2 ** 23;\n },\n // Locks\n allowSlideNext: swiper.params.allowSlideNext,\n allowSlidePrev: swiper.params.allowSlidePrev,\n // Touch Events\n touchEventsData: {\n isTouched: undefined,\n isMoved: undefined,\n allowTouchCallbacks: undefined,\n touchStartTime: undefined,\n isScrolling: undefined,\n currentTranslate: undefined,\n startTranslate: undefined,\n allowThresholdMove: undefined,\n // Form elements to match\n focusableElements: swiper.params.focusableElements,\n // Last click time\n lastClickTime: 0,\n clickTimeout: undefined,\n // Velocities\n velocities: [],\n allowMomentumBounce: undefined,\n startMoving: undefined,\n pointerId: null,\n touchId: null\n },\n // Clicks\n allowClick: true,\n // Touches\n allowTouchMove: swiper.params.allowTouchMove,\n touches: {\n startX: 0,\n startY: 0,\n currentX: 0,\n currentY: 0,\n diff: 0\n },\n // Images\n imagesToLoad: [],\n imagesLoaded: 0\n });\n swiper.emit('_swiper');\n\n // Init\n if (swiper.params.init) {\n swiper.init();\n }\n\n // Return app instance\n // eslint-disable-next-line no-constructor-return\n return swiper;\n }\n getDirectionLabel(property) {\n if (this.isHorizontal()) {\n return property;\n }\n // prettier-ignore\n return {\n 'width': 'height',\n 'margin-top': 'margin-left',\n 'margin-bottom ': 'margin-right',\n 'margin-left': 'margin-top',\n 'margin-right': 'margin-bottom',\n 'padding-left': 'padding-top',\n 'padding-right': 'padding-bottom',\n 'marginRight': 'marginBottom'\n }[property];\n }\n getSlideIndex(slideEl) {\n const {\n slidesEl,\n params\n } = this;\n const slides = elementChildren(slidesEl, `.${params.slideClass}, swiper-slide`);\n const firstSlideIndex = elementIndex(slides[0]);\n return elementIndex(slideEl) - firstSlideIndex;\n }\n getSlideIndexByData(index) {\n return this.getSlideIndex(this.slides.find(slideEl => slideEl.getAttribute('data-swiper-slide-index') * 1 === index));\n }\n getSlideIndexWhenGrid(index) {\n if (this.grid && this.params.grid && this.params.grid.rows > 1) {\n if (this.params.grid.fill === 'column') {\n index = Math.floor(index / this.params.grid.rows);\n } else if (this.params.grid.fill === 'row') {\n index = index % Math.ceil(this.slides.length / this.params.grid.rows);\n }\n }\n return index;\n }\n recalcSlides() {\n const swiper = this;\n const {\n slidesEl,\n params\n } = swiper;\n swiper.slides = elementChildren(slidesEl, `.${params.slideClass}, swiper-slide`);\n }\n enable() {\n const swiper = this;\n if (swiper.enabled) return;\n swiper.enabled = true;\n if (swiper.params.grabCursor) {\n swiper.setGrabCursor();\n }\n swiper.emit('enable');\n }\n disable() {\n const swiper = this;\n if (!swiper.enabled) return;\n swiper.enabled = false;\n if (swiper.params.grabCursor) {\n swiper.unsetGrabCursor();\n }\n swiper.emit('disable');\n }\n setProgress(progress, speed) {\n const swiper = this;\n progress = Math.min(Math.max(progress, 0), 1);\n const min = swiper.minTranslate();\n const max = swiper.maxTranslate();\n const current = (max - min) * progress + min;\n swiper.translateTo(current, typeof speed === 'undefined' ? 0 : speed);\n swiper.updateActiveIndex();\n swiper.updateSlidesClasses();\n }\n emitContainerClasses() {\n const swiper = this;\n if (!swiper.params._emitClasses || !swiper.el) return;\n const cls = swiper.el.className.split(' ').filter(className => {\n return className.indexOf('swiper') === 0 || className.indexOf(swiper.params.containerModifierClass) === 0;\n });\n swiper.emit('_containerClasses', cls.join(' '));\n }\n getSlideClasses(slideEl) {\n const swiper = this;\n if (swiper.destroyed) return '';\n return slideEl.className.split(' ').filter(className => {\n return className.indexOf('swiper-slide') === 0 || className.indexOf(swiper.params.slideClass) === 0;\n }).join(' ');\n }\n emitSlidesClasses() {\n const swiper = this;\n if (!swiper.params._emitClasses || !swiper.el) return;\n const updates = [];\n swiper.slides.forEach(slideEl => {\n const classNames = swiper.getSlideClasses(slideEl);\n updates.push({\n slideEl,\n classNames\n });\n swiper.emit('_slideClass', slideEl, classNames);\n });\n swiper.emit('_slideClasses', updates);\n }\n slidesPerViewDynamic(view = 'current', exact = false) {\n const swiper = this;\n const {\n params,\n slides,\n slidesGrid,\n slidesSizesGrid,\n size: swiperSize,\n activeIndex\n } = swiper;\n let spv = 1;\n if (typeof params.slidesPerView === 'number') return params.slidesPerView;\n if (params.centeredSlides) {\n let slideSize = slides[activeIndex] ? Math.ceil(slides[activeIndex].swiperSlideSize) : 0;\n let breakLoop;\n for (let i = activeIndex + 1; i < slides.length; i += 1) {\n if (slides[i] && !breakLoop) {\n slideSize += Math.ceil(slides[i].swiperSlideSize);\n spv += 1;\n if (slideSize > swiperSize) breakLoop = true;\n }\n }\n for (let i = activeIndex - 1; i >= 0; i -= 1) {\n if (slides[i] && !breakLoop) {\n slideSize += slides[i].swiperSlideSize;\n spv += 1;\n if (slideSize > swiperSize) breakLoop = true;\n }\n }\n } else {\n // eslint-disable-next-line\n if (view === 'current') {\n for (let i = activeIndex + 1; i < slides.length; i += 1) {\n const slideInView = exact ? slidesGrid[i] + slidesSizesGrid[i] - slidesGrid[activeIndex] < swiperSize : slidesGrid[i] - slidesGrid[activeIndex] < swiperSize;\n if (slideInView) {\n spv += 1;\n }\n }\n } else {\n // previous\n for (let i = activeIndex - 1; i >= 0; i -= 1) {\n const slideInView = slidesGrid[activeIndex] - slidesGrid[i] < swiperSize;\n if (slideInView) {\n spv += 1;\n }\n }\n }\n }\n return spv;\n }\n update() {\n const swiper = this;\n if (!swiper || swiper.destroyed) return;\n const {\n snapGrid,\n params\n } = swiper;\n // Breakpoints\n if (params.breakpoints) {\n swiper.setBreakpoint();\n }\n [...swiper.el.querySelectorAll('[loading=\"lazy\"]')].forEach(imageEl => {\n if (imageEl.complete) {\n processLazyPreloader(swiper, imageEl);\n }\n });\n swiper.updateSize();\n swiper.updateSlides();\n swiper.updateProgress();\n swiper.updateSlidesClasses();\n function setTranslate() {\n const translateValue = swiper.rtlTranslate ? swiper.translate * -1 : swiper.translate;\n const newTranslate = Math.min(Math.max(translateValue, swiper.maxTranslate()), swiper.minTranslate());\n swiper.setTranslate(newTranslate);\n swiper.updateActiveIndex();\n swiper.updateSlidesClasses();\n }\n let translated;\n if (params.freeMode && params.freeMode.enabled && !params.cssMode) {\n setTranslate();\n if (params.autoHeight) {\n swiper.updateAutoHeight();\n }\n } else {\n if ((params.slidesPerView === 'auto' || params.slidesPerView > 1) && swiper.isEnd && !params.centeredSlides) {\n const slides = swiper.virtual && params.virtual.enabled ? swiper.virtual.slides : swiper.slides;\n translated = swiper.slideTo(slides.length - 1, 0, false, true);\n } else {\n translated = swiper.slideTo(swiper.activeIndex, 0, false, true);\n }\n if (!translated) {\n setTranslate();\n }\n }\n if (params.watchOverflow && snapGrid !== swiper.snapGrid) {\n swiper.checkOverflow();\n }\n swiper.emit('update');\n }\n changeDirection(newDirection, needUpdate = true) {\n const swiper = this;\n const currentDirection = swiper.params.direction;\n if (!newDirection) {\n // eslint-disable-next-line\n newDirection = currentDirection === 'horizontal' ? 'vertical' : 'horizontal';\n }\n if (newDirection === currentDirection || newDirection !== 'horizontal' && newDirection !== 'vertical') {\n return swiper;\n }\n swiper.el.classList.remove(`${swiper.params.containerModifierClass}${currentDirection}`);\n swiper.el.classList.add(`${swiper.params.containerModifierClass}${newDirection}`);\n swiper.emitContainerClasses();\n swiper.params.direction = newDirection;\n swiper.slides.forEach(slideEl => {\n if (newDirection === 'vertical') {\n slideEl.style.width = '';\n } else {\n slideEl.style.height = '';\n }\n });\n swiper.emit('changeDirection');\n if (needUpdate) swiper.update();\n return swiper;\n }\n changeLanguageDirection(direction) {\n const swiper = this;\n if (swiper.rtl && direction === 'rtl' || !swiper.rtl && direction === 'ltr') return;\n swiper.rtl = direction === 'rtl';\n swiper.rtlTranslate = swiper.params.direction === 'horizontal' && swiper.rtl;\n if (swiper.rtl) {\n swiper.el.classList.add(`${swiper.params.containerModifierClass}rtl`);\n swiper.el.dir = 'rtl';\n } else {\n swiper.el.classList.remove(`${swiper.params.containerModifierClass}rtl`);\n swiper.el.dir = 'ltr';\n }\n swiper.update();\n }\n mount(element) {\n const swiper = this;\n if (swiper.mounted) return true;\n\n // Find el\n let el = element || swiper.params.el;\n if (typeof el === 'string') {\n el = document.querySelector(el);\n }\n if (!el) {\n return false;\n }\n el.swiper = swiper;\n if (el.parentNode && el.parentNode.host && el.parentNode.host.nodeName === swiper.params.swiperElementNodeName.toUpperCase()) {\n swiper.isElement = true;\n }\n const getWrapperSelector = () => {\n return `.${(swiper.params.wrapperClass || '').trim().split(' ').join('.')}`;\n };\n const getWrapper = () => {\n if (el && el.shadowRoot && el.shadowRoot.querySelector) {\n const res = el.shadowRoot.querySelector(getWrapperSelector());\n // Children needs to return slot items\n return res;\n }\n return elementChildren(el, getWrapperSelector())[0];\n };\n // Find Wrapper\n let wrapperEl = getWrapper();\n if (!wrapperEl && swiper.params.createElements) {\n wrapperEl = createElement('div', swiper.params.wrapperClass);\n el.append(wrapperEl);\n elementChildren(el, `.${swiper.params.slideClass}`).forEach(slideEl => {\n wrapperEl.append(slideEl);\n });\n }\n Object.assign(swiper, {\n el,\n wrapperEl,\n slidesEl: swiper.isElement && !el.parentNode.host.slideSlots ? el.parentNode.host : wrapperEl,\n hostEl: swiper.isElement ? el.parentNode.host : el,\n mounted: true,\n // RTL\n rtl: el.dir.toLowerCase() === 'rtl' || elementStyle(el, 'direction') === 'rtl',\n rtlTranslate: swiper.params.direction === 'horizontal' && (el.dir.toLowerCase() === 'rtl' || elementStyle(el, 'direction') === 'rtl'),\n wrongRTL: elementStyle(wrapperEl, 'display') === '-webkit-box'\n });\n return true;\n }\n init(el) {\n const swiper = this;\n if (swiper.initialized) return swiper;\n const mounted = swiper.mount(el);\n if (mounted === false) return swiper;\n swiper.emit('beforeInit');\n\n // Set breakpoint\n if (swiper.params.breakpoints) {\n swiper.setBreakpoint();\n }\n\n // Add Classes\n swiper.addClasses();\n\n // Update size\n swiper.updateSize();\n\n // Update slides\n swiper.updateSlides();\n if (swiper.params.watchOverflow) {\n swiper.checkOverflow();\n }\n\n // Set Grab Cursor\n if (swiper.params.grabCursor && swiper.enabled) {\n swiper.setGrabCursor();\n }\n\n // Slide To Initial Slide\n if (swiper.params.loop && swiper.virtual && swiper.params.virtual.enabled) {\n swiper.slideTo(swiper.params.initialSlide + swiper.virtual.slidesBefore, 0, swiper.params.runCallbacksOnInit, false, true);\n } else {\n swiper.slideTo(swiper.params.initialSlide, 0, swiper.params.runCallbacksOnInit, false, true);\n }\n\n // Create loop\n if (swiper.params.loop) {\n swiper.loopCreate(undefined, true);\n }\n\n // Attach events\n swiper.attachEvents();\n const lazyElements = [...swiper.el.querySelectorAll('[loading=\"lazy\"]')];\n if (swiper.isElement) {\n lazyElements.push(...swiper.hostEl.querySelectorAll('[loading=\"lazy\"]'));\n }\n lazyElements.forEach(imageEl => {\n if (imageEl.complete) {\n processLazyPreloader(swiper, imageEl);\n } else {\n imageEl.addEventListener('load', e => {\n processLazyPreloader(swiper, e.target);\n });\n }\n });\n preload(swiper);\n\n // Init Flag\n swiper.initialized = true;\n preload(swiper);\n\n // Emit\n swiper.emit('init');\n swiper.emit('afterInit');\n return swiper;\n }\n destroy(deleteInstance = true, cleanStyles = true) {\n const swiper = this;\n const {\n params,\n el,\n wrapperEl,\n slides\n } = swiper;\n if (typeof swiper.params === 'undefined' || swiper.destroyed) {\n return null;\n }\n swiper.emit('beforeDestroy');\n\n // Init Flag\n swiper.initialized = false;\n\n // Detach events\n swiper.detachEvents();\n\n // Destroy loop\n if (params.loop) {\n swiper.loopDestroy();\n }\n\n // Cleanup styles\n if (cleanStyles) {\n swiper.removeClasses();\n if (el && typeof el !== 'string') {\n el.removeAttribute('style');\n }\n if (wrapperEl) {\n wrapperEl.removeAttribute('style');\n }\n if (slides && slides.length) {\n slides.forEach(slideEl => {\n slideEl.classList.remove(params.slideVisibleClass, params.slideFullyVisibleClass, params.slideActiveClass, params.slideNextClass, params.slidePrevClass);\n slideEl.removeAttribute('style');\n slideEl.removeAttribute('data-swiper-slide-index');\n });\n }\n }\n swiper.emit('destroy');\n\n // Detach emitter events\n Object.keys(swiper.eventsListeners).forEach(eventName => {\n swiper.off(eventName);\n });\n if (deleteInstance !== false) {\n if (swiper.el && typeof swiper.el !== 'string') {\n swiper.el.swiper = null;\n }\n deleteProps(swiper);\n }\n swiper.destroyed = true;\n return null;\n }\n static extendDefaults(newDefaults) {\n extend(extendedDefaults, newDefaults);\n }\n static get extendedDefaults() {\n return extendedDefaults;\n }\n static get defaults() {\n return defaults;\n }\n static installModule(mod) {\n if (!Swiper.prototype.__modules__) Swiper.prototype.__modules__ = [];\n const modules = Swiper.prototype.__modules__;\n if (typeof mod === 'function' && modules.indexOf(mod) < 0) {\n modules.push(mod);\n }\n }\n static use(module) {\n if (Array.isArray(module)) {\n module.forEach(m => Swiper.installModule(m));\n return Swiper;\n }\n Swiper.installModule(module);\n return Swiper;\n }\n}\nObject.keys(prototypes).forEach(prototypeGroup => {\n Object.keys(prototypes[prototypeGroup]).forEach(protoMethod => {\n Swiper.prototype[protoMethod] = prototypes[prototypeGroup][protoMethod];\n });\n});\nSwiper.use([Resize, Observer]);\n\nexport { Swiper as S, defaults as d };\n","import { s as setInnerHTML } from './utils.mjs';\n\n/* underscore in name -> watch for changes */\nconst paramsList = ['eventsPrefix', 'injectStyles', 'injectStylesUrls', 'modules', 'init', '_direction', 'oneWayMovement', 'swiperElementNodeName', 'touchEventsTarget', 'initialSlide', '_speed', 'cssMode', 'updateOnWindowResize', 'resizeObserver', 'nested', 'focusableElements', '_enabled', '_width', '_height', 'preventInteractionOnTransition', 'userAgent', 'url', '_edgeSwipeDetection', '_edgeSwipeThreshold', '_freeMode', '_autoHeight', 'setWrapperSize', 'virtualTranslate', '_effect', 'breakpoints', 'breakpointsBase', '_spaceBetween', '_slidesPerView', 'maxBackfaceHiddenSlides', '_grid', '_slidesPerGroup', '_slidesPerGroupSkip', '_slidesPerGroupAuto', '_centeredSlides', '_centeredSlidesBounds', '_slidesOffsetBefore', '_slidesOffsetAfter', 'normalizeSlideIndex', '_centerInsufficientSlides', '_snapToSlideEdge', '_watchOverflow', 'roundLengths', 'touchRatio', 'touchAngle', 'simulateTouch', '_shortSwipes', '_longSwipes', 'longSwipesRatio', 'longSwipesMs', '_followFinger', 'allowTouchMove', '_threshold', 'touchMoveStopPropagation', 'touchStartPreventDefault', 'touchStartForcePreventDefault', 'touchReleaseOnEdges', 'uniqueNavElements', '_resistance', '_resistanceRatio', '_watchSlidesProgress', '_grabCursor', 'preventClicks', 'preventClicksPropagation', '_slideToClickedSlide', '_loop', 'loopAdditionalSlides', 'loopAddBlankSlides', 'loopPreventsSliding', '_rewind', '_allowSlidePrev', '_allowSlideNext', '_swipeHandler', '_noSwiping', 'noSwipingClass', 'noSwipingSelector', 'passiveListeners', 'containerModifierClass', 'slideClass', 'slideActiveClass', 'slideVisibleClass', 'slideFullyVisibleClass', 'slideNextClass', 'slidePrevClass', 'slideBlankClass', 'wrapperClass', 'lazyPreloaderClass', 'lazyPreloadPrevNext', 'runCallbacksOnInit', 'observer', 'observeParents', 'observeSlideChildren',\n// modules\n'a11y', '_autoplay', '_controller', 'coverflowEffect', 'cubeEffect', 'fadeEffect', 'flipEffect', 'creativeEffect', 'cardsEffect', 'hashNavigation', 'history', 'keyboard', 'mousewheel', '_navigation', '_pagination', 'parallax', '_scrollbar', '_thumbs', 'virtual', 'zoom', 'control'];\n\nfunction isObject(o) {\n return typeof o === 'object' && o !== null && o.constructor && Object.prototype.toString.call(o).slice(8, -1) === 'Object' && !o.__swiper__;\n}\nfunction extend(target, src) {\n const noExtend = ['__proto__', 'constructor', 'prototype'];\n Object.keys(src).filter(key => noExtend.indexOf(key) < 0).forEach(key => {\n if (typeof target[key] === 'undefined') target[key] = src[key];else if (isObject(src[key]) && isObject(target[key]) && Object.keys(src[key]).length > 0) {\n if (src[key].__swiper__) target[key] = src[key];else extend(target[key], src[key]);\n } else {\n target[key] = src[key];\n }\n });\n}\nfunction needsNavigation(params = {}) {\n return params.navigation && typeof params.navigation.nextEl === 'undefined' && typeof params.navigation.prevEl === 'undefined';\n}\nfunction needsPagination(params = {}) {\n return params.pagination && typeof params.pagination.el === 'undefined';\n}\nfunction needsScrollbar(params = {}) {\n return params.scrollbar && typeof params.scrollbar.el === 'undefined';\n}\nfunction uniqueClasses(classNames = '') {\n const classes = classNames.split(' ').map(c => c.trim()).filter(c => !!c);\n const unique = [];\n classes.forEach(c => {\n if (unique.indexOf(c) < 0) unique.push(c);\n });\n return unique.join(' ');\n}\nfunction attrToProp(attrName = '') {\n return attrName.replace(/-[a-z]/g, l => l.toUpperCase().replace('-', ''));\n}\nfunction wrapperClass(className = '') {\n if (!className) return 'swiper-wrapper';\n if (!className.includes('swiper-wrapper')) return `swiper-wrapper ${className}`;\n return className;\n}\n\nfunction updateSwiper({\n swiper,\n slides,\n passedParams,\n changedParams,\n nextEl,\n prevEl,\n scrollbarEl,\n paginationEl\n}) {\n const updateParams = changedParams.filter(key => key !== 'children' && key !== 'direction' && key !== 'wrapperClass');\n const {\n params: currentParams,\n pagination,\n navigation,\n scrollbar,\n virtual,\n thumbs\n } = swiper;\n let needThumbsInit;\n let needControllerInit;\n let needPaginationInit;\n let needScrollbarInit;\n let needNavigationInit;\n let loopNeedDestroy;\n let loopNeedEnable;\n let loopNeedReloop;\n if (changedParams.includes('thumbs') && passedParams.thumbs && passedParams.thumbs.swiper && !passedParams.thumbs.swiper.destroyed && currentParams.thumbs && (!currentParams.thumbs.swiper || currentParams.thumbs.swiper.destroyed)) {\n needThumbsInit = true;\n }\n if (changedParams.includes('controller') && passedParams.controller && passedParams.controller.control && currentParams.controller && !currentParams.controller.control) {\n needControllerInit = true;\n }\n if (changedParams.includes('pagination') && passedParams.pagination && (passedParams.pagination.el || paginationEl) && (currentParams.pagination || currentParams.pagination === false) && pagination && !pagination.el) {\n needPaginationInit = true;\n }\n if (changedParams.includes('scrollbar') && passedParams.scrollbar && (passedParams.scrollbar.el || scrollbarEl) && (currentParams.scrollbar || currentParams.scrollbar === false) && scrollbar && !scrollbar.el) {\n needScrollbarInit = true;\n }\n if (changedParams.includes('navigation') && passedParams.navigation && (passedParams.navigation.prevEl || prevEl) && (passedParams.navigation.nextEl || nextEl) && (currentParams.navigation || currentParams.navigation === false) && navigation && !navigation.prevEl && !navigation.nextEl) {\n needNavigationInit = true;\n }\n const destroyModule = mod => {\n if (!swiper[mod]) return;\n swiper[mod].destroy();\n if (mod === 'navigation') {\n if (swiper.isElement) {\n swiper[mod].prevEl.remove();\n swiper[mod].nextEl.remove();\n }\n currentParams[mod].prevEl = undefined;\n currentParams[mod].nextEl = undefined;\n swiper[mod].prevEl = undefined;\n swiper[mod].nextEl = undefined;\n } else {\n if (swiper.isElement) {\n swiper[mod].el.remove();\n }\n currentParams[mod].el = undefined;\n swiper[mod].el = undefined;\n }\n };\n if (changedParams.includes('loop') && swiper.isElement) {\n if (currentParams.loop && !passedParams.loop) {\n loopNeedDestroy = true;\n } else if (!currentParams.loop && passedParams.loop) {\n loopNeedEnable = true;\n } else {\n loopNeedReloop = true;\n }\n }\n updateParams.forEach(key => {\n if (isObject(currentParams[key]) && isObject(passedParams[key])) {\n Object.assign(currentParams[key], passedParams[key]);\n if ((key === 'navigation' || key === 'pagination' || key === 'scrollbar') && 'enabled' in passedParams[key] && !passedParams[key].enabled) {\n destroyModule(key);\n }\n } else {\n const newValue = passedParams[key];\n if ((newValue === true || newValue === false) && (key === 'navigation' || key === 'pagination' || key === 'scrollbar')) {\n if (newValue === false) {\n destroyModule(key);\n }\n } else {\n currentParams[key] = passedParams[key];\n }\n }\n });\n if (updateParams.includes('controller') && !needControllerInit && swiper.controller && swiper.controller.control && currentParams.controller && currentParams.controller.control) {\n swiper.controller.control = currentParams.controller.control;\n }\n if (changedParams.includes('children') && slides && virtual && currentParams.virtual.enabled) {\n virtual.slides = slides;\n virtual.update(true);\n } else if (changedParams.includes('virtual') && virtual && currentParams.virtual.enabled) {\n if (slides) virtual.slides = slides;\n virtual.update(true);\n }\n if (changedParams.includes('children') && slides && currentParams.loop) {\n loopNeedReloop = true;\n }\n if (needThumbsInit) {\n const initialized = thumbs.init();\n if (initialized) thumbs.update(true);\n }\n if (needControllerInit) {\n swiper.controller.control = currentParams.controller.control;\n }\n if (needPaginationInit) {\n if (swiper.isElement && (!paginationEl || typeof paginationEl === 'string')) {\n paginationEl = document.createElement('div');\n paginationEl.classList.add('swiper-pagination');\n paginationEl.part.add('pagination');\n swiper.el.appendChild(paginationEl);\n }\n if (paginationEl) currentParams.pagination.el = paginationEl;\n pagination.init();\n pagination.render();\n pagination.update();\n }\n if (needScrollbarInit) {\n if (swiper.isElement && (!scrollbarEl || typeof scrollbarEl === 'string')) {\n scrollbarEl = document.createElement('div');\n scrollbarEl.classList.add('swiper-scrollbar');\n scrollbarEl.part.add('scrollbar');\n swiper.el.appendChild(scrollbarEl);\n }\n if (scrollbarEl) currentParams.scrollbar.el = scrollbarEl;\n scrollbar.init();\n scrollbar.updateSize();\n scrollbar.setTranslate();\n }\n if (needNavigationInit) {\n if (swiper.isElement) {\n if (!nextEl || typeof nextEl === 'string') {\n nextEl = document.createElement('div');\n nextEl.classList.add('swiper-button-next');\n setInnerHTML(nextEl, swiper.navigation.arrowSvg);\n nextEl.part.add('button-next');\n swiper.el.appendChild(nextEl);\n }\n if (!prevEl || typeof prevEl === 'string') {\n prevEl = document.createElement('div');\n prevEl.classList.add('swiper-button-prev');\n setInnerHTML(prevEl, swiper.navigation.arrowSvg);\n prevEl.part.add('button-prev');\n swiper.el.appendChild(prevEl);\n }\n }\n if (nextEl) currentParams.navigation.nextEl = nextEl;\n if (prevEl) currentParams.navigation.prevEl = prevEl;\n navigation.init();\n navigation.update();\n }\n if (changedParams.includes('allowSlideNext')) {\n swiper.allowSlideNext = passedParams.allowSlideNext;\n }\n if (changedParams.includes('allowSlidePrev')) {\n swiper.allowSlidePrev = passedParams.allowSlidePrev;\n }\n if (changedParams.includes('direction')) {\n swiper.changeDirection(passedParams.direction, false);\n }\n if (loopNeedDestroy || loopNeedReloop) {\n swiper.loopDestroy();\n }\n if (loopNeedEnable || loopNeedReloop) {\n swiper.loopCreate();\n }\n swiper.update();\n}\n\nexport { needsPagination as a, needsScrollbar as b, attrToProp as c, uniqueClasses as d, extend as e, isObject as i, needsNavigation as n, paramsList as p, updateSwiper as u, wrapperClass as w };\n","import { e as extend, p as paramsList, i as isObject, n as needsNavigation, a as needsPagination, b as needsScrollbar } from './update-swiper.mjs';\nimport { d as defaults } from './swiper-core.mjs';\n\nfunction getParams(obj = {}, splitEvents = true) {\n const params = {\n on: {}\n };\n const events = {};\n const passedParams = {};\n extend(params, defaults);\n params._emitClasses = true;\n params.init = false;\n const rest = {};\n const allowedParams = paramsList.map(key => key.replace(/_/, ''));\n const plainObj = Object.assign({}, obj);\n Object.keys(plainObj).forEach(key => {\n if (typeof obj[key] === 'undefined') return;\n if (allowedParams.indexOf(key) >= 0) {\n if (isObject(obj[key])) {\n params[key] = {};\n passedParams[key] = {};\n extend(params[key], obj[key]);\n extend(passedParams[key], obj[key]);\n } else {\n params[key] = obj[key];\n passedParams[key] = obj[key];\n }\n } else if (key.search(/on[A-Z]/) === 0 && typeof obj[key] === 'function') {\n if (splitEvents) {\n events[`${key[2].toLowerCase()}${key.substr(3)}`] = obj[key];\n } else {\n params.on[`${key[2].toLowerCase()}${key.substr(3)}`] = obj[key];\n }\n } else {\n rest[key] = obj[key];\n }\n });\n ['navigation', 'pagination', 'scrollbar'].forEach(key => {\n if (params[key] === true) params[key] = {};\n if (params[key] === false) delete params[key];\n });\n return {\n params,\n passedParams,\n rest,\n events\n };\n}\n\nfunction mountSwiper({\n el,\n nextEl,\n prevEl,\n paginationEl,\n scrollbarEl,\n swiper\n}, swiperParams) {\n if (needsNavigation(swiperParams) && nextEl && prevEl) {\n swiper.params.navigation.nextEl = nextEl;\n swiper.originalParams.navigation.nextEl = nextEl;\n swiper.params.navigation.prevEl = prevEl;\n swiper.originalParams.navigation.prevEl = prevEl;\n }\n if (needsPagination(swiperParams) && paginationEl) {\n swiper.params.pagination.el = paginationEl;\n swiper.originalParams.pagination.el = paginationEl;\n }\n if (needsScrollbar(swiperParams) && scrollbarEl) {\n swiper.params.scrollbar.el = scrollbarEl;\n swiper.originalParams.scrollbar.el = scrollbarEl;\n }\n swiper.init(el);\n}\n\nfunction getChangedParams(swiperParams, oldParams, children, oldChildren, getKey) {\n const keys = [];\n if (!oldParams) return keys;\n const addKey = key => {\n if (keys.indexOf(key) < 0) keys.push(key);\n };\n if (children && oldChildren) {\n const oldChildrenKeys = oldChildren.map(getKey);\n const childrenKeys = children.map(getKey);\n if (oldChildrenKeys.join('') !== childrenKeys.join('')) addKey('children');\n if (oldChildren.length !== children.length) addKey('children');\n }\n const watchParams = paramsList.filter(key => key[0] === '_').map(key => key.replace(/_/, ''));\n watchParams.forEach(key => {\n if (key in swiperParams && key in oldParams) {\n if (isObject(swiperParams[key]) && isObject(oldParams[key])) {\n const newKeys = Object.keys(swiperParams[key]);\n const oldKeys = Object.keys(oldParams[key]);\n if (newKeys.length !== oldKeys.length) {\n addKey(key);\n } else {\n newKeys.forEach(newKey => {\n if (swiperParams[key][newKey] !== oldParams[key][newKey]) {\n addKey(key);\n }\n });\n oldKeys.forEach(oldKey => {\n if (swiperParams[key][oldKey] !== oldParams[key][oldKey]) addKey(key);\n });\n }\n } else if (swiperParams[key] !== oldParams[key]) {\n addKey(key);\n }\n }\n });\n return keys;\n}\n\nconst updateOnVirtualData = swiper => {\n if (!swiper || swiper.destroyed || !swiper.params.virtual || swiper.params.virtual && !swiper.params.virtual.enabled) return;\n swiper.updateSlides();\n swiper.updateProgress();\n swiper.updateSlidesClasses();\n swiper.emit('_virtualUpdated');\n if (swiper.parallax && swiper.params.parallax && swiper.params.parallax.enabled) {\n swiper.parallax.setTranslate();\n }\n};\n\nexport { getChangedParams as a, getParams as g, mountSwiper as m, updateOnVirtualData as u };\n","/**\n * Swiper React 12.1.4\n * Most modern mobile touch slider and framework with hardware accelerated transitions\n * https://swiperjs.com\n *\n * Copyright 2014-2026 Vladimir Kharlampidi\n *\n * Released under the MIT License\n *\n * Released on: April 29, 2026\n */\n\nimport React, { useEffect, useLayoutEffect, useContext, createContext, forwardRef, useState, useRef } from 'react';\nimport { S as Swiper$1 } from './shared/swiper-core.mjs';\nimport { g as getParams, m as mountSwiper, a as getChangedParams, u as updateOnVirtualData } from './shared/update-on-virtual-data.mjs';\nimport { d as uniqueClasses, w as wrapperClass, n as needsNavigation, b as needsScrollbar, a as needsPagination, e as extend, u as updateSwiper } from './shared/update-swiper.mjs';\n\nfunction _extends() {\n _extends = Object.assign ? Object.assign.bind() : function (target) {\n for (var i = 1; i < arguments.length; i++) {\n var source = arguments[i];\n for (var key in source) {\n if (Object.prototype.hasOwnProperty.call(source, key)) {\n target[key] = source[key];\n }\n }\n }\n return target;\n };\n return _extends.apply(this, arguments);\n}\n\nfunction isChildSwiperSlide(child) {\n return child.type && child.type.displayName && child.type.displayName.includes('SwiperSlide');\n}\nfunction processChildren(c) {\n const slides = [];\n React.Children.toArray(c).forEach(child => {\n if (isChildSwiperSlide(child)) {\n slides.push(child);\n } else if (child.props && child.props.children) {\n processChildren(child.props.children).forEach(slide => slides.push(slide));\n }\n });\n return slides;\n}\nfunction getChildren(c) {\n const slides = [];\n const slots = {\n 'container-start': [],\n 'container-end': [],\n 'wrapper-start': [],\n 'wrapper-end': []\n };\n React.Children.toArray(c).forEach(child => {\n if (isChildSwiperSlide(child)) {\n slides.push(child);\n } else if (child.props && child.props.slot && slots[child.props.slot]) {\n slots[child.props.slot].push(child);\n } else if (child.props && child.props.children) {\n const foundSlides = processChildren(child.props.children);\n if (foundSlides.length > 0) {\n foundSlides.forEach(slide => slides.push(slide));\n } else {\n slots['container-end'].push(child);\n }\n } else {\n slots['container-end'].push(child);\n }\n });\n return {\n slides,\n slots\n };\n}\n\nfunction renderVirtual(swiper, slides, virtualData) {\n if (!virtualData) return null;\n const getSlideIndex = index => {\n let slideIndex = index;\n if (index < 0) {\n slideIndex = slides.length + index;\n } else if (slideIndex >= slides.length) {\n // eslint-disable-next-line\n slideIndex = slideIndex - slides.length;\n }\n return slideIndex;\n };\n const style = swiper.isHorizontal() ? {\n [swiper.rtlTranslate ? 'right' : 'left']: `${virtualData.offset}px`\n } : {\n top: `${virtualData.offset}px`\n };\n const {\n from,\n to\n } = virtualData;\n const loopFrom = swiper.params.loop ? -slides.length : 0;\n const loopTo = swiper.params.loop ? slides.length * 2 : slides.length;\n const slidesToRender = [];\n for (let i = loopFrom; i < loopTo; i += 1) {\n if (i >= from && i <= to) {\n slidesToRender.push(slides[getSlideIndex(i)]);\n }\n }\n return slidesToRender.map((child, index) => {\n return /*#__PURE__*/React.cloneElement(child, {\n swiper,\n style,\n key: child.props.virtualIndex || child.key || `slide-${index}`\n });\n });\n}\n\nfunction useIsomorphicLayoutEffect(callback, deps) {\n // eslint-disable-next-line\n if (typeof window === 'undefined') return useEffect(callback, deps);\n return useLayoutEffect(callback, deps);\n}\n\nconst SwiperSlideContext = /*#__PURE__*/createContext(null);\nconst useSwiperSlide = () => {\n return useContext(SwiperSlideContext);\n};\nconst SwiperContext = /*#__PURE__*/createContext(null);\nconst useSwiper = () => {\n return useContext(SwiperContext);\n};\n\nconst Swiper = /*#__PURE__*/forwardRef(({\n className,\n tag: Tag = 'div',\n wrapperTag: WrapperTag = 'div',\n children,\n onSwiper,\n ...rest\n} = {}, externalElRef) => {\n let eventsAssigned = false;\n const [containerClasses, setContainerClasses] = useState('swiper');\n const [virtualData, setVirtualData] = useState(null);\n const [breakpointChanged, setBreakpointChanged] = useState(false);\n const initializedRef = useRef(false);\n const swiperElRef = useRef(null);\n const swiperRef = useRef(null);\n const oldPassedParamsRef = useRef(null);\n const oldSlides = useRef(null);\n const nextElRef = useRef(null);\n const prevElRef = useRef(null);\n const paginationElRef = useRef(null);\n const scrollbarElRef = useRef(null);\n const {\n params: swiperParams,\n passedParams,\n rest: restProps,\n events\n } = getParams(rest);\n const {\n slides,\n slots\n } = getChildren(children);\n const onBeforeBreakpoint = () => {\n setBreakpointChanged(!breakpointChanged);\n };\n Object.assign(swiperParams.on, {\n _containerClasses(swiper, classes) {\n setContainerClasses(classes);\n }\n });\n const initSwiper = () => {\n // init swiper\n Object.assign(swiperParams.on, events);\n eventsAssigned = true;\n const passParams = {\n ...swiperParams\n };\n delete passParams.wrapperClass;\n swiperRef.current = new Swiper$1(passParams);\n if (swiperRef.current.virtual && swiperRef.current.params.virtual.enabled) {\n swiperRef.current.virtual.slides = slides;\n const extendWith = {\n cache: false,\n slides,\n renderExternal: setVirtualData,\n renderExternalUpdate: false\n };\n extend(swiperRef.current.params.virtual, extendWith);\n extend(swiperRef.current.originalParams.virtual, extendWith);\n }\n };\n if (!swiperElRef.current) {\n initSwiper();\n }\n\n // Listen for breakpoints change\n if (swiperRef.current) {\n swiperRef.current.on('_beforeBreakpoint', onBeforeBreakpoint);\n }\n const attachEvents = () => {\n if (eventsAssigned || !events || !swiperRef.current) return;\n Object.keys(events).forEach(eventName => {\n swiperRef.current.on(eventName, events[eventName]);\n });\n };\n const detachEvents = () => {\n if (!events || !swiperRef.current) return;\n Object.keys(events).forEach(eventName => {\n swiperRef.current.off(eventName, events[eventName]);\n });\n };\n useEffect(() => {\n return () => {\n if (swiperRef.current) swiperRef.current.off('_beforeBreakpoint', onBeforeBreakpoint);\n };\n });\n\n // set initialized flag\n useEffect(() => {\n if (!initializedRef.current && swiperRef.current) {\n swiperRef.current.emitSlidesClasses();\n initializedRef.current = true;\n }\n });\n\n // mount swiper\n useIsomorphicLayoutEffect(() => {\n if (externalElRef) {\n externalElRef.current = swiperElRef.current;\n }\n if (!swiperElRef.current) return;\n if (swiperRef.current.destroyed) {\n initSwiper();\n }\n mountSwiper({\n el: swiperElRef.current,\n nextEl: nextElRef.current,\n prevEl: prevElRef.current,\n paginationEl: paginationElRef.current,\n scrollbarEl: scrollbarElRef.current,\n swiper: swiperRef.current\n }, swiperParams);\n if (onSwiper && !swiperRef.current.destroyed) onSwiper(swiperRef.current);\n // eslint-disable-next-line\n return () => {\n if (swiperRef.current && !swiperRef.current.destroyed) {\n swiperRef.current.destroy(true, false);\n }\n };\n }, []);\n\n // watch for params change\n useIsomorphicLayoutEffect(() => {\n attachEvents();\n const changedParams = getChangedParams(passedParams, oldPassedParamsRef.current, slides, oldSlides.current, c => c.key);\n oldPassedParamsRef.current = passedParams;\n oldSlides.current = slides;\n if (changedParams.length && swiperRef.current && !swiperRef.current.destroyed) {\n updateSwiper({\n swiper: swiperRef.current,\n slides,\n passedParams,\n changedParams,\n nextEl: nextElRef.current,\n prevEl: prevElRef.current,\n scrollbarEl: scrollbarElRef.current,\n paginationEl: paginationElRef.current\n });\n }\n return () => {\n detachEvents();\n };\n });\n\n // update on virtual update\n useIsomorphicLayoutEffect(() => {\n updateOnVirtualData(swiperRef.current);\n }, [virtualData]);\n\n // bypass swiper instance to slides\n function renderSlides() {\n if (swiperParams.virtual) {\n return renderVirtual(swiperRef.current, slides, virtualData);\n }\n return slides.map((child, index) => {\n return /*#__PURE__*/React.cloneElement(child, {\n swiper: swiperRef.current,\n swiperSlideIndex: index\n });\n });\n }\n return /*#__PURE__*/React.createElement(Tag, _extends({\n ref: swiperElRef,\n className: uniqueClasses(`${containerClasses}${className ? ` ${className}` : ''}`)\n }, restProps), /*#__PURE__*/React.createElement(SwiperContext.Provider, {\n value: swiperRef.current\n }, slots['container-start'], /*#__PURE__*/React.createElement(WrapperTag, {\n className: wrapperClass(swiperParams.wrapperClass)\n }, slots['wrapper-start'], renderSlides(), slots['wrapper-end']), needsNavigation(swiperParams) && /*#__PURE__*/React.createElement(React.Fragment, null, /*#__PURE__*/React.createElement(\"div\", {\n ref: prevElRef,\n className: \"swiper-button-prev\"\n }), /*#__PURE__*/React.createElement(\"div\", {\n ref: nextElRef,\n className: \"swiper-button-next\"\n })), needsScrollbar(swiperParams) && /*#__PURE__*/React.createElement(\"div\", {\n ref: scrollbarElRef,\n className: \"swiper-scrollbar\"\n }), needsPagination(swiperParams) && /*#__PURE__*/React.createElement(\"div\", {\n ref: paginationElRef,\n className: \"swiper-pagination\"\n }), slots['container-end']));\n});\nSwiper.displayName = 'Swiper';\n\nconst SwiperSlide = /*#__PURE__*/forwardRef(({\n tag: Tag = 'div',\n children,\n className = '',\n swiper,\n zoom,\n lazy,\n virtualIndex,\n swiperSlideIndex,\n ...rest\n} = {}, externalRef) => {\n const slideElRef = useRef(null);\n const [slideClasses, setSlideClasses] = useState('swiper-slide');\n const [lazyLoaded, setLazyLoaded] = useState(false);\n function updateClasses(_s, el, classNames) {\n if (el === slideElRef.current) {\n setSlideClasses(classNames);\n }\n }\n useIsomorphicLayoutEffect(() => {\n if (typeof swiperSlideIndex !== 'undefined') {\n slideElRef.current.swiperSlideIndex = swiperSlideIndex;\n }\n if (externalRef) {\n externalRef.current = slideElRef.current;\n }\n if (!slideElRef.current || !swiper) {\n return;\n }\n if (swiper.destroyed) {\n if (slideClasses !== 'swiper-slide') {\n setSlideClasses('swiper-slide');\n }\n return;\n }\n swiper.on('_slideClass', updateClasses);\n // eslint-disable-next-line\n return () => {\n if (!swiper) return;\n swiper.off('_slideClass', updateClasses);\n };\n });\n useIsomorphicLayoutEffect(() => {\n if (swiper && slideElRef.current && !swiper.destroyed) {\n setSlideClasses(swiper.getSlideClasses(slideElRef.current));\n }\n }, [swiper]);\n const slideData = {\n isActive: slideClasses.indexOf('swiper-slide-active') >= 0,\n isVisible: slideClasses.indexOf('swiper-slide-visible') >= 0,\n isFullyVisible: slideClasses.indexOf('swiper-slide-fully-visible') >= 0,\n isPrev: slideClasses.indexOf('swiper-slide-prev') >= 0,\n isNext: slideClasses.indexOf('swiper-slide-next') >= 0\n };\n const renderChildren = () => {\n return typeof children === 'function' ? children(slideData) : children;\n };\n const onLoad = () => {\n setLazyLoaded(true);\n };\n return /*#__PURE__*/React.createElement(Tag, _extends({\n ref: slideElRef,\n className: uniqueClasses(`${slideClasses}${className ? ` ${className}` : ''}`),\n \"data-swiper-slide-index\": virtualIndex,\n onLoad: onLoad\n }, rest), zoom && /*#__PURE__*/React.createElement(SwiperSlideContext.Provider, {\n value: slideData\n }, /*#__PURE__*/React.createElement(\"div\", {\n className: \"swiper-zoom-container\",\n \"data-swiper-zoom\": typeof zoom === 'number' ? zoom : undefined\n }, renderChildren(), lazy && !lazyLoaded && /*#__PURE__*/React.createElement(\"div\", {\n className: \"swiper-lazy-preloader\",\n ref: node => {\n if (node) node.lazyPreloaderManaged = true;\n }\n }))), !zoom && /*#__PURE__*/React.createElement(SwiperSlideContext.Provider, {\n value: slideData\n }, renderChildren(), lazy && !lazyLoaded && /*#__PURE__*/React.createElement(\"div\", {\n className: \"swiper-lazy-preloader\",\n ref: node => {\n if (node) node.lazyPreloaderManaged = true;\n }\n })));\n});\nSwiperSlide.displayName = 'SwiperSlide';\n\nexport { Swiper, SwiperSlide, useSwiper, useSwiperSlide };\n","import { e as elementChildren, c as createElement } from './utils.mjs';\n\nfunction createElementIfNotDefined(swiper, originalParams, params, checkProps) {\n if (swiper.params.createElements) {\n Object.keys(checkProps).forEach(key => {\n if (!params[key] && params.auto === true) {\n let element = elementChildren(swiper.el, `.${checkProps[key]}`)[0];\n if (!element) {\n element = createElement('div', checkProps[key]);\n element.className = checkProps[key];\n swiper.el.append(element);\n }\n params[key] = element;\n originalParams[key] = element;\n }\n });\n }\n return params;\n}\n\nexport { createElementIfNotDefined as c };\n","import { c as createElementIfNotDefined } from '../shared/create-element-if-not-defined.mjs';\nimport { m as makeElementsArray, s as setInnerHTML } from '../shared/utils.mjs';\n\nconst arrowSvg = `<svg class=\"swiper-navigation-icon\" width=\"11\" height=\"20\" viewBox=\"0 0 11 20\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\"><path d=\"M0.38296 20.0762C0.111788 19.805 0.111788 19.3654 0.38296 19.0942L9.19758 10.2796L0.38296 1.46497C0.111788 1.19379 0.111788 0.754138 0.38296 0.482966C0.654131 0.211794 1.09379 0.211794 1.36496 0.482966L10.4341 9.55214C10.8359 9.9539 10.8359 10.6053 10.4341 11.007L1.36496 20.0762C1.09379 20.3474 0.654131 20.3474 0.38296 20.0762Z\" fill=\"currentColor\"/></svg>`;\nfunction Navigation({\n swiper,\n extendParams,\n on,\n emit\n}) {\n extendParams({\n navigation: {\n nextEl: null,\n prevEl: null,\n addIcons: true,\n hideOnClick: false,\n disabledClass: 'swiper-button-disabled',\n hiddenClass: 'swiper-button-hidden',\n lockClass: 'swiper-button-lock',\n navigationDisabledClass: 'swiper-navigation-disabled'\n }\n });\n swiper.navigation = {\n nextEl: null,\n prevEl: null,\n arrowSvg\n };\n function getEl(el) {\n let res;\n if (el && typeof el === 'string' && swiper.isElement) {\n res = swiper.el.querySelector(el) || swiper.hostEl.querySelector(el);\n if (res) return res;\n }\n if (el) {\n if (typeof el === 'string') res = [...document.querySelectorAll(el)];\n if (swiper.params.uniqueNavElements && typeof el === 'string' && res && res.length > 1 && swiper.el.querySelectorAll(el).length === 1) {\n res = swiper.el.querySelector(el);\n } else if (res && res.length === 1) {\n res = res[0];\n }\n }\n if (el && !res) return el;\n // if (Array.isArray(res) && res.length === 1) res = res[0];\n return res;\n }\n function toggleEl(el, disabled) {\n const params = swiper.params.navigation;\n el = makeElementsArray(el);\n el.forEach(subEl => {\n if (subEl) {\n subEl.classList[disabled ? 'add' : 'remove'](...params.disabledClass.split(' '));\n if (subEl.tagName === 'BUTTON') subEl.disabled = disabled;\n if (swiper.params.watchOverflow && swiper.enabled) {\n subEl.classList[swiper.isLocked ? 'add' : 'remove'](params.lockClass);\n }\n }\n });\n }\n function update() {\n // Update Navigation Buttons\n const {\n nextEl,\n prevEl\n } = swiper.navigation;\n if (swiper.params.loop) {\n toggleEl(prevEl, false);\n toggleEl(nextEl, false);\n return;\n }\n toggleEl(prevEl, swiper.isBeginning && !swiper.params.rewind);\n toggleEl(nextEl, swiper.isEnd && !swiper.params.rewind);\n }\n function onPrevClick(e) {\n e.preventDefault();\n if (swiper.isBeginning && !swiper.params.loop && !swiper.params.rewind) return;\n swiper.slidePrev();\n emit('navigationPrev');\n }\n function onNextClick(e) {\n e.preventDefault();\n if (swiper.isEnd && !swiper.params.loop && !swiper.params.rewind) return;\n swiper.slideNext();\n emit('navigationNext');\n }\n function init() {\n const params = swiper.params.navigation;\n swiper.params.navigation = createElementIfNotDefined(swiper, swiper.originalParams.navigation, swiper.params.navigation, {\n nextEl: 'swiper-button-next',\n prevEl: 'swiper-button-prev'\n });\n if (!(params.nextEl || params.prevEl)) return;\n let nextEl = getEl(params.nextEl);\n let prevEl = getEl(params.prevEl);\n Object.assign(swiper.navigation, {\n nextEl,\n prevEl\n });\n nextEl = makeElementsArray(nextEl);\n prevEl = makeElementsArray(prevEl);\n const initButton = (el, dir) => {\n if (el) {\n if (params.addIcons && el.matches('.swiper-button-next,.swiper-button-prev') && !el.querySelector('svg')) {\n const tempEl = document.createElement('div');\n setInnerHTML(tempEl, arrowSvg);\n el.appendChild(tempEl.querySelector('svg'));\n tempEl.remove();\n }\n el.addEventListener('click', dir === 'next' ? onNextClick : onPrevClick);\n }\n if (!swiper.enabled && el) {\n el.classList.add(...params.lockClass.split(' '));\n }\n };\n nextEl.forEach(el => initButton(el, 'next'));\n prevEl.forEach(el => initButton(el, 'prev'));\n }\n function destroy() {\n let {\n nextEl,\n prevEl\n } = swiper.navigation;\n nextEl = makeElementsArray(nextEl);\n prevEl = makeElementsArray(prevEl);\n const destroyButton = (el, dir) => {\n el.removeEventListener('click', dir === 'next' ? onNextClick : onPrevClick);\n el.classList.remove(...swiper.params.navigation.disabledClass.split(' '));\n };\n nextEl.forEach(el => destroyButton(el, 'next'));\n prevEl.forEach(el => destroyButton(el, 'prev'));\n }\n on('init', () => {\n if (swiper.params.navigation.enabled === false) {\n // eslint-disable-next-line\n disable();\n } else {\n init();\n update();\n }\n });\n on('toEdge fromEdge lock unlock', () => {\n update();\n });\n on('destroy', () => {\n destroy();\n });\n on('enable disable', () => {\n let {\n nextEl,\n prevEl\n } = swiper.navigation;\n nextEl = makeElementsArray(nextEl);\n prevEl = makeElementsArray(prevEl);\n if (swiper.enabled) {\n update();\n return;\n }\n [...nextEl, ...prevEl].filter(el => !!el).forEach(el => el.classList.add(swiper.params.navigation.lockClass));\n });\n on('click', (_s, e) => {\n let {\n nextEl,\n prevEl\n } = swiper.navigation;\n nextEl = makeElementsArray(nextEl);\n prevEl = makeElementsArray(prevEl);\n const targetEl = e.target;\n let targetIsButton = prevEl.includes(targetEl) || nextEl.includes(targetEl);\n if (swiper.isElement && !targetIsButton) {\n const path = e.path || e.composedPath && e.composedPath();\n if (path) {\n targetIsButton = path.find(pathEl => nextEl.includes(pathEl) || prevEl.includes(pathEl));\n }\n }\n if (swiper.params.navigation.hideOnClick && !targetIsButton) {\n if (swiper.pagination && swiper.params.pagination && swiper.params.pagination.clickable && (swiper.pagination.el === targetEl || swiper.pagination.el.contains(targetEl))) return;\n let isHidden;\n if (nextEl.length) {\n isHidden = nextEl[0].classList.contains(swiper.params.navigation.hiddenClass);\n } else if (prevEl.length) {\n isHidden = prevEl[0].classList.contains(swiper.params.navigation.hiddenClass);\n }\n if (isHidden === true) {\n emit('navigationShow');\n } else {\n emit('navigationHide');\n }\n [...nextEl, ...prevEl].filter(el => !!el).forEach(el => el.classList.toggle(swiper.params.navigation.hiddenClass));\n }\n });\n const enable = () => {\n swiper.el.classList.remove(...swiper.params.navigation.navigationDisabledClass.split(' '));\n init();\n update();\n };\n const disable = () => {\n swiper.el.classList.add(...swiper.params.navigation.navigationDisabledClass.split(' '));\n destroy();\n };\n Object.assign(swiper.navigation, {\n enable,\n disable,\n update,\n init,\n destroy\n });\n}\n\nexport { Navigation as default };\n","function classesToSelector(classes = '') {\n // Escape all CSS selector special characters\n return `.${classes.trim().replace(/([\\.:!+\\/()[\\]#>~*^$|=,'\"@{}\\\\])/g, '\\\\$1') // eslint-disable-line\n .replace(/ /g, '.')}`;\n}\n\nexport { classesToSelector as c };\n","import { c as classesToSelector } from '../shared/classes-to-selector.mjs';\nimport { c as createElementIfNotDefined } from '../shared/create-element-if-not-defined.mjs';\nimport { m as makeElementsArray, i as elementOuterSize, j as elementIndex, s as setInnerHTML, d as elementParents } from '../shared/utils.mjs';\n\nfunction Pagination({\n swiper,\n extendParams,\n on,\n emit\n}) {\n const pfx = 'swiper-pagination';\n extendParams({\n pagination: {\n el: null,\n bulletElement: 'span',\n clickable: false,\n hideOnClick: false,\n renderBullet: null,\n renderProgressbar: null,\n renderFraction: null,\n renderCustom: null,\n progressbarOpposite: false,\n type: 'bullets',\n // 'bullets' or 'progressbar' or 'fraction' or 'custom'\n dynamicBullets: false,\n dynamicMainBullets: 1,\n formatFractionCurrent: number => number,\n formatFractionTotal: number => number,\n bulletClass: `${pfx}-bullet`,\n bulletActiveClass: `${pfx}-bullet-active`,\n modifierClass: `${pfx}-`,\n currentClass: `${pfx}-current`,\n totalClass: `${pfx}-total`,\n hiddenClass: `${pfx}-hidden`,\n progressbarFillClass: `${pfx}-progressbar-fill`,\n progressbarOppositeClass: `${pfx}-progressbar-opposite`,\n clickableClass: `${pfx}-clickable`,\n lockClass: `${pfx}-lock`,\n horizontalClass: `${pfx}-horizontal`,\n verticalClass: `${pfx}-vertical`,\n paginationDisabledClass: `${pfx}-disabled`\n }\n });\n swiper.pagination = {\n el: null,\n bullets: []\n };\n let bulletSize;\n let dynamicBulletIndex = 0;\n function isPaginationDisabled() {\n return !swiper.params.pagination.el || !swiper.pagination.el || Array.isArray(swiper.pagination.el) && swiper.pagination.el.length === 0;\n }\n function setSideBullets(bulletEl, position) {\n const {\n bulletActiveClass\n } = swiper.params.pagination;\n if (!bulletEl) return;\n bulletEl = bulletEl[`${position === 'prev' ? 'previous' : 'next'}ElementSibling`];\n if (bulletEl) {\n bulletEl.classList.add(`${bulletActiveClass}-${position}`);\n bulletEl = bulletEl[`${position === 'prev' ? 'previous' : 'next'}ElementSibling`];\n if (bulletEl) {\n bulletEl.classList.add(`${bulletActiveClass}-${position}-${position}`);\n }\n }\n }\n function getMoveDirection(prevIndex, nextIndex, length) {\n prevIndex = prevIndex % length;\n nextIndex = nextIndex % length;\n if (nextIndex === prevIndex + 1) {\n return 'next';\n } else if (nextIndex === prevIndex - 1) {\n return 'previous';\n }\n return;\n }\n function onBulletClick(e) {\n const bulletEl = e.target.closest(classesToSelector(swiper.params.pagination.bulletClass));\n if (!bulletEl) {\n return;\n }\n e.preventDefault();\n const index = elementIndex(bulletEl) * swiper.params.slidesPerGroup;\n if (swiper.params.loop) {\n if (swiper.realIndex === index) return;\n const moveDirection = getMoveDirection(swiper.realIndex, index, swiper.slides.length);\n if (moveDirection === 'next') {\n swiper.slideNext();\n } else if (moveDirection === 'previous') {\n swiper.slidePrev();\n } else {\n swiper.slideToLoop(index);\n }\n } else {\n swiper.slideTo(index);\n }\n }\n function update() {\n // Render || Update Pagination bullets/items\n const rtl = swiper.rtl;\n const params = swiper.params.pagination;\n if (isPaginationDisabled()) return;\n let el = swiper.pagination.el;\n el = makeElementsArray(el);\n // Current/Total\n let current;\n let previousIndex;\n const slidesLength = swiper.virtual && swiper.params.virtual.enabled ? swiper.virtual.slides.length : swiper.slides.length;\n const total = swiper.params.loop ? Math.ceil(slidesLength / swiper.params.slidesPerGroup) : swiper.snapGrid.length;\n if (swiper.params.loop) {\n previousIndex = swiper.previousRealIndex || 0;\n current = swiper.params.slidesPerGroup > 1 ? Math.floor(swiper.realIndex / swiper.params.slidesPerGroup) : swiper.realIndex;\n } else if (typeof swiper.snapIndex !== 'undefined') {\n current = swiper.snapIndex;\n previousIndex = swiper.previousSnapIndex;\n } else {\n previousIndex = swiper.previousIndex || 0;\n current = swiper.activeIndex || 0;\n }\n // Types\n if (params.type === 'bullets' && swiper.pagination.bullets && swiper.pagination.bullets.length > 0) {\n const bullets = swiper.pagination.bullets;\n let firstIndex;\n let lastIndex;\n let midIndex;\n if (params.dynamicBullets) {\n bulletSize = elementOuterSize(bullets[0], swiper.isHorizontal() ? 'width' : 'height', true);\n el.forEach(subEl => {\n subEl.style[swiper.isHorizontal() ? 'width' : 'height'] = `${bulletSize * (params.dynamicMainBullets + 4)}px`;\n });\n if (params.dynamicMainBullets > 1 && previousIndex !== undefined) {\n dynamicBulletIndex += current - (previousIndex || 0);\n if (dynamicBulletIndex > params.dynamicMainBullets - 1) {\n dynamicBulletIndex = params.dynamicMainBullets - 1;\n } else if (dynamicBulletIndex < 0) {\n dynamicBulletIndex = 0;\n }\n }\n firstIndex = Math.max(current - dynamicBulletIndex, 0);\n lastIndex = firstIndex + (Math.min(bullets.length, params.dynamicMainBullets) - 1);\n midIndex = (lastIndex + firstIndex) / 2;\n }\n bullets.forEach(bulletEl => {\n const classesToRemove = [...['', '-next', '-next-next', '-prev', '-prev-prev', '-main'].map(suffix => `${params.bulletActiveClass}${suffix}`)].map(s => typeof s === 'string' && s.includes(' ') ? s.split(' ') : s).flat();\n bulletEl.classList.remove(...classesToRemove);\n });\n if (el.length > 1) {\n bullets.forEach(bullet => {\n const bulletIndex = elementIndex(bullet);\n if (bulletIndex === current) {\n bullet.classList.add(...params.bulletActiveClass.split(' '));\n } else if (swiper.isElement) {\n bullet.setAttribute('part', 'bullet');\n }\n if (params.dynamicBullets) {\n if (bulletIndex >= firstIndex && bulletIndex <= lastIndex) {\n bullet.classList.add(...`${params.bulletActiveClass}-main`.split(' '));\n }\n if (bulletIndex === firstIndex) {\n setSideBullets(bullet, 'prev');\n }\n if (bulletIndex === lastIndex) {\n setSideBullets(bullet, 'next');\n }\n }\n });\n } else {\n const bullet = bullets[current];\n if (bullet) {\n bullet.classList.add(...params.bulletActiveClass.split(' '));\n }\n if (swiper.isElement) {\n bullets.forEach((bulletEl, bulletIndex) => {\n bulletEl.setAttribute('part', bulletIndex === current ? 'bullet-active' : 'bullet');\n });\n }\n if (params.dynamicBullets) {\n const firstDisplayedBullet = bullets[firstIndex];\n const lastDisplayedBullet = bullets[lastIndex];\n for (let i = firstIndex; i <= lastIndex; i += 1) {\n if (bullets[i]) {\n bullets[i].classList.add(...`${params.bulletActiveClass}-main`.split(' '));\n }\n }\n setSideBullets(firstDisplayedBullet, 'prev');\n setSideBullets(lastDisplayedBullet, 'next');\n }\n }\n if (params.dynamicBullets) {\n const dynamicBulletsLength = Math.min(bullets.length, params.dynamicMainBullets + 4);\n const bulletsOffset = (bulletSize * dynamicBulletsLength - bulletSize) / 2 - midIndex * bulletSize;\n const offsetProp = rtl ? 'right' : 'left';\n bullets.forEach(bullet => {\n bullet.style[swiper.isHorizontal() ? offsetProp : 'top'] = `${bulletsOffset}px`;\n });\n }\n }\n el.forEach((subEl, subElIndex) => {\n if (params.type === 'fraction') {\n subEl.querySelectorAll(classesToSelector(params.currentClass)).forEach(fractionEl => {\n fractionEl.textContent = params.formatFractionCurrent(current + 1);\n });\n subEl.querySelectorAll(classesToSelector(params.totalClass)).forEach(totalEl => {\n totalEl.textContent = params.formatFractionTotal(total);\n });\n }\n if (params.type === 'progressbar') {\n let progressbarDirection;\n if (params.progressbarOpposite) {\n progressbarDirection = swiper.isHorizontal() ? 'vertical' : 'horizontal';\n } else {\n progressbarDirection = swiper.isHorizontal() ? 'horizontal' : 'vertical';\n }\n const scale = (current + 1) / total;\n let scaleX = 1;\n let scaleY = 1;\n if (progressbarDirection === 'horizontal') {\n scaleX = scale;\n } else {\n scaleY = scale;\n }\n subEl.querySelectorAll(classesToSelector(params.progressbarFillClass)).forEach(progressEl => {\n progressEl.style.transform = `translate3d(0,0,0) scaleX(${scaleX}) scaleY(${scaleY})`;\n progressEl.style.transitionDuration = `${swiper.params.speed}ms`;\n });\n }\n if (params.type === 'custom' && params.renderCustom) {\n setInnerHTML(subEl, params.renderCustom(swiper, current + 1, total));\n if (subElIndex === 0) emit('paginationRender', subEl);\n } else {\n if (subElIndex === 0) emit('paginationRender', subEl);\n emit('paginationUpdate', subEl);\n }\n if (swiper.params.watchOverflow && swiper.enabled) {\n subEl.classList[swiper.isLocked ? 'add' : 'remove'](params.lockClass);\n }\n });\n }\n function render() {\n // Render Container\n const params = swiper.params.pagination;\n if (isPaginationDisabled()) return;\n const slidesLength = swiper.virtual && swiper.params.virtual.enabled ? swiper.virtual.slides.length : swiper.grid && swiper.params.grid.rows > 1 ? swiper.slides.length / Math.ceil(swiper.params.grid.rows) : swiper.slides.length;\n let el = swiper.pagination.el;\n el = makeElementsArray(el);\n let paginationHTML = '';\n if (params.type === 'bullets') {\n let numberOfBullets = swiper.params.loop ? Math.ceil(slidesLength / swiper.params.slidesPerGroup) : swiper.snapGrid.length;\n if (swiper.params.freeMode && swiper.params.freeMode.enabled && numberOfBullets > slidesLength) {\n numberOfBullets = slidesLength;\n }\n for (let i = 0; i < numberOfBullets; i += 1) {\n if (params.renderBullet) {\n paginationHTML += params.renderBullet.call(swiper, i, params.bulletClass);\n } else {\n // prettier-ignore\n paginationHTML += `<${params.bulletElement} ${swiper.isElement ? 'part=\"bullet\"' : ''} class=\"${params.bulletClass}\"></${params.bulletElement}>`;\n }\n }\n }\n if (params.type === 'fraction') {\n if (params.renderFraction) {\n paginationHTML = params.renderFraction.call(swiper, params.currentClass, params.totalClass);\n } else {\n paginationHTML = `<span class=\"${params.currentClass}\"></span>` + ' / ' + `<span class=\"${params.totalClass}\"></span>`;\n }\n }\n if (params.type === 'progressbar') {\n if (params.renderProgressbar) {\n paginationHTML = params.renderProgressbar.call(swiper, params.progressbarFillClass);\n } else {\n paginationHTML = `<span class=\"${params.progressbarFillClass}\"></span>`;\n }\n }\n swiper.pagination.bullets = [];\n el.forEach(subEl => {\n if (params.type !== 'custom') {\n setInnerHTML(subEl, paginationHTML || '');\n }\n if (params.type === 'bullets') {\n swiper.pagination.bullets.push(...subEl.querySelectorAll(classesToSelector(params.bulletClass)));\n }\n });\n if (params.type !== 'custom') {\n emit('paginationRender', el[0]);\n }\n }\n function init() {\n swiper.params.pagination = createElementIfNotDefined(swiper, swiper.originalParams.pagination, swiper.params.pagination, {\n el: 'swiper-pagination'\n });\n const params = swiper.params.pagination;\n if (!params.el) return;\n let el;\n if (typeof params.el === 'string' && swiper.isElement) {\n el = swiper.el.querySelector(params.el);\n }\n if (!el && typeof params.el === 'string') {\n el = [...document.querySelectorAll(params.el)];\n }\n if (!el) {\n el = params.el;\n }\n if (!el || el.length === 0) return;\n if (swiper.params.uniqueNavElements && typeof params.el === 'string' && Array.isArray(el) && el.length > 1) {\n el = [...swiper.el.querySelectorAll(params.el)];\n // check if it belongs to another nested Swiper\n if (el.length > 1) {\n el = el.find(subEl => {\n if (elementParents(subEl, '.swiper')[0] !== swiper.el) return false;\n return true;\n });\n }\n }\n if (Array.isArray(el) && el.length === 1) el = el[0];\n Object.assign(swiper.pagination, {\n el\n });\n el = makeElementsArray(el);\n el.forEach(subEl => {\n if (params.type === 'bullets' && params.clickable) {\n subEl.classList.add(...(params.clickableClass || '').split(' '));\n }\n subEl.classList.add(params.modifierClass + params.type);\n subEl.classList.add(swiper.isHorizontal() ? params.horizontalClass : params.verticalClass);\n if (params.type === 'bullets' && params.dynamicBullets) {\n subEl.classList.add(`${params.modifierClass}${params.type}-dynamic`);\n dynamicBulletIndex = 0;\n if (params.dynamicMainBullets < 1) {\n params.dynamicMainBullets = 1;\n }\n }\n if (params.type === 'progressbar' && params.progressbarOpposite) {\n subEl.classList.add(params.progressbarOppositeClass);\n }\n if (params.clickable) {\n subEl.addEventListener('click', onBulletClick);\n }\n if (!swiper.enabled) {\n subEl.classList.add(params.lockClass);\n }\n });\n }\n function destroy() {\n const params = swiper.params.pagination;\n if (isPaginationDisabled()) return;\n let el = swiper.pagination.el;\n if (el) {\n el = makeElementsArray(el);\n el.forEach(subEl => {\n subEl.classList.remove(params.hiddenClass);\n subEl.classList.remove(params.modifierClass + params.type);\n subEl.classList.remove(swiper.isHorizontal() ? params.horizontalClass : params.verticalClass);\n if (params.clickable) {\n subEl.classList.remove(...(params.clickableClass || '').split(' '));\n subEl.removeEventListener('click', onBulletClick);\n }\n });\n }\n if (swiper.pagination.bullets) swiper.pagination.bullets.forEach(subEl => subEl.classList.remove(...params.bulletActiveClass.split(' ')));\n }\n on('changeDirection', () => {\n if (!swiper.pagination || !swiper.pagination.el) return;\n const params = swiper.params.pagination;\n let {\n el\n } = swiper.pagination;\n el = makeElementsArray(el);\n el.forEach(subEl => {\n subEl.classList.remove(params.horizontalClass, params.verticalClass);\n subEl.classList.add(swiper.isHorizontal() ? params.horizontalClass : params.verticalClass);\n });\n });\n on('init', () => {\n if (swiper.params.pagination.enabled === false) {\n // eslint-disable-next-line\n disable();\n } else {\n init();\n render();\n update();\n }\n });\n on('activeIndexChange', () => {\n if (typeof swiper.snapIndex === 'undefined') {\n update();\n }\n });\n on('snapIndexChange', () => {\n update();\n });\n on('snapGridLengthChange', () => {\n render();\n update();\n });\n on('destroy', () => {\n destroy();\n });\n on('enable disable', () => {\n let {\n el\n } = swiper.pagination;\n if (el) {\n el = makeElementsArray(el);\n el.forEach(subEl => subEl.classList[swiper.enabled ? 'remove' : 'add'](swiper.params.pagination.lockClass));\n }\n });\n on('lock unlock', () => {\n update();\n });\n on('click', (_s, e) => {\n const targetEl = e.target;\n const el = makeElementsArray(swiper.pagination.el);\n if (swiper.params.pagination.el && swiper.params.pagination.hideOnClick && el && el.length > 0 && !targetEl.classList.contains(swiper.params.pagination.bulletClass)) {\n if (swiper.navigation && (swiper.navigation.nextEl && targetEl === swiper.navigation.nextEl || swiper.navigation.prevEl && targetEl === swiper.navigation.prevEl)) return;\n const isHidden = el[0].classList.contains(swiper.params.pagination.hiddenClass);\n if (isHidden === true) {\n emit('paginationShow');\n } else {\n emit('paginationHide');\n }\n el.forEach(subEl => subEl.classList.toggle(swiper.params.pagination.hiddenClass));\n }\n });\n const enable = () => {\n swiper.el.classList.remove(swiper.params.pagination.paginationDisabledClass);\n let {\n el\n } = swiper.pagination;\n if (el) {\n el = makeElementsArray(el);\n el.forEach(subEl => subEl.classList.remove(swiper.params.pagination.paginationDisabledClass));\n }\n init();\n render();\n update();\n };\n const disable = () => {\n swiper.el.classList.add(swiper.params.pagination.paginationDisabledClass);\n let {\n el\n } = swiper.pagination;\n if (el) {\n el = makeElementsArray(el);\n el.forEach(subEl => subEl.classList.add(swiper.params.pagination.paginationDisabledClass));\n }\n destroy();\n };\n Object.assign(swiper.pagination, {\n enable,\n disable,\n render,\n update,\n init,\n destroy\n });\n}\n\nexport { Pagination as default };\n","import { g as getDocument } from '../shared/ssr-window.esm.mjs';\n\n/* eslint no-underscore-dangle: \"off\" */\n/* eslint no-use-before-define: \"off\" */\nfunction Autoplay({\n swiper,\n extendParams,\n on,\n emit,\n params\n}) {\n swiper.autoplay = {\n running: false,\n paused: false,\n timeLeft: 0\n };\n extendParams({\n autoplay: {\n enabled: false,\n delay: 3000,\n waitForTransition: true,\n disableOnInteraction: false,\n stopOnLastSlide: false,\n reverseDirection: false,\n pauseOnMouseEnter: false\n }\n });\n let timeout;\n let raf;\n let autoplayDelayTotal = params && params.autoplay ? params.autoplay.delay : 3000;\n let autoplayDelayCurrent = params && params.autoplay ? params.autoplay.delay : 3000;\n let autoplayTimeLeft;\n let autoplayStartTime = new Date().getTime();\n let wasPaused;\n let isTouched;\n let pausedByTouch;\n let touchStartTimeout;\n let pausedByInteraction;\n let pausedByPointerEnter;\n function onTransitionEnd(e) {\n if (!swiper || swiper.destroyed || !swiper.wrapperEl) return;\n if (e.target !== swiper.wrapperEl) return;\n swiper.wrapperEl.removeEventListener('transitionend', onTransitionEnd);\n if (pausedByPointerEnter || e.detail && e.detail.bySwiperTouchMove) {\n return;\n }\n resume();\n }\n const calcTimeLeft = () => {\n if (swiper.destroyed || !swiper.autoplay.running) return;\n if (swiper.autoplay.paused) {\n wasPaused = true;\n } else if (wasPaused) {\n autoplayDelayCurrent = autoplayTimeLeft;\n wasPaused = false;\n }\n const timeLeft = swiper.autoplay.paused ? autoplayTimeLeft : autoplayStartTime + autoplayDelayCurrent - new Date().getTime();\n swiper.autoplay.timeLeft = timeLeft;\n emit('autoplayTimeLeft', timeLeft, timeLeft / autoplayDelayTotal);\n raf = requestAnimationFrame(() => {\n calcTimeLeft();\n });\n };\n const getSlideDelay = () => {\n let activeSlideEl;\n if (swiper.virtual && swiper.params.virtual.enabled) {\n activeSlideEl = swiper.slides.find(slideEl => slideEl.classList.contains('swiper-slide-active'));\n } else {\n activeSlideEl = swiper.slides[swiper.activeIndex];\n }\n if (!activeSlideEl) return undefined;\n const currentSlideDelay = parseInt(activeSlideEl.getAttribute('data-swiper-autoplay'), 10);\n return currentSlideDelay;\n };\n const getTotalDelay = () => {\n let totalDelay = swiper.params.autoplay.delay;\n const currentSlideDelay = getSlideDelay();\n if (!Number.isNaN(currentSlideDelay) && currentSlideDelay > 0) {\n totalDelay = currentSlideDelay;\n }\n return totalDelay;\n };\n const run = delayForce => {\n if (swiper.destroyed || !swiper.autoplay.running) return;\n cancelAnimationFrame(raf);\n calcTimeLeft();\n let delay = delayForce;\n if (typeof delay === 'undefined') {\n delay = getTotalDelay();\n autoplayDelayTotal = delay;\n autoplayDelayCurrent = delay;\n }\n autoplayTimeLeft = delay;\n const speed = swiper.params.speed;\n const proceed = () => {\n if (!swiper || swiper.destroyed) return;\n if (swiper.params.autoplay.reverseDirection) {\n if (!swiper.isBeginning || swiper.params.loop || swiper.params.rewind) {\n swiper.slidePrev(speed, true, true);\n emit('autoplay');\n } else if (!swiper.params.autoplay.stopOnLastSlide) {\n swiper.slideTo(swiper.slides.length - 1, speed, true, true);\n emit('autoplay');\n }\n } else {\n if (!swiper.isEnd || swiper.params.loop || swiper.params.rewind) {\n swiper.slideNext(speed, true, true);\n emit('autoplay');\n } else if (!swiper.params.autoplay.stopOnLastSlide) {\n swiper.slideTo(0, speed, true, true);\n emit('autoplay');\n }\n }\n if (swiper.params.cssMode) {\n autoplayStartTime = new Date().getTime();\n requestAnimationFrame(() => {\n run();\n });\n }\n };\n if (delay > 0) {\n clearTimeout(timeout);\n timeout = setTimeout(() => {\n proceed();\n }, delay);\n } else {\n requestAnimationFrame(() => {\n proceed();\n });\n }\n\n // eslint-disable-next-line\n return delay;\n };\n const start = () => {\n autoplayStartTime = new Date().getTime();\n swiper.autoplay.running = true;\n run();\n emit('autoplayStart');\n };\n const stop = () => {\n swiper.autoplay.running = false;\n clearTimeout(timeout);\n cancelAnimationFrame(raf);\n emit('autoplayStop');\n };\n const pause = (internal, reset) => {\n if (swiper.destroyed || !swiper.autoplay.running) return;\n clearTimeout(timeout);\n if (!internal) {\n pausedByInteraction = true;\n }\n const proceed = () => {\n emit('autoplayPause');\n if (swiper.params.autoplay.waitForTransition) {\n swiper.wrapperEl.addEventListener('transitionend', onTransitionEnd);\n } else {\n resume();\n }\n };\n swiper.autoplay.paused = true;\n if (reset) {\n proceed();\n return;\n }\n const delay = autoplayTimeLeft || swiper.params.autoplay.delay;\n autoplayTimeLeft = delay - (new Date().getTime() - autoplayStartTime);\n if (swiper.isEnd && autoplayTimeLeft < 0 && !swiper.params.loop) return;\n if (autoplayTimeLeft < 0) autoplayTimeLeft = 0;\n proceed();\n };\n const resume = () => {\n if (swiper.isEnd && autoplayTimeLeft < 0 && !swiper.params.loop || swiper.destroyed || !swiper.autoplay.running) return;\n autoplayStartTime = new Date().getTime();\n if (pausedByInteraction) {\n pausedByInteraction = false;\n run(autoplayTimeLeft);\n } else {\n run();\n }\n swiper.autoplay.paused = false;\n emit('autoplayResume');\n };\n const onVisibilityChange = () => {\n if (swiper.destroyed || !swiper.autoplay.running) return;\n const document = getDocument();\n if (document.visibilityState === 'hidden') {\n pausedByInteraction = true;\n pause(true);\n }\n if (document.visibilityState === 'visible') {\n resume();\n }\n };\n const onPointerEnter = e => {\n if (e.pointerType !== 'mouse') return;\n pausedByInteraction = true;\n pausedByPointerEnter = true;\n if (swiper.animating || swiper.autoplay.paused) return;\n pause(true);\n };\n const onPointerLeave = e => {\n if (e.pointerType !== 'mouse') return;\n pausedByPointerEnter = false;\n if (swiper.autoplay.paused) {\n resume();\n }\n };\n const attachMouseEvents = () => {\n if (swiper.params.autoplay.pauseOnMouseEnter) {\n swiper.el.addEventListener('pointerenter', onPointerEnter);\n swiper.el.addEventListener('pointerleave', onPointerLeave);\n }\n };\n const detachMouseEvents = () => {\n if (swiper.el && typeof swiper.el !== 'string') {\n swiper.el.removeEventListener('pointerenter', onPointerEnter);\n swiper.el.removeEventListener('pointerleave', onPointerLeave);\n }\n };\n const attachDocumentEvents = () => {\n const document = getDocument();\n document.addEventListener('visibilitychange', onVisibilityChange);\n };\n const detachDocumentEvents = () => {\n const document = getDocument();\n document.removeEventListener('visibilitychange', onVisibilityChange);\n };\n on('init', () => {\n if (swiper.params.autoplay.enabled) {\n attachMouseEvents();\n attachDocumentEvents();\n start();\n }\n });\n on('destroy', () => {\n detachMouseEvents();\n detachDocumentEvents();\n if (swiper.autoplay.running) {\n stop();\n }\n });\n on('_freeModeStaticRelease', () => {\n if (pausedByTouch || pausedByInteraction) {\n resume();\n }\n });\n on('_freeModeNoMomentumRelease', () => {\n if (!swiper.params.autoplay.disableOnInteraction) {\n pause(true, true);\n } else {\n stop();\n }\n });\n on('beforeTransitionStart', (_s, speed, internal) => {\n if (swiper.destroyed || !swiper.autoplay.running) return;\n if (internal || !swiper.params.autoplay.disableOnInteraction) {\n pause(true, true);\n } else {\n stop();\n }\n });\n on('sliderFirstMove', () => {\n if (swiper.destroyed || !swiper.autoplay.running) return;\n if (swiper.params.autoplay.disableOnInteraction) {\n stop();\n return;\n }\n isTouched = true;\n pausedByTouch = false;\n pausedByInteraction = false;\n touchStartTimeout = setTimeout(() => {\n pausedByInteraction = true;\n pausedByTouch = true;\n pause(true);\n }, 200);\n });\n on('touchEnd', () => {\n if (swiper.destroyed || !swiper.autoplay.running || !isTouched) return;\n clearTimeout(touchStartTimeout);\n clearTimeout(timeout);\n if (swiper.params.autoplay.disableOnInteraction) {\n pausedByTouch = false;\n isTouched = false;\n return;\n }\n if (pausedByTouch && swiper.params.cssMode) resume();\n pausedByTouch = false;\n isTouched = false;\n });\n on('slideChange', () => {\n if (swiper.destroyed || !swiper.autoplay.running) return;\n if (swiper.autoplay.paused) {\n autoplayTimeLeft = getTotalDelay();\n autoplayDelayTotal = getTotalDelay();\n }\n });\n Object.assign(swiper.autoplay, {\n start,\n stop,\n pause,\n resume\n });\n}\n\nexport { Autoplay as default };\n","'use client';\n\nimport { Swiper, SwiperSlide } from 'swiper/react';\nimport 'swiper/css';\nimport 'swiper/css/pagination';\nimport 'swiper/css/navigation';\n\nimport { Autoplay, Navigation, Pagination } from 'swiper/modules';\n\ninterface CarouselProps {\n images: string[];\n autoPlay?: false | number;\n}\n\nexport const Carousel = ({ images, autoPlay = false }: CarouselProps) => {\n if (images.length === 0) {\n return null;\n }\n\n const swipers = images.map((image) => (\n <SwiperSlide>\n <img src={image} />\n </SwiperSlide>\n ));\n\n return (\n <Swiper\n spaceBetween={30}\n centeredSlides={true}\n autoplay={\n typeof autoPlay === 'number'\n ? {\n delay: autoPlay,\n disableOnInteraction: false,\n }\n : undefined\n }\n pagination={{\n clickable: true,\n }}\n navigation={true}\n modules={[Autoplay, Pagination, Navigation]}\n className=\"swiper\"\n >\n {swipers}\n </Swiper>\n );\n};\n","import { useRef, useState } from 'react';\nimport type { ReactNode, KeyboardEvent } from 'react';\nimport { Input } from '../common/Input/Input';\n\nexport interface CurrencyOption {\n code: string;\n symbol: string;\n label: string;\n}\n\nexport interface LocaleOption {\n code: string;\n label: string;\n flag?: string;\n}\n\nexport interface HeaderProps {\n /** Logo — ReactNode (image, SVG, text) */\n logo?: ReactNode;\n /** Search placeholder */\n searchPlaceholder?: string;\n onSearch?: (query: string) => void;\n /** Cart */\n cartItemCount?: number;\n onCartClick?: () => void;\n /** Customer */\n isLoggedIn?: boolean;\n customerName?: string;\n onCustomerClick?: () => void;\n /** Currency */\n currencies?: CurrencyOption[];\n selectedCurrency?: string;\n onCurrencyChange?: (code: string) => void;\n /** Locale / eshop */\n locales?: LocaleOption[];\n selectedLocale?: string;\n onLocaleChange?: (code: string) => void;\n /** Extra right slot */\n rightSlot?: ReactNode;\n}\n\n// ─── Small internal dropdown ────────────────────────────────────────────────\n\ninterface DropdownProps<T extends { label: string }> {\n trigger: ReactNode;\n items: T[];\n onSelect: (item: T) => void;\n getKey: (item: T) => string;\n renderItem?: (item: T) => ReactNode;\n}\n\nfunction Dropdown<T extends { label: string }>({\n trigger,\n items,\n onSelect,\n getKey,\n renderItem,\n}: DropdownProps<T>) {\n const [open, setOpen] = useState(false);\n const ref = useRef<HTMLDivElement>(null);\n\n const close = () => setOpen(false);\n\n // Close on outside click\n const handleBlur = (e: React.FocusEvent) => {\n if (!ref.current?.contains(e.relatedTarget as Node)) close();\n };\n\n const onKey = (e: KeyboardEvent) => {\n if (e.key === 'Escape') close();\n };\n\n return (\n <div ref={ref} className=\"relative\" onBlur={handleBlur} onKeyDown={onKey}>\n <div\n role=\"button\"\n tabIndex={0}\n onClick={() => setOpen((v) => !v)}\n onKeyDown={(e) => e.key === 'Enter' && setOpen((v) => !v)}\n className=\"cursor-pointer\"\n >\n {trigger}\n </div>\n {open && (\n <ul\n role=\"menu\"\n className=\"absolute right-0 top-full mt-1 z-50 min-w-28 bg-white rounded-lg shadow-lg border border-gray-100 py-1 text-sm\"\n >\n {items.map((item) => (\n <li key={getKey(item)} role=\"none\">\n <button\n role=\"menuitem\"\n className=\"w-full px-3 py-1.5 text-left hover:bg-gray-50 text-gray-700 whitespace-nowrap\"\n onClick={() => {\n onSelect(item);\n close();\n }}\n >\n {renderItem ? renderItem(item) : item.label}\n </button>\n </li>\n ))}\n </ul>\n )}\n </div>\n );\n}\n\n// ─── Search icon ─────────────────────────────────────────────────────────────\n\nfunction SearchIcon() {\n return (\n <svg\n xmlns=\"http://www.w3.org/2000/svg\"\n fill=\"none\"\n viewBox=\"0 0 24 24\"\n strokeWidth={1.5}\n stroke=\"currentColor\"\n className=\"w-4 h-4\"\n >\n <path\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n d=\"M21 21l-5.197-5.197m0 0A7.5 7.5 0 105.196 15.803a7.5 7.5 0 0010.607 10.607z\"\n />\n </svg>\n );\n}\n\n// ─── Header ──────────────────────────────────────────────────────────────────\n\nexport function Header({\n logo,\n searchPlaceholder = 'Hledat produkty…',\n onSearch,\n cartItemCount = 0,\n onCartClick,\n isLoggedIn = false,\n customerName,\n onCustomerClick,\n currencies = [],\n selectedCurrency,\n onCurrencyChange,\n locales = [],\n selectedLocale,\n onLocaleChange,\n rightSlot,\n}: HeaderProps) {\n const [searchQuery, setSearchQuery] = useState('');\n\n const activeCurrency = currencies.find((c) => c.code === selectedCurrency);\n const activeLocale = locales.find((l) => l.code === selectedLocale);\n\n const handleSearchKey = (e: KeyboardEvent<HTMLInputElement>) => {\n if (e.key === 'Enter') onSearch?.(searchQuery);\n };\n\n return (\n <header className=\"bg-white border-b border-gray-200 sticky top-0 z-40\">\n <div className=\"max-w-7xl mx-auto px-4 h-16 flex items-center gap-4\">\n {/* Logo */}\n <div className=\"shrink-0\">\n {logo ?? (\n <span className=\"text-xl font-bold text-primary-600 tracking-tight\">\n shopito\n </span>\n )}\n </div>\n\n {/* Search */}\n <div className=\"flex-1 max-w-xl\">\n <Input\n placeholder={searchPlaceholder}\n value={searchQuery}\n onChange={(e) => setSearchQuery(e.target.value)}\n onKeyDown={handleSearchKey}\n leftIcon={<SearchIcon />}\n rightIcon={\n searchQuery ? (\n <button\n onClick={() => {\n setSearchQuery('');\n onSearch?.('');\n }}\n className=\"hover:text-gray-600 transition-colors\"\n aria-label=\"Clear search\"\n >\n <svg\n xmlns=\"http://www.w3.org/2000/svg\"\n fill=\"none\"\n viewBox=\"0 0 24 24\"\n strokeWidth={2}\n stroke=\"currentColor\"\n className=\"w-3.5 h-3.5\"\n >\n <path\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n d=\"M6 18L18 6M6 6l12 12\"\n />\n </svg>\n </button>\n ) : undefined\n }\n />\n </div>\n\n {/* Right controls */}\n <div className=\"flex items-center gap-1 shrink-0 ml-auto\">\n {/* Currency switcher */}\n {currencies.length > 0 && (\n <Dropdown\n trigger={\n <button className=\"flex items-center gap-1 px-2 py-1.5 rounded-md text-sm text-gray-600 hover:bg-gray-50 transition-colors font-medium\">\n <span>{activeCurrency?.symbol ?? selectedCurrency}</span>\n <span className=\"text-xs text-gray-400\">\n {activeCurrency?.code ?? selectedCurrency}\n </span>\n <ChevronDown className=\"w-3 h-3 text-gray-400\" />\n </button>\n }\n items={currencies}\n getKey={(c) => c.code}\n onSelect={(c) => onCurrencyChange?.(c.code)}\n renderItem={(c) => (\n <span className=\"flex items-center gap-2\">\n <span className=\"w-6 text-center font-medium text-gray-500\">\n {c.symbol}\n </span>\n <span>{c.label}</span>\n </span>\n )}\n />\n )}\n\n {/* Locale switcher */}\n {locales.length > 0 && (\n <Dropdown\n trigger={\n <button className=\"flex items-center gap-1 px-2 py-1.5 rounded-md text-sm text-gray-600 hover:bg-gray-50 transition-colors\">\n {activeLocale?.flag && (\n <span className=\"text-base leading-none\">\n {activeLocale.flag}\n </span>\n )}\n <span className=\"font-medium uppercase\">\n {activeLocale?.code ?? selectedLocale}\n </span>\n <ChevronDown className=\"w-3 h-3 text-gray-400\" />\n </button>\n }\n items={locales}\n getKey={(l) => l.code}\n onSelect={(l) => onLocaleChange?.(l.code)}\n renderItem={(l) => (\n <span className=\"flex items-center gap-2\">\n {l.flag && <span className=\"text-base\">{l.flag}</span>}\n <span>{l.label}</span>\n </span>\n )}\n />\n )}\n\n {/* Divider */}\n {(currencies.length > 0 || locales.length > 0) && (\n <div className=\"w-px h-5 bg-gray-200 mx-1\" />\n )}\n\n {/* Customer button */}\n <button\n onClick={onCustomerClick}\n className=\"flex items-center gap-1.5 px-2.5 py-1.5 rounded-md text-sm text-gray-600 hover:bg-gray-50 transition-colors\"\n aria-label={isLoggedIn ? 'My account' : 'Sign in'}\n >\n {isLoggedIn ? (\n <>\n <div className=\"w-6 h-6 rounded-full bg-primary-600 text-white flex items-center justify-center text-xs font-bold\">\n {(customerName ?? 'U')[0].toUpperCase()}\n </div>\n {customerName && (\n <span className=\"hidden sm:block font-medium max-w-32 truncate\">\n {customerName}\n </span>\n )}\n </>\n ) : (\n <>\n <UserIcon className=\"w-5 h-5\" />\n <span className=\"hidden sm:block font-medium\">\n Přihlásit se\n </span>\n </>\n )}\n </button>\n\n {/* Cart */}\n <button\n onClick={onCartClick}\n className=\"relative flex items-center gap-1.5 px-2.5 py-1.5 rounded-md text-sm text-gray-600 hover:bg-gray-50 transition-colors\"\n aria-label={`Cart, ${cartItemCount} items`}\n >\n <CartIcon className=\"w-5 h-5\" />\n <span className=\"hidden sm:block font-medium\">Košík</span>\n {cartItemCount > 0 && (\n <span className=\"absolute -top-0.5 -right-0.5 min-w-4.5 h-4.5 flex items-center justify-center rounded-full bg-primary-600 text-white text-[10px] font-bold leading-none px-1\">\n {cartItemCount > 99 ? '99+' : cartItemCount}\n </span>\n )}\n </button>\n\n {rightSlot}\n </div>\n </div>\n </header>\n );\n}\n\n// ─── Icon helpers ─────────────────────────────────────────────────────────────\n\nfunction ChevronDown({ className }: { className?: string }) {\n return (\n <svg\n xmlns=\"http://www.w3.org/2000/svg\"\n fill=\"none\"\n viewBox=\"0 0 24 24\"\n strokeWidth={2}\n stroke=\"currentColor\"\n className={className}\n >\n <path\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n d=\"M19.5 8.25l-7.5 7.5-7.5-7.5\"\n />\n </svg>\n );\n}\n\nfunction UserIcon({ className }: { className?: string }) {\n return (\n <svg\n xmlns=\"http://www.w3.org/2000/svg\"\n fill=\"none\"\n viewBox=\"0 0 24 24\"\n strokeWidth={1.5}\n stroke=\"currentColor\"\n className={className}\n >\n <path\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n d=\"M15.75 6a3.75 3.75 0 11-7.5 0 3.75 3.75 0 017.5 0zM4.501 20.118a7.5 7.5 0 0114.998 0A17.933 17.933 0 0112 21.75c-2.676 0-5.216-.584-7.499-1.632z\"\n />\n </svg>\n );\n}\n\nfunction CartIcon({ className }: { className?: string }) {\n return (\n <svg\n xmlns=\"http://www.w3.org/2000/svg\"\n fill=\"none\"\n viewBox=\"0 0 24 24\"\n strokeWidth={1.5}\n stroke=\"currentColor\"\n className={className}\n >\n <path\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n d=\"M2.25 3h1.386c.51 0 .955.343 1.087.835l.383 1.437M7.5 14.25a3 3 0 00-3 3h15.75m-12.75-3h11.218c1.121-2.3 2.1-4.684 2.924-7.138a60.114 60.114 0 00-16.536-1.84M7.5 14.25L5.106 5.272M6 20.25a.75.75 0 11-1.5 0 .75.75 0 011.5 0zm12.75 0a.75.75 0 11-1.5 0 .75.75 0 011.5 0z\"\n />\n </svg>\n );\n}\n","import { useState } from 'react'\n\nexport interface Category {\n id: string\n label: string\n icon?: string\n count?: number\n children?: Category[]\n}\n\nexport interface CategoryTreeProps {\n categories: Category[]\n activeId?: string\n onSelect?: (category: Category) => void\n /** Show product counts */\n showCounts?: boolean\n /** All nodes expanded by default */\n defaultExpandAll?: boolean\n className?: string\n}\n\ninterface TreeNodeProps {\n node: Category\n activeId: string | undefined\n onSelect: (category: Category) => void\n showCounts: boolean\n depth: number\n defaultExpandAll: boolean\n}\n\nfunction TreeNode({\n node,\n activeId,\n onSelect,\n showCounts,\n depth,\n defaultExpandAll,\n}: TreeNodeProps) {\n const hasChildren = node.children && node.children.length > 0\n const [expanded, setExpanded] = useState(defaultExpandAll || isAncestorOf(node, activeId))\n const isActive = node.id === activeId\n\n return (\n <li>\n <div\n className={[\n 'group flex items-center gap-1.5 rounded-lg px-2 py-1.5 cursor-pointer select-none',\n 'transition-colors text-sm',\n isActive\n ? 'bg-primary-50 text-primary-700 font-medium'\n : 'text-gray-700 hover:bg-gray-50 hover:text-gray-900',\n depth > 0 ? `ml-${Math.min(depth * 4, 8)}` : '',\n ]\n .filter(Boolean)\n .join(' ')}\n style={depth > 0 ? { marginLeft: depth * 16 } : undefined}\n onClick={() => {\n onSelect(node)\n if (hasChildren) setExpanded((v) => !v)\n }}\n role=\"button\"\n tabIndex={0}\n onKeyDown={(e) => {\n if (e.key === 'Enter' || e.key === ' ') {\n e.preventDefault()\n onSelect(node)\n if (hasChildren) setExpanded((v) => !v)\n }\n }}\n aria-expanded={hasChildren ? expanded : undefined}\n >\n {/* Expand toggle */}\n {hasChildren ? (\n <span\n className={`shrink-0 text-gray-400 transition-transform duration-150 ${expanded ? 'rotate-90' : ''}`}\n >\n <svg\n xmlns=\"http://www.w3.org/2000/svg\"\n fill=\"none\"\n viewBox=\"0 0 24 24\"\n strokeWidth={2}\n stroke=\"currentColor\"\n className=\"w-3.5 h-3.5\"\n >\n <path strokeLinecap=\"round\" strokeLinejoin=\"round\" d=\"M8.25 4.5l7.5 7.5-7.5 7.5\" />\n </svg>\n </span>\n ) : (\n <span className=\"w-3.5 shrink-0\" />\n )}\n\n {/* Icon */}\n {node.icon && <span className=\"text-base leading-none\">{node.icon}</span>}\n\n {/* Label */}\n <span className=\"flex-1 truncate\">{node.label}</span>\n\n {/* Count */}\n {showCounts && node.count !== undefined && (\n <span\n className={`text-xs rounded-full px-1.5 py-0.5 font-medium ${\n isActive ? 'bg-primary-100 text-primary-600' : 'bg-gray-100 text-gray-500'\n }`}\n >\n {node.count}\n </span>\n )}\n </div>\n\n {/* Children */}\n {hasChildren && expanded && (\n <ul role=\"group\">\n {node.children!.map((child) => (\n <TreeNode\n key={child.id}\n node={child}\n activeId={activeId}\n onSelect={onSelect}\n showCounts={showCounts}\n depth={depth + 1}\n defaultExpandAll={defaultExpandAll}\n />\n ))}\n </ul>\n )}\n </li>\n )\n}\n\nfunction isAncestorOf(node: Category, activeId: string | undefined): boolean {\n if (!activeId) return false\n if (!node.children) return false\n return node.children.some(\n (c) => c.id === activeId || isAncestorOf(c, activeId),\n )\n}\n\nexport function CategoryTree({\n categories,\n activeId,\n onSelect,\n showCounts = true,\n defaultExpandAll = false,\n className = '',\n ...props\n}: CategoryTreeProps) {\n const handleSelect = (cat: Category) => onSelect?.(cat)\n\n return (\n <nav\n aria-label=\"Category navigation\"\n className={['w-full', className].filter(Boolean).join(' ')}\n {...props}\n >\n <ul role=\"tree\" className=\"space-y-0.5\">\n {categories.map((cat) => (\n <TreeNode\n key={cat.id}\n node={cat}\n activeId={activeId}\n onSelect={handleSelect}\n showCounts={showCounts}\n depth={0}\n defaultExpandAll={defaultExpandAll}\n />\n ))}\n </ul>\n </nav>\n )\n}\n","import { useState, useRef } from 'react'\n\nexport interface MegaMenuSubItem {\n id: string\n label: string\n href?: string\n badge?: string\n}\n\nexport interface MegaMenuColumn {\n heading?: string\n items: MegaMenuSubItem[]\n}\n\nexport interface MegaMenuFeatured {\n image?: string\n eyebrow?: string\n title: string\n description?: string\n cta?: string\n href?: string\n}\n\nexport interface MegaMenuItem {\n id: string\n label: string\n icon?: string\n href?: string\n /** If columns are present, hovering opens the mega panel */\n columns?: MegaMenuColumn[]\n featured?: MegaMenuFeatured\n}\n\nexport interface MegaMenuProps {\n items: MegaMenuItem[]\n activeId?: string\n onNavigate?: (item: MegaMenuSubItem | MegaMenuItem) => void\n}\n\n// ─── Mega panel ──────────────────────────────────────────────────────────────\n\ninterface MegaPanelProps {\n item: MegaMenuItem\n onNavigate: (subItem: MegaMenuSubItem | MegaMenuItem) => void\n onClose: () => void\n}\n\nfunction MegaPanel({ item, onNavigate, onClose }: MegaPanelProps) {\n if (!item.columns?.length) return null\n\n return (\n <div className=\"absolute left-0 right-0 top-full z-50 bg-white border-b border-gray-200 shadow-lg\">\n <div className=\"max-w-7xl mx-auto px-4 py-6 flex gap-8\">\n {/* Columns */}\n <div className=\"flex-1 grid grid-cols-2 md:grid-cols-3 lg:grid-cols-4 gap-6\">\n {item.columns.map((col, ci) => (\n <div key={ci}>\n {col.heading && (\n <p className=\"text-xs font-semibold uppercase tracking-wider text-gray-400 mb-2\">\n {col.heading}\n </p>\n )}\n <ul className=\"space-y-1\">\n {col.items.map((sub) => (\n <li key={sub.id}>\n <button\n className=\"flex items-center gap-1.5 text-sm text-gray-700 hover:text-primary-600 transition-colors py-0.5\"\n onClick={() => {\n onNavigate(sub)\n onClose()\n }}\n >\n {sub.label}\n {sub.badge && (\n <span className=\"text-[10px] font-semibold px-1.5 py-0.5 rounded-full bg-danger-50 text-danger-600 leading-none\">\n {sub.badge}\n </span>\n )}\n </button>\n </li>\n ))}\n </ul>\n </div>\n ))}\n </div>\n\n {/* Featured card */}\n {item.featured && (\n <div className=\"w-52 shrink-0\">\n <button\n className=\"group block w-full rounded-xl overflow-hidden border border-gray-100 text-left hover:shadow-md transition-shadow\"\n onClick={() => {\n onNavigate(item)\n onClose()\n }}\n >\n {item.featured.image ? (\n <img\n src={item.featured.image}\n alt={item.featured.title}\n className=\"w-full h-28 object-cover\"\n />\n ) : (\n <div className=\"w-full h-28 bg-linear-to-br from-primary-100 to-primary-200 flex items-center justify-center text-4xl\">\n {item.icon ?? '🛍️'}\n </div>\n )}\n <div className=\"p-3\">\n {item.featured.eyebrow && (\n <p className=\"text-[10px] font-semibold uppercase tracking-wider text-primary-500 mb-0.5\">\n {item.featured.eyebrow}\n </p>\n )}\n <p className=\"text-sm font-semibold text-gray-900 group-hover:text-primary-600 transition-colors\">\n {item.featured.title}\n </p>\n {item.featured.description && (\n <p className=\"text-xs text-gray-500 mt-0.5 line-clamp-2\">\n {item.featured.description}\n </p>\n )}\n {item.featured.cta && (\n <span className=\"inline-block mt-2 text-xs font-medium text-primary-600\">\n {item.featured.cta} →\n </span>\n )}\n </div>\n </button>\n </div>\n )}\n </div>\n </div>\n )\n}\n\n// ─── MegaMenu ────────────────────────────────────────────────────────────────\n\nexport function MegaMenu({\n items,\n activeId,\n onNavigate,\n}: MegaMenuProps) {\n const [openId, setOpenId] = useState<string | null>(null)\n const timeoutRef = useRef<ReturnType<typeof setTimeout> | null>(null)\n\n const open = (id: string) => {\n if (timeoutRef.current) clearTimeout(timeoutRef.current)\n setOpenId(id)\n }\n\n const scheduleClose = () => {\n timeoutRef.current = setTimeout(() => setOpenId(null), 120)\n }\n\n const cancelClose = () => {\n if (timeoutRef.current) clearTimeout(timeoutRef.current)\n }\n\n const activeItem = items.find((i) => i.id === openId)\n\n return (\n <nav\n aria-label=\"Main navigation\"\n className=\"relative bg-white border-b border-gray-100\"\n onMouseLeave={scheduleClose}\n >\n <div className=\"max-w-7xl mx-auto px-4\">\n <ul className=\"flex items-center gap-0\" role=\"menubar\">\n {items.map((item) => {\n const hasMega = !!item.columns?.length\n const isOpen = openId === item.id\n const isActive = activeId === item.id\n\n return (\n <li key={item.id} role=\"none\">\n <button\n role=\"menuitem\"\n aria-haspopup={hasMega ? 'true' : undefined}\n aria-expanded={hasMega ? isOpen : undefined}\n className={[\n 'flex items-center gap-1.5 px-4 py-3.5 text-sm font-medium transition-colors relative',\n 'outline-none focus-visible:ring-2 focus-visible:ring-inset focus-visible:ring-primary-500',\n isActive || isOpen\n ? 'text-primary-600'\n : 'text-gray-700 hover:text-gray-900',\n isOpen\n ? 'after:absolute after:bottom-0 after:left-0 after:right-0 after:h-0.5 after:bg-primary-600'\n : '',\n ]\n .filter(Boolean)\n .join(' ')}\n onMouseEnter={() => hasMega ? open(item.id) : setOpenId(null)}\n onFocus={() => hasMega && open(item.id)}\n onClick={() => {\n if (!hasMega) {\n onNavigate?.(item)\n setOpenId(null)\n }\n }}\n >\n {item.icon && <span className=\"text-base leading-none\">{item.icon}</span>}\n {item.label}\n {hasMega && (\n <svg\n xmlns=\"http://www.w3.org/2000/svg\"\n fill=\"none\"\n viewBox=\"0 0 24 24\"\n strokeWidth={2}\n stroke=\"currentColor\"\n className={`w-3.5 h-3.5 transition-transform duration-150 ${isOpen ? 'rotate-180' : ''}`}\n >\n <path\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n d=\"M19.5 8.25l-7.5 7.5-7.5-7.5\"\n />\n </svg>\n )}\n </button>\n </li>\n )\n })}\n </ul>\n </div>\n\n {/* Mega panel */}\n {activeItem?.columns?.length && (\n <div\n onMouseEnter={cancelClose}\n onMouseLeave={scheduleClose}\n >\n <MegaPanel\n item={activeItem}\n onNavigate={(sub) => onNavigate?.(sub)}\n onClose={() => setOpenId(null)}\n />\n </div>\n )}\n </nav>\n )\n}\n","import { useState, useEffect, useCallback, useRef } from 'react'\n\nexport interface Banner {\n id: string\n /** Background image URL or gradient CSS value */\n backgroundImage?: string\n backgroundColor?: string\n /** Overlaid text content */\n eyebrow?: string\n title: string\n subtitle?: string\n ctaLabel?: string\n ctaHref?: string\n onCtaClick?: () => void\n /** Image on the right side of the banner */\n sideImage?: string\n /** Text colors — default to white for dark backgrounds */\n textColor?: 'light' | 'dark'\n}\n\nexport interface BannerCarouselProps {\n banners: Banner[]\n autoPlay?: boolean\n autoPlayInterval?: number\n /** Show arrow navigation */\n arrows?: boolean\n /** Show dot indicators */\n dots?: boolean\n className?: string\n /** Aspect ratio of the banner — default 3/1 */\n aspectRatio?: string\n}\n\nexport function BannerCarousel({\n banners,\n autoPlay = true,\n autoPlayInterval = 5000,\n arrows = true,\n dots = true,\n className = '',\n aspectRatio = '3 / 1',\n}: BannerCarouselProps) {\n const [current, setCurrent] = useState(0)\n const [paused, setPaused] = useState(false)\n const timerRef = useRef<ReturnType<typeof setInterval> | null>(null)\n const trackRef = useRef<HTMLDivElement>(null)\n\n const count = banners.length\n\n const goTo = useCallback(\n (index: number) => {\n setCurrent(((index % count) + count) % count)\n },\n [count],\n )\n\n const prev = () => goTo(current - 1)\n const next = useCallback(() => goTo(current + 1), [current, goTo])\n\n // Auto-play\n useEffect(() => {\n if (!autoPlay || paused || count <= 1) return\n timerRef.current = setInterval(next, autoPlayInterval)\n return () => {\n if (timerRef.current) clearInterval(timerRef.current)\n }\n }, [autoPlay, paused, autoPlayInterval, next, count])\n\n // Swipe support\n const touchStartX = useRef<number | null>(null)\n const handleTouchStart = (e: React.TouchEvent) => {\n touchStartX.current = e.touches[0].clientX\n }\n const handleTouchEnd = (e: React.TouchEvent) => {\n if (touchStartX.current === null) return\n const delta = e.changedTouches[0].clientX - touchStartX.current\n if (Math.abs(delta) > 50) delta < 0 ? next() : prev()\n touchStartX.current = null\n }\n\n if (count === 0) return null\n\n const banner = banners[current]\n const isLight = banner.textColor === 'light' || !banner.textColor\n\n return (\n <div\n className={['relative overflow-hidden rounded-xl', className].filter(Boolean).join(' ')}\n style={{ aspectRatio }}\n onMouseEnter={() => setPaused(true)}\n onMouseLeave={() => setPaused(false)}\n onTouchStart={handleTouchStart}\n onTouchEnd={handleTouchEnd}\n >\n {/* Slides */}\n <div ref={trackRef} className=\"relative w-full h-full\">\n {banners.map((b, i) => (\n <div\n key={b.id}\n aria-hidden={i !== current}\n className={[\n 'absolute inset-0 transition-opacity duration-700',\n i === current ? 'opacity-100 z-10' : 'opacity-0 z-0',\n ].join(' ')}\n style={{\n background: b.backgroundImage\n ? `url(${b.backgroundImage}) center/cover no-repeat`\n : b.backgroundColor ?? 'linear-gradient(135deg, #1d4ed8 0%, #7c3aed 100%)',\n }}\n >\n {/* Overlay for readability */}\n {b.backgroundImage && (\n <div className=\"absolute inset-0 bg-gradient-to-r from-black/50 via-black/20 to-transparent\" />\n )}\n\n {/* Content */}\n <div className=\"relative z-10 h-full flex items-center px-8 md:px-12 gap-8\">\n <div className=\"flex-1 max-w-lg\">\n {b.eyebrow && (\n <p\n className={`text-xs font-semibold uppercase tracking-widest mb-2 ${\n isLight ? 'text-white/70' : 'text-gray-500'\n }`}\n >\n {b.eyebrow}\n </p>\n )}\n <h2\n className={`text-2xl md:text-3xl lg:text-4xl font-bold leading-tight ${\n isLight ? 'text-white' : 'text-gray-900'\n }`}\n >\n {b.title}\n </h2>\n {b.subtitle && (\n <p\n className={`mt-2 text-sm md:text-base ${\n isLight ? 'text-white/80' : 'text-gray-600'\n }`}\n >\n {b.subtitle}\n </p>\n )}\n {b.ctaLabel && (\n <button\n onClick={b.onCtaClick}\n className={[\n 'mt-5 inline-flex items-center gap-2 px-5 py-2.5 rounded-lg text-sm font-semibold transition-all',\n isLight\n ? 'bg-white text-gray-900 hover:bg-gray-100'\n : 'bg-primary-600 text-white hover:bg-primary-700',\n ].join(' ')}\n >\n {b.ctaLabel}\n <svg\n xmlns=\"http://www.w3.org/2000/svg\"\n fill=\"none\"\n viewBox=\"0 0 24 24\"\n strokeWidth={2}\n stroke=\"currentColor\"\n className=\"w-4 h-4\"\n >\n <path strokeLinecap=\"round\" strokeLinejoin=\"round\" d=\"M8.25 4.5l7.5 7.5-7.5 7.5\" />\n </svg>\n </button>\n )}\n </div>\n\n {/* Side image */}\n {b.sideImage && (\n <div className=\"hidden md:block flex-1 h-full flex items-end justify-end overflow-hidden\">\n <img\n src={b.sideImage}\n alt=\"\"\n className=\"h-full w-auto object-contain object-bottom drop-shadow-2xl\"\n />\n </div>\n )}\n </div>\n </div>\n ))}\n </div>\n\n {/* Arrow navigation */}\n {arrows && count > 1 && (\n <>\n <button\n onClick={prev}\n className=\"absolute left-3 top-1/2 -translate-y-1/2 z-20 w-9 h-9 flex items-center justify-center rounded-full bg-black/30 text-white hover:bg-black/50 transition-colors backdrop-blur-sm\"\n aria-label=\"Previous banner\"\n >\n <svg xmlns=\"http://www.w3.org/2000/svg\" fill=\"none\" viewBox=\"0 0 24 24\" strokeWidth={2} stroke=\"currentColor\" className=\"w-5 h-5\">\n <path strokeLinecap=\"round\" strokeLinejoin=\"round\" d=\"M15.75 19.5L8.25 12l7.5-7.5\" />\n </svg>\n </button>\n <button\n onClick={next}\n className=\"absolute right-3 top-1/2 -translate-y-1/2 z-20 w-9 h-9 flex items-center justify-center rounded-full bg-black/30 text-white hover:bg-black/50 transition-colors backdrop-blur-sm\"\n aria-label=\"Next banner\"\n >\n <svg xmlns=\"http://www.w3.org/2000/svg\" fill=\"none\" viewBox=\"0 0 24 24\" strokeWidth={2} stroke=\"currentColor\" className=\"w-5 h-5\">\n <path strokeLinecap=\"round\" strokeLinejoin=\"round\" d=\"M8.25 4.5l7.5 7.5-7.5 7.5\" />\n </svg>\n </button>\n </>\n )}\n\n {/* Dot indicators */}\n {dots && count > 1 && (\n <div className=\"absolute bottom-3 left-1/2 -translate-x-1/2 z-20 flex gap-1.5\">\n {banners.map((_, i) => (\n <button\n key={i}\n onClick={() => goTo(i)}\n aria-label={`Go to slide ${i + 1}`}\n className={[\n 'rounded-full transition-all duration-300',\n i === current\n ? 'w-5 h-2 bg-white'\n : 'w-2 h-2 bg-white/50 hover:bg-white/80',\n ].join(' ')}\n />\n ))}\n </div>\n )}\n\n {/* Auto-play progress bar */}\n {autoPlay && count > 1 && (\n <div className=\"absolute bottom-0 left-0 right-0 h-0.5 bg-white/20 z-20\">\n <div\n key={`${current}-${paused}`}\n className={`h-full bg-white/60 ${paused ? '' : 'animate-progress'}`}\n style={{\n animation: paused ? 'none' : `progress ${autoPlayInterval}ms linear`,\n }}\n />\n </div>\n )}\n </div>\n )\n}\n","import { useState } from 'react'\nimport { Badge } from '../common/Badge/Badge'\nimport { Button } from '../common/Button/Button'\n\nexport interface ProductCardProduct {\n id: string\n name: string\n slug?: string\n /** Primary image URL */\n image?: string\n /** Secondary image on hover */\n imageHover?: string\n price: number\n originalPrice?: number\n currency?: string\n /** 'new' | 'sale' | 'hot' | custom string */\n badge?: string\n /** 0–5 */\n rating?: number\n reviewCount?: number\n inStock?: boolean\n /** Variants available (e.g. colors) */\n variants?: { id: string; color?: string; label: string }[]\n}\n\nexport interface ProductCardProps {\n product: ProductCardProduct\n onAddToCart?: (product: ProductCardProduct) => void\n onWishlistToggle?: (product: ProductCardProduct) => void\n isWishlisted?: boolean\n onProductClick?: (product: ProductCardProduct) => void\n /** compact — narrower, used in grids with 4+ columns */\n size?: 'default' | 'compact'\n className?: string\n}\n\nfunction StarIcon({ filled }: { filled: boolean }) {\n return (\n <svg\n xmlns=\"http://www.w3.org/2000/svg\"\n viewBox=\"0 0 24 24\"\n className={`w-3.5 h-3.5 ${filled ? 'fill-amber-400 stroke-amber-400' : 'fill-gray-200 stroke-gray-300'}`}\n strokeWidth={1}\n >\n <path\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n d=\"M11.48 3.499a.562.562 0 011.04 0l2.125 5.111a.563.563 0 00.475.345l5.518.442c.499.04.701.663.321.988l-4.204 3.602a.563.563 0 00-.182.557l1.285 5.385a.562.562 0 01-.84.61l-4.725-2.885a.563.563 0 00-.586 0L6.982 20.54a.562.562 0 01-.84-.61l1.285-5.386a.562.562 0 00-.182-.557l-4.204-3.602a.563.563 0 01.321-.988l5.518-.442a.563.563 0 00.475-.345L11.48 3.5z\"\n />\n </svg>\n )\n}\n\nfunction StarRating({ value, count }: { value: number; count?: number }) {\n return (\n <div className=\"flex items-center gap-1\">\n <div className=\"flex gap-0.5\">\n {[1, 2, 3, 4, 5].map((s) => (\n <StarIcon key={s} filled={s <= Math.round(value)} />\n ))}\n </div>\n {count !== undefined && (\n <span className=\"text-xs text-gray-400\">({count})</span>\n )}\n </div>\n )\n}\n\nfunction badgeVariant(badge: string) {\n const b = badge.toLowerCase()\n if (b === 'sale' || b === 'akce') return 'danger' as const\n if (b === 'new' || b === 'nové') return 'primary' as const\n if (b === 'hot') return 'warning' as const\n return 'default' as const\n}\n\nfunction formatPrice(price: number, currency = 'Kč') {\n return `${price.toLocaleString('cs-CZ')} ${currency}`\n}\n\nfunction discountPercent(original: number, current: number) {\n return Math.round((1 - current / original) * 100)\n}\n\nexport function ProductCard({\n product,\n onAddToCart,\n onWishlistToggle,\n isWishlisted = false,\n onProductClick,\n size = 'default',\n className = '',\n}: ProductCardProps) {\n const [hovered, setHovered] = useState(false)\n const [addedToCart, setAddedToCart] = useState(false)\n\n const hasDiscount =\n product.originalPrice !== undefined && product.originalPrice > product.price\n\n const handleAddToCart = (e: React.MouseEvent) => {\n e.stopPropagation()\n onAddToCart?.(product)\n setAddedToCart(true)\n setTimeout(() => setAddedToCart(false), 1500)\n }\n\n const handleWishlist = (e: React.MouseEvent) => {\n e.stopPropagation()\n onWishlistToggle?.(product)\n }\n\n return (\n <article\n className={[\n 'group relative flex flex-col bg-white rounded-xl border border-gray-200',\n 'hover:shadow-md transition-shadow duration-200 overflow-hidden cursor-pointer',\n className,\n ]\n .filter(Boolean)\n .join(' ')}\n onClick={() => onProductClick?.(product)}\n onMouseEnter={() => setHovered(true)}\n onMouseLeave={() => setHovered(false)}\n >\n {/* Image */}\n <div className={`relative overflow-hidden bg-gray-50 ${size === 'compact' ? 'aspect-square' : 'aspect-4/3'}`}>\n {product.image ? (\n <img\n src={hovered && product.imageHover ? product.imageHover : product.image}\n alt={product.name}\n className=\"w-full h-full object-contain p-4 transition-transform duration-300 group-hover:scale-105\"\n />\n ) : (\n <div className=\"w-full h-full flex items-center justify-center text-5xl bg-linear-to-br from-gray-100 to-gray-200\">\n 🛍️\n </div>\n )}\n\n {/* Badge */}\n {product.badge && (\n <div className=\"absolute top-2 left-2\">\n <Badge variant={badgeVariant(product.badge)} size=\"sm\">\n {product.badge === 'sale' && hasDiscount\n ? `-${discountPercent(product.originalPrice!, product.price)}%`\n : product.badge}\n </Badge>\n </div>\n )}\n\n {/* Out of stock overlay */}\n {product.inStock === false && (\n <div className=\"absolute inset-0 bg-white/70 flex items-center justify-center\">\n <span className=\"text-sm font-semibold text-gray-500 bg-white/90 px-3 py-1 rounded-full border border-gray-200\">\n Vyprodáno\n </span>\n </div>\n )}\n\n {/* Wishlist button */}\n <button\n onClick={handleWishlist}\n aria-label={isWishlisted ? 'Remove from wishlist' : 'Add to wishlist'}\n className={[\n 'absolute top-2 right-2 w-8 h-8 flex items-center justify-center rounded-full bg-white shadow-sm border border-gray-100',\n 'transition-all duration-200',\n 'opacity-0 group-hover:opacity-100 focus:opacity-100',\n isWishlisted ? 'text-danger-500' : 'text-gray-400 hover:text-danger-400',\n ].join(' ')}\n >\n <svg\n xmlns=\"http://www.w3.org/2000/svg\"\n viewBox=\"0 0 24 24\"\n strokeWidth={1.5}\n stroke=\"currentColor\"\n className={`w-4 h-4 ${isWishlisted ? 'fill-current' : 'fill-none'}`}\n >\n <path\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n d=\"M21 8.25c0-2.485-2.099-4.5-4.688-4.5-1.935 0-3.597 1.126-4.312 2.733-.715-1.607-2.377-2.733-4.313-2.733C5.1 3.75 3 5.765 3 8.25c0 7.22 9 12 9 12s9-4.78 9-12z\"\n />\n </svg>\n </button>\n\n {/* Quick add — slides up on hover */}\n <div\n className={[\n 'absolute bottom-0 left-0 right-0 p-2 transition-transform duration-200',\n hovered ? 'translate-y-0' : 'translate-y-full',\n ].join(' ')}\n >\n <Button\n variant=\"primary\"\n size=\"sm\"\n fullWidth\n loading={false}\n disabled={product.inStock === false}\n onClick={handleAddToCart}\n className=\"shadow-lg\"\n >\n {addedToCart ? (\n <span className=\"flex items-center gap-1.5\">\n <svg xmlns=\"http://www.w3.org/2000/svg\" fill=\"none\" viewBox=\"0 0 24 24\" strokeWidth={2} stroke=\"currentColor\" className=\"w-4 h-4\">\n <path strokeLinecap=\"round\" strokeLinejoin=\"round\" d=\"M4.5 12.75l6 6 9-13.5\" />\n </svg>\n Přidáno\n </span>\n ) : (\n 'Přidat do košíku'\n )}\n </Button>\n </div>\n </div>\n\n {/* Info */}\n <div className={`flex flex-col gap-1.5 ${size === 'compact' ? 'p-3' : 'p-4'}`}>\n {/* Color variants */}\n {product.variants && product.variants.length > 0 && (\n <div className=\"flex gap-1\">\n {product.variants.slice(0, 5).map((v) => (\n <span\n key={v.id}\n title={v.label}\n className=\"w-4 h-4 rounded-full border border-gray-300 shrink-0\"\n style={{ backgroundColor: v.color ?? '#ccc' }}\n />\n ))}\n {product.variants.length > 5 && (\n <span className=\"text-xs text-gray-400\">+{product.variants.length - 5}</span>\n )}\n </div>\n )}\n\n {/* Name */}\n <h3\n className={`font-medium text-gray-900 leading-snug line-clamp-2 group-hover:text-primary-600 transition-colors ${\n size === 'compact' ? 'text-xs' : 'text-sm'\n }`}\n >\n {product.name}\n </h3>\n\n {/* Rating */}\n {product.rating !== undefined && (\n <StarRating value={product.rating} count={product.reviewCount} />\n )}\n\n {/* Price */}\n <div className=\"flex items-baseline gap-2 mt-auto pt-1\">\n <span\n className={`font-bold text-gray-900 ${size === 'compact' ? 'text-base' : 'text-lg'}`}\n >\n {formatPrice(product.price, product.currency)}\n </span>\n {hasDiscount && (\n <span className=\"text-sm text-gray-400 line-through\">\n {formatPrice(product.originalPrice!, product.currency)}\n </span>\n )}\n </div>\n </div>\n </article>\n )\n}\n","import type { ReactNode } from 'react'\nimport { ProductCard } from '../ProductCard/ProductCard'\nimport type { ProductCardProduct, ProductCardProps } from '../ProductCard/ProductCard'\nimport { Pagination } from '../common/Pagination/Pagination'\nimport { Select } from '../common/Select/Select'\n\nexport type GridColumns = 2 | 3 | 4 | 5\n\nexport interface SortOption {\n value: string\n label: string\n}\n\nexport interface ProductGridProps {\n products: ProductCardProduct[]\n /** Total products (for pagination) */\n totalCount?: number\n /** Current page */\n page?: number\n onPageChange?: (page: number) => void\n /** Products per page */\n perPage?: number\n /** Column count */\n columns?: GridColumns\n /** Sort options */\n sortOptions?: SortOption[]\n selectedSort?: string\n onSortChange?: (value: string) => void\n /** Active filters summary */\n activeFilters?: string[]\n onRemoveFilter?: (filter: string) => void\n onClearFilters?: () => void\n /** Loading skeleton */\n loading?: boolean\n /** Empty state slot */\n emptyState?: ReactNode\n /** ProductCard passthrough props */\n onAddToCart?: ProductCardProps['onAddToCart']\n onWishlistToggle?: ProductCardProps['onWishlistToggle']\n onProductClick?: ProductCardProps['onProductClick']\n wishlisted?: string[]\n className?: string\n}\n\nconst colClasses: Record<GridColumns, string> = {\n 2: 'grid-cols-2',\n 3: 'grid-cols-2 md:grid-cols-3',\n 4: 'grid-cols-2 sm:grid-cols-3 lg:grid-cols-4',\n 5: 'grid-cols-2 sm:grid-cols-3 md:grid-cols-4 lg:grid-cols-5',\n}\n\nconst DEFAULT_SORT_OPTIONS: SortOption[] = [\n { value: 'newest', label: 'Nejnovější' },\n { value: 'price-asc', label: 'Cena: od nejnižší' },\n { value: 'price-desc', label: 'Cena: od nejvyšší' },\n { value: 'rating', label: 'Hodnocení' },\n { value: 'bestseller', label: 'Bestsellery' },\n]\n\nfunction SkeletonCard() {\n return (\n <div className=\"rounded-xl border border-gray-100 overflow-hidden animate-pulse\">\n <div className=\"aspect-4/3 bg-gray-200\" />\n <div className=\"p-4 space-y-2\">\n <div className=\"h-3 bg-gray-200 rounded w-3/4\" />\n <div className=\"h-3 bg-gray-200 rounded w-1/2\" />\n <div className=\"h-5 bg-gray-200 rounded w-1/3 mt-2\" />\n </div>\n </div>\n )\n}\n\nexport function ProductGrid({\n products,\n totalCount,\n page = 1,\n onPageChange,\n perPage = 20,\n columns = 4,\n sortOptions = DEFAULT_SORT_OPTIONS,\n selectedSort,\n onSortChange,\n activeFilters = [],\n onRemoveFilter,\n onClearFilters,\n loading = false,\n emptyState,\n onAddToCart,\n onWishlistToggle,\n onProductClick,\n wishlisted = [],\n className = '',\n}: ProductGridProps) {\n const totalPages = totalCount ? Math.ceil(totalCount / perPage) : undefined\n const cardSize = columns >= 5 ? 'compact' : 'default'\n\n return (\n <div className={['w-full', className].filter(Boolean).join(' ')}>\n {/* Toolbar */}\n <div className=\"flex flex-wrap items-center justify-between gap-3 mb-4\">\n {/* Left: count + active filters */}\n <div className=\"flex flex-wrap items-center gap-2\">\n {totalCount !== undefined && (\n <span className=\"text-sm text-gray-500\">\n <span className=\"font-semibold text-gray-900\">{totalCount}</span> produktů\n </span>\n )}\n {activeFilters.map((f) => (\n <span\n key={f}\n className=\"inline-flex items-center gap-1 text-xs bg-primary-50 text-primary-700 border border-primary-200 rounded-full px-2.5 py-1\"\n >\n {f}\n <button\n onClick={() => onRemoveFilter?.(f)}\n aria-label={`Remove filter ${f}`}\n className=\"hover:text-primary-900 transition-colors\"\n >\n <svg xmlns=\"http://www.w3.org/2000/svg\" fill=\"none\" viewBox=\"0 0 24 24\" strokeWidth={2} stroke=\"currentColor\" className=\"w-3 h-3\">\n <path strokeLinecap=\"round\" strokeLinejoin=\"round\" d=\"M6 18L18 6M6 6l12 12\" />\n </svg>\n </button>\n </span>\n ))}\n {activeFilters.length > 1 && (\n <button\n onClick={onClearFilters}\n className=\"text-xs text-gray-400 hover:text-gray-600 underline underline-offset-2 transition-colors\"\n >\n Zrušit vše\n </button>\n )}\n </div>\n\n {/* Right: sort */}\n <Select\n options={sortOptions}\n value={selectedSort ?? ''}\n onChange={(e) => onSortChange?.(e.target.value)}\n aria-label=\"Sort products\"\n className=\"text-sm\"\n />\n </div>\n\n {/* Grid */}\n {loading ? (\n <div className={`grid gap-4 ${colClasses[columns]}`}>\n {Array.from({ length: perPage > 12 ? 12 : perPage }).map((_, i) => (\n <SkeletonCard key={i} />\n ))}\n </div>\n ) : products.length === 0 ? (\n <div className=\"py-16 text-center\">\n {emptyState ?? (\n <div className=\"space-y-2\">\n <p className=\"text-4xl\">🔍</p>\n <p className=\"font-semibold text-gray-900\">Žádné produkty nenalezeny</p>\n <p className=\"text-sm text-gray-500\">Zkuste upravit filtry nebo hledat jinak.</p>\n {activeFilters.length > 0 && (\n <button\n onClick={onClearFilters}\n className=\"mt-3 text-sm text-primary-600 hover:underline\"\n >\n Zrušit všechny filtry\n </button>\n )}\n </div>\n )}\n </div>\n ) : (\n <div className={`grid gap-4 ${colClasses[columns]}`}>\n {products.map((product) => (\n <ProductCard\n key={product.id}\n product={product}\n size={cardSize}\n onAddToCart={onAddToCart}\n onWishlistToggle={onWishlistToggle}\n onProductClick={onProductClick}\n isWishlisted={wishlisted.includes(product.id)}\n />\n ))}\n </div>\n )}\n\n {/* Pagination */}\n {totalPages && totalPages > 1 && onPageChange && (\n <div className=\"flex justify-center mt-8\">\n <Pagination\n page={page}\n totalPages={totalPages}\n onPageChange={onPageChange}\n />\n </div>\n )}\n </div>\n )\n}\n","import type { ReactNode, CSSProperties } from 'react'\nimport { Button } from '../common/Button/Button'\nimport type { ButtonProps } from '../common/Button/Button'\n\n// ─── Types ────────────────────────────────────────────────────────────────────\n\ntype CtaAlign = 'left' | 'center' | 'right'\ntype CtaSize = 'sm' | 'md' | 'lg' | 'xl'\ntype CtaVariant = 'default' | 'primary' | 'dark' | 'gradient' | 'outline' | 'image'\ntype CtaLayout = 'stacked' | 'inline'\n\nexport interface CtaAction {\n label: string\n onClick?: () => void\n href?: string\n variant?: ButtonProps['variant']\n size?: ButtonProps['size']\n}\n\nexport interface CallToActionProps {\n // Content\n eyebrow?: string\n title: string\n description?: string\n actions?: CtaAction[]\n\n // Layout\n align?: CtaAlign\n layout?: CtaLayout\n size?: CtaSize\n\n // Visual\n variant?: CtaVariant\n /** Custom background colour or gradient CSS value (overrides variant background) */\n background?: string\n /** For variant=\"image\": URL of background image */\n backgroundImage?: string\n /** Extra decorative slot — e.g. an illustration, icon or badge */\n media?: ReactNode\n\n // Misc\n className?: string\n style?: CSSProperties\n}\n\n// ─── Config maps ─────────────────────────────────────────────────────────────\n\nconst variantClasses: Record<CtaVariant, string> = {\n default: 'bg-gray-50 border border-gray-200',\n primary: 'bg-primary-600',\n dark: 'bg-gray-900',\n gradient: 'bg-linear-to-br from-primary-600 via-primary-700 to-violet-700',\n outline: 'bg-white border-2 border-primary-600',\n image: 'relative overflow-hidden', // bg applied inline via style\n}\n\nconst variantTextClasses: Record<CtaVariant, { eyebrow: string; title: string; description: string }> = {\n default: { eyebrow: 'text-primary-600', title: 'text-gray-900', description: 'text-gray-600' },\n primary: { eyebrow: 'text-primary-100', title: 'text-white', description: 'text-primary-100' },\n dark: { eyebrow: 'text-primary-400', title: 'text-white', description: 'text-gray-400' },\n gradient: { eyebrow: 'text-primary-200', title: 'text-white', description: 'text-primary-100' },\n outline: { eyebrow: 'text-primary-600', title: 'text-gray-900', description: 'text-gray-600' },\n image: { eyebrow: 'text-white/70', title: 'text-white', description: 'text-white/80' },\n}\n\nconst sizeClasses: Record<CtaSize, { wrapper: string; title: string; description: string; eyebrow: string }> = {\n sm: { wrapper: 'px-6 py-6 rounded-xl', title: 'text-xl font-bold', description: 'text-sm', eyebrow: 'text-xs' },\n md: { wrapper: 'px-8 py-10 rounded-2xl', title: 'text-2xl font-bold', description: 'text-base', eyebrow: 'text-xs' },\n lg: { wrapper: 'px-10 py-14 rounded-2xl', title: 'text-3xl font-bold', description: 'text-lg', eyebrow: 'text-sm' },\n xl: { wrapper: 'px-12 py-20 rounded-3xl', title: 'text-4xl font-extrabold leading-tight', description: 'text-xl', eyebrow: 'text-sm' },\n}\n\nconst alignClasses: Record<CtaAlign, { wrapper: string; actions: string }> = {\n left: { wrapper: 'items-start text-left', actions: 'justify-start' },\n center: { wrapper: 'items-center text-center', actions: 'justify-center' },\n right: { wrapper: 'items-end text-right', actions: 'justify-end' },\n}\n\n// ─── Component ───────────────────────────────────────────────────────────────\n\nexport function CallToAction({\n eyebrow,\n title,\n description,\n actions = [],\n align = 'center',\n layout = 'stacked',\n size = 'md',\n variant = 'default',\n background,\n backgroundImage,\n media,\n className = '',\n style,\n}: CallToActionProps) {\n const textColors = variantTextClasses[variant]\n const sizes = sizeClasses[size]\n const alignment = alignClasses[align]\n const isInline = layout === 'inline'\n\n const inlineStyle: CSSProperties = {\n ...(background ? { background } : {}),\n ...(backgroundImage ? { backgroundImage: `url(${backgroundImage})`, backgroundSize: 'cover', backgroundPosition: 'center' } : {}),\n ...style,\n }\n\n return (\n <div\n className={[\n 'w-full',\n variantClasses[variant],\n sizes.wrapper,\n className,\n ].filter(Boolean).join(' ')}\n style={Object.keys(inlineStyle).length ? inlineStyle : undefined}\n >\n {/* Image overlay */}\n {(variant === 'image' || backgroundImage) && (\n <div className=\"absolute inset-0 bg-black/50\" />\n )}\n\n <div className={`relative ${isInline ? 'flex flex-wrap items-center justify-between gap-6' : `flex flex-col gap-4 ${alignment.wrapper}`}`}>\n\n {/* Text block */}\n <div className={`flex flex-col gap-2 ${isInline ? 'flex-1 min-w-0' : alignment.wrapper}`}>\n {eyebrow && (\n <p className={`font-semibold uppercase tracking-widest ${sizes.eyebrow} ${textColors.eyebrow}`}>\n {eyebrow}\n </p>\n )}\n <h2 className={`${sizes.title} ${textColors.title}`}>\n {title}\n </h2>\n {description && (\n <p className={`max-w-2xl ${sizes.description} ${textColors.description}`}>\n {description}\n </p>\n )}\n </div>\n\n {/* Media slot */}\n {media && !isInline && (\n <div className=\"mt-2\">{media}</div>\n )}\n\n {/* Actions */}\n {actions.length > 0 && (\n <div className={`flex flex-wrap gap-3 ${isInline ? 'shrink-0' : alignment.actions}`}>\n {actions.map((action, i) => {\n const btn = (\n <Button\n key={i}\n variant={action.variant ?? (i === 0 ? resolveDefaultPrimaryVariant(variant) : 'outline')}\n size={action.size ?? (size === 'sm' ? 'sm' : size === 'xl' ? 'lg' : 'md')}\n onClick={action.onClick}\n >\n {action.label}\n </Button>\n )\n return action.href ? (\n <a key={i} href={action.href} className=\"contents\">{btn}</a>\n ) : btn\n })}\n </div>\n )}\n </div>\n </div>\n )\n}\n\n/** Pick a sensible default button variant that contrasts with the CTA background */\nfunction resolveDefaultPrimaryVariant(ctaVariant: CtaVariant): ButtonProps['variant'] {\n if (ctaVariant === 'default' || ctaVariant === 'outline') return 'primary'\n return 'secondary' // white-ish on dark/coloured backgrounds\n}\n","import type { ReactNode } from 'react';\nimport { Container } from '../common/Container';\n\n// ─── Types ────────────────────────────────────────────────────────────────────\n\nexport interface FooterContact {\n icon?: 'phone' | 'email' | 'address' | 'hours' | ReactNode;\n label: string;\n value: string;\n href?: string;\n}\n\nexport interface FooterLink {\n label: string;\n href?: string;\n onClick?: () => void;\n}\n\nexport interface FooterLinkGroup {\n heading: string;\n links: FooterLink[];\n}\n\nexport interface FooterSocialLink {\n label: string;\n href?: string;\n icon: 'facebook' | 'instagram' | 'twitter' | 'youtube' | 'tiktok' | ReactNode;\n}\n\nexport interface FooterProps {\n // Branding\n logo?: ReactNode;\n tagline?: string;\n\n // Contact section\n contactHeading?: string;\n contacts?: FooterContact[];\n\n // Links section\n linkGroups?: FooterLinkGroup[];\n\n // Social\n socialLinks?: FooterSocialLink[];\n\n // Bottom bar\n copyright?: string;\n bottomLinks?: FooterLink[];\n\n className?: string;\n}\n\n// ─── Icons ────────────────────────────────────────────────────────────────────\n\nfunction PhoneIcon() {\n return (\n <svg\n xmlns=\"http://www.w3.org/2000/svg\"\n fill=\"none\"\n viewBox=\"0 0 24 24\"\n strokeWidth={1.5}\n stroke=\"currentColor\"\n className=\"w-4 h-4 shrink-0\"\n >\n <path\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n d=\"M2.25 6.75c0 8.284 6.716 15 15 15h2.25a2.25 2.25 0 002.25-2.25v-1.372c0-.516-.351-.966-.852-1.091l-4.423-1.106c-.44-.11-.902.055-1.173.417l-.97 1.293c-.282.376-.769.542-1.21.38a12.035 12.035 0 01-7.143-7.143c-.162-.441.004-.928.38-1.21l1.293-.97c.363-.271.527-.734.417-1.173L6.963 3.102a1.125 1.125 0 00-1.091-.852H4.5A2.25 2.25 0 002.25 4.5v2.25z\"\n />\n </svg>\n );\n}\n\nfunction EmailIcon() {\n return (\n <svg\n xmlns=\"http://www.w3.org/2000/svg\"\n fill=\"none\"\n viewBox=\"0 0 24 24\"\n strokeWidth={1.5}\n stroke=\"currentColor\"\n className=\"w-4 h-4 shrink-0\"\n >\n <path\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n d=\"M21.75 6.75v10.5a2.25 2.25 0 01-2.25 2.25h-15a2.25 2.25 0 01-2.25-2.25V6.75m19.5 0A2.25 2.25 0 0019.5 4.5h-15a2.25 2.25 0 00-2.25 2.25m19.5 0v.243a2.25 2.25 0 01-1.07 1.916l-7.5 4.615a2.25 2.25 0 01-2.36 0L3.32 8.91a2.25 2.25 0 01-1.07-1.916V6.75\"\n />\n </svg>\n );\n}\n\nfunction AddressIcon() {\n return (\n <svg\n xmlns=\"http://www.w3.org/2000/svg\"\n fill=\"none\"\n viewBox=\"0 0 24 24\"\n strokeWidth={1.5}\n stroke=\"currentColor\"\n className=\"w-4 h-4 shrink-0\"\n >\n <path\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n d=\"M15 10.5a3 3 0 11-6 0 3 3 0 016 0z\"\n />\n <path\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n d=\"M19.5 10.5c0 7.142-7.5 11.25-7.5 11.25S4.5 17.642 4.5 10.5a7.5 7.5 0 1115 0z\"\n />\n </svg>\n );\n}\n\nfunction HoursIcon() {\n return (\n <svg\n xmlns=\"http://www.w3.org/2000/svg\"\n fill=\"none\"\n viewBox=\"0 0 24 24\"\n strokeWidth={1.5}\n stroke=\"currentColor\"\n className=\"w-4 h-4 shrink-0\"\n >\n <path\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n d=\"M12 6v6h4.5m4.5 0a9 9 0 11-18 0 9 9 0 0118 0z\"\n />\n </svg>\n );\n}\n\nfunction FacebookIcon() {\n return (\n <svg\n xmlns=\"http://www.w3.org/2000/svg\"\n viewBox=\"0 0 24 24\"\n fill=\"currentColor\"\n className=\"w-4 h-4\"\n >\n <path d=\"M24 12.073C24 5.405 18.627 0 12 0S0 5.405 0 12.073C0 18.1 4.388 23.094 10.125 24v-8.437H7.078v-3.49h3.047V9.41c0-3.025 1.792-4.697 4.533-4.697 1.312 0 2.686.236 2.686.236v2.97h-1.513c-1.491 0-1.956.93-1.956 1.886v2.267h3.328l-.532 3.49h-2.796V24C19.612 23.094 24 18.1 24 12.073z\" />\n </svg>\n );\n}\n\nfunction InstagramIcon() {\n return (\n <svg\n xmlns=\"http://www.w3.org/2000/svg\"\n viewBox=\"0 0 24 24\"\n fill=\"currentColor\"\n className=\"w-4 h-4\"\n >\n <path d=\"M12 2.163c3.204 0 3.584.012 4.85.07 3.252.148 4.771 1.691 4.919 4.919.058 1.265.069 1.645.069 4.849 0 3.205-.012 3.584-.069 4.849-.149 3.225-1.664 4.771-4.919 4.919-1.266.058-1.644.07-4.85.07-3.204 0-3.584-.012-4.849-.07-3.26-.149-4.771-1.699-4.919-4.92-.058-1.265-.07-1.644-.07-4.849 0-3.204.013-3.583.07-4.849.149-3.227 1.664-4.771 4.919-4.919 1.266-.057 1.645-.069 4.849-.069zm0-2.163c-3.259 0-3.667.014-4.947.072-4.358.2-6.78 2.618-6.98 6.98-.059 1.281-.073 1.689-.073 4.948 0 3.259.014 3.668.072 4.948.2 4.358 2.618 6.78 6.98 6.98 1.281.058 1.689.072 4.948.072 3.259 0 3.668-.014 4.948-.072 4.354-.2 6.782-2.618 6.979-6.98.059-1.28.073-1.689.073-4.948 0-3.259-.014-3.667-.072-4.947-.196-4.354-2.617-6.78-6.979-6.98-1.281-.059-1.69-.073-4.949-.073zm0 5.838a6.162 6.162 0 100 12.324 6.162 6.162 0 000-12.324zM12 16a4 4 0 110-8 4 4 0 010 8zm6.406-11.845a1.44 1.44 0 100 2.881 1.44 1.44 0 000-2.881z\" />\n </svg>\n );\n}\n\nfunction TwitterIcon() {\n return (\n <svg\n xmlns=\"http://www.w3.org/2000/svg\"\n viewBox=\"0 0 24 24\"\n fill=\"currentColor\"\n className=\"w-4 h-4\"\n >\n <path d=\"M18.244 2.25h3.308l-7.227 8.26 8.502 11.24H16.17l-5.214-6.817L4.99 21.75H1.68l7.73-8.835L1.254 2.25H8.08l4.713 6.231zm-1.161 17.52h1.833L7.084 4.126H5.117z\" />\n </svg>\n );\n}\n\nfunction YoutubeIcon() {\n return (\n <svg\n xmlns=\"http://www.w3.org/2000/svg\"\n viewBox=\"0 0 24 24\"\n fill=\"currentColor\"\n className=\"w-4 h-4\"\n >\n <path d=\"M23.498 6.186a3.016 3.016 0 00-2.122-2.136C19.505 3.545 12 3.545 12 3.545s-7.505 0-9.377.505A3.017 3.017 0 00.502 6.186C0 8.07 0 12 0 12s0 3.93.502 5.814a3.016 3.016 0 002.122 2.136c1.871.505 9.376.505 9.376.505s7.505 0 9.377-.505a3.015 3.015 0 002.122-2.136C24 15.93 24 12 24 12s0-3.93-.502-5.814zM9.545 15.568V8.432L15.818 12l-6.273 3.568z\" />\n </svg>\n );\n}\n\nfunction TiktokIcon() {\n return (\n <svg\n xmlns=\"http://www.w3.org/2000/svg\"\n viewBox=\"0 0 24 24\"\n fill=\"currentColor\"\n className=\"w-4 h-4\"\n >\n <path d=\"M19.59 6.69a4.83 4.83 0 01-3.77-4.25V2h-3.45v13.67a2.89 2.89 0 01-2.88 2.5 2.89 2.89 0 01-2.89-2.89 2.89 2.89 0 012.89-2.89c.28 0 .54.04.79.1V9.01a6.33 6.33 0 00-.79-.05 6.34 6.34 0 00-6.34 6.34 6.34 6.34 0 006.34 6.34 6.34 6.34 0 006.33-6.34V8.69a8.18 8.18 0 004.78 1.52V6.76a4.85 4.85 0 01-1.01-.07z\" />\n </svg>\n );\n}\n\nconst SOCIAL_ICONS = {\n facebook: FacebookIcon,\n instagram: InstagramIcon,\n twitter: TwitterIcon,\n youtube: YoutubeIcon,\n tiktok: TiktokIcon,\n};\nconst CONTACT_ICONS = {\n phone: PhoneIcon,\n email: EmailIcon,\n address: AddressIcon,\n hours: HoursIcon,\n};\n\nfunction resolveContactIcon(icon: FooterContact['icon']) {\n if (!icon) return null;\n if (typeof icon === 'string') {\n const Icon = CONTACT_ICONS[icon as keyof typeof CONTACT_ICONS];\n return Icon ? <Icon /> : null;\n }\n return icon;\n}\n\nfunction resolveSocialIcon(icon: FooterSocialLink['icon']) {\n if (typeof icon === 'string') {\n const Icon = SOCIAL_ICONS[icon as keyof typeof SOCIAL_ICONS];\n return Icon ? <Icon /> : null;\n }\n return icon;\n}\n\n// ─── Component ────────────────────────────────────────────────────────────────\n\nexport function Footer({\n logo,\n tagline,\n contactHeading = 'Kontakty',\n contacts = [],\n linkGroups = [],\n socialLinks = [],\n copyright,\n bottomLinks = [],\n className = '',\n}: FooterProps) {\n const year = new Date().getFullYear();\n\n return (\n <footer\n className={['bg-gray-900 text-gray-300', className]\n .filter(Boolean)\n .join(' ')}\n >\n <Container>\n {/* ── Main section ───────────────────────────────────────────────────── */}\n <div className=\"max-w-7xl mx-auto px-4 py-12 grid grid-cols-1 md:grid-cols-2 gap-10 lg:gap-16\">\n {/* ── Left: Contact section ──────────────────────────────────────── */}\n <div className=\"flex flex-col gap-6\">\n {/* Logo + tagline */}\n <div>\n {logo ? (\n <div className=\"mb-3\">{logo}</div>\n ) : (\n <span className=\"text-xl font-bold text-white tracking-tight mb-3 block\">\n shopito\n </span>\n )}\n {tagline && (\n <p className=\"text-sm text-gray-400 max-w-xs\">{tagline}</p>\n )}\n </div>\n\n {/* Contacts */}\n {contacts.length > 0 && (\n <div>\n <h3 className=\"text-xs font-semibold uppercase tracking-widest text-gray-500 mb-3\">\n {contactHeading}\n </h3>\n <ul className=\"space-y-3\">\n {contacts.map((c, i) => {\n const icon = resolveContactIcon(c.icon);\n const inner = (\n <div className=\"flex items-start gap-2.5\">\n {icon && (\n <span className=\"mt-0.5 text-primary-400\">\n {icon}\n </span>\n )}\n <div>\n <p className=\"text-xs text-gray-500 leading-none mb-0.5\">\n {c.label}\n </p>\n <p\n className={`text-sm text-gray-200 ${c.href ? 'hover:text-white transition-colors' : ''}`}\n >\n {c.value}\n </p>\n </div>\n </div>\n );\n\n return (\n <li key={i}>\n {c.href ? <a href={c.href}>{inner}</a> : inner}\n </li>\n );\n })}\n </ul>\n </div>\n )}\n\n {/* Social links */}\n {socialLinks.length > 0 && (\n <div className=\"flex gap-2 flex-wrap\">\n {socialLinks.map((s, i) => (\n <a\n key={i}\n href={s.href}\n aria-label={s.label}\n className=\"w-8 h-8 flex items-center justify-center rounded-lg bg-gray-800 text-gray-400 hover:bg-primary-600 hover:text-white transition-colors\"\n >\n {resolveSocialIcon(s.icon)}\n </a>\n ))}\n </div>\n )}\n </div>\n\n {/* ── Right: Link groups ─────────────────────────────────────────── */}\n {linkGroups.length > 0 && (\n <div\n className={`grid gap-8 ${linkGroups.length === 1 ? 'grid-cols-1' : linkGroups.length === 2 ? 'grid-cols-2' : 'grid-cols-2 sm:grid-cols-3'}`}\n >\n {linkGroups.map((group, gi) => (\n <div key={gi}>\n <h3 className=\"text-xs font-semibold uppercase tracking-widest text-gray-500 mb-3\">\n {group.heading}\n </h3>\n <ul className=\"space-y-2\">\n {group.links.map((link, li) => (\n <li key={li}>\n {link.href ? (\n <a\n href={link.href}\n className=\"text-sm text-gray-400 hover:text-white transition-colors\"\n >\n {link.label}\n </a>\n ) : (\n <button\n onClick={link.onClick}\n className=\"text-sm text-gray-400 hover:text-white transition-colors text-left\"\n >\n {link.label}\n </button>\n )}\n </li>\n ))}\n </ul>\n </div>\n ))}\n </div>\n )}\n </div>\n\n {/* ── Bottom bar ─────────────────────────────────────────────────────── */}\n <div className=\"border-t border-gray-800\">\n <div className=\"max-w-7xl mx-auto px-4 py-4 flex flex-wrap items-center justify-between gap-3\">\n <p className=\"text-xs text-gray-500\">\n {copyright ?? `© ${year} Shopito. Všechna práva vyhrazena.`}\n </p>\n {bottomLinks.length > 0 && (\n <nav className=\"flex flex-wrap gap-4\">\n {bottomLinks.map((link, i) =>\n link.href ? (\n <a\n key={i}\n href={link.href}\n className=\"text-xs text-gray-500 hover:text-gray-300 transition-colors\"\n >\n {link.label}\n </a>\n ) : (\n <button\n key={i}\n onClick={link.onClick}\n className=\"text-xs text-gray-500 hover:text-gray-300 transition-colors\"\n >\n {link.label}\n </button>\n ),\n )}\n </nav>\n )}\n </div>\n </div>\n </Container>\n </footer>\n );\n}\n"],"x_google_ignoreList":[2,22,23,24,25,26,27,28,29,30,31,32],"mappings":"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"}