UNPKG

331 kBSource Map (JSON)View Raw
1{"version":3,"file":"flicking.pkgd.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","../src/index.umd.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","import Flicking from \"./Flicking\";\nimport { withFlickingMethods } from \"./utils\";\nimport { DEFAULT_OPTIONS, MOVE_TYPE } from \"./consts\";\n\n(Flicking as any).withFlickingMethods = withFlickingMethods;\n(Flicking as any).DEFAULT_OPTIONS = DEFAULT_OPTIONS;\n(Flicking as any).MOVE_TYPE = MOVE_TYPE;\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