UNPKG

324 kBSource Map (JSON)View Raw
1{"version":3,"file":"flicking.esm.js","sources":["../src/consts.ts","../src/utils.ts","../src/components/Panel.ts","../src/components/PanelManager.ts","../src/states/State.ts","../src/states/IdleState.ts","../src/states/HoldingState.ts","../src/states/DraggingState.ts","../src/states/AnimatingState.ts","../src/states/DisabledState.ts","../src/components/StateMachine.ts","../src/moves/MoveType.ts","../src/moves/Snap.ts","../src/moves/FreeScroll.ts","../src/components/Viewport.ts","../src/Flicking.ts"],"sourcesContent":["/**\n * Copyright (c) 2015 NAVER Corp.\n * egjs projects are licensed under the MIT license\n */\n\nimport { FlickingOptions, EventType, Direction, AxesEventType, StateType, MoveTypeSnapOption, MoveTypeFreeScrollOption, FlickingMethodsKeys } from \"./types\";\n\nexport const MOVE_TYPE: {\n SNAP: \"snap\";\n FREE_SCROLL: \"freeScroll\";\n} = {\n SNAP: \"snap\",\n FREE_SCROLL: \"freeScroll\",\n};\n\nexport const DEFAULT_MOVE_TYPE_OPTIONS: {\n snap: MoveTypeSnapOption,\n freeScroll: MoveTypeFreeScrollOption,\n} = {\n snap: {\n type: \"snap\",\n count: 1,\n },\n freeScroll: {\n type: \"freeScroll\",\n },\n};\nexport const isBrowser = typeof document !== \"undefined\";\n\n/**\n * Default options for creating Flicking.\n * @ko 플리킹을 만들 때 사용하는 기본 옵션들\n * @private\n * @memberof eg.Flicking\n */\nexport const DEFAULT_OPTIONS: Readonly<FlickingOptions> = {\n classPrefix: \"eg-flick\",\n deceleration: 0.0075,\n horizontal: true,\n circular: false,\n infinite: false,\n infiniteThreshold: 0,\n lastIndex: Infinity,\n threshold: 40,\n duration: 100,\n panelEffect: x => 1 - Math.pow(1 - x, 3),\n defaultIndex: 0,\n inputType: [\"touch\", \"mouse\"],\n thresholdAngle: 45,\n bounce: 10,\n autoResize: false,\n adaptive: false,\n zIndex: 2000,\n bound: false,\n overflow: false,\n hanger: \"50%\",\n anchor: \"50%\",\n gap: 0,\n moveType: DEFAULT_MOVE_TYPE_OPTIONS.snap,\n useOffset: false,\n isEqualSize: false,\n isConstantSize: false,\n renderOnlyVisible: false,\n renderExternal: false,\n resizeOnContentsReady: false,\n iOSEdgeSwipeThreshold: 30,\n collectStatistics: true,\n};\n\nexport const DEFAULT_VIEWPORT_CSS = {\n position: \"relative\",\n zIndex: DEFAULT_OPTIONS.zIndex,\n overflow: \"hidden\",\n};\n\nexport const DEFAULT_CAMERA_CSS = {\n width: \"100%\",\n height: \"100%\",\n willChange: \"transform\",\n};\n\nexport const DEFAULT_PANEL_CSS = {\n position: \"absolute\",\n};\n\nexport const EVENTS: EventType = {\n HOLD_START: \"holdStart\",\n HOLD_END: \"holdEnd\",\n MOVE_START: \"moveStart\",\n MOVE: \"move\",\n MOVE_END: \"moveEnd\",\n CHANGE: \"change\",\n RESTORE: \"restore\",\n SELECT: \"select\",\n NEED_PANEL: \"needPanel\",\n VISIBLE_CHANGE: \"visibleChange\",\n CONTENT_ERROR: \"contentError\",\n};\n\nexport const AXES_EVENTS: AxesEventType = {\n HOLD: \"hold\",\n CHANGE: \"change\",\n RELEASE: \"release\",\n ANIMATION_END: \"animationEnd\",\n FINISH: \"finish\",\n};\n\nexport const STATE_TYPE: StateType = {\n IDLE: 0,\n HOLDING: 1,\n DRAGGING: 2,\n ANIMATING: 3,\n DISABLED: 4,\n};\n\nexport const DIRECTION: Direction = {\n PREV: \"PREV\",\n NEXT: \"NEXT\",\n};\nexport const FLICKING_METHODS: {[key in FlickingMethodsKeys]: true} = {\n prev: true,\n next: true,\n moveTo: true,\n getIndex: true,\n getAllPanels: true,\n getCurrentPanel: true,\n getElement: true,\n getSize: true,\n getPanel: true,\n getPanelCount: true,\n getStatus: true,\n getVisiblePanels: true,\n enableInput: true,\n disableInput: true,\n destroy: true,\n resize: true,\n setStatus: true,\n isPlaying: true,\n};\n\n// Check whether browser supports transform: translate3d\n// https://stackoverflow.com/questions/5661671/detecting-transform-translate3d-support\nexport let checkTranslateSupport = () => {\n const transforms = {\n webkitTransform: \"-webkit-transform\",\n msTransform: \"-ms-transform\",\n MozTransform: \"-moz-transform\",\n OTransform: \"-o-transform\",\n transform: \"transform\",\n };\n\n if (!isBrowser) {\n return {\n name: transforms.transform,\n has3d: true,\n };\n }\n const supportedStyle = document.documentElement.style;\n let transformName = \"\";\n for (const prefixedTransform in transforms) {\n if (prefixedTransform in supportedStyle) {\n transformName = prefixedTransform;\n }\n }\n\n if (!transformName) {\n throw new Error(\"Browser doesn't support CSS3 2D Transforms.\");\n }\n\n const el = document.createElement(\"div\");\n\n document.documentElement.insertBefore(el, null);\n\n el.style[transformName] = \"translate3d(1px, 1px, 1px)\";\n const styleVal = window.getComputedStyle(el).getPropertyValue(transforms[transformName]);\n\n el.parentElement!.removeChild(el);\n\n const transformInfo = {\n name: transformName,\n has3d: styleVal.length > 0 && styleVal !== \"none\",\n };\n\n checkTranslateSupport = () => transformInfo;\n\n return transformInfo;\n};\n\nexport const TRANSFORM = checkTranslateSupport();\n","/**\n * Copyright (c) 2015 NAVER Corp.\n * egjs projects are licensed under the MIT license\n */\n\nimport { ElementLike, OriginalStyle, BoundingBox } from \"./types\";\nimport Flicking from \"./Flicking\";\nimport { FLICKING_METHODS } from \"./consts\";\n\nexport function merge(target: object, ...srcs: object[]): object {\n srcs.forEach(source => {\n Object.keys(source).forEach(key => {\n const value = source[key];\n target[key] = value;\n });\n });\n\n return target;\n}\n\nexport function parseElement(element: ElementLike | ElementLike[]): HTMLElement[] {\n if (!Array.isArray(element)) {\n element = [element];\n }\n\n const elements: HTMLElement[] = [];\n element.forEach(el => {\n if (isString(el)) {\n const tempDiv = document.createElement(\"div\");\n tempDiv.innerHTML = el;\n\n elements.push(...toArray(tempDiv.children) as HTMLElement[]);\n while (tempDiv.firstChild) {\n tempDiv.removeChild(tempDiv.firstChild);\n }\n } else {\n elements.push(el as HTMLElement);\n }\n });\n\n return elements;\n}\n\nexport function isString(value: any): value is string {\n return typeof value === \"string\";\n}\n\n// Get class list of element as string array\nexport function classList(element: HTMLElement): string[] {\n return element.classList\n ? toArray(element.classList)\n : element.className.split(\" \");\n}\n\n// Add class to specified element\nexport function addClass(element: HTMLElement, className: string): void {\n if (element.classList) {\n element.classList.add(className);\n } else {\n if (!hasClass(element, className)) {\n element.className = (`${element.className} ${className}`).replace(/\\s{2,}/g, \" \");\n }\n }\n}\n\nexport function hasClass(element: HTMLElement, className: string): boolean {\n if (element.classList) {\n return element.classList.contains(className);\n } else {\n return (element.className.split(\" \").indexOf(className) >= 0);\n }\n}\n\nexport function applyCSS(element: HTMLElement, cssObj: object): void {\n Object.keys(cssObj).forEach(property => {\n element.style[property] = cssObj[property];\n });\n}\n\nexport function clamp(val: number, min: number, max: number) {\n return Math.max(Math.min(val, max), min);\n}\n\n// Min: inclusive, Max: exclusive\nexport function isBetween(val: number, min: number, max: number) {\n return val >= min && val <= max;\n}\n\nexport interface ArrayLike<T> {\n length: number;\n [index: number]: T;\n}\n\nexport function toArray<T>(iterable: ArrayLike<T>): T[] {\n return [].slice.call(iterable);\n}\n\nexport function isArray(arr: any): boolean {\n return arr && arr.constructor === Array;\n}\n\nexport function parseArithmeticExpression(cssValue: number | string, base: number, defaultVal?: number): number {\n // Set base / 2 to default value, if it's undefined\n const defaultValue = defaultVal != null ? defaultVal : base / 2;\n const cssRegex = /(?:(\\+|\\-)\\s*)?(\\d+(?:\\.\\d+)?(%|px)?)/g;\n\n if (typeof cssValue === \"number\") {\n return clamp(cssValue, 0, base);\n }\n\n let idx = 0;\n let calculatedValue = 0;\n let matchResult = cssRegex.exec(cssValue);\n while (matchResult != null) {\n let sign = matchResult[1];\n const value = matchResult[2];\n const unit = matchResult[3];\n\n let parsedValue = parseFloat(value);\n\n if (idx <= 0) {\n sign = sign || \"+\";\n }\n\n // Return default value for values not in good form\n if (!sign) {\n return defaultValue;\n }\n\n if (unit === \"%\") {\n parsedValue = (parsedValue / 100) * base;\n }\n\n calculatedValue += sign === \"+\"\n ? parsedValue\n : -parsedValue;\n\n // Match next occurrence\n ++idx;\n matchResult = cssRegex.exec(cssValue);\n }\n\n // None-matched\n if (idx === 0) {\n return defaultValue;\n }\n\n // Clamp between 0 ~ base\n return clamp(calculatedValue, 0, base);\n}\n\nexport function getProgress(pos: number, range: number[]) {\n // start, anchor, end\n // -1 , 0 , 1\n const [min, center, max] = range;\n\n if (pos > center && (max - center)) {\n // 0 ~ 1\n return (pos - center) / (max - center);\n } else if (pos < center && (center - min)) {\n // -1 ~ 0\n return (pos - center) / (center - min);\n } else if (pos !== center && max - min) {\n return (pos - min) / (max - min);\n }\n return 0;\n}\n\nexport function findIndex<T>(iterable: T[], callback: (el: T) => boolean): number {\n for (let i = 0; i < iterable.length; i += 1) {\n const element = iterable[i];\n if (element && callback(element)) {\n return i;\n }\n }\n\n return -1;\n}\n\n// return [0, 1, ...., max - 1]\nexport function counter(max: number): number[] {\n const counterArray: number[] = [];\n for (let i = 0; i < max; i += 1) {\n counterArray[i] = i;\n }\n return counterArray;\n}\n\n// Circulate number between range [min, max]\n/*\n * \"indexed\" means min and max is not same, so if it's true \"min - 1\" should be max\n * While if it's false, \"min - 1\" should be \"max - 1\"\n * use `indexed: true` when it should be used for circulating integers like index\n * or `indexed: false` when it should be used for something like positions.\n */\nexport function circulate(value: number, min: number, max: number, indexed: boolean): number {\n const size = indexed\n ? max - min + 1\n : max - min;\n if (value < min) {\n const offset = indexed\n ? (min - value - 1) % size\n : (min - value) % size;\n value = max - offset;\n } else if (value > max) {\n const offset = indexed\n ? (value - max - 1) % size\n : (value - max) % size;\n value = min + offset;\n }\n\n return value;\n}\n\nexport function restoreStyle(element: HTMLElement, originalStyle: OriginalStyle): void {\n originalStyle.className\n ? element.setAttribute(\"class\", originalStyle.className)\n : element.removeAttribute(\"class\");\n originalStyle.style\n ? element.setAttribute(\"style\", originalStyle.style)\n : element.removeAttribute(\"style\");\n}\n\n/**\n * Decorator that makes the method of flicking available in the framework.\n * @ko 프레임워크에서 플리킹의 메소드를 사용할 수 있게 하는 데코레이터.\n * @memberof eg.Flicking\n * @private\n * @example\n * ```js\n * import Flicking, { withFlickingMethods } from \"@egjs/flicking\";\n *\n * class Flicking extends React.Component<Partial<FlickingProps & FlickingOptions>> {\n * &#64;withFlickingMethods\n * private flicking: Flicking;\n * }\n * ```\n */\nexport function withFlickingMethods(prototype: any, flickingName: string) {\n Object.keys(FLICKING_METHODS).forEach((name: keyof Flicking) => {\n if (prototype[name]) {\n return;\n }\n prototype[name] = function(...args) {\n const result = this[flickingName][name](...args);\n\n // fix `this` type to return your own `flicking` instance to the instance using the decorator.\n if (result === this[flickingName]) {\n return this;\n } else {\n return result;\n }\n };\n });\n}\n\nexport function getBbox(element: HTMLElement, useOffset: boolean) {\n let bbox: BoundingBox;\n if (useOffset) {\n bbox = {\n x: 0,\n y: 0,\n width: element.offsetWidth,\n height: element.offsetHeight,\n };\n } else {\n const clientRect = element.getBoundingClientRect();\n bbox = {\n x: clientRect.left,\n y: clientRect.top,\n width: clientRect.width,\n height: clientRect.height,\n };\n }\n return bbox;\n}\n","/**\n * Copyright (c) 2015 NAVER Corp.\n * egjs projects are licensed under the MIT license\n */\n\nimport Viewport from \"./Viewport\";\nimport { OriginalStyle, FlickingPanel, ElementLike, DestroyOption, BoundingBox } from \"../types\";\nimport { DEFAULT_PANEL_CSS, EVENTS } from \"../consts\";\nimport { addClass, applyCSS, parseArithmeticExpression, parseElement, getProgress, restoreStyle, hasClass, getBbox } from \"../utils\";\n\nclass Panel implements FlickingPanel {\n public viewport: Viewport;\n public prevSibling: Panel | null;\n public nextSibling: Panel | null;\n\n protected state: {\n index: number;\n position: number;\n relativeAnchorPosition: number;\n size: number;\n isClone: boolean;\n isVirtual: boolean;\n // Index of cloned panel, zero-based integer(original: -1, cloned: [0, 1, 2, ...])\n // if cloneIndex is 0, that means it's first cloned panel of original panel\n cloneIndex: number;\n originalStyle: OriginalStyle;\n cachedBbox: BoundingBox | null;\n };\n private element: HTMLElement;\n private original?: Panel;\n private clonedPanels: Panel[];\n\n public constructor(\n element?: HTMLElement | null,\n index?: number,\n viewport?: Viewport,\n ) {\n this.viewport = viewport!;\n this.prevSibling = null;\n this.nextSibling = null;\n this.clonedPanels = [];\n\n this.state = {\n index: index!,\n position: 0,\n relativeAnchorPosition: 0,\n size: 0,\n isClone: false,\n isVirtual: false,\n cloneIndex: -1,\n originalStyle: {\n className: \"\",\n style: \"\",\n },\n cachedBbox: null,\n };\n this.setElement(element);\n }\n\n public resize(givenBbox?: BoundingBox): void {\n const state = this.state;\n const options = this.viewport.options;\n const bbox = givenBbox\n ? givenBbox\n : this.getBbox();\n this.state.cachedBbox = bbox;\n const prevSize = state.size;\n\n state.size = options.horizontal\n ? bbox.width\n : bbox.height;\n\n if (prevSize !== state.size) {\n state.relativeAnchorPosition = parseArithmeticExpression(options.anchor, state.size);\n }\n\n if (!state.isClone) {\n this.clonedPanels.forEach(panel => {\n const cloneState = panel.state;\n\n cloneState.size = state.size;\n cloneState.cachedBbox = state.cachedBbox;\n cloneState.relativeAnchorPosition = state.relativeAnchorPosition;\n });\n }\n }\n\n public unCacheBbox(): void {\n this.state.cachedBbox = null;\n }\n\n public getProgress() {\n const viewport = this.viewport;\n const options = viewport.options;\n const panelCount = viewport.panelManager.getPanelCount();\n const scrollAreaSize = viewport.getScrollAreaSize();\n\n const relativeIndex = (options.circular ? Math.floor(this.getPosition() / scrollAreaSize) * panelCount : 0) + this.getIndex();\n const progress = relativeIndex - viewport.getCurrentProgress();\n\n return progress;\n }\n\n public getOutsetProgress() {\n const viewport = this.viewport;\n const outsetRange = [\n -this.getSize(),\n viewport.getRelativeHangerPosition() - this.getRelativeAnchorPosition(),\n viewport.getSize(),\n ];\n const relativePanelPosition = this.getPosition() - viewport.getCameraPosition();\n const outsetProgress = getProgress(relativePanelPosition, outsetRange);\n\n return outsetProgress;\n }\n\n public getVisibleRatio() {\n const viewport = this.viewport;\n const panelSize = this.getSize();\n const relativePanelPosition = this.getPosition() - viewport.getCameraPosition();\n const rightRelativePanelPosition = relativePanelPosition + panelSize;\n\n const visibleSize = Math.min(viewport.getSize(), rightRelativePanelPosition) - Math.max(relativePanelPosition, 0);\n const visibleRatio = visibleSize >= 0\n ? visibleSize / panelSize\n : 0;\n\n return visibleRatio;\n }\n\n public focus(duration?: number): void {\n const viewport = this.viewport;\n const currentPanel = viewport.getCurrentPanel();\n const hangerPosition = viewport.getHangerPosition();\n const anchorPosition = this.getAnchorPosition();\n if (hangerPosition === anchorPosition || !currentPanel) {\n return;\n }\n\n const currentPosition = currentPanel.getPosition();\n const eventType = currentPosition === this.getPosition()\n ? \"\"\n : EVENTS.CHANGE;\n\n viewport.moveTo(this, viewport.findEstimatedPosition(this), eventType, null, duration);\n }\n\n public update(updateFunction: ((element: HTMLElement) => any) | null = null, shouldResize: boolean = true): void {\n const identicalPanels = this.getIdenticalPanels();\n\n if (updateFunction) {\n identicalPanels.forEach(eachPanel => {\n updateFunction(eachPanel.getElement());\n });\n }\n\n if (shouldResize) {\n identicalPanels.forEach(eachPanel => {\n eachPanel.unCacheBbox();\n });\n this.viewport.addVisiblePanel(this);\n this.viewport.resize();\n }\n }\n\n public prev(): FlickingPanel | null {\n const viewport = this.viewport;\n const options = viewport.options;\n const prevSibling = this.prevSibling;\n\n if (!prevSibling) {\n return null;\n }\n\n const currentIndex = this.getIndex();\n const currentPosition = this.getPosition();\n const prevPanelIndex = prevSibling.getIndex();\n const prevPanelPosition = prevSibling.getPosition();\n const prevPanelSize = prevSibling.getSize();\n\n const hasEmptyPanelBetween = currentIndex - prevPanelIndex > 1;\n const notYetMinPanel = options.infinite\n && currentIndex > 0\n && prevPanelIndex > currentIndex;\n\n if (hasEmptyPanelBetween || notYetMinPanel) {\n // Empty panel exists between\n return null;\n }\n\n const newPosition = currentPosition - prevPanelSize - options.gap;\n\n let prevPanel = prevSibling;\n if (prevPanelPosition !== newPosition) {\n prevPanel = prevSibling.clone(prevSibling.getCloneIndex(), true);\n prevPanel.setPosition(newPosition);\n }\n\n return prevPanel;\n }\n\n public next(): FlickingPanel | null {\n const viewport = this.viewport;\n const options = viewport.options;\n const nextSibling = this.nextSibling;\n const lastIndex = viewport.panelManager.getLastIndex();\n\n if (!nextSibling) {\n return null;\n }\n\n const currentIndex = this.getIndex();\n const currentPosition = this.getPosition();\n const nextPanelIndex = nextSibling.getIndex();\n const nextPanelPosition = nextSibling.getPosition();\n\n const hasEmptyPanelBetween = nextPanelIndex - currentIndex > 1;\n const notYetMaxPanel = options.infinite\n && currentIndex < lastIndex\n && nextPanelIndex < currentIndex;\n\n if (hasEmptyPanelBetween || notYetMaxPanel) {\n return null;\n }\n\n const newPosition = currentPosition + this.getSize() + options.gap;\n\n let nextPanel = nextSibling;\n if (nextPanelPosition !== newPosition) {\n nextPanel = nextSibling.clone(nextSibling.getCloneIndex(), true);\n nextPanel.setPosition(newPosition);\n }\n\n return nextPanel;\n }\n\n public insertBefore(element: ElementLike | ElementLike[]): FlickingPanel[] {\n const viewport = this.viewport;\n const parsedElements = parseElement(element);\n const firstPanel = viewport.panelManager.firstPanel()!;\n const prevSibling = this.prevSibling;\n // Finding correct inserting index\n // While it should insert removing empty spaces,\n // It also should have to be bigger than prevSibling' s index\n const targetIndex = prevSibling && firstPanel.getIndex() !== this.getIndex()\n ? Math.max(prevSibling.getIndex() + 1, this.getIndex() - parsedElements.length)\n : Math.max(this.getIndex() - parsedElements.length, 0);\n\n return viewport.insert(targetIndex, parsedElements);\n }\n\n public insertAfter(element: ElementLike | ElementLike[]): FlickingPanel[] {\n return this.viewport.insert(this.getIndex() + 1, element);\n }\n\n public remove(): FlickingPanel {\n this.viewport.remove(this.getIndex());\n\n return this;\n }\n\n public destroy(option: Partial<DestroyOption>): void {\n if (!option.preserveUI) {\n const originalStyle = this.state.originalStyle;\n\n restoreStyle(this.element, originalStyle);\n }\n\n // release resources\n for (const x in this) {\n (this as any)[x] = null;\n }\n }\n\n public getElement(): HTMLElement {\n return this.element;\n }\n\n public getAnchorPosition(): number {\n return this.state.position + this.state.relativeAnchorPosition;\n }\n\n public getRelativeAnchorPosition(): number {\n return this.state.relativeAnchorPosition;\n }\n\n public getIndex(): number {\n return this.state.index;\n }\n\n public getPosition(): number {\n return this.state.position;\n }\n\n public getSize(): number {\n return this.state.size;\n }\n\n public getBbox(): BoundingBox {\n const state = this.state;\n const viewport = this.viewport;\n const element = this.element;\n const options = viewport.options;\n\n if (!element) {\n state.cachedBbox = {\n x: 0,\n y: 0,\n width: 0,\n height: 0,\n };\n } else if (!state.cachedBbox) {\n const wasVisible = Boolean(element.parentNode);\n const cameraElement = viewport.getCameraElement();\n if (!wasVisible) {\n cameraElement.appendChild(element);\n viewport.addVisiblePanel(this);\n }\n state.cachedBbox = getBbox(element, options.useOffset);\n\n if (!wasVisible && viewport.options.renderExternal) {\n cameraElement.removeChild(element);\n }\n }\n return state.cachedBbox!;\n }\n\n public isClone(): boolean {\n return this.state.isClone;\n }\n\n public getOverlappedClass(classes: string[]): string | undefined {\n const element = this.element;\n\n for (const className of classes) {\n if (hasClass(element, className)) {\n return className;\n }\n }\n }\n\n public getCloneIndex(): number {\n return this.state.cloneIndex;\n }\n\n public getClonedPanels(): Panel[] {\n const state = this.state;\n\n return state.isClone\n ? this.original!.getClonedPanels()\n : this.clonedPanels;\n }\n\n public getIdenticalPanels(): Panel[] {\n const state = this.state;\n\n return state.isClone\n ? this.original!.getIdenticalPanels()\n : [this, ...this.clonedPanels];\n }\n\n public getOriginalPanel(): Panel {\n return this.state.isClone\n ? this.original!\n : this;\n }\n\n public setIndex(index: number): void {\n const state = this.state;\n\n state.index = index;\n this.clonedPanels.forEach(panel => panel.state.index = index);\n }\n\n public setPosition(pos: number): this {\n this.state.position = pos;\n\n return this;\n }\n\n public setPositionCSS(offset: number = 0): void {\n if (!this.element) {\n return;\n }\n const state = this.state;\n const pos = state.position;\n const options = this.viewport.options;\n const elementStyle = this.element.style;\n const currentElementStyle = options.horizontal\n ? elementStyle.left\n : elementStyle.top;\n const styleToApply = `${pos - offset}px`;\n\n if (!state.isVirtual && currentElementStyle !== styleToApply) {\n options.horizontal\n ? elementStyle.left = styleToApply\n : elementStyle.top = styleToApply;\n }\n }\n\n public clone(cloneIndex: number, isVirtual: boolean = false, element?: HTMLElement | null): Panel {\n const state = this.state;\n const viewport = this.viewport;\n let cloneElement = element;\n\n if (!cloneElement && this.element) {\n cloneElement = isVirtual ? this.element : this.element.cloneNode(true) as HTMLElement;\n }\n const clonedPanel = new Panel(cloneElement, state.index, viewport);\n const clonedState = clonedPanel.state;\n\n clonedPanel.original = state.isClone\n ? this.original\n : this;\n clonedState.isClone = true;\n clonedState.isVirtual = isVirtual;\n clonedState.cloneIndex = cloneIndex;\n // Inherit some state values\n clonedState.size = state.size;\n clonedState.relativeAnchorPosition = state.relativeAnchorPosition;\n clonedState.originalStyle = state.originalStyle;\n clonedState.cachedBbox = state.cachedBbox;\n\n if (!isVirtual) {\n this.clonedPanels.push(clonedPanel);\n } else {\n clonedPanel.prevSibling = this.prevSibling;\n clonedPanel.nextSibling = this.nextSibling;\n }\n\n return clonedPanel;\n }\n\n public removeElement(): void {\n if (!this.viewport.options.renderExternal) {\n const element = this.element;\n element.parentNode && element.parentNode.removeChild(element);\n }\n\n // Do the same thing for clones\n if (!this.state.isClone) {\n this.removeClonedPanelsAfter(0);\n }\n }\n\n public removeClonedPanelsAfter(start: number): void {\n const options = this.viewport.options;\n const removingPanels = this.clonedPanels.splice(start);\n\n if (!options.renderExternal) {\n removingPanels.forEach(panel => {\n panel.removeElement();\n });\n }\n }\n\n public setElement(element?: HTMLElement | null): void {\n if (!element) {\n return;\n }\n const currentElement = this.element;\n if (element !== currentElement) {\n const options = this.viewport.options;\n\n if (currentElement) {\n if (options.horizontal) {\n element.style.left = currentElement.style.left;\n } else {\n element.style.top = currentElement.style.top;\n }\n } else {\n const originalStyle = this.state.originalStyle;\n\n originalStyle.className = element.getAttribute(\"class\");\n originalStyle.style = element.getAttribute(\"style\");\n }\n\n this.element = element;\n\n if (options.classPrefix) {\n addClass(element, `${options.classPrefix}-panel`);\n }\n\n // Update size info after applying panel css\n applyCSS(this.element, DEFAULT_PANEL_CSS);\n }\n }\n}\n\nexport default Panel;\n","/**\n * Copyright (c) 2015 NAVER Corp.\n * egjs projects are licensed under the MIT license\n */\n\nimport Panel from \"./Panel\";\nimport { FlickingOptions } from \"../types\";\nimport { findIndex, counter } from \"../utils\";\n\nclass PanelManager {\n private cameraElement: HTMLElement;\n private options: FlickingOptions;\n private panels: Panel[];\n private clones: Panel[][];\n // index range of existing panels\n private range: {\n min: number;\n max: number;\n };\n private length: number;\n private lastIndex: number;\n private cloneCount: number;\n\n constructor(\n cameraElement: HTMLElement,\n options: FlickingOptions,\n ) {\n this.cameraElement = cameraElement;\n this.panels = [];\n this.clones = [];\n this.range = {\n min: -1,\n max: -1,\n };\n this.length = 0;\n this.cloneCount = 0;\n this.options = options;\n this.lastIndex = options.lastIndex;\n }\n\n public firstPanel(): Panel | undefined {\n return this.panels[this.range.min];\n }\n\n public lastPanel(): Panel | undefined {\n return this.panels[this.range.max];\n }\n\n public allPanels(): ReadonlyArray<Panel> {\n return [\n ...this.panels,\n ...this.clones.reduce((allClones, clones) => [...allClones, ...clones], []),\n ];\n }\n\n public originalPanels(): ReadonlyArray<Panel> {\n return this.panels;\n }\n\n public clonedPanels(): ReadonlyArray<Panel[]> {\n return this.clones;\n }\n\n public replacePanels(newPanels: Panel[], newClones: Panel[][]): void {\n this.panels = newPanels;\n this.clones = newClones;\n\n this.range = {\n min: findIndex(newPanels, panel => Boolean(panel)),\n max: newPanels.length - 1,\n };\n this.length = newPanels.filter(panel => Boolean(panel)).length;\n }\n\n public has(index: number): boolean {\n return !!this.panels[index];\n }\n\n public get(index: number): Panel | undefined {\n return this.panels[index];\n }\n\n public getPanelCount(): number {\n return this.length;\n }\n\n public getLastIndex(): number {\n return this.lastIndex;\n }\n\n public getRange(): Readonly<{ min: number, max: number }> {\n return this.range;\n }\n\n public getCloneCount(): number {\n return this.cloneCount;\n }\n\n public setLastIndex(lastIndex: number): void {\n this.lastIndex = lastIndex;\n\n const firstPanel = this.firstPanel();\n const lastPanel = this.lastPanel();\n\n if (!firstPanel || !lastPanel) {\n return; // no meaning of updating range & length\n }\n\n // Remove panels above new last index\n const range = this.range;\n if (lastPanel.getIndex() > lastIndex) {\n const removingPanels = this.panels.splice(lastIndex + 1);\n this.length -= removingPanels.length;\n\n const firstRemovedPanel = removingPanels.filter(panel => !!panel)[0];\n const possibleLastPanel = firstRemovedPanel.prevSibling;\n if (possibleLastPanel) {\n range.max = possibleLastPanel.getIndex();\n } else {\n range.min = -1;\n range.max = -1;\n }\n\n if (this.shouldRender()) {\n removingPanels.forEach(panel => panel.removeElement());\n }\n }\n }\n\n public setCloneCount(cloneCount: number): void {\n this.cloneCount = cloneCount;\n }\n\n // Insert at index\n // Returns pushed elements from index, inserting at 'empty' position doesn't push elements behind it\n public insert(index: number, newPanels: Panel[]): number {\n const panels = this.panels;\n const range = this.range;\n const isCircular = this.options.circular;\n const lastIndex = this.lastIndex;\n\n // Find first panel that index is greater than inserting index\n const nextSibling = this.findFirstPanelFrom(index);\n\n // if it's null, element will be inserted at last position\n // https://developer.mozilla.org/ko/docs/Web/API/Node/insertBefore#Syntax\n const firstPanel = this.firstPanel();\n const siblingElement = nextSibling\n ? nextSibling.getElement()\n : isCircular && firstPanel\n ? firstPanel.getClonedPanels()[0].getElement()\n : null;\n\n // Insert panels before sibling element\n this.insertNewPanels(newPanels, siblingElement);\n\n let pushedIndex = newPanels.length;\n // Like when setting index 50 while visible panels are 0, 1, 2\n if (index > range.max) {\n newPanels.forEach((panel, offset) => {\n panels[index + offset] = panel;\n });\n } else {\n const panelsAfterIndex = panels.slice(index, index + newPanels.length);\n // Find empty from beginning\n let emptyPanelCount = findIndex(panelsAfterIndex, panel => !!panel);\n if (emptyPanelCount < 0) {\n // All empty\n emptyPanelCount = panelsAfterIndex.length;\n }\n pushedIndex = newPanels.length - emptyPanelCount;\n\n // Insert removing empty panels\n panels.splice(index, emptyPanelCount, ...newPanels);\n\n // Remove panels after last index\n if (panels.length > lastIndex + 1) {\n const removedPanels = panels.splice(lastIndex + 1)\n .filter(panel => Boolean(panel));\n this.length -= removedPanels.length;\n\n // Find first\n const newLastIndex = lastIndex - findIndex(this.panels.concat().reverse(), panel => !!panel);\n\n // Can be filled with empty after newLastIndex\n this.panels.splice(newLastIndex + 1);\n this.range.max = newLastIndex;\n\n if (this.shouldRender()) {\n removedPanels.forEach(panel => panel.removeElement());\n }\n }\n }\n\n // Update index of previous panels\n if (pushedIndex > 0) {\n panels.slice(index + newPanels.length).forEach(panel => {\n panel.setIndex(panel.getIndex() + pushedIndex);\n });\n }\n\n // Update state\n this.length += newPanels.length;\n this.updateIndex(index);\n\n if (isCircular) {\n this.addNewClones(index, newPanels, newPanels.length - pushedIndex, nextSibling);\n const clones = this.clones;\n const panelCount = this.panels.length;\n if (clones[0] && clones[0].length > lastIndex + 1) {\n clones.forEach(cloneSet => {\n cloneSet.splice(panelCount);\n });\n }\n }\n\n return pushedIndex;\n }\n\n public replace(index: number, newPanels: Panel[]): Panel[] {\n const panels = this.panels;\n const range = this.range;\n const options = this.options;\n const isCircular = options.circular;\n\n // Find first panel that index is greater than inserting index\n const nextSibling = this.findFirstPanelFrom(index + newPanels.length);\n\n // if it's null, element will be inserted at last position\n // https://developer.mozilla.org/ko/docs/Web/API/Node/insertBefore#Syntax\n const firstPanel = this.firstPanel();\n const siblingElement = nextSibling\n ? nextSibling.getElement()\n : isCircular && firstPanel\n ? firstPanel.getClonedPanels()[0].getElement()\n : null;\n\n // Insert panels before sibling element\n this.insertNewPanels(newPanels, siblingElement);\n\n if (index > range.max) {\n // Temporarily insert null at index to use splice()\n (panels[index] as any) = null;\n }\n\n const replacedPanels = panels.splice(index, newPanels.length, ...newPanels);\n const wasNonEmptyCount = replacedPanels.filter(panel => Boolean(panel)).length;\n\n // Suppose inserting [1, 2, 3] at 0 position when there were [empty, 1]\n // So length should be increased by 3(inserting panels) - 1(non-empty panels)\n this.length += newPanels.length - wasNonEmptyCount;\n this.updateIndex(index);\n\n if (isCircular) {\n this.addNewClones(index, newPanels, newPanels.length, nextSibling);\n }\n\n if (this.shouldRender()) {\n replacedPanels.forEach(panel => panel && panel.removeElement());\n }\n\n return replacedPanels;\n }\n\n public remove(index: number, deleteCount: number = 1): Panel[] {\n const isCircular = this.options.circular;\n const panels = this.panels;\n const clones = this.clones;\n // Delete count should be equal or larger than 0\n deleteCount = Math.max(deleteCount, 0);\n\n const deletedPanels = panels\n .splice(index, deleteCount)\n .filter(panel => !!panel);\n\n if (this.shouldRender()) {\n deletedPanels.forEach(panel => panel.removeElement());\n }\n\n if (isCircular) {\n clones.forEach(cloneSet => {\n cloneSet.splice(index, deleteCount);\n });\n }\n\n // Update indexes\n panels\n .slice(index)\n .forEach(panel => {\n panel.setIndex(panel.getIndex() - deleteCount);\n });\n\n // Check last panel is empty\n let lastIndex = panels.length - 1;\n if (!panels[lastIndex]) {\n const reversedPanels = panels.concat().reverse();\n const nonEmptyIndexFromLast = findIndex(reversedPanels, panel => !!panel);\n lastIndex = nonEmptyIndexFromLast < 0\n ? -1 // All empty\n : lastIndex - nonEmptyIndexFromLast;\n\n // Remove all empty panels from last\n panels.splice(lastIndex + 1);\n if (isCircular) {\n clones.forEach(cloneSet => {\n cloneSet.splice(lastIndex + 1);\n });\n }\n }\n\n // Update range & length\n this.range = {\n min: findIndex(panels, panel => !!panel),\n max: lastIndex,\n };\n this.length -= deletedPanels.length;\n\n if (this.length <= 0) {\n // Reset clones\n this.clones = [];\n this.cloneCount = 0;\n }\n\n return deletedPanels;\n }\n\n public chainAllPanels() {\n const allPanels = this.allPanels().filter(panel => !!panel);\n const allPanelsCount = allPanels.length;\n\n if (allPanelsCount <= 1) {\n return;\n }\n\n allPanels.slice(1, allPanels.length - 1).forEach((panel, idx) => {\n const prevPanel = allPanels[idx];\n const nextPanel = allPanels[idx + 2];\n\n panel.prevSibling = prevPanel;\n panel.nextSibling = nextPanel;\n });\n\n const firstPanel = allPanels[0];\n const lastPanel = allPanels[allPanelsCount - 1];\n\n firstPanel.prevSibling = null;\n firstPanel.nextSibling = allPanels[1];\n lastPanel.prevSibling = allPanels[allPanelsCount - 2];\n lastPanel.nextSibling = null;\n\n if (this.options.circular) {\n firstPanel.prevSibling = lastPanel;\n lastPanel.nextSibling = firstPanel;\n }\n }\n\n public insertClones(cloneIndex: number, index: number, clonedPanels: Panel[], deleteCount: number = 0): void {\n const clones = this.clones;\n const lastIndex = this.lastIndex;\n\n if (!clones[cloneIndex]) {\n const newClones: Panel[] = [];\n clonedPanels.forEach((panel, offset) => {\n newClones[index + offset] = panel;\n });\n\n clones[cloneIndex] = newClones;\n } else {\n const insertTarget = clones[cloneIndex];\n\n if (index >= insertTarget.length) {\n clonedPanels.forEach((panel, offset) => {\n insertTarget[index + offset] = panel;\n });\n } else {\n insertTarget.splice(index, deleteCount, ...clonedPanels);\n // Remove panels after last index\n if (clonedPanels.length > lastIndex + 1) {\n clonedPanels.splice(lastIndex + 1);\n }\n }\n }\n }\n\n // clones are operating in set\n public removeClonesAfter(cloneIndex: number): void {\n const panels = this.panels;\n\n panels.forEach(panel => {\n panel.removeClonedPanelsAfter(cloneIndex);\n });\n this.clones.splice(cloneIndex);\n }\n\n public findPanelOf(element: HTMLElement): Panel | undefined {\n const allPanels = this.allPanels();\n for (const panel of allPanels) {\n if (!panel) {\n continue;\n }\n const panelElement = panel.getElement();\n if (panelElement.contains(element)) {\n return panel;\n }\n }\n }\n\n public findFirstPanelFrom(index: number): Panel | undefined {\n for (const panel of this.panels.slice(index)) {\n if (panel && panel.getIndex() >= index && panel.getElement().parentNode) {\n return panel;\n }\n }\n }\n\n private addNewClones(index: number, originalPanels: Panel[], deleteCount: number, nextSibling: Panel | undefined) {\n const cameraElement = this.cameraElement;\n const cloneCount = this.getCloneCount();\n const lastPanel = this.lastPanel();\n const lastPanelClones: Panel[] = lastPanel\n ? lastPanel.getClonedPanels()\n : [];\n const nextSiblingClones: Panel[] = nextSibling\n ? nextSibling.getClonedPanels()\n : [];\n\n for (const cloneIndex of counter(cloneCount)) {\n const cloneNextSibling = nextSiblingClones[cloneIndex];\n const lastPanelSibling = lastPanelClones[cloneIndex];\n\n const cloneSiblingElement = cloneNextSibling\n ? cloneNextSibling.getElement()\n : lastPanelSibling\n ? lastPanelSibling.getElement().nextElementSibling\n : null;\n\n const newClones = originalPanels.map(panel => {\n const clone = panel.clone(cloneIndex);\n\n if (this.shouldRender()) {\n cameraElement.insertBefore(clone.getElement(), cloneSiblingElement);\n }\n\n return clone;\n });\n\n this.insertClones(cloneIndex, index, newClones, deleteCount);\n }\n }\n\n private updateIndex(insertingIndex: number) {\n const panels = this.panels;\n const range = this.range;\n\n const newLastIndex = panels.length - 1;\n if (newLastIndex > range.max) {\n range.max = newLastIndex;\n }\n if (insertingIndex < range.min || range.min < 0) {\n range.min = insertingIndex;\n }\n }\n\n private insertNewPanels(newPanels: Panel[], siblingElement: HTMLElement | null) {\n if (this.shouldRender()) {\n const fragment = document.createDocumentFragment();\n newPanels.forEach(panel => fragment.appendChild(panel.getElement()));\n this.cameraElement.insertBefore(fragment, siblingElement);\n }\n }\n\n private shouldRender(): boolean {\n const options = this.options;\n\n return !options.renderExternal && !options.renderOnlyVisible;\n }\n}\n\nexport default PanelManager;\n","/**\n * Copyright (c) 2015 NAVER Corp.\n * egjs projects are licensed under the MIT license\n */\n\nimport Panel from \"../components/Panel\";\nimport { ValueOf, Direction, StateType, FlickingContext } from \"../types\";\n\nabstract class State {\n public delta: number = 0;\n public direction: ValueOf<Direction> | null = null;\n public targetPanel: Panel | null = null;\n public lastPosition: number = 0;\n public abstract readonly type: ValueOf<StateType>;\n public abstract readonly holding: boolean;\n public abstract readonly playing: boolean;\n\n public onEnter(prevState: State): void {\n this.delta = prevState.delta;\n this.direction = prevState.direction;\n this.targetPanel = prevState.targetPanel;\n this.lastPosition = prevState.lastPosition;\n }\n\n public onExit(nextState: State): void {\n // DO NOTHING\n }\n\n public onHold(e: any, context: FlickingContext): void {\n // DO NOTHING\n }\n\n public onChange(e: any, context: FlickingContext): void {\n // DO NOTHING\n }\n\n public onRelease(e: any, context: FlickingContext): void {\n // DO NOTHING\n }\n\n public onAnimationEnd(e: any, context: FlickingContext): void {\n // DO NOTHING\n }\n\n public onFinish(e: any, context: FlickingContext): void {\n // DO NOTHING\n }\n}\n\nexport default State;\n","/**\n * Copyright (c) 2015 NAVER Corp.\n * egjs projects are licensed under the MIT license\n */\n\nimport State from \"./State\";\nimport { EVENTS, STATE_TYPE } from \"../consts\";\nimport { FlickingContext } from \"../types\";\n\nclass IdleState extends State {\n public readonly type = STATE_TYPE.IDLE;\n public readonly holding = false;\n public readonly playing = false;\n\n public onEnter() {\n this.direction = null;\n this.targetPanel = null;\n this.delta = 0;\n this.lastPosition = 0;\n }\n\n public onHold(e: any, { flicking, viewport, triggerEvent, transitTo }: FlickingContext): void {\n // Shouldn't do any action until any panels on flicking area\n if (flicking.getPanelCount() <= 0) {\n if (viewport.options.infinite) {\n viewport.moveCamera(viewport.getCameraPosition(), e);\n }\n transitTo(STATE_TYPE.DISABLED);\n return;\n }\n\n this.lastPosition = viewport.getCameraPosition();\n triggerEvent(EVENTS.HOLD_START, e, true)\n .onSuccess(() => {\n transitTo(STATE_TYPE.HOLDING);\n })\n .onStopped(() => {\n transitTo(STATE_TYPE.DISABLED);\n });\n }\n\n // By methods call\n public onChange(e: any, context: FlickingContext): void {\n const { triggerEvent, transitTo } = context;\n\n triggerEvent(EVENTS.MOVE_START, e, false)\n .onSuccess(() => {\n // Trigger AnimatingState's onChange, to trigger \"move\" event immediately\n transitTo(STATE_TYPE.ANIMATING)\n .onChange(e, context);\n })\n .onStopped(() => {\n transitTo(STATE_TYPE.DISABLED);\n });\n }\n}\n\nexport default IdleState;\n","/**\n * Copyright (c) 2015 NAVER Corp.\n * egjs projects are licensed under the MIT license\n */\n\nimport State from \"./State\";\nimport { STATE_TYPE, EVENTS, DIRECTION } from \"../consts\";\nimport { FlickingContext } from \"../types\";\n\nclass HoldingState extends State {\n public readonly type = STATE_TYPE.HOLDING;\n public readonly holding = true;\n public readonly playing = true;\n\n private releaseEvent: any = null;\n\n public onChange(e: any, context: FlickingContext): void {\n const { flicking, triggerEvent, transitTo } = context;\n\n const offset = flicking.options.horizontal\n ? e.inputEvent.offsetX\n : e.inputEvent.offsetY;\n this.direction = offset < 0\n ? DIRECTION.NEXT\n : DIRECTION.PREV;\n\n triggerEvent(EVENTS.MOVE_START, e, true)\n .onSuccess(() => {\n // Trigger DraggingState's onChange, to trigger \"move\" event immediately\n transitTo(STATE_TYPE.DRAGGING)\n .onChange(e, context);\n })\n .onStopped(() => {\n transitTo(STATE_TYPE.DISABLED);\n });\n }\n\n public onRelease(e: any, context: FlickingContext): void {\n const { viewport, triggerEvent, transitTo } = context;\n\n triggerEvent(EVENTS.HOLD_END, e, true);\n\n if (e.delta.flick !== 0) {\n // Sometimes \"release\" event on axes triggered before \"change\" event\n // Especially if user flicked panel fast in really short amount of time\n // if delta is not zero, that means above case happened.\n\n // Event flow should be HOLD_START -> MOVE_START -> MOVE -> HOLD_END\n // At least one move event should be included between holdStart and holdEnd\n e.setTo({ flick: viewport.getCameraPosition() }, 0);\n transitTo(STATE_TYPE.IDLE);\n return;\n }\n\n // Can't handle select event here,\n // As \"finish\" axes event happens\n this.releaseEvent = e;\n }\n\n public onFinish(e: any, { viewport, triggerEvent, transitTo }: FlickingContext): void {\n // Should transite to IDLE state before select event\n // As user expects hold is already finished\n transitTo(STATE_TYPE.IDLE);\n\n if (!this.releaseEvent) {\n return;\n }\n\n // Handle release event here\n // To prevent finish event called twice\n const releaseEvent = this.releaseEvent;\n\n // Static click\n const srcEvent = releaseEvent.inputEvent.srcEvent;\n\n let clickedElement: HTMLElement;\n if (srcEvent.type === \"touchend\") {\n const touchEvent = srcEvent as TouchEvent;\n const touch = touchEvent.changedTouches[0];\n clickedElement = document.elementFromPoint(touch.clientX, touch.clientY) as HTMLElement;\n } else {\n clickedElement = srcEvent.target;\n }\n const clickedPanel = viewport.panelManager.findPanelOf(clickedElement);\n const cameraPosition = viewport.getCameraPosition();\n\n if (clickedPanel) {\n const clickedPanelPosition = clickedPanel.getPosition();\n const direction = clickedPanelPosition > cameraPosition\n ? DIRECTION.NEXT\n : clickedPanelPosition < cameraPosition\n ? DIRECTION.PREV\n : null;\n\n // Don't provide axes event, to use axes instance instead\n triggerEvent(EVENTS.SELECT, null, true, {\n direction, // Direction to the clicked panel\n index: clickedPanel.getIndex(),\n panel: clickedPanel,\n });\n }\n }\n}\n\nexport default HoldingState;\n","/**\n * Copyright (c) 2015 NAVER Corp.\n * egjs projects are licensed under the MIT license\n */\n\nimport State from \"./State\";\nimport { STATE_TYPE, EVENTS } from \"../consts\";\nimport { FlickingContext } from \"../types\";\n\nclass DraggingState extends State {\n public readonly type = STATE_TYPE.DRAGGING;\n public readonly holding = true;\n public readonly playing = true;\n\n public onChange(e: any, { moveCamera, transitTo }: FlickingContext): void {\n if (!e.delta.flick) {\n return;\n }\n\n moveCamera(e)\n .onStopped(() => {\n transitTo(STATE_TYPE.DISABLED);\n });\n }\n\n public onRelease(e: any, context: FlickingContext): void {\n const { flicking, viewport, triggerEvent, transitTo, stopCamera } = context;\n\n const delta = this.delta;\n const absDelta = Math.abs(delta);\n const options = flicking.options;\n const horizontal = options.horizontal;\n const moveType = viewport.moveType;\n const inputEvent = e.inputEvent;\n\n const velocity = horizontal\n ? inputEvent.velocityX\n : inputEvent.velocityY;\n const inputDelta = horizontal\n ? inputEvent.deltaX\n : inputEvent.deltaY;\n const isNextDirection = Math.abs(velocity) > 1\n ? velocity < 0\n : absDelta > 0\n ? delta > 0\n : inputDelta < 0;\n\n const swipeDistance = viewport.options.bound\n ? Math.max(absDelta, Math.abs(inputDelta))\n : absDelta;\n const swipeAngle = inputEvent.deltaX\n ? Math.abs(180 * Math.atan(inputEvent.deltaY / inputEvent.deltaX) / Math.PI)\n : 90;\n const belowAngleThreshold = horizontal\n ? swipeAngle <= options.thresholdAngle\n : swipeAngle > options.thresholdAngle;\n const overThreshold = swipeDistance >= options.threshold\n && belowAngleThreshold;\n\n const moveTypeContext = {\n viewport,\n axesEvent: e,\n state: this,\n swipeDistance,\n isNextDirection,\n };\n\n // Update last position to cope with Axes's animating behavior\n // Axes uses start position when animation start\n triggerEvent(EVENTS.HOLD_END, e, true);\n\n const targetPanel = this.targetPanel;\n if (!overThreshold && targetPanel) {\n // Interrupted while animating\n const interruptDestInfo = moveType.findPanelWhenInterrupted(moveTypeContext);\n\n viewport.moveTo(\n interruptDestInfo.panel,\n interruptDestInfo.destPos,\n interruptDestInfo.eventType,\n e,\n interruptDestInfo.duration,\n );\n transitTo(STATE_TYPE.ANIMATING);\n return;\n }\n\n const currentPanel = viewport.getCurrentPanel();\n const nearestPanel = viewport.getNearestPanel();\n\n if (!currentPanel || !nearestPanel) {\n // There're no panels\n e.stop();\n transitTo(STATE_TYPE.IDLE);\n return;\n }\n\n const destInfo = overThreshold\n ? moveType.findTargetPanel(moveTypeContext)\n : moveType.findRestorePanel(moveTypeContext);\n\n viewport.moveTo(\n destInfo.panel,\n destInfo.destPos,\n destInfo.eventType,\n e,\n destInfo.duration,\n ).onSuccess(() => {\n transitTo(STATE_TYPE.ANIMATING);\n }).onStopped(() => {\n transitTo(STATE_TYPE.DISABLED);\n stopCamera(e);\n });\n }\n}\n\nexport default DraggingState;\n","/**\n * Copyright (c) 2015 NAVER Corp.\n * egjs projects are licensed under the MIT license\n */\n\nimport State from \"./State\";\nimport { STATE_TYPE, EVENTS } from \"../consts\";\nimport { FlickingContext } from \"../types\";\nimport { circulate } from \"../utils\";\n\nclass AnimatingState extends State {\n public readonly type = STATE_TYPE.ANIMATING;\n public readonly holding = false;\n public readonly playing = true;\n\n public onHold(e: any, { viewport, triggerEvent, transitTo }: FlickingContext): void {\n const options = viewport.options;\n const scrollArea = viewport.getScrollArea();\n const scrollAreaSize = viewport.getScrollAreaSize();\n const loopCount = Math.floor((this.lastPosition + this.delta - scrollArea.prev) / scrollAreaSize);\n\n const targetPanel = this.targetPanel;\n if (options.circular && loopCount !== 0 && targetPanel) {\n const cloneCount = viewport.panelManager.getCloneCount();\n const originalTargetPosition = targetPanel.getPosition();\n\n // cloneIndex is from -1 to cloneCount - 1\n const newCloneIndex = circulate(targetPanel.getCloneIndex() - loopCount, -1, cloneCount - 1, true);\n const newTargetPosition = originalTargetPosition - loopCount * scrollAreaSize;\n const newTargetPanel = targetPanel.getIdenticalPanels()[newCloneIndex + 1].clone(newCloneIndex, true);\n\n // Set new target panel considering looped count\n newTargetPanel.setPosition(newTargetPosition);\n this.targetPanel = newTargetPanel;\n }\n\n // Reset last position and delta\n this.delta = 0;\n this.lastPosition = viewport.getCameraPosition();\n\n // Update current panel as current nearest panel\n viewport.setCurrentPanel(viewport.getNearestPanel()!);\n triggerEvent(EVENTS.HOLD_START, e, true)\n .onSuccess(() => {\n transitTo(STATE_TYPE.DRAGGING);\n })\n .onStopped(() => {\n transitTo(STATE_TYPE.DISABLED);\n });\n }\n\n public onChange(e: any, { moveCamera, transitTo }: FlickingContext): void {\n if (!e.delta.flick) {\n return;\n }\n\n moveCamera(e)\n .onStopped(() => {\n transitTo(STATE_TYPE.DISABLED);\n });\n }\n\n public onFinish(e: any, { flicking, viewport, triggerEvent, transitTo }: FlickingContext) {\n const isTrusted = e && e.isTrusted;\n\n viewport.options.bound\n ? viewport.setCurrentPanel(this.targetPanel!)\n : viewport.setCurrentPanel(viewport.getNearestPanel()!);\n\n if (flicking.options.adaptive) {\n viewport.updateAdaptiveSize();\n }\n\n transitTo(STATE_TYPE.IDLE);\n viewport.updateCameraPosition();\n triggerEvent(EVENTS.MOVE_END, e, isTrusted, {\n direction: this.direction,\n });\n }\n}\n\nexport default AnimatingState;\n","/**\n * Copyright (c) 2015 NAVER Corp.\n * egjs projects are licensed under the MIT license\n */\n\nimport State from \"./State\";\nimport { STATE_TYPE } from \"../consts\";\nimport { FlickingContext } from \"../types\";\n\nclass DisabledState extends State {\n public readonly type = STATE_TYPE.DISABLED;\n public readonly holding = false;\n public readonly playing = true;\n\n public onAnimationEnd(e: any, { transitTo }: FlickingContext): void {\n transitTo(STATE_TYPE.IDLE);\n }\n\n public onChange(e: any, { viewport, transitTo }: FlickingContext): void {\n // Can stop Axes's change event\n e.stop();\n\n // Should update axes position as it's already changed at this moment\n viewport.updateAxesPosition(viewport.getCameraPosition());\n transitTo(STATE_TYPE.IDLE);\n }\n\n public onRelease(e: any, { transitTo }: FlickingContext): void {\n // This is needed when stopped hold start event\n if (e.delta.flick === 0) {\n transitTo(STATE_TYPE.IDLE);\n }\n }\n}\n\nexport default DisabledState;\n","/**\n * Copyright (c) 2015 NAVER Corp.\n * egjs projects are licensed under the MIT license\n */\n\nimport State from \"../states/State\";\nimport { AxesEventType, ValueOf, FlickingContext, StateType } from \"../types\";\nimport { AXES_EVENTS, STATE_TYPE } from \"../consts\";\nimport IdleState from \"../states/IdleState\";\nimport HoldingState from \"../states/HoldingState\";\nimport DraggingState from \"../states/DraggingState\";\nimport AnimatingState from \"../states/AnimatingState\";\nimport DisabledState from \"../states/DisabledState\";\n\nclass StateMachine {\n private state: State = new IdleState();\n\n public fire(eventType: ValueOf<AxesEventType>, e: any, context: FlickingContext) {\n const currentState = this.state;\n switch (eventType) {\n case AXES_EVENTS.HOLD:\n currentState.onHold(e, context);\n break;\n case AXES_EVENTS.CHANGE:\n currentState.onChange(e, context);\n break;\n case AXES_EVENTS.RELEASE:\n currentState.onRelease(e, context);\n break;\n case AXES_EVENTS.ANIMATION_END:\n currentState.onAnimationEnd(e, context);\n break;\n case AXES_EVENTS.FINISH:\n currentState.onFinish(e, context);\n break;\n }\n }\n\n public getState(): State {\n return this.state;\n }\n\n public transitTo = (nextStateType: ValueOf<StateType>): State => {\n const currentState = this.state;\n\n if (currentState.type !== nextStateType) {\n let nextState: State;\n\n switch (nextStateType) {\n case STATE_TYPE.IDLE:\n nextState = new IdleState();\n break;\n case STATE_TYPE.HOLDING:\n nextState = new HoldingState();\n break;\n case STATE_TYPE.DRAGGING:\n nextState = new DraggingState();\n break;\n case STATE_TYPE.ANIMATING:\n nextState = new AnimatingState();\n break;\n case STATE_TYPE.DISABLED:\n nextState = new DisabledState();\n break;\n }\n\n currentState.onExit(nextState!);\n nextState!.onEnter(currentState);\n\n this.state = nextState!;\n }\n return this.state;\n }\n}\n\nexport default StateMachine;\n","/**\n * Copyright (c) 2015 NAVER Corp.\n * egjs projects are licensed under the MIT license\n */\n\nimport { MoveTypeStringOption, MoveTypeContext, DestinationInfo } from \"../types\";\nimport Panel from \"../components/Panel\";\nimport { EVENTS } from \"../consts\";\n\nabstract class MoveType {\n protected readonly abstract type: string;\n\n public abstract findTargetPanel(ctx: MoveTypeContext): DestinationInfo;\n\n public is(type: MoveTypeStringOption): boolean {\n return type === this.type;\n }\n\n public findRestorePanel(ctx: MoveTypeContext): DestinationInfo {\n const viewport = ctx.viewport;\n const options = viewport.options;\n\n const panel = options.circular\n ? this.findRestorePanelInCircularMode(ctx)\n : viewport.getCurrentPanel()!;\n\n return {\n panel,\n destPos: viewport.findEstimatedPosition(panel),\n duration: options.duration,\n eventType: EVENTS.RESTORE,\n };\n }\n\n public findPanelWhenInterrupted(ctx: MoveTypeContext): DestinationInfo {\n const { state, viewport } = ctx;\n const targetPanel = state.targetPanel!;\n\n return {\n panel: targetPanel,\n destPos: viewport.findEstimatedPosition(targetPanel),\n duration: viewport.options.duration,\n eventType: \"\",\n };\n }\n\n // Calculate minimum distance to \"change\" panel\n protected calcBrinkOfChange(ctx: MoveTypeContext): number {\n const { viewport, isNextDirection } = ctx;\n\n const options = viewport.options;\n const currentPanel = viewport.getCurrentPanel()!;\n const halfGap = options.gap / 2;\n\n const relativeAnchorPosition = currentPanel.getRelativeAnchorPosition();\n\n // Minimum distance needed to decide prev/next panel as nearest\n /*\n * | Prev | Next |\n * |--------|--------------|\n * [][ |<-Anchor ][] <- Panel + Half-Gap\n */\n let minimumDistanceToChange = isNextDirection\n ? currentPanel.getSize() - relativeAnchorPosition + halfGap\n : relativeAnchorPosition + halfGap;\n\n minimumDistanceToChange = Math.max(minimumDistanceToChange, options.threshold);\n\n return minimumDistanceToChange;\n }\n\n private findRestorePanelInCircularMode(ctx: MoveTypeContext): Panel {\n const viewport = ctx.viewport;\n const originalPanel = viewport.getCurrentPanel()!.getOriginalPanel();\n const hangerPosition = viewport.getHangerPosition();\n\n const firstClonedPanel = originalPanel.getIdenticalPanels()[1];\n const lapped = Math.abs(originalPanel.getAnchorPosition() - hangerPosition)\n > Math.abs(firstClonedPanel.getAnchorPosition() - hangerPosition);\n\n return (!ctx.isNextDirection && lapped)\n ? firstClonedPanel\n : originalPanel;\n }\n}\n\nexport default MoveType;\n","/**\n * Copyright (c) 2015 NAVER Corp.\n * egjs projects are licensed under the MIT license\n */\n\nimport MoveType from \"./MoveType\";\nimport { MOVE_TYPE, EVENTS } from \"../consts\";\nimport { MoveTypeContext, DestinationInfo } from \"../types\";\nimport { clamp } from \"../utils\";\n\nclass Snap extends MoveType {\n protected readonly type: string = MOVE_TYPE.SNAP;\n protected count: number;\n\n constructor(count: number) {\n super();\n this.count = count;\n }\n\n public findTargetPanel(ctx: MoveTypeContext): DestinationInfo {\n const { viewport, axesEvent, swipeDistance } = ctx;\n const snapCount = this.count;\n const eventDelta = Math.abs(axesEvent.delta.flick);\n const currentPanel = viewport.getCurrentPanel()!;\n const nearestPanel = viewport.getNearestPanel()!;\n const minimumDistanceToChange = this.calcBrinkOfChange(ctx);\n const nearestIsCurrent = nearestPanel.getIndex() === currentPanel.getIndex();\n\n // This can happen when bounce is 0\n const shouldMoveWhenBounceIs0 = viewport.canSetBoundMode() && nearestIsCurrent;\n const shouldMoveToAdjacent = !viewport.isOutOfBound()\n && (swipeDistance <= minimumDistanceToChange || shouldMoveWhenBounceIs0);\n\n if (snapCount > 1 && eventDelta > minimumDistanceToChange) {\n return this.findSnappedPanel(ctx);\n } else if (shouldMoveToAdjacent) {\n return this.findAdjacentPanel(ctx);\n } else {\n return {\n panel: nearestPanel,\n duration: viewport.options.duration,\n destPos: viewport.findEstimatedPosition(nearestPanel),\n // As swipeDistance holds mouse/touch position change regardless of bounce option value\n // swipDistance > minimumDistanceToChange can happen in bounce area\n // Second condition is for handling that.\n eventType: (swipeDistance <= minimumDistanceToChange)\n || (viewport.isOutOfBound() && nearestIsCurrent)\n ? EVENTS.RESTORE\n : EVENTS.CHANGE,\n };\n }\n }\n\n protected findSnappedPanel(ctx: MoveTypeContext): DestinationInfo {\n const { axesEvent, viewport, state, isNextDirection } = ctx;\n\n const eventDelta = Math.abs(axesEvent.delta.flick);\n const minimumDistanceToChange = this.calcBrinkOfChange(ctx);\n const snapCount = this.count;\n const options = viewport.options;\n const scrollAreaSize = viewport.getScrollAreaSize();\n const halfGap = options.gap / 2;\n const estimatedHangerPos = axesEvent.destPos.flick + viewport.getRelativeHangerPosition();\n\n let panelToMove = viewport.getNearestPanel()!;\n let cycleIndex = panelToMove.getCloneIndex() + 1; // 0(original) or 1(clone)\n let passedPanelCount = 0;\n\n while (passedPanelCount < snapCount) {\n // Since panelToMove holds also cloned panels, we should use original panel's position\n const originalPanel = panelToMove.getOriginalPanel();\n const panelPosition = originalPanel.getPosition() + cycleIndex * scrollAreaSize;\n const panelSize = originalPanel.getSize();\n\n const panelNextPosition = panelPosition + panelSize + halfGap;\n const panelPrevPosition = panelPosition - halfGap;\n\n // Current panelToMove contains destPos\n if (\n (isNextDirection && panelNextPosition > estimatedHangerPos)\n || (!isNextDirection && panelPrevPosition < estimatedHangerPos)\n ) {\n break;\n }\n\n const siblingPanel = isNextDirection\n ? panelToMove.nextSibling\n : panelToMove.prevSibling;\n if (!siblingPanel) {\n break;\n }\n\n const panelIndex = panelToMove.getIndex();\n const siblingIndex = siblingPanel.getIndex();\n if ((isNextDirection && siblingIndex <= panelIndex)\n || (!isNextDirection && siblingIndex >= panelIndex)\n ) {\n cycleIndex = isNextDirection\n ? cycleIndex + 1\n : cycleIndex - 1;\n }\n panelToMove = siblingPanel;\n passedPanelCount += 1;\n }\n\n const originalPosition = panelToMove.getOriginalPanel().getPosition();\n\n if (cycleIndex !== 0) {\n panelToMove = panelToMove.clone(panelToMove.getCloneIndex(), true);\n panelToMove.setPosition(originalPosition + cycleIndex * scrollAreaSize);\n }\n\n const defaultDuration = viewport.options.duration;\n const duration = clamp(axesEvent.duration, defaultDuration, defaultDuration * passedPanelCount);\n\n return {\n panel: panelToMove,\n destPos: viewport.findEstimatedPosition(panelToMove),\n duration,\n eventType: Math.max(eventDelta, state.delta) > minimumDistanceToChange\n ? EVENTS.CHANGE\n : EVENTS.RESTORE,\n };\n }\n\n private findAdjacentPanel(ctx: MoveTypeContext): DestinationInfo {\n const { viewport, isNextDirection } = ctx;\n\n const options = viewport.options;\n const currentIndex = viewport.getCurrentIndex();\n const currentPanel = viewport.panelManager.get(currentIndex)!;\n const hangerPosition = viewport.getHangerPosition();\n const scrollArea = viewport.getScrollArea();\n\n const firstClonedPanel = currentPanel.getIdenticalPanels()[1];\n const lapped = options.circular\n && (Math.abs(currentPanel.getAnchorPosition() - hangerPosition)\n > Math.abs(firstClonedPanel.getAnchorPosition() - hangerPosition));\n\n // If lapped in circular mode, use first cloned panel as base panel\n const basePanel = lapped\n ? firstClonedPanel\n : currentPanel;\n const basePosition = basePanel.getPosition();\n\n const adjacentPanel = isNextDirection\n ? basePanel.nextSibling\n : basePanel.prevSibling;\n\n const eventType = adjacentPanel\n ? EVENTS.CHANGE\n : EVENTS.RESTORE;\n const panelToMove = adjacentPanel\n ? adjacentPanel\n : basePanel;\n const targetRelativeAnchorPosition = panelToMove.getRelativeAnchorPosition();\n\n const estimatedPanelPosition = options.circular\n ? isNextDirection\n ? basePosition + basePanel.getSize() + targetRelativeAnchorPosition + options.gap\n : basePosition - (panelToMove.getSize() - targetRelativeAnchorPosition) - options.gap\n : panelToMove.getAnchorPosition();\n const estimatedPosition = estimatedPanelPosition - viewport.getRelativeHangerPosition();\n const destPos = viewport.canSetBoundMode()\n ? clamp(estimatedPosition, scrollArea.prev, scrollArea.next)\n : estimatedPosition;\n\n return {\n panel: panelToMove,\n destPos,\n duration: options.duration,\n eventType,\n };\n }\n}\n\nexport default Snap;\n","/**\n * Copyright (c) 2015 NAVER Corp.\n * egjs projects are licensed under the MIT license\n */\n\nimport Snap from \"./Snap\";\nimport { MOVE_TYPE, EVENTS } from \"../consts\";\nimport { MoveTypeContext, DestinationInfo } from \"../types\";\nimport { circulate, clamp } from \"../utils\";\n\nclass FreeScroll extends Snap {\n protected readonly type: string = MOVE_TYPE.FREE_SCROLL;\n\n constructor() {\n // Set snap count to Infinity\n super(Infinity);\n }\n\n public findTargetPanel(ctx: MoveTypeContext): DestinationInfo {\n const { axesEvent, state, viewport } = ctx;\n const destPos = axesEvent.destPos.flick;\n const minimumDistanceToChange = this.calcBrinkOfChange(ctx);\n const scrollArea = viewport.getScrollArea();\n const currentPanel = viewport.getCurrentPanel()!;\n const options = viewport.options;\n\n const delta = Math.abs(axesEvent.delta.flick + state.delta);\n if (delta > minimumDistanceToChange) {\n const destInfo = super.findSnappedPanel(ctx);\n\n destInfo.duration = axesEvent.duration;\n destInfo.destPos = destPos;\n destInfo.eventType = !options.circular && destInfo.panel === currentPanel\n ? \"\"\n : EVENTS.CHANGE;\n\n return destInfo;\n } else {\n let estimatedPosition = options.circular\n ? circulate(destPos, scrollArea.prev, scrollArea.next, false)\n : destPos;\n estimatedPosition = clamp(estimatedPosition, scrollArea.prev, scrollArea.next);\n estimatedPosition += viewport.getRelativeHangerPosition();\n\n const estimatedPanel = viewport.findNearestPanelAt(estimatedPosition)!;\n\n return {\n panel: estimatedPanel,\n destPos,\n duration: axesEvent.duration,\n eventType: \"\",\n };\n }\n }\n\n public findRestorePanel(ctx: MoveTypeContext): DestinationInfo {\n return this.findTargetPanel(ctx);\n }\n\n public findPanelWhenInterrupted(ctx: MoveTypeContext): DestinationInfo {\n const { viewport } = ctx;\n\n return {\n panel: viewport.getNearestPanel()!,\n destPos: viewport.getCameraPosition(),\n duration: 0,\n eventType: \"\",\n };\n }\n\n protected calcBrinkOfChange(ctx: MoveTypeContext): number {\n const { viewport, isNextDirection } = ctx;\n\n const options = viewport.options;\n const currentPanel = viewport.getCurrentPanel()!;\n const halfGap = options.gap / 2;\n\n const lastPosition = viewport.stateMachine.getState().lastPosition;\n const currentPanelPosition = currentPanel.getPosition();\n\n // As camera can stop anywhere in free scroll mode,\n // minimumDistanceToChange should be calculated differently.\n // Ref #191(https://github.com/naver/egjs-flicking/issues/191)\n const lastHangerPosition = lastPosition + viewport.getRelativeHangerPosition();\n\n const scrollAreaSize = viewport.getScrollAreaSize();\n let minimumDistanceToChange = isNextDirection\n ? currentPanelPosition + currentPanel.getSize() - lastHangerPosition + halfGap\n : lastHangerPosition - currentPanelPosition + halfGap;\n minimumDistanceToChange = Math.abs(minimumDistanceToChange % scrollAreaSize);\n\n return Math.min(minimumDistanceToChange, scrollAreaSize - minimumDistanceToChange);\n }\n}\n\nexport default FreeScroll;\n","/**\n * Copyright (c) 2015 NAVER Corp.\n * egjs projects are licensed under the MIT license\n */\nimport Axes, { PanInput } from \"@egjs/axes\";\n\nimport Flicking from \"../Flicking\";\nimport Panel from \"./Panel\";\nimport PanelManager from \"./PanelManager\";\nimport StateMachine from \"./StateMachine\";\nimport MoveType from \"../moves/MoveType\";\nimport { FlickingOptions, FlickingPanel, FlickingStatus, ElementLike, EventType, TriggerCallback, NeedPanelEvent, FlickingEvent, MoveTypeObjectOption, OriginalStyle, Plugin, DestroyOption, BoundingBox } from \"../types\";\nimport { DEFAULT_VIEWPORT_CSS, DEFAULT_CAMERA_CSS, TRANSFORM, DEFAULT_OPTIONS, EVENTS, DIRECTION, STATE_TYPE, MOVE_TYPE } from \"../consts\";\nimport { clamp, applyCSS, toArray, parseArithmeticExpression, isBetween, isArray, parseElement, hasClass, restoreStyle, circulate, findIndex, getBbox } from \"../utils\";\nimport Snap from \"../moves/Snap\";\nimport FreeScroll from \"../moves/FreeScroll\";\n\nexport default class Viewport {\n public options: FlickingOptions;\n public stateMachine: StateMachine;\n public panelManager: PanelManager;\n public moveType: MoveType;\n\n private flicking: Flicking;\n private axes: Axes;\n private panInput: PanInput | null;\n\n private viewportElement: HTMLElement;\n private cameraElement: HTMLElement;\n\n private triggerEvent: Flicking[\"triggerEvent\"];\n private axesHandlers: { [key: string]: any };\n\n private currentPanel: Panel | undefined;\n private nearestPanel: Panel | undefined;\n private visiblePanels: Panel[];\n\n private plugins: Plugin[] = [];\n private panelBboxes: { [className: string]: BoundingBox };\n private state: {\n size: number;\n position: number;\n panelMaintainRatio: number;\n relativeHangerPosition: number;\n positionOffset: number;\n scrollArea: {\n prev: number;\n next: number;\n };\n translate: {\n name: string,\n has3d: boolean,\n };\n infiniteThreshold: number;\n checkedIndexes: Array<[number, number]>;\n isAdaptiveCached: boolean;\n isViewportGiven: boolean;\n isCameraGiven: boolean;\n originalViewportStyle: OriginalStyle;\n originalCameraStyle: OriginalStyle;\n cachedBbox: BoundingBox | null;\n };\n\n constructor(\n flicking: Flicking,\n options: FlickingOptions,\n triggerEvent: Flicking[\"triggerEvent\"],\n ) {\n this.flicking = flicking;\n this.triggerEvent = triggerEvent;\n\n this.state = {\n size: 0,\n position: 0,\n panelMaintainRatio: 0,\n relativeHangerPosition: 0,\n positionOffset: 0,\n scrollArea: {\n prev: 0,\n next: 0,\n },\n translate: TRANSFORM,\n infiniteThreshold: 0,\n checkedIndexes: [],\n isAdaptiveCached: false,\n isViewportGiven: false,\n isCameraGiven: false,\n originalViewportStyle: {\n className: null,\n style: null,\n },\n originalCameraStyle: {\n className: null,\n style: null,\n },\n cachedBbox: null,\n };\n this.options = options;\n this.stateMachine = new StateMachine();\n this.visiblePanels = [];\n this.panelBboxes = {};\n\n this.build();\n }\n\n public moveTo(\n panel: Panel,\n destPos: number,\n eventType: EventType[\"CHANGE\"] | EventType[\"RESTORE\"] | \"\",\n axesEvent: any,\n duration: number = this.options.duration,\n ): TriggerCallback {\n const state = this.state;\n const currentState = this.stateMachine.getState();\n const currentPosition = state.position;\n\n const isTrusted = axesEvent\n ? axesEvent.isTrusted\n : false;\n const direction = destPos === currentPosition\n ? null\n : destPos > currentPosition\n ? DIRECTION.NEXT\n : DIRECTION.PREV;\n\n let eventResult: TriggerCallback;\n if (eventType === EVENTS.CHANGE) {\n eventResult = this.triggerEvent(EVENTS.CHANGE, axesEvent, isTrusted, {\n index: panel.getIndex(),\n panel,\n direction,\n });\n } else if (eventType === EVENTS.RESTORE) {\n eventResult = this.triggerEvent(EVENTS.RESTORE, axesEvent, isTrusted);\n } else {\n eventResult = {\n onSuccess(callback: () => void): TriggerCallback {\n callback();\n return this;\n },\n onStopped(): TriggerCallback {\n return this;\n },\n };\n }\n\n eventResult.onSuccess(() => {\n currentState.delta = 0;\n currentState.lastPosition = this.getCameraPosition();\n currentState.targetPanel = panel;\n currentState.direction = destPos === currentPosition\n ? null\n : destPos > currentPosition\n ? DIRECTION.NEXT\n : DIRECTION.PREV;\n\n if (destPos === currentPosition) {\n // no move\n this.nearestPanel = panel;\n this.currentPanel = panel;\n }\n\n if (axesEvent && axesEvent.setTo) {\n // freeScroll only occurs in release events\n axesEvent.setTo({ flick: destPos }, duration);\n } else {\n this.axes.setTo({ flick: destPos }, duration);\n }\n });\n\n return eventResult;\n }\n\n public moveCamera(pos: number, axesEvent?: any): void {\n const state = this.state;\n const options = this.options;\n const transform = state.translate.name;\n const scrollArea = state.scrollArea;\n\n // Update position & nearestPanel\n if (options.circular && !isBetween(pos, scrollArea.prev, scrollArea.next)) {\n pos = circulate(pos, scrollArea.prev, scrollArea.next, false);\n }\n state.position = pos;\n this.nearestPanel = this.findNearestPanel();\n const nearestPanel = this.nearestPanel;\n const originalNearestPosition = nearestPanel\n ? nearestPanel.getPosition()\n : 0;\n\n // From 0(panel position) to 1(panel position + panel size)\n // When it's on gap area value will be (val > 1 || val < 0)\n if (nearestPanel) {\n const hangerPosition = this.getHangerPosition();\n const panelPosition = nearestPanel.getPosition();\n const panelSize = nearestPanel.getSize();\n const halfGap = options.gap / 2;\n\n // As panel's range is from panel position - half gap ~ panel pos + panel size + half gap\n state.panelMaintainRatio = (hangerPosition - panelPosition + halfGap) / (panelSize + 2 * halfGap);\n } else {\n state.panelMaintainRatio = 0;\n }\n\n this.checkNeedPanel(axesEvent);\n\n // Possibly modified after need panel, if it's looped\n const modifiedNearestPosition = nearestPanel\n ? nearestPanel.getPosition()\n : 0;\n\n pos += (modifiedNearestPosition - originalNearestPosition);\n state.position = pos;\n\n this.updateVisiblePanels();\n\n // Offset is needed to fix camera layer size in visible-only rendering mode\n const posOffset = options.renderOnlyVisible\n ? state.positionOffset\n : 0;\n const moveVector = options.horizontal\n ? [-(pos - posOffset), 0] : [0, -(pos - posOffset)];\n const moveCoord = moveVector.map(coord => `${Math.round(coord)}px`).join(\", \");\n\n this.cameraElement.style[transform] = state.translate.has3d\n ? `translate3d(${moveCoord}, 0px)`\n : `translate(${moveCoord})`;\n }\n\n public stopCamera = (axesEvent: any): void => {\n if (axesEvent && axesEvent.setTo) {\n axesEvent.setTo({ flick: this.state.position }, 0);\n }\n\n this.stateMachine.transitTo(STATE_TYPE.IDLE);\n }\n\n public unCacheBbox(): void {\n const state = this.state;\n const options = this.options;\n\n state.cachedBbox = null;\n this.visiblePanels = [];\n\n const viewportElement = this.viewportElement;\n if (!options.horizontal) {\n // Don't preserve previous width for adaptive resizing\n viewportElement.style.width = \"\";\n } else {\n viewportElement.style.height = \"\";\n }\n state.isAdaptiveCached = false;\n this.panelBboxes = {};\n }\n\n public resize(): void {\n this.updateSize();\n this.updateOriginalPanelPositions();\n this.updateAdaptiveSize();\n this.updateScrollArea();\n this.updateClonePanels();\n this.updateVisiblePanelPositions();\n this.updateCameraPosition();\n this.updatePlugins();\n }\n\n // Find nearest anchor from current hanger position\n public findNearestPanel(): Panel | undefined {\n const state = this.state;\n const panelManager = this.panelManager;\n const hangerPosition = this.getHangerPosition();\n\n if (this.isOutOfBound()) {\n const position = state.position;\n\n return position <= state.scrollArea.prev\n ? panelManager.firstPanel()\n : panelManager.lastPanel();\n }\n\n return this.findNearestPanelAt(hangerPosition);\n }\n\n public findNearestPanelAt(position: number): Panel | undefined {\n const panelManager = this.panelManager;\n\n const allPanels = panelManager.allPanels();\n let minimumDistance = Infinity;\n let nearestPanel: Panel | undefined;\n\n for (const panel of allPanels) {\n if (!panel) {\n continue;\n }\n const prevPosition = panel.getPosition();\n const nextPosition = prevPosition + panel.getSize();\n\n // Use shortest distance from panel's range\n const distance = isBetween(position, prevPosition, nextPosition)\n ? 0\n : Math.min(\n Math.abs(prevPosition - position),\n Math.abs(nextPosition - position),\n );\n\n if (distance > minimumDistance) {\n break;\n } else if (distance === minimumDistance) {\n const minimumAnchorDistance = Math.abs(position - nearestPanel!.getAnchorPosition());\n const anchorDistance = Math.abs(position - panel.getAnchorPosition());\n\n if (anchorDistance > minimumAnchorDistance) {\n break;\n }\n }\n\n minimumDistance = distance;\n nearestPanel = panel;\n }\n\n return nearestPanel;\n }\n\n public findNearestIdenticalPanel(panel: Panel): Panel {\n let nearest = panel;\n let shortestDistance = Infinity;\n const hangerPosition = this.getHangerPosition();\n\n const identicals = panel.getIdenticalPanels();\n identicals.forEach(identical => {\n const anchorPosition = identical.getAnchorPosition();\n const distance = Math.abs(anchorPosition - hangerPosition);\n\n if (distance < shortestDistance) {\n nearest = identical;\n shortestDistance = distance;\n }\n });\n\n return nearest;\n }\n\n // Find shortest camera position that distance is minimum\n public findShortestPositionToPanel(panel: Panel): number {\n const state = this.state;\n const options = this.options;\n const anchorPosition = panel.getAnchorPosition();\n const hangerPosition = this.getHangerPosition();\n const distance = Math.abs(hangerPosition - anchorPosition);\n const scrollAreaSize = state.scrollArea.next - state.scrollArea.prev;\n\n if (!options.circular) {\n const position = anchorPosition - state.relativeHangerPosition;\n return this.canSetBoundMode()\n ? clamp(position, state.scrollArea.prev, state.scrollArea.next)\n : position;\n } else {\n // If going out of viewport border is more efficient way of moving, choose that position\n return distance <= scrollAreaSize - distance\n ? anchorPosition - state.relativeHangerPosition\n : anchorPosition > hangerPosition\n // PREV TO NEXT\n ? anchorPosition - state.relativeHangerPosition - scrollAreaSize\n // NEXT TO PREV\n : anchorPosition - state.relativeHangerPosition + scrollAreaSize;\n }\n }\n\n public findEstimatedPosition(panel: Panel): number {\n const scrollArea = this.getScrollArea();\n\n let estimatedPosition = panel.getAnchorPosition() - this.getRelativeHangerPosition();\n estimatedPosition = this.canSetBoundMode()\n ? clamp(estimatedPosition, scrollArea.prev, scrollArea.next)\n : estimatedPosition;\n\n return estimatedPosition;\n }\n\n public addVisiblePanel(panel: Panel): void {\n if (this.getVisibleIndexOf(panel) < 0) {\n this.visiblePanels.push(panel);\n }\n }\n\n public enable(): void {\n if (!this.panInput) {\n this.createPanInput();\n }\n }\n\n public disable(): void {\n if (this.panInput) {\n this.panInput.destroy();\n this.panInput = null;\n\n this.stateMachine.transitTo(STATE_TYPE.IDLE);\n }\n }\n\n public insert(index: number, element: ElementLike | ElementLike[]): FlickingPanel[] {\n const lastIndex = this.panelManager.getLastIndex();\n\n // Index should not below 0\n if (index < 0 || index > lastIndex) {\n return [];\n }\n\n const state = this.state;\n const options = this.options;\n const parsedElements = parseElement(element);\n\n const panels = parsedElements\n .map((el, idx) => new Panel(el, index + idx, this))\n .slice(0, lastIndex - index + 1);\n\n if (panels.length <= 0) {\n return [];\n }\n\n const pushedIndex = this.panelManager.insert(index, panels);\n\n // ...then calc bbox for all panels\n this.resizePanels(panels);\n\n if (!this.currentPanel) {\n this.currentPanel = panels[0];\n this.nearestPanel = panels[0];\n\n const newCenterPanel = panels[0];\n const newPanelPosition = this.findEstimatedPosition(newCenterPanel);\n state.position = newPanelPosition;\n this.updateAxesPosition(newPanelPosition);\n state.panelMaintainRatio = (newCenterPanel.getRelativeAnchorPosition() + options.gap / 2) / (newCenterPanel.getSize() + options.gap);\n }\n\n // Update checked indexes in infinite mode\n this.updateCheckedIndexes({ min: index, max: index });\n state.checkedIndexes.forEach((indexes, idx) => {\n const [min, max] = indexes;\n if (index < min) {\n // Push checked index\n state.checkedIndexes.splice(idx, 1, [min + pushedIndex, max + pushedIndex]);\n }\n });\n\n this.resize();\n\n return panels;\n }\n\n public replace(index: number, element: ElementLike | ElementLike[]): FlickingPanel[] {\n const state = this.state;\n const options = this.options;\n const panelManager = this.panelManager;\n const lastIndex = panelManager.getLastIndex();\n\n // Index should not below 0\n if (index < 0 || index > lastIndex) {\n return [];\n }\n\n const parsedElements = parseElement(element);\n const panels = parsedElements\n .map((el, idx) => new Panel(el, index + idx, this))\n .slice(0, lastIndex - index + 1);\n\n if (panels.length <= 0) {\n return [];\n }\n\n const replacedPanels = panelManager.replace(index, panels);\n\n replacedPanels.forEach(panel => {\n const visibleIndex = this.getVisibleIndexOf(panel);\n if (visibleIndex > -1) {\n this.visiblePanels.splice(visibleIndex, 1);\n }\n });\n\n // ...then calc bbox for all panels\n this.resizePanels(panels);\n\n const currentPanel = this.currentPanel;\n const wasEmpty = !currentPanel;\n if (wasEmpty) {\n this.currentPanel = panels[0];\n this.nearestPanel = panels[0];\n\n const newCenterPanel = panels[0];\n const newPanelPosition = this.findEstimatedPosition(newCenterPanel);\n state.position = newPanelPosition;\n this.updateAxesPosition(newPanelPosition);\n state.panelMaintainRatio = (newCenterPanel.getRelativeAnchorPosition() + options.gap / 2) / (newCenterPanel.getSize() + options.gap);\n } else if (isBetween(currentPanel!.getIndex(), index, index + panels.length - 1)) {\n // Current panel is replaced\n this.currentPanel = panelManager.get(currentPanel!.getIndex());\n }\n\n // Update checked indexes in infinite mode\n this.updateCheckedIndexes({ min: index, max: index + panels.length - 1 });\n\n this.resize();\n\n return panels;\n }\n\n public remove(index: number, deleteCount: number = 1): FlickingPanel[] {\n const state = this.state;\n // Index should not below 0\n index = Math.max(index, 0);\n\n const panelManager = this.panelManager;\n const currentIndex = this.getCurrentIndex();\n\n const removedPanels = panelManager.remove(index, deleteCount);\n if (isBetween(currentIndex, index, index + deleteCount - 1)) {\n // Current panel is removed\n // Use panel at removing index - 1 as new current panel if it exists\n const newCurrentIndex = Math.max(index - 1, panelManager.getRange().min);\n this.currentPanel = panelManager.get(newCurrentIndex);\n }\n\n // Update checked indexes in infinite mode\n if (deleteCount > 0) {\n // Check whether removing index will affect checked indexes\n // Suppose index 0 is empty and removed index 1, then checked index 0 should be deleted and vice versa.\n this.updateCheckedIndexes({ min: index - 1, max: index + deleteCount });\n // Uncache visible panels to refresh panels\n this.visiblePanels = [];\n }\n\n if (panelManager.getPanelCount() <= 0) {\n this.currentPanel = undefined;\n this.nearestPanel = undefined;\n }\n\n this.resize();\n\n const scrollArea = state.scrollArea;\n if (state.position < scrollArea.prev || state.position > scrollArea.next) {\n const newPosition = circulate(state.position, scrollArea.prev, scrollArea.next, false);\n this.moveCamera(newPosition);\n this.updateAxesPosition(newPosition);\n }\n\n return removedPanels;\n }\n\n public updateAdaptiveSize(): void {\n const state = this.state;\n const options = this.options;\n const horizontal = options.horizontal;\n const currentPanel = this.getCurrentPanel();\n\n if (!currentPanel) {\n return;\n }\n\n const shouldApplyAdaptive = options.adaptive || !state.isAdaptiveCached;\n const viewportStyle = this.viewportElement.style;\n if (shouldApplyAdaptive) {\n let sizeToApply: number;\n if (options.adaptive) {\n const panelBbox = currentPanel.getBbox();\n\n sizeToApply = horizontal ? panelBbox.height : panelBbox.width;\n } else {\n // Find minimum height of panels to maximum panel size\n const maximumPanelSize = this.panelManager.originalPanels().reduce((maximum, panel) => {\n const panelBbox = panel.getBbox();\n return Math.max(maximum, horizontal ? panelBbox.height : panelBbox.width);\n }, 0);\n\n sizeToApply = maximumPanelSize;\n }\n\n if (!state.isAdaptiveCached) {\n const viewportBbox = this.updateBbox();\n sizeToApply = Math.max(sizeToApply, horizontal ? viewportBbox.height : viewportBbox.width);\n state.isAdaptiveCached = true;\n }\n\n const viewportSize = `${sizeToApply}px`;\n if (horizontal) {\n viewportStyle.height = viewportSize;\n state.cachedBbox!.height = sizeToApply;\n } else {\n viewportStyle.width = viewportSize;\n state.cachedBbox!.width = sizeToApply;\n }\n }\n }\n\n // Update camera position after resizing\n public updateCameraPosition(): void {\n const state = this.state;\n const currentPanel = this.getCurrentPanel();\n const cameraPosition = this.getCameraPosition();\n const currentState = this.stateMachine.getState();\n const isFreeScroll = this.moveType.is(MOVE_TYPE.FREE_SCROLL);\n const relativeHangerPosition = this.getRelativeHangerPosition();\n const halfGap = this.options.gap / 2;\n\n if (currentState.holding || currentState.playing) {\n this.updateVisiblePanels();\n return;\n }\n\n let newPosition: number;\n if (isFreeScroll) {\n const positionBounded = this.canSetBoundMode() && (cameraPosition === state.scrollArea.prev || cameraPosition === state.scrollArea.next);\n const nearestPanel = this.getNearestPanel();\n\n // Preserve camera position if it is bound to scroll area limit\n newPosition = positionBounded || !nearestPanel\n ? cameraPosition\n : nearestPanel.getPosition() - halfGap + (nearestPanel.getSize() + 2 * halfGap) * state.panelMaintainRatio - relativeHangerPosition;\n } else {\n newPosition = currentPanel\n ? currentPanel.getAnchorPosition() - relativeHangerPosition\n : cameraPosition;\n }\n\n if (this.canSetBoundMode()) {\n newPosition = clamp(newPosition, state.scrollArea.prev, state.scrollArea.next);\n }\n\n // Pause & resume axes to prevent axes's \"change\" event triggered\n // This should be done before moveCamera, as moveCamera can trigger needPanel\n this.updateAxesPosition(newPosition);\n\n this.moveCamera(newPosition);\n }\n\n public updateBbox(): BoundingBox {\n const state = this.state;\n const options = this.options;\n const viewportElement = this.viewportElement;\n\n if (!state.cachedBbox) {\n state.cachedBbox = getBbox(viewportElement, options.useOffset);\n }\n\n return state.cachedBbox!;\n }\n\n public updatePlugins(): void {\n // update for resize\n this.plugins.forEach(plugin => {\n plugin.update && plugin.update(this.flicking);\n });\n }\n\n public destroy(option: Partial<DestroyOption>): void {\n const state = this.state;\n const wrapper = this.flicking.getElement();\n const viewportElement = this.viewportElement;\n const cameraElement = this.cameraElement;\n const originalPanels = this.panelManager.originalPanels();\n\n this.removePlugins(this.plugins);\n if (!option.preserveUI) {\n restoreStyle(viewportElement, state.originalViewportStyle);\n restoreStyle(cameraElement, state.originalCameraStyle);\n\n if (!state.isCameraGiven && !this.options.renderExternal) {\n const topmostElement = state.isViewportGiven\n ? viewportElement\n : wrapper;\n const deletingElement = state.isViewportGiven\n ? cameraElement\n : viewportElement;\n\n originalPanels.forEach(panel => {\n topmostElement.appendChild(panel.getElement());\n });\n\n topmostElement.removeChild(deletingElement);\n }\n }\n\n this.axes.destroy();\n this.panInput?.destroy();\n\n originalPanels.forEach(panel => { panel.destroy(option); });\n\n // release resources\n for (const x in this) {\n (this as any)[x] = null;\n }\n }\n\n public restore(status: FlickingStatus): void {\n const panels = status.panels;\n const defaultIndex = this.options.defaultIndex;\n const cameraElement = this.cameraElement;\n const panelManager = this.panelManager;\n\n // Restore index\n cameraElement.innerHTML = panels.map(panel => panel.html).join(\"\");\n\n // Create panels first\n this.refreshPanels();\n const createdPanels = panelManager.originalPanels();\n\n // ...then order it by its index\n const orderedPanels: Panel[] = [];\n panels.forEach((panel, idx) => {\n const createdPanel = createdPanels[idx];\n createdPanel.setIndex(panel.index);\n orderedPanels[panel.index] = createdPanel;\n });\n panelManager.replacePanels(orderedPanels, []);\n panelManager.setCloneCount(0); // No clones at this point\n\n const panelCount = panelManager.getPanelCount();\n if (panelCount > 0) {\n this.currentPanel = panelManager.get(status.index)\n || panelManager.get(defaultIndex)\n || panelManager.firstPanel();\n this.nearestPanel = this.currentPanel;\n } else {\n this.currentPanel = undefined;\n this.nearestPanel = undefined;\n }\n this.visiblePanels = orderedPanels.filter(panel => Boolean(panel));\n\n this.resize();\n\n this.axes.setTo({ flick: status.position }, 0);\n this.moveCamera(status.position);\n }\n\n public calcVisiblePanels(): Panel[] {\n const allPanels = this.panelManager.allPanels();\n if (this.options.renderOnlyVisible) {\n const cameraPos = this.getCameraPosition();\n const viewportSize = this.getSize();\n const basePanel = this.nearestPanel!;\n\n const getNextPanel = (panel: Panel) => {\n const nextPanel = panel.nextSibling;\n\n if (nextPanel && nextPanel.getPosition() >= panel.getPosition()) {\n return nextPanel;\n } else {\n return null;\n }\n };\n\n const getPrevPanel = (panel: Panel) => {\n const prevPanel = panel.prevSibling;\n\n if (prevPanel && prevPanel.getPosition() <= panel.getPosition()) {\n return prevPanel;\n } else {\n return null;\n }\n };\n\n const isOutOfBoundNext = (panel: Panel) => panel.getPosition() >= cameraPos + viewportSize;\n const isOutOfBoundPrev = (panel: Panel) => panel.getPosition() + panel.getSize() <= cameraPos;\n\n const getVisiblePanels = (\n panel: Panel,\n getNext: (panel: Panel) => Panel | null,\n isOutOfViewport: (panel: Panel) => boolean,\n ): Panel[] => {\n const visiblePanels: Panel[] = [];\n\n let lastPanel = panel;\n while (true) {\n const nextPanel = getNext(lastPanel);\n if (!nextPanel || isOutOfViewport(nextPanel)) {\n break;\n }\n visiblePanels.push(nextPanel);\n lastPanel = nextPanel;\n }\n return visiblePanels;\n };\n\n const panelCount = this.panelManager.getPanelCount();\n const getAbsIndex = (panel: Panel) => panel.getIndex() + (panel.getCloneIndex() + 1) * panelCount;\n const nextPanels = getVisiblePanels(basePanel, getNextPanel, isOutOfBoundNext);\n const prevPanels = getVisiblePanels(basePanel, getPrevPanel, isOutOfBoundPrev);\n\n return [basePanel, ...nextPanels, ...prevPanels].sort((panel1, panel2) => getAbsIndex(panel1) - getAbsIndex(panel2));\n } else {\n return allPanels.filter(panel => {\n const outsetProgress = panel.getOutsetProgress();\n\n return outsetProgress > -1 && outsetProgress < 1;\n });\n }\n }\n\n public getCurrentPanel(): Panel | undefined {\n return this.currentPanel;\n }\n\n public getCurrentIndex(): number {\n const currentPanel = this.currentPanel;\n\n return currentPanel\n ? currentPanel.getIndex()\n : -1;\n }\n\n public getNearestPanel(): Panel | undefined {\n return this.nearestPanel;\n }\n\n // Get progress from nearest panel\n public getCurrentProgress(): number {\n const currentState = this.stateMachine.getState();\n let nearestPanel = currentState.playing || currentState.holding\n ? this.nearestPanel\n : this.currentPanel;\n\n const panelManager = this.panelManager;\n if (!nearestPanel) {\n // There're no panels\n return NaN;\n }\n const { prev: prevRange, next: nextRange } = this.getScrollArea();\n const cameraPosition = this.getCameraPosition();\n const isOutOfBound = this.isOutOfBound();\n let prevPanel = nearestPanel.prevSibling;\n let nextPanel = nearestPanel.nextSibling;\n let hangerPosition = this.getHangerPosition();\n let nearestAnchorPos = nearestPanel.getAnchorPosition();\n\n if (\n isOutOfBound\n && prevPanel\n && nextPanel\n && cameraPosition < nextRange\n // On the basis of anchor, prevPanel is nearestPanel.\n && (hangerPosition - prevPanel.getAnchorPosition() < nearestAnchorPos - hangerPosition)\n ) {\n nearestPanel = prevPanel;\n nextPanel = nearestPanel.nextSibling;\n prevPanel = nearestPanel.prevSibling;\n nearestAnchorPos = nearestPanel.getAnchorPosition();\n }\n const nearestIndex = nearestPanel.getIndex() + (nearestPanel.getCloneIndex() + 1) * panelManager.getPanelCount();\n const nearestSize = nearestPanel.getSize();\n\n if (isOutOfBound) {\n const relativeHangerPosition = this.getRelativeHangerPosition();\n\n if (nearestAnchorPos > nextRange + relativeHangerPosition) {\n // next bounce area: hangerPosition - relativeHangerPosition - nextRange\n hangerPosition = nearestAnchorPos + hangerPosition - relativeHangerPosition - nextRange;\n } else if (nearestAnchorPos < prevRange + relativeHangerPosition) {\n // prev bounce area: hangerPosition - relativeHangerPosition - prevRange\n hangerPosition = nearestAnchorPos + hangerPosition - relativeHangerPosition - prevRange;\n }\n }\n const hangerIsNextToNearestPanel = hangerPosition >= nearestAnchorPos;\n const gap = this.options.gap;\n\n let basePosition = nearestAnchorPos;\n let targetPosition = nearestAnchorPos;\n if (hangerIsNextToNearestPanel) {\n targetPosition = nextPanel\n ? nextPanel.getAnchorPosition()\n : nearestAnchorPos + nearestSize + gap;\n } else {\n basePosition = prevPanel\n ? prevPanel.getAnchorPosition()\n : nearestAnchorPos - nearestSize - gap;\n }\n\n const progressBetween = (hangerPosition - basePosition) / (targetPosition - basePosition);\n const startIndex = hangerIsNextToNearestPanel\n ? nearestIndex\n : prevPanel\n ? prevPanel.getIndex()\n : nearestIndex - 1;\n\n return startIndex + progressBetween;\n }\n\n // Update axes flick position without triggering event\n public updateAxesPosition(position: number) {\n const axes = this.axes;\n axes.off();\n axes.setTo({\n flick: position,\n }, 0);\n axes.on(this.axesHandlers);\n }\n\n public getSize(): number {\n return this.state.size;\n }\n\n public getScrollArea(): { prev: number, next: number } {\n return this.state.scrollArea;\n }\n\n public isOutOfBound(): boolean {\n const state = this.state;\n const options = this.options;\n const scrollArea = state.scrollArea;\n\n return !options.circular\n && options.bound\n && (state.position <= scrollArea.prev || state.position >= scrollArea.next);\n }\n\n public canSetBoundMode(): boolean {\n const options = this.options;\n\n return options.bound && !options.circular;\n }\n\n public getViewportElement(): HTMLElement {\n return this.viewportElement;\n }\n\n public getCameraElement(): HTMLElement {\n return this.cameraElement;\n }\n\n public getScrollAreaSize(): number {\n const scrollArea = this.state.scrollArea;\n\n return scrollArea.next - scrollArea.prev;\n }\n\n public getRelativeHangerPosition(): number {\n return this.state.relativeHangerPosition;\n }\n\n public getHangerPosition(): number {\n return this.state.position + this.state.relativeHangerPosition;\n }\n\n public getCameraPosition(): number {\n return this.state.position;\n }\n\n public getPositionOffset(): number {\n return this.state.positionOffset;\n }\n\n public getCheckedIndexes(): Array<[number, number]> {\n return this.state.checkedIndexes;\n }\n\n public getVisiblePanels(): Panel[] {\n return this.visiblePanels;\n }\n\n public setCurrentPanel(panel: Panel): void {\n this.currentPanel = panel;\n }\n\n public setLastIndex(index: number): void {\n const currentPanel = this.currentPanel;\n const panelManager = this.panelManager;\n\n panelManager.setLastIndex(index);\n if (currentPanel && currentPanel.getIndex() > index) {\n this.currentPanel = panelManager.lastPanel();\n }\n\n this.resize();\n }\n\n public setVisiblePanels(panels: Panel[]): void {\n this.visiblePanels = panels;\n }\n\n public connectAxesHandler(handlers: { [key: string]: (event: { [key: string]: any; }) => any }): void {\n const axes = this.axes;\n\n this.axesHandlers = handlers;\n axes.on(handlers);\n }\n\n public addPlugins(plugins: Plugin | Plugin[]) {\n const newPlugins = ([] as Plugin[]).concat(plugins);\n\n newPlugins.forEach(plugin => {\n plugin.init(this.flicking);\n });\n\n this.plugins = this.plugins.concat(newPlugins);\n return this;\n }\n\n public removePlugins(plugins: Plugin | Plugin[]) {\n const currentPlugins = this.plugins;\n const removedPlugins = ([] as Plugin[]).concat(plugins);\n\n removedPlugins.forEach(plugin => {\n const index = currentPlugins.indexOf(plugin);\n\n if (index > -1) {\n currentPlugins.splice(index, 1);\n }\n\n plugin.destroy(this.flicking);\n });\n return this;\n }\n\n public updateCheckedIndexes(changedRange: { min: number, max: number }): void {\n const state = this.state;\n\n let removed = 0;\n state.checkedIndexes.concat().forEach((indexes, idx) => {\n const [min, max] = indexes;\n // Can fill part of indexes in range\n if (changedRange.min <= max && changedRange.max >= min) {\n // Remove checked index from list\n state.checkedIndexes.splice(idx - removed, 1);\n removed++;\n }\n });\n }\n\n public appendUncachedPanelElements(panels: Panel[]): void {\n const options = this.options;\n const fragment = document.createDocumentFragment();\n\n if (options.isEqualSize) {\n const prevVisiblePanels = this.visiblePanels;\n const equalSizeClasses = options.isEqualSize as string[]; // for readability\n const cached: { [className: string]: boolean } = {};\n\n this.visiblePanels = [];\n\n Object.keys(this.panelBboxes).forEach(className => {\n cached[className] = true;\n });\n\n panels.forEach(panel => {\n const overlappedClass = panel.getOverlappedClass(equalSizeClasses);\n if (overlappedClass && !cached[overlappedClass]) {\n if (!options.renderExternal) {\n fragment.appendChild(panel.getElement());\n }\n this.visiblePanels.push(panel);\n cached[overlappedClass] = true;\n } else if (!overlappedClass) {\n if (!options.renderExternal) {\n fragment.appendChild(panel.getElement());\n }\n this.visiblePanels.push(panel);\n }\n });\n prevVisiblePanels.forEach(panel => {\n this.addVisiblePanel(panel);\n });\n } else {\n if (!options.renderExternal) {\n panels.forEach(panel => fragment.appendChild(panel.getElement()));\n }\n this.visiblePanels = panels.filter(panel => Boolean(panel));\n }\n\n if (!options.renderExternal) {\n this.cameraElement.appendChild(fragment);\n }\n }\n\n private updateClonePanels() {\n const panelManager = this.panelManager;\n\n // Clone panels in circular mode\n if (this.options.circular && panelManager.getPanelCount() > 0) {\n this.clonePanels();\n this.updateClonedPanelPositions();\n }\n panelManager.chainAllPanels();\n }\n\n private getVisibleIndexOf(panel: Panel): number {\n return findIndex(this.visiblePanels, visiblePanel => visiblePanel === panel);\n }\n\n private build(): void {\n this.setElements();\n this.applyCSSValue();\n this.setMoveType();\n this.setAxesInstance();\n this.refreshPanels();\n this.setDefaultPanel();\n this.resize();\n this.moveToDefaultPanel();\n }\n\n private setElements(): void {\n const state = this.state;\n const options = this.options;\n const wrapper = this.flicking.getElement();\n const classPrefix = options.classPrefix;\n\n const viewportCandidate = wrapper.children[0] as HTMLElement;\n const hasViewportElement = viewportCandidate && hasClass(viewportCandidate, `${classPrefix}-viewport`);\n\n const viewportElement = hasViewportElement\n ? viewportCandidate\n : document.createElement(\"div\");\n\n const cameraCandidate = hasViewportElement\n ? viewportElement.children[0] as HTMLElement\n : wrapper.children[0] as HTMLElement;\n const hasCameraElement = cameraCandidate && hasClass(cameraCandidate, `${classPrefix}-camera`);\n\n const cameraElement = hasCameraElement\n ? cameraCandidate\n : document.createElement(\"div\");\n\n if (!hasCameraElement) {\n cameraElement.className = `${classPrefix}-camera`;\n\n const panelElements = hasViewportElement\n ? viewportElement.children\n : wrapper.children;\n\n // Make all panels to be a child of camera element\n // wrapper <- viewport <- camera <- panels[1...n]\n toArray(panelElements).forEach(child => {\n cameraElement.appendChild(child);\n });\n } else {\n state.originalCameraStyle = {\n className: cameraElement.getAttribute(\"class\"),\n style: cameraElement.getAttribute(\"style\"),\n };\n }\n\n if (!hasViewportElement) {\n viewportElement.className = `${classPrefix}-viewport`;\n\n // Add viewport element to wrapper\n wrapper.appendChild(viewportElement);\n } else {\n state.originalViewportStyle = {\n className: viewportElement.getAttribute(\"class\"),\n style: viewportElement.getAttribute(\"style\"),\n };\n }\n\n if (!hasCameraElement || !hasViewportElement) {\n viewportElement.appendChild(cameraElement);\n }\n\n this.viewportElement = viewportElement;\n this.cameraElement = cameraElement;\n state.isViewportGiven = hasViewportElement;\n state.isCameraGiven = hasCameraElement;\n }\n\n private applyCSSValue(): void {\n const options = this.options;\n const viewportElement = this.viewportElement;\n const cameraElement = this.cameraElement;\n const viewportStyle = this.viewportElement.style;\n\n // Set default css values for each element\n applyCSS(viewportElement, DEFAULT_VIEWPORT_CSS);\n applyCSS(cameraElement, DEFAULT_CAMERA_CSS);\n\n viewportElement.style.zIndex = `${options.zIndex}`;\n if (options.horizontal) {\n viewportStyle.minHeight = \"100%\";\n viewportStyle.width = \"100%\";\n } else {\n viewportStyle.minWidth = \"100%\";\n viewportStyle.height = \"100%\";\n }\n if (options.overflow) {\n viewportStyle.overflow = \"visible\";\n }\n\n this.panelManager = new PanelManager(this.cameraElement, options);\n }\n\n private setMoveType(): void {\n const moveType = this.options.moveType as MoveTypeObjectOption;\n\n switch (moveType.type) {\n case MOVE_TYPE.SNAP:\n this.moveType = new Snap(moveType.count);\n break;\n case MOVE_TYPE.FREE_SCROLL:\n this.moveType = new FreeScroll();\n break;\n default:\n throw new Error(\"moveType is not correct!\");\n }\n }\n\n private setAxesInstance(): void {\n const state = this.state;\n const options = this.options;\n\n const scrollArea = state.scrollArea;\n\n this.axes = new Axes({\n flick: {\n range: [scrollArea.prev, scrollArea.next],\n circular: options.circular,\n bounce: [0, 0], // will be updated in resize()\n },\n }, {\n easing: options.panelEffect,\n deceleration: options.deceleration,\n interruptable: true,\n });\n\n this.createPanInput();\n }\n\n private refreshPanels(): void {\n const panelManager = this.panelManager;\n // Panel elements were attached to camera element by Flicking class\n const panelElements = this.cameraElement.children;\n\n // Initialize panels\n const panels = toArray(panelElements).map(\n (el: HTMLElement, idx: number) => new Panel(el, idx, this),\n );\n\n panelManager.replacePanels(panels, []);\n this.visiblePanels = panels.filter(panel => Boolean(panel));\n }\n\n private setDefaultPanel(): void {\n const options = this.options;\n const panelManager = this.panelManager;\n const indexRange = this.panelManager.getRange();\n const index = clamp(options.defaultIndex, indexRange.min, indexRange.max);\n\n this.currentPanel = panelManager.get(index);\n }\n\n private clonePanels() {\n const state = this.state;\n const options = this.options;\n const panelManager = this.panelManager;\n\n const gap = options.gap;\n const viewportSize = state.size;\n const firstPanel = panelManager.firstPanel();\n const lastPanel = panelManager.lastPanel()!;\n\n // There're no panels exist\n if (!firstPanel) {\n return;\n }\n\n // For each panels, clone itself while last panel's position + size is below viewport size\n const panels = panelManager.originalPanels();\n const reversedPanels = panels.concat().reverse();\n\n const sumOriginalPanelSize = lastPanel.getPosition() + lastPanel.getSize() - firstPanel.getPosition() + gap;\n const relativeAnchorPosition = firstPanel.getRelativeAnchorPosition();\n const relativeHangerPosition = this.getRelativeHangerPosition();\n\n const areaPrev = (relativeHangerPosition - relativeAnchorPosition) % sumOriginalPanelSize;\n let sizeSum = 0;\n let panelAtLeftBoundary!: Panel;\n for (const panel of reversedPanels) {\n if (!panel) {\n continue;\n }\n sizeSum += panel.getSize() + gap;\n if (sizeSum >= areaPrev) {\n panelAtLeftBoundary = panel;\n break;\n }\n }\n\n const areaNext = (viewportSize - relativeHangerPosition + relativeAnchorPosition) % sumOriginalPanelSize;\n sizeSum = 0;\n let panelAtRightBoundary!: Panel;\n for (const panel of panels) {\n if (!panel) {\n continue;\n }\n sizeSum += panel.getSize() + gap;\n if (sizeSum >= areaNext) {\n panelAtRightBoundary = panel;\n break;\n }\n }\n\n // Need one more set of clones on prev area of original panel 0\n const needCloneOnPrev = panelAtLeftBoundary.getIndex() !== 0\n && panelAtLeftBoundary.getIndex() <= panelAtRightBoundary.getIndex();\n\n // Visible count of panel 0 on first screen\n const panel0OnFirstscreen = Math.ceil((relativeHangerPosition + firstPanel.getSize() - relativeAnchorPosition) / sumOriginalPanelSize)\n + Math.ceil((viewportSize - relativeHangerPosition + relativeAnchorPosition) / sumOriginalPanelSize)\n - 1; // duplication\n\n const cloneCount = panel0OnFirstscreen\n + (needCloneOnPrev ? 1 : 0);\n const prevCloneCount = panelManager.getCloneCount();\n\n panelManager.setCloneCount(cloneCount);\n if (options.renderExternal) {\n return;\n }\n\n if (cloneCount > prevCloneCount) {\n // should clone more\n for (let cloneIndex = prevCloneCount; cloneIndex < cloneCount; cloneIndex++) {\n const clones = panels.map(origPanel => origPanel.clone(cloneIndex));\n const fragment = document.createDocumentFragment();\n clones.forEach(panel => fragment.appendChild(panel.getElement()));\n\n this.cameraElement.appendChild(fragment);\n this.visiblePanels.push(...clones.filter(clone => Boolean(clone)));\n panelManager.insertClones(cloneIndex, 0, clones);\n }\n } else if (cloneCount < prevCloneCount) {\n // should remove some\n panelManager.removeClonesAfter(cloneCount);\n }\n }\n\n private moveToDefaultPanel(): void {\n const state = this.state;\n const panelManager = this.panelManager;\n const options = this.options;\n const indexRange = this.panelManager.getRange();\n\n const defaultIndex = clamp(options.defaultIndex, indexRange.min, indexRange.max);\n const defaultPanel = panelManager.get(defaultIndex);\n\n let defaultPosition = 0;\n if (defaultPanel) {\n defaultPosition = defaultPanel.getAnchorPosition() - state.relativeHangerPosition;\n defaultPosition = this.canSetBoundMode()\n ? clamp(defaultPosition, state.scrollArea.prev, state.scrollArea.next)\n : defaultPosition;\n }\n\n this.moveCamera(defaultPosition);\n this.axes.setTo({ flick: defaultPosition }, 0);\n }\n\n private updateSize(): void {\n const state = this.state;\n const options = this.options;\n const panels = this.panelManager.originalPanels()\n .filter(panel => Boolean(panel));\n const bbox = this.updateBbox();\n\n const prevSize = state.size;\n // Update size & hanger position\n state.size = options.horizontal\n ? bbox.width\n : bbox.height;\n\n if (prevSize !== state.size) {\n state.relativeHangerPosition = parseArithmeticExpression(options.hanger, state.size);\n state.infiniteThreshold = parseArithmeticExpression(options.infiniteThreshold, state.size);\n }\n\n if (panels.length <= 0) {\n return;\n }\n\n this.resizePanels(panels);\n }\n\n private updateOriginalPanelPositions(): void {\n const gap = this.options.gap;\n const panelManager = this.panelManager;\n\n const firstPanel = panelManager.firstPanel();\n const panels = panelManager.originalPanels();\n\n if (!firstPanel) {\n return;\n }\n\n const currentPanel = this.currentPanel!;\n const nearestPanel = this.nearestPanel;\n const currentState = this.stateMachine.getState();\n const scrollArea = this.state.scrollArea;\n\n // Update panel position && fit to wrapper\n let nextPanelPos = firstPanel.getPosition();\n let maintainingPanel: Panel = firstPanel;\n if (nearestPanel) {\n // We should maintain nearestPanel's position\n const looped = !isBetween(currentState.lastPosition + currentState.delta, scrollArea.prev, scrollArea.next);\n\n maintainingPanel = looped\n ? currentPanel\n : nearestPanel;\n } else if (firstPanel.getIndex() > 0) {\n maintainingPanel = currentPanel;\n }\n\n const panelsBeforeMaintainPanel = panels.slice(0, maintainingPanel.getIndex() + (maintainingPanel.getCloneIndex() + 1) * panels.length);\n const accumulatedSize = panelsBeforeMaintainPanel.reduce((total, panel) => {\n return total + panel.getSize() + gap;\n }, 0);\n\n nextPanelPos = maintainingPanel.getPosition() - accumulatedSize;\n\n panels.forEach(panel => {\n const newPosition = nextPanelPos;\n const panelSize = panel.getSize();\n\n panel.setPosition(newPosition);\n nextPanelPos += panelSize + gap;\n });\n\n if (!this.options.renderOnlyVisible) {\n panels.forEach(panel => panel.setPositionCSS());\n }\n }\n\n private updateClonedPanelPositions(): void {\n const state = this.state;\n const options = this.options;\n const panelManager = this.panelManager;\n const clonedPanels = panelManager.clonedPanels()\n .reduce((allClones, clones) => [...allClones, ...clones], [])\n .filter(panel => Boolean(panel));\n\n const scrollArea = state.scrollArea;\n\n const firstPanel = panelManager.firstPanel();\n const lastPanel = panelManager.lastPanel()!;\n\n if (!firstPanel) {\n return;\n }\n\n const sumOriginalPanelSize = lastPanel.getPosition() + lastPanel.getSize() - firstPanel.getPosition() + options.gap;\n\n // Locate all cloned panels linearly first\n for (const panel of clonedPanels) {\n const origPanel = panel.getOriginalPanel();\n const cloneIndex = panel.getCloneIndex();\n const cloneBasePos = sumOriginalPanelSize * (cloneIndex + 1);\n const clonedPanelPos = cloneBasePos + origPanel.getPosition();\n\n panel.setPosition(clonedPanelPos);\n }\n\n let lastReplacePosition = firstPanel.getPosition();\n // reverse() pollutes original array, so copy it with concat()\n for (const panel of clonedPanels.concat().reverse()) {\n const panelSize = panel.getSize();\n const replacePosition = lastReplacePosition - panelSize - options.gap;\n\n if (replacePosition + panelSize <= scrollArea.prev) {\n // Replace is not meaningful, as it won't be seen in current scroll area\n break;\n }\n\n panel.setPosition(replacePosition);\n lastReplacePosition = replacePosition;\n }\n\n if (!this.options.renderOnlyVisible) {\n clonedPanels.forEach(panel => {\n panel.setPositionCSS();\n });\n }\n }\n\n private updateVisiblePanelPositions(): void {\n if (this.options.renderOnlyVisible) {\n this.visiblePanels.forEach(panel => {\n panel.setPositionCSS(this.state.positionOffset);\n });\n }\n }\n\n private updateScrollArea(): void {\n const state = this.state;\n const panelManager = this.panelManager;\n const options = this.options;\n const axes = this.axes;\n\n // Set viewport scrollable area\n const firstPanel = panelManager.firstPanel();\n const lastPanel = panelManager.lastPanel() as Panel;\n const relativeHangerPosition = state.relativeHangerPosition;\n\n if (!firstPanel) {\n state.scrollArea = {\n prev: 0,\n next: 0,\n };\n } else if (this.canSetBoundMode()) {\n const sumOriginalPanelSize = lastPanel.getPosition() + lastPanel.getSize() - firstPanel.getPosition();\n\n if (sumOriginalPanelSize >= state.size) {\n state.scrollArea = {\n prev: firstPanel.getPosition(),\n next: lastPanel.getPosition() + lastPanel.getSize() - state.size,\n };\n } else {\n // Find anchor position of set of the combined panels\n const relAnchorPosOfCombined = parseArithmeticExpression(options.anchor, sumOriginalPanelSize);\n const anchorPos = firstPanel.getPosition() + clamp(\n relAnchorPosOfCombined,\n sumOriginalPanelSize - (state.size - relativeHangerPosition),\n relativeHangerPosition,\n );\n\n state.scrollArea = {\n prev: anchorPos - relativeHangerPosition,\n next: anchorPos - relativeHangerPosition,\n };\n }\n } else if (options.circular) {\n const sumOriginalPanelSize = lastPanel.getPosition() + lastPanel.getSize() - firstPanel.getPosition() + options.gap;\n\n // Maximum scroll extends to first clone sequence's first panel\n state.scrollArea = {\n prev: firstPanel.getAnchorPosition() - relativeHangerPosition,\n next: sumOriginalPanelSize + firstPanel.getAnchorPosition() - relativeHangerPosition,\n };\n } else {\n state.scrollArea = {\n prev: firstPanel.getAnchorPosition() - relativeHangerPosition,\n next: lastPanel.getAnchorPosition() - relativeHangerPosition,\n };\n }\n\n const viewportSize = state.size;\n const bounce = options.bounce;\n\n let parsedBounce: number[];\n if (isArray(bounce)) {\n parsedBounce = (bounce as string[]).map(val => parseArithmeticExpression(val, viewportSize, DEFAULT_OPTIONS.bounce as number));\n } else {\n const parsedVal = parseArithmeticExpression(bounce as number | string, viewportSize, DEFAULT_OPTIONS.bounce as number);\n parsedBounce = [parsedVal, parsedVal];\n }\n\n // Update axes range and bounce\n const flick = axes.axis.flick;\n flick.range = [state.scrollArea.prev, state.scrollArea.next];\n flick.bounce = parsedBounce;\n }\n\n private checkNeedPanel(axesEvent?: any): void {\n const state = this.state;\n const options = this.options;\n const panelManager = this.panelManager;\n const currentPanel = this.currentPanel;\n const nearestPanel = this.nearestPanel;\n const currentState = this.stateMachine.getState();\n\n if (!options.infinite) {\n return;\n }\n\n const gap = options.gap;\n const infiniteThreshold = state.infiniteThreshold;\n const maxLastIndex = panelManager.getLastIndex();\n\n if (maxLastIndex < 0) {\n return;\n }\n\n if (!currentPanel || !nearestPanel) {\n // There're no panels\n this.triggerNeedPanel({\n axesEvent,\n siblingPanel: null,\n direction: null,\n indexRange: {\n min: 0,\n max: maxLastIndex,\n length: maxLastIndex + 1,\n },\n });\n return;\n }\n\n const originalNearestPosition = nearestPanel.getPosition();\n\n // Check next direction\n let checkingPanel: Panel | null = !currentState.holding && !currentState.playing\n ? currentPanel\n : nearestPanel;\n\n while (checkingPanel) {\n const currentIndex = checkingPanel.getIndex();\n const nextSibling = checkingPanel.nextSibling;\n const lastPanel = panelManager.lastPanel()!;\n const atLastPanel = currentIndex === lastPanel.getIndex();\n const nextIndex = !atLastPanel && nextSibling\n ? nextSibling.getIndex()\n : maxLastIndex + 1;\n const currentNearestPosition = nearestPanel.getPosition();\n const panelRight = checkingPanel.getPosition() + checkingPanel.getSize() - (currentNearestPosition - originalNearestPosition);\n const cameraNext = state.position + state.size;\n\n // There're empty panels between\n const emptyPanelExistsBetween = (nextIndex - currentIndex > 1);\n // Expected prev panel's left position is smaller than camera position\n const overThreshold = panelRight + gap - infiniteThreshold <= cameraNext;\n\n if (emptyPanelExistsBetween && overThreshold) {\n this.triggerNeedPanel({\n axesEvent,\n siblingPanel: checkingPanel,\n direction: DIRECTION.NEXT,\n indexRange: {\n min: currentIndex + 1,\n max: nextIndex - 1,\n length: nextIndex - currentIndex - 1,\n },\n });\n }\n\n // Trigger needPanel in circular & at max panel index\n if (options.circular && currentIndex === maxLastIndex && overThreshold) {\n const firstPanel = panelManager.firstPanel();\n const firstIndex = firstPanel\n ? firstPanel.getIndex()\n : -1;\n\n if (firstIndex > 0) {\n this.triggerNeedPanel({\n axesEvent,\n siblingPanel: checkingPanel,\n direction: DIRECTION.NEXT,\n indexRange: {\n min: 0,\n max: firstIndex - 1,\n length: firstIndex,\n },\n });\n }\n }\n\n // Check whether panels are changed\n const lastPanelAfterNeed = panelManager.lastPanel()!;\n const atLastPanelAfterNeed = lastPanelAfterNeed && currentIndex === lastPanelAfterNeed.getIndex();\n\n if (atLastPanelAfterNeed || !overThreshold) {\n break;\n }\n\n checkingPanel = checkingPanel.nextSibling;\n }\n\n // Check prev direction\n checkingPanel = nearestPanel;\n while (checkingPanel) {\n const cameraPrev = state.position;\n const checkingIndex = checkingPanel.getIndex();\n const prevSibling = checkingPanel.prevSibling;\n const firstPanel = panelManager.firstPanel()!;\n const atFirstPanel = checkingIndex === firstPanel.getIndex();\n const prevIndex = !atFirstPanel && prevSibling\n ? prevSibling.getIndex()\n : -1;\n const currentNearestPosition = nearestPanel.getPosition();\n const panelLeft = checkingPanel.getPosition() - (currentNearestPosition - originalNearestPosition);\n\n // There're empty panels between\n const emptyPanelExistsBetween = checkingIndex - prevIndex > 1;\n // Expected prev panel's right position is smaller than camera position\n const overThreshold = panelLeft - gap + infiniteThreshold >= cameraPrev;\n if (emptyPanelExistsBetween && overThreshold) {\n this.triggerNeedPanel({\n axesEvent,\n siblingPanel: checkingPanel,\n direction: DIRECTION.PREV,\n indexRange: {\n min: prevIndex + 1,\n max: checkingIndex - 1,\n length: checkingIndex - prevIndex - 1,\n },\n });\n }\n\n // Trigger needPanel in circular & at panel 0\n if (options.circular && checkingIndex === 0 && overThreshold) {\n const lastPanel = panelManager.lastPanel();\n\n if (lastPanel && lastPanel.getIndex() < maxLastIndex) {\n const lastIndex = lastPanel.getIndex();\n\n this.triggerNeedPanel({\n axesEvent,\n siblingPanel: checkingPanel,\n direction: DIRECTION.PREV,\n indexRange: {\n min: lastIndex + 1,\n max: maxLastIndex,\n length: maxLastIndex - lastIndex,\n },\n });\n }\n }\n\n // Check whether panels were changed\n const firstPanelAfterNeed = panelManager.firstPanel();\n const atFirstPanelAfterNeed = firstPanelAfterNeed && checkingIndex === firstPanelAfterNeed.getIndex();\n\n // Looped in circular mode\n if (atFirstPanelAfterNeed || !overThreshold) {\n break;\n }\n\n checkingPanel = checkingPanel.prevSibling;\n }\n }\n\n private triggerNeedPanel(params: {\n axesEvent: any;\n siblingPanel: Panel | null,\n direction: FlickingEvent[\"direction\"];\n indexRange: NeedPanelEvent[\"range\"];\n }): void {\n const { axesEvent, siblingPanel, direction, indexRange } = params;\n const options = this.options;\n const checkedIndexes = this.state.checkedIndexes;\n const alreadyTriggered = checkedIndexes.some(([min, max]) => min === indexRange.min || max === indexRange.max);\n const hasHandler = this.flicking.hasOn(EVENTS.NEED_PANEL);\n\n if (alreadyTriggered || !hasHandler) {\n return;\n }\n\n // Should done before triggering event, as we can directly add panels by event callback\n checkedIndexes.push([indexRange.min, indexRange.max]);\n\n const index = siblingPanel\n ? siblingPanel.getIndex()\n : 0;\n const isTrusted = axesEvent\n ? axesEvent.isTrusted\n : false;\n\n this.triggerEvent(\n EVENTS.NEED_PANEL,\n axesEvent,\n isTrusted,\n {\n index,\n panel: siblingPanel,\n direction,\n range: indexRange,\n fill: (element: ElementLike | ElementLike[]) => {\n const panelManager = this.panelManager;\n if (!siblingPanel) {\n return this.insert(panelManager.getRange().max + 1, element);\n }\n\n const parsedElements = parseElement(element);\n // Slice elements to fit size equal to empty spaces\n const elements = direction === DIRECTION.NEXT\n ? parsedElements.slice(0, indexRange.length)\n : parsedElements.slice(-indexRange.length);\n\n if (direction === DIRECTION.NEXT) {\n if (options.circular && index === panelManager.getLastIndex()) {\n // needPanel event is triggered on last index, insert at index 0\n return this.insert(0, elements);\n } else {\n return siblingPanel.insertAfter(elements);\n }\n } else if (direction === DIRECTION.PREV) {\n if (options.circular && index === 0) {\n // needPanel event is triggered on first index(0), insert at the last index\n return this.insert(indexRange.max - elements.length + 1, elements);\n } else {\n return siblingPanel.insertBefore(elements);\n }\n } else {\n // direction is null when there're no panels exist\n return this.insert(0, elements);\n }\n },\n } as Partial<NeedPanelEvent>,\n );\n }\n\n private updateVisiblePanels() {\n const state = this.state;\n const options = this.options;\n const panelManager = this.panelManager;\n const currentState = this.stateMachine.getState();\n const cameraElement = this.cameraElement;\n const { renderExternal, renderOnlyVisible } = options;\n if (!renderOnlyVisible) {\n return;\n }\n\n if (!this.nearestPanel) {\n this.visiblePanels = [];\n while (cameraElement.firstChild) {\n cameraElement.removeChild(cameraElement.firstChild);\n }\n return;\n }\n\n const prevVisiblePanels = this.visiblePanels;\n const newVisiblePanels = this.calcVisiblePanels();\n\n const { addedPanels, removedPanels } = this.checkVisiblePanelChange(prevVisiblePanels, newVisiblePanels);\n\n if (addedPanels.length <= 0 && removedPanels.length <= 0) {\n // Visible panels not changed\n return;\n }\n\n if (currentState.holding) {\n newVisiblePanels.push(...removedPanels);\n } else {\n const firstVisiblePanelPos = newVisiblePanels[0].getPosition();\n state.positionOffset = firstVisiblePanelPos;\n }\n\n newVisiblePanels.forEach(panel => {\n panel.setPositionCSS(state.positionOffset);\n });\n\n if (!renderExternal) {\n if (!currentState.holding) {\n removedPanels.forEach(panel => {\n const panelElement = panel.getElement();\n panelElement.parentNode && cameraElement.removeChild(panelElement);\n });\n }\n\n const fragment = document.createDocumentFragment();\n addedPanels.forEach(panel => {\n fragment.appendChild(panel.getElement());\n });\n\n cameraElement.appendChild(fragment);\n }\n\n const firstVisiblePanel = newVisiblePanels[0];\n const lastVisiblePanel = newVisiblePanels[newVisiblePanels.length - 1];\n const getAbsIndex = (panel: Panel) => panel.getIndex() + (panel.getCloneIndex() + 1) * panelManager.getPanelCount();\n\n const newVisibleRange = {\n min: getAbsIndex(firstVisiblePanel),\n max: getAbsIndex(lastVisiblePanel),\n };\n this.visiblePanels = newVisiblePanels;\n this.flicking.trigger(EVENTS.VISIBLE_CHANGE, {\n type: EVENTS.VISIBLE_CHANGE,\n range: newVisibleRange,\n });\n }\n\n private checkVisiblePanelChange(prevVisiblePanels: Panel[], newVisiblePanels: Panel[]) {\n const prevRefCount = prevVisiblePanels.map(() => 0);\n const newRefCount = newVisiblePanels.map(() => 0);\n\n prevVisiblePanels.forEach((prevPanel, prevIndex) => {\n newVisiblePanels.forEach((newPanel, newIndex) => {\n if (prevPanel === newPanel) {\n prevRefCount[prevIndex]++;\n newRefCount[newIndex]++;\n }\n });\n });\n\n const removedPanels = prevRefCount.reduce((removed: Panel[], count, index) => {\n return count === 0\n ? [...removed, prevVisiblePanels[index]]\n : removed;\n }, []);\n const addedPanels = newRefCount.reduce((added: Panel[], count, index) => {\n return count === 0\n ? [...added, newVisiblePanels[index]]\n : added;\n }, []);\n\n return { removedPanels, addedPanels };\n }\n\n private resizePanels(panels: Panel[]): void {\n const options = this.options;\n const panelBboxes = this.panelBboxes;\n\n if (options.isEqualSize === true) {\n if (!panelBboxes.default) {\n const defaultPanel = panels[0];\n panelBboxes.default = defaultPanel.getBbox();\n }\n\n const defaultBbox = panelBboxes.default;\n\n panels.forEach(panel => {\n panel.resize(defaultBbox);\n });\n return;\n } else if (options.isEqualSize) {\n const equalSizeClasses = options.isEqualSize;\n\n panels.forEach(panel => {\n const overlappedClass = panel.getOverlappedClass(equalSizeClasses);\n if (overlappedClass) {\n panel.resize(panelBboxes[overlappedClass]);\n panelBboxes[overlappedClass] = panel.getBbox();\n } else {\n panel.resize();\n }\n });\n return;\n }\n panels.forEach(panel => {\n panel.resize();\n });\n }\n\n private createPanInput() {\n const options = this.options;\n\n this.panInput = new PanInput(this.viewportElement, {\n inputType: options.inputType,\n thresholdAngle: options.thresholdAngle,\n iOSEdgeSwipeThreshold: options.iOSEdgeSwipeThreshold,\n scale: options.horizontal ? [-1, 0] : [0, -1],\n });\n\n this.axes.connect(options.horizontal ? [\"flick\", \"\"] : [\"\", \"flick\"], this.panInput);\n }\n}\n","/**\n * Copyright (c) 2015 NAVER Corp.\n * egjs projects are licensed under the MIT license\n */\n\nimport Component from \"@egjs/component\";\nimport ImReady from \"@egjs/imready\";\nimport Viewport from \"./components/Viewport\";\nimport Panel from \"./components/Panel\";\n\nimport { merge, getProgress, parseElement, isString, counter, findIndex } from \"./utils\";\nimport { DEFAULT_OPTIONS, EVENTS, DIRECTION, AXES_EVENTS, STATE_TYPE, DEFAULT_MOVE_TYPE_OPTIONS } from \"./consts\";\nimport {\n FlickingOptions,\n FlickingEvent,\n Direction,\n EventType,\n FlickingPanel,\n TriggerCallback,\n FlickingContext,\n FlickingStatus,\n Plugin,\n ElementLike,\n DestroyOption,\n BeforeSyncResult,\n SyncResult,\n ChangeEvent,\n SelectEvent,\n NeedPanelEvent,\n VisibleChangeEvent,\n ContentErrorEvent,\n MoveTypeStringOption,\n ValueOf,\n} from \"./types\";\n// import { sendEvent } from \"./ga/ga\";\nimport { DiffResult } from \"@egjs/list-differ\";\n\n/**\n * @memberof eg\n * @extends eg.Component\n * @support {\"ie\": \"10+\", \"ch\" : \"latest\", \"ff\" : \"latest\", \"sf\" : \"latest\" , \"edge\" : \"latest\", \"ios\" : \"7+\", \"an\" : \"4.X+\"}\n * @requires {@link https://github.com/naver/egjs-component|eg.Component}\n * @requires {@link https://github.com/naver/egjs-axes|eg.Axes}\n * @see Easing Functions Cheat Sheet {@link http://easings.net/} <ko>이징 함수 Cheat Sheet {@link http://easings.net/}</ko>\n */\nclass Flicking extends Component<{\n holdStart: FlickingEvent;\n holdEnd: FlickingEvent;\n moveStart: FlickingEvent;\n move: FlickingEvent;\n moveEnd: FlickingEvent;\n change: ChangeEvent;\n restore: FlickingEvent;\n select: SelectEvent;\n needPanel: NeedPanelEvent;\n visibleChange: VisibleChangeEvent;\n contentError: ContentErrorEvent;\n}> {\n /**\n * Version info string\n * @ko 버전정보 문자열\n * @example\n * eg.Flicking.VERSION; // ex) 3.0.0\n * @memberof eg.Flicking\n */\n public static VERSION: string = \"#__VERSION__#\";\n /**\n * Direction constant - \"PREV\" or \"NEXT\"\n * @ko 방향 상수 - \"PREV\" 또는 \"NEXT\"\n * @type {object}\n * @property {\"PREV\"} PREV - Prev direction from current hanger position.<br/>It's `left(←️)` direction when `horizontal: true`.<br/>Or, `up(↑️)` direction when `horizontal: false`.<ko>현재 행어를 기준으로 이전 방향.<br/>`horizontal: true`일 경우 `왼쪽(←️)` 방향.<br/>`horizontal: false`일 경우 `위쪽(↑️)`방향이다.</ko>\n * @property {\"NEXT\"} NEXT - Next direction from current hanger position.<br/>It's `right(→)` direction when `horizontal: true`.<br/>Or, `down(↓️)` direction when `horizontal: false`.<ko>현재 행어를 기준으로 다음 방향.<br/>`horizontal: true`일 경우 `오른쪽(→)` 방향.<br/>`horizontal: false`일 경우 `아래쪽(↓️)`방향이다.</ko>\n * @example\n * eg.Flicking.DIRECTION.PREV; // \"PREV\"\n * eg.Flicking.DIRECTION.NEXT; // \"NEXT\"\n */\n public static DIRECTION: Direction = DIRECTION;\n\n /**\n * Event type object with event name strings.\n * @ko 이벤트 이름 문자열들을 담은 객체\n * @type {object}\n * @property {\"holdStart\"} HOLD_START - holdStart event<ko>holdStart 이벤트</ko>\n * @property {\"holdEnd\"} HOLD_END - holdEnd event<ko>holdEnd 이벤트</ko>\n * @property {\"moveStart\"} MOVE_START - moveStart event<ko>moveStart 이벤트</ko>\n * @property {\"move\"} MOVE - move event<ko>move 이벤트</ko>\n * @property {\"moveEnd\"} MOVE_END - moveEnd event<ko>moveEnd 이벤트</ko>\n * @property {\"change\"} CHANGE - change event<ko>change 이벤트</ko>\n * @property {\"restore\"} RESTORE - restore event<ko>restore 이벤트</ko>\n * @property {\"select\"} SELECT - select event<ko>select 이벤트</ko>\n * @property {\"needPanel\"} NEED_PANEL - needPanel event<ko>needPanel 이벤트</ko>\n * @example\n * eg.Flicking.EVENTS.MOVE_START; // \"MOVE_START\"\n */\n public static EVENTS: EventType = EVENTS;\n\n public options: FlickingOptions;\n\n private wrapper: HTMLElement;\n private viewport: Viewport;\n private contentsReadyChecker: ImReady | null = null;\n\n private eventContext: FlickingContext;\n private isPanelChangedAtBeforeSync: boolean = false;\n\n /**\n * @param element A base element for the eg.Flicking module. When specifying a value as a `string` type, you must specify a css selector string to select the element.<ko>eg.Flicking 모듈을 사용할 기준 요소. `string`타입으로 값 지정시 요소를 선택하기 위한 css 선택자 문자열을 지정해야 한다.</ko>\n * @param options An option object of the eg.Flicking module<ko>eg.Flicking 모듈의 옵션 객체</ko>\n * @param {string} [options.classPrefix=\"eg-flick\"] A prefix of class names will be added for the panels, viewport, and camera.<ko>패널들과 뷰포트, 카메라에 추가될 클래스 이름의 접두사.</ko>\n * @param {number} [options.deceleration=0.0075] Deceleration value for panel movement animation for animation triggered by manual user input. A higher value means a shorter running time.<ko>사용자의 동작으로 가속도가 적용된 패널 이동 애니메이션의 감속도. 값이 높을수록 애니메이션 실행 시간이 짧아진다.</ko>\n * @param {boolean} [options.horizontal=true] The direction of panel movement. (true: horizontal, false: vertical)<ko>패널 이동 방향. (true: 가로방향, false: 세로방향)</ko>\n * @param {boolean} [options.circular=false] Enables circular mode, which connects first/last panel for continuous scrolling.<ko>순환 모드를 활성화한다. 순환 모드에서는 양 끝의 패널이 서로 연결되어 끊김없는 스크롤이 가능하다.</ko>\n * @param {boolean} [options.infinite=false] Enables infinite mode, which can automatically trigger needPanel until reaching the last panel's index reaches the lastIndex.<ko>무한 모드를 활성화한다. 무한 모드에서는 needPanel 이벤트를 자동으로 트리거한다. 해당 동작은 마지막 패널의 인덱스가 lastIndex와 일치할때까지 일어난다.</ko>\n * @param {number} [options.infiniteThreshold=0] A Threshold from viewport edge before triggering `needPanel` event in infinite mode.<ko>무한 모드에서 `needPanel`이벤트가 발생하기 위한 뷰포트 끝으로부터의 최대 거리.</ko>\n * @param {number} [options.lastIndex=Infinity] Maximum panel index that Flicking can set. Flicking won't trigger `needPanel` when the event's panel index is greater than it.<br/>Also, if the last panel's index reached a given index, you can't add more panels.<ko>Flicking이 설정 가능한 패널의 최대 인덱스. `needPanel` 이벤트에 지정된 인덱스가 최대 패널의 개수보다 같거나 커야 하는 경우에 이벤트를 트리거하지 않게 한다.<br>또한, 마지막 패널의 인덱스가 주어진 인덱스와 동일할 경우, 새로운 패널을 더 이상 추가할 수 없다.</ko>\n * @param {number} [options.threshold=40] Movement threshold to change panel(unit: pixel). It should be dragged above the threshold to change the current panel.<ko>패널 변경을 위한 이동 임계값 (단위: 픽셀). 주어진 값 이상으로 스크롤해야만 패널 변경이 가능하다.</ko>\n * @param {number} [options.duration=100] Duration of the panel movement animation. (unit: ms)<ko>패널 이동 애니메이션 진행 시간.(단위: ms)</ko>\n * @param {function} [options.panelEffect=x => 1 - Math.pow(1 - x, 3)] An easing function applied to the panel movement animation. Default value is `easeOutCubic`.<ko>패널 이동 애니메이션에 적용할 easing함수. 기본값은 `easeOutCubic`이다.</ko>\n * @param {number} [options.defaultIndex=0] Index of the panel to set as default when initializing. A zero-based integer.<ko>초기화시 지정할 디폴트 패널의 인덱스로, 0부터 시작하는 정수.</ko>\n * @param {string[]} [options.inputType=[\"touch,\"mouse\"]] Types of input devices to enable.({@link https://naver.github.io/egjs-axes/release/latest/doc/global.html#PanInputOption Reference})<ko>활성화할 입력 장치 종류. ({@link https://naver.github.io/egjs-axes/release/latest/doc/global.html#PanInputOption 참고})</ko>\n * @param {number} [options.thresholdAngle=45] The threshold angle value(0 ~ 90).<br>If the input angle from click/touched position is above or below this value in horizontal and vertical mode each, scrolling won't happen.<ko>스크롤 동작을 막기 위한 임계각(0 ~ 90).<br>클릭/터치한 지점으로부터 계산된 사용자 입력의 각도가 horizontal/vertical 모드에서 각각 크거나 작으면, 스크롤 동작이 이루어지지 않는다.</ko>\n * @param {number|string|number[]|string[]} [options.bounce=[10,10]] The size value of the bounce area. Only can be enabled when `circular=false`.<br>You can set different bounce value for prev/next direction by using array.<br>`number` for px value, and `string` for px, and % value relative to viewport size.(ex - 0, \"10px\", \"20%\")<ko>바운스 영역의 크기값. `circular=false`인 경우에만 사용할 수 있다.<br>배열을 통해 prev/next 방향에 대해 서로 다른 바운스 값을 지정 가능하다.<br>`number`를 통해 px값을, `stirng`을 통해 px 혹은 뷰포트 크기 대비 %값을 사용할 수 있다.(ex - 0, \"10px\", \"20%\")</ko>\n * @param {boolean} [options.autoResize=false] Whether the `resize` method should be called automatically after a window resize event.<ko>window의 `resize` 이벤트 이후 자동으로 resize()메소드를 호출할지의 여부.</ko>\n * @param {boolean} [options.adaptive=false] Whether the height(horizontal)/width(vertical) of the viewport element reflects the height/width value of the panel after completing the movement.<ko>목적 패널로 이동한 후 그 패널의 높이(horizontal)/너비(vertical)값을 뷰포트 요소의 높이/너비값에 반영할지 여부.</ko>\n * @param {number|\"\"} [options.zIndex=2000] z-index value for viewport element.<ko>뷰포트 엘리먼트의 z-index 값.</ko>\n * @param {boolean} [options.bound=false] Prevent the view from going out of the first/last panel. Only can be enabled when `circular=false`.<ko>뷰가 첫번째와 마지막 패널 밖으로 나가는 것을 막아준다. `circular=false`인 경우에만 사용할 수 있다.</ko>\n * @param {boolean} [options.overflow=false] Disables CSS property `overflow: hidden` in viewport if `true`.<ko>`true`로 설정시 뷰포트에 `overflow: hidden` 속성을 해제한다.</ko>\n * @param {string} [options.hanger=\"50%\"] The reference position of the hanger in the viewport, which hangs panel anchors should be stopped at.<br>It should be provided in px or % value of viewport size.<br>You can combinate those values with plus/minus sign.<br>ex) \"50\", \"100px\", \"0%\", \"25% + 100px\"<ko>뷰포트 내부의 행어의 위치. 패널의 앵커들이 뷰포트 내에서 멈추는 지점에 해당한다.<br>px값이나, 뷰포트의 크기 대비 %값을 사용할 수 있고, 이를 + 혹은 - 기호로 연계하여 사용할 수도 있다.<br>예) \"50\", \"100px\", \"0%\", \"25% + 100px\"</ko>\n * @param {string} [options.anchor=\"50%\"] The reference position of the anchor in panels, which can be hanged by viewport hanger.<br>It should be provided in px or % value of panel size.<br>You can combinate those values with plus/minus sign.<br>ex) \"50\", \"100px\", \"0%\", \"25% + 100px\"<ko>패널 내부의 앵커의 위치. 뷰포트의 행어와 연계하여 패널이 화면 내에서 멈추는 지점을 설정할 수 있다.<br>px값이나, 패널의 크기 대비 %값을 사용할 수 있고, 이를 + 혹은 - 기호로 연계하여 사용할 수도 있다.<br>예) \"50\", \"100px\", \"0%\", \"25% + 100px\"</ko>\n * @param {number} [options.gap=0] Space value between panels. Should be given in number.(px)<ko>패널간에 부여할 간격의 크기를 나타내는 숫자.(px)</ko>\n * @param {eg.Flicking.MoveTypeOption} [options.moveType=\"snap\"] Movement style by user input. (ex: snap, freeScroll)<ko>사용자 입력에 의한 이동 방식.(ex: snap, freeScroll)</ko>\n * @param {boolean} [options.useOffset=false] Whether to use `offsetWidth`/`offsetHeight` instead of `getBoundingClientRect` for panel/viewport size calculation.<br/>You can use this option to calculate the original panel size when CSS transform is applied to viewport or panel.<br/>⚠️ If panel size is not fixed integer value, there can be a 1px gap between panels.<ko>패널과 뷰포트의 크기를 계산할 때 `offsetWidth`/`offsetHeight`를 `getBoundingClientRect` 대신 사용할지 여부.<br/>패널이나 뷰포트에 CSS transform이 설정되어 있을 때 원래 패널 크기를 계산하려면 옵션을 활성화한다.<br/>⚠️ 패널의 크기가 정수로 고정되어있지 않다면 패널 사이에 1px의 공간이 생길 수 있다.</ko>\n * @param {boolean} [options.renderOnlyVisible=false] Whether to render visible panels only. This can dramatically increase performance when there're many panels.<ko>보이는 패널만 렌더링할지 여부를 설정한다. 패널이 많을 경우에 퍼포먼스를 크게 향상시킬 수 있다.</ko>\n * @param {boolean|string[]} [options.isEqualSize=false] This option indicates whether all panels have the same size(true) of first panel, or it can hold a list of class names that determines panel size.<br/>Enabling this option can increase performance while recalculating panel size.<ko>모든 패널의 크기가 동일한지(true), 혹은 패널 크기를 결정하는 패널 클래스들의 리스트.<br/>이 옵션을 설정하면 패널 크기 재설정시에 성능을 높일 수 있다.</ko>\n * @param {boolean} [options.isConstantSize=false] Whether all panels have a constant size that won't be changed after resize. Enabling this option can increase performance while recalculating panel size.<ko>모든 패널의 크기가 불변인지의 여부. 이 옵션을 'true'로 설정하면 패널 크기 재설정시에 성능을 높일 수 있다.</ko>\n * @param {boolean} [options.renderExternal=false] Whether to use external rendering. It will delegate DOM manipulation and can synchronize the rendered state by calling `sync()` method. You can use this option to use in frameworks like React, Vue, Angular, which has its states and rendering methods.<ko>외부 렌더링을 사용할 지의 여부. 이 옵션을 사용시 렌더링을 외부에 위임할 수 있고, `sync()`를 호출하여 그 상태를 동기화할 수 있다. 이 옵션을 사용하여, React, Vue, Angular 등 자체적인 상태와 렌더링 방법을 갖는 프레임워크에 대응할 수 있다.</ko>\n * @param {boolean} [options.resizeOnContentsReady=false] Whether to resize the Flicking after the image/video elements inside viewport are ready.<br/>Use this property to prevent wrong Flicking layout caused by dynamic image / video sizes.<ko>Flicking 내부의 이미지 / 비디오 엘리먼트들이 전부 로드되었을 때 Flicking의 크기를 재계산하기 위한 옵션.<br/>이미지 / 비디오 크기가 고정 크기가 아닐 경우 사용하여 레이아웃이 잘못되는 것을 방지할 수 있다.</ko>\n * @param {boolean} [options.collectStatistics=true] Whether to collect statistics on how you are using `Flicking`. These statistical data do not contain any personal information and are used only as a basis for the development of a user-friendly product.<ko>어떻게 `Flicking`을 사용하고 있는지에 대한 통계 수집 여부를 나타낸다. 이 통계자료는 개인정보를 포함하고 있지 않으며 오직 사용자 친화적인 제품으로 발전시키기 위한 근거자료로서 활용한다.</ko>\n */\n constructor(\n element: string | HTMLElement,\n options: Partial<FlickingOptions> = {},\n ) {\n super();\n\n // Set flicking wrapper user provided\n let wrapper: HTMLElement | null;\n if (isString(element)) {\n wrapper = document.querySelector(element);\n if (!wrapper) {\n throw new Error(\"Base element doesn't exist.\");\n }\n } else if (element.nodeName && element.nodeType === 1) {\n wrapper = element;\n } else {\n throw new Error(\"Element should be provided in string or HTMLElement.\");\n }\n\n this.wrapper = wrapper;\n // Override default options\n this.options = merge({}, DEFAULT_OPTIONS, options) as FlickingOptions;\n // Override moveType option\n const currentOptions = this.options;\n const moveType = currentOptions.moveType as MoveTypeStringOption;\n\n if (moveType in DEFAULT_MOVE_TYPE_OPTIONS) {\n currentOptions.moveType = DEFAULT_MOVE_TYPE_OPTIONS[moveType as keyof typeof DEFAULT_MOVE_TYPE_OPTIONS];\n }\n\n // Make viewport instance with panel container element\n this.viewport = new Viewport(this, this.options, this.triggerEvent);\n this.listenInput();\n this.listenResize();\n\n // if (this.options.collectStatistics) {\n // sendEvent(\n // \"usage\",\n // \"options\",\n // options,\n // );\n // }\n }\n\n /**\n * Move to the previous panel if it exists.\n * @ko 이전 패널이 존재시 해당 패널로 이동한다.\n * @param [duration=options.duration] Duration of the panel movement animation.(unit: ms)<ko>패널 이동 애니메이션 진행 시간.(단위: ms)</ko>\n * @return {eg.Flicking} The instance itself.<ko>인스턴스 자기 자신.</ko>\n */\n public prev(duration?: number): this {\n const currentPanel = this.getCurrentPanel();\n const currentState = this.viewport.stateMachine.getState();\n\n if (currentPanel && currentState.type === STATE_TYPE.IDLE) {\n const prevPanel = currentPanel.prev();\n if (prevPanel) {\n prevPanel.focus(duration);\n }\n }\n\n return this;\n }\n\n /**\n * Move to the next panel if it exists.\n * @ko 다음 패널이 존재시 해당 패널로 이동한다.\n * @param [duration=options.duration] Duration of the panel movement animation(unit: ms).<ko>패널 이동 애니메이션 진행 시간.(단위: ms)</ko>\n * @return {eg.Flicking} The instance itself.<ko>인스턴스 자기 자신.</ko>\n */\n public next(duration?: number): this {\n const currentPanel = this.getCurrentPanel();\n const currentState = this.viewport.stateMachine.getState();\n\n if (currentPanel && currentState.type === STATE_TYPE.IDLE) {\n const nextPanel = currentPanel.next();\n if (nextPanel) {\n nextPanel.focus(duration);\n }\n }\n\n return this;\n }\n\n /**\n * Move to the panel of given index.\n * @ko 주어진 인덱스에 해당하는 패널로 이동한다.\n * @param index The index number of the panel to move.<ko>이동할 패널의 인덱스 번호.</ko>\n * @param duration [duration=options.duration] Duration of the panel movement.(unit: ms)<ko>패널 이동 애니메이션 진행 시간.(단위: ms)</ko>\n * @return {eg.Flicking} The instance itself.<ko>인스턴스 자기 자신.</ko>\n */\n public moveTo(index: number, duration?: number): this {\n const viewport = this.viewport;\n const panel = viewport.panelManager.get(index);\n const state = viewport.stateMachine.getState();\n\n if (!panel || state.type !== STATE_TYPE.IDLE) {\n return this;\n }\n\n const anchorPosition = panel.getAnchorPosition();\n const hangerPosition = viewport.getHangerPosition();\n\n let targetPanel = panel;\n if (this.options.circular) {\n const scrollAreaSize = viewport.getScrollAreaSize();\n // Check all three possible locations, find the nearest position among them.\n const possiblePositions = [\n anchorPosition - scrollAreaSize,\n anchorPosition,\n anchorPosition + scrollAreaSize,\n ];\n const nearestPosition = possiblePositions.reduce((nearest, current) => {\n return (Math.abs(current - hangerPosition) < Math.abs(nearest - hangerPosition))\n ? current\n : nearest;\n }, Infinity) - panel.getRelativeAnchorPosition();\n\n const identicals = panel.getIdenticalPanels();\n const offset = nearestPosition - anchorPosition;\n if (offset > 0) {\n // First cloned panel is nearest\n targetPanel = identicals[1];\n } else if (offset < 0) {\n // Last cloned panel is nearest\n targetPanel = identicals[identicals.length - 1];\n }\n\n targetPanel = targetPanel.clone(targetPanel.getCloneIndex(), true);\n targetPanel.setPosition(nearestPosition);\n }\n const currentIndex = this.getIndex();\n\n if (hangerPosition === targetPanel.getAnchorPosition() && currentIndex === index) {\n return this;\n }\n\n const eventType = panel.getIndex() === viewport.getCurrentIndex()\n ? \"\"\n : EVENTS.CHANGE;\n\n viewport.moveTo(\n targetPanel,\n viewport.findEstimatedPosition(targetPanel),\n eventType,\n null,\n duration,\n );\n return this;\n }\n\n /**\n * Return index of the current panel. `-1` if no panel exists.\n * @ko 현재 패널의 인덱스 번호를 반환한다. 패널이 하나도 없을 경우 `-1`을 반환한다.\n * @return Current panel's index, zero-based integer.<ko>현재 패널의 인덱스 번호. 0부터 시작하는 정수.</ko>\n */\n public getIndex(): number {\n return this.viewport.getCurrentIndex();\n }\n\n /**\n * Return the wrapper element user provided in constructor.\n * @ko 사용자가 생성자에서 제공한 래퍼 엘리먼트를 반환한다.\n * @return Wrapper element user provided.<ko>사용자가 제공한 래퍼 엘리먼트.</ko>\n */\n public getElement(): HTMLElement {\n return this.wrapper;\n }\n\n /**\n * Return the viewport element's size.\n * @ko 뷰포트 엘리먼트의 크기를 반환한다.\n * @return Width if horizontal: true, height if horizontal: false\n */\n public getSize(): number {\n return this.viewport.getSize();\n }\n\n /**\n * Return current panel. `null` if no panel exists.\n * @ko 현재 패널을 반환한다. 패널이 하나도 없을 경우 `null`을 반환한다.\n * @return Current panel.<ko>현재 패널.</ko>\n */\n public getCurrentPanel(): FlickingPanel | null {\n const viewport = this.viewport;\n const panel = viewport.getCurrentPanel();\n return panel\n ? panel\n : null;\n }\n\n /**\n * Return the panel of given index. `null` if it doesn't exists.\n * @ko 주어진 인덱스에 해당하는 패널을 반환한다. 해당 패널이 존재하지 않을 시 `null`이다.\n * @return Panel of given index.<ko>주어진 인덱스에 해당하는 패널.</ko>\n */\n public getPanel(index: number): FlickingPanel | null {\n const viewport = this.viewport;\n const panel = viewport.panelManager.get(index);\n return panel\n ? panel\n : null;\n }\n\n /**\n * Return all panels.\n * @ko 모든 패널들을 반환한다.\n * @param - Should include cloned panels or not.<ko>복사된 패널들을 포함할지의 여부.</ko>\n * @return All panels.<ko>모든 패널들.</ko>\n */\n public getAllPanels(includeClone?: boolean): FlickingPanel[] {\n const viewport = this.viewport;\n const panelManager = viewport.panelManager;\n const panels = includeClone\n ? panelManager.allPanels()\n : panelManager.originalPanels();\n\n return panels\n .filter(panel => !!panel);\n }\n\n /**\n * Return the panels currently shown in viewport area.\n * @ko 현재 뷰포트 영역에서 보여지고 있는 패널들을 반환한다.\n * @return Panels currently shown in viewport area.<ko>현재 뷰포트 영역에 보여지는 패널들</ko>\n */\n public getVisiblePanels(): FlickingPanel[] {\n return this.viewport.calcVisiblePanels();\n }\n\n /**\n * Return length of original panels.\n * @ko 원본 패널의 개수를 반환한다.\n * @return Length of original panels.<ko>원본 패널의 개수</ko>\n */\n public getPanelCount(): number {\n return this.viewport.panelManager.getPanelCount();\n }\n\n /**\n * Return how many groups of clones are created.\n * @ko 몇 개의 클론 그룹이 생성되었는지를 반환한다.\n * @return Length of cloned panel groups.<ko>클론된 패널 그룹의 개수</ko>\n */\n public getCloneCount(): number {\n return this.viewport.panelManager.getCloneCount();\n }\n\n /**\n * Get maximum panel index for `infinite` mode.\n * @ko `infinite` 모드에서 적용되는 추가 가능한 패널의 최대 인덱스 값을 반환한다.\n * @see {@link eg.Flicking.FlickingOptions}\n * @return Maximum index of panel that can be added.<ko>최대 추가 가능한 패널의 인덱스.</ko>\n */\n public getLastIndex(): number {\n return this.viewport.panelManager.getLastIndex();\n }\n\n /**\n * Set maximum panel index for `infinite' mode.<br>[needPanel]{@link eg.Flicking#events:needPanel} won't be triggered anymore when last panel's index reaches it.<br>Also, you can't add more panels after it.\n * @ko `infinite` 모드에서 적용되는 패널의 최대 인덱스를 설정한다.<br>마지막 패널의 인덱스가 설정한 값에 도달할 경우 더 이상 [needPanel]{@link eg.Flicking#events:needPanel} 이벤트가 발생되지 않는다.<br>또한, 설정한 인덱스 이후로 새로운 패널을 추가할 수 없다.\n * @param - Maximum panel index.\n * @see {@link eg.Flicking.FlickingOptions}\n * @return {eg.Flicking} The instance itself.<ko>인스턴스 자기 자신.</ko>\n */\n public setLastIndex(index: number): this {\n this.viewport.setLastIndex(index);\n\n return this;\n }\n\n /**\n * Return panel movement animation.\n * @ko 현재 패널 이동 애니메이션이 진행 중인지를 반환한다.\n * @return Is animating or not.<ko>애니메이션 진행 여부.</ko>\n */\n public isPlaying(): boolean {\n return this.viewport.stateMachine.getState().playing;\n }\n\n /**\n * Unblock input devices.\n * @ko 막았던 입력 장치로부터의 입력을 푼다.\n * @return {eg.Flicking} The instance itself.<ko>인스턴스 자기 자신.</ko>\n */\n public enableInput(): this {\n this.viewport.enable();\n\n return this;\n }\n\n /**\n * Block input devices.\n * @ko 입력 장치로부터의 입력을 막는다.\n * @return {eg.Flicking} The instance itself.<ko>인스턴스 자기 자신.</ko>\n */\n public disableInput(): this {\n this.viewport.disable();\n\n return this;\n }\n\n /**\n * Get current flicking status. You can restore current state by giving returned value to [setStatus()]{@link eg.Flicking#setStatus}.\n * @ko 현재 상태 값을 반환한다. 반환받은 값을 [setStatus()]{@link eg.Flicking#setStatus} 메소드의 인자로 지정하면 현재 상태를 복원할 수 있다.\n * @return An object with current status value information.<ko>현재 상태값 정보를 가진 객체.</ko>\n */\n public getStatus(): FlickingStatus {\n const viewport = this.viewport;\n\n const panels = viewport.panelManager.originalPanels()\n .filter(panel => !!panel)\n .map(panel => {\n return {\n html: panel.getElement().outerHTML,\n index: panel.getIndex(),\n };\n });\n\n return {\n index: viewport.getCurrentIndex(),\n panels,\n position: viewport.getCameraPosition(),\n };\n }\n\n /**\n * Restore to the state of the `status`.\n * @ko `status`의 상태로 복원한다.\n * @param status Status value to be restored. You can specify the return value of the [getStatus()]{@link eg.Flicking#getStatus} method.<ko>복원할 상태 값. [getStatus()]{@link eg.Flicking#getStatus}메서드의 반환값을 지정하면 된다.</ko>\n */\n public setStatus(status: FlickingStatus): void {\n this.viewport.restore(status);\n }\n\n /**\n * Add plugins that can have different effects on Flicking.\n * @ko 플리킹에 다양한 효과를 부여할 수 있는 플러그인을 추가한다.\n * @param - The plugin(s) to add.<ko>추가할 플러그인(들).</ko>\n * @return {eg.Flicking} The instance itself.<ko>인스턴스 자기 자신.</ko>\n */\n public addPlugins(plugins: Plugin | Plugin[]) {\n this.viewport.addPlugins(plugins);\n return this;\n }\n\n /**\n * Remove plugins from Flicking.\n * @ko 플리킹으로부터 플러그인들을 제거한다.\n * @param - The plugin(s) to remove.<ko>제거 플러그인(들).</ko>\n * @return {eg.Flicking} The instance itself.<ko>인스턴스 자기 자신.</ko>\n */\n public removePlugins(plugins: Plugin | Plugin[]) {\n this.viewport.removePlugins(plugins);\n return this;\n }\n\n /**\n * Return the reference element and all its children to the state they were in before the instance was created. Remove all attached event handlers. Specify `null` for all attributes of the instance (including inherited attributes).\n * @ko 기준 요소와 그 하위 패널들을 인스턴스 생성전의 상태로 되돌린다. 부착된 모든 이벤트 핸들러를 탈거한다. 인스턴스의 모든 속성(상속받은 속성포함)에 `null`을 지정한다.\n * @example\n * const flick = new eg.Flicking(\"#flick\");\n * flick.destroy();\n * console.log(flick.moveTo); // null\n */\n public destroy(option: Partial<DestroyOption> = {}): void {\n this.off();\n\n if (this.options.autoResize) {\n window.removeEventListener(\"resize\", this.resize);\n }\n\n this.viewport.destroy(option);\n this.contentsReadyChecker?.destroy();\n\n // release resources\n for (const x in this) {\n (this as any)[x] = null;\n }\n }\n\n /**\n * Update panels to current state.\n * @ko 패널들을 현재 상태에 맞춰 갱신한다.\n * @method\n * @return {eg.Flicking} The instance itself.<ko>인스턴스 자기 자신.</ko>\n */\n public resize = (): this => {\n const viewport = this.viewport;\n const options = this.options;\n const wrapper = this.getElement();\n\n const allPanels = viewport.panelManager.allPanels();\n if (!options.isConstantSize) {\n allPanels.forEach(panel => panel.unCacheBbox());\n }\n\n const shouldResetElements = options.renderOnlyVisible\n && !options.isConstantSize\n && options.isEqualSize !== true;\n\n // Temporarily set parent's height to prevent scroll (#333)\n const parent = wrapper.parentElement!;\n const origStyle = parent.style.height;\n parent.style.height = `${parent.offsetHeight}px`;\n\n viewport.unCacheBbox();\n // This should be done before adding panels, to lower performance issue\n viewport.updateBbox();\n\n if (shouldResetElements) {\n viewport.appendUncachedPanelElements(allPanels as Panel[]);\n }\n\n viewport.resize();\n parent.style.height = origStyle;\n\n return this;\n }\n\n /**\n * Add new panels at the beginning of panels.\n * @ko 제일 앞에 새로운 패널을 추가한다.\n * @param element - Either HTMLElement, HTML string, or array of them.<br>It can be also HTML string of multiple elements with same depth.<ko>HTMLElement 혹은 HTML 문자열, 혹은 그것들의 배열도 가능하다.<br>또한, 같은 depth의 여러 개의 엘리먼트에 해당하는 HTML 문자열도 가능하다.</ko>\n * @return Array of appended panels.<ko>추가된 패널들의 배열</ko>\n * @example\n * // Suppose there were no panels at initialization\n * const flicking = new eg.Flicking(\"#flick\");\n * flicking.replace(3, document.createElement(\"div\")); // Add new panel at index 3\n * flicking.prepend(\"\\<div\\>Panel\\</div\\>\"); // Prepended at index 2\n * flicking.prepend([\"\\<div\\>Panel\\</div\\>\", document.createElement(\"div\")]); // Prepended at index 0, 1\n * flicking.prepend(\"\\<div\\>Panel\\</div\\>\"); // Prepended at index 0, pushing every panels behind it.\n */\n public prepend(element: ElementLike | ElementLike[]): FlickingPanel[] {\n const viewport = this.viewport;\n const parsedElements = parseElement(element);\n\n const insertingIndex = Math.max(viewport.panelManager.getRange().min - parsedElements.length, 0);\n const prependedPanels = viewport.insert(insertingIndex, parsedElements);\n\n this.checkContentsReady(prependedPanels);\n\n return prependedPanels;\n }\n\n /**\n * Add new panels at the end of panels.\n * @ko 제일 끝에 새로운 패널을 추가한다.\n * @param element - Either HTMLElement, HTML string, or array of them.<br>It can be also HTML string of multiple elements with same depth.<ko>HTMLElement 혹은 HTML 문자열, 혹은 그것들의 배열도 가능하다.<br>또한, 같은 depth의 여러 개의 엘리먼트에 해당하는 HTML 문자열도 가능하다.</ko>\n * @return Array of appended panels.<ko>추가된 패널들의 배열</ko>\n * @example\n * // Suppose there were no panels at initialization\n * const flicking = new eg.Flicking(\"#flick\");\n * flicking.append(document.createElement(\"div\")); // Appended at index 0\n * flicking.append(\"\\<div\\>Panel\\</div\\>\"); // Appended at index 1\n * flicking.append([\"\\<div\\>Panel\\</div\\>\", document.createElement(\"div\")]); // Appended at index 2, 3\n * // Even this is possible\n * flicking.append(\"\\<div\\>Panel 1\\</div\\>\\<div\\>Panel 2\\</div\\>\"); // Appended at index 4, 5\n */\n public append(element: ElementLike | ElementLike[]): FlickingPanel[] {\n const viewport = this.viewport;\n const appendedPanels = viewport.insert(viewport.panelManager.getRange().max + 1, element);\n\n this.checkContentsReady(appendedPanels);\n\n return appendedPanels;\n }\n\n /**\n * Replace existing panels with new panels from given index. If target index is empty, add new panel at target index.\n * @ko 주어진 인덱스로부터의 패널들을 새로운 패널들로 교체한다. 인덱스에 해당하는 자리가 비어있다면, 새로운 패널을 해당 자리에 집어넣는다.\n * @param index - Start index to replace new panels.<ko>새로운 패널들로 교체할 시작 인덱스</ko>\n * @param element - Either HTMLElement, HTML string, or array of them.<br>It can be also HTML string of multiple elements with same depth.<ko>HTMLElement 혹은 HTML 문자열, 혹은 그것들의 배열도 가능하다.<br>또한, 같은 depth의 여러 개의 엘리먼트에 해당하는 HTML 문자열도 가능하다.</ko>\n * @return Array of created panels by replace.<ko>교체되어 새롭게 추가된 패널들의 배열</ko>\n * @example\n * // Suppose there were no panels at initialization\n * const flicking = new eg.Flicking(\"#flick\");\n *\n * // This will add new panel at index 3,\n * // Index 0, 1, 2 is empty at this moment.\n * // [empty, empty, empty, PANEL]\n * flicking.replace(3, document.createElement(\"div\"));\n *\n * // As index 2 was empty, this will also add new panel at index 2.\n * // [empty, empty, PANEL, PANEL]\n * flicking.replace(2, \"\\<div\\>Panel\\</div\\>\");\n *\n * // Index 3 was not empty, so it will replace previous one.\n * // It will also add new panels at index 4 and 5.\n * // before - [empty, empty, PANEL, PANEL]\n * // after - [empty, empty, PANEL, NEW_PANEL, NEW_PANEL, NEW_PANEL]\n * flicking.replace(3, [\"\\<div\\>Panel\\</div\\>\", \"\\<div\\>Panel\\</div\\>\", \"\\<div\\>Panel\\</div\\>\"])\n */\n public replace(index: number, element: ElementLike | ElementLike[]): FlickingPanel[] {\n const replacedPanels = this.viewport.replace(index, element);\n\n this.checkContentsReady(replacedPanels);\n\n return replacedPanels;\n }\n\n /**\n * Remove panel at target index. This will decrease index of panels behind it.\n * @ko `index`에 해당하는 자리의 패널을 제거한다. 수행시 `index` 이후의 패널들의 인덱스가 감소된다.\n * @param index - Index of panel to remove.<ko>제거할 패널의 인덱스</ko>\n * @param {number} [deleteCount=1] - Number of panels to remove from index.<ko>`index` 이후로 제거할 패널의 개수.</ko>\n * @return Array of removed panels<ko>제거된 패널들의 배열</ko>\n */\n public remove(index: number, deleteCount: number = 1): FlickingPanel[] {\n return this.viewport.remove(index, deleteCount);\n }\n\n /**\n * Get indexes to render. Should be used with `renderOnlyVisible` option.\n * `beforeSync` should be called before this method for a correct result.\n * @private\n * @ko 렌더링이 필요한 인덱스들을 반환한다. `renderOnlyVisible` 옵션과 함께 사용해야 한다. 정확한 결과를 위해선 `beforeSync`를 이전에 호출해야만 합니다.\n * @param - Info object of how panel infos are changed.<ko>패널 정보들의 변경 정보를 담는 오브젝트.</ko>\n * @return Array of indexes to render.<ko>렌더링할 인덱스의 배열</ko>\n */\n public getRenderingIndexes(diffResult: DiffResult<any>): number[] {\n const viewport = this.viewport;\n const visiblePanels = viewport.getVisiblePanels();\n const maintained = diffResult.maintained.reduce((values: {[key: number]: number}, [before, after]) => {\n values[after] = before;\n return values;\n }, {});\n\n const panelCount = diffResult.list.length;\n const added = diffResult.added;\n const getPanelAbsIndex = (panel: Panel) => {\n return panel.getIndex() + (panel.getCloneIndex() + 1) * panelCount;\n };\n\n const visibleIndexes = visiblePanels.map(panel => getPanelAbsIndex(panel))\n .filter(val => maintained[val % panelCount] != null);\n\n const renderingPanels = [...visibleIndexes, ...added];\n const allPanels = viewport.panelManager.allPanels();\n\n viewport.setVisiblePanels(renderingPanels.map(index => allPanels[index]));\n\n return renderingPanels;\n }\n\n /**\n * Synchronize info of panels instance with info given by external rendering.\n * @ko 외부 렌더링 방식에 의해 입력받은 패널의 정보와 현재 플리킹이 갖는 패널 정보를 동기화한다.\n * @private\n * @param - Info object of how panel infos are changed.<ko>패널 정보들의 변경 정보를 담는 오브젝트.</ko>\n * @param - Whether called from sync method <ko> sync 메소드로부터 호출됐는지 여부 </ko>\n */\n public beforeSync(diffInfo: BeforeSyncResult) {\n const { maintained, added, changed, removed } = diffInfo;\n const viewport = this.viewport;\n const panelManager = viewport.panelManager;\n const isCircular = this.options.circular;\n const cloneCount = panelManager.getCloneCount();\n const prevClonedPanels = panelManager.clonedPanels();\n\n // Update visible panels\n const newVisiblePanels = viewport.getVisiblePanels()\n .filter(panel => findIndex(removed, index => {\n return index === panel.getIndex();\n }) < 0);\n viewport.setVisiblePanels(newVisiblePanels);\n\n // Did not changed at all\n if (\n added.length <= 0\n && removed.length <= 0\n && changed.length <= 0\n && cloneCount === prevClonedPanels.length\n ) {\n return this;\n }\n const prevOriginalPanels = panelManager.originalPanels();\n const newPanels: Panel[] = [];\n const newClones: Panel[][] = counter(cloneCount).map(() => []);\n\n maintained.forEach(([beforeIdx, afterIdx]) => {\n newPanels[afterIdx] = prevOriginalPanels[beforeIdx];\n newPanels[afterIdx].setIndex(afterIdx);\n });\n\n added.forEach(addIndex => {\n newPanels[addIndex] = new Panel(null, addIndex, this.viewport);\n });\n\n if (isCircular) {\n counter(cloneCount).forEach(groupIndex => {\n const prevCloneGroup = prevClonedPanels[groupIndex];\n const newCloneGroup = newClones[groupIndex];\n\n maintained.forEach(([beforeIdx, afterIdx]) => {\n newCloneGroup[afterIdx] = prevCloneGroup\n ? prevCloneGroup[beforeIdx]\n : newPanels[afterIdx].clone(groupIndex, false);\n\n newCloneGroup[afterIdx].setIndex(afterIdx);\n });\n\n added.forEach(addIndex => {\n const newPanel = newPanels[addIndex];\n\n newCloneGroup[addIndex] = newPanel.clone(groupIndex, false);\n });\n });\n }\n\n added.forEach(index => { viewport.updateCheckedIndexes({ min: index, max: index }); });\n removed.forEach(index => { viewport.updateCheckedIndexes({ min: index - 1, max: index + 1 }); });\n\n const checkedIndexes = viewport.getCheckedIndexes();\n checkedIndexes.forEach(([min, max], idx) => {\n // Push checked indexes backward\n const pushedIndex = added.filter(index => index < min && panelManager.has(index)).length\n - removed.filter(index => index < min).length;\n checkedIndexes.splice(idx, 1, [min + pushedIndex, max + pushedIndex]);\n });\n\n // Only effective only when there are least one panel which have changed its index\n if (changed.length > 0) {\n // Removed checked index by changed ones after pushing\n maintained.forEach(([, next]) => { viewport.updateCheckedIndexes({ min: next, max: next }); });\n }\n panelManager.replacePanels(newPanels, newClones);\n this.isPanelChangedAtBeforeSync = true;\n }\n\n /**\n * Synchronize info of panels with DOM info given by external rendering.\n * @ko 외부 렌더링 방식에 의해 입력받은 DOM의 정보와 현재 플리킹이 갖는 패널 정보를 동기화 한다.\n * @private\n * @param - Info object of how panel elements are changed.<ko>패널의 DOM 요소들의 변경 정보를 담는 오브젝트.</ko>\n */\n public sync(diffInfo: SyncResult): this {\n const { list, maintained, added, changed, removed } = diffInfo;\n\n // Did not changed at all\n if (added.length <= 0 && removed.length <= 0 && changed.length <= 0) {\n return this;\n }\n const viewport = this.viewport;\n const { renderOnlyVisible, circular } = this.options;\n const panelManager = viewport.panelManager;\n\n if (!renderOnlyVisible) {\n const indexRange = panelManager.getRange();\n let beforeDiffInfo: BeforeSyncResult = diffInfo;\n\n if (circular) {\n const prevOriginalPanelCount = indexRange.max;\n const originalPanelCount = (list.length / (panelManager.getCloneCount() + 1)) >> 0;\n const originalAdded = added.filter(index => index < originalPanelCount);\n const originalRemoved = removed.filter(index => index <= prevOriginalPanelCount);\n const originalMaintained = maintained.filter(([beforeIdx]) => beforeIdx <= prevOriginalPanelCount);\n const originalChanged = changed.filter(([beforeIdx]) => beforeIdx <= prevOriginalPanelCount);\n\n beforeDiffInfo = {\n added: originalAdded,\n maintained: originalMaintained,\n removed: originalRemoved,\n changed: originalChanged,\n };\n }\n this.beforeSync(beforeDiffInfo);\n }\n\n const visiblePanels = renderOnlyVisible\n ? viewport.getVisiblePanels()\n : this.getAllPanels(true);\n\n added.forEach(addedIndex => {\n const addedElement = list[addedIndex];\n const beforePanel = visiblePanels[addedIndex] as Panel;\n\n beforePanel.setElement(addedElement);\n // As it can be 0\n beforePanel.unCacheBbox();\n });\n if (this.isPanelChangedAtBeforeSync) {\n // Reset visible panels\n viewport.setVisiblePanels([]);\n this.isPanelChangedAtBeforeSync = false;\n }\n viewport.resize();\n\n return this;\n }\n\n private listenInput(): void {\n const flicking = this;\n const viewport = flicking.viewport;\n const stateMachine = viewport.stateMachine;\n\n // Set event context\n flicking.eventContext = {\n flicking,\n viewport: flicking.viewport,\n transitTo: stateMachine.transitTo,\n triggerEvent: flicking.triggerEvent,\n moveCamera: flicking.moveCamera,\n stopCamera: viewport.stopCamera,\n };\n\n const handlers = {};\n for (const key in AXES_EVENTS) {\n const eventType = AXES_EVENTS[key];\n\n handlers[eventType] = (e: any) => stateMachine.fire(eventType, e, flicking.eventContext);\n }\n\n // Connect Axes instance with PanInput\n flicking.viewport.connectAxesHandler(handlers);\n }\n\n private listenResize(): void {\n const options = this.options;\n\n if (options.autoResize) {\n window.addEventListener(\"resize\", this.resize);\n }\n\n if (options.resizeOnContentsReady) {\n const contentsReadyChecker = new ImReady();\n\n contentsReadyChecker.on(\"preReady\", () => {\n this.resize();\n });\n contentsReadyChecker.on(\"readyElement\", e => {\n if (e.hasLoading && e.isPreReadyOver) {\n this.resize();\n }\n });\n contentsReadyChecker.on(\"error\", e => {\n this.trigger(EVENTS.CONTENT_ERROR, {\n type: EVENTS.CONTENT_ERROR,\n element: e.element,\n });\n });\n contentsReadyChecker.check([this.wrapper]);\n\n this.contentsReadyChecker = contentsReadyChecker;\n }\n }\n\n private triggerEvent = <T extends FlickingEvent>(\n eventName: ValueOf<Omit<EventType, \"VISIBLE_CHANGE\">>, // visibleChange event has no common event definition from other events\n axesEvent: any,\n isTrusted: boolean,\n params: Partial<T> = {},\n ): TriggerCallback => {\n const viewport = this.viewport;\n\n let canceled: boolean = true;\n\n // Ignore events before viewport is initialized\n if (viewport) {\n const state = viewport.stateMachine.getState();\n const { prev, next } = viewport.getScrollArea();\n const pos = viewport.getCameraPosition();\n let progress = getProgress(pos, [prev, prev, next]);\n\n if (this.options.circular) {\n progress %= 1;\n }\n canceled = !super.trigger(eventName, merge({\n type: eventName,\n index: this.getIndex(),\n panel: this.getCurrentPanel(),\n direction: state.direction,\n holding: state.holding,\n progress,\n axesEvent,\n isTrusted,\n }, params) as FlickingEvent);\n }\n\n return {\n onSuccess(callback: () => void): TriggerCallback {\n if (!canceled) {\n callback();\n }\n return this;\n },\n onStopped(callback: () => void): TriggerCallback {\n if (canceled) {\n callback();\n }\n return this;\n },\n } as TriggerCallback;\n }\n\n // Return result of \"move\" event triggered\n private moveCamera = (axesEvent: any): TriggerCallback => {\n const viewport = this.viewport;\n const state = viewport.stateMachine.getState();\n const options = this.options;\n\n const pos = axesEvent.pos.flick;\n const previousPosition = viewport.getCameraPosition();\n\n if (axesEvent.isTrusted && state.holding) {\n const inputOffset = options.horizontal\n ? axesEvent.inputEvent.offsetX\n : axesEvent.inputEvent.offsetY;\n\n const isNextDirection = inputOffset < 0;\n\n let cameraChange = pos - previousPosition;\n const looped = isNextDirection === (pos < previousPosition);\n if (options.circular && looped) {\n // Reached at max/min range of axes\n const scrollAreaSize = viewport.getScrollAreaSize();\n cameraChange = (cameraChange > 0 ? -1 : 1) * (scrollAreaSize - Math.abs(cameraChange));\n }\n\n const currentDirection = cameraChange === 0\n ? state.direction\n : cameraChange > 0\n ? DIRECTION.NEXT\n : DIRECTION.PREV;\n\n state.direction = currentDirection;\n }\n state.delta += axesEvent.delta.flick;\n\n viewport.moveCamera(pos, axesEvent);\n return this.triggerEvent(EVENTS.MOVE, axesEvent, axesEvent.isTrusted)\n .onStopped(() => {\n // Undo camera movement\n viewport.moveCamera(previousPosition, axesEvent);\n });\n }\n\n private checkContentsReady(panels: FlickingPanel[]) {\n this.contentsReadyChecker?.check(panels.map(panel => panel.getElement()));\n }\n}\n\nexport default Flicking;\n"],"names":["MOVE_TYPE","SNAP","FREE_SCROLL","DEFAULT_MOVE_TYPE_OPTIONS","snap","type","count","freeScroll","isBrowser","document","DEFAULT_OPTIONS","classPrefix","deceleration","horizontal","circular","infinite","infiniteThreshold","lastIndex","Infinity","threshold","duration","panelEffect","x","Math","pow","defaultIndex","inputType","thresholdAngle","bounce","autoResize","adaptive","zIndex","bound","overflow","hanger","anchor","gap","moveType","useOffset","isEqualSize","isConstantSize","renderOnlyVisible","renderExternal","resizeOnContentsReady","iOSEdgeSwipeThreshold","collectStatistics","DEFAULT_VIEWPORT_CSS","position","DEFAULT_CAMERA_CSS","width","height","willChange","DEFAULT_PANEL_CSS","EVENTS","HOLD_START","HOLD_END","MOVE_START","MOVE","MOVE_END","CHANGE","RESTORE","SELECT","NEED_PANEL","VISIBLE_CHANGE","CONTENT_ERROR","AXES_EVENTS","HOLD","RELEASE","ANIMATION_END","FINISH","STATE_TYPE","IDLE","HOLDING","DRAGGING","ANIMATING","DISABLED","DIRECTION","PREV","NEXT","FLICKING_METHODS","prev","next","moveTo","getIndex","getAllPanels","getCurrentPanel","getElement","getSize","getPanel","getPanelCount","getStatus","getVisiblePanels","enableInput","disableInput","destroy","resize","setStatus","isPlaying","checkTranslateSupport","transforms","webkitTransform","msTransform","MozTransform","OTransform","transform","name","has3d","supportedStyle","documentElement","style","transformName","prefixedTransform","Error","el","createElement","insertBefore","styleVal","window","getComputedStyle","getPropertyValue","parentElement","removeChild","transformInfo","length","TRANSFORM","merge","target","_i","srcs","forEach","source","Object","keys","key","value","parseElement","element","Array","isArray","elements","isString","tempDiv","innerHTML","push","toArray","children","firstChild","addClass","className","classList","add","hasClass","replace","contains","split","indexOf","applyCSS","cssObj","property","clamp","val","min","max","isBetween","iterable","slice","call","arr","constructor","parseArithmeticExpression","cssValue","base","defaultVal","defaultValue","cssRegex","idx","calculatedValue","matchResult","exec","sign","unit","parsedValue","parseFloat","getProgress","pos","range","center","findIndex","callback","i","counter","counterArray","circulate","indexed","size","offset","restoreStyle","originalStyle","setAttribute","removeAttribute","withFlickingMethods","prototype","flickingName","args","result","_a","getBbox","bbox","y","offsetWidth","offsetHeight","clientRect","getBoundingClientRect","left","top","index","viewport","prevSibling","nextSibling","clonedPanels","state","relativeAnchorPosition","isClone","isVirtual","cloneIndex","cachedBbox","setElement","givenBbox","options","prevSize","panel","cloneState","panelCount","panelManager","scrollAreaSize","getScrollAreaSize","relativeIndex","floor","getPosition","progress","getCurrentProgress","outsetRange","getRelativeHangerPosition","getRelativeAnchorPosition","relativePanelPosition","getCameraPosition","outsetProgress","panelSize","rightRelativePanelPosition","visibleSize","visibleRatio","currentPanel","hangerPosition","getHangerPosition","anchorPosition","getAnchorPosition","currentPosition","eventType","findEstimatedPosition","updateFunction","shouldResize","identicalPanels","getIdenticalPanels","eachPanel","unCacheBbox","addVisiblePanel","currentIndex","prevPanelIndex","prevPanelPosition","prevPanelSize","hasEmptyPanelBetween","notYetMinPanel","newPosition","prevPanel","clone","getCloneIndex","setPosition","getLastIndex","nextPanelIndex","nextPanelPosition","notYetMaxPanel","nextPanel","parsedElements","firstPanel","targetIndex","insert","remove","option","preserveUI","wasVisible","Boolean","parentNode","cameraElement","getCameraElement","appendChild","classes","classes_1","original","getClonedPanels","elementStyle","currentElementStyle","styleToApply","cloneElement","cloneNode","clonedPanel","Panel","clonedState","removeClonedPanelsAfter","start","removingPanels","splice","removeElement","currentElement","getAttribute","panels","clones","cloneCount","reduce","allClones","newPanels","newClones","filter","lastPanel","firstRemovedPanel","possibleLastPanel","shouldRender","isCircular","findFirstPanelFrom","siblingElement","insertNewPanels","pushedIndex","panelsAfterIndex","emptyPanelCount","removedPanels","newLastIndex","concat","reverse","setIndex","updateIndex","addNewClones","panelCount_1","cloneSet","replacedPanels","wasNonEmptyCount","deleteCount","deletedPanels","reversedPanels","nonEmptyIndexFromLast","allPanels","allPanelsCount","newClones_1","insertTarget_1","allPanels_1","panelElement","originalPanels","getCloneCount","lastPanelClones","nextSiblingClones","cloneNextSibling","lastPanelSibling","cloneSiblingElement","nextElementSibling","map","_this","this_1","insertClones","insertingIndex","fragment_1","createDocumentFragment","prevState","delta","direction","targetPanel","lastPosition","nextState","e","context","__extends","flicking","triggerEvent","transitTo","moveCamera","onSuccess","onStopped","onChange","State","inputEvent","offsetX","offsetY","flick","setTo","releaseEvent","srcEvent","clickedElement","touchEvent","touch","changedTouches","elementFromPoint","clientX","clientY","clickedPanel","findPanelOf","cameraPosition","clickedPanelPosition","stopCamera","absDelta","abs","velocity","velocityX","velocityY","inputDelta","deltaX","deltaY","isNextDirection","swipeDistance","swipeAngle","atan","PI","belowAngleThreshold","overThreshold","moveTypeContext","axesEvent","interruptDestInfo","findPanelWhenInterrupted","destPos","nearestPanel","getNearestPanel","stop","destInfo","findTargetPanel","findRestorePanel","scrollArea","getScrollArea","loopCount","originalTargetPosition","newCloneIndex","newTargetPosition","newTargetPanel","setCurrentPanel","isTrusted","updateAdaptiveSize","updateCameraPosition","updateAxesPosition","IdleState","nextStateType","currentState","HoldingState","DraggingState","AnimatingState","DisabledState","onExit","onEnter","onHold","onRelease","onAnimationEnd","onFinish","ctx","findRestorePanelInCircularMode","halfGap","minimumDistanceToChange","originalPanel","getOriginalPanel","firstClonedPanel","lapped","_super","snapCount","eventDelta","calcBrinkOfChange","nearestIsCurrent","shouldMoveWhenBounceIs0","canSetBoundMode","shouldMoveToAdjacent","isOutOfBound","findSnappedPanel","findAdjacentPanel","estimatedHangerPos","panelToMove","cycleIndex","passedPanelCount","panelPosition","panelNextPosition","panelPrevPosition","siblingPanel","panelIndex","siblingIndex","originalPosition","defaultDuration","getCurrentIndex","get","basePanel","basePosition","adjacentPanel","targetRelativeAnchorPosition","estimatedPanelPosition","estimatedPosition","MoveType","estimatedPanel","findNearestPanelAt","stateMachine","getState","currentPanelPosition","lastHangerPosition","Snap","panelMaintainRatio","relativeHangerPosition","positionOffset","translate","checkedIndexes","isAdaptiveCached","isViewportGiven","isCameraGiven","originalViewportStyle","originalCameraStyle","StateMachine","visiblePanels","panelBboxes","build","eventResult","axes","findNearestPanel","originalNearestPosition","checkNeedPanel","modifiedNearestPosition","updateVisiblePanels","posOffset","moveVector","moveCoord","coord","round","join","viewportElement","updateSize","updateOriginalPanelPositions","updateScrollArea","updateClonePanels","updateVisiblePanelPositions","updatePlugins","minimumDistance","prevPosition","nextPosition","distance","minimumAnchorDistance","anchorDistance","nearest","shortestDistance","identicals","identical","getVisibleIndexOf","panInput","createPanInput","resizePanels","newCenterPanel","newPanelPosition","updateCheckedIndexes","indexes","visibleIndex","wasEmpty","newCurrentIndex","getRange","undefined","shouldApplyAdaptive","viewportStyle","sizeToApply","panelBbox","maximumPanelSize","maximum","viewportBbox","updateBbox","viewportSize","isFreeScroll","is","holding","playing","positionBounded","plugins","plugin","update","wrapper","removePlugins","topmostElement_1","deletingElement","status","html","refreshPanels","createdPanels","orderedPanels","createdPanel","replacePanels","setCloneCount","cameraPos_1","viewportSize_1","getNextPanel","getPrevPanel","isOutOfBoundNext","isOutOfBoundPrev","getNext","isOutOfViewport","getAbsIndex_1","nextPanels","prevPanels","__spreadArrays","sort","panel1","panel2","getOutsetProgress","NaN","prevRange","nextRange","nearestAnchorPos","nearestIndex","nearestSize","hangerIsNextToNearestPanel","targetPosition","progressBetween","startIndex","off","on","axesHandlers","setLastIndex","handlers","newPlugins","init","currentPlugins","removedPlugins","changedRange","removed","fragment","prevVisiblePanels","equalSizeClasses_1","cached_1","overlappedClass","getOverlappedClass","clonePanels","updateClonedPanelPositions","chainAllPanels","visiblePanel","setElements","applyCSSValue","setMoveType","setAxesInstance","setDefaultPanel","moveToDefaultPanel","viewportCandidate","hasViewportElement","cameraCandidate","hasCameraElement","panelElements","child","minHeight","minWidth","PanelManager","FreeScroll","Axes","easing","interruptable","indexRange","sumOriginalPanelSize","areaPrev","sizeSum","panelAtLeftBoundary","reversedPanels_1","areaNext","panelAtRightBoundary","panels_1","needCloneOnPrev","panel0OnFirstscreen","ceil","prevCloneCount","origPanel","removeClonesAfter","defaultPanel","defaultPosition","nextPanelPos","maintainingPanel","looped","panelsBeforeMaintainPanel","accumulatedSize","total","setPositionCSS","clonedPanels_1","cloneBasePos","clonedPanelPos","lastReplacePosition","_b","replacePosition","relAnchorPosOfCombined","anchorPos","parsedBounce","parsedVal","axis","maxLastIndex","triggerNeedPanel","checkingPanel","atLastPanel","nextIndex","currentNearestPosition","panelRight","cameraNext","emptyPanelExistsBetween","firstIndex","lastPanelAfterNeed","atLastPanelAfterNeed","cameraPrev","checkingIndex","atFirstPanel","prevIndex","panelLeft","firstPanelAfterNeed","atFirstPanelAfterNeed","params","alreadyTriggered","some","hasHandler","hasOn","fill","insertAfter","newVisiblePanels","calcVisiblePanels","checkVisiblePanelChange","addedPanels","firstVisiblePanelPos","firstVisiblePanel","lastVisiblePanel","getAbsIndex","newVisibleRange","trigger","prevRefCount","newRefCount","newPanel","newIndex","added","default","defaultBbox_1","equalSizeClasses_2","PanInput","scale","connect","shouldResetElements","parent","origStyle","appendUncachedPanelElements","eventName","canceled","previousPosition","inputOffset","cameraChange","currentDirection","querySelector","nodeName","nodeType","currentOptions","Viewport","listenInput","listenResize","focus","possiblePositions","nearestPosition","current","includeClone","enable","disable","outerHTML","restore","addPlugins","removeEventListener","contentsReadyChecker","prependedPanels","checkContentsReady","appendedPanels","diffResult","maintained","values","before","after","list","getPanelAbsIndex","visibleIndexes","renderingPanels","setVisiblePanels","diffInfo","changed","prevClonedPanels","prevOriginalPanels","beforeIdx","afterIdx","addIndex","groupIndex","prevCloneGroup","newCloneGroup","getCheckedIndexes","has","isPanelChangedAtBeforeSync","beforeDiffInfo","prevOriginalPanelCount_1","originalPanelCount_1","originalAdded","originalRemoved","originalMaintained","originalChanged","beforeSync","addedIndex","addedElement","beforePanel","eventContext","fire","connectAxesHandler","addEventListener","ImReady","hasLoading","isPreReadyOver","check","Flicking","Component"],"mappings":"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"}
\No newline at end of file