splide-renderer.min.js.map 77 KB

1
  1. {"version":3,"file":"splide-renderer.min.js","sources":["../../src/js/components/Arrows/path.ts","../../src/js/constants/directions.ts","../../src/js/components/Direction/Direction.ts","../../src/js/constants/arrows.ts","../../src/js/constants/project.ts","../../src/js/constants/classes.ts","../../src/js/constants/defaults.ts","../../src/js/constants/i18n.ts","../../src/js/utils/arrayLike/slice/slice.ts","../../src/js/utils/function/apply/apply.ts","../../src/js/utils/type/type.ts","../../src/js/utils/array/toArray/toArray.ts","../../src/js/utils/array/forEach/forEach.ts","../../src/js/utils/array/push/push.ts","../../src/js/utils/dom/matches/matches.ts","../../src/js/utils/dom/child/child.ts","../../src/js/utils/dom/children/children.ts","../../src/js/utils/object/ownKeys/ownKeys.ts","../../src/js/utils/object/forOwn/forOwn.ts","../../src/js/utils/object/assign/assign.ts","../../src/js/utils/object/merge/merge.ts","../../src/js/utils/dom/remove/remove.ts","../../src/js/utils/dom/unit/unit.ts","../../src/js/utils/error/assert/assert.ts","../../src/js/utils/math/math/math.ts","../../src/js/utils/string/camelToKebab/camelToKebab.ts","../../src/js/utils/string/uniqueId/uniqueId.ts","../../src/js/constructors/EventBinder/EventBinder.ts","../../src/js/utils/array/empty/empty.ts","../../src/js/constructors/EventInterface/EventInterface.ts","../../src/js/constants/events.ts","../../src/js/renderer/constants/classes.ts","../../src/js/renderer/constants/defaults.ts","../../src/js/renderer/Style/Style.ts","../../src/js/renderer/SplideRenderer/SplideRenderer.ts","../../src/js/utils/string/pad/pad.ts","../../src/js/utils/dom/queryAll/queryAll.ts","../../src/js/constants/types.ts"],"sourcesContent":["/**\r\n * The namespace for SVG elements.\r\n */\r\nexport const XML_NAME_SPACE = 'http://www.w3.org/2000/svg';\r\n\r\n/**\r\n * The arrow path.\r\n */\r\nexport const PATH = 'm15.5 0.932-4.3 4.38 14.5 14.6-14.5 14.5 4.3 4.4 14.6-14.6 4.4-4.3-4.4-4.4-14.6-14.6z';\r\n\r\n/**\r\n * SVG width and height.\r\n */\r\nexport const SIZE = 40;\r\n","/**\r\n * Enumerates slides from left to right.\r\n */\r\nexport const LTR = 'ltr';\r\n\r\n/**\r\n * Enumerates slides from right to left.\r\n */\r\nexport const RTL = 'rtl';\r\n\r\n/**\r\n * Enumerates slides in a col.\r\n */\r\nexport const TTB = 'ttb';\r\n","import { ARROW_DOWN, ARROW_LEFT, ARROW_RIGHT, ARROW_UP } from '../../constants/arrows';\r\nimport { RTL, TTB } from '../../constants/directions';\r\nimport { Splide } from '../../core/Splide/Splide';\r\nimport { BaseComponent, Components, Options } from '../../types';\r\n\r\n\r\n/**\r\n * The interface for the Direction component.\r\n *\r\n * @since 3.0.0\r\n */\r\nexport interface DirectionComponent extends BaseComponent {\r\n resolve( prop: string, axisOnly?: boolean, direction?: Options['direction'] ): string;\r\n orient( value: number ): number;\r\n}\r\n\r\n/**\r\n * The translation map for directions.\r\n *\r\n * @since 3.0.0\r\n */\r\nexport const ORIENTATION_MAP = {\r\n width : [ 'height' ],\r\n left : [ 'top', 'right' ],\r\n right : [ 'bottom', 'left' ],\r\n x : [ 'y' ],\r\n X : [ 'Y' ],\r\n Y : [ 'X' ],\r\n ArrowLeft : [ ARROW_UP, ARROW_RIGHT ],\r\n ArrowRight: [ ARROW_DOWN, ARROW_LEFT ],\r\n};\r\n\r\n/**\r\n * The component that absorbs the difference among directions.\r\n *\r\n * @since 3.0.0\r\n *\r\n * @param Splide - A Splide instance.\r\n * @param Components - A collection of components.\r\n * @param options - Options.\r\n *\r\n * @return A Direction component object.\r\n */\r\nexport function Direction( Splide: Splide, Components: Components, options: Options ): DirectionComponent {\r\n /**\r\n * Resolves the provided property name.\r\n *\r\n * @param prop - A property name to translate.\r\n * @param axisOnly - Optional. If `ture`, returns the same property for LTR and RTL.\r\n * @param direction - Optional. Specify the direction. The default value is the `direction` option.\r\n */\r\n function resolve( prop: string, axisOnly?: boolean, direction?: Options['direction'] ): string {\r\n direction = direction || options.direction;\r\n const index = direction === RTL && ! axisOnly ? 1 : direction === TTB ? 0 : -1;\r\n\r\n return ORIENTATION_MAP[ prop ] && ORIENTATION_MAP[ prop ][ index ]\r\n || prop.replace( /width|left|right/i, ( match, offset ) => {\r\n const replacement = ORIENTATION_MAP[ match.toLowerCase() ][ index ] || match;\r\n return offset > 0 ? replacement.charAt( 0 ).toUpperCase() + replacement.slice( 1 ) : replacement;\r\n } );\r\n }\r\n\r\n /**\r\n * Orients the value towards the current direction.\r\n *\r\n * @param value - A value to orient.\r\n *\r\n * @return The oriented value.\r\n */\r\n function orient( value: number ): number {\r\n return value * ( options.direction === RTL ? 1 : -1 );\r\n }\r\n\r\n return {\r\n resolve,\r\n orient,\r\n };\r\n}\r\n","const ARROW = 'Arrow';\r\nexport const ARROW_LEFT = `${ ARROW }Left`;\r\nexport const ARROW_RIGHT = `${ ARROW }Right`;\r\nexport const ARROW_UP = `${ ARROW }Up`;\r\nexport const ARROW_DOWN = `${ ARROW }Down`;","/**\r\n * The project code.\r\n *\r\n * @since 3.0.0\r\n */\r\nexport const PROJECT_CODE = 'splide';\r\n\r\n/**\r\n * The data attribute prefix.\r\n *\r\n * @since 3.0.0\r\n */\r\nexport const DATA_ATTRIBUTE = `data-${ PROJECT_CODE }`;\r\n","import { PROJECT_CODE } from './project';\r\n\r\n/**\r\n * The prefix for classes.\r\n *\r\n * @since 4.1.0\r\n */\r\nconst CLASS_PREFIX = `${ PROJECT_CODE }__`;\r\n\r\n/**\r\n * The prefix for status classes.\r\n *\r\n * @since 4.1.0\r\n */\r\nconst STATUS_CLASS_PREFIX = 'is-';\r\n\r\n/**\r\n * All classes as constants.\r\n */\r\nexport const CLASS_ROOT = PROJECT_CODE;\r\nexport const CLASS_TRACK = `${ CLASS_PREFIX }track`;\r\nexport const CLASS_LIST = `${ CLASS_PREFIX }list`;\r\nexport const CLASS_SLIDE = `${ CLASS_PREFIX }slide`;\r\nexport const CLASS_CLONE = `${ CLASS_SLIDE }--clone`;\r\nexport const CLASS_CONTAINER = `${ CLASS_SLIDE }__container`;\r\nexport const CLASS_ARROWS = `${ CLASS_PREFIX }arrows`;\r\nexport const CLASS_ARROW = `${ CLASS_PREFIX }arrow`;\r\nexport const CLASS_ARROW_PREV = `${ CLASS_ARROW }--prev`;\r\nexport const CLASS_ARROW_NEXT = `${ CLASS_ARROW }--next`;\r\nexport const CLASS_PAGINATION = `${ CLASS_PREFIX }pagination`;\r\nexport const CLASS_PAGINATION_PAGE = `${ CLASS_PAGINATION }__page`;\r\nexport const CLASS_PROGRESS = `${ CLASS_PREFIX }progress`;\r\nexport const CLASS_PROGRESS_BAR = `${ CLASS_PROGRESS }__bar`;\r\nexport const CLASS_TOGGLE = `${ CLASS_PREFIX }toggle`;\r\nexport const CLASS_TOGGLE_PLAY = `${ CLASS_TOGGLE }__play`;\r\nexport const CLASS_TOGGLE_PAUSE = `${ CLASS_TOGGLE }__pause`;\r\nexport const CLASS_SPINNER = `${ CLASS_PREFIX }spinner`;\r\nexport const CLASS_SR = `${ CLASS_PREFIX }sr`;\r\nexport const CLASS_INITIALIZED = `${ STATUS_CLASS_PREFIX }initialized`;\r\nexport const CLASS_ACTIVE = `${ STATUS_CLASS_PREFIX }active`;\r\nexport const CLASS_PREV = `${ STATUS_CLASS_PREFIX }prev`;\r\nexport const CLASS_NEXT = `${ STATUS_CLASS_PREFIX }next`;\r\nexport const CLASS_VISIBLE = `${ STATUS_CLASS_PREFIX }visible`;\r\nexport const CLASS_LOADING = `${ STATUS_CLASS_PREFIX }loading`;\r\nexport const CLASS_FOCUS_IN = `${ STATUS_CLASS_PREFIX }focus-in`;\r\nexport const CLASS_OVERFLOW = `${ STATUS_CLASS_PREFIX }overflow`;\r\n\r\n/**\r\n * The array with all status classes except for `is-initialized`.\r\n *\r\n * @since 3.0.0\r\n */\r\nexport const STATUS_CLASSES = [\r\n CLASS_ACTIVE,\r\n CLASS_VISIBLE,\r\n CLASS_PREV,\r\n CLASS_NEXT,\r\n CLASS_LOADING,\r\n CLASS_FOCUS_IN,\r\n CLASS_OVERFLOW,\r\n];\r\n\r\n/**\r\n * The collection of classes for elements that Splide dynamically creates.\r\n *\r\n * @since 3.0.0\r\n */\r\nexport const CLASSES = {\r\n slide : CLASS_SLIDE,\r\n clone : CLASS_CLONE,\r\n arrows : CLASS_ARROWS,\r\n arrow : CLASS_ARROW,\r\n prev : CLASS_ARROW_PREV,\r\n next : CLASS_ARROW_NEXT,\r\n pagination: CLASS_PAGINATION,\r\n page : CLASS_PAGINATION_PAGE,\r\n spinner : CLASS_SPINNER,\r\n};\r\n","import { Options } from '../types';\r\nimport { CLASSES } from './classes';\r\nimport { I18N } from './i18n';\r\n\r\n\r\n/**\r\n * The collection of default options.\r\n * Note that this collection does not contain all options.\r\n *\r\n * @since 3.0.0\r\n */\r\nexport const DEFAULTS: Options = {\r\n type : 'slide',\r\n role : 'region',\r\n speed : 400,\r\n perPage : 1,\r\n cloneStatus : true,\r\n arrows : true,\r\n pagination : true,\r\n paginationKeyboard: true,\r\n interval : 5000,\r\n pauseOnHover : true,\r\n pauseOnFocus : true,\r\n resetProgress : true,\r\n easing : 'cubic-bezier(0.25, 1, 0.5, 1)',\r\n drag : true,\r\n direction : 'ltr',\r\n trimSpace : true,\r\n focusableNodes : 'a, button, textarea, input, select, iframe',\r\n live : true,\r\n classes : CLASSES,\r\n i18n : I18N,\r\n reducedMotion: {\r\n speed : 0,\r\n rewindSpeed: 0,\r\n autoplay : 'pause',\r\n },\r\n};","/**\r\n * The collection of i18n strings.\r\n *\r\n * @since 3.0.0\r\n */\r\nexport const I18N = {\r\n prev : 'Previous slide',\r\n next : 'Next slide',\r\n first : 'Go to first slide',\r\n last : 'Go to last slide',\r\n slideX : 'Go to slide %s',\r\n pageX : 'Go to page %s',\r\n play : 'Start autoplay',\r\n pause : 'Pause autoplay',\r\n carousel : 'carousel',\r\n slide : 'slide',\r\n select : 'Select a slide to show',\r\n slideLabel: '%s of %s', // [ slide number ] / [ slide size ]\r\n};\r\n","/**\r\n * The slice method for an array-like object.\r\n *\r\n * @param arrayLike - An array-like object.\r\n * @param start - Optional. A start index.\r\n * @param end - Optional. A end index.\r\n *\r\n * @return An array with sliced elements.\r\n */\r\nexport function slice<T>( arrayLike: ArrayLike<T>, start?: number, end?: number ): T[] {\r\n return Array.prototype.slice.call( arrayLike, start, end );\r\n}\r\n","import { AnyFunction, ShiftN } from '../../../types';\r\nimport { slice } from '../../arrayLike';\r\n\r\n\r\n/**\r\n * Create a function where provided arguments are bound.\r\n * `this` parameter will be always null.\r\n *\r\n * @param func - A function.\r\n * @param args - Arguments to bind to the function.\r\n *\r\n * @return A function where arguments are bound.\r\n */\r\nexport function apply<F extends AnyFunction, A extends any[] = any[]>(\r\n func: F,\r\n ...args: A\r\n): ( ...args: ShiftN<Parameters<F>, A[\"length\"]> ) => ReturnType<F>;\r\n\r\n/**\r\n * Create a function where provided arguments are bound.\r\n * `this` parameter will be always null.\r\n *\r\n * @param func - A function.\r\n */\r\nexport function apply( func: AnyFunction ): any {\r\n // eslint-disable-next-line prefer-rest-params, prefer-spread\r\n return func.bind( null, ...slice( arguments, 1 ) );\r\n}\r\n","import { AnyFunction } from '../../types';\r\nimport { apply } from '../function';\r\n\r\n\r\n/**\r\n * The alias of the type check function.\r\n *\r\n * @param type - A type.\r\n * @param subject - A subject to check.\r\n *\r\n * @return `true` if the subject is the specified type.\r\n */\r\nfunction typeOf( type: string, subject: unknown ): boolean {\r\n return typeof subject === type;\r\n}\r\n\r\n/**\r\n * Checks if the given subject is an object or not.\r\n *\r\n * @param subject - A subject to check.\r\n *\r\n * @return `true` if the subject is an object, or otherwise `false`.\r\n */\r\nexport function isObject( subject: unknown ): subject is object {\r\n return ! isNull( subject ) && typeOf( 'object', subject );\r\n}\r\n\r\n/**\r\n * Checks if the given subject is an array or not.\r\n *\r\n * @param subject - A subject to check.\r\n *\r\n * @return `true` if the subject is an array, or otherwise `false`.\r\n */\r\nexport const isArray: <T>( subject: unknown ) => subject is T[] = Array.isArray;\r\n\r\n/**\r\n * Checks if the given subject is a function or not.\r\n *\r\n * @param subject - A subject to check.\r\n *\r\n * @return `true` if the subject is a function, or otherwise `false`.\r\n */\r\nexport const isFunction = <( subject: unknown ) => subject is AnyFunction>apply( typeOf, 'function' );\r\n\r\n/**\r\n * Checks if the given subject is a string or not.\r\n *\r\n * @param subject - A subject to check.\r\n *\r\n * @return `true` if the subject is a string, or otherwise `false`.\r\n */\r\nexport const isString = <( subject: unknown ) => subject is string>apply( typeOf, 'string' );\r\n\r\n/**\r\n * Checks if the given subject is `undefined` or not.\r\n *\r\n * @param subject - A subject to check.\r\n *\r\n * @return `true` if the subject is `undefined`, or otherwise `false`.\r\n */\r\nexport const isUndefined = <( subject: unknown ) => subject is undefined>apply( typeOf, 'undefined' );\r\n\r\n/**\r\n * Checks if the given subject is `null` or not.\r\n *\r\n * @param subject - A subject to check.\r\n *\r\n * @return `true` if the subject is `null`, or otherwise `false`.\r\n */\r\nexport function isNull( subject: unknown ): subject is null {\r\n return subject === null;\r\n}\r\n\r\n/**\r\n * Checks if the given subject is an HTMLElement instance or not.\r\n * This method takes into account which `window` the node belongs to.\r\n *\r\n * @param subject - A subject to check.\r\n *\r\n * @return `true` if the subject is an HTMLElement instance, or otherwise `false`.\r\n */\r\nexport function isHTMLElement( subject: unknown ): subject is HTMLElement {\r\n try {\r\n return subject instanceof ( ( subject as Node ).ownerDocument.defaultView || window ).HTMLElement;\r\n } catch ( e ) {\r\n return false;\r\n }\r\n}","import { isArray } from '../../type/type';\r\n\r\n\r\n/**\r\n * Push the provided value to an array if the value is not an array.\r\n *\r\n * @param value - A value to push.\r\n *\r\n * @return An array containing the value, or the value itself if it is already an array.\r\n */\r\nexport function toArray<T>( value: T | T[] ): T[] {\r\n return isArray( value ) ? value : [ value ];\r\n}\r\n","import { toArray } from '../toArray/toArray';\r\n\r\n\r\n/**\r\n * The extended `Array#forEach` method that accepts a single value as an argument.\r\n *\r\n * @param values - A value or values to iterate over.\r\n * @param iteratee - An iteratee function.\r\n */\r\nexport function forEach<T>( values: T | T[], iteratee: ( value: T, index: number, array: T[] ) => void ): void {\r\n toArray( values ).forEach( iteratee );\r\n}\r\n","import { toArray } from '../toArray/toArray';\r\n\r\n\r\n/**\r\n * Extended `Array#push()` that accepts an item or an array with items.\r\n *\r\n * @param array - An array to push items.\r\n * @param items - An item or items to push.\r\n *\r\n * @return A provided array itself.\r\n */\r\nexport function push<T>( array: T[], items: T | T[] ): T[] {\r\n array.push( ...toArray( items ) );\r\n return array;\r\n}\r\n","import { isHTMLElement } from '../../type/type';\r\n\r\n\r\n/**\r\n * Checks if the element can be selected by the provided selector or not.\r\n *\r\n * @param elm - An element to check.\r\n * @param selector - A selector to test.\r\n *\r\n * @return `true` if the selector matches the element, or otherwise `false`.\r\n */\r\nexport function matches( elm: Element | EventTarget, selector: string ): boolean {\r\n return isHTMLElement( elm ) && ( elm[ 'msMatchesSelector' ] || elm.matches ).call( elm, selector );\r\n}\r\n","import { children } from '../children/children';\r\n\r\n\r\n/**\r\n * Returns a child element that matches the specified tag or class name.\r\n *\r\n * @param parent - A parent element.\r\n * @param selector - A selector to filter children.\r\n *\r\n * @return A matched child element if available, or otherwise `undefined`.\r\n */\r\nexport function child<E extends HTMLElement>( parent: HTMLElement, selector?: string ): E | undefined {\r\n return selector ? children<E>( parent, selector )[ 0 ] : parent.firstElementChild as E;\r\n}\r\n","import { slice } from '../../arrayLike';\r\nimport { matches } from '../matches/matches';\r\n\r\n\r\n/**\r\n * Finds children that has the specified tag or class name.\r\n *\r\n * @param parent - A parent element.\r\n * @param selector - Optional. A selector to filter children.\r\n *\r\n * @return An array with filtered children.\r\n */\r\nexport function children<E extends HTMLElement>( parent: HTMLElement, selector?: string ): E[] {\r\n const children = parent ? slice( parent.children ) as E[] : [];\r\n return selector ? children.filter( child => matches( child, selector ) ) : children;\r\n}\r\n","/**\r\n * An alias of `Object.keys()`\r\n */\r\nexport const ownKeys = Object.keys;","import { ownKeys } from '../ownKeys/ownKeys';\r\n\r\n\r\n/**\r\n * Iterates over the provided object by own enumerable keys with calling the iteratee function.\r\n *\r\n * @param object - An object to iterate over.\r\n * @param iteratee - An iteratee function that takes `value` and `key` as arguments.\r\n * @param right - If `true`, the method iterates over the object from the end like `forEachRight()`.\r\n *\r\n * @return A provided object itself.\r\n */\r\nexport function forOwn<T extends object>(\r\n object: T,\r\n iteratee: ( value: T[ keyof T ], key: string ) => boolean | void,\r\n right?: boolean\r\n): T {\r\n if ( object ) {\r\n ( right ? ownKeys( object ).reverse() : ownKeys( object ) ).forEach( key => {\r\n key !== '__proto__' && iteratee( object[ key ], key );\r\n } );\r\n }\r\n\r\n return object;\r\n}\r\n","import { Cast, Head, Push, Resolve, Shift } from '../../../types';\r\nimport { slice } from '../../arrayLike';\r\nimport { forOwn } from '../forOwn/forOwn';\r\n\r\n\r\n/**\r\n * Assigns U to T.\r\n *\r\n * @typeParam T - An object to assign to.\r\n * @typeParam U - An object to assign.\r\n *\r\n * @return An assigned object type.\r\n */\r\nexport type Assign<T, U> = Omit<T, keyof U> & U;\r\n\r\n/**\r\n * Recursively assigns U[] to T.\r\n *\r\n * @typeParam T - An object to assign to.\r\n * @typeParam U - A tuple contains objects.\r\n *\r\n * @return An assigned object type.\r\n */\r\nexport type Assigned<T extends object, U extends object[], N extends number, C extends any[] = []> = {\r\n 0: T,\r\n 1: Assigned<Assign<T, Head<U>>, Shift<U>, N, Push<C>>,\r\n}[ C['length'] extends N ? 0 : 1 ] extends infer A ? Cast<A, any> : never;\r\n\r\nexport function assign<T extends object>( object: T ): T;\r\n\r\nexport function assign<T extends object, U extends object[]>(\r\n object: T,\r\n ...sources: U\r\n): Resolve<Assigned<T, U, U['length']>>\r\n\r\n/**\r\n * Assigns all own enumerable properties of all source objects to the provided object.\r\n *\r\n * @param object - An object to assign properties to.\r\n *\r\n * @return An object assigned properties of the sources to.\r\n */\r\nexport function assign<T extends object>( object: T ): any {\r\n // eslint-disable-next-line prefer-rest-params, prefer-spread\r\n slice( arguments, 1 ).forEach( source => {\r\n forOwn( source, ( value, key ) => {\r\n object[ key ] = source[ key ];\r\n } );\r\n } );\r\n\r\n return object;\r\n}\r\n","import { Cast, Head, Push, Resolve, Shift } from '../../../types';\r\nimport { slice } from '../../arrayLike';\r\nimport { isArray, isObject } from '../../type/type';\r\nimport { forOwn } from '../forOwn/forOwn';\r\n\r\n\r\n/**\r\n * Merges U to T.\r\n *\r\n * @typeParam T - An object to merge U into.\r\n * @typeParam U - An object to merge properties from.\r\n *\r\n * @return A merged object type.\r\n */\r\nexport type Merge<T extends object, U extends object> = Omit<T, keyof U> & {\r\n [ K in ( keyof T & keyof U ) ]: U[ K ] extends object\r\n ? U[ K ] extends any[]\r\n ? U[ K ]\r\n : T[ K ] extends object\r\n ? Merge<T[ K ], U[ K ]> extends infer A ? Resolve<Cast<A, object>> : never\r\n : U[ K ]\r\n : U[ K ];\r\n} & Omit<U, keyof T>;\r\n\r\n/**\r\n * Recursively merges U[] to T.\r\n *\r\n * @typeParam T - An object to assign to.\r\n * @typeParam U - A tuple contains objects.\r\n *\r\n * @return An assigned object type.\r\n */\r\nexport type Merged<T extends object, U extends object[], N extends number, C extends any[] = []> = {\r\n 0: T,\r\n 1: Merged<Merge<T, Head<U>>, Shift<U>, N, Push<C>>,\r\n}[ C['length'] extends N ? 0 : 1 ] extends infer A ? Cast<A, any> : never;\r\n\r\nexport function merge<T extends object>( object: T ): T;\r\n\r\nexport function merge<T extends object, U extends object[]>(\r\n object: T,\r\n ...sources: U\r\n): Resolve<Merged<T, U, U['length']>>\r\n\r\n/**\r\n * Recursively merges source properties to the object.\r\n * Be aware that this method does not merge arrays. They are just duplicated by `slice()`.\r\n *\r\n * @param object - An object to merge properties to.\r\n *\r\n * @return A new object with merged properties.\r\n */\r\nexport function merge<T extends object>( object: T ): any {\r\n // eslint-disable-next-line prefer-rest-params\r\n slice( arguments, 1 ).forEach( source => {\r\n forOwn( source, ( value, key ) => {\r\n if ( isArray( value ) ) {\r\n object[ key ] = value.slice();\r\n } else if ( isObject( value ) ) {\r\n object[ key ] = merge( {}, isObject( object[ key ] ) ? object[ key ] : {}, value );\r\n } else {\r\n object[ key ] = value;\r\n }\r\n } );\r\n } );\r\n\r\n return object;\r\n}\r\n","import { forEach } from '../../array';\r\n\r\n\r\n/**\r\n * Removes the provided node from its parent.\r\n *\r\n * @param nodes - A node or nodes to remove.\r\n */\r\nexport function remove( nodes: Node | Node[] ): void {\r\n forEach( nodes, node => {\r\n if ( node && node.parentNode ) {\r\n node.parentNode.removeChild( node );\r\n }\r\n } );\r\n}\r\n","import { isString } from '../../type/type';\r\n\r\n\r\n/**\r\n * Appends `px` to the provided number.\r\n * If the value is already string, just returns it.\r\n *\r\n * @param value - A value to append `px` to.\r\n *\r\n * @return A string with the CSS unit.\r\n */\r\nexport function unit( value: number | string ): string {\r\n return isString( value ) ? value : value ? `${ value }px` : '';\r\n}\r\n","import { PROJECT_CODE } from '../../../constants/project';\r\n\r\n\r\n/**\r\n * Throws an error if the provided condition is falsy.\r\n *\r\n * @param condition - If falsy, an error is thrown.\r\n * @param message - Optional. A message to display.\r\n */\r\nexport function assert( condition: any, message?: string ): void {\r\n if ( ! condition ) {\r\n throw new Error( `[${ PROJECT_CODE }] ${ message || '' }` );\r\n }\r\n}\r\n","export const { min, max, floor, ceil, abs } = Math;\r\n","/**\r\n * Converts the provided string in the camel case to the kebab case.\r\n *\r\n * @param string - A string to convert.\r\n */\r\nexport function camelToKebab( string: string ): string {\r\n return string.replace( /([a-z0-9])([A-Z])/g, '$1-$2' ).toLowerCase();\r\n}\r\n","import { pad } from '../pad/pad';\r\n\r\n\r\n/**\r\n * Stores unique IDs.\r\n *\r\n * @since 3.0.0\r\n */\r\nconst ids: Record<string, number> = {};\r\n\r\n/**\r\n * Returns a sequential unique ID as \"{ prefix }-{ number }\".\r\n *\r\n * @param prefix - A prefix for the ID.\r\n */\r\nexport function uniqueId( prefix: string ): string {\r\n return `${ prefix }${ pad( ( ids[ prefix ] = ( ids[ prefix ] || 0 ) + 1 ) ) }`;\r\n}\r\n","import { AnyFunction } from '../../types';\r\nimport { empty, forEach } from '../../utils';\r\n\r\n\r\n/**\r\n * The type for an EventTarget or an array with EventTarget objects.\r\n *\r\n * @since 4.0.0\r\n */\r\ntype EventTargets = EventTarget | EventTarget[];\r\n\r\n/**\r\n * The interface for the EventBinder object.\r\n *\r\n * @since 3.0.0\r\n */\r\nexport interface EventBinderObject {\r\n bind( target: EventTargets, events: string | string[], callback: AnyFunction, options?: AddEventListenerOptions ): void\r\n unbind( target: EventTarget | EventTarget[], events: string | string[], callback?: AnyFunction ): void;\r\n dispatch<T>( target: EventTarget, event: string, detail?: T ): void;\r\n destroy(): void;\r\n}\r\n\r\n/**\r\n * The constructor function to provide methods to subscribe native events.\r\n *\r\n * @since 4.0.0\r\n * @constructor\r\n *\r\n * @return An EventBinder object.\r\n */\r\nexport function EventBinder(): EventBinderObject {\r\n /**\r\n * Stores all handlers that listen to native events.\r\n * `[ target, event, namespace, callback, remover ]`\r\n */\r\n let listeners: [ EventTarget, string, string | undefined, AnyFunction, () => void ][] = [];\r\n\r\n /**\r\n * Listens to native events.\r\n * - `destroy()` can unsubscribe all events.\r\n * - In IE, mediaQueryList does not inherit EventTarget,\r\n * and only supports deprecated `addListener` and `removeListener`.\r\n *\r\n * @link https://developer.mozilla.org/en-US/docs/Web/API/MediaQueryList/addListener\r\n *\r\n * @param targets - A target element, the window object or the document object.\r\n * @param events - An event or events to listen to.\r\n * @param callback - A callback function.\r\n * @param options - Optional. The options to pass to the `addEventListener` function.\r\n */\r\n function bind(\r\n targets: EventTargets,\r\n events: string | string[],\r\n callback: AnyFunction,\r\n options?: AddEventListenerOptions\r\n ): void {\r\n forEachEvent( targets, events, ( target, event, namespace ) => {\r\n const isEventTarget = 'addEventListener' in target;\r\n const remover = isEventTarget\r\n ? target.removeEventListener.bind( target, event, callback, options )\r\n : target[ 'removeListener' ].bind( target, callback );\r\n\r\n isEventTarget ? target.addEventListener( event, callback, options ) : target[ 'addListener' ]( callback );\r\n listeners.push( [ target, event, namespace, callback, remover ] );\r\n } );\r\n }\r\n\r\n /**\r\n * Removes the event handler.\r\n *\r\n * @param targets - A target element, the window object or the document object.\r\n * @param events - An event name or names to remove.\r\n * @param callback - Optional. Specify the callback to remove.\r\n */\r\n function unbind( targets: EventTargets, events: string | string[], callback?: AnyFunction ): void {\r\n forEachEvent( targets, events, ( target, event, namespace ) => {\r\n listeners = listeners.filter( listener => {\r\n if ( listener[ 0 ] === target\r\n && listener[ 1 ] === event\r\n && listener[ 2 ] === namespace\r\n && ( ! callback || listener[ 3 ] === callback )\r\n ) {\r\n listener[ 4 ]();\r\n return false;\r\n }\r\n\r\n return true;\r\n } );\r\n } );\r\n }\r\n\r\n /**\r\n * Dispatches a custom event of the target.\r\n *\r\n * @param target - An event target.\r\n * @param type - An event type.\r\n * @param detail - Optional. The `detail` object of the event.\r\n *\r\n * @return An event object.\r\n */\r\n function dispatch<T>( target: EventTarget, type: string, detail?: T ): CustomEvent {\r\n let e: CustomEvent;\r\n const bubbles = true;\r\n\r\n if ( typeof CustomEvent === 'function' ) {\r\n e = new CustomEvent( type, { bubbles, detail } );\r\n } else {\r\n e = document.createEvent( 'CustomEvent' );\r\n e.initCustomEvent( type, bubbles, false, detail );\r\n }\r\n\r\n target.dispatchEvent( e );\r\n return e;\r\n }\r\n\r\n /**\r\n * Iterates over each target and event.\r\n *\r\n * @param targets - A target element, the window object or the document object.\r\n * @param events - An event name or names.\r\n * @param iteratee - An iteratee function.\r\n */\r\n function forEachEvent(\r\n targets: EventTargets,\r\n events: string | string[],\r\n iteratee: ( target: EventTarget, event: string, namespace: string | undefined ) => void\r\n ): void {\r\n forEach( targets, target => {\r\n target && forEach( events, events => {\r\n events.split( ' ' ).forEach( eventNS => {\r\n const fragment = eventNS.split( '.' );\r\n iteratee( target, fragment[ 0 ], fragment[ 1 ] );\r\n } );\r\n } );\r\n } );\r\n }\r\n\r\n /**\r\n * Removes all listeners.\r\n */\r\n function destroy(): void {\r\n listeners.forEach( data => { data[ 4 ]() } );\r\n empty( listeners );\r\n }\r\n\r\n return {\r\n bind,\r\n unbind,\r\n dispatch,\r\n destroy,\r\n };\r\n}\r\n","/**\r\n * Empties the array.\r\n *\r\n * @param array - A array to empty.\r\n */\r\nexport function empty( array: any[] ): void {\r\n array.length = 0;\r\n}\r\n","import { EVENT_DESTROY } from '../../constants/events';\r\nimport { Splide } from '../../core/Splide/Splide';\r\nimport { AnyFunction, EventMap } from '../../types';\r\nimport { apply, assign, isArray, slice, toArray } from '../../utils';\r\nimport { EventBinder, EventBinderObject } from '../EventBinder/EventBinder';\r\n\r\n\r\n/**\r\n * The interface for the EventInterface object.\r\n *\r\n * @since 3.0.0\r\n */\r\nexport interface EventInterfaceObject extends EventBinderObject {\r\n on<K extends keyof EventMap>( event: K, callback: EventMap[ K ] ): void;\r\n on( events: string | string[], callback: AnyFunction ): void;\r\n off<K extends keyof EventMap>( events: K | K[] | string | string[] ): void;\r\n emit<K extends keyof EventMap>( event: K, ...args: Parameters<EventMap[ K ]> ): void\r\n emit( event: string, ...args: any[] ): void;\r\n\r\n /** @internal */\r\n bus: DocumentFragment;\r\n}\r\n\r\n/**\r\n * The constructor function that provides interface for internal and native events.\r\n *\r\n * @since 3.0.0\r\n * @constructor\r\n *\r\n * @param Splide - A Splide instance.\r\n *\r\n * @return A collection of interface functions.\r\n */\r\nexport function EventInterface( Splide?: Splide ): EventInterfaceObject {\r\n /**\r\n * The document fragment for internal events.\r\n * Provide the Splide instance to share the bus.\r\n */\r\n const bus = Splide ? Splide.event.bus : document.createDocumentFragment();\r\n\r\n /**\r\n * An event binder object.\r\n */\r\n const binder = EventBinder();\r\n\r\n /**\r\n * Listens to an internal event or events.\r\n *\r\n * @param events - An event name or names separated by spaces. Use a dot(.) to add a namespace.\r\n * @param callback - A callback function to register.\r\n */\r\n function on( events: string | string[], callback: AnyFunction ): void {\r\n binder.bind( bus, toArray( events ).join( ' ' ), e => {\r\n callback.apply( callback, isArray( e.detail ) ? e.detail : [] );\r\n } );\r\n }\r\n\r\n /**\r\n * Triggers callback functions.\r\n * This accepts additional arguments and passes them to callbacks.\r\n *\r\n * @param event - An event name.\r\n */\r\n function emit( event: string ): void {\r\n // eslint-disable-next-line prefer-rest-params, prefer-spread\r\n binder.dispatch( bus, event, slice( arguments, 1 ) );\r\n }\r\n\r\n if ( Splide ) {\r\n Splide.event.on( EVENT_DESTROY, binder.destroy );\r\n }\r\n\r\n return assign( binder, {\r\n bus,\r\n on,\r\n off: apply( binder.unbind, bus ),\r\n emit,\r\n } );\r\n}","export const EVENT_MOUNTED = 'mounted';\r\nexport const EVENT_READY = 'ready';\r\nexport const EVENT_MOVE = 'move';\r\nexport const EVENT_MOVED = 'moved';\r\nexport const EVENT_CLICK = 'click';\r\nexport const EVENT_ACTIVE = 'active';\r\nexport const EVENT_INACTIVE = 'inactive';\r\nexport const EVENT_VISIBLE = 'visible';\r\nexport const EVENT_HIDDEN = 'hidden';\r\nexport const EVENT_REFRESH = 'refresh';\r\nexport const EVENT_UPDATED = 'updated';\r\nexport const EVENT_RESIZE = 'resize';\r\nexport const EVENT_RESIZED = 'resized';\r\nexport const EVENT_DRAG = 'drag';\r\nexport const EVENT_DRAGGING = 'dragging';\r\nexport const EVENT_DRAGGED = 'dragged';\r\nexport const EVENT_SCROLL = 'scroll';\r\nexport const EVENT_SCROLLED = 'scrolled';\r\nexport const EVENT_OVERFLOW = 'overflow';\r\nexport const EVENT_DESTROY = 'destroy';\r\nexport const EVENT_ARROWS_MOUNTED = 'arrows:mounted';\r\nexport const EVENT_ARROWS_UPDATED = 'arrows:updated';\r\nexport const EVENT_PAGINATION_MOUNTED = 'pagination:mounted';\r\nexport const EVENT_PAGINATION_UPDATED = 'pagination:updated';\r\nexport const EVENT_NAVIGATION_MOUNTED = 'navigation:mounted';\r\nexport const EVENT_AUTOPLAY_PLAY = 'autoplay:play';\r\nexport const EVENT_AUTOPLAY_PLAYING = 'autoplay:playing';\r\nexport const EVENT_AUTOPLAY_PAUSE = 'autoplay:pause';\r\nexport const EVENT_LAZYLOAD_LOADED = 'lazyload:loaded';\r\n\r\n/** @internal */\r\nexport const EVENT_SLIDE_KEYDOWN = 'sk';\r\nexport const EVENT_SHIFTED = 'sh';\r\nexport const EVENT_END_INDEX_CHANGED = 'ei';\r\n","export const CLASS_RENDERED = 'is-rendered';\r\n","import { RendererConfig } from '../types/types';\r\n\r\n\r\n/**\r\n * Default options for generating static HTML.\r\n *\r\n * @since 3.0.0\r\n */\r\nexport const RENDERER_DEFAULT_CONFIG: RendererConfig = {\r\n listTag : 'ul',\r\n slideTag: 'li',\r\n};\r\n","import { Options } from '../../types';\r\nimport { forOwn } from '../../utils';\r\n\r\n\r\ninterface Styles {\r\n [ breakpoint: string ]: {\r\n [ selector: string ]: Record<string, string | number>\r\n };\r\n}\r\n\r\n/**\r\n * The class for generating styles as a string.\r\n *\r\n * @since 3.0.0\r\n */\r\nexport class Style {\r\n /**\r\n * The collection of registered styles categorized by each breakpoint.\r\n */\r\n private readonly styles: Styles = {};\r\n\r\n /**\r\n * The ID of the slider.\r\n */\r\n private readonly id: string;\r\n\r\n /**\r\n * Holds options.\r\n */\r\n private readonly options: Options;\r\n\r\n /**\r\n * The Style constructor.\r\n *\r\n * @param id - A slider ID.\r\n * @param options - Options.\r\n */\r\n constructor( id: string, options: Options ) {\r\n this.id = id;\r\n this.options = options;\r\n }\r\n\r\n /**\r\n * Registers a CSS rule.\r\n *\r\n * @param selector - A selector.\r\n * @param prop\r\n * @param value\r\n * @param breakpoint\r\n */\r\n rule( selector: string, prop: string, value: string | number, breakpoint?: string ): void {\r\n breakpoint = breakpoint || 'default';\r\n const selectors = ( this.styles[ breakpoint ] = this.styles[ breakpoint ] || {} );\r\n const styles = ( selectors[ selector ] = selectors[ selector ] || {} );\r\n styles[ prop ] = value;\r\n }\r\n\r\n /**\r\n * Builds styles as a single string.\r\n *\r\n * @return Built styles.\r\n */\r\n build(): string {\r\n let css = '';\r\n\r\n if ( this.styles.default ) {\r\n css += this.buildSelectors( this.styles.default );\r\n }\r\n\r\n Object.keys( this.styles )\r\n .sort( ( n, m ) => this.options.mediaQuery === 'min' ? +n - +m : +m - +n )\r\n .forEach( breakpoint => {\r\n if ( breakpoint !== 'default' ) {\r\n css += `@media screen and (max-width: ${ breakpoint }px) {`;\r\n css += this.buildSelectors( this.styles[ breakpoint ] );\r\n css += `}`;\r\n }\r\n } );\r\n\r\n return css;\r\n }\r\n\r\n /**\r\n * Builds styles for each breakpoint.\r\n *\r\n * @param selectors - An object with styles.\r\n *\r\n * @return Built styles.\r\n */\r\n private buildSelectors( selectors: Record<string, Record<string, string | number>> ): string {\r\n let css = '';\r\n\r\n forOwn( selectors, ( styles, selector ) => {\r\n selector = `#${ this.id } ${ selector }`.trim();\r\n css += `${ selector } {`;\r\n\r\n forOwn( styles, ( value, prop ) => {\r\n if ( value || value === 0 ) {\r\n css += `${ prop }: ${ value };`;\r\n }\r\n } );\r\n\r\n css += '}';\r\n } );\r\n\r\n return css;\r\n }\r\n}\r\n","import { PATH, SIZE, XML_NAME_SPACE } from '../../components/Arrows/path';\r\nimport { Direction, DirectionComponent } from '../../components/Direction/Direction';\r\nimport { CLASS_ACTIVE, CLASS_CLONE, CLASS_LIST, CLASS_ROOT, CLASS_SLIDE, CLASS_TRACK } from '../../constants/classes';\r\nimport { DEFAULTS } from '../../constants/defaults';\r\nimport { TTB } from '../../constants/directions';\r\nimport { EVENT_MOUNTED } from '../../constants/events';\r\nimport { LOOP, SLIDE } from '../../constants/types';\r\nimport { EventInterface } from '../../constructors';\r\nimport { Splide } from '../../core/Splide/Splide';\r\nimport { Options } from '../../types';\r\nimport {\r\n assert,\r\n assign,\r\n camelToKebab,\r\n child,\r\n forOwn,\r\n isObject,\r\n isString,\r\n max,\r\n merge,\r\n push,\r\n queryAll,\r\n remove,\r\n uniqueId,\r\n unit,\r\n} from '../../utils';\r\nimport { CLASS_RENDERED } from '../constants/classes';\r\nimport { RENDERER_DEFAULT_CONFIG } from '../constants/defaults';\r\nimport { Style } from '../Style/Style';\r\nimport { RendererConfig, SlideContent } from '../types/types';\r\n\r\n\r\n/**\r\n * The class to generate static HTML of the slider for the first view.\r\n *\r\n * @since 3.0.0\r\n */\r\nexport class SplideRenderer {\r\n /**\r\n * Removes a style element and clones.\r\n *\r\n * @param splide - A Splide instance.\r\n */\r\n static clean( splide: Splide ): void {\r\n const { on } = EventInterface( splide );\r\n const { root } = splide;\r\n const clones = queryAll( root, `.${ CLASS_CLONE }` );\r\n\r\n on( EVENT_MOUNTED, () => {\r\n remove( child( root, 'style' ) );\r\n } );\r\n\r\n remove( clones );\r\n }\r\n\r\n /**\r\n * Holds slide contents.\r\n */\r\n private readonly contents: string[] | SlideContent[];\r\n\r\n /**\r\n * Stores data of slides.\r\n */\r\n private readonly slides: SlideContent[] = [];\r\n\r\n /**\r\n * The Direction component.\r\n */\r\n private readonly Direction: DirectionComponent;\r\n\r\n /**\r\n * Holds the Style instance.\r\n */\r\n private readonly Style: Style;\r\n\r\n /**\r\n * Holds options.\r\n */\r\n private readonly options: Options = {};\r\n\r\n /**\r\n * Holds options for this instance.\r\n */\r\n private readonly config: RendererConfig;\r\n\r\n /**\r\n * The slider ID.\r\n */\r\n private readonly id: string;\r\n\r\n /**\r\n * An array with options for each breakpoint.\r\n */\r\n private readonly breakpoints: [ string, Options ][] = [];\r\n\r\n /**\r\n * The SplideRenderer constructor.\r\n *\r\n * @param contents - An array with slide contents. Each item must be an HTML or a plain text.\r\n * @param options - Optional. Slider options.\r\n * @param config - Static default options.\r\n * @param defaults - Default options for the slider. Pass `Splide.defaults` if you are using it.\r\n */\r\n constructor( contents: string[] | SlideContent[], options?: Options, config?: RendererConfig, defaults?: Options ) {\r\n merge( DEFAULTS, defaults || {} );\r\n merge( merge( this.options, DEFAULTS ), options || {} );\r\n\r\n this.contents = contents;\r\n this.config = assign( {}, RENDERER_DEFAULT_CONFIG, config || {} );\r\n this.id = this.config.id || uniqueId( 'splide' );\r\n this.Style = new Style( this.id, this.options );\r\n this.Direction = Direction( null, null, this.options );\r\n\r\n assert( this.contents.length, 'Provide at least 1 content.' );\r\n\r\n this.init();\r\n }\r\n\r\n /**\r\n * Initializes the instance.\r\n */\r\n private init(): void {\r\n this.parseBreakpoints();\r\n this.initSlides();\r\n this.registerRootStyles();\r\n this.registerTrackStyles();\r\n this.registerSlideStyles();\r\n this.registerListStyles();\r\n }\r\n\r\n /**\r\n * Initializes slides.\r\n */\r\n private initSlides(): void {\r\n push( this.slides, this.contents.map( ( content, index ) => {\r\n content = isString( content ) ? { html: content } : content;\r\n content.styles = content.styles || {};\r\n content.attrs = content.attrs || {};\r\n\r\n this.cover( content );\r\n\r\n const classes = `${ this.options.classes.slide } ${ index === 0 ? CLASS_ACTIVE : '' }`;\r\n\r\n assign( content.attrs, {\r\n class: `${ classes } ${ content.attrs.class || '' }`.trim(),\r\n style: this.buildStyles( content.styles ),\r\n } );\r\n\r\n return content;\r\n } ) );\r\n\r\n if ( this.isLoop() ) {\r\n this.generateClones( this.slides );\r\n }\r\n }\r\n\r\n /**\r\n * Registers styles for the root element.\r\n */\r\n private registerRootStyles(): void {\r\n this.breakpoints.forEach( ( [ width, options ] ) => {\r\n this.Style.rule( ' ', 'max-width', unit( options.width ), width );\r\n } );\r\n }\r\n\r\n /**\r\n * Registers styles for the track element.\r\n */\r\n private registerTrackStyles(): void {\r\n const { Style } = this;\r\n const selector = `.${ CLASS_TRACK }`;\r\n\r\n this.breakpoints.forEach( ( [ width, options ] ) => {\r\n Style.rule( selector, this.resolve( 'paddingLeft' ), this.cssPadding( options, false ), width );\r\n Style.rule( selector, this.resolve( 'paddingRight' ), this.cssPadding( options, true ), width );\r\n Style.rule( selector, 'height', this.cssTrackHeight( options ), width );\r\n } );\r\n }\r\n\r\n /**\r\n * Registers styles for the list element.\r\n */\r\n private registerListStyles(): void {\r\n const { Style } = this;\r\n const selector = `.${ CLASS_LIST }`;\r\n\r\n this.breakpoints.forEach( ( [ width, options ] ) => {\r\n Style.rule( selector, 'transform', this.buildTranslate( options ), width );\r\n\r\n if ( ! this.cssSlideHeight( options ) ) {\r\n Style.rule( selector, 'aspect-ratio', this.cssAspectRatio( options ), width );\r\n }\r\n } );\r\n }\r\n\r\n /**\r\n * Registers styles for slides and clones.\r\n */\r\n private registerSlideStyles(): void {\r\n const { Style } = this;\r\n const selector = `.${ CLASS_SLIDE }`;\r\n\r\n this.breakpoints.forEach( ( [ width, options ] ) => {\r\n Style.rule( selector, 'width', this.cssSlideWidth( options ), width );\r\n Style.rule( selector, 'height', this.cssSlideHeight( options ) || '100%', width );\r\n Style.rule( selector, this.resolve( 'marginRight' ), unit( options.gap ) || '0px', width );\r\n Style.rule( `${ selector } > img`, 'display', options.cover ? 'none' : 'inline', width );\r\n } );\r\n }\r\n\r\n /**\r\n * Builds multiple `translateX` for the list element.\r\n *\r\n * @param options - Options for each breakpoint.\r\n *\r\n * @return A string with multiple translate functions.\r\n */\r\n private buildTranslate( options: Options ): string {\r\n const { resolve, orient } = this.Direction;\r\n const values = [];\r\n\r\n values.push( this.cssOffsetClones( options ) );\r\n values.push( this.cssOffsetGaps( options ) );\r\n\r\n if ( this.isCenter( options ) ) {\r\n values.push( this.buildCssValue( orient( -50 ), '%' ) );\r\n values.push( ...this.cssOffsetCenter( options ) );\r\n }\r\n\r\n return values\r\n .filter( Boolean )\r\n .map( value => `translate${ resolve( 'X' ) }(${ value })` )\r\n .join( ' ' );\r\n }\r\n\r\n /**\r\n * Returns offset for the list element.\r\n * This does not include gaps because it can not be converted into percent.\r\n *\r\n * @param options - Options for each breakpoint.\r\n *\r\n * @return The offset.\r\n */\r\n private cssOffsetClones( options: Options ): string {\r\n const { resolve, orient } = this.Direction;\r\n const cloneCount = this.getCloneCount();\r\n\r\n if ( this.isFixedWidth( options ) ) {\r\n const { value, unit } = this.parseCssValue( options[ resolve( 'fixedWidth' ) ] );\r\n return this.buildCssValue( orient( value ) * cloneCount, unit );\r\n }\r\n\r\n const percent = 100 * cloneCount / options.perPage;\r\n return `${ orient( percent ) }%`;\r\n }\r\n\r\n /**\r\n * Returns offset for centering the active slide.\r\n *\r\n * Note:\r\n * ( 100% + gap ) / perPage - gap\r\n * 100% / perPage + gap / perPage - gap;\r\n * 50% / perPage + ( gap / perPage - gap ) / 2;\r\n *\r\n * @param options - Options for each breakpoint.\r\n *\r\n * @return The offset.\r\n */\r\n private cssOffsetCenter( options: Options ): string[] {\r\n const { resolve, orient } = this.Direction;\r\n\r\n if ( this.isFixedWidth( options ) ) {\r\n const { value, unit } = this.parseCssValue( options[ resolve( 'fixedWidth' ) ] );\r\n return [ this.buildCssValue( orient( value / 2 ), unit ) ];\r\n }\r\n\r\n const values = [];\r\n const { perPage, gap } = options;\r\n\r\n values.push( `${ orient( 50 / perPage ) }%` );\r\n\r\n if ( gap ) {\r\n const { value, unit } = this.parseCssValue( gap );\r\n const gapOffset = ( value / perPage - value ) / 2;\r\n values.push( this.buildCssValue( orient( gapOffset ), unit ) );\r\n }\r\n\r\n return values;\r\n }\r\n\r\n /**\r\n * Returns offset for gaps.\r\n *\r\n * @param options - Options for each breakpoint.\r\n *\r\n * @return The offset as `calc()`.\r\n */\r\n private cssOffsetGaps( options: Options ): string {\r\n const cloneCount = this.getCloneCount();\r\n\r\n if ( cloneCount && options.gap ) {\r\n const { orient } = this.Direction;\r\n const { value, unit } = this.parseCssValue( options.gap );\r\n\r\n if ( this.isFixedWidth( options ) ) {\r\n return this.buildCssValue( orient( value * cloneCount ), unit );\r\n }\r\n\r\n const { perPage } = options;\r\n const gaps = cloneCount / perPage;\r\n return this.buildCssValue( orient( gaps * value ), unit );\r\n }\r\n\r\n return '';\r\n }\r\n\r\n /**\r\n * Resolves the prop for the current direction and converts it into the Kebab case.\r\n *\r\n * @param prop - A property name to resolve.\r\n *\r\n * @return A resolved property name in the Kebab case.\r\n */\r\n private resolve( prop: string ): string {\r\n return camelToKebab( this.Direction.resolve( prop ) );\r\n }\r\n\r\n /**\r\n * Returns padding in the CSS format.\r\n *\r\n * @param options - Options.\r\n * @param right - Determines whether to get padding right or left.\r\n *\r\n * @return Padding in the CSS format.\r\n */\r\n private cssPadding( options: Options, right: boolean ): string {\r\n const { padding } = options;\r\n const prop = this.Direction.resolve( right ? 'right' : 'left', true );\r\n return padding && unit( padding[ prop ] || ( isObject( padding ) ? 0 : padding ) ) || '0px';\r\n }\r\n\r\n /**\r\n * Returns height of the track element in the CSS format.\r\n *\r\n * @param options - Options.\r\n *\r\n * @return Height in the CSS format.\r\n */\r\n private cssTrackHeight( options: Options ): string {\r\n let height = '';\r\n\r\n if ( this.isVertical() ) {\r\n height = this.cssHeight( options );\r\n assert( height, '\"height\" is missing.' );\r\n height = `calc(${ height } - ${ this.cssPadding( options, false ) } - ${ this.cssPadding( options, true ) })`;\r\n }\r\n\r\n return height;\r\n }\r\n\r\n /**\r\n * Returns height provided though options in the CSS format.\r\n *\r\n * @param options - Options.\r\n *\r\n * @return Height in the CSS format.\r\n */\r\n private cssHeight( options: Options ): string {\r\n return unit( options.height );\r\n }\r\n\r\n /**\r\n * Returns width of each slide in the CSS format.\r\n *\r\n * @param options - Options.\r\n *\r\n * @return Width in the CSS format.\r\n */\r\n private cssSlideWidth( options: Options ): string {\r\n return options.autoWidth\r\n ? ''\r\n : unit( options.fixedWidth ) || ( this.isVertical() ? '' : this.cssSlideSize( options ) );\r\n }\r\n\r\n /**\r\n * Returns height of each slide in the CSS format.\r\n *\r\n * @param options - Options.\r\n *\r\n * @return Height in the CSS format.\r\n */\r\n private cssSlideHeight( options: Options ): string {\r\n return unit( options.fixedHeight )\r\n || ( this.isVertical()\r\n ? ( options.autoHeight ? '' : this.cssSlideSize( options ) )\r\n : this.cssHeight( options )\r\n );\r\n }\r\n\r\n /**\r\n * Returns width or height of each slide in the CSS format, considering the current direction.\r\n *\r\n * @param options - Options.\r\n *\r\n * @return Width or height in the CSS format.\r\n */\r\n private cssSlideSize( options: Options ): string {\r\n const gap = unit( options.gap );\r\n return `calc((100%${ gap && ` + ${ gap }` })/${ options.perPage || 1 }${ gap && ` - ${ gap }` })`;\r\n }\r\n\r\n /**\r\n * Returns the aspectRatio value to simulate the `heightRatio` option.\r\n *\r\n * @param options - Options.\r\n *\r\n * @return aspectRatio in the CSS format.\r\n */\r\n private cssAspectRatio( options: Options ): string {\r\n const { heightRatio } = options;\r\n return heightRatio ? `${ 1 / heightRatio }` : '';\r\n }\r\n\r\n /**\r\n * Builds the css value by the provided value and unit.\r\n *\r\n * @param value - A value.\r\n * @param unit - A CSS unit.\r\n *\r\n * @return A built value for a CSS value.\r\n */\r\n private buildCssValue( value: number, unit: string ): string {\r\n return `${ value }${ unit }`;\r\n }\r\n\r\n /**\r\n * Parses the CSS value into number and unit.\r\n *\r\n * @param value - A value to parse.\r\n *\r\n * @return An object with value and unit.\r\n */\r\n private parseCssValue( value: string | number ): { value: number, unit: string } {\r\n if ( isString( value ) ) {\r\n const number = parseFloat( value ) || 0;\r\n const unit = value.replace( /\\d*(\\.\\d*)?/, '' ) || 'px';\r\n return { value: number, unit };\r\n }\r\n\r\n return { value, unit: 'px' };\r\n }\r\n\r\n /**\r\n * Parses breakpoints and generate options for each breakpoint.\r\n */\r\n private parseBreakpoints(): void {\r\n const { breakpoints } = this.options;\r\n\r\n this.breakpoints.push( [ 'default', this.options ] );\r\n\r\n if ( breakpoints ) {\r\n forOwn( breakpoints, ( options, width ) => {\r\n this.breakpoints.push( [ width, merge( merge( {}, this.options ), options ) ] );\r\n } );\r\n }\r\n }\r\n\r\n /**\r\n * Checks if the slide width is fixed or not.\r\n *\r\n * @return `true` if the slide width is fixed, or otherwise `false`.\r\n */\r\n private isFixedWidth( options: Options ): boolean {\r\n return !! options[ this.Direction.resolve( 'fixedWidth' ) ];\r\n }\r\n\r\n /**\r\n * Checks if the slider type is loop or not.\r\n *\r\n * @return `true` if the slider type is loop, or otherwise `false`.\r\n */\r\n private isLoop(): boolean {\r\n return this.options.type === LOOP;\r\n }\r\n\r\n /**\r\n * Checks if the active slide should be centered or not.\r\n *\r\n * @return `true` if the slide should be centered, or otherwise `false`.\r\n */\r\n private isCenter( options: Options ): boolean {\r\n if( options.focus === 'center' ) {\r\n if ( this.isLoop() ) {\r\n return true;\r\n }\r\n\r\n if ( this.options.type === SLIDE ) {\r\n return ! this.options.trimSpace;\r\n }\r\n }\r\n\r\n return false;\r\n }\r\n\r\n /**\r\n * Checks if the direction is TTB or not.\r\n *\r\n * @return `true` if the direction is TTB, or otherwise `false`.\r\n */\r\n private isVertical(): boolean {\r\n return this.options.direction === TTB;\r\n }\r\n\r\n /**\r\n * Builds classes of the root element.\r\n *\r\n * @return Classes for the root element as a single string.\r\n */\r\n private buildClasses(): string {\r\n const { options } = this;\r\n\r\n return [\r\n CLASS_ROOT,\r\n `${ CLASS_ROOT }--${ options.type }`,\r\n `${ CLASS_ROOT }--${ options.direction }`,\r\n options.drag && `${ CLASS_ROOT }--draggable`,\r\n options.isNavigation && `${ CLASS_ROOT }--nav`,\r\n CLASS_ACTIVE,\r\n ! this.config.hidden && CLASS_RENDERED,\r\n ].filter( Boolean ).join( ' ' );\r\n }\r\n\r\n /**\r\n * Converts provided attributes into a single string.\r\n *\r\n * @param attrs - An object with attributes.\r\n *\r\n * @return A built string.\r\n */\r\n private buildAttrs( attrs: Record<string, string | number | boolean> ): string {\r\n let attr = '';\r\n\r\n forOwn( attrs, ( value, key ) => {\r\n attr += value ? ` ${ camelToKebab( key ) }=\"${ value }\"` : '';\r\n } );\r\n\r\n return attr.trim();\r\n }\r\n\r\n /**\r\n * Converts provided styles into a single string.\r\n *\r\n * @param styles - An object with styles.\r\n *\r\n * @return A built string.\r\n */\r\n private buildStyles( styles: Record<string, string | number> ): string {\r\n let style = '';\r\n\r\n forOwn( styles, ( value, key ) => {\r\n style += ` ${ camelToKebab( key ) }:${ value };`;\r\n } );\r\n\r\n return style.trim();\r\n }\r\n\r\n /**\r\n * Generates HTML of slides with inserting provided contents.\r\n *\r\n * @return The HTML for all slides and clones.\r\n */\r\n private renderSlides(): string {\r\n const { slideTag: tag } = this.config;\r\n\r\n return this.slides.map( content => {\r\n return `<${ tag } ${ this.buildAttrs( content.attrs ) }>${ content.html || '' }</${ tag }>`;\r\n } ).join( '' );\r\n }\r\n\r\n /**\r\n * Add the `background` style for the cover mode.\r\n *\r\n * @param content - A slide content.\r\n */\r\n private cover( content: SlideContent ): void {\r\n const { styles, html = '' } = content;\r\n\r\n if ( this.options.cover && ! this.options.lazyLoad ) {\r\n const src = html.match( /<img.*?src\\s*=\\s*(['\"])(.+?)\\1.*?>/ );\r\n\r\n if ( src && src[ 2 ] ) {\r\n styles.background = `center/cover no-repeat url('${ src[ 2 ] }')`;\r\n }\r\n }\r\n }\r\n\r\n /**\r\n * Generates clones.\r\n *\r\n * @param contents - An array with SlideContent objects.\r\n */\r\n private generateClones( contents: SlideContent[] ): void {\r\n const { classes } = this.options;\r\n const count = this.getCloneCount();\r\n const slides = contents.slice();\r\n\r\n while ( slides.length < count ) {\r\n push( slides, slides );\r\n }\r\n\r\n push( slides.slice( -count ).reverse(), slides.slice( 0, count ) ).forEach( ( content, index ) => {\r\n const attrs = assign( {}, content.attrs, { class: `${ content.attrs.class } ${ classes.clone }` } );\r\n const clone = assign( {}, content, { attrs } );\r\n index < count ? contents.unshift( clone ) : contents.push( clone );\r\n } );\r\n }\r\n\r\n /**\r\n * Returns the number of clones to generate.\r\n *\r\n * @return A number of clones.\r\n */\r\n private getCloneCount(): number {\r\n if ( this.isLoop() ) {\r\n const { options } = this;\r\n\r\n if ( options.clones ) {\r\n return options.clones;\r\n }\r\n\r\n const perPage = max( ...this.breakpoints.map( ( [ , options ] ) => options.perPage ) );\r\n return perPage * ( ( options.flickMaxPages || 1 ) + 1 );\r\n }\r\n\r\n return 0;\r\n }\r\n\r\n /**\r\n * Generates arrows and the wrapper element.\r\n *\r\n * @return The HTML for arrows.\r\n */\r\n private renderArrows(): string {\r\n let html = '';\r\n\r\n html += `<div class=\"${ this.options.classes.arrows }\">`;\r\n html += this.renderArrow( true );\r\n html += this.renderArrow( false );\r\n html += `</div>`;\r\n\r\n return html;\r\n }\r\n\r\n /**\r\n * Generates an arrow HTML.\r\n * Some attributes are temporary, and Splide changes them after mount.\r\n *\r\n * @param prev - Options for each breakpoint.\r\n *\r\n * @return The HTML for the prev or next arrow.\r\n */\r\n private renderArrow( prev: boolean ): string {\r\n const { classes, i18n } = this.options;\r\n const attrs = {\r\n class : `${ classes.arrow } ${ prev ? classes.prev : classes.next }`,\r\n type : 'button',\r\n ariaLabel: prev ? i18n.prev : i18n.next,\r\n };\r\n\r\n return `<button ${ this.buildAttrs( attrs ) }>`\r\n +\t`<svg xmlns=\"${ XML_NAME_SPACE }\" viewBox=\"0 0 ${ SIZE } ${ SIZE }\" width=\"${ SIZE }\" height=\"${ SIZE }\">`\r\n + `<path d=\"${ this.options.arrowPath || PATH }\" />`\r\n + `</svg>`\r\n + `</button>`;\r\n }\r\n\r\n /**\r\n * Returns the HTML of the slider.\r\n *\r\n * @return The generated HTML.\r\n */\r\n html(): string {\r\n const { rootClass, listTag, arrows, beforeTrack, afterTrack, slider, beforeSlider, afterSlider } = this.config;\r\n\r\n let html = '';\r\n\r\n html += `<div id=\"${ this.id }\" class=\"${ this.buildClasses() } ${ rootClass || '' }\">`;\r\n html += `<style>${ this.Style.build() }</style>`;\r\n\r\n if ( slider ) {\r\n html += beforeSlider || '';\r\n html += `<div class=\"splide__slider\">`;\r\n }\r\n\r\n html += beforeTrack || '';\r\n\r\n if ( arrows ) {\r\n html += this.renderArrows();\r\n }\r\n\r\n html += `<div class=\"splide__track\">`;\r\n html += `<${ listTag } class=\"splide__list\">`;\r\n\r\n html += this.renderSlides();\r\n\r\n html += `</${ listTag }>`;\r\n html += `</div>`; // .track\r\n\r\n html += afterTrack || '';\r\n\r\n if ( slider ) {\r\n html += `</div>`;\r\n html += afterSlider || '';\r\n }\r\n\r\n html += `</div>`; // .splide\r\n\r\n return html;\r\n }\r\n}\r\n","/**\r\n * Pads the number with 0.\r\n *\r\n * @param number - A number to pad.\r\n *\r\n * @return string - Padded number.\r\n */\r\nexport function pad( number: number ): string {\r\n return number < 10 ? `0${ number }` : `${ number }`;\r\n}\r\n","import { slice } from '../../arrayLike';\r\n\r\n\r\n/**\r\n * Returns elements that match the provided selector.\r\n *\r\n * @param parent - A parent element to start searching from.\r\n * @param selector - A selector to query.\r\n *\r\n * @return An array with matched elements.\r\n */\r\nexport function queryAll<E extends Element = Element>( parent: Element | Document, selector?: string ): E[] {\r\n return selector ? slice<E>( parent.querySelectorAll( selector ) ) : [];\r\n}\r\n","/**\r\n * The type for the regular slider.\r\n *\r\n * @since 3.0.0\r\n */\r\nexport const SLIDE = 'slide';\r\n\r\n/**\r\n * The type for the carousel slider.\r\n *\r\n * @since 3.0.0\r\n */\r\nexport const LOOP = 'loop';\r\n\r\n/**\r\n * The type for the fade slider that can not have multiple slides in a page.\r\n *\r\n * @since 3.0.0\r\n */\r\nexport const FADE = 'fade';\r\n"],"names":["RTL","TTB","ORIENTATION_MAP","width","left","right","x","X","Y","ArrowLeft","ARROW","ArrowRight","Direction","Splide","Components","options","resolve","prop","axisOnly","direction","index","replace","match","offset","replacement","toLowerCase","charAt","toUpperCase","slice","orient","value","PROJECT_CODE","CLASS_PREFIX","CLASS_ROOT","CLASS_TRACK","CLASS_LIST","CLASS_SLIDE","CLASS_CLONE","CLASS_ARROW","CLASS_PAGINATION","CLASS_ACTIVE","STATUS_CLASS_PREFIX","DEFAULTS","type","role","speed","perPage","cloneStatus","arrows","pagination","paginationKeyboard","interval","pauseOnHover","pauseOnFocus","resetProgress","easing","drag","trimSpace","focusableNodes","live","classes","slide","clone","arrow","prev","next","page","spinner","i18n","first","last","slideX","pageX","play","pause","carousel","select","slideLabel","reducedMotion","rewindSpeed","autoplay","arrayLike","start","end","Array","prototype","call","apply","func","bind","arguments","typeOf","subject","isObject","isArray","isString","toArray","forEach","values","iteratee","push","array","items","matches","elm","selector","ownerDocument","defaultView","window","HTMLElement","e","child","parent","children","filter","firstElementChild","ownKeys","Object","keys","forOwn","object","reverse","key","assign","source","merge","remove","nodes","node","parentNode","removeChild","unit","assert","condition","message","Error","Math","min","max","floor","ceil","abs","camelToKebab","string","ids","EventBinder","listeners","forEachEvent","targets","events","target","split","eventNS","fragment","callback","event","namespace","isEventTarget","remover","removeEventListener","addEventListener","unbind","listener","dispatch","detail","CustomEvent","bubbles","document","createEvent","initCustomEvent","dispatchEvent","destroy","data","length","EventInterface","bus","createDocumentFragment","binder","on","join","off","emit","RENDERER_DEFAULT_CONFIG","listTag","slideTag","Style","id","this","styles","rule","breakpoint","selectors","build","_this","css","default","buildSelectors","sort","n","m","mediaQuery","_this2","trim","SplideRenderer","contents","config","defaults","slides","breakpoints","prefix","number","init","clean","splide","root","clones","querySelectorAll","parseBreakpoints","initSlides","registerRootStyles","registerTrackStyles","registerSlideStyles","registerListStyles","_this3","map","content","html","attrs","cover","class","style","buildStyles","isLoop","generateClones","_this4","_ref","_this5","_ref2","cssPadding","cssTrackHeight","_this6","_ref3","buildTranslate","cssSlideHeight","cssAspectRatio","_this7","_ref4","cssSlideWidth","gap","_this$Direction","cssOffsetClones","cssOffsetGaps","isCenter","buildCssValue","cssOffsetCenter","Boolean","_this$Direction2","cloneCount","getCloneCount","isFixedWidth","_this$parseCssValue","parseCssValue","_this$Direction3","_this$parseCssValue2","_this$parseCssValue3","_this$parseCssValue4","padding","height","isVertical","cssHeight","autoWidth","fixedWidth","cssSlideSize","fixedHeight","autoHeight","heightRatio","parseFloat","_this8","focus","buildClasses","isNavigation","hidden","buildAttrs","attr","renderSlides","_this9","tag","_content$html","lazyLoad","src","background","count","unshift","_ref5","flickMaxPages","renderArrows","renderArrow","_this$options","ariaLabel","arrowPath","_this$config","rootClass","beforeTrack","afterTrack","slider","beforeSlider","afterSlider"],"mappings":"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"}