{"version":3,"file":"flicking.pkgd.js","sources":["../src/const/error.ts","../src/const/external.ts","../src/utils.ts","../src/core/FlickingError.ts","../src/core/Viewport.ts","../src/const/axes.ts","../src/control/states/State.ts","../src/control/states/IdleState.ts","../src/control/states/HoldingState.ts","../src/control/states/DraggingState.ts","../src/control/states/AnimatingState.ts","../src/control/states/DisabledState.ts","../src/control/StateMachine.ts","../src/control/AxesController.ts","../src/control/Control.ts","../src/core/AnchorPoint.ts","../src/control/SnapControl.ts","../src/control/FreeControl.ts","../src/control/StrictControl.ts","../src/control/index.ts","../src/camera/Camera.ts","../src/camera/LinearCamera.ts","../src/camera/CircularCamera.ts","../src/camera/BoundCamera.ts","../src/camera/index.ts","../src/renderer/Renderer.ts","../src/core/panel/Panel.ts","../src/core/panel/ElementPanel.ts","../src/renderer/VanillaRenderer.ts","../src/renderer/ExternalRenderer.ts","../src/renderer/index.ts","../src/Flicking.ts","../src/core/panel/ExternalPanel.ts","../src/core/index.ts","../src/cfc/withFlickingMethods.ts","../src/cfc/sync.ts","../src/cfc/getRenderingPanels.ts","../src/cfc/getDefaultCameraTransform.ts","../src/index.umd.ts"],"sourcesContent":["/*\n * Copyright (c) 2015 NAVER Corp.\n * egjs projects are licensed under the MIT license\n */\n/* eslint-disable @typescript-eslint/restrict-template-expressions */\n\n/**\n * Error codes of {@link FlickingError}. Below are the conditions where each error code occurs.\n * @ko {@link FlickingError}의 에러 코드. 아래는 각각의 에러 코드가 발생하는 조건입니다.\n * @name ERROR_CODE\n * @constant\n * @type object\n * @property {number} WRONG_TYPE Parameter type is wrong패러미터의 타입이 잘못되었을 경우\n * @property {number} ELEMENT_NOT_FOUND Element is not found inside page with the given CSS selector주어진 CSS selector로 페이지 내에서 해당 엘리먼트를 찾지 못했을 경우\n * @property {number} VAL_MUST_NOT_NULL Expected non-null value, but given `null` or `undefined`값을 기대했으나, `null`이나 `undefined`를 받은 경우\n * @property {number} NOT_ATTACHED_TO_FLICKING When Flicking's component is not initialized (i.e. {@link Flicking#init} is not called)Flicking 내부 컴포넌트가 초기화되지 않은 경우 ({@link Flicking#init}이 호출되지 않은 경우)\n * @property {number} WRONG_OPTION One of the options is wrong옵션들 중 잘못된 값이 있을 때\n * @property {number} INDEX_OUT_OF_RANGE When the given index is out of possible range인덱스가 주어진 범위를 벗어난 경우\n * @property {number} POSITION_NOT_REACHABLE When {@link Control#moveToPosition}'s position parameter is out of possible range.{@link Control#moveToPosition}의 `position` 패러미터가 도달 가능한 범위를 벗어난 경우\n * @property {number} TRANSFORM_NOT_SUPPORTED CSS `transform` property is not available(<=IE8) CSS `transform` 속성을 사용할 수 없는 경우(<=IE8)\n * @property {number} STOP_CALLED_BY_USER When the event's `stop()` is called by user.사용자에 의해 이벤트의 `stop()`이 호출된 경우\n * @property {number} ANIMATION_INTERRUPTED When the animation is interrupted by user.사용자에 의해 애니메이션이 중단된 경우\n * @property {number} ANIMATION_ALREADY_PLAYING When the animation is already playing.현재 애니메이션이 이미 진행중인 경우\n * @property {number} NOT_ALLOWED_IN_FRAMEWORK When the non-allowed method is called from frameworks (React, Angular, Vue...)\n * 프레임워크(React, Angular, Vue ...)에서 사용 불가능한 메소드를 호출했을 경우\n * @property {number} NOT_INITIALIZED When the {@link Flicking#init} is not called before but is needed{@link Flicking#init}의 호출이 필요하나, 아직 호출되지 않았을 경우\n * @property {number} NO_ACTIVE When there're no active panel that flicking has selected. This may be due to the absence of any panels현재 Flicking이 선택한 패널이 없을 경우. 일반적으로 패널이 하나도 없는 경우에 발생할 수 있습니다\n */\nexport const CODE = {\n WRONG_TYPE: 0,\n ELEMENT_NOT_FOUND: 1,\n VAL_MUST_NOT_NULL: 2,\n NOT_ATTACHED_TO_FLICKING: 3,\n WRONG_OPTION: 4,\n INDEX_OUT_OF_RANGE: 5,\n POSITION_NOT_REACHABLE: 6,\n TRANSFORM_NOT_SUPPORTED: 7,\n STOP_CALLED_BY_USER: 8,\n ANIMATION_INTERRUPTED: 9,\n ANIMATION_ALREADY_PLAYING: 10,\n NOT_ALLOWED_IN_FRAMEWORK: 11,\n NOT_INITIALIZED: 12,\n NO_ACTIVE: 13\n} as const;\n\nexport const MESSAGE = {\n WRONG_TYPE: (wrongVal: any, correctTypes: string[]) => `${wrongVal}(${typeof wrongVal}) is not a ${correctTypes.map(type => `\"${type}\"`).join(\" or \")}.`,\n ELEMENT_NOT_FOUND: (selector: string) => `Element with selector \"${selector}\" not found.`,\n VAL_MUST_NOT_NULL: (val: any, name: string) => `${name} should be provided. Given: ${val}`,\n NOT_ATTACHED_TO_FLICKING: (name: string) => `${name} is not attached to the Flicking instance. \"init()\" should be called first.`,\n WRONG_OPTION: (optionName: string, val: any) => `Option \"${optionName}\" is not in correct format, given: ${val}`,\n INDEX_OUT_OF_RANGE: (val: number, min: number, max: number) => `Index \"${val}\" is out of range: should be between ${min} and ${max}.`,\n POSITION_NOT_REACHABLE: (position: number) => `Position \"${position}\" is not reachable.`,\n TRANSFORM_NOT_SUPPORTED: \"Browser does not support CSS transform.\",\n STOP_CALLED_BY_USER: \"Event stop() is called by user.\",\n ANIMATION_INTERRUPTED: \"Animation is interrupted by user input.\",\n ANIMATION_ALREADY_PLAYING: \"Animation is already playing.\",\n NOT_ALLOWED_IN_FRAMEWORK: \"This behavior is not allowed in the frameworks like React, Vue, or Angular.\",\n NOT_INITIALIZED: \"Flicking is not initialized yet, call init() first.\",\n NO_ACTIVE: \"There's no active panel that Flicking has selected. This may be due to the absence of any panels.\"\n} as const;\n","/*\n * Copyright (c) 2015 NAVER Corp.\n * egjs projects are licensed under the MIT license\n */\nexport { CODE as ERROR_CODE } from \"./error\";\n\n/**\n * Event type object with event name strings of {@link Flicking}\n * @ko {@link Flicking}의 이벤트 이름 문자열들을 담은 객체\n * @type {object}\n * @property {\"holdStart\"} HOLD_START holdStart eventholdStart 이벤트\n * @property {\"holdEnd\"} HOLD_END holdEnd eventholdEnd 이벤트\n * @property {\"moveStart\"} MOVE_START moveStart eventmoveStart 이벤트\n * @property {\"move\"} MOVE move eventmove 이벤트\n * @property {\"moveEnd\"} MOVE_END moveEnd eventmoveEnd 이벤트\n * @property {\"willChange\"} WILL_CHANGE willChange eventwillChange 이벤트\n * @property {\"changed\"} CHANGED changed eventchanged 이벤트\n * @property {\"willRestore\"} WILL_RESTORE willRestore eventwillRestore 이벤트\n * @property {\"restored\"} RESTORED restored eventrestored 이벤트\n * @property {\"select\"} SELECT select eventselect 이벤트\n * @property {\"needPanel\"} NEED_PANEL needPanel eventneedPanel 이벤트\n * @property {\"panelChange\"} PANEL_CHANGE panelChange eventpanelChange 이벤트\n * @example\n * ```ts\n * import { EVENTS } from \"@egjs/flicking\";\n * EVENTS.MOVE_START; // \"moveStart\"\n * ```\n */\nexport const EVENTS = {\n READY: \"ready\",\n BEFORE_RESIZE: \"beforeResize\",\n AFTER_RESIZE: \"afterResize\",\n HOLD_START: \"holdStart\",\n HOLD_END: \"holdEnd\",\n MOVE_START: \"moveStart\",\n MOVE: \"move\",\n MOVE_END: \"moveEnd\",\n WILL_CHANGE: \"willChange\",\n CHANGED: \"changed\",\n WILL_RESTORE: \"willRestore\",\n RESTORED: \"restored\",\n SELECT: \"select\",\n NEED_PANEL: \"needPanel\",\n VISIBLE_CHANGE: \"visibleChange\",\n REACH_EDGE: \"reachEdge\",\n PANEL_CHANGE: \"panelChange\"\n} as const;\n\n/**\n * An object with all possible predefined literal string for the {@link Flicking#align align} option\n * @ko {@link Flicking#align align} 옵션에 사용되는 미리 정의된 리터럴 상수들을 담고 있는 객체\n * @type {object}\n * @property {\"prev\"} PREV left/top align좌/상 정렬\n * @property {\"center\"} CENTER center align중앙 정렬\n * @property {\"next\"} NEXT right/bottom align우/하 정렬\n */\nexport const ALIGN = {\n PREV: \"prev\",\n CENTER: \"center\",\n NEXT: \"next\"\n} as const;\n\n/**\n * An object of directions\n * @ko 방향을 나타내는 값들을 담고 있는 객체\n * @type {object}\n * @property {\"PREV\"} PREV \"left\" when {@link Flicking#horizontal horizontal} is true, and \"top\" when {@link Flicking#horizontal horizontal} is false\n * {@link Flicking#horizontal horizontal}가 `true`일 경우 왼쪽, {@link Flicking#horizontal horizontal}가 `false`일 경우 위쪽을 의미합니다\n * @property {\"NEXT\"} NEXT \"right\" when {@link Flicking#horizontal horizontal} is true, and \"bottom\" when {@link Flicking#horizontal horizontal} is false\n * {@link Flicking#horizontal horizontal}가 `true`일 경우 오른쪽, {@link Flicking#horizontal horizontal}가 `false`일 경우 아래쪽을 의미합니다\n * @property {null} NONE This value usually means it's the same position주로 제자리인 경우를 의미합니다\n */\nexport const DIRECTION = {\n PREV: \"PREV\",\n NEXT: \"NEXT\",\n NONE: null\n} as const;\n\n/**\n * An object with all possible {@link Flicking#moveType moveType}s\n * @ko Flicking이 제공하는 {@link Flicking#moveType moveType}들을 담고 있는 객체\n * @type {object}\n * @property {\"snap\"} SNAP Flicking's {@link Flicking#moveType moveType} that enables {@link SnapControl} as a Flicking's {@link Flicking#control control}\n * Flicking의 {@link Flicking#control control}을 {@link SnapControl}로 설정하게 하는 {@link Flicking#moveType moveType}\n * @property {\"freeScroll\"} FREE_SCROLL Flicking's {@link Flicking#moveType moveType} that enables {@link FreeControl} as a Flicking's {@link Flicking#control control}\n * Flicking의 {@link Flicking#control control}을 {@link FreeControl}로 설정하게 하는 {@link Flicking#moveType moveType}\n * @property {\"strict\"} STRICT Flicking's {@link Flicking#moveType moveType} that enables {@link StrictControl} as a Flicking's {@link Flicking#control control}\n * Flicking의 {@link Flicking#control control}을 {@link StrictControl}로 설정하게 하는 {@link Flicking#moveType moveType}\n */\nexport const MOVE_TYPE = {\n SNAP: \"snap\",\n FREE_SCROLL: \"freeScroll\",\n STRICT: \"strict\"\n} as const;\n","/*\n * Copyright (c) 2015 NAVER Corp.\n * egjs projects are licensed under the MIT license\n */\nimport Flicking, { FlickingOptions } from \"./Flicking\";\nimport FlickingError from \"./core/FlickingError\";\nimport * as ERROR from \"./const/error\";\nimport { ALIGN, DIRECTION } from \"./const/external\";\nimport { LiteralUnion, Merged, ValueOf } from \"./type/internal\";\nimport { ElementLike } from \"./type/external\";\n\n// eslint-disable-next-line @typescript-eslint/ban-types\nexport const merge = (target: From, ...sources: To[]): Merged => {\n sources.forEach(source => {\n Object.keys(source).forEach(key => {\n target[key] = source[key] as unknown;\n });\n });\n\n return target as Merged;\n};\n\nexport const getElement = (el: HTMLElement | string | null, parent?: HTMLElement): HTMLElement => {\n let targetEl: HTMLElement | null = null;\n\n if (isString(el)) {\n const parentEl = parent ? parent : document;\n const queryResult = parentEl.querySelector(el);\n if (!queryResult) {\n throw new FlickingError(ERROR.MESSAGE.ELEMENT_NOT_FOUND(el), ERROR.CODE.ELEMENT_NOT_FOUND);\n }\n targetEl = queryResult as HTMLElement;\n } else if (el && el.nodeType === Node.ELEMENT_NODE) {\n targetEl = el;\n }\n\n if (!targetEl) {\n throw new FlickingError(ERROR.MESSAGE.WRONG_TYPE(el, [\"HTMLElement\", \"string\"]), ERROR.CODE.WRONG_TYPE);\n }\n\n return targetEl;\n};\n\nexport const checkExistence = (value: any, nameOnErrMsg: string) => {\n if (value == null) {\n throw new FlickingError(ERROR.MESSAGE.VAL_MUST_NOT_NULL(value, nameOnErrMsg), ERROR.CODE.VAL_MUST_NOT_NULL);\n }\n};\n\nexport const clamp = (x: number, min: number, max: number) => Math.max(Math.min(x, max), min);\n\nexport const getFlickingAttached = (val: Flicking | null, nameToThrowOnError: string): Flicking => {\n if (!val) {\n throw new FlickingError(ERROR.MESSAGE.NOT_ATTACHED_TO_FLICKING(nameToThrowOnError), ERROR.CODE.NOT_ATTACHED_TO_FLICKING);\n }\n\n return val;\n};\n\nexport const toArray = (iterable: ArrayLike): T[] => [].slice.call(iterable) as T[];\n\nexport const parseAlign = (align: LiteralUnion> | number, size: number): number => {\n let alignPoint: number | null;\n if (isString(align)) {\n switch (align) {\n case ALIGN.PREV:\n alignPoint = 0;\n break;\n case ALIGN.CENTER:\n alignPoint = 0.5 * size;\n break;\n case ALIGN.NEXT:\n alignPoint = size;\n break;\n default:\n alignPoint = parseArithmeticSize(align, size);\n if (alignPoint == null) {\n throw new FlickingError(ERROR.MESSAGE.WRONG_OPTION(\"align\", align), ERROR.CODE.WRONG_OPTION);\n }\n }\n } else {\n alignPoint = align as number;\n }\n\n return alignPoint;\n};\n\nexport const parseBounce = (bounce: FlickingOptions[\"bounce\"], size: number): number[] => {\n let parsedBounce: Array;\n\n if (Array.isArray(bounce)) {\n parsedBounce = (bounce as string[]).map(val => parseArithmeticSize(val, size));\n } else {\n const parsedVal = parseArithmeticSize(bounce, size);\n\n parsedBounce = [parsedVal, parsedVal];\n }\n\n return parsedBounce.map(val => {\n if (val == null) {\n throw new FlickingError(ERROR.MESSAGE.WRONG_OPTION(\"bounce\", bounce), ERROR.CODE.WRONG_OPTION);\n }\n return val;\n });\n};\n\nexport const parseArithmeticSize = (cssValue: number | string, base: number): number | null => {\n const parsed = parseArithmeticExpression(cssValue);\n\n if (parsed == null) return null;\n\n return parsed.percentage * base + parsed.absolute;\n};\n\nexport const parseArithmeticExpression = (cssValue: number | string): { percentage: number; absolute: number } | null => {\n const cssRegex = /(?:(\\+|\\-)\\s*)?(\\d+(?:\\.\\d+)?(%|px)?)/g;\n\n if (typeof cssValue === \"number\") {\n return { percentage: 0, absolute: cssValue };\n }\n\n const parsed = {\n percentage: 0,\n absolute: 0\n };\n let idx = 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 const 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 null;\n }\n\n const signMultiplier = sign === \"+\" ? 1 : -1;\n\n if (unit === \"%\") {\n parsed.percentage += signMultiplier * (parsedValue / 100);\n } else {\n parsed.absolute += signMultiplier * parsedValue;\n }\n\n // Match next occurrence\n ++idx;\n matchResult = cssRegex.exec(cssValue);\n }\n\n // None-matched\n if (idx === 0) {\n return null;\n }\n\n return parsed;\n};\n\nexport const parseCSSSizeValue = (val: string | number): string => isString(val) ? val : `${val}px`;\n\nexport const getDirection = (start: number, end: number): ValueOf => {\n if (start === end) return DIRECTION.NONE;\n return start < end ? DIRECTION.NEXT : DIRECTION.PREV;\n};\n\nexport const 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 if (el && el.nodeType === Node.ELEMENT_NODE) {\n elements.push(el);\n } else {\n throw new FlickingError(ERROR.MESSAGE.WRONG_TYPE(el, [\"HTMLElement\", \"string\"]), ERROR.CODE.WRONG_TYPE);\n }\n });\n\n return elements;\n};\n\nexport const getMinusCompensatedIndex = (idx: number, max: number) => idx < 0 ? clamp(idx + max, 0, max) : clamp(idx, 0, max);\n\nexport const includes = (array: T[], target: any): target is T => {\n for (const val of array) {\n if (val === target) return true;\n }\n return false;\n};\n\nexport const isString = (val: any): val is string => typeof val === \"string\";\n\nexport const circulatePosition = (pos: number, min: number, max: number) => {\n const size = max - min;\n\n if (pos < min) {\n const offset = (min - pos) % size;\n pos = max - offset;\n } else if (pos > max) {\n const offset = (pos - max) % size;\n pos = min + offset;\n }\n\n return pos;\n};\n\nexport const find = (array: T[], checker: (val: T) => boolean): T | null => {\n for (const val of array) {\n if (checker(val)) {\n return val;\n }\n }\n\n return null;\n};\n\nexport const findRight = (array: T[], checker: (val: T) => boolean): T | null => {\n for (let idx = array.length - 1; idx >= 0; idx--) {\n const val = array[idx];\n if (checker(val)) {\n return val;\n }\n }\n\n return null;\n};\n\nexport const findIndex = (array: T[], checker: (val: T) => boolean): number => {\n for (let idx = 0; idx < array.length; idx++) {\n if (checker(array[idx])) {\n return idx;\n }\n }\n\n return -1;\n};\n\nexport const getProgress = (pos: number, prev: number, next: number) => (pos - prev) / (next - prev);\n\n// eslint-disable-next-line @typescript-eslint/no-unsafe-member-access\nexport const getStyle = (el: HTMLElement): CSSStyleDeclaration => window.getComputedStyle(el) || (el as any).currentStyle as CSSStyleDeclaration;\n\nexport const isBetween = (val: number, min: number, max: number) => val >= min && val <= max;\n\nexport const circulateIndex = (index: number, max: number): number => {\n if (index >= max) {\n return index % max;\n } else if (index < 0) {\n return getMinusCompensatedIndex((index + 1) % max - 1, max);\n } else {\n return index;\n }\n};\n\nexport const setPrototypeOf = Object.setPrototypeOf || ((obj, proto) => {\n obj.__proto__ = proto;\n return obj;\n});\n","/*\n * Copyright (c) 2015 NAVER Corp.\n * egjs projects are licensed under the MIT license\n */\n\nimport { setPrototypeOf } from \"../utils\";\n\n/**\n * Special type of known error that {@link Flicking} throws.\n * @ko Flicking 내부에서 알려진 오류 발생시 throw되는 에러\n * @property {number} code Error code에러 코드\n * @property {string} message Error message에러 메시지\n * @see {@link Constants.ERROR_CODE ERROR_CODE}\n * @example\n * ```ts\n * import Flicking, { FlickingError, ERROR_CODES } from \"@egjs/flicking\";\n * try {\n * const flicking = new Flicking(\".flicking-viewport\")\n * } catch (e) {\n * if (e instanceof FlickingError && e.code === ERROR_CODES.ELEMENT_NOT_FOUND) {\n * console.error(\"Element not found\")\n * }\n * }\n * ```\n */\nclass FlickingError extends Error {\n public code: number;\n\n /**\n * @param message Error message에러 메시지\n * @param code Error code에러 코드\n */\n public constructor(message: string, code: number) {\n super(message);\n\n setPrototypeOf(this, FlickingError.prototype);\n this.name = \"FlickingError\";\n this.code = code;\n }\n}\n\nexport default FlickingError;\n","/*\n * Copyright (c) 2015 NAVER Corp.\n * egjs projects are licensed under the MIT license\n */\nimport { getStyle, isString } from \"../utils\";\n\n/**\n * A component that manages viewport size\n * @ko 뷰포트 크기 정보를 담당하는 컴포넌트\n */\nclass Viewport {\n private _el: HTMLElement;\n private _width: number;\n private _height: number;\n private _isBorderBoxSizing: boolean;\n private _padding: {\n left: number;\n right: number;\n top: number;\n bottom: number;\n };\n\n /**\n * A viewport(root) element\n * @ko 뷰포트(root) 엘리먼트\n * @type {HTMLElement}\n * @readonly\n */\n public get element() { return this._el; }\n\n /**\n * Viewport width, without paddings\n * @ko 뷰포트 너비\n * @type {number}\n * @readonly\n */\n public get width() { return this._width - this._padding.left - this._padding.right; }\n /**\n * Viewport height, without paddings\n * @ko 뷰포트 높이\n * @type {number}\n * @readonly\n */\n public get height() { return this._height - this._padding.top - this._padding.bottom; }\n /**\n * Viewport paddings\n * @ko 뷰포트 CSS padding 값\n * @type {object}\n * @property {number} left CSS `padding-left`\n * @property {number} right CSS `padding-right`\n * @property {number} top CSS `padding-top`\n * @property {number} bottom CSS `padding-bottom`\n * @readonly\n */\n public get padding() { return this._padding; }\n\n /**\n * @param el A viewport element뷰포트 엘리먼트\n */\n public constructor(el: HTMLElement) {\n this._el = el;\n this._width = 0;\n this._height = 0;\n this._padding = {\n left: 0,\n right: 0,\n top: 0,\n bottom: 0\n };\n this._isBorderBoxSizing = false;\n }\n\n /**\n * Change viewport's size.\n * This will change the actual size of `.flicking-viewport` element by changing its CSS width/height property\n * @ko 뷰포트 크기를 변경합니다.\n * `.flicking-viewport` 엘리먼트에 해당 크기의 CSS width/height를 적용합니다\n * @param {object} [size] New viewport size새 뷰포트 크기\n * @param {number|string} [size.width] CSS string or number(in px)CSS 문자열 또는 숫자(px)\n * @param {number|string} [size.height] CSS string or number(in px)CSS 문자열 또는 숫자(px)\n */\n public setSize({\n width,\n height\n }: Partial<{\n width: number | string;\n height: number | string;\n }>) {\n const el = this._el;\n const padding = this._padding;\n const isBorderBoxSizing = this._isBorderBoxSizing;\n\n if (width != null) {\n if (isString(width)) {\n el.style.width = width;\n } else {\n const newWidth = isBorderBoxSizing\n ? width + padding.left + padding.right\n : width;\n el.style.width = `${newWidth}px`;\n }\n }\n if (height != null) {\n if (isString(height)) {\n el.style.height = height;\n } else {\n const newHeight = isBorderBoxSizing\n ? height + padding.top + padding.bottom\n : height;\n el.style.height = `${newHeight}px`;\n }\n }\n this.resize();\n }\n\n /**\n * Update width/height to the current viewport element's size\n * @ko 현재 뷰포트 엘리먼트의 크기로 너비/높이를 업데이트합니다\n */\n public resize() {\n const el = this._el;\n const elStyle = getStyle(el);\n\n this._width = el.clientWidth;\n this._height = el.clientHeight;\n this._padding = {\n left: parseFloat(elStyle.paddingLeft),\n right: parseFloat(elStyle.paddingRight),\n top: parseFloat(elStyle.paddingTop),\n bottom: parseFloat(elStyle.paddingBottom)\n };\n this._isBorderBoxSizing = elStyle.boxSizing === \"border-box\";\n }\n}\n\nexport default Viewport;\n","/**\n * All possible @egjs/axes event keys\n * @internal\n */\nexport const EVENT = {\n HOLD: \"hold\",\n CHANGE: \"change\",\n RELEASE: \"release\",\n ANIMATION_END: \"animationEnd\",\n FINISH: \"finish\"\n} as const;\n\n/**\n * An Axis key that Flicking uses\n * @internal\n */\nexport const POSITION_KEY = \"flick\";\n","/*\n * Copyright (c) 2015 NAVER Corp.\n * egjs projects are licensed under the MIT license\n */\n/* eslint-disable @typescript-eslint/no-unused-vars */\nimport { OnAnimationEnd, OnChange, OnFinish, OnHold, OnRelease } from \"@egjs/axes\";\nimport { ComponentEvent } from \"@egjs/component\";\n\nimport Flicking from \"../../Flicking\";\nimport Panel from \"../../core/panel/Panel\";\nimport { EVENTS } from \"../../const/external\";\nimport * as AXES from \"../../const/axes\";\nimport { circulatePosition, getDirection } from \"../../utils\";\n\nexport enum STATE_TYPE {\n IDLE,\n HOLDING,\n DRAGGING,\n ANIMATING,\n DISABLED\n}\n\n/**\n * A component that shows the current status of the user input or the animation\n * @ko 현재 사용자 입력 또는 애니메이션 상태를 나타내는 컴포넌트\n * @internal\n */\nabstract class State {\n /**\n * Whether user is clicking or touching\n * @ko 현재 사용자가 클릭/터치중인지 여부\n * @type {boolean}\n * @readonly\n */\n public abstract readonly holding: boolean;\n /**\n * Whether Flicking's animating\n * @ko 현재 애니메이션 동작 여부\n * @type {boolean}\n * @readonly\n */\n public abstract readonly animating: boolean;\n\n protected _delta: number = 0;\n protected _targetPanel: Panel | null = null;\n\n /**\n * A sum of delta values of change events from the last hold event of Axes\n * @ko 이전 hold이벤트부터 change에 의해 발생한 이동 delta값의 합산\n * @type {number}\n * @readonly\n */\n public get delta() { return this._delta; }\n\n /**\n * A panel to set as {@link Control#activePanel} after the animation is finished\n * @ko 애니메이션 종료시 {@link Control#activePanel}로 설정할 패널\n * @type {number}\n * @readonly\n */\n public get targetPanel() { return this._targetPanel; }\n\n public set targetPanel(val: Panel | null) { this._targetPanel = val; }\n\n /**\n * An callback which is called when state has changed to this state\n * @ko 현재 상태로 돌입했을때 호출되는 콜백 함수\n * @param {State} prevState An previous state이전 상태값\n * @return {void}\n */\n public onEnter(prevState: State): void {\n this._delta = prevState._delta;\n this._targetPanel = prevState._targetPanel;\n }\n\n /**\n * An event handler for Axes's {@link https://naver.github.io/egjs-axes/release/latest/doc/eg.Axes.html#event:hold hold} event\n * @ko Axes의 {@link https://naver.github.io/egjs-axes/release/latest/doc/eg.Axes.html#event:hold hold} 이벤트 핸들러\n * @param {object} [ctx] Event context이벤트 콘텍스트\n * @param {Flicking} [ctx.flicking] An instance of FlickingFlicking 인스턴스\n * @param {object} [ctx.axesEvent] A {@link https://naver.github.io/egjs-axes/release/latest/doc/eg.Axes.html#event:hold hold} event of Axes\n * Axes의 {@link https://naver.github.io/egjs-axes/release/latest/doc/eg.Axes.html#event:hold hold} 이벤트\n * @param {function} [ctx.transitTo] A function for changing current state to other state다른 상태로 변경하기 위한 함수\n * @return {void}\n */\n public onHold(ctx: {\n flicking: Flicking;\n axesEvent: OnHold;\n transitTo: (nextState: STATE_TYPE) => State;\n }): void {\n // DO NOTHING\n }\n\n /**\n * An event handler for Axes's {@link https://naver.github.io/egjs-axes/release/latest/doc/eg.Axes.html#event:change change} event\n * @ko Axes의 {@link https://naver.github.io/egjs-axes/release/latest/doc/eg.Axes.html#event:change change} 이벤트 핸들러\n * @param {object} [ctx] Event context이벤트 콘텍스트\n * @param {Flicking} [ctx.flicking] An instance of FlickingFlicking 인스턴스\n * @param {object} [ctx.axesEvent] A {@link https://naver.github.io/egjs-axes/release/latest/doc/eg.Axes.html#event:change change} event of Axes\n * Axes의 {@link https://naver.github.io/egjs-axes/release/latest/doc/eg.Axes.html#event:change change} 이벤트\n * @param {function} [ctx.transitTo] A function for changing current state to other state다른 상태로 변경하기 위한 함수\n * @return {void}\n */\n public onChange(ctx: {\n flicking: Flicking;\n axesEvent: OnChange;\n transitTo: (nextState: STATE_TYPE) => State;\n }): void {\n // DO NOTHING\n }\n\n /**\n * An event handler for Axes's {@link https://naver.github.io/egjs-axes/release/latest/doc/eg.Axes.html#event:release release} event\n * @ko Axes의 {@link https://naver.github.io/egjs-axes/release/latest/doc/eg.Axes.html#event:release release} 이벤트 핸들러\n * @param {object} [ctx] Event context이벤트 콘텍스트\n * @param {Flicking} [ctx.flicking] An instance of FlickingFlicking 인스턴스\n * @param {object} [ctx.axesEvent] A {@link https://naver.github.io/egjs-axes/release/latest/doc/eg.Axes.html#event:release release} event of Axes\n * Axes의 {@link https://naver.github.io/egjs-axes/release/latest/doc/eg.Axes.html#event:release release} 이벤트\n * @param {function} [ctx.transitTo] A function for changing current state to other state다른 상태로 변경하기 위한 함수\n * @return {void}\n */\n public onRelease(ctx: {\n flicking: Flicking;\n axesEvent: OnRelease;\n transitTo: (nextState: STATE_TYPE) => State;\n }): void {\n // DO NOTHING\n }\n\n /**\n * An event handler for Axes's {@link https://naver.github.io/egjs-axes/release/latest/doc/eg.Axes.html#event:animationEnd animationEnd} event\n * @ko Axes의 {@link https://naver.github.io/egjs-axes/release/latest/doc/eg.Axes.html#event:animationEnd animationEnd} 이벤트 핸들러\n * @param {object} [ctx] Event context이벤트 콘텍스트\n * @param {Flicking} [ctx.flicking] An instance of FlickingFlicking 인스턴스\n * @param {object} [ctx.axesEvent] A {@link https://naver.github.io/egjs-axes/release/latest/doc/eg.Axes.html#event:animationEnd animationEnd} event of Axes\n * Axes의 {@link https://naver.github.io/egjs-axes/release/latest/doc/eg.Axes.html#event:animationEnd animationEnd} 이벤트\n * @param {function} [ctx.transitTo] A function for changing current state to other state다른 상태로 변경하기 위한 함수\n * @return {void}\n */\n public onAnimationEnd(ctx: {\n flicking: Flicking;\n axesEvent: OnAnimationEnd;\n transitTo: (nextState: STATE_TYPE) => State;\n }): void {\n // DO NOTHING\n }\n\n /**\n * An event handler for Axes's {@link https://naver.github.io/egjs-axes/release/latest/doc/eg.Axes.html#event:finish finish} event\n * @ko Axes의 {@link https://naver.github.io/egjs-axes/release/latest/doc/eg.Axes.html#event:finish finish} 이벤트 핸들러\n * @param {object} [ctx] Event context이벤트 콘텍스트\n * @param {Flicking} [ctx.flicking] An instance of FlickingFlicking 인스턴스\n * @param {object} [ctx.axesEvent] A {@link https://naver.github.io/egjs-axes/release/latest/doc/eg.Axes.html#event:finish finish} event of AxesAxes의 {@link https://naver.github.io/egjs-axes/release/latest/doc/eg.Axes.html#event:finish finish} 이벤트\n * @param {function} [ctx.transitTo] A function for changing current state to other state다른 상태로 변경하기 위한 함수\n * @return {void}\n */\n public onFinish(ctx: {\n flicking: Flicking;\n axesEvent: OnFinish;\n transitTo: (nextState: STATE_TYPE) => State;\n }): void {\n // DO NOTHING\n }\n\n protected _moveToChangedPosition(ctx: Parameters[0]): void {\n const { flicking, axesEvent, transitTo } = ctx;\n const delta = axesEvent.delta[AXES.POSITION_KEY];\n\n if (!delta) {\n return;\n }\n\n this._delta += delta;\n\n const camera = flicking.camera;\n const prevPosition = camera.position;\n const position = axesEvent.pos[AXES.POSITION_KEY];\n const newPosition = flicking.circularEnabled\n ? circulatePosition(position, camera.range.min, camera.range.max)\n : position;\n\n camera.lookAt(newPosition);\n\n const moveEvent = new ComponentEvent(EVENTS.MOVE, {\n isTrusted: axesEvent.isTrusted,\n holding: this.holding,\n direction: getDirection(0, axesEvent.delta[AXES.POSITION_KEY]),\n axesEvent\n });\n\n flicking.trigger(moveEvent);\n\n if (moveEvent.isCanceled()) {\n // Return to previous position\n camera.lookAt(prevPosition);\n transitTo(STATE_TYPE.DISABLED);\n }\n }\n}\n\nexport default State;\n","/*\n * Copyright (c) 2015 NAVER Corp.\n * egjs projects are licensed under the MIT license\n */\nimport { ComponentEvent } from \"@egjs/component\";\n\nimport { EVENTS } from \"../../const/external\";\nimport { getDirection } from \"../../utils\";\n\nimport State, { STATE_TYPE } from \"./State\";\n\n/**\n * A default state when there's no user input and no animation's playing\n * @ko 사용자의 입력이 없고, 애니메이션이 동작하고있지 않은 기본 상태\n * @internal\n */\nclass IdleState extends State {\n /**\n * Whether user is clicking or touching\n * @ko 현재 사용자가 클릭/터치중인지 여부\n * @type {false}\n * @readonly\n */\n public readonly holding = false;\n /**\n * Whether Flicking's animating\n * @ko 현재 애니메이션 동작 여부\n * @type {false}\n * @readonly\n */\n public readonly animating = false;\n\n public onEnter() {\n this._delta = 0;\n this._targetPanel = null;\n }\n\n public onHold(ctx: Parameters[0]): void {\n // Shouldn't do any action until any panels on flicking area\n const { flicking, axesEvent, transitTo } = ctx;\n\n if (flicking.renderer.panelCount <= 0) {\n transitTo(STATE_TYPE.DISABLED);\n return;\n }\n\n const holdStartEvent = new ComponentEvent(EVENTS.HOLD_START, {\n axesEvent\n });\n\n flicking.trigger(holdStartEvent);\n\n if (holdStartEvent.isCanceled()) {\n transitTo(STATE_TYPE.DISABLED);\n } else {\n transitTo(STATE_TYPE.HOLDING);\n }\n }\n\n // By methods call\n public onChange(ctx: Parameters[0]): void {\n const { flicking, axesEvent, transitTo } = ctx;\n const controller = flicking.control.controller;\n const animatingContext = controller.animatingContext;\n\n const moveStartEvent = new ComponentEvent(EVENTS.MOVE_START, {\n isTrusted: axesEvent.isTrusted,\n holding: this.holding,\n direction: getDirection(animatingContext.start, animatingContext.end),\n axesEvent\n });\n flicking.trigger(moveStartEvent);\n\n if (moveStartEvent.isCanceled()) {\n transitTo(STATE_TYPE.DISABLED);\n } else {\n // Trigger AnimatingState's onChange, to trigger \"move\" event immediately\n transitTo(STATE_TYPE.ANIMATING).onChange(ctx);\n }\n }\n}\n\nexport default IdleState;\n","/*\n * Copyright (c) 2015 NAVER Corp.\n * egjs projects are licensed under the MIT license\n */\nimport { OnRelease } from \"@egjs/axes\";\nimport { ComponentEvent } from \"@egjs/component\";\n\nimport Panel from \"../../core/panel/Panel\";\nimport { EVENTS } from \"../../const/external\";\nimport { getDirection } from \"../../utils\";\n\nimport State, { STATE_TYPE } from \"./State\";\n\n/**\n * A state that activates when user's holding the Flicking area, but not moved a single pixel yet\n * @ko 사용자의 입력이 시작되었으나, 아직 움직이지는 않은 상태\n * @internal\n */\nclass HoldingState extends State {\n /**\n * Whether user is clicking or touching\n * @ko 현재 사용자가 클릭/터치중인지 여부\n * @type {true}\n * @readonly\n */\n public readonly holding = true;\n /**\n * Whether Flicking's animating\n * @ko 현재 애니메이션 동작 여부\n * @type {false}\n * @readonly\n */\n public readonly animating = false;\n\n private _releaseEvent: OnRelease | null = null;\n\n public onChange(ctx: Parameters[0]): void {\n const { flicking, axesEvent, transitTo } = ctx;\n\n const inputEvent = axesEvent.inputEvent as { offsetX: number; offsetY: number };\n\n const offset = flicking.horizontal\n ? inputEvent.offsetX\n : inputEvent.offsetY;\n\n const moveStartEvent = new ComponentEvent(EVENTS.MOVE_START, {\n isTrusted: axesEvent.isTrusted,\n holding: this.holding,\n direction: getDirection(0, -offset),\n axesEvent\n });\n flicking.trigger(moveStartEvent);\n\n if (moveStartEvent.isCanceled()) {\n transitTo(STATE_TYPE.DISABLED);\n } else {\n // Trigger DraggingState's onChange, to trigger \"move\" event immediately\n transitTo(STATE_TYPE.DRAGGING).onChange(ctx);\n }\n }\n\n public onRelease(ctx: Parameters[0]): void {\n const { flicking, axesEvent, transitTo } = ctx;\n\n flicking.trigger(new ComponentEvent(EVENTS.HOLD_END, { axesEvent }));\n\n if (axesEvent.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 axesEvent.setTo({ flick: flicking.camera.position }, 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 = axesEvent;\n }\n\n public onFinish(ctx: Parameters[0]): void {\n const { flicking, transitTo } = ctx;\n\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 /* eslint-disable @typescript-eslint/no-unsafe-assignment, @typescript-eslint/no-unsafe-member-access */\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 /* eslint-enable */\n\n const panels = flicking.renderer.panels;\n let clickedPanel: Panel | null = null;\n\n for (const panel of panels) {\n if (panel.contains(clickedElement)) {\n clickedPanel = panel;\n break;\n }\n }\n\n if (clickedPanel) {\n const cameraPosition = flicking.camera.position;\n const clickedPanelPosition = clickedPanel.position;\n\n flicking.trigger(new ComponentEvent(EVENTS.SELECT, {\n index: clickedPanel.index,\n panel: clickedPanel,\n // Direction to the clicked panel\n direction: getDirection(cameraPosition, clickedPanelPosition)\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 */\nimport { ComponentEvent } from \"@egjs/component\";\n\nimport { EVENTS } from \"../../const/external\";\nimport * as AXES from \"../../const/axes\";\n\nimport State, { STATE_TYPE } from \"./State\";\n\n/**\n * A state that activates when user's dragging the Flicking area\n * @ko 사용자가 드래깅중인 상태\n * @internal\n */\nclass DraggingState extends State {\n /**\n * Whether user is clicking or touching\n * @ko 현재 사용자가 클릭/터치중인지 여부\n * @type {true}\n * @readonly\n */\n public readonly holding = true;\n /**\n * Whether Flicking's animating\n * @ko 현재 애니메이션 동작 여부\n * @type {true}\n * @readonly\n */\n public readonly animating = true;\n\n public onChange(ctx: Parameters[0]): void {\n this._moveToChangedPosition(ctx);\n }\n\n public onRelease(ctx: Parameters[0]): void {\n const { flicking, axesEvent, transitTo } = ctx;\n\n // Update last position to cope with Axes's animating behavior\n // Axes uses start position when animation start\n flicking.trigger(new ComponentEvent(EVENTS.HOLD_END, {\n axesEvent\n }));\n\n if (flicking.renderer.panelCount <= 0) {\n // There're no panels\n transitTo(STATE_TYPE.IDLE);\n return;\n }\n\n transitTo(STATE_TYPE.ANIMATING);\n\n const control = flicking.control;\n const position = axesEvent.destPos[AXES.POSITION_KEY];\n const duration = Math.max(axesEvent.duration, flicking.duration);\n\n void control.moveToPosition(position, duration, axesEvent);\n }\n}\n\nexport default DraggingState;\n","/*\n * Copyright (c) 2015 NAVER Corp.\n * egjs projects are licensed under the MIT license\n */\nimport { ComponentEvent } from \"@egjs/component\";\n\nimport { EVENTS } from \"../../const/external\";\nimport { getDirection } from \"../../utils\";\n\nimport State, { STATE_TYPE } from \"./State\";\n\n/**\n * A state that activates when Flicking's animating by user input or method call\n * @ko 사용자 입력이나 메소드 호출에 의해 Flicking의 애니메이션이 동작중인 상태\n * @internal\n */\nclass AnimatingState extends State {\n /**\n * Whether user is clicking or touching\n * @ko 현재 사용자가 클릭/터치중인지 여부\n * @type {false}\n * @readonly\n */\n public readonly holding = false;\n /**\n * Whether Flicking's animating\n * @ko 현재 애니메이션 동작 여부\n * @type {true}\n * @readonly\n */\n public readonly animating = true;\n\n public onHold(ctx: Parameters[0]): void {\n const { flicking, axesEvent, transitTo } = ctx;\n\n this._delta = 0;\n flicking.control.updateInput();\n\n const holdStartEvent = new ComponentEvent(EVENTS.HOLD_START, { axesEvent });\n flicking.trigger(holdStartEvent);\n\n if (holdStartEvent.isCanceled()) {\n transitTo(STATE_TYPE.DISABLED);\n } else {\n transitTo(STATE_TYPE.DRAGGING);\n }\n }\n\n public onChange(ctx: Parameters[0]): void {\n this._moveToChangedPosition(ctx);\n }\n\n public onFinish(ctx: Parameters[0]) {\n const { flicking, axesEvent, transitTo } = ctx;\n\n const control = flicking.control;\n const controller = control.controller;\n const animatingContext = controller.animatingContext;\n\n transitTo(STATE_TYPE.IDLE);\n\n flicking.trigger(new ComponentEvent(EVENTS.MOVE_END, {\n isTrusted: axesEvent.isTrusted,\n direction: getDirection(animatingContext.start, animatingContext.end),\n axesEvent\n }));\n\n control.setActive(this._targetPanel!, control.activePanel, axesEvent.isTrusted);\n }\n}\n\nexport default AnimatingState;\n","/*\n * Copyright (c) 2015 NAVER Corp.\n * egjs projects are licensed under the MIT license\n */\nimport State, { STATE_TYPE } from \"./State\";\n\n/**\n * A state that activates when Flicking is stopped by event's `stop` method\n * @ko 이벤트의 `stop`호출에 의해 Flicking이 정지된 상태\n * @internal\n */\nclass DisabledState extends State {\n /**\n * Whether user is clicking or touching\n * @ko 현재 사용자가 클릭/터치중인지 여부\n * @type {false}\n * @readonly\n */\n public readonly holding = false;\n /**\n * Whether Flicking's animating\n * @ko 현재 애니메이션 동작 여부\n * @type {true}\n * @readonly\n */\n public readonly animating = true;\n\n public onAnimationEnd(ctx: Parameters[0]): void {\n const { transitTo } = ctx;\n\n transitTo(STATE_TYPE.IDLE);\n }\n\n public onChange(ctx: Parameters[0]): void {\n const { axesEvent, transitTo } = ctx;\n\n // Can stop Axes's change event\n axesEvent.stop();\n\n transitTo(STATE_TYPE.IDLE);\n }\n\n public onRelease(ctx: Parameters[0]): void {\n const { axesEvent, transitTo } = ctx;\n\n // This is needed when stopped hold start event\n if (axesEvent.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 */\nimport { AxesEvents } from \"@egjs/axes\";\n\nimport Flicking from \"../Flicking\";\nimport * as AXES from \"../const/axes\";\n\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\";\nimport State, { STATE_TYPE } from \"./states/State\";\n\n/**\n * @internal\n */\nclass StateMachine {\n private _state: State;\n\n public get state(): State { return this._state; }\n\n public constructor() {\n this._state = new IdleState();\n }\n\n public fire(eventType: keyof AxesEvents, externalCtx: {\n flicking: Flicking;\n axesEvent: any;\n }) {\n const currentState = this._state;\n const ctx = { ...externalCtx, transitTo: this.transitTo };\n\n switch (eventType) {\n case AXES.EVENT.HOLD:\n currentState.onHold(ctx);\n break;\n case AXES.EVENT.CHANGE:\n currentState.onChange(ctx);\n break;\n case AXES.EVENT.RELEASE:\n currentState.onRelease(ctx);\n break;\n case AXES.EVENT.ANIMATION_END:\n currentState.onAnimationEnd(ctx);\n break;\n case AXES.EVENT.FINISH:\n currentState.onFinish(ctx);\n break;\n }\n }\n\n public transitTo = (nextStateType: STATE_TYPE): State => {\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 nextState.onEnter(this._state);\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 */\nimport Axes, { PanInput, AxesEvents, OnRelease } from \"@egjs/axes\";\n\nimport Flicking from \"../Flicking\";\nimport FlickingError from \"../core/FlickingError\";\nimport * as AXES from \"../const/axes\";\nimport * as ERROR from \"../const/error\";\nimport { circulatePosition, getFlickingAttached, parseBounce } from \"../utils\";\nimport { ControlParams } from \"../type/external\";\n\nimport StateMachine from \"./StateMachine\";\n\n/**\n * A controller that handles the {@link https://naver.github.io/egjs-axes/ @egjs/axes} events\n * @ko {@link https://naver.github.io/egjs-axes/ @egjs/axes}의 이벤트를 처리하는 컨트롤러 컴포넌트\n * @internal\n */\nclass AxesController {\n private _flicking: Flicking | null;\n private _axes: Axes | null;\n private _panInput: PanInput | null;\n private _stateMachine: StateMachine;\n\n private _animatingContext: { start: number; end: number; offset: number };\n private _dragged: boolean;\n\n /**\n * An {@link https://naver.github.io/egjs-axes/release/latest/doc/eg.Axes.html Axes} instance\n * @ko {@link https://naver.github.io/egjs-axes/release/latest/doc/eg.Axes.html Axes}의 인스턴스\n * @type {Axes}\n * @see https://naver.github.io/egjs-axes/release/latest/doc/eg.Axes.html\n * @readonly\n */\n public get axes() { return this._axes; }\n /**\n * @internal\n */\n public get stateMachine() { return this._stateMachine; }\n /**\n * A activated {@link State} that shows the current status of the user input or the animation\n * @ko 현재 활성화된 {@link State} 인스턴스로 사용자 입력 또는 애니메이션 상태를 나타냅니다\n * @type {State}\n */\n public get state() { return this._stateMachine.state; }\n /**\n * A context of the current animation playing\n * @ko 현재 재생중인 애니메이션 정보\n * @type {object}\n * @property {number} start A start position of the animation애니메이션 시작 지점\n * @property {number} end A end position of the animation애니메이션 끝 지점\n * @property {number} offset camera offset카메라 오프셋\n * @readonly\n */\n public get animatingContext() { return this._animatingContext; }\n /**\n * A current control parameters of the Axes instance\n * @ko 활성화된 현재 Axes 패러미터들\n * @type {ControlParams}\n */\n public get controlParams(): ControlParams {\n const axes = this._axes;\n\n if (!axes) {\n return {\n range: { min: 0, max: 0 },\n position: 0,\n circular: false\n };\n }\n\n const axis = axes.axis[AXES.POSITION_KEY];\n\n return {\n range: { min: axis.range![0], max: axis.range![1] },\n circular: (axis.circular as boolean[])[0],\n position: this.position\n };\n }\n\n /**\n * A Boolean indicating whether the user input is enabled\n * @ko 현재 사용자 입력이 활성화되었는지를 나타내는 값\n * @type {boolean}\n * @readonly\n */\n public get enabled() { return this._panInput?.isEnable() ?? false; }\n /**\n * Current position value in {@link https://naver.github.io/egjs-axes/release/latest/doc/eg.Axes.html Axes} instance\n * @ko {@link https://naver.github.io/egjs-axes/release/latest/doc/eg.Axes.html Axes} 인스턴스 내부의 현재 좌표 값\n * @type {number}\n * @readonly\n */\n public get position() { return this._axes?.get([AXES.POSITION_KEY])[AXES.POSITION_KEY] ?? 0; }\n /**\n * Current range value in {@link https://naver.github.io/egjs-axes/release/latest/doc/eg.Axes.html Axes} instance\n * @ko {@link https://naver.github.io/egjs-axes/release/latest/doc/eg.Axes.html Axes} 인스턴스 내부의 현재 이동 범위 값\n * @type {number[]}\n * @readonly\n */\n public get range() { return this._axes?.axis[AXES.POSITION_KEY].range ?? [0, 0]; }\n /**\n * Actual bounce size(px)\n * @ko 적용된 bounce 크기(px 단위)\n * @type {number[]}\n * @readonly\n */\n public get bounce() { return this._axes?.axis[AXES.POSITION_KEY].bounce as number[] | undefined; }\n\n /** */\n public constructor() {\n this._resetInternalValues();\n this._stateMachine = new StateMachine();\n }\n\n /**\n * Initialize AxesController\n * @ko AxesController를 초기화합니다\n * @param {Flicking} flicking An instance of Flicking\n * @chainable\n * @return {this}\n */\n public init(flicking: Flicking): this {\n this._flicking = flicking;\n\n this._axes = new Axes({\n [AXES.POSITION_KEY]: {\n range: [0, 0],\n circular: false,\n bounce: [0, 0]\n }\n }, {\n deceleration: flicking.deceleration,\n interruptable: flicking.interruptable,\n easing: flicking.easing\n });\n this._panInput = new PanInput(flicking.viewport.element, {\n inputType: flicking.inputType,\n iOSEdgeSwipeThreshold: flicking.iOSEdgeSwipeThreshold,\n scale: flicking.horizontal ? [-1, 0] : [0, -1],\n releaseOnScroll: true\n });\n\n const axes = this._axes;\n\n axes.connect(flicking.horizontal ? [AXES.POSITION_KEY, \"\"] : [\"\", AXES.POSITION_KEY], this._panInput);\n\n for (const key in AXES.EVENT) {\n const eventType = AXES.EVENT[key] as keyof AxesEvents;\n\n axes.on(eventType, (e: AxesEvents[typeof eventType]) => {\n this._stateMachine.fire(eventType, {\n flicking,\n axesEvent: e\n });\n });\n }\n\n return this;\n }\n\n /**\n * Destroy AxesController and return to initial state\n * @ko AxesController를 초기 상태로 되돌립니다\n * @return {void}\n */\n public destroy(): void {\n if (this._axes) {\n this.removePreventClickHandler();\n this._axes.destroy();\n }\n\n this._panInput?.destroy();\n\n this._resetInternalValues();\n }\n\n /**\n * Enable input from the user (mouse/touch)\n * @ko 사용자의 입력(마우스/터치)를 활성화합니다\n * @chainable\n * @return {this}\n */\n public enable(): this {\n this._panInput?.enable();\n\n return this;\n }\n\n /**\n * Disable input from the user (mouse/touch)\n * @ko 사용자의 입력(마우스/터치)를 막습니다\n * @chainable\n * @return {this}\n */\n public disable(): this {\n this._panInput?.disable();\n\n return this;\n }\n\n /**\n * Update {@link https://naver.github.io/egjs-axes/ @egjs/axes}'s state\n * @ko {@link https://naver.github.io/egjs-axes/ @egjs/axes}의 상태를 갱신합니다\n * @chainable\n * @throws {FlickingError}\n * {@link ERROR_CODE NOT_ATTACHED_TO_FLICKING} When {@link AxesController#init init} is not called before\n * {@link AxesController#init init}이 이전에 호출되지 않은 경우\n * @return {this}\n */\n public update(controlParams: ControlParams): this {\n const flicking = getFlickingAttached(this._flicking, \"Control\");\n const camera = flicking.camera;\n const axes = this._axes!;\n const axis = axes.axis[AXES.POSITION_KEY];\n\n axis.circular = [controlParams.circular, controlParams.circular];\n axis.range = [controlParams.range.min, controlParams.range.max];\n axis.bounce = parseBounce(flicking.bounce, camera.size);\n\n axes.axm.set({ [AXES.POSITION_KEY]: controlParams.position });\n\n return this;\n }\n\n /**\n * Attach a handler to the camera element to prevent click events during animation\n * @ko 카메라 엘리먼트에 애니메이션 도중에 클릭 이벤트를 방지하는 핸들러를 부착합니다\n * @return {this}\n */\n public addPreventClickHandler(): this {\n const flicking = getFlickingAttached(this._flicking, \"Control\");\n const axes = this._axes!;\n const cameraEl = flicking.camera.element;\n\n axes.on(AXES.EVENT.HOLD, this._onAxesHold);\n axes.on(AXES.EVENT.CHANGE, this._onAxesChange);\n cameraEl.addEventListener(\"click\", this._preventClickWhenDragged, true);\n\n return this;\n }\n\n /**\n * Detach a handler to the camera element to prevent click events during animation\n * @ko 카메라 엘리먼트에 애니메이션 도중에 클릭 이벤트를 방지하는 핸들러를 탈착합니다\n * @return {this}\n */\n public removePreventClickHandler(): this {\n const flicking = getFlickingAttached(this._flicking, \"Control\");\n const axes = this._axes!;\n const cameraEl = flicking.camera.element;\n\n axes.off(AXES.EVENT.HOLD, this._onAxesHold);\n axes.off(AXES.EVENT.CHANGE, this._onAxesChange);\n cameraEl.removeEventListener(\"click\", this._preventClickWhenDragged, true);\n\n return this;\n }\n\n /**\n * Run Axes's {@link https://naver.github.io/egjs-axes/release/latest/doc/eg.Axes.html#setTo setTo} using the given position\n * @ko Axes의 {@link https://naver.github.io/egjs-axes/release/latest/doc/eg.Axes.html#setTo setTo} 메소드를 주어진 좌표를 이용하여 수행합니다\n * @param {number} position A position to move이동할 좌표\n * @param {number} duration Duration of the animation (unit: ms)애니메이션 진행 시간 (단위: ms)\n * @param {number} [axesEvent] If provided, it'll use its {@link https://naver#github#io/egjs-axes/release/latest/doc/eg#Axes#html#setTo setTo} method instead이 값이 주어졌을 경우, 해당 이벤트의 {@link https://naver#github#io/egjs-axes/release/latest/doc/eg#Axes#html#setTo setTo} 메소드를 대신해서 사용합니다.\n * @throws {FlickingError}\n * |code|condition|\n * |---|---|\n * |{@link ERROR_CODE NOT_ATTACHED_TO_FLICKING}|When {@link Control#init init} is not called before|\n * |{@link ERROR_CODE ANIMATION_INTERRUPTED}|When the animation is interrupted by user input|\n * \n *\n * |code|condition|\n * |---|---|\n * |{@link ERROR_CODE NOT_ATTACHED_TO_FLICKING}|{@link Control#init init}이 이전에 호출되지 않은 경우|\n * |{@link ERROR_CODE ANIMATION_INTERRUPTED}|사용자 입력에 의해 애니메이션이 중단된 경우|\n *\n * \n * @return {Promise} A Promise which will be resolved after reaching the target position해당 좌표 도달시에 resolve되는 Promise\n */\n public animateTo(position: number, duration: number, axesEvent?: OnRelease): Promise {\n const axes = this._axes;\n\n if (!axes) {\n return Promise.reject(new FlickingError(ERROR.MESSAGE.NOT_ATTACHED_TO_FLICKING(\"Control\"), ERROR.CODE.NOT_ATTACHED_TO_FLICKING));\n }\n\n const startPos = axes.get([AXES.POSITION_KEY])[AXES.POSITION_KEY];\n\n if (startPos === position) {\n const flicking = getFlickingAttached(this._flicking, \"Control\");\n\n flicking.camera.lookAt(position);\n return Promise.resolve();\n }\n\n this._animatingContext = {\n start: startPos,\n end: position,\n offset: 0\n };\n\n const animate = () => {\n const resetContext = () => {\n this._animatingContext = { start: 0, end: 0, offset: 0 };\n };\n\n axes.once(AXES.EVENT.FINISH, resetContext);\n\n if (axesEvent) {\n axesEvent.setTo({ [AXES.POSITION_KEY]: position }, duration);\n } else {\n axes.setTo({ [AXES.POSITION_KEY]: position }, duration);\n }\n };\n\n if (duration === 0) {\n const flicking = getFlickingAttached(this._flicking, \"Control\");\n const camera = flicking.camera;\n\n animate();\n\n const newPos = flicking.circularEnabled\n ? circulatePosition(position, camera.range.min, camera.range.max)\n : position;\n\n axes.axm.set({ [AXES.POSITION_KEY]: newPos });\n\n return Promise.resolve();\n } else {\n return new Promise((resolve, reject) => {\n const animationFinishHandler = () => {\n axes.off(AXES.EVENT.HOLD, interruptionHandler);\n resolve();\n };\n\n const interruptionHandler = () => {\n axes.off(AXES.EVENT.FINISH, animationFinishHandler);\n reject(new FlickingError(ERROR.MESSAGE.ANIMATION_INTERRUPTED, ERROR.CODE.ANIMATION_INTERRUPTED));\n };\n\n axes.once(AXES.EVENT.FINISH, animationFinishHandler);\n axes.once(AXES.EVENT.HOLD, interruptionHandler);\n\n animate();\n });\n }\n }\n\n private _resetInternalValues() {\n this._flicking = null;\n this._axes = null;\n this._panInput = null;\n this._animatingContext = { start: 0, end: 0, offset: 0 };\n this._dragged = false;\n }\n\n private _onAxesHold = () => {\n this._dragged = false;\n };\n\n private _onAxesChange = () => {\n this._dragged = true;\n };\n\n private _preventClickWhenDragged = (e: MouseEvent) => {\n if (this._dragged) {\n e.preventDefault();\n e.stopPropagation();\n }\n\n this._dragged = false;\n };\n}\n\nexport default AxesController;\n","/*\n * Copyright (c) 2015 NAVER Corp.\n * egjs projects are licensed under the MIT license\n */\nimport { OnRelease } from \"@egjs/axes\";\nimport { ComponentEvent } from \"@egjs/component\";\n\nimport Flicking from \"../Flicking\";\nimport FlickingError from \"../core/FlickingError\";\nimport Panel from \"../core/panel/Panel\";\nimport AxesController from \"../control/AxesController\";\nimport { DIRECTION, EVENTS } from \"../const/external\";\nimport * as ERROR from \"../const/error\";\nimport { getDirection, getFlickingAttached } from \"../utils\";\nimport { ValueOf } from \"../type/internal\";\n\n/**\n * A component that manages inputs and animation of Flicking\n * @ko Flicking의 입력 장치 & 애니메이션을 담당하는 컴포넌트\n */\nabstract class Control {\n // Internal States\n protected _flicking: Flicking | null;\n protected _controller: AxesController;\n protected _activePanel: Panel | null;\n\n /**\n * A controller that handles the {@link https://naver.github.io/egjs-axes/ @egjs/axes} events\n * @ko {@link https://naver.github.io/egjs-axes/ @egjs/axes}의 이벤트를 처리하는 컨트롤러 컴포넌트\n * @type {AxesController}\n * @readonly\n */\n public get controller() { return this._controller; }\n /**\n * Index number of the {@link Flicking#currentPanel currentPanel}\n * @ko {@link Flicking#currentPanel currentPanel}의 인덱스 번호\n * @type {number}\n * @default 0\n * @readonly\n */\n public get activeIndex() { return this._activePanel?.index ?? -1; }\n /**\n * An active panel\n * @ko 현재 선택된 패널\n * @type {Panel | null}\n * @readonly\n */\n public get activePanel() { return this._activePanel; }\n /**\n * Whether Flicking's animating\n * @ko 현재 애니메이션 동작 여부\n * @type {boolean}\n * @readonly\n */\n public get animating() { return this._controller.state.animating; }\n /**\n * Whether user is clicking or touching\n * @ko 현재 사용자가 클릭/터치중인지 여부\n * @type {boolean}\n * @readonly\n */\n public get holding() { return this._controller.state.holding; }\n\n /** */\n public constructor() {\n this._flicking = null;\n this._controller = new AxesController();\n this._activePanel = null;\n }\n\n /**\n * Move {@link Camera} to the given position\n * @ko {@link Camera}를 주어진 좌표로 이동합니다\n * @method\n * @abstract\n * @memberof Control\n * @instance\n * @name moveToPosition\n * @param {number} position The target position to move이동할 좌표\n * @param {number} duration Duration of the panel movement animation (unit: ms).패널 이동 애니메이션 진행 시간 (단위: ms)\n * @param {object} [axesEvent] {@link https://naver.github.io/egjs-axes/release/latest/doc/eg.Axes.html#event:release release} event of {@link https://naver.github.io/egjs-axes/ Axes}\n * {@link https://naver.github.io/egjs-axes/ Axes}의 {@link https://naver.github.io/egjs-axes/release/latest/doc/eg.Axes.html#event:release release} 이벤트\n * @fires Flicking#moveStart\n * @fires Flicking#move\n * @fires Flicking#moveEnd\n * @fires Flicking#willChange\n * @fires Flicking#changed\n * @fires Flicking#willRestore\n * @fires Flicking#restored\n * @fires Flicking#needPanel\n * @fires Flicking#visibleChange\n * @fires Flicking#reachEdge\n * @throws {FlickingError}\n * |code|condition|\n * |---|---|\n * |{@link ERROR_CODE POSITION_NOT_REACHABLE}|When the given panel is already removed or not in the Camera's {@link Camera#range range}|\n * |{@link ERROR_CODE NOT_ATTACHED_TO_FLICKING}|When {@link Control#init init} is not called before|\n * |{@link ERROR_CODE ANIMATION_INTERRUPTED}|When the animation is interrupted by user input|\n * |{@link ERROR_CODE STOP_CALLED_BY_USER}|When the animation is interrupted by user input|\n * \n *\n * |code|condition|\n * |---|---|\n * |{@link ERROR_CODE POSITION_NOT_REACHABLE}|주어진 패널이 제거되었거나, Camera의 {@link Camera#range range} 밖에 있을 경우|\n * |{@link ERROR_CODE NOT_ATTACHED_TO_FLICKING}|{@link Control#init init}이 이전에 호출되지 않은 경우|\n * |{@link ERROR_CODE ANIMATION_INTERRUPTED}|사용자 입력에 의해 애니메이션이 중단된 경우|\n * |{@link ERROR_CODE STOP_CALLED_BY_USER}|발생된 이벤트들 중 하나라도 `stop()`이 호출된 경우|\n *\n * \n * @return {Promise} A Promise which will be resolved after reaching the target position해당 좌표 도달시에 resolve되는 Promise\n */\n public abstract moveToPosition(position: number, duration: number, axesEvent?: OnRelease): Promise;\n\n /**\n * Initialize Control\n * @ko Control을 초기화합니다\n * @param {Flicking} flicking An instance of {@link Flicking}Flicking의 인스턴스\n * @chainable\n * @return {this}\n */\n public init(flicking: Flicking): this {\n this._flicking = flicking;\n this._controller.init(flicking);\n\n return this;\n }\n\n /**\n * Destroy Control and return to initial state\n * @ko Control을 초기 상태로 되돌립니다\n * @return {void}\n */\n public destroy(): void {\n this._controller.destroy();\n\n this._flicking = null;\n this._activePanel = null;\n }\n\n /**\n * Enable input from the user (mouse/touch)\n * @ko 사용자의 입력(마우스/터치)를 활성화합니다\n * @chainable\n * @return {this}\n */\n public enable(): this {\n this._controller.enable();\n\n return this;\n }\n\n /**\n * Disable input from the user (mouse/touch)\n * @ko 사용자의 입력(마우스/터치)를 막습니다\n * @chainable\n * @return {this}\n */\n public disable(): this {\n this._controller.disable();\n\n return this;\n }\n\n /**\n * Update position after resizing\n * @ko resize 이후에 position을 업데이트합니다\n * @param {number} progressInPanel Previous camera's progress in active panel before resizeResize 이전 현재 선택된 패널 내에서의 카메라 progress 값\n * @throws {FlickingError}\n * {@link ERROR_CODE NOT_ATTACHED_TO_FLICKING} When {@link Camera#init init} is not called before\n * {@link ERROR_CODE NOT_ATTACHED_TO_FLICKING} {@link Camera#init init}이 이전에 호출되지 않은 경우\n * @chainable\n * @return {Promise}\n */\n public updatePosition(_progressInPanel: number): void { // eslint-disable-line @typescript-eslint/no-unused-vars\n const flicking = getFlickingAttached(this._flicking, \"Control\");\n const camera = flicking.camera;\n const activePanel = this._activePanel;\n\n if (activePanel) {\n camera.lookAt(camera.clampToReachablePosition(activePanel.position));\n }\n }\n\n /**\n * Update {@link Control#controller controller}'s state\n * @ko {@link Control#controller controller}의 내부 상태를 갱신합니다\n * @chainable\n * @return {this}\n */\n public updateInput(): this {\n const flicking = getFlickingAttached(this._flicking, \"Control\");\n const camera = flicking.camera;\n\n this._controller.update(camera.controlParams);\n\n return this;\n }\n\n /**\n * Reset {@link Control#activePanel activePanel} to `null`\n * @ko {@link Control#activePanel activePanel}을 `null`로 초기화합니다\n * @chainable\n * @return {this}\n */\n public resetActive(): this {\n this._activePanel = null;\n\n return this;\n }\n\n /**\n * Move {@link Camera} to the given panel\n * @ko {@link Camera}를 해당 패널 위로 이동합니다\n * @param {Panel} panel The target panel to move이동할 패널\n * @param {object} options An options object옵션 오브젝트\n * @param {number} duration Duration of the animation (unit: ms)애니메이션 진행 시간 (단위: ms)\n * @param {object} [axesEvent] {@link https://naver.github.io/egjs-axes/release/latest/doc/eg.Axes.html#event:release release} event of {@link https://naver.github.io/egjs-axes/ Axes}\n * {@link https://naver.github.io/egjs-axes/ Axes}의 {@link https://naver.github.io/egjs-axes/release/latest/doc/eg.Axes.html#event:release release} 이벤트\n * @param {DIRECTION} [direction=DIRECTION.NONE] Direction to move, only available in the {@link Flicking#circular circular} mode이동할 방향. {@link Flicking#circular circular} 옵션 활성화시에만 사용 가능합니다\n * @fires Flicking#moveStart\n * @fires Flicking#move\n * @fires Flicking#moveEnd\n * @fires Flicking#willChange\n * @fires Flicking#changed\n * @fires Flicking#willRestore\n * @fires Flicking#restored\n * @fires Flicking#needPanel\n * @fires Flicking#visibleChange\n * @fires Flicking#reachEdge\n * @throws {FlickingError}\n * |code|condition|\n * |---|---|\n * |{@link ERROR_CODE POSITION_NOT_REACHABLE}|When the given panel is already removed or not in the Camera's {@link Camera#range range}|\n * |{@link ERROR_CODE NOT_ATTACHED_TO_FLICKING}|When {@link Control#init init} is not called before|\n * |{@link ERROR_CODE ANIMATION_INTERRUPTED}|When the animation is interrupted by user input|\n * |{@link ERROR_CODE STOP_CALLED_BY_USER}|When the animation is interrupted by user input|\n * \n *\n * |code|condition|\n * |---|---|\n * |{@link ERROR_CODE POSITION_NOT_REACHABLE}|주어진 패널이 제거되었거나, Camera의 {@link Camera#range range} 밖에 있을 경우|\n * |{@link ERROR_CODE NOT_ATTACHED_TO_FLICKING}|{@link Control#init init}이 이전에 호출되지 않은 경우|\n * |{@link ERROR_CODE ANIMATION_INTERRUPTED}|사용자 입력에 의해 애니메이션이 중단된 경우|\n * |{@link ERROR_CODE STOP_CALLED_BY_USER}|발생된 이벤트들 중 하나라도 `stop()`이 호출된 경우|\n *\n * \n * @return {Promise} A Promise which will be resolved after reaching the target panel해당 패널 도달시에 resolve되는 Promise\n */\n public async moveToPanel(panel: Panel, {\n duration,\n direction = DIRECTION.NONE,\n axesEvent\n }: {\n duration: number;\n direction?: ValueOf;\n axesEvent?: OnRelease;\n }) {\n const flicking = getFlickingAttached(this._flicking, \"Control\");\n const camera = flicking.camera;\n\n let position = panel.position;\n const nearestAnchor = camera.findNearestAnchor(position);\n\n if (panel.removed || !nearestAnchor) {\n return Promise.reject(new FlickingError(ERROR.MESSAGE.POSITION_NOT_REACHABLE(panel.position), ERROR.CODE.POSITION_NOT_REACHABLE));\n }\n if (!camera.canReach(panel)) {\n // Override position & panel if that panel is not reachable\n position = nearestAnchor.position;\n panel = nearestAnchor.panel;\n } else if (flicking.circularEnabled) {\n // Circular mode is enabled, find nearest distance to panel\n const camPos = this._controller.position; // Actual position of the Axes\n const camRangeDiff = camera.rangeDiff;\n const possiblePositions = [position, position + camRangeDiff, position - camRangeDiff]\n .filter(pos => {\n if (direction === DIRECTION.NONE) return true;\n\n return direction === DIRECTION.PREV\n ? pos <= camPos\n : pos >= camPos;\n });\n\n position = possiblePositions.reduce((nearestPosition, pos) => {\n if (Math.abs(camPos - pos) < Math.abs(camPos - nearestPosition)) {\n return pos;\n } else {\n return nearestPosition;\n }\n }, Infinity);\n }\n\n this._triggerIndexChangeEvent(panel, panel.position, axesEvent);\n\n return this._animateToPosition({ position, duration, newActivePanel: panel, axesEvent });\n }\n\n /**\n * @internal\n */\n public setActive(newActivePanel: Panel, prevActivePanel: Panel | null, isTrusted: boolean) {\n const flicking = getFlickingAttached(this._flicking, \"Control\");\n\n this._activePanel = newActivePanel;\n\n flicking.camera.updateAdaptiveHeight();\n\n if (newActivePanel !== prevActivePanel) {\n flicking.trigger(new ComponentEvent(EVENTS.CHANGED, {\n index: newActivePanel.index,\n panel: newActivePanel,\n prevIndex: prevActivePanel?.index ?? -1,\n prevPanel: prevActivePanel,\n isTrusted,\n direction: prevActivePanel ? getDirection(prevActivePanel.position, newActivePanel.position) : DIRECTION.NONE\n }));\n } else {\n flicking.trigger(new ComponentEvent(EVENTS.RESTORED, {\n isTrusted\n }));\n }\n }\n\n protected _triggerIndexChangeEvent(panel: Panel, position: number, axesEvent?: OnRelease): void {\n const flicking = getFlickingAttached(this._flicking, \"Control\");\n const triggeringEvent = panel !== this._activePanel ? EVENTS.WILL_CHANGE : EVENTS.WILL_RESTORE;\n const camera = flicking.camera;\n const activePanel = this._activePanel;\n\n const event = new ComponentEvent(triggeringEvent, {\n index: panel.index,\n panel,\n isTrusted: axesEvent?.isTrusted || false,\n direction: getDirection(activePanel?.position ?? camera.position, position)\n });\n flicking.trigger(event);\n\n if (event.isCanceled()) {\n throw new FlickingError(ERROR.MESSAGE.STOP_CALLED_BY_USER, ERROR.CODE.STOP_CALLED_BY_USER);\n }\n }\n\n protected async _animateToPosition({\n position,\n duration,\n newActivePanel,\n axesEvent\n }: {\n position: number;\n duration: number;\n newActivePanel: Panel;\n axesEvent?: OnRelease;\n }) {\n const flicking = getFlickingAttached(this._flicking, \"Control\");\n const animate = () => this._controller.animateTo(position, duration, axesEvent);\n const state = this._controller.state;\n\n state.targetPanel = newActivePanel;\n\n if (duration <= 0) {\n return animate();\n } else {\n return animate().then(async () => {\n await flicking.renderer.render();\n }).catch(err => {\n if (axesEvent && err instanceof FlickingError && err.code === ERROR.CODE.ANIMATION_INTERRUPTED) return;\n throw err;\n });\n }\n }\n}\n\nexport default Control;\n","/*\n * Copyright (c) 2015 NAVER Corp.\n * egjs projects are licensed under the MIT license\n */\nimport Panel from \"./panel/Panel\";\n\n/**\n * A data component that has actual position where the camera should be stopped at\n * @ko 카메라가 정지해야하는 실제 위치를 담고 있는 데이터 컴포넌트\n */\nclass AnchorPoint {\n private _index: number;\n private _pos: number;\n private _panel: Panel;\n\n /**\n * Index of AnchorPoint\n * @ko AnchorPoint의 인덱스\n * @type {number}\n * @readonly\n */\n public get index() { return this._index; }\n /**\n * Position of AnchorPoint\n * @ko AnchorPoint의 좌표\n * @type {number}\n * @readonly\n */\n public get position() { return this._pos; }\n /**\n * A {@link Panel} instance AnchorPoint is referencing to\n * @ko AnchorPoint가 참조하고 있는 {@link Panel}\n * @type {Panel}\n * @readonly\n */\n public get panel() { return this._panel; }\n\n /**\n * @param {object} options An options object옵션 객체\n * @param {number} [options.index] Index of AnchorPointAnchorPoint의 인덱스\n * @param {number} [options.position] Position of AnchorPointAnchorPoint의 좌표\n * @param {Panel} [options.panel] A {@link Panel} instance AnchorPoint is referencing toAnchorPoint가 참조하고 있는 {@link Panel}\n */\n public constructor({\n index,\n position,\n panel\n }: {\n index: number;\n position: number;\n panel: Panel;\n }) {\n this._index = index;\n this._pos = position;\n this._panel = panel;\n }\n}\n\nexport default AnchorPoint;\n","/*\n * Copyright (c) 2015 NAVER Corp.\n * egjs projects are licensed under the MIT license\n */\nimport { OnRelease } from \"@egjs/axes\";\n\nimport FlickingError from \"../core/FlickingError\";\nimport AnchorPoint from \"../core/AnchorPoint\";\nimport { circulateIndex, clamp, getFlickingAttached } from \"../utils\";\nimport * as AXES from \"../const/axes\";\nimport * as ERROR from \"../const/error\";\n\nimport Control from \"./Control\";\n\n/**\n * An options for the {@link SnapControl}\n * @ko {@link SnapControl} 생성시 사용되는 옵션\n * @interface\n * @property {number} count Maximum number of panels can go after release입력 중단 이후 통과하여 이동할 수 있는 패널의 최대 갯수\n */\nexport interface SnapControlOptions {\n count: number;\n}\n\n/**\n * A {@link Control} that uses a release momentum to choose destination panel\n * @ko 입력을 중단한 시점의 가속도에 영향받아 도달할 패널을 계산하는 이동 방식을 사용하는 {@link Control}\n */\nclass SnapControl extends Control {\n private _count: SnapControlOptions[\"count\"];\n\n /**\n * Maximum number of panels can go after release\n * @ko 입력 중단 이후 통과하여 이동할 수 있는 패널의 최대 갯수\n * @type {number}\n * @default Infinity\n */\n public get count() { return this._count; }\n\n public set count(val: SnapControlOptions[\"count\"]) { this._count = val; }\n\n /** */\n public constructor({\n count = Infinity\n }: Partial = {}) {\n super();\n\n this._count = count;\n }\n\n /**\n * Move {@link Camera} to the given position\n * @ko {@link Camera}를 주어진 좌표로 이동합니다\n * @param {number} position The target position to move이동할 좌표\n * @param {number} duration Duration of the panel movement animation (unit: ms).패널 이동 애니메이션 진행 시간 (단위: ms)\n * @param {object} [axesEvent] {@link https://naver.github.io/egjs-axes/release/latest/doc/eg.Axes.html#event:release release} event of {@link https://naver.github.io/egjs-axes/ Axes}\n * {@link https://naver.github.io/egjs-axes/ Axes}의 {@link https://naver.github.io/egjs-axes/release/latest/doc/eg.Axes.html#event:release release} 이벤트\n * @fires Flicking#moveStart\n * @fires Flicking#move\n * @fires Flicking#moveEnd\n * @fires Flicking#willChange\n * @fires Flicking#changed\n * @fires Flicking#willRestore\n * @fires Flicking#restored\n * @fires Flicking#needPanel\n * @fires Flicking#visibleChange\n * @fires Flicking#reachEdge\n * @throws {FlickingError}\n * |code|condition|\n * |---|---|\n * |{@link ERROR_CODE POSITION_NOT_REACHABLE}|When the given panel is already removed or not in the Camera's {@link Camera#range range}|\n * |{@link ERROR_CODE NOT_ATTACHED_TO_FLICKING}|When {@link Control#init init} is not called before|\n * |{@link ERROR_CODE ANIMATION_INTERRUPTED}|When the animation is interrupted by user input|\n * |{@link ERROR_CODE STOP_CALLED_BY_USER}|When the animation is interrupted by user input|\n * \n *\n * |code|condition|\n * |---|---|\n * |{@link ERROR_CODE POSITION_NOT_REACHABLE}|주어진 패널이 제거되었거나, Camera의 {@link Camera#range range} 밖에 있을 경우|\n * |{@link ERROR_CODE NOT_ATTACHED_TO_FLICKING}|{@link Control#init init}이 이전에 호출되지 않은 경우|\n * |{@link ERROR_CODE ANIMATION_INTERRUPTED}|사용자 입력에 의해 애니메이션이 중단된 경우|\n * |{@link ERROR_CODE STOP_CALLED_BY_USER}|발생된 이벤트들 중 하나라도 `stop()`이 호출된 경우|\n *\n * \n * @return {Promise} A Promise which will be resolved after reaching the target position해당 좌표 도달시에 resolve되는 Promise\n */\n public async moveToPosition(position: number, duration: number, axesEvent?: OnRelease) {\n const flicking = getFlickingAttached(this._flicking, \"Control\");\n const camera = flicking.camera;\n const activeAnchor = camera.findActiveAnchor();\n const anchorAtCamera = camera.findNearestAnchor(camera.position);\n const state = flicking.control.controller.state;\n\n if (!activeAnchor || !anchorAtCamera) {\n return Promise.reject(new FlickingError(ERROR.MESSAGE.POSITION_NOT_REACHABLE(position), ERROR.CODE.POSITION_NOT_REACHABLE));\n }\n\n const snapThreshold = this._calcSnapThreshold(position, activeAnchor);\n\n const posDelta = flicking.animating\n ? state.delta\n : position - camera.position;\n const absPosDelta = Math.abs(posDelta);\n const snapDelta = axesEvent && axesEvent.delta[AXES.POSITION_KEY] !== 0\n ? Math.abs(axesEvent.delta[AXES.POSITION_KEY])\n : absPosDelta;\n let targetAnchor: AnchorPoint;\n\n if (snapDelta >= snapThreshold && snapDelta > 0) {\n // Move to anchor at position\n targetAnchor = this._findSnappedAnchor(position, anchorAtCamera);\n } else if (absPosDelta >= flicking.threshold && absPosDelta > 0) {\n // Move to the adjacent panel\n targetAnchor = this._findAdjacentAnchor(posDelta, anchorAtCamera);\n } else {\n // Restore to active panel\n targetAnchor = anchorAtCamera;\n }\n\n this._triggerIndexChangeEvent(targetAnchor.panel, position, axesEvent);\n\n return this._animateToPosition({\n position: camera.clampToReachablePosition(targetAnchor.position),\n duration,\n newActivePanel: targetAnchor.panel,\n axesEvent\n });\n }\n\n private _findSnappedAnchor(position: number, anchorAtCamera: AnchorPoint): AnchorPoint {\n const flicking = getFlickingAttached(this._flicking, \"Control\");\n const camera = flicking.camera;\n const count = this._count;\n\n const currentPos = camera.position;\n\n const clampedPosition = camera.clampToReachablePosition(position);\n const anchorAtPosition = camera.findAnchorIncludePosition(clampedPosition);\n\n if (!anchorAtCamera || !anchorAtPosition) {\n throw new FlickingError(ERROR.MESSAGE.POSITION_NOT_REACHABLE(position), ERROR.CODE.POSITION_NOT_REACHABLE);\n }\n\n if (!isFinite(count)) {\n return anchorAtPosition;\n }\n\n const panelCount = flicking.panelCount;\n const anchors = camera.anchorPoints;\n\n let loopCount = Math.sign(position - currentPos) * Math.floor(Math.abs(position - currentPos) / camera.rangeDiff);\n if ((position > currentPos && anchorAtPosition.index < anchorAtCamera.index)\n || (anchorAtPosition.position > anchorAtCamera.position && anchorAtPosition.index === anchorAtCamera.index)) {\n loopCount += 1;\n } else if ((position < currentPos && anchorAtPosition.index > anchorAtCamera.index)\n || (anchorAtPosition.position < anchorAtCamera.position && anchorAtPosition.index === anchorAtCamera.index)) {\n loopCount -= 1;\n }\n\n const circularIndexOffset = loopCount * panelCount;\n const anchorAtPositionIndex = anchorAtPosition.index + circularIndexOffset;\n\n if (Math.abs(anchorAtPositionIndex - anchorAtCamera.index) <= count) {\n const anchor = anchors[anchorAtPosition.index];\n\n return new AnchorPoint({\n index: anchor.index,\n position: anchor.position + loopCount * camera.rangeDiff,\n panel: anchor.panel\n });\n }\n\n if (flicking.circularEnabled) {\n const targetAnchor = anchors[circulateIndex(anchorAtCamera.index + Math.sign(position - currentPos) * count, panelCount)];\n let loop = Math.floor(count / panelCount);\n\n if (position > currentPos && targetAnchor.index < anchorAtCamera.index) {\n loop += 1;\n } else if (position < currentPos && targetAnchor.index > anchorAtCamera.index) {\n loop -= 1;\n }\n\n return new AnchorPoint({\n index: targetAnchor.index,\n position: targetAnchor.position + loop * camera.rangeDiff,\n panel: targetAnchor.panel\n });\n } else {\n return anchors[clamp(anchorAtCamera.index + Math.sign(position - currentPos) * count, 0, anchors.length - 1)];\n }\n }\n\n private _findAdjacentAnchor(posDelta: number, anchorAtCamera: AnchorPoint): AnchorPoint {\n const flicking = getFlickingAttached(this._flicking, \"Control\");\n const camera = flicking.camera;\n const adjacentAnchor = (posDelta > 0 ? camera.getNextAnchor(anchorAtCamera) : camera.getPrevAnchor(anchorAtCamera)) ?? anchorAtCamera;\n\n return adjacentAnchor;\n }\n\n private _calcSnapThreshold(position: number, activeAnchor: AnchorPoint): number {\n const isNextDirection = position > activeAnchor.position;\n const panel = activeAnchor.panel;\n const panelSize = panel.size;\n const alignPos = panel.alignPosition;\n\n // Minimum distance needed to decide prev/next panel as nearest\n /*\n * | Prev | Next |\n * |<------>|<------------>|\n * [ |<-Anchor ]\n */\n return isNextDirection\n ? panelSize - alignPos + panel.margin.next\n : alignPos + panel.margin.prev;\n }\n}\n\nexport default SnapControl;\n","/*\n * Copyright (c) 2015 NAVER Corp.\n * egjs projects are licensed under the MIT license\n */\nimport { OnRelease } from \"@egjs/axes\";\n\nimport FlickingError from \"../core/FlickingError\";\nimport * as ERROR from \"../const/error\";\nimport { getFlickingAttached } from \"../utils\";\n\nimport Control from \"./Control\";\n\n/**\n * An options for the {@link FreeControl}\n * @ko {@link FreeControl} 생성시 사용되는 옵션\n * @interface\n * @property {boolean} stopAtEdge Make scroll animation to stop at the start/end of the scroll area, not going out the bounce area\n * 스크롤 애니메이션을 스크롤 영역의 시작과 끝부분에서 멈추도록 하여, 바운스 영역을 넘어가지 않도록 합니다\n */\nexport interface FreeControlOptions {\n stopAtEdge: boolean;\n}\n\n/**\n * A {@link Control} that can be scrolled freely without alignment\n * @ko 패널이 정해진 지점에 정렬되지 않고, 자유롭게 스크롤할 수 있는 이동 방식을 사용하는 {@link Control}\n */\nclass FreeControl extends Control {\n private _stopAtEdge: FreeControlOptions[\"stopAtEdge\"];\n\n /**\n * Make scroll animation to stop at the start/end of the scroll area, not going out the bounce area\n * @ko 스크롤 애니메이션을 스크롤 영역의 시작과 끝부분에서 멈추도록 하여, 바운스 영역을 넘어가지 않도록 합니다\n * @type {boolean}\n * @default true\n */\n public get stopAtEdge() { return this._stopAtEdge; }\n\n public set stopAtEdge(val: FreeControlOptions[\"stopAtEdge\"]) { this._stopAtEdge = val; }\n\n /** */\n public constructor({\n stopAtEdge = true\n }: Partial = {}) {\n super();\n\n this._stopAtEdge = stopAtEdge;\n }\n\n /**\n * Update position after resizing\n * @ko resize 이후에 position을 업데이트합니다\n * @param {number} progressInPanel Previous camera's progress in active panel before resizeResize 이전 현재 선택된 패널 내에서의 카메라 progress 값\n * @throws {FlickingError}\n * {@link ERROR_CODE NOT_ATTACHED_TO_FLICKING} When {@link Camera#init init} is not called before\n * {@link ERROR_CODE NOT_ATTACHED_TO_FLICKING} {@link Camera#init init}이 이전에 호출되지 않은 경우\n * @chainable\n * @return {Promise}\n */\n public updatePosition(progressInPanel: number): void {\n const flicking = getFlickingAttached(this._flicking, \"Control\");\n const camera = flicking.camera;\n const activePanel = this._activePanel;\n\n if (activePanel) {\n const panelRange = activePanel.range;\n const newPosition = panelRange.min + (panelRange.max - panelRange.min) * progressInPanel;\n\n camera.lookAt(camera.clampToReachablePosition(newPosition));\n }\n }\n\n /**\n * Move {@link Camera} to the given position\n * @ko {@link Camera}를 주어진 좌표로 이동합니다\n * @param {number} position The target position to move이동할 좌표\n * @param {number} duration Duration of the panel movement animation (unit: ms).패널 이동 애니메이션 진행 시간 (단위: ms)\n * @param {object} [axesEvent] {@link https://naver.github.io/egjs-axes/release/latest/doc/eg.Axes.html#event:release release} event of {@link https://naver.github.io/egjs-axes/ Axes}\n * {@link https://naver.github.io/egjs-axes/ Axes}의 {@link https://naver.github.io/egjs-axes/release/latest/doc/eg.Axes.html#event:release release} 이벤트\n * @fires Flicking#moveStart\n * @fires Flicking#move\n * @fires Flicking#moveEnd\n * @fires Flicking#willChange\n * @fires Flicking#changed\n * @fires Flicking#willRestore\n * @fires Flicking#restored\n * @fires Flicking#needPanel\n * @fires Flicking#visibleChange\n * @fires Flicking#reachEdge\n * @throws {FlickingError}\n * |code|condition|\n * |---|---|\n * |{@link ERROR_CODE POSITION_NOT_REACHABLE}|When the given panel is already removed or not in the Camera's {@link Camera#range range}|\n * |{@link ERROR_CODE NOT_ATTACHED_TO_FLICKING}|When {@link Control#init init} is not called before|\n * |{@link ERROR_CODE ANIMATION_INTERRUPTED}|When the animation is interrupted by user input|\n * |{@link ERROR_CODE STOP_CALLED_BY_USER}|When the animation is interrupted by user input|\n * \n *\n * |code|condition|\n * |---|---|\n * |{@link ERROR_CODE POSITION_NOT_REACHABLE}|주어진 패널이 제거되었거나, Camera의 {@link Camera#range range} 밖에 있을 경우|\n * |{@link ERROR_CODE NOT_ATTACHED_TO_FLICKING}|{@link Control#init init}이 이전에 호출되지 않은 경우|\n * |{@link ERROR_CODE ANIMATION_INTERRUPTED}|사용자 입력에 의해 애니메이션이 중단된 경우|\n * |{@link ERROR_CODE STOP_CALLED_BY_USER}|발생된 이벤트들 중 하나라도 `stop()`이 호출된 경우|\n *\n * \n * @return {Promise} A Promise which will be resolved after reaching the target position해당 좌표 도달시에 resolve되는 Promise\n */\n public async moveToPosition(position: number, duration: number, axesEvent?: OnRelease) {\n const flicking = getFlickingAttached(this._flicking, \"Control\");\n\n const camera = flicking.camera;\n const targetPos = camera.clampToReachablePosition(position);\n\n const anchorAtPosition = camera.findAnchorIncludePosition(targetPos);\n\n if (!anchorAtPosition) {\n return Promise.reject(new FlickingError(ERROR.MESSAGE.POSITION_NOT_REACHABLE(position), ERROR.CODE.POSITION_NOT_REACHABLE));\n }\n\n const targetPanel = anchorAtPosition.panel;\n\n // Trigger only change event\n if (targetPanel !== this._activePanel) {\n this._triggerIndexChangeEvent(targetPanel, position, axesEvent);\n }\n\n return this._animateToPosition({ position: this._stopAtEdge ? targetPos : position, duration, newActivePanel: targetPanel, axesEvent });\n }\n}\n\nexport default FreeControl;\n","/*\n * Copyright (c) 2015 NAVER Corp.\n * egjs projects are licensed under the MIT license\n */\nimport { OnRelease } from \"@egjs/axes\";\n\nimport Panel from \"../core/panel/Panel\";\nimport FlickingError from \"../core/FlickingError\";\nimport { clamp, getFlickingAttached, getMinusCompensatedIndex, isBetween } from \"../utils\";\nimport * as ERROR from \"../const/error\";\n\nimport Control from \"./Control\";\n/**\n * An options for the {@link StrictControl}\n * @ko {@link StrictControl} 생성시 사용되는 옵션\n * @interface\n * @property {number} count Maximum number of panels that can be moved at a time최대로 움직일 수 있는 패널의 개수\n */\nexport interface StrictControlOptions {\n count: number;\n}\n\n/**\n * A {@link Control} that allow you to select the maximum number of panels to move at a time\n * @ko 한번에 최대로 이동할 패널의 개수를 선택 가능한 {@link Control}\n */\nclass StrictControl extends Control {\n private _count: number;\n private _indexRange: { min: number; max: number };\n\n /**\n * Maximum number of panels that can be moved at a time\n * @ko 최대로 움직일 수 있는 패널의 개수\n * @type {number}\n * @default 1\n */\n public get count() { return this._count; }\n\n public set count(val: StrictControlOptions[\"count\"]) { this._count = val; }\n\n /** */\n public constructor({\n count = 1\n }: Partial = {}) {\n super();\n\n this._count = count;\n this._resetIndexRange();\n }\n\n /**\n * Destroy Control and return to initial state\n * @ko Control을 초기 상태로 되돌립니다\n * @return {void}\n */\n public destroy() {\n super.destroy();\n\n this._resetIndexRange();\n }\n\n /**\n * Update {@link Control#controller controller}'s state\n * @ko {@link Control#controller controller}의 내부 상태를 갱신합니다\n * @chainable\n * @return {this}\n */\n public updateInput(): this {\n const flicking = getFlickingAttached(this._flicking, \"Control\");\n const camera = flicking.camera;\n const renderer = flicking.renderer;\n const controller = this._controller;\n const controlParams = camera.controlParams;\n const count = this._count;\n\n const activePanel = controller.state.animating\n ? camera.findNearestAnchor(camera.position)?.panel\n : this._activePanel;\n\n if (!activePanel) {\n controller.update(controlParams);\n this._resetIndexRange();\n return this;\n }\n\n const cameraRange = controlParams.range;\n const currentPos = activePanel.position;\n const currentIndex = activePanel.index;\n const panelCount = renderer.panelCount;\n\n let prevPanelIndex = currentIndex - count;\n let nextPanelIndex = currentIndex + count;\n\n if (prevPanelIndex < 0) {\n prevPanelIndex = flicking.circularEnabled\n ? getMinusCompensatedIndex((prevPanelIndex + 1) % panelCount - 1, panelCount)\n : clamp(prevPanelIndex, 0, panelCount - 1);\n }\n if (nextPanelIndex >= panelCount) {\n nextPanelIndex = flicking.circularEnabled\n ? nextPanelIndex % panelCount\n : clamp(nextPanelIndex, 0, panelCount - 1);\n }\n\n const prevPanel = renderer.panels[prevPanelIndex];\n const nextPanel = renderer.panels[nextPanelIndex];\n\n let prevPos = Math.max(prevPanel.position, cameraRange.min);\n let nextPos = Math.min(nextPanel.position, cameraRange.max);\n\n if (prevPos > currentPos) {\n prevPos -= camera.rangeDiff;\n }\n if (nextPos < currentPos) {\n nextPos += camera.rangeDiff;\n }\n\n controlParams.range = {\n min: prevPos,\n max: nextPos\n };\n\n if (controlParams.circular) {\n if (controlParams.position < prevPos) {\n controlParams.position += camera.rangeDiff;\n }\n\n if (controlParams.position > nextPos) {\n controlParams.position -= camera.rangeDiff;\n }\n }\n\n controlParams.circular = false;\n controller.update(controlParams);\n\n this._indexRange = {\n min: prevPanel.index,\n max: nextPanel.index\n };\n\n return this;\n }\n\n /**\n * Move {@link Camera} to the given position\n * @ko {@link Camera}를 주어진 좌표로 이동합니다\n * @param {number} position The target position to move이동할 좌표\n * @param {number} duration Duration of the panel movement animation (unit: ms).패널 이동 애니메이션 진행 시간 (단위: ms)\n * @param {object} [axesEvent] {@link https://naver.github.io/egjs-axes/release/latest/doc/eg.Axes.html#event:release release} event of {@link https://naver.github.io/egjs-axes/ Axes}\n * {@link https://naver.github.io/egjs-axes/ Axes}의 {@link https://naver.github.io/egjs-axes/release/latest/doc/eg.Axes.html#event:release release} 이벤트\n * @fires Flicking#moveStart\n * @fires Flicking#move\n * @fires Flicking#moveEnd\n * @fires Flicking#willChange\n * @fires Flicking#changed\n * @fires Flicking#willRestore\n * @fires Flicking#restored\n * @fires Flicking#needPanel\n * @fires Flicking#visibleChange\n * @fires Flicking#reachEdge\n * @throws {FlickingError}\n * |code|condition|\n * |---|---|\n * |{@link ERROR_CODE POSITION_NOT_REACHABLE}|When the given panel is already removed or not in the Camera's {@link Camera#range range}|\n * |{@link ERROR_CODE NOT_ATTACHED_TO_FLICKING}|When {@link Control#init init} is not called before|\n * |{@link ERROR_CODE ANIMATION_INTERRUPTED}|When the animation is interrupted by user input|\n * |{@link ERROR_CODE STOP_CALLED_BY_USER}|When the animation is interrupted by user input|\n * \n *\n * |code|condition|\n * |---|---|\n * |{@link ERROR_CODE POSITION_NOT_REACHABLE}|주어진 패널이 제거되었거나, Camera의 {@link Camera#range range} 밖에 있을 경우|\n * |{@link ERROR_CODE NOT_ATTACHED_TO_FLICKING}|{@link Control#init init}이 이전에 호출되지 않은 경우|\n * |{@link ERROR_CODE ANIMATION_INTERRUPTED}|사용자 입력에 의해 애니메이션이 중단된 경우|\n * |{@link ERROR_CODE STOP_CALLED_BY_USER}|발생된 이벤트들 중 하나라도 `stop()`이 호출된 경우|\n *\n * \n * @return {Promise} A Promise which will be resolved after reaching the target position해당 좌표 도달시에 resolve되는 Promise\n */\n public async moveToPosition(position: number, duration: number, axesEvent?: OnRelease) {\n const flicking = getFlickingAttached(this._flicking, \"Control\");\n const camera = flicking.camera;\n const activePanel = this._activePanel;\n const axesRange = this._controller.range;\n const indexRange = this._indexRange;\n const cameraRange = camera.range;\n\n const clampedPosition = clamp(camera.clampToReachablePosition(position), axesRange[0], axesRange[1]);\n const anchorAtPosition = camera.findAnchorIncludePosition(clampedPosition);\n\n if (!anchorAtPosition || !activePanel) {\n return Promise.reject(new FlickingError(ERROR.MESSAGE.POSITION_NOT_REACHABLE(position), ERROR.CODE.POSITION_NOT_REACHABLE));\n }\n\n const prevPos = activePanel.position;\n\n const isOverThreshold = Math.abs(position - prevPos) >= flicking.threshold;\n const adjacentAnchor = (position > prevPos)\n ? camera.getNextAnchor(anchorAtPosition)\n : camera.getPrevAnchor(anchorAtPosition);\n\n let targetPos: number;\n let targetPanel: Panel;\n\n const anchors = camera.anchorPoints;\n const firstAnchor = anchors[0];\n const lastAnchor = anchors[anchors.length - 1];\n\n const shouldBounceToFirst = position <= cameraRange.min && isBetween(firstAnchor.panel.index, indexRange.min, indexRange.max);\n const shouldBounceToLast = position >= cameraRange.max && isBetween(lastAnchor.panel.index, indexRange.min, indexRange.max);\n\n if (shouldBounceToFirst || shouldBounceToLast) {\n // In bounce area\n const targetAnchor = position < cameraRange.min ? firstAnchor : lastAnchor;\n\n targetPanel = targetAnchor.panel;\n targetPos = targetAnchor.position;\n } else if (isOverThreshold && anchorAtPosition.position !== activePanel.position) {\n // Move to anchor at position\n targetPanel = anchorAtPosition.panel;\n targetPos = anchorAtPosition.position;\n } else if (isOverThreshold && adjacentAnchor && isBetween(adjacentAnchor.index, indexRange.min, indexRange.max)) {\n // Move to adjacent anchor\n targetPanel = adjacentAnchor.panel;\n targetPos = adjacentAnchor.position;\n } else {\n // Restore to active panel\n targetPos = camera.clampToReachablePosition(activePanel.position);\n targetPanel = activePanel;\n }\n\n this._triggerIndexChangeEvent(targetPanel, position, axesEvent);\n\n return this._animateToPosition({\n position: targetPos,\n duration,\n newActivePanel: targetPanel,\n axesEvent\n });\n }\n\n public setActive = (newActivePanel: Panel, prevActivePanel: Panel | null, isTrusted: boolean) => {\n super.setActive(newActivePanel, prevActivePanel, isTrusted);\n this.updateInput();\n };\n\n private _resetIndexRange() {\n this._indexRange = { min: 0, max: 0 };\n }\n}\n\nexport default StrictControl;\n","/*\n * Copyright (c) 2015 NAVER Corp.\n * egjs projects are licensed under the MIT license\n */\nimport Control from \"./Control\";\nimport SnapControl, { SnapControlOptions } from \"./SnapControl\";\nimport FreeControl, { FreeControlOptions } from \"./FreeControl\";\nimport StrictControl, { StrictControlOptions } from \"./StrictControl\";\nimport AxesController from \"./AxesController\";\nimport State from \"./states/State\";\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\";\nimport StateMachine from \"./StateMachine\";\n\nexport {\n Control,\n SnapControl,\n FreeControl,\n StrictControl,\n AxesController,\n State,\n IdleState,\n HoldingState,\n DraggingState,\n AnimatingState,\n DisabledState,\n StateMachine\n};\n\nexport type {\n SnapControlOptions,\n FreeControlOptions,\n StrictControlOptions\n};\n","/*\n * Copyright (c) 2015 NAVER Corp.\n * egjs projects are licensed under the MIT license\n */\nimport { ComponentEvent } from \"@egjs/component\";\n\nimport Flicking, { FlickingOptions } from \"../Flicking\";\nimport FlickingError from \"../core/FlickingError\";\nimport Panel from \"../core/panel/Panel\";\nimport AnchorPoint from \"../core/AnchorPoint\";\nimport * as ERROR from \"../const/error\";\nimport { ALIGN, DIRECTION, EVENTS } from \"../const/external\";\nimport { checkExistence, clamp, find, getFlickingAttached, getProgress, includes, parseAlign } from \"../utils\";\n\nexport interface CameraOptions {\n align: FlickingOptions[\"align\"];\n}\n\n/**\n * A component that manages actual movement inside the viewport\n * @ko 뷰포트 내에서의 실제 움직임을 담당하는 컴포넌트\n */\nabstract class Camera {\n // Options\n protected _align: FlickingOptions[\"align\"];\n\n // Internal states\n protected _flicking: Flicking | null;\n protected _el: HTMLElement;\n protected _transform: string;\n protected _position: number;\n protected _alignPos: number;\n protected _offset: number;\n protected _range: { min: number; max: number };\n protected _visiblePanels: Panel[];\n protected _anchors: AnchorPoint[];\n protected _needPanelTriggered: { prev: boolean; next: boolean };\n\n // Internal states getter\n /**\n * The camera(`.flicking-camera`) element\n * @ko 카메라(`.flicking-camera`) 엘리먼트\n * @type {HTMLElement}\n * @readonly\n */\n public get element() { return this._el; }\n /**\n * Current position of the camera\n * @ko Camera의 현재 좌표\n * @type {number}\n * @readonly\n */\n public get position() { return this._position; }\n /**\n * Align position inside the viewport where {@link Panel}'s {@link Panel#alignPosition alignPosition} should be located at\n * @ko 패널의 정렬 기준 위치. 뷰포트 내에서 {@link Panel}의 {@link Panel#alignPosition alignPosition}이 위치해야 하는 곳입니다\n * @type {number}\n * @readonly\n */\n public get alignPosition() { return this._alignPos; }\n /**\n * Position offset, used for the {@link Flicking#renderOnlyVisible renderOnlyVisible} option\n * @ko Camera의 좌표 오프셋. {@link Flicking#renderOnlyVisible renderOnlyVisible} 옵션을 위해 사용됩니다.\n * @type {number}\n * @default 0\n * @readonly\n */\n public get offset() { return this._offset; }\n /**\n * A range that Camera's {@link Camera#position position} can reach\n * @ko Camera의 {@link Camera#position position}이 도달 가능한 범위\n * @type {object}\n * @property {number} min A minimum position최소 위치\n * @property {number} min A maximum position최대 위치\n * @readonly\n */\n public get range() { return this._range; }\n /**\n * A difference between Camera's minimum and maximum position that can reach\n * @ko Camera가 도달 가능한 최소/최대 좌표의 차이\n * @type {number}\n * @readonly\n */\n public get rangeDiff() { return this._range.max - this._range.min; }\n /**\n * An array of visible panels from the current position\n * @ko 현재 보이는 패널들의 배열\n * @type {Panel[]}\n * @readonly\n */\n public get visiblePanels() { return this._visiblePanels; }\n /**\n * A range of the visible area from the current position\n * @ko 현재 위치에서 보이는 범위\n * @type {object}\n * @property {number} min A minimum position최소 위치\n * @property {number} min A maximum position최대 위치\n * @readonly\n */\n public get visibleRange() { return { min: this._position - this._alignPos, max: this._position - this._alignPos + this.size }; }\n /**\n * An array of {@link AnchorPoint}s that Camera can be stopped at\n * @ko 카메라가 도달 가능한 {@link AnchorPoint}의 목록\n * @type {AnchorPoint[]}\n * @readonly\n */\n public get anchorPoints() { return this._anchors; }\n /**\n * A current parameters of the Camera for updating {@link AxesController}\n * @ko {@link AxesController}를 업데이트하기 위한 현재 Camera 패러미터들\n * @type {ControlParams}\n * @readonly\n */\n public get controlParams() { return { range: this._range, position: this._position, circular: false }; }\n /**\n * A Boolean value indicating whether Camera's over the minimum or maximum position reachable\n * @ko 현재 카메라가 도달 가능한 범위의 최소 혹은 최대점을 넘어섰는지를 나타냅니다\n * @type {boolean}\n * @readonly\n */\n public get atEdge() { return this._position <= this._range.min || this._position >= this._range.max; }\n /**\n * Return the size of the viewport\n * @ko 뷰포트 크기를 반환합니다\n * @type {number}\n * @readonly\n */\n public get size() {\n const flicking = this._flicking;\n return flicking\n ? flicking.horizontal\n ? flicking.viewport.width\n : flicking.viewport.height\n : 0;\n }\n\n /**\n * Return the camera's position progress from the first panel to last panel\n * Range is from 0 to last panel's index\n * @ko 첫번째 패널로부터 마지막 패널까지의 카메라 위치의 진행도를 반환합니다\n * 범위는 0부터 마지막 패널의 인덱스까지입니다\n * @type {number}\n * @readonly\n */\n public get progress() {\n const flicking = this._flicking;\n const position = this._position + this._offset;\n const nearestAnchor = this.findNearestAnchor(this._position);\n\n if (!flicking || !nearestAnchor) {\n return NaN;\n }\n\n const nearestPanel = nearestAnchor.panel;\n const panelPos = nearestPanel.position + nearestPanel.offset;\n const bounceSize = flicking.control.controller.bounce!;\n\n const { min: prevRange, max: nextRange } = this.range;\n const rangeDiff = this.rangeDiff;\n\n if (position === panelPos) {\n return nearestPanel.index;\n }\n\n if (position < panelPos) {\n const prevPanel = nearestPanel.prev();\n let prevPosition = prevPanel\n ? prevPanel.position + prevPanel.offset\n : prevRange - bounceSize[0];\n\n // Looped\n if (prevPosition > panelPos) {\n prevPosition -= rangeDiff;\n }\n\n return nearestPanel.index - 1 + getProgress(position, prevPosition, panelPos);\n } else {\n const nextPanel = nearestPanel.next();\n let nextPosition = nextPanel\n ? nextPanel.position + nextPanel.offset\n : nextRange + bounceSize[1];\n\n // Looped\n if (nextPosition < panelPos) {\n nextPosition += rangeDiff;\n }\n\n return nearestPanel.index + getProgress(position, panelPos, nextPosition);\n }\n }\n\n // Options Getter\n /**\n * A value indicating where the {@link Camera#alignPosition alignPosition} should be located at inside the viewport element\n * @ko {@link Camera#alignPosition alignPosition}이 뷰포트 엘리먼트 내의 어디에 위치해야 하는지를 나타내는 값\n * @type {ALIGN | string | number}\n */\n public get align() { return this._align; }\n\n // Options Setter\n public set align(val: FlickingOptions[\"align\"]) {\n this._align = val;\n }\n\n /** */\n public constructor({\n align = ALIGN.CENTER\n }: Partial = {}) {\n this._flicking = null;\n this._resetInternalValues();\n\n // Options\n this._align = align;\n }\n\n /**\n * Update {@link Camera#range range} of Camera\n * @ko Camera의 {@link Camera#range range}를 업데이트합니다\n * @method\n * @abstract\n * @memberof Camera\n * @instance\n * @name updateRange\n * @chainable\n * @throws {FlickingError}\n * {@link ERROR_CODE NOT_ATTACHED_TO_FLICKING} When {@link Camera#init init} is not called before\n * {@link ERROR_CODE NOT_ATTACHED_TO_FLICKING} {@link Camera#init init}이 이전에 호출되지 않은 경우\n * @return {this}\n */\n public abstract updateRange(): this;\n\n /**\n * Initialize Camera\n * @ko Camera를 초기화합니다\n * @param {Flicking} flicking An instance of {@link Flicking}Flicking의 인스턴스\n * @chainable\n * @throws {FlickingError}\n * {@link ERROR_CODE VAL_MUST_NOT_NULL} If the camera element(`.flicking-camera`) does not exist inside viewport element\n * {@link ERROR_CODE VAL_MUST_NOT_NULL} 뷰포트 엘리먼트 내부에 카메라 엘리먼트(`.flicking-camera`)가 존재하지 않을 경우\n * @return {this}\n */\n public init(flicking: Flicking): this {\n this._flicking = flicking;\n\n const viewportEl = flicking.viewport.element;\n\n checkExistence(viewportEl.firstElementChild, \"First element child of the viewport element\");\n this._el = viewportEl.firstElementChild as HTMLElement;\n this._checkTranslateSupport();\n\n return this;\n }\n\n /**\n * Destroy Camera and return to initial state\n * @ko Camera를 초기 상태로 되돌립니다\n * @return {void}\n */\n public destroy(): this {\n this._flicking = null;\n this._resetInternalValues();\n return this;\n }\n\n /**\n * Move to the given position and apply CSS transform\n * @ko 해당 좌표로 이동하고, CSS transform을 적용합니다\n * @param {number} pos A new position움직일 위치\n * @throws {FlickingError}\n * {@link ERROR_CODE NOT_ATTACHED_TO_FLICKING} When {@link Camera#init init} is not called before\n * {@link ERROR_CODE NOT_ATTACHED_TO_FLICKING} {@link Camera#init init}이 이전에 호출되지 않은 경우\n * @return {this}\n */\n public lookAt(pos: number): void {\n const prevPos = this._position;\n\n this._position = pos;\n this._refreshVisiblePanels();\n this._checkNeedPanel();\n this._checkReachEnd(prevPos, pos);\n this._applyTransform();\n }\n\n /**\n * Return a previous {@link AnchorPoint} of given {@link AnchorPoint}\n * If it does not exist, return `null` instead\n * @ko 주어진 {@link AnchorPoint}의 이전 {@link AnchorPoint}를 반환합니다\n * 존재하지 않을 경우 `null`을 반환합니다\n * @param {AnchorPoint} anchor A reference {@link AnchorPoint}기준 {@link AnchorPoint}\n * @return {AnchorPoint | null} The previous {@link AnchorPoint}이전 {@link AnchorPoint}\n */\n public getPrevAnchor(anchor: AnchorPoint): AnchorPoint | null {\n return this._anchors[anchor.index - 1] || null;\n }\n\n /**\n * Return a next {@link AnchorPoint} of given {@link AnchorPoint}\n * If it does not exist, return `null` instead\n * @ko 주어진 {@link AnchorPoint}의 다음 {@link AnchorPoint}를 반환합니다\n * 존재하지 않을 경우 `null`을 반환합니다\n * @param {AnchorPoint} anchor A reference {@link AnchorPoint}기준 {@link AnchorPoint}\n * @return {AnchorPoint | null} The next {@link AnchorPoint}다음 {@link AnchorPoint}\n */\n public getNextAnchor(anchor: AnchorPoint): AnchorPoint | null {\n return this._anchors[anchor.index + 1] || null;\n }\n\n /**\n * Return the camera's position progress in the panel below\n * Value is from 0 to 1 when the camera's inside panel\n * Value can be lower than 0 or bigger than 1 when it's in the margin area\n * @ko 현재 카메라 아래 패널에서의 위치 진행도를 반환합니다\n * 반환값은 카메라가 패널 내부에 있을 경우 0부터 1까지의 값을 갖습니다\n * 패널의 margin 영역에 있을 경우 0보다 작거나 1보다 큰 값을 반환할 수 있습니다\n */\n public getProgressInPanel(panel: Panel) {\n const panelRange = panel.range;\n\n return (this._position - panelRange.min) / (panelRange.max - panelRange.min);\n }\n\n /**\n * Return {@link AnchorPoint} that includes given position\n * If there's no {@link AnchorPoint} that includes the given position, return `null` instead\n * @ko 주어진 좌표를 포함하는 {@link AnchorPoint}를 반환합니다\n * 주어진 좌표를 포함하는 {@link AnchorPoint}가 없을 경우 `null`을 반환합니다\n * @param {number} position A position to check확인할 좌표\n * @return {AnchorPoint | null} The {@link AnchorPoint} that includes the given position해당 좌표를 포함하는 {@link AnchorPoint}\n */\n public findAnchorIncludePosition(position: number): AnchorPoint | null {\n const anchors = this._anchors;\n const anchorsIncludingPosition = anchors.filter(anchor => anchor.panel.includePosition(position, true));\n\n return anchorsIncludingPosition.reduce((nearest: AnchorPoint | null, anchor) => {\n if (!nearest) return anchor;\n\n return Math.abs(nearest.position - position) < Math.abs(anchor.position - position)\n ? nearest\n : anchor;\n }, null);\n }\n\n /**\n * Return {@link AnchorPoint} nearest to given position\n * If there're no {@link AnchorPoint}s, return `null` instead\n * @ko 해당 좌표에서 가장 가까운 {@link AnchorPoint}를 반환합니다\n * {@link AnchorPoint}가 하나도 없을 경우 `null`을 반환합니다\n * @param {number} position A position to check확인할 좌표\n * @return {AnchorPoint | null} The {@link AnchorPoint} nearest to the given position해당 좌표에 가장 인접한 {@link AnchorPoint}\n */\n public findNearestAnchor(position: number): AnchorPoint | null {\n const anchors = this._anchors;\n\n if (anchors.length <= 0) return null;\n\n let prevDist = Infinity;\n for (let anchorIdx = 0; anchorIdx < anchors.length; anchorIdx++) {\n const anchor = anchors[anchorIdx];\n const dist = Math.abs(anchor.position - position);\n\n if (dist > prevDist) {\n // Return previous anchor\n return anchors[anchorIdx - 1];\n }\n\n prevDist = dist;\n }\n\n // Return last anchor\n return anchors[anchors.length - 1];\n }\n\n /**\n * Return {@link AnchorPoint} that matches {@link Flicking#currentPanel}\n * @ko 현재 {@link Flicking#currentPanel}에 해당하는 {@link AnchorPoint}를 반환합니다\n * @return {AnchorPoint | null}\n */\n public findActiveAnchor(): AnchorPoint | null {\n const flicking = getFlickingAttached(this._flicking, \"Camera\");\n const activeIndex = flicking.control.activeIndex;\n\n return find(this._anchors, anchor => anchor.panel.index === activeIndex);\n }\n\n /**\n * Clamp the given position between camera's range\n * @ko 주어진 좌표를 Camera가 도달 가능한 범위 사이의 값으로 만듭니다\n * @param {number} position A position to clamp범위를 제한할 좌표\n * @return {number} A clamped position범위 제한된 좌표\n */\n public clampToReachablePosition(position: number): number {\n const range = this._range;\n return clamp(position, range.min, range.max);\n }\n\n /**\n * Check whether the given panel is inside of the Camera's range\n * @ko 해당 {@link Panel}이 Camera가 도달 가능한 범위 내에 있는지를 반환합니다\n * @param panel An instance of {@link Panel} to check확인할 {@link Panel}의 인스턴스\n * @return {boolean} Whether the panel's inside Camera's range도달 가능한 범위 내에 해당 패널이 존재하는지 여부\n */\n public canReach(panel: Panel): boolean {\n const range = this._range;\n\n if (panel.removed) return false;\n\n const panelPos = panel.position;\n\n return panelPos >= range.min && panelPos <= range.max;\n }\n\n /**\n * Check whether the given panel element is visible at the current position\n * @ko 현재 좌표에서 해당 패널 엘리먼트를 볼 수 있는지 여부를 반환합니다\n * @param panel An instance of {@link Panel} to check확인할 {@link Panel}의 인스턴스\n * @return Whether the panel element is visible at the current position현재 위치에서 해당 패널 엘리먼트가 보이는지 여부\n */\n public canSee(panel: Panel): boolean {\n const visibleRange = this.visibleRange;\n // Should not include margin, as we don't declare what the margin is visible as what the panel is visible.\n return panel.includeRange(visibleRange.min, visibleRange.max, false);\n }\n\n /**\n * Update Camera's {@link Camera#alignPosition alignPosition}\n * @ko Camera의 {@link Camera#alignPosition alignPosition}을 업데이트합니다\n * @chainable\n * @return {this}\n */\n public updateAlignPos(): this {\n const align = this._align;\n\n const alignVal = typeof align === \"object\"\n ? (align as { camera: string | number }).camera\n : align;\n\n this._alignPos = parseAlign(alignVal, this.size);\n\n return this;\n }\n\n /**\n * Update Camera's {@link Camera#anchorPoints anchorPoints}\n * @ko Camera의 {@link Camera#anchorPoints anchorPoints}를 업데이트합니다\n * @throws {FlickingError}\n * {@link ERROR_CODE NOT_ATTACHED_TO_FLICKING} When {@link Camera#init init} is not called before\n * {@link ERROR_CODE NOT_ATTACHED_TO_FLICKING} {@link Camera#init init}이 이전에 호출되지 않은 경우\n * @chainable\n * @return {this}\n */\n public updateAnchors(): this {\n const flicking = getFlickingAttached(this._flicking, \"Camera\");\n const panels = flicking.renderer.panels;\n\n this._anchors = panels.map((panel, index) => new AnchorPoint({\n index,\n position: panel.position,\n panel\n }));\n\n return this;\n }\n\n /**\n * Update Viewport's height to active panel's height\n * @ko 현재 선택된 패널의 높이와 동일하도록 뷰포트의 높이를 업데이트합니다\n * @throws {FlickingError}\n * {@link ERROR_CODE NOT_ATTACHED_TO_FLICKING} When {@link Camera#init init} is not called before\n * {@link ERROR_CODE NOT_ATTACHED_TO_FLICKING} {@link Camera#init init}이 이전에 호출되지 않은 경우\n * @chainable\n * @return {this}\n */\n public updateAdaptiveHeight() {\n const flicking = getFlickingAttached(this._flicking, \"Camera\");\n const activePanel = flicking.control.activePanel;\n\n if (!flicking.horizontal || !flicking.adaptive || !activePanel) return;\n\n flicking.viewport.setSize({\n height: activePanel.height\n });\n }\n\n public updateOffset() {\n const flicking = getFlickingAttached(this._flicking, \"Camera\");\n const unRenderedPanels = flicking.panels.filter(panel => !panel.rendered);\n const position = this._position;\n\n this._offset = unRenderedPanels\n .filter(panel => panel.position + panel.offset < position)\n .reduce((offset, panel) => offset + panel.sizeIncludingMargin, 0);\n\n this._applyTransform();\n }\n\n /**\n * Reset the history of {@link Flicking#event:needPanel needPanel} events so it can be triggered again\n * @ko 발생한 {@link Flicking#event:needPanel needPanel} 이벤트들을 초기화하여 다시 발생할 수 있도록 합니다\n * @chainable\n * @return {this}\n */\n public resetNeedPanelHistory(): this {\n this._needPanelTriggered = { prev: false, next: false };\n return this;\n }\n\n protected _resetInternalValues() {\n this._position = 0;\n this._alignPos = 0;\n this._offset = 0;\n this._range = { min: 0, max: 0 };\n this._visiblePanels = [];\n this._anchors = [];\n this._needPanelTriggered = { prev: false, next: false };\n }\n\n protected _refreshVisiblePanels() {\n const flicking = getFlickingAttached(this._flicking, \"Camera\");\n const panels = flicking.renderer.panels;\n\n const newVisiblePanels = panels.filter(panel => this.canSee(panel));\n const prevVisiblePanels = this._visiblePanels;\n this._visiblePanels = newVisiblePanels;\n\n const added: Panel[] = newVisiblePanels.filter(panel => !includes(prevVisiblePanels, panel));\n const removed: Panel[] = prevVisiblePanels.filter(panel => !includes(newVisiblePanels, panel));\n\n if (added.length > 0 || removed.length > 0) {\n void flicking.renderer.render().then(() => {\n flicking.trigger(new ComponentEvent(EVENTS.VISIBLE_CHANGE, {\n added,\n removed,\n visiblePanels: newVisiblePanels\n }));\n });\n }\n }\n\n protected _checkNeedPanel(): void {\n const needPanelTriggered = this._needPanelTriggered;\n\n if (needPanelTriggered.prev && needPanelTriggered.next) return;\n\n const flicking = getFlickingAttached(this._flicking, \"Camera\");\n const panels = flicking.renderer.panels;\n\n if (panels.length <= 0) {\n if (!needPanelTriggered.prev) {\n flicking.trigger(new ComponentEvent(EVENTS.NEED_PANEL, { direction: DIRECTION.PREV }));\n needPanelTriggered.prev = true;\n }\n if (!needPanelTriggered.next) {\n flicking.trigger(new ComponentEvent(EVENTS.NEED_PANEL, { direction: DIRECTION.NEXT }));\n needPanelTriggered.next = true;\n }\n\n return;\n }\n\n const cameraPosition = this._position;\n const cameraSize = this.size;\n const cameraRange = this._range;\n const needPanelThreshold = flicking.needPanelThreshold;\n\n const cameraPrev = cameraPosition - this._alignPos;\n const cameraNext = cameraPrev + cameraSize;\n\n const firstPanel = panels[0];\n const lastPanel = panels[panels.length - 1];\n\n if (!needPanelTriggered.prev) {\n const firstPanelPrev = firstPanel.range.min;\n\n if (cameraPrev <= (firstPanelPrev + needPanelThreshold) || cameraPosition <= (cameraRange.min + needPanelThreshold)) {\n flicking.trigger(new ComponentEvent(EVENTS.NEED_PANEL, { direction: DIRECTION.PREV }));\n needPanelTriggered.prev = true;\n }\n }\n\n if (!needPanelTriggered.next) {\n const lastPanelNext = lastPanel.range.max;\n\n if (cameraNext >= (lastPanelNext - needPanelThreshold) || cameraPosition >= (cameraRange.max - needPanelThreshold)) {\n flicking.trigger(new ComponentEvent(EVENTS.NEED_PANEL, { direction: DIRECTION.NEXT }));\n needPanelTriggered.next = true;\n }\n }\n }\n\n protected _checkReachEnd(prevPos: number, newPos: number): void {\n const flicking = getFlickingAttached(this._flicking, \"Camera\");\n const range = this._range;\n\n const wasBetweenRange = prevPos > range.min && prevPos < range.max;\n const isBetweenRange = newPos > range.min && newPos < range.max;\n\n if (!wasBetweenRange || isBetweenRange) return;\n\n const direction = newPos <= range.min ? DIRECTION.PREV : DIRECTION.NEXT;\n\n flicking.trigger(new ComponentEvent(EVENTS.REACH_EDGE, {\n direction\n }));\n }\n\n protected _applyTransform(): void {\n const el = this._el;\n const flicking = getFlickingAttached(this._flicking, \"Camera\");\n\n const actualPosition = this._position - this._alignPos - this._offset;\n\n el.style[this._transform] = flicking.horizontal\n ? `translate(${-actualPosition}px)`\n : `translate(0, ${-actualPosition}px)`;\n }\n\n protected _checkTranslateSupport = () => {\n const transforms = [\"webkitTransform\", \"msTransform\", \"MozTransform\", \"OTransform\", \"transform\"];\n\n const supportedStyle = document.documentElement.style;\n let transformName = \"\";\n for (const prefixedTransform of transforms) {\n if (prefixedTransform in supportedStyle) {\n transformName = prefixedTransform;\n }\n }\n\n if (!transformName) {\n throw new FlickingError(ERROR.MESSAGE.TRANSFORM_NOT_SUPPORTED, ERROR.CODE.TRANSFORM_NOT_SUPPORTED);\n }\n\n this._transform = transformName;\n };\n}\n\nexport default Camera;\n","/*\n * Copyright (c) 2015 NAVER Corp.\n * egjs projects are licensed under the MIT license\n */\nimport { getFlickingAttached } from \"../utils\";\n\nimport Camera from \"./Camera\";\n\n/**\n * A {@link Camera} that can move from the position of the first panel to the position of the last panel\n * @ko 첫번째 패널의 좌표로부터 마지막 패널의 좌표로까지 이동할 수 있는 종류의 {@link Camera}\n */\nclass LinearCamera extends Camera {\n /**\n * Update {@link Camera#range range} of Camera\n * @ko Camera의 {@link Camera#range range}를 업데이트합니다\n * @chainable\n * @throws {FlickingError}\n * {@link ERROR_CODE NOT_ATTACHED_TO_FLICKING} When {@link Camera#init init} is not called before\n * {@link ERROR_CODE NOT_ATTACHED_TO_FLICKING} {@link Camera#init init}이 이전에 호출되지 않은 경우\n * @return {this}\n */\n public updateRange() {\n const flicking = getFlickingAttached(this._flicking, \"Camera\");\n const renderer = flicking.renderer;\n\n const firstPanel = renderer.getPanel(0);\n const lastPanel = renderer.getPanel(renderer.panelCount - 1);\n\n this._range = { min: firstPanel?.position ?? 0, max: lastPanel?.position ?? 0 };\n return this;\n }\n}\n\nexport default LinearCamera;\n","/*\n * Copyright (c) 2015 NAVER Corp.\n * egjs projects are licensed under the MIT license\n */\nimport Panel from \"../core/panel/Panel\";\nimport AnchorPoint from \"../core/AnchorPoint\";\nimport { DIRECTION } from \"../const/external\";\nimport { circulatePosition, getFlickingAttached } from \"../utils\";\nimport { ValueOf } from \"../type/internal\";\n\nimport Camera from \"./Camera\";\n\n/**\n * A data of the position that changes order of the panel elements\n * @ko 패널 엘리먼트 순서가 변경되는 좌표의 데이터\n * @interface\n * @property {Panel} panel Toggling panel순서를 변경할 패널\n * @property {DIRECTION} direction Toggling position순서를 변경할 방향\n * @property {boolean} toggled Whether the panel has toggled its position to `direction``direction` 방향으로 패널 위치를 변경했는지 여부를 나타내는 값\n */\nexport interface TogglePoint {\n panel: Panel;\n direction: ValueOf;\n toggled: boolean;\n}\n\n/**\n * A {@link Camera} that connects the last panel and the first panel, enabling continuous loop\n * @ko 첫번째 패널과 마지막 패널이 이어진 상태로, 무한히 회전할 수 있는 종류의 {@link Camera}\n */\nclass CircularCamera extends Camera {\n private _circularOffset: number = 0;\n private _circularEnabled: boolean = false;\n\n public get offset() { return this._offset - this._circularOffset; }\n public get controlParams() { return { range: this._range, position: this._position, circular: this._circularEnabled }; }\n\n public getPrevAnchor(anchor: AnchorPoint): AnchorPoint | null {\n if (!this._circularEnabled || anchor.index !== 0) return super.getPrevAnchor(anchor);\n\n const anchors = this._anchors;\n const rangeDiff = this.rangeDiff;\n const lastAnchor = anchors[anchors.length - 1];\n\n return new AnchorPoint({\n index: lastAnchor.index,\n position: lastAnchor.position - rangeDiff,\n panel: lastAnchor.panel\n });\n }\n\n public getNextAnchor(anchor: AnchorPoint): AnchorPoint | null {\n const anchors = this._anchors;\n\n if (!this._circularEnabled || anchor.index !== anchors.length - 1) return super.getNextAnchor(anchor);\n\n const rangeDiff = this.rangeDiff;\n const firstAnchor = anchors[0];\n\n return new AnchorPoint({\n index: firstAnchor.index,\n position: firstAnchor.position + rangeDiff,\n panel: firstAnchor.panel\n });\n }\n\n public findAnchorIncludePosition(position: number): AnchorPoint | null {\n if (!this._circularEnabled) return super.findAnchorIncludePosition(position);\n\n const range = this._range;\n const positionInRange = circulatePosition(position, range.min, range.max);\n const anchorInRange = super.findAnchorIncludePosition(positionInRange);\n\n if (!anchorInRange) return null;\n\n const rangeDiff = this.rangeDiff;\n\n if (position < range.min) {\n const loopCount = -Math.floor((range.min - position) / rangeDiff) - 1;\n\n return new AnchorPoint({\n index: anchorInRange.index,\n position: anchorInRange.position + rangeDiff * loopCount,\n panel: anchorInRange.panel\n });\n } else if (position > range.max) {\n const loopCount = Math.floor((position - range.max) / rangeDiff) + 1;\n\n return new AnchorPoint({\n index: anchorInRange.index,\n position: anchorInRange.position + rangeDiff * loopCount,\n panel: anchorInRange.panel\n });\n }\n\n return anchorInRange;\n }\n\n public clampToReachablePosition(position: number): number {\n // Basically all position is reachable for circular camera\n return this._circularEnabled\n ? position\n : super.clampToReachablePosition(position);\n }\n\n public canReach(panel: Panel): boolean {\n if (panel.removed) return false;\n\n return this._circularEnabled\n // Always reachable on circular mode\n ? true\n : super.canReach(panel);\n }\n\n public canSee(panel: Panel): boolean {\n const range = this._range;\n const rangeDiff = this.rangeDiff;\n const visibleRange = this.visibleRange;\n const visibleInCurrentRange = super.canSee(panel);\n\n if (!this._circularEnabled) {\n return visibleInCurrentRange;\n }\n\n // Check looped visible area for circular case\n if (visibleRange.min < range.min) {\n return visibleInCurrentRange || panel.includeRange(visibleRange.min + rangeDiff, visibleRange.max + rangeDiff, false);\n } else if (visibleRange.max > range.max) {\n return visibleInCurrentRange || panel.includeRange(visibleRange.min - rangeDiff, visibleRange.max - rangeDiff, false);\n }\n\n return visibleInCurrentRange;\n }\n\n /**\n * Update {@link Camera#range range} of Camera\n * @ko Camera의 {@link Camera#range range}를 업데이트합니다\n * @chainable\n * @throws {FlickingError}\n * {@link ERROR_CODE NOT_ATTACHED_TO_FLICKING} When {@link Camera#init init} is not called before\n * {@link ERROR_CODE NOT_ATTACHED_TO_FLICKING} {@link Camera#init init}이 이전에 호출되지 않은 경우\n * @return {this}\n */\n public updateRange() {\n const flicking = getFlickingAttached(this._flicking, \"Camera\");\n const renderer = flicking.renderer;\n\n const panels = renderer.panels;\n if (panels.length <= 0) {\n this._resetInternalValues();\n return this;\n }\n\n const firstPanel = panels[0]!;\n const lastPanel = panels[panels.length - 1]!;\n const firstPanelPrev = firstPanel.range.min - firstPanel.margin.prev;\n const lastPanelNext = lastPanel.range.max + lastPanel.margin.next;\n\n const visibleSize = this.size;\n const panelSizeSum = lastPanelNext - firstPanelPrev;\n\n const canSetCircularMode = panels\n .every(panel => panelSizeSum - panel.size >= visibleSize);\n this._circularEnabled = canSetCircularMode;\n\n if (canSetCircularMode) {\n this._range = { min: firstPanelPrev, max: lastPanelNext };\n\n panels.forEach(panel => panel.updateCircularToggleDirection());\n } else {\n this._range = { min: firstPanel.position, max: lastPanel.position };\n }\n\n this._updateCircularOffset();\n\n return this;\n }\n\n public lookAt(pos: number) {\n const flicking = getFlickingAttached(this._flicking, \"Camera\");\n const prevPos = this._position;\n\n if (pos === prevPos) return super.lookAt(pos);\n\n const panels = flicking.renderer.panels;\n const toggled = panels.map(panel => panel.toggle(prevPos, pos));\n\n this._position = pos;\n\n if (toggled.some(isToggled => isToggled)) {\n this._updateCircularOffset();\n void flicking.renderer.render();\n }\n\n return super.lookAt(pos);\n }\n\n protected _applyTransform(): void {\n const el = this._el;\n const flicking = getFlickingAttached(this._flicking, \"Camera\");\n\n const actualPosition = this._position - this._alignPos - this._offset + this._circularOffset;\n\n el.style[this._transform] = flicking.horizontal\n ? `translate(${-actualPosition}px)`\n : `translate(0, ${-actualPosition}px)`;\n }\n\n protected _resetInternalValues() {\n super._resetInternalValues();\n this._circularOffset = 0;\n this._circularEnabled = false;\n }\n\n private _calcPanelAreaSum(panels: Panel[]) {\n return panels.reduce((sum: number, panel: Panel) => sum + panel.sizeIncludingMargin, 0);\n }\n\n private _updateCircularOffset() {\n if (!this._circularEnabled) {\n this._circularOffset = 0;\n return;\n }\n\n const flicking = getFlickingAttached(this._flicking, \"Camera\");\n const toggledPrev: Panel[] = [];\n const toggledNext: Panel[] = [];\n\n flicking.panels\n .filter(panel => panel.toggled)\n .forEach(panel => {\n if (panel.toggleDirection === DIRECTION.PREV) {\n toggledPrev.push(panel);\n } else {\n toggledNext.push(panel);\n }\n });\n\n this._circularOffset = this._calcPanelAreaSum(toggledPrev) - this._calcPanelAreaSum(toggledNext);\n }\n}\n\nexport default CircularCamera;\n","/*\n * Copyright (c) 2015 NAVER Corp.\n * egjs projects are licensed under the MIT license\n */\nimport Panel from \"../core/panel/Panel\";\nimport AnchorPoint from \"../core/AnchorPoint\";\nimport { getFlickingAttached, parseAlign } from \"../utils\";\n\nimport Camera from \"./Camera\";\n\n/**\n * A {@link Camera} that set range not to go out of the first/last panel, so it won't show empty spaces before/after the first/last panel\n * @ko 첫번째와 마지막 패널 밖으로 넘어가지 못하도록 범위를 설정하여, 첫번째/마지막 패널 전/후의 빈 공간을 보이지 않도록 하는 종류의 {@link Camera}\n */\nclass BoundCamera extends Camera {\n /**\n * Update {@link Camera#range range} of Camera\n * @ko Camera의 {@link Camera#range range}를 업데이트합니다\n * @chainable\n * @throws {FlickingError}\n * {@link ERROR_CODE NOT_ATTACHED_TO_FLICKING} When {@link Camera#init init} is not called before\n * {@link ERROR_CODE NOT_ATTACHED_TO_FLICKING} {@link Camera#init init}이 이전에 호출되지 않은 경우\n * @return {this}\n */\n public updateRange() {\n const flicking = getFlickingAttached(this._flicking, \"Camera\");\n const renderer = flicking.renderer;\n const alignPos = this._alignPos;\n\n const firstPanel = renderer.getPanel(0);\n const lastPanel = renderer.getPanel(renderer.panelCount - 1);\n\n if (!firstPanel || !lastPanel) {\n this._range = { min: 0, max: 0 };\n return this;\n }\n\n const viewportSize = this.size;\n const firstPanelPrev = firstPanel.range.min;\n const lastPanelNext = lastPanel.range.max;\n const panelAreaSize = lastPanelNext - firstPanelPrev;\n const isBiggerThanViewport = viewportSize < panelAreaSize;\n\n const firstPos = firstPanelPrev + alignPos;\n const lastPos = lastPanelNext - viewportSize + alignPos;\n\n if (isBiggerThanViewport) {\n this._range = { min: firstPos, max: lastPos };\n } else {\n const align = this._align;\n const alignVal = typeof align === \"object\"\n ? (align as { camera: string | number }).camera\n : align;\n\n const pos = firstPos + parseAlign(alignVal, lastPos - firstPos);\n\n this._range = { min: pos, max: pos };\n }\n\n return this;\n }\n\n public updateAnchors(): this {\n const flicking = getFlickingAttached(this._flicking, \"Camera\");\n const panels = flicking.renderer.panels;\n\n if (panels.length <= 0) {\n this._anchors = [];\n return this;\n }\n\n const range = this._range;\n const reachablePanels = panels.filter(panel => this.canReach(panel));\n\n if (reachablePanels.length > 0) {\n const shouldPrependBoundAnchor = reachablePanels[0].position !== range.min;\n const shouldAppendBoundAnchor = reachablePanels[reachablePanels.length - 1].position !== range.max;\n const indexOffset = shouldPrependBoundAnchor ? 1 : 0;\n\n const newAnchors = reachablePanels.map((panel, idx) => new AnchorPoint({\n index: idx + indexOffset,\n position: panel.position,\n panel\n }));\n\n if (shouldPrependBoundAnchor) {\n newAnchors.splice(0, 0, new AnchorPoint({\n index: 0,\n position: range.min,\n panel: panels[reachablePanels[0].index - 1]\n }));\n }\n\n if (shouldAppendBoundAnchor) {\n newAnchors.push(new AnchorPoint({\n index: newAnchors.length,\n position: range.max,\n panel: panels[reachablePanels[reachablePanels.length - 1].index + 1]\n }));\n }\n\n this._anchors = newAnchors;\n } else if (range.min !== range.max) {\n // There're more than 2 panels\n const nearestPanelAtMin = this._findNearestPanel(range.min, panels);\n const panelAtMin = nearestPanelAtMin.index === panels.length - 1\n ? nearestPanelAtMin.prev()!\n : nearestPanelAtMin;\n const panelAtMax = panelAtMin.next()!;\n\n this._anchors = [\n new AnchorPoint({\n index: 0,\n position: range.min,\n panel: panelAtMin\n }),\n new AnchorPoint({\n index: 1,\n position: range.max,\n panel: panelAtMax\n })\n ];\n } else {\n this._anchors = [new AnchorPoint({\n index: 0,\n position: range.min,\n panel: this._findNearestPanel(range.min, panels)\n })];\n }\n\n return this;\n }\n\n public findAnchorIncludePosition(position: number): AnchorPoint | null {\n const range = this._range;\n const anchors = this._anchors;\n\n if (anchors.length <= 0) return null;\n\n if (position <= range.min) {\n return anchors[0];\n } else if (position >= range.max) {\n return anchors[anchors.length - 1];\n } else {\n return super.findAnchorIncludePosition(position);\n }\n }\n\n private _findNearestPanel(pos: number, panels: Panel[]): Panel {\n let prevDist = Infinity;\n for (let panelIdx = 0; panelIdx < panels.length; panelIdx++) {\n const panel = panels[panelIdx];\n const dist = Math.abs(panel.position - pos);\n\n if (dist > prevDist) {\n // Return previous anchor\n return panels[panelIdx - 1];\n }\n\n prevDist = dist;\n }\n\n // Return last anchor\n return panels[panels.length - 1];\n }\n}\n\nexport default BoundCamera;\n","/*\n * Copyright (c) 2015 NAVER Corp.\n * egjs projects are licensed under the MIT license\n */\nimport Camera, { CameraOptions } from \"./Camera\";\nimport LinearCamera from \"./LinearCamera\";\nimport CircularCamera from \"./CircularCamera\";\nimport BoundCamera from \"./BoundCamera\";\n\nexport {\n Camera,\n LinearCamera,\n CircularCamera,\n BoundCamera\n};\n\nexport type {\n CameraOptions\n};\n","/*\n * Copyright (c) 2015 NAVER Corp.\n * egjs projects are licensed under the MIT license\n */\nimport { ComponentEvent } from \"@egjs/component\";\nimport ImReady from \"@egjs/imready\";\n\nimport Flicking, { FlickingOptions } from \"../Flicking\";\nimport Panel, { PanelOptions } from \"../core/panel/Panel\";\nimport FlickingError from \"../core/FlickingError\";\nimport { ALIGN, EVENTS } from \"../const/external\";\nimport * as ERROR from \"../const/error\";\nimport { getFlickingAttached, getMinusCompensatedIndex, includes } from \"../utils\";\n\nexport interface RendererOptions {\n align: FlickingOptions[\"align\"];\n}\n\n/**\n * A component that manages {@link Panel} and its elements\n * @ko {@link Panel}과 그 엘리먼트들을 관리하는 컴포넌트\n */\nabstract class Renderer {\n // Internal States\n protected _flicking: Flicking | null;\n protected _panels: Panel[];\n\n // Options\n protected _align: RendererOptions[\"align\"];\n\n // Internal states Getter\n /**\n * Array of panels\n * @ko 전체 패널들의 배열\n * @type {Panel[]}\n * @readonly\n * @see Panel\n */\n public get panels() { return this._panels; }\n /**\n * Count of panels\n * @ko 전체 패널의 개수\n * @type {number}\n * @readonly\n */\n public get panelCount() { return this._panels.length; }\n\n // Options Getter\n /**\n * A {@link Panel}'s {@link Panel#align align} value that applied to all panels\n * @ko {@link Panel}에 공통적으로 적용할 {@link Panel#align align} 값\n * @type {Constants.ALIGN | string | number}\n */\n public get align() { return this._align; }\n\n // Options Setter\n public set align(val: RendererOptions[\"align\"]) {\n this._align = val;\n\n const panelAlign = this._getPanelAlign();\n this._panels.forEach(panel => { panel.align = panelAlign; });\n }\n\n /**\n * @param {object} options An options object옵션 오브젝트\n * @param {Constants.ALIGN | string | number} [options.align] An {@link Flicking#align align} value that will be applied to all panels전체 패널에 적용될 {@link Flicking#align align} 값\n */\n public constructor({\n align = ALIGN.CENTER\n }: Partial = {}) {\n this._flicking = null;\n this._panels = [];\n\n // Bind options\n this._align = align;\n }\n\n /**\n * Render panel elements inside the camera element\n * @ko 패널 엘리먼트들을 카메라 엘리먼트 내부에 렌더링합니다\n * @method\n * @abstract\n * @memberof Renderer\n * @instance\n * @name render\n * @chainable\n * @return {this}\n */\n public abstract render(): Promise;\n public abstract forceRenderAllPanels(): Promise;\n\n protected abstract _collectPanels(): void;\n protected abstract _createPanel(el: any, options: PanelOptions): Panel;\n protected abstract _insertPanelElements(panels: Panel[], nextSibling: Panel | null): void;\n protected abstract _removePanelElements(panels: Panel[]): void;\n\n /**\n * Initialize Renderer\n * @ko Renderer를 초기화합니다\n * @param {Flicking} flicking An instance of {@link Flicking}Flicking의 인스턴스\n * @chainable\n * @return {this}\n */\n public init(flicking: Flicking): this {\n this._flicking = flicking;\n this._collectPanels();\n\n return this;\n }\n\n /**\n * Destroy Renderer and return to initial state\n * @ko Renderer를 초기 상태로 되돌립니다\n * @return {void}\n */\n public destroy(): void {\n this._flicking = null;\n this._panels = [];\n }\n\n /**\n * Return the {@link Panel} at the given index. `null` if it doesn't exists.\n * @ko 주어진 인덱스에 해당하는 {@link Panel}을 반환합니다. 주어진 인덱스에 해당하는 패널이 존재하지 않을 경우 `null`을 반환합니다.\n * @return {Panel | null} Panel at the given index주어진 인덱스에 해당하는 패널\n * @see Panel\n */\n public getPanel(index: number): Panel | null {\n return this._panels[index] || null;\n }\n\n /**\n * Update all panel sizes\n * @ko 모든 패널의 크기를 업데이트합니다\n * @chainable\n * @return {this}\n */\n public updatePanelSize(): this {\n const flicking = getFlickingAttached(this._flicking, \"Renderer\");\n\n if (flicking.panelsPerView > 0) {\n this._updatePanelSizeByGrid(flicking);\n } else {\n flicking.panels.forEach(panel => panel.resize());\n }\n\n return this;\n }\n\n /**\n * Insert new panels at given index\n * This will increase index of panels after by the number of panels added\n * @ko 주어진 인덱스에 새로운 패널들을 추가합니다\n * 해당 인덱스보다 같거나 큰 인덱스를 가진 기존 패널들은 추가한 패널의 개수만큼 인덱스가 증가합니다.\n * @param {number} index Index to insert new panels at새로 패널들을 추가할 인덱스\n * @param {any[]} elements An array of element or framework component with element in it엘리먼트의 배열 혹은 프레임워크에서 엘리먼트를 포함한 컴포넌트들의 배열\n * @return {Panel[]} An array of prepended panels추가된 패널들의 배열\n */\n public batchInsert(...items: Array<{\n index: number;\n elements: any[];\n }>): Panel[] {\n const panels = this._panels;\n const flicking = getFlickingAttached(this._flicking, \"Renderer\");\n\n const { control } = flicking;\n const align = this._getPanelAlign();\n\n const allPanelsInserted = items.reduce((addedPanels, item) => {\n const insertingIdx = getMinusCompensatedIndex(item.index, panels.length);\n const panelsPushed = panels.slice(insertingIdx);\n const panelsInserted = item.elements.map((el, idx) => this._createPanel(el, { index: insertingIdx + idx, align, flicking }));\n\n panels.splice(insertingIdx, 0, ...panelsInserted);\n\n // Insert the actual elements as camera element's children\n this._insertPanelElements(panelsInserted, panelsPushed[0] ?? null);\n\n // Resize the newly added panels\n panelsInserted.forEach(panel => panel.resize());\n\n // Update panel indexes & positions\n panelsPushed.forEach(panel => {\n panel.increaseIndex(panelsInserted.length);\n panel.updatePosition();\n });\n\n return [...addedPanels, ...panelsInserted];\n }, []);\n\n if (allPanelsInserted.length <= 0) return [];\n\n // Update camera & control\n this._updateCameraAndControl();\n\n void this.render();\n\n // Move to the first panel added if no panels existed\n // FIXME: fix for animating case\n if (allPanelsInserted.length > 0 && !control.animating) {\n void control.moveToPanel(control.activePanel || allPanelsInserted[0], {\n duration: 0\n }).catch(() => void 0);\n }\n\n flicking.camera.updateOffset();\n\n flicking.trigger(new ComponentEvent(EVENTS.PANEL_CHANGE, {\n added: allPanelsInserted,\n removed: []\n }));\n\n this.checkPanelContentsReady(allPanelsInserted);\n\n return allPanelsInserted;\n }\n\n /**\n * Remove the panel at the given index\n * This will decrease index of panels after by the number of panels removed\n * @ko 주어진 인덱스의 패널을 제거합니다\n * 해당 인덱스보다 큰 인덱스를 가진 기존 패널들은 제거한 패널의 개수만큼 인덱스가 감소합니다\n * @param {number} index Index of panel to remove제거할 패널의 인덱스\n * @param {number} [deleteCount=1] Number of panels to remove from index`index` 이후로 제거할 패널의 개수\n * @return An array of removed panels제거된 패널들의 배열\n */\n public batchRemove(...items: Array<{ index: number; deleteCount: number }>): Panel[] {\n const panels = this._panels;\n const flicking = getFlickingAttached(this._flicking, \"Renderer\");\n\n const { camera, control } = flicking;\n const activePanel = control.activePanel;\n const activeIndex = control.activeIndex;\n\n const allPanelsRemoved = items.reduce((removed, item) => {\n const { index, deleteCount } = item;\n const removingIdx = getMinusCompensatedIndex(index, panels.length);\n\n const panelsPulled = panels.slice(removingIdx + deleteCount);\n const panelsRemoved = panels.splice(removingIdx, deleteCount);\n\n if (panelsRemoved.length <= 0) return [];\n\n // Update panel indexes & positions\n panelsPulled.forEach(panel => {\n panel.decreaseIndex(panelsRemoved.length);\n panel.updatePosition();\n });\n\n this._removePanelElements(panelsRemoved);\n\n // Remove panel elements\n panelsRemoved.forEach(panel => panel.destroy());\n\n // Update camera & control\n this._updateCameraAndControl();\n\n if (includes(panelsRemoved, activePanel)) {\n control.resetActive();\n }\n\n return [...removed, ...panelsRemoved];\n }, []);\n\n void this.render();\n\n // FIXME: fix for animating case\n if (allPanelsRemoved.length > 0 && !control.animating) {\n const targetPanel = includes(allPanelsRemoved, activePanel)\n ? (panels[activeIndex] || panels[panels.length - 1])\n : activePanel;\n\n if (targetPanel) {\n void control.moveToPanel(targetPanel, {\n duration: 0\n }).catch(() => void 0);\n } else {\n // All panels removed\n camera.lookAt(0);\n }\n }\n\n flicking.camera.updateOffset();\n\n flicking.trigger(new ComponentEvent(EVENTS.PANEL_CHANGE, {\n added: [],\n removed: allPanelsRemoved\n }));\n\n return allPanelsRemoved;\n }\n\n /**\n * @internal\n */\n public checkPanelContentsReady(checkingPanels: Panel[]) {\n const resizeOnContentsReady = getFlickingAttached(this._flicking, \"Renderer\").resizeOnContentsReady;\n const panels = this._panels;\n\n if (!resizeOnContentsReady) return;\n\n const hasContents = (panel: Panel) => !!panel.element.querySelector(\"img, video\");\n checkingPanels = checkingPanels.filter(panel => hasContents(panel));\n\n if (checkingPanels.length <= 0) return;\n\n const contentsReadyChecker = new ImReady();\n\n checkingPanels.forEach(panel => {\n panel.loading = true;\n });\n\n contentsReadyChecker.on(\"readyElement\", e => {\n const flicking = this._flicking;\n\n if (!flicking) {\n // Renderer's destroy() is called before\n contentsReadyChecker.destroy();\n return;\n }\n\n const panel = checkingPanels[e.index];\n const camera = flicking.camera;\n const control = flicking.control;\n const prevProgressInPanel = control.activePanel\n ? camera.getProgressInPanel(control.activePanel)\n : 0;\n\n panel.loading = false;\n panel.resize();\n panels.slice(panel.index + 1).forEach(panelBehind => panelBehind.updatePosition());\n\n if (!flicking.initialized) return;\n\n camera.updateRange();\n camera.updateAnchors();\n\n if (control.animating) {\n // TODO: Need Axes update\n } else {\n control.updatePosition(prevProgressInPanel);\n control.updateInput();\n }\n });\n\n contentsReadyChecker.on(\"preReady\", e => {\n if (this._flicking) {\n void this.render();\n }\n\n if (e.readyCount === e.totalCount) {\n contentsReadyChecker.destroy();\n }\n });\n\n contentsReadyChecker.on(\"ready\", () => {\n if (this._flicking) {\n void this.render();\n }\n contentsReadyChecker.destroy();\n });\n\n contentsReadyChecker.check(checkingPanels.map(panel => panel.element));\n }\n\n protected _getPanelAlign() {\n const align = this._align;\n\n return typeof align === \"object\"\n ? (align as { panel: string | number }).panel\n : align;\n }\n\n protected _updateCameraAndControl() {\n const flicking = getFlickingAttached(this._flicking, \"Renderer\");\n const { camera, control } = flicking;\n\n camera.updateRange();\n camera.updateAnchors();\n camera.resetNeedPanelHistory();\n control.updateInput();\n }\n\n protected _updateRenderingPanels(): void {\n const flicking = getFlickingAttached(this._flicking, \"Renderer\");\n\n if (flicking.renderOnlyVisible) {\n this._showOnlyVisiblePanels(flicking);\n } else {\n flicking.panels.forEach(panel => panel.markForShow());\n }\n }\n\n protected _showOnlyVisiblePanels(flicking: Flicking) {\n const panels = flicking.renderer.panels;\n const camera = flicking.camera;\n\n const visibleIndexes = camera.visiblePanels.reduce((visibles, panel) => {\n visibles[panel.index] = true;\n return visibles;\n }, {});\n\n panels.forEach(panel => {\n if (panel.index in visibleIndexes || panel.loading) {\n panel.markForShow();\n } else if (!flicking.holding) {\n // During the input sequence,\n // Do not remove panel elements as it won't trigger touchend event.\n panel.markForHide();\n }\n });\n\n camera.updateOffset();\n }\n\n protected _updatePanelSizeByGrid(flicking: Flicking) {\n const panels = flicking.panels;\n const panelsPerView = flicking.panelsPerView;\n\n if (panelsPerView <= 0) {\n throw new FlickingError(ERROR.MESSAGE.WRONG_OPTION(\"panelsPerView\", panelsPerView), ERROR.CODE.WRONG_OPTION);\n }\n if (panels.length <= 0) return;\n\n // resize only the first panel\n const firstPanel = panels[0];\n firstPanel.resize();\n\n const viewportSize = flicking.camera.size;\n const gap = firstPanel.margin.prev + firstPanel.margin.next;\n\n const panelSize = (viewportSize - gap * (panelsPerView - 1)) / panelsPerView;\n const panelSizeObj = flicking.horizontal\n ? { width: panelSize }\n : { height: panelSize };\n const firstPanelSizeObj = {\n size: panelSize,\n height: firstPanel.height,\n margin: firstPanel.margin\n };\n\n if (!flicking.noPanelStyleOverride) {\n flicking.panels.forEach(panel => panel.setSize(panelSizeObj));\n }\n\n flicking.panels.forEach(panel => panel.resize(firstPanelSizeObj));\n }\n}\n\nexport default Renderer;\n","/*\n * Copyright (c) 2015 NAVER Corp.\n * egjs projects are licensed under the MIT license\n */\nimport Flicking from \"../../Flicking\";\nimport { getProgress, getStyle, isString, parseAlign } from \"../../utils\";\nimport { ALIGN, DIRECTION } from \"../../const/external\";\nimport { LiteralUnion, ValueOf } from \"../../type/internal\";\n\nexport interface PanelOptions {\n index: number;\n align: LiteralUnion> | number;\n flicking: Flicking;\n}\n\nabstract class Panel {\n // Internal States\n protected _flicking: Flicking;\n protected _index: number;\n protected _pos: number;\n protected _size: number;\n protected _height: number;\n protected _margin: { prev: number; next: number };\n protected _alignPos: number; // Actual align pos\n protected _removed: boolean;\n protected _loading: boolean;\n protected _toggleDirection: ValueOf;\n protected _toggled: boolean;\n protected _togglePosition: number;\n\n // Options\n protected _align: PanelOptions[\"align\"];\n\n // Internal States Getter\n /**\n * `HTMLElement` that panel's referencing\n * @ko 패널이 참조하고 있는 `HTMLElement`\n * @type {HTMLElement}\n * @readonly\n */\n abstract get element(): HTMLElement;\n /**\n * Index of the panel\n * @ko 패널의 인덱스\n * @type {number}\n * @readonly\n */\n public get index() { return this._index; }\n /**\n * Position of the panel, including {@link Panel#alignPosition alignPosition}\n * @ko 패널의 현재 좌표, {@link Panel#alignPosition alignPosition}을 포함하고 있습니다\n * @type {number}\n * @readonly\n */\n public get position() { return this._pos + this._alignPos; }\n /**\n * Cached size of the panel element\n * This is equal to {@link Panel#element element}'s `offsetWidth` if {@link Flicking#horizontal horizontal} is `true`, and `offsetHeight` else\n * @ko 패널 엘리먼트의 캐시된 크기\n * 이 값은 {@link Flicking#horizontal horizontal}이 `true`일 경우 {@link Panel#element element}의 `offsetWidth`와 동일하고, `false`일 경우 `offsetHeight`와 동일합니다\n * @type {number}\n * @readonly\n */\n public get size() { return this._size; }\n /**\n * Panel's size including CSS `margin`\n * This value includes {@link Panel#element element}'s margin left/right if {@link Flicking#horizontal horizontal} is `true`, and margin top/bottom else\n * @ko CSS `margin`을 포함한 패널의 크기\n * 이 값은 {@link Flicking#horizontal horizontal}이 `true`일 경우 margin left/right을 포함하고, `false`일 경우 margin top/bottom을 포함합니다\n * @type {number}\n * @readonly\n */\n public get sizeIncludingMargin() { return this._size + this._margin.prev + this._margin.next; }\n /**\n * Height of the panel element\n * @ko 패널 엘리먼트의 높이\n * @type {number}\n * @readonly\n */\n public get height() { return this._height; }\n /**\n * Cached CSS `margin` value of the panel element\n * @ko 패널 엘리먼트의 CSS `margin` 값\n * @type {object}\n * @property {number} prev CSS `margin-left` when the {@link Flicking#horizontal horizontal} is `true`, and `margin-top` else\n * {@link Flicking#horizontal horizontal}이 `true`일 경우 `margin-left`, `false`일 경우 `margin-top`에 해당하는 값\n * @property {number} next CSS `margin-right` when the {@link Flicking#horizontal horizontal} is `true`, and `margin-bottom` else\n * {@link Flicking#horizontal horizontal}이 `true`일 경우 `margin-right`, `false`일 경우 `margin-bottom`에 해당하는 값\n * @readonly\n */\n public get margin() { return this._margin; }\n /**\n * Align position inside the panel where {@link Camera}'s {@link Camera#alignPosition alignPosition} inside viewport should be located at\n * @ko 패널의 정렬 기준 위치. {@link Camera}의 뷰포트 내에서의 {@link Camera#alignPosition alignPosition}이 위치해야 하는 곳입니다\n * @type {number}\n * @readonly\n */\n public get alignPosition() { return this._alignPos; }\n /**\n * A value indicating whether the panel's {@link Flicking#remove remove}d\n * @ko 패널이 {@link Flicking#remove remove}되었는지 여부를 나타내는 값\n * @type {boolean}\n * @readonly\n */\n public get removed() { return this._removed; }\n /**\n * A value indicating whether the panel's image/video is not loaded and waiting for resize\n * @ko 패널 내부의 이미지/비디오가 아직 로드되지 않아 {@link Panel#resize resize}될 것인지를 나타내는 값\n * @type {boolean}\n * @readonly\n */\n public get loading() { return this._loading; }\n /**\n * A value indicating whether the panel's element is being rendered on the screen\n * @ko 패널의 엘리먼트가 화면상에 렌더링되고있는지 여부를 나타내는 값\n * @type {boolean}\n * @readonly\n */\n public abstract get rendered();\n /**\n * Panel element's range of the bounding box\n * @ko 패널 엘리먼트의 Bounding box 범위\n * @type {object}\n * @property {number} [min] Bounding box's left({@link Flicking#horizontal horizontal}: true) / top({@link Flicking#horizontal horizontal}: false)\n * @property {number} [max] Bounding box's right({@link Flicking#horizontal horizontal}: true) / bottom({@link Flicking#horizontal horizontal}: false)\n * @readonly\n */\n public get range() { return { min: this._pos, max: this._pos + this._size }; }\n /**\n * A value indicating whether the panel's position is toggled by circular behavior\n * @ko 패널의 위치가 circular 동작에 의해 토글되었는지 여부를 나타내는 값\n * @type {boolean}\n * @readonly\n */\n public get toggled() { return this._toggled; }\n /**\n * A direction where the panel's position is toggled\n * @ko 패널의 위치가 circular 동작에 의해 토글되는 방향\n * @type {DIRECTION}\n * @readonly\n */\n public get toggleDirection() { return this._toggleDirection; }\n /**\n * Actual position offset determined by {@link Panel#order}\n * @ko {@link Panel#order}에 의한 실제 위치 변경값\n * @type {number}\n * @readonly\n */\n public get offset() {\n const toggleDirection = this._toggleDirection;\n const cameraRangeDiff = this._flicking.camera.rangeDiff;\n\n return toggleDirection === DIRECTION.NONE || !this._toggled\n ? 0\n : toggleDirection === DIRECTION.PREV\n ? -cameraRangeDiff\n : cameraRangeDiff;\n }\n\n /**\n * Progress of movement between previous or next panel relative to current panel\n * @ko 이 패널로부터 이전/다음 패널으로의 이동 진행률\n * @type {number}\n * @readonly\n */\n public get progress() {\n const flicking = this._flicking;\n\n return this.index - flicking.camera.progress;\n }\n\n /**\n * Progress of movement between points that panel is completely invisible outside of viewport(prev direction: -1, selected point: 0, next direction: 1)\n * @ko 현재 패널이 뷰포트 영역 밖으로 완전히 사라지는 지점을 기준으로 하는 진행도(prev방향: -1, 선택 지점: 0, next방향: 1)\n * @type {number}\n * @readonly\n */\n public get outsetProgress() {\n const position = this.position + this.offset;\n const alignPosition = this._alignPos;\n const camera = this._flicking.camera;\n const camPos = camera.position;\n\n if (camPos === position) {\n return 0;\n }\n\n if (camPos < position) {\n const disappearPosNext = position + (camera.size - camera.alignPosition) + alignPosition;\n\n return -getProgress(camPos, position, disappearPosNext);\n } else {\n const disappearPosPrev = position - (camera.alignPosition + this._size - alignPosition);\n\n return 1 - getProgress(camPos, disappearPosPrev, position);\n }\n }\n\n /**\n * Percentage of area where panel is visible in the viewport\n * @ko 뷰포트 안에서 패널이 보이는 영역의 비율\n * @type {number}\n * @readonly\n */\n public get visibleRatio() {\n const range = this.range;\n const size = this._size;\n const offset = this.offset;\n const visibleRange = this._flicking.camera.visibleRange;\n\n const checkingRange = {\n min: range.min + offset,\n max: range.max + offset\n };\n\n if (checkingRange.max <= visibleRange.min || checkingRange.min >= visibleRange.max) {\n return 0;\n }\n\n let visibleSize = size;\n\n if (visibleRange.min > checkingRange.min) {\n visibleSize -= visibleRange.min - checkingRange.min;\n }\n if (visibleRange.max < checkingRange.max) {\n visibleSize -= checkingRange.max - visibleRange.max;\n }\n\n return visibleSize / size;\n }\n\n public set loading(val: boolean) { this._loading = val; }\n\n // Options Getter\n /**\n * A value indicating where the {@link Panel#alignPosition alignPosition} should be located at inside the panel element\n * @ko {@link Panel#alignPosition alignPosition}이 패널 내의 어디에 위치해야 하는지를 나타내는 값\n * @type {Constants.ALIGN | string | number}\n */\n public get align() { return this._align; }\n\n // Options Setter\n public set align(val: PanelOptions[\"align\"]) { this._align = val; }\n\n /**\n * @param {object} options An options object옵션 오브젝트\n * @param {number} [options.index] An initial index of the panel패널의 초기 인덱스\n * @param {Constants.ALIGN | string | number} [options.align] An initial {@link Flicking#align align} value of the panel패널의 초기 {@link Flicking#align align}값\n * @param {Flicking} [options.flicking] A Flicking instance panel's referencing패널이 참조하는 {@link Flicking} 인스턴스\n */\n public constructor({\n index,\n align,\n flicking\n }: PanelOptions) {\n this._index = index;\n this._flicking = flicking;\n\n this._align = align;\n\n this._removed = false;\n this._loading = false;\n this._resetInternalStates();\n }\n\n /**\n * Mark panel element to be appended on the camera element\n * @internal\n */\n public abstract markForShow();\n\n /**\n * Mark panel element to be removed from the camera element\n * @internal\n */\n public abstract markForHide();\n\n /**\n * Update size of the panel\n * @ko 패널의 크기를 갱신합니다\n * @param {object} cached Predefined cached size of the panel사전에 캐시된 패널의 크기 정보\n * @chainable\n * @return {this}\n */\n public resize(cached?: {\n size: number;\n height: number;\n margin: { prev: number; next: number };\n }): this {\n const el = this.element;\n const elStyle = getStyle(el);\n const flicking = this._flicking;\n const horizontal = flicking.horizontal;\n\n if (cached) {\n this._size = cached.size;\n this._margin = { ...cached.margin };\n this._height = cached.height;\n } else {\n this._size = horizontal ? el.offsetWidth : el.offsetHeight;\n this._margin = horizontal\n ? {\n prev: parseFloat(elStyle.marginLeft || \"0\"),\n next: parseFloat(elStyle.marginRight || \"0\")\n } : {\n prev: parseFloat(elStyle.marginTop || \"0\"),\n next: parseFloat(elStyle.marginBottom || \"0\")\n };\n this._height = horizontal ? el.offsetHeight : this._size;\n }\n\n this.updatePosition();\n this._updateAlignPos();\n\n return this;\n }\n\n /**\n * Change panel's size. This will change the actual size of the panel element by changing its CSS width/height property\n * @ko 패널 크기를 변경합니다. 패널 엘리먼트에 해당 크기의 CSS width/height를 적용합니다\n * @param {object} [size] New panel size새 패널 크기\n * @param {number|string} [size.width] CSS string or number(in px)CSS 문자열 또는 숫자(px)\n * @param {number|string} [size.height] CSS string or number(in px)CSS 문자열 또는 숫자(px)\n * @chainable\n * @return {this}\n */\n public setSize({\n width,\n height\n }: Partial<{\n width: number | string;\n height: number | string;\n }>): this {\n const el = this.element;\n\n if (width != null) {\n if (isString(width)) {\n el.style.width = width;\n } else {\n el.style.width = `${width}px`;\n }\n }\n if (height != null) {\n if (isString(height)) {\n el.style.height = height;\n } else {\n el.style.height = `${height}px`;\n }\n }\n\n return this;\n }\n\n /**\n * Check whether the given element is inside of this panel's {@link Panel#element element}\n * @ko 해당 엘리먼트가 이 패널의 {@link Panel#element element} 내에 포함되어 있는지를 반환합니다\n * @param {HTMLElement} element The HTMLElement to check확인하고자 하는 HTMLElement\n * @return {boolean} A Boolean value indicating the element is inside of this panel {@link Panel#element element}패널의 {@link Panel#element element}내에 해당 엘리먼트 포함 여부\n */\n public contains(element: HTMLElement): boolean {\n return !!this.element?.contains(element);\n }\n\n /**\n * Reset internal state and set {@link Panel#removed removed} to `true`\n * @ko 내부 상태를 초기화하고 {@link Panel#removed removed}를 `true`로 설정합니다.\n * @return {void}\n */\n public destroy(): void {\n this._resetInternalStates();\n this._removed = true;\n }\n\n /**\n * Check whether the given position is inside of this panel's {@link Panel#range range}\n * @ko 주어진 좌표가 현재 패널의 {@link Panel#range range}내에 속해있는지를 반환합니다.\n * @param {number} pos A position to check확인하고자 하는 좌표\n * @param {boolean} [includeMargin=false] Include {@link Panel#margin margin} to the range패널 영역에 {@link Panel#margin margin}값을 포함시킵니다\n * @return {boolean} A Boolean value indicating whether the given position is included in the panel range해당 좌표가 패널 영역 내에 속해있는지 여부\n */\n public includePosition(pos: number, includeMargin: boolean = false): boolean {\n return this.includeRange(pos, pos, includeMargin);\n }\n\n /**\n * Check whether the given range is fully included in this panel's area\n * @ko 주어진 범위가 이 패널 내부에 완전히 포함되는지를 반환합니다\n * @param {number} min Minimum value of the range to check확인하고자 하는 최소 범위\n * @param {number} max Maximum value of the range to check확인하고자 하는 최대 범위\n * @param {boolean} [includeMargin=false] Include {@link Panel#margin margin} to the range패널 영역에 {@link Panel#margin margin}값을 포함시킵니다\n * @returns {boolean} A Boolean value indicating whether the given range is fully included in the panel range해당 범위가 패널 영역 내에 완전히 속해있는지 여부\n */\n public includeRange(min: number, max: number, includeMargin: boolean = false): boolean {\n const margin = this._margin;\n const panelRange = this.range;\n\n if (includeMargin) {\n panelRange.min -= margin.prev;\n panelRange.max += margin.next;\n }\n\n return max >= panelRange.min && min <= panelRange.max;\n }\n\n /**\n * Move {@link Camera} to this panel\n * @ko {@link Camera}를 이 패널로 이동합니다\n * @param {number} [duration] Duration of the animation (unit: ms)애니메이션 진행 시간 (단위: ms)\n * @returns {Promise} A Promise which will be resolved after reaching the panel패널 도달시에 resolve되는 Promise\n */\n public focus(duration?: number) {\n return this._flicking.moveTo(this._index, duration);\n }\n\n /**\n * Get previous(`index - 1`) panel. When the previous panel does not exist, this will return `null` instead\n * If the {@link Flicking#circularEnabled circular} is enabled, this will return the last panel if called from the first panel\n * @ko 이전(`index - 1`) 패널을 반환합니다. 이전 패널이 없을 경우 `null`을 반환합니다\n * {@link Flicking#circularEnabled circular} 모드가 활성화되었을 때 첫번째 패널에서 이 메소드를 호출할 경우 마지막 패널을 반환합니다\n * @returns {Panel | null} The previous panel이전 패널\n */\n public prev(): Panel | null {\n const index = this._index;\n const flicking = this._flicking;\n const renderer = flicking.renderer;\n const panelCount = renderer.panelCount;\n\n if (panelCount === 1) return null;\n\n return flicking.circularEnabled\n ? renderer.getPanel(index === 0 ? panelCount - 1 : index - 1)\n : renderer.getPanel(index - 1);\n }\n\n /**\n * Get next(`index + 1`) panel. When the next panel does not exist, this will return `null` instead\n * If the {@link Flicking#circularEnabled circular} is enabled, this will return the first panel if called from the last panel\n * @ko 다음(`index + 1`) 패널을 반환합니다. 다음 패널이 없을 경우 `null`을 반환합니다\n * {@link Flicking#circularEnabled circular} 모드가 활성화되었을 때 마지막 패널에서 이 메소드를 호출할 경우 첫번째 패널을 반환합니다\n * @returns {Panel | null} The previous panel다음 패널\n */\n public next(): Panel | null {\n const index = this._index;\n const flicking = this._flicking;\n const renderer = flicking.renderer;\n const panelCount = renderer.panelCount;\n\n if (panelCount === 1) return null;\n\n return flicking.circularEnabled\n ? renderer.getPanel(index === panelCount - 1 ? 0 : index + 1)\n : renderer.getPanel(index + 1);\n }\n\n /**\n * Increase panel's index by the given value\n * @ko 패널의 인덱스를 주어진 값만큼 증가시킵니다\n * @internal\n * @chainable\n * @param val An integer greater than or equal to 00보다 같거나 큰 정수\n * @returns {this}\n */\n public increaseIndex(val: number): this {\n this._index += Math.max(val, 0);\n return this;\n }\n\n /**\n * Decrease panel's index by the given value\n * @ko 패널의 인덱스를 주어진 값만큼 감소시킵니다\n * @internal\n * @chainable\n * @param val An integer greater than or equal to 00보다 같거나 큰 정수\n * @returns {this}\n */\n public decreaseIndex(val: number): this {\n this._index -= Math.max(val, 0);\n return this;\n }\n\n /**\n * @internal\n */\n public updatePosition(): this {\n const prevPanel = this._flicking.renderer.panels[this._index - 1];\n\n this._pos = prevPanel\n ? prevPanel.range.max + prevPanel.margin.next + this._margin.prev\n : this._margin.prev;\n\n return this;\n }\n\n /**\n * @internal\n * @return {boolean} toggled\n */\n public toggle(prevPos: number, newPos: number): boolean {\n const toggleDirection = this._toggleDirection;\n const togglePosition = this._togglePosition;\n\n if (toggleDirection === DIRECTION.NONE || newPos === prevPos) return false;\n\n const prevToggled = this._toggled;\n\n if (newPos > prevPos) {\n if (togglePosition >= prevPos && togglePosition <= newPos) {\n this._toggled = toggleDirection === DIRECTION.NEXT;\n }\n } else {\n if (togglePosition <= prevPos && togglePosition >= newPos) {\n this._toggled = toggleDirection !== DIRECTION.NEXT;\n }\n }\n\n return prevToggled !== this._toggled;\n }\n\n /**\n * @internal\n */\n public updateCircularToggleDirection(): this {\n const flicking = this._flicking;\n\n if (!flicking.circularEnabled) {\n this._toggleDirection = DIRECTION.NONE;\n this._toggled = false;\n return this;\n }\n\n const camera = flicking.camera;\n const camRange = camera.range;\n const camAlignPosition = camera.alignPosition;\n const camVisibleRange = camera.visibleRange;\n const camVisibleSize = camVisibleRange.max - camVisibleRange.min;\n\n const minimumVisible = camRange.min - camAlignPosition;\n const maximumVisible = camRange.max - camAlignPosition + camVisibleSize;\n\n const shouldBeVisibleAtMin = this.includeRange(maximumVisible - camVisibleSize, maximumVisible, false);\n const shouldBeVisibleAtMax = this.includeRange(minimumVisible, minimumVisible + camVisibleSize, false);\n\n this._toggled = false;\n if (shouldBeVisibleAtMin) {\n this._toggleDirection = DIRECTION.PREV;\n this._togglePosition = this.range.max + camRange.min - camRange.max + camAlignPosition;\n this.toggle(Infinity, camera.position);\n } else if (shouldBeVisibleAtMax) {\n this._toggleDirection = DIRECTION.NEXT;\n this._togglePosition = this.range.min + camRange.max - camVisibleSize + camAlignPosition;\n this.toggle(-Infinity, camera.position);\n } else {\n this._toggleDirection = DIRECTION.NONE;\n this._togglePosition = 0;\n }\n\n return this;\n }\n\n private _updateAlignPos() {\n this._alignPos = parseAlign(this._align, this._size);\n }\n\n private _resetInternalStates() {\n this._size = 0;\n this._pos = 0;\n this._margin = { prev: 0, next: 0 };\n this._height = 0;\n this._alignPos = 0;\n this._toggled = false;\n this._togglePosition = 0;\n this._toggleDirection = DIRECTION.NONE;\n }\n}\n\nexport default Panel;\n","/*\n * Copyright (c) 2015 NAVER Corp.\n * egjs projects are licensed under the MIT license\n */\nimport Panel, { PanelOptions } from \"./Panel\";\n\nexport interface ElementPanelOptions extends PanelOptions {\n el: HTMLElement;\n}\n\n/**\n * An slide data component that holds information of a single HTMLElement\n * @ko 슬라이드 데이터 컴포넌트로, 단일 HTMLElement의 정보를 갖고 있습니다\n */\nclass ElementPanel extends Panel {\n private _el: HTMLElement;\n private _rendered: boolean;\n\n /**\n * `HTMLElement` that panel's referencing\n * @ko 패널이 참조하고 있는 `HTMLElement`\n * @type {HTMLElement}\n * @readonly\n */\n public get element() { return this._el; }\n\n public get rendered() { return this._rendered; }\n\n /**\n * @param {object} options An options object옵션 오브젝트\n * @param {HTMLElement} [options.el] A `HTMLElement` panel's referencing패널이 참조하는 `HTMLElement`\n * @param {number} [options.index] An initial index of the panel패널의 초기 인덱스\n * @param {Constants.ALIGN | string | number} [options.align] An initial {@link Flicking#align align} value of the panel패널의 초기 {@link Flicking#align align}값\n * @param {Flicking} [options.flicking] A Flicking instance panel's referencing패널이 참조하는 {@link Flicking} 인스턴스\n */\n public constructor(options: ElementPanelOptions) {\n super(options);\n\n this._el = options.el;\n this._rendered = true;\n }\n\n public markForShow() {\n this._rendered = true;\n }\n\n public markForHide() {\n this._rendered = false;\n }\n}\n\nexport default ElementPanel;\n","/*\n * Copyright (c) 2015 NAVER Corp.\n * egjs projects are licensed under the MIT license\n */\nimport { getFlickingAttached, toArray } from \"../utils\";\nimport Panel, { PanelOptions } from \"../core/panel/Panel\";\nimport ElementPanel from \"../core/panel/ElementPanel\";\n\nimport Renderer from \"./Renderer\";\n\n/**\n *\n */\nclass VanillaRenderer extends Renderer {\n // eslint-disable-next-line @typescript-eslint/require-await\n public async render() {\n const flicking = getFlickingAttached(this._flicking, \"Renderer\");\n const cameraEl = flicking.camera.element;\n const wasRenderedPanels = this._panels.filter(panel => panel.element.parentElement === cameraEl);\n\n this._updateRenderingPanels();\n const renderingPanels = this._getRenderingPanelsByOrder();\n\n this._removePanelElements(wasRenderedPanels.filter(panel => !panel.rendered));\n this._insertPanelElements(renderingPanels.filter(panel => panel.element.parentElement !== cameraEl), null);\n this._resetPanelElementOrder(renderingPanels);\n }\n\n // eslint-disable-next-line @typescript-eslint/require-await\n public async forceRenderAllPanels() {\n const flicking = getFlickingAttached(this._flicking, \"Renderer\");\n const camera = flicking.camera;\n const cameraElement = camera.element;\n const fragment = document.createDocumentFragment();\n\n this._panels.forEach(panel => fragment.appendChild(panel.element));\n\n this._removeAllChildsFromCamera();\n\n cameraElement.appendChild(fragment);\n }\n\n protected _collectPanels() {\n const flicking = getFlickingAttached(this._flicking, \"Renderer\");\n\n const cameraElement = flicking.camera.element;\n\n // Remove all text nodes in the camera element\n toArray(cameraElement.childNodes).forEach(node => {\n if (node.nodeType === Node.TEXT_NODE) {\n cameraElement.removeChild(node);\n }\n });\n\n const align = this._getPanelAlign();\n const cameraChilds = toArray(cameraElement.children);\n\n this._panels = cameraChilds.map(\n (el: HTMLElement, index: number) => new ElementPanel({ flicking, el, index, align })\n );\n }\n\n protected _createPanel(el: HTMLElement, options: PanelOptions): ElementPanel {\n return new ElementPanel({ el, ...options });\n }\n\n protected _insertPanelElements(panels: Panel[], nextSibling: Panel | null) {\n const flicking = getFlickingAttached(this._flicking, \"Renderer\");\n const camera = flicking.camera;\n const cameraElement = camera.element;\n const nextSiblingElement = nextSibling?.element || null;\n const fragment = document.createDocumentFragment();\n\n panels.forEach(panel => fragment.appendChild(panel.element));\n cameraElement.insertBefore(fragment, nextSiblingElement);\n\n return this;\n }\n\n protected _removePanelElements(panels: Panel[]): this {\n const flicking = getFlickingAttached(this._flicking, \"Renderer\");\n const cameraElement = flicking.camera.element;\n\n panels.forEach(panel => {\n cameraElement.removeChild(panel.element);\n });\n\n return this;\n }\n\n private _resetPanelElementOrder(panels: Panel[]) {\n const flicking = getFlickingAttached(this._flicking, \"Renderer\");\n const cameraEl = flicking.camera.element;\n\n // We're using reversed panels here as last panel should be the last element of camera element\n const reversedPanels = [...panels].reverse();\n reversedPanels.forEach((panel, idx) => {\n const nextPanel = reversedPanels[idx - 1];\n const nextPanelEl = nextPanel ? nextPanel.element : null;\n\n if (panel.element.nextElementSibling !== nextPanelEl) {\n cameraEl.insertBefore(panel.element, nextPanelEl);\n }\n });\n }\n\n private _removeAllChildsFromCamera() {\n const flicking = getFlickingAttached(this._flicking, \"Renderer\");\n const cameraElement = flicking.camera.element;\n\n // Remove other elements\n while (cameraElement.firstChild) {\n cameraElement.removeChild(cameraElement.firstChild);\n }\n }\n\n private _getRenderingPanelsByOrder(): Panel[] {\n const flicking = getFlickingAttached(this._flicking, \"Renderer\");\n const panels = flicking.renderer.panels;\n\n return panels.filter(panel => panel.rendered)\n .sort((a, b) => (a.position + a.offset) - (b.position + b.offset));\n }\n}\n\nexport default VanillaRenderer;\n","/*\n * Copyright (c) 2015 NAVER Corp.\n * egjs projects are licensed under the MIT license\n */\nimport Panel from \"../core/panel/Panel\";\n\nimport Renderer from \"./Renderer\";\n\n/**\n *\n */\nabstract class ExternalRenderer extends Renderer {\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n protected _insertPanelElements(panels: Panel[], nextSibling: Panel | null): void {\n // DO NOTHING\n }\n\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n protected _removePanelElements(panels: Panel[]): void {\n // DO NOTHING\n }\n}\n\nexport default ExternalRenderer;\n","/*\n * Copyright (c) 2015 NAVER Corp.\n * egjs projects are licensed under the MIT license\n */\nimport Renderer, { RendererOptions } from \"./Renderer\";\nimport VanillaRenderer from \"./VanillaRenderer\";\nimport ExternalRenderer from \"./ExternalRenderer\";\n\nexport {\n Renderer,\n VanillaRenderer,\n ExternalRenderer\n};\n\nexport type {\n RendererOptions\n};\n","/*\n * Copyright (c) 2015 NAVER Corp.\n * egjs projects are licensed under the MIT license\n */\nimport Component, { ComponentEvent } from \"@egjs/component\";\n\nimport FlickingError from \"./core/FlickingError\";\nimport Viewport from \"./core/Viewport\";\nimport { Panel } from \"./core/panel\";\nimport { Control, SnapControl, SnapControlOptions, FreeControl, StrictControl, FreeControlOptions, StrictControlOptions } from \"./control\";\nimport { BoundCamera, Camera, CircularCamera, LinearCamera } from \"./camera\";\nimport { Renderer, VanillaRenderer, ExternalRenderer } from \"./renderer\";\nimport { EVENTS, ALIGN, MOVE_TYPE, DIRECTION } from \"./const/external\";\nimport * as ERROR from \"./const/error\";\nimport { findIndex, getElement, includes, parseElement } from \"./utils\";\nimport { HoldStartEvent, HoldEndEvent, MoveStartEvent, SelectEvent, MoveEvent, MoveEndEvent, WillChangeEvent, WillRestoreEvent, NeedPanelEvent, VisibleChangeEvent, ReachEdgeEvent, ReadyEvent, AfterResizeEvent, BeforeResizeEvent, ChangedEvent, RestoredEvent, PanelChangeEvent } from \"./type/event\";\nimport { LiteralUnion, ValueOf } from \"./type/internal\";\nimport { ElementLike, Plugin, Status, MoveTypeOptions } from \"./type/external\";\n\n/**\n * @interface\n */\nexport interface FlickingEvents {\n [EVENTS.READY]: ReadyEvent;\n [EVENTS.BEFORE_RESIZE]: BeforeResizeEvent;\n [EVENTS.AFTER_RESIZE]: AfterResizeEvent;\n [EVENTS.HOLD_START]: HoldStartEvent;\n [EVENTS.HOLD_END]: HoldEndEvent;\n [EVENTS.MOVE_START]: MoveStartEvent;\n [EVENTS.MOVE]: MoveEvent;\n [EVENTS.MOVE_END]: MoveEndEvent;\n [EVENTS.WILL_CHANGE]: WillChangeEvent;\n [EVENTS.CHANGED]: ChangedEvent;\n [EVENTS.WILL_RESTORE]: WillRestoreEvent;\n [EVENTS.RESTORED]: RestoredEvent;\n [EVENTS.SELECT]: SelectEvent;\n [EVENTS.NEED_PANEL]: NeedPanelEvent;\n [EVENTS.VISIBLE_CHANGE]: VisibleChangeEvent;\n [EVENTS.REACH_EDGE]: ReachEdgeEvent;\n [EVENTS.PANEL_CHANGE]: PanelChangeEvent;\n}\n\n/**\n * @interface\n */\nexport interface FlickingOptions {\n // UI / LAYOUT\n align: LiteralUnion> | number | { panel: number | string; camera: number | string };\n defaultIndex: number;\n horizontal: boolean;\n circular: boolean;\n bound: boolean;\n adaptive: boolean;\n panelsPerView: number;\n noPanelStyleOverride: boolean;\n resizeOnContentsReady: boolean;\n // EVENT\n needPanelThreshold: number;\n preventEventsBeforeInit: boolean;\n // ANIMATION\n deceleration: number;\n duration: number;\n easing: (x: number) => number;\n // INPUT\n inputType: string[];\n moveType: ValueOf | MoveTypeOptions>;\n threshold: number;\n interruptable: boolean;\n bounce: number | string | [number | string, number | string];\n iOSEdgeSwipeThreshold: number;\n preventClickOnDrag: boolean;\n disableOnInit: boolean;\n // PERFORMANCE\n renderOnlyVisible: boolean;\n // OTHERS\n autoInit: boolean;\n autoResize: boolean;\n renderExternal: {\n renderer: typeof ExternalRenderer;\n rendererOptions: {[key: string]: any};\n } | null;\n}\n\n/**\n * @extends Component\n * @support {\"ie\": \"9+(with polyfill)\", \"ch\" : \"latest\", \"ff\" : \"latest\", \"sf\" : \"latest\", \"edge\" : \"latest\", \"ios\" : \"7+\", \"an\" : \"4.X+\"}\n * @requires {@link https://github.com/naver/egjs-component|@egjs/component}\n * @requires {@link https://github.com/naver/egjs-axes|@egjs/axes}\n */\nclass Flicking extends Component {\n /**\n * Version info string\n * @ko 버전정보 문자열\n * @type {string}\n * @readonly\n * @example\n * ```ts\n * Flicking.VERSION; // ex) 4.0.0\n * ```\n */\n public static VERSION = \"#__VERSION__#\";\n\n // Core components\n private _viewport: Viewport;\n private _camera: Camera;\n private _control: Control;\n private _renderer: Renderer;\n\n // Options\n private _align: FlickingOptions[\"align\"];\n private _defaultIndex: FlickingOptions[\"defaultIndex\"];\n private _horizontal: FlickingOptions[\"horizontal\"];\n private _circular: FlickingOptions[\"circular\"];\n private _bound: FlickingOptions[\"bound\"];\n private _adaptive: FlickingOptions[\"adaptive\"];\n private _panelsPerView: FlickingOptions[\"panelsPerView\"];\n private _noPanelStyleOverride: FlickingOptions[\"noPanelStyleOverride\"];\n private _resizeOnContentsReady: FlickingOptions[\"resizeOnContentsReady\"];\n\n private _needPanelThreshold: FlickingOptions[\"needPanelThreshold\"];\n private _preventEventsBeforeInit: FlickingOptions[\"preventEventsBeforeInit\"];\n\n private _deceleration: FlickingOptions[\"deceleration\"];\n private _duration: FlickingOptions[\"duration\"];\n private _easing: FlickingOptions[\"easing\"];\n\n private _inputType: FlickingOptions[\"inputType\"];\n private _moveType: FlickingOptions[\"moveType\"];\n private _threshold: FlickingOptions[\"threshold\"];\n private _interruptable: FlickingOptions[\"interruptable\"];\n private _bounce: FlickingOptions[\"bounce\"];\n private _iOSEdgeSwipeThreshold: FlickingOptions[\"iOSEdgeSwipeThreshold\"];\n private _preventClickOnDrag: FlickingOptions[\"preventClickOnDrag\"];\n private _disableOnInit: FlickingOptions[\"disableOnInit\"];\n\n private _renderOnlyVisible: FlickingOptions[\"renderOnlyVisible\"];\n\n private _autoResize: FlickingOptions[\"autoResize\"];\n private _autoInit: FlickingOptions[\"autoInit\"];\n private _renderExternal: FlickingOptions[\"renderExternal\"];\n\n // Internal State\n private _initialized: boolean;\n private _plugins: Plugin[];\n\n // Components\n /**\n * {@link Control} instance of the Flicking\n * @ko 현재 Flicking에 활성화된 {@link Control} 인스턴스\n * @type {Control}\n * @default SnapControl\n * @readonly\n * @see Control\n * @see SnapControl\n * @see FreeControl\n */\n public get control() { return this._control; }\n /**\n * {@link Camera} instance of the Flicking\n * @ko 현재 Flicking에 활성화된 {@link Camera} 인스턴스\n * @type {Camera}\n * @default LinearCamera\n * @readonly\n * @see Camera\n * @see LinearCamera\n * @see BoundCamera\n * @see CircularCamera\n */\n public get camera() { return this._camera; }\n /**\n * {@link Renderer} instance of the Flicking\n * @ko 현재 Flicking에 활성화된 {@link Renderer} 인스턴스\n * @type {Renderer}\n * @default VanillaRenderer\n * @readonly\n * @see Renderer\n * @see VanillaRenderer\n * @see ExternalRenderer\n */\n public get renderer() { return this._renderer; }\n /**\n * A component that manages viewport size\n * @ko 뷰포트 크기 정보를 담당하는 컴포넌트\n * @type {Viewport}\n * @readonly\n * @see Viewport\n */\n public get viewport() { return this._viewport; }\n // Internal States\n /**\n * Whether Flicking's {@link Flicking#init init()} is called.\n * This is `true` when {@link Flicking#init init()} is called, and is `false` after calling {@link Flicking#destroy destroy()}.\n * @ko Flicking의 {@link Flicking#init init()}이 호출되었는지를 나타내는 멤버 변수.\n * 이 값은 {@link Flicking#init init()}이 호출되었으면 `true`로 변하고, {@link Flicking#destroy destroy()}호출 이후에 다시 `false`로 변경됩니다.\n * @type {boolean}\n * @default false\n * @readonly\n */\n public get initialized() { return this._initialized; }\n /**\n * Whether the `circular` option is enabled.\n * The {@link Flicking#circular circular} option can't be enabled when sum of the panel sizes are too small.\n * @ko {@link Flicking#circular circular} 옵션이 활성화되었는지 여부를 나타내는 멤버 변수.\n * {@link Flicking#circular circular} 옵션은 패널의 크기의 합이 충분하지 않을 경우 비활성화됩니다.\n * @type {boolean}\n * @default false\n * @readonly\n */\n public get circularEnabled() { return this._camera.controlParams.circular; }\n /**\n * Index number of the {@link Flicking#currentPanel currentPanel}\n * @ko {@link Flicking#currentPanel currentPanel}의 인덱스 번호\n * @type {number}\n * @default 0\n * @readonly\n */\n public get index() { return this._control.activeIndex; }\n /**\n * The root(`.flicking-viewport`) element\n * @ko root(`.flicking-viewport`) 엘리먼트\n * @type {HTMLElement}\n * @readonly\n */\n public get element() { return this._viewport.element; }\n /**\n * Currently active panel\n * @ko 현재 선택된 패널\n * @type {Panel}\n * @readonly\n * @see Panel\n */\n public get currentPanel() { return this._control.activePanel; }\n /**\n * Array of panels\n * @ko 전체 패널들의 배열\n * @type {Panel[]}\n * @readonly\n * @see Panel\n */\n public get panels() { return this._renderer.panels; }\n /**\n * Count of panels\n * @ko 전체 패널의 개수\n * @type {number}\n * @readonly\n */\n public get panelCount() { return this._renderer.panelCount; }\n /**\n * Array of panels that is visible at the current position\n * @ko 현재 보이는 패널의 배열\n * @type {Panel[]}\n * @readonly\n * @see Panel\n */\n public get visiblePanels() { return this._camera.visiblePanels; }\n /**\n * Whether Flicking's animating\n * @ko 현재 애니메이션 동작 여부\n * @type {boolean}\n * @readonly\n */\n public get animating() { return this._control.animating; }\n /**\n * Whether user is clicking or touching\n * @ko 현재 사용자가 클릭/터치중인지 여부\n * @type {boolean}\n * @readonly\n */\n public get holding() { return this._control.holding; }\n /**\n * A current list of activated plugins\n * @ko 현재 활성화된 플러그인 목록\n * @type {Plugin[]}\n * @readonly\n */\n public get activePlugins() { return this._plugins; }\n\n // Options Getter\n // UI / LAYOUT\n /**\n * Align position of the panels within viewport. You can set different values each for the panel and camera\n * @ko 뷰포트 내에서 패널 정렬방식을 설정하는 옵션. 카메라와 패널 개별로 옵션을 설정할 수도 있습니다\n * @type {ALIGN | string | number | { panel: string | number, camera: string | number }}\n * @property {ALIGN | string | number} panel The align value for each {@link Panel}s개개의 {@link Panel}에 적용할 값\n * @property {ALIGN | string | number} camera The align value for {@link Camera}{@link Camera}에 적용할 값\n * @default \"center\"\n * @example\n * ```ts\n * const possibleOptions = [\n * // Literal strings\n * \"prev\", \"center\", \"next\",\n * // % values, applied to both panel & camera\n * \"0%\", \"25%\", \"42%\",\n * // px values, arithmetic calculation with (+/-) is also allowed.\n * \"0px\", \"100px\", \"50% - 25px\",\n * // numbers, same to number + px (\"0px\", \"100px\")\n * 0, 100, 1000,\n * // Setting a different value for panel & camera\n * { panel: \"10%\", camera: \"25%\" }\n * ];\n *\n * possibleOptions.forEach(align => {\n * new Flicking(\"#el\", { align });\n * });\n * ```\n */\n public get align() { return this._align; }\n /**\n * Index of the panel to move when Flicking's {@link Flicking#init init()} is called. A zero-based integer\n * @ko Flicking의 {@link Flicking#init init()}이 호출될 때 이동할 디폴트 패널의 인덱스로, 0부터 시작하는 정수입니다\n * @type {number}\n * @default 0\n */\n public get defaultIndex() { return this._defaultIndex; }\n /**\n * Direction of panel movement (true: horizontal, false: vertical)\n * @ko 패널 이동 방향 (true: 가로방향, false: 세로방향)\n * @type {boolean}\n * @default true\n */\n public get horizontal() { return this._horizontal; }\n /**\n * Enables circular(continuous loop) mode, which connects first/last panel for continuous scrolling.\n * @ko 순환 모드를 활성화합니다. 순환 모드에서는 양 끝의 패널이 서로 연결되어 끊김없는 스크롤이 가능합니다.\n * @type {boolean}\n * @default false\n */\n public get circular() { return this._circular; }\n /**\n * Prevent the view(camera element) from going out of the first/last panel, so it won't show empty spaces before/after the first/last panel\n * Only can be enabled when `circular=false`\n * @ko 뷰(카메라 엘리먼트)가 첫번째와 마지막 패널 밖으로 넘어가지 못하게 하여, 첫번째/마지막 패널 전/후의 빈 공간을 보이지 않도록 하는 옵션입니다\n * `circular=false`인 경우에만 사용할 수 있습니다\n * @type {boolean}\n * @default false\n */\n public get bound() { return this._bound; }\n /**\n * Update height of the viewport element after movement same to the height of the panel below. This can be only enabled when `horizontal=true`\n * @ko 이동한 후 뷰포트 엘리먼트의 크기를 현재 패널의 높이와 동일하게 설정합니다. `horizontal=true`인 경우에만 사용할 수 있습니다.\n * @type {boolean}\n * @default false\n */\n public get adaptive() { return this._adaptive; }\n /**\n * A visible number of panels on viewport. Enabling this option will automatically resize panel size\n * @ko 한 화면에 보이는 패널의 개수. 이 옵션을 활성화할 경우 패널의 크기를 강제로 재조정합니다\n * @type {number}\n * @default -1\n */\n public get panelsPerView() { return this._panelsPerView; }\n /**\n * Enabling this option will not change `width/height` style of the panels if {@link Flicking#panelsPerView} is enabled.\n * This behavior can be useful in terms of performance when you're manually managing all panel sizes\n * @ko 이 옵션을 활성화할 경우, {@link Flicking#panelsPerView} 옵션이 활성화되었을 때 패널의 `width/height` 스타일을 변경하지 않도록 설정합니다.\n * 모든 패널들의 크기를 직접 관리하고 있을 경우, 이 옵션을 활성화하면 성능면에서 유리할 수 있습니다\n * @type {boolean}\n * @default false\n */\n public get noPanelStyleOverride() { return this._noPanelStyleOverride; }\n /**\n * Enabling this option will automatically call {@link Flicking#resize} when all image/video inside panels are loaded.\n * This can be useful when you have contents inside Flicking that changes its size when it's loaded\n * @ko 이 옵션을 활성화할 경우, Flicking 패널 내부의 이미지/비디오들이 로드되었을 때 자동으로 {@link Flicking#resize}를 호출합니다.\n * 이 동작은 Flicking 내부에 로드 전/후로 크기가 변하는 콘텐츠를 포함하고 있을 때 유용하게 사용하실 수 있습니다.\n * @type {boolean}\n * @default false\n */\n public get resizeOnContentsReady() { return this._resizeOnContentsReady; }\n // EVENTS\n /**\n * A Threshold from viewport edge before triggering `needPanel` event\n * @ko `needPanel`이벤트가 발생하기 위한 뷰포트 끝으로부터의 최대 거리\n * @type {number}\n * @default 0\n */\n public get needPanelThreshold() { return this._needPanelThreshold; }\n /**\n * When enabled, events are not triggered before `ready` when initializing\n * @ko 활성화할 경우 초기화시 `ready` 이벤트 이전의 이벤트가 발생하지 않습니다.\n * @type {boolean}\n * @default true\n */\n public get preventEventsBeforeInit() { return this._preventEventsBeforeInit; }\n // ANIMATION\n /**\n * Deceleration value for panel movement animation which is triggered by user input. A higher value means a shorter animation time\n * @ko 사용자의 동작으로 가속도가 적용된 패널 이동 애니메이션의 감속도. 값이 높을수록 애니메이션 실행 시간이 짧아집니다\n * @type {number}\n * @default 0.0075\n */\n public get deceleration() { return this._deceleration; }\n /**\n * An easing function applied to the panel movement animation. Default value is `easeOutCubic`\n * @ko 패널 이동 애니메이션에 적용할 easing 함수. 기본값은 `easeOutCubic`이다\n * @type {function}\n * @default x => 1 - Math.pow(1 - x, 3)\n * @see Easing Functions Cheat Sheet {@link http://easings.net/} 이징 함수 Cheat Sheet {@link http://easings.net/}\n */\n public get easing() { return this._easing; }\n /**\n * Default duration of the animation (ms)\n * @ko 디폴트 애니메이션 재생 시간 (ms)\n * @type {number}\n * @default 500\n */\n public get duration() { return this._duration; }\n // INPUT\n /**\n * Types of input devices to enable\n * @ko 활성화할 입력 장치 종류\n * @type {string[]}\n * @default [\"touch\", \"mouse\"]\n * @see {@link https://naver.github.io/egjs-axes/release/latest/doc/global.html#PanInputOption Possible values (PanInputOption#inputType)}\n * {@link https://naver.github.io/egjs-axes/release/latest/doc/global.html#PanInputOption 가능한 값들 (PanInputOption#inputType)}\n */\n public get inputType() { return this._inputType; }\n /**\n * Movement style by user input. This will change instance type of {@link Flicking#control}\n * You can use the values of the constant {@link MOVE_TYPE}\n * @ko 사용자 입력에 의한 이동 방식. 이 값에 따라 {@link Flicking#control}의 인스턴스 타입이 결정됩니다\n * 상수 {@link MOVE_TYPE}에 정의된 값들을 이용할 수 있습니다\n * @type {MOVE_TYPE | Pair}\n * @default \"snap\"\n * @example\n * |moveType|control|options|\n * |:---:|:---:|:---:|\n * |\"snap\"|{@link SnapControl}||\n * |\"freeScroll\"|{@link FreeControl}|{@link FreeControlOptions}|\n *\n * ```ts\n * import Flicking, { MOVE_TYPE } from \"@egjs/flicking\";\n *\n * const flicking = new Flicking({\n * moveType: MOVE_TYPE.SNAP\n * });\n * ```\n *\n * ```ts\n * const flicking = new Flicking({\n * // If you want more specific settings for the moveType\n * // [moveType, options for that moveType]\n * // In this case, it's [\"freeScroll\", FreeControlOptions]\n * moveType: [MOVE_TYPE.FREE_SCROLL, { stopAtEdge: true }]\n * });\n * ```\n */\n public get moveType() { return this._moveType; }\n /**\n * Movement threshold to change panel (unit: px). It should be dragged above the threshold to change the current panel.\n * @ko 패널 변경을 위한 이동 임계값 (단위: px). 주어진 값 이상으로 스크롤해야만 패널 변경이 가능하다.\n * @type {number}\n * @default 40\n */\n public get threshold() { return this._threshold; }\n /**\n * Set animation to be interruptable by click/touch.\n * @ko 사용자의 클릭/터치로 인해 애니메이션을 도중에 멈출 수 있도록 설정합니다.\n * @type {boolean}\n * @default true\n */\n public get interruptable() { return this._interruptable; }\n /**\n * The size value of the bounce area. Only can be enabled when `circular=false`.\n * You can set different bounce value for prev/next direction by using array.\n * `number` for px value, and `string` for px, and % value relative to viewport size.\n * You have to call {@link Control#updateInput} after changing this to take effect.\n * @ko Flicking이 최대 영역을 넘어서 갈 수 있는 최대 크기. `circular=false`인 경우에만 사용할 수 있습니다.\n * 배열을 통해 prev/next 방향에 대해 서로 다른 바운스 값을 지정할 수 있습니다.\n * `number`를 통해 px값을, `stirng`을 통해 px 혹은 뷰포트 크기 대비 %값을 사용할 수 있습니다.\n * 이 값을 변경시 {@link Control#updateInput}를 호출해야 합니다.\n * @type {string | number | Array}\n * @default \"20%\"\n * @example\n * ```ts\n * const possibleOptions = [\n * // % values, relative to viewport element(\".flicking-viewport\")'s size\n * \"0%\", \"25%\", \"42%\",\n * // px values, arithmetic calculation with (+/-) is also allowed.\n * \"0px\", \"100px\", \"50% - 25px\",\n * // numbers, same to number + px (\"0px\", \"100px\")\n * 0, 100, 1000\n * ];\n * ```\n *\n * @example\n * ```ts\n * const flicking = new Flicking(\"#el\", { bounce: \"20%\" });\n *\n * flicking.bounce = \"100%\";\n * flicking.control.updateInput(); // Call this to update!\n * ```\n */\n public get bounce() { return this._bounce; }\n /**\n * Size of the area from the right edge in iOS safari (in px) which enables swipe-back or swipe-forward\n * @ko iOS Safari에서 swipe를 통한 뒤로가기/앞으로가기를 활성화하는 오른쪽 끝으로부터의 영역의 크기 (px)\n * @type {number}\n * @default 30\n */\n public get iOSEdgeSwipeThreshold() { return this._iOSEdgeSwipeThreshold; }\n /**\n * Automatically prevent `click` event if the user has dragged at least a single pixel on the viewport element\n * @ko 사용자가 뷰포트 영역을 1픽셀이라도 드래그했을 경우 자동으로 {@link https://developer.mozilla.org/ko/docs/Web/API/Element/click_event click} 이벤트를 취소합니다\n * @type {boolean}\n * @default true\n */\n public get preventClickOnDrag() { return this._preventClickOnDrag; }\n /**\n * Automatically call {@link Flicking#disableInput disableInput()} on initialization\n * @ko Flicking init시에 {@link Flicking#disableInput disableInput()}을 바로 호출합니다\n * @type {boolean}\n * @default false\n */\n public get disableOnInit() { return this._disableOnInit; }\n // PERFORMANCE\n /**\n * Whether to render visible panels only. This can dramatically increase performance when there're many panels.\n * @ko 보이는 패널만 렌더링할지 여부를 설정합니다. 패널이 많을 경우에 퍼포먼스를 크게 향상시킬 수 있습니다.\n * @type {boolean}\n * @default false\n */\n public get renderOnlyVisible() { return this._renderOnlyVisible; }\n // OTHERS\n /**\n * Call {@link Flicking#init init()} automatically when creating Flicking's instance\n * @ko Flicking 인스턴스를 생성할 때 자동으로 {@link Flicking#init init()}를 호출합니다\n * @type {boolean}\n * @default true\n * @readonly\n */\n public get autoInit() { return this._autoInit; }\n /**\n * Attach Flicking's {@link Flicking#resize resize} method to window's resize event.\n * Flicking will automatically call {@link Flicking#resize resize} window size and orientation change.\n * @ko Flicking의 {@link Flicking#resize resize} 메소드를 window의 resize 이벤트 핸들러로 등록합니다.\n * 설정시 window 창 크기 및 orientation 변경에 의해 자동으로 {@link Flicking#resize resize}를 호출합니다.\n * @type {boolean}\n * @default true\n */\n public get autoResize() { return this._autoResize; }\n /**\n * This is an option for the frameworks(React, Vue, Angular, ...). Don't set it as it's automatically managed by Flicking.\n * @ko 프레임워크(React, Vue, Angular, ...)에서만 사용하는 옵션으로, 자동으로 설정되므로 따로 사용하실 필요 없습니다!\n * @type {boolean}\n * @default false\n * @internal\n * @readonly\n */\n public get renderExternal() { return this._renderExternal; }\n\n // Options Setter\n // UI / LAYOUT\n public set align(val: FlickingOptions[\"align\"]) {\n this._align = val;\n this._renderer.align = val;\n this._camera.align = val;\n }\n\n public set defaultIndex(val: FlickingOptions[\"defaultIndex\"]) { this._defaultIndex = val; }\n public set horizontal(val: FlickingOptions[\"horizontal\"]) { this._horizontal = val; }\n public set circular(val: FlickingOptions[\"circular\"]) { this._circular = val; }\n public set bound(val: FlickingOptions[\"bound\"]) { this._bound = val; }\n public set adaptive(val: FlickingOptions[\"adaptive\"]) { this._adaptive = val; }\n public set panelsPerView(val: FlickingOptions[\"panelsPerView\"]) { this._panelsPerView = val; }\n public set noPanelStyleOverride(val: FlickingOptions[\"noPanelStyleOverride\"]) { this._noPanelStyleOverride = val; }\n public set resizeOnContentsReady(val: FlickingOptions[\"resizeOnContentsReady\"]) { this._resizeOnContentsReady = val; }\n // EVENTS\n public set needPanelThreshold(val: FlickingOptions[\"needPanelThreshold\"]) { this._needPanelThreshold = val; }\n public set preventEventsBeforeInit(val: FlickingOptions[\"preventEventsBeforeInit\"]) { this._preventEventsBeforeInit = val; }\n // ANIMATION\n public set deceleration(val: FlickingOptions[\"deceleration\"]) { this._deceleration = val; }\n public set easing(val: FlickingOptions[\"easing\"]) { this._easing = val; }\n public set duration(val: FlickingOptions[\"duration\"]) { this._duration = val; }\n // INPUT\n public set inputType(val: FlickingOptions[\"inputType\"]) { this._inputType = val; }\n public set moveType(val: FlickingOptions[\"moveType\"]) { this._moveType = val; }\n public set threshold(val: FlickingOptions[\"threshold\"]) { this._threshold = val; }\n public set interruptable(val: FlickingOptions[\"interruptable\"]) { this._interruptable = val; }\n public set bounce(val: FlickingOptions[\"bounce\"]) { this._bounce = val; }\n public set iOSEdgeSwipeThreshold(val: FlickingOptions[\"iOSEdgeSwipeThreshold\"]) { this._iOSEdgeSwipeThreshold = val; }\n public set preventClickOnDrag(val: FlickingOptions[\"preventClickOnDrag\"]) {\n const prevVal = this._preventClickOnDrag;\n\n if (val === prevVal) return;\n\n const controller = this._control.controller;\n\n if (val) {\n controller.addPreventClickHandler();\n } else {\n controller.removePreventClickHandler();\n }\n\n this._preventClickOnDrag = val;\n }\n\n public set disableOnInit(val: FlickingOptions[\"disableOnInit\"]) { this._disableOnInit = val; }\n // PERFORMANCE\n public set renderOnlyVisible(val: FlickingOptions[\"renderOnlyVisible\"]) { this._renderOnlyVisible = val; }\n // OTHERS\n public set autoResize(val: FlickingOptions[\"autoResize\"]) { this._autoResize = val; }\n\n /**\n * @param root A root HTMLElement to initialize Flicking on it. When it's a typeof `string`, it should be a css selector string\n * Flicking을 초기화할 HTMLElement로, `string` 타입으로 지정시 css 선택자 문자열을 지정해야 합니다.\n * @param {object} [options={}] An options object for Flicking.Flicking에 적용할 옵션 오브젝트\n * @throws {FlickingError}\n * |code|condition|\n * |---|---|\n * |{@link ERROR_CODE WRONG_TYPE}|When the root is not either string or HTMLElement|\n * |{@link ERROR_CODE ELEMENT_NOT_FOUND}|When the element with given CSS selector does not exist|\n * \n *\n * |code|조건|\n * |---|---|\n * |{@link ERROR_CODE WRONG_TYPE}|루트 엘리먼트가 string이나 HTMLElement가 아닐 경우|\n * |{@link ERROR_CODE ELEMENT_NOT_FOUND}|주어진 CSS selector로 엘리먼트를 찾지 못했을 경우|\n *\n * \n * @example\n * ```ts\n * import Flicking from \"@egjs/flicking\";\n *\n * // Creating new instance of Flicking with HTMLElement\n * const flicking = new Flicking(document.querySelector(\".flicking-viewport\"), { circular: true });\n *\n * // Creating new instance of Flicking with CSS selector\n * const flicking2 = new Flicking(\".flicking-viewport\", { circular: true });\n * ```\n */\n public constructor(root: HTMLElement | string, {\n align = ALIGN.CENTER,\n defaultIndex = 0,\n horizontal = true,\n circular = false,\n bound = false,\n adaptive = false,\n panelsPerView = -1,\n noPanelStyleOverride = false,\n resizeOnContentsReady = false,\n needPanelThreshold = 0,\n preventEventsBeforeInit = true,\n deceleration = 0.0075,\n duration = 500,\n easing = x => 1 - Math.pow(1 - x, 3),\n inputType = [\"mouse\", \"touch\"],\n moveType = \"snap\",\n threshold = 40,\n interruptable = true,\n bounce = \"20%\",\n iOSEdgeSwipeThreshold = 30,\n preventClickOnDrag = true,\n disableOnInit = false,\n renderOnlyVisible = false,\n autoInit = true,\n autoResize = true,\n renderExternal = null\n }: Partial = {}) {\n super();\n\n // Internal states\n this._initialized = false;\n this._plugins = [];\n\n // Bind options\n this._align = align;\n this._defaultIndex = defaultIndex;\n this._horizontal = horizontal;\n this._circular = circular;\n this._bound = bound;\n this._adaptive = adaptive;\n this._panelsPerView = panelsPerView;\n this._noPanelStyleOverride = noPanelStyleOverride;\n this._resizeOnContentsReady = resizeOnContentsReady;\n this._needPanelThreshold = needPanelThreshold;\n this._preventEventsBeforeInit = preventEventsBeforeInit;\n this._deceleration = deceleration;\n this._duration = duration;\n this._easing = easing;\n this._inputType = inputType;\n this._moveType = moveType;\n this._threshold = threshold;\n this._interruptable = interruptable;\n this._bounce = bounce;\n this._iOSEdgeSwipeThreshold = iOSEdgeSwipeThreshold;\n this._preventClickOnDrag = preventClickOnDrag;\n this._disableOnInit = disableOnInit;\n this._renderOnlyVisible = renderOnlyVisible;\n this._autoResize = autoResize;\n this._autoInit = autoInit;\n this._renderExternal = renderExternal;\n\n // Create core components\n this._viewport = new Viewport(getElement(root));\n this._renderer = this._createRenderer();\n this._camera = this._createCamera();\n this._control = this._createControl();\n\n this.resize = this.resize.bind(this);\n\n if (this._autoInit) {\n void this.init();\n }\n }\n\n /**\n * Initialize Flicking and move to the default index\n * This is automatically called on Flicking's constructor when `autoInit` is true(default)\n * @ko Flicking을 초기화하고, 디폴트 인덱스로 이동합니다\n * 이 메소드는 `autoInit` 옵션이 true(default)일 경우 Flicking이 생성될 때 자동으로 호출됩니다\n * @fires Flicking#ready\n * @return {this}\n */\n public async init(): Promise {\n if (this._initialized) return;\n\n const camera = this._camera;\n const renderer = this._renderer;\n const control = this._control;\n const originalTrigger = this.trigger;\n const preventEventsBeforeInit = this._preventEventsBeforeInit;\n\n camera.init(this);\n renderer.init(this);\n control.init(this);\n\n if (preventEventsBeforeInit) {\n this.trigger = () => this;\n }\n\n await this.resize();\n\n // Look at initial panel\n await this._moveToInitialPanel();\n\n if (this._autoResize) {\n window.addEventListener(\"resize\", this.resize);\n }\n if (this._preventClickOnDrag) {\n control.controller.addPreventClickHandler();\n }\n if (this._disableOnInit) {\n this.disableInput();\n }\n renderer.checkPanelContentsReady(renderer.panels);\n\n this._plugins.forEach(plugin => plugin.init(this));\n\n // Done initializing & emit ready event\n this._initialized = true;\n if (preventEventsBeforeInit) {\n this.trigger = originalTrigger;\n }\n this.trigger(new ComponentEvent(EVENTS.READY));\n\n return;\n }\n\n /**\n * Destroy Flicking and remove all event handlers\n * @ko Flicking과 하위 컴포넌트들을 초기 상태로 되돌리고, 부착된 모든 이벤트 핸들러를 제거합니다\n * @return {void}\n */\n public destroy(): void {\n this.off();\n window.removeEventListener(\"resize\", this.resize);\n\n this._control.destroy();\n this._camera.destroy();\n this._renderer.destroy();\n\n this._plugins.forEach(plugin => plugin.destroy());\n\n this._initialized = false;\n }\n\n /**\n * Move to the previous panel (current index - 1)\n * @ko 이전 패널로 이동합니다 (현재 인덱스 - 1)\n * @param {number} [duration={@link Flicking#duration options.duration}] Duration of the panel movement animation (unit: ms)패널 이동 애니메이션 진행 시간 (단위: ms)\n * @async\n * @fires Flicking#moveStart\n * @fires Flicking#move\n * @fires Flicking#moveEnd\n * @fires Flicking#willChange\n * @fires Flicking#changed\n * @fires Flicking#willRestore\n * @fires Flicking#restored\n * @fires Flicking#needPanel\n * @fires Flicking#visibleChange\n * @fires Flicking#reachEdge\n * @throws {FlickingError}\n * |code|condition|\n * |---|---|\n * |{@link ERROR_CODE INDEX_OUT_OF_RANGE}|When the previous panel does not exist|\n * |{@link ERROR_CODE ANIMATION_ALREADY_PLAYING}|When the animation is already playing|\n * |{@link ERROR_CODE ANIMATION_INTERRUPTED}|When the animation is interrupted by user input|\n * |{@link ERROR_CODE STOP_CALLED_BY_USER}|When the any of the event's `stop()` is called|\n * \n *\n * |code|condition|\n * |---|---|\n * |{@link ERROR_CODE INDEX_OUT_OF_RANGE}|이전 패널이 존재하지 않을 경우|\n * |{@link ERROR_CODE ANIMATION_ALREADY_PLAYING}|애니메이션이 이미 진행중인 경우|\n * |{@link ERROR_CODE ANIMATION_INTERRUPTED}|사용자 입력에 의해 애니메이션이 중단된 경우|\n * |{@link ERROR_CODE STOP_CALLED_BY_USER}|발생된 이벤트들 중 하나라도 `stop()`이 호출된 경우|\n * \n * @return {Promise} A Promise which will be resolved after reaching the previous panel이전 패널 도달시에 resolve되는 Promise\n */\n public prev(duration: number = this._duration): Promise {\n return this.moveTo(this._control.activePanel?.prev()?.index ?? -1, duration, DIRECTION.PREV);\n }\n\n /**\n * Move to the next panel (current index + 1)\n * @ko 다음 패널로 이동합니다 (현재 인덱스 + 1)\n * @param {number} [duration={@link Flicking#duration options.duration}] Duration of the panel movement animation (unit: ms).패널 이동 애니메이션 진행 시간 (단위: ms)\n * @async\n * @fires Flicking#moveStart\n * @fires Flicking#move\n * @fires Flicking#moveEnd\n * @fires Flicking#willChange\n * @fires Flicking#changed\n * @fires Flicking#willRestore\n * @fires Flicking#restored\n * @fires Flicking#needPanel\n * @fires Flicking#visibleChange\n * @fires Flicking#reachEdge\n * @throws {FlickingError}\n * |code|condition|\n * |---|---|\n * |{@link ERROR_CODE INDEX_OUT_OF_RANGE}|When the next panel does not exist|\n * |{@link ERROR_CODE ANIMATION_ALREADY_PLAYING}|When the animation is already playing|\n * |{@link ERROR_CODE ANIMATION_INTERRUPTED}|When the animation is interrupted by user input|\n * |{@link ERROR_CODE STOP_CALLED_BY_USER}|When the any of the event's `stop()` is called|\n * \n *\n * |code|condition|\n * |---|---|\n * |{@link ERROR_CODE INDEX_OUT_OF_RANGE}|다음 패널이 존재하지 않을 경우|\n * |{@link ERROR_CODE ANIMATION_ALREADY_PLAYING}|애니메이션이 이미 진행중인 경우|\n * |{@link ERROR_CODE ANIMATION_INTERRUPTED}|사용자 입력에 의해 애니메이션이 중단된 경우|\n * |{@link ERROR_CODE STOP_CALLED_BY_USER}|발생된 이벤트들 중 하나라도 `stop()`이 호출된 경우|\n *\n * \n * @return {Promise} A Promise which will be resolved after reaching the next panel다음 패널 도달시에 resolve되는 Promise\n */\n public next(duration: number = this._duration) {\n return this.moveTo(this._control.activePanel?.next()?.index ?? this._renderer.panelCount, duration, DIRECTION.NEXT);\n }\n\n /**\n * Move to the panel with given index\n * @ko 주어진 인덱스에 해당하는 패널로 이동합니다\n * @param {number} index The index of the panel to move이동할 패널의 인덱스\n * @param {number} [duration={@link Flicking#duration options.duration}] Duration of the animation (unit: ms)애니메이션 진행 시간 (단위: ms)\n * @param {DIRECTION} [direction=DIRECTION.NONE] Direction to move, only available in the {@link Flicking#circular circular} mode이동할 방향. {@link Flicking#circular circular} 옵션 활성화시에만 사용 가능합니다\n * @async\n * @fires Flicking#moveStart\n * @fires Flicking#move\n * @fires Flicking#moveEnd\n * @fires Flicking#willChange\n * @fires Flicking#changed\n * @fires Flicking#willRestore\n * @fires Flicking#restored\n * @fires Flicking#needPanel\n * @fires Flicking#visibleChange\n * @fires Flicking#reachEdge\n * @throws {FlickingError}\n * |code|condition|\n * |---|---|\n * |{@link ERROR_CODE INDEX_OUT_OF_RANGE}|When the root is not either string or HTMLElement|\n * |{@link ERROR_CODE ANIMATION_ALREADY_PLAYING}|When the animation is already playing|\n * |{@link ERROR_CODE ANIMATION_INTERRUPTED}|When the animation is interrupted by user input|\n * |{@link ERROR_CODE STOP_CALLED_BY_USER}|When the any of the event's `stop()` is called|\n * \n *\n * |code|condition|\n * |---|---|\n * |{@link ERROR_CODE INDEX_OUT_OF_RANGE}|해당 인덱스를 가진 패널이 존재하지 않을 경우|\n * |{@link ERROR_CODE ANIMATION_ALREADY_PLAYING}|애니메이션이 이미 진행중인 경우|\n * |{@link ERROR_CODE ANIMATION_INTERRUPTED}|사용자 입력에 의해 애니메이션이 중단된 경우|\n * |{@link ERROR_CODE STOP_CALLED_BY_USER}|발생된 이벤트들 중 하나라도 `stop()`이 호출된 경우|\n *\n * \n * @return {Promise} A Promise which will be resolved after reaching the target panel해당 패널 도달시에 resolve되는 Promise\n */\n public moveTo(index: number, duration: number = this._duration, direction: ValueOf = DIRECTION.NONE) {\n const renderer = this._renderer;\n const panelCount = renderer.panelCount;\n\n const panel = renderer.getPanel(index);\n\n if (!panel) {\n return Promise.reject(new FlickingError(ERROR.MESSAGE.INDEX_OUT_OF_RANGE(index, 0, panelCount - 1), ERROR.CODE.INDEX_OUT_OF_RANGE));\n }\n\n if (this._control.animating) {\n return Promise.reject(new FlickingError(ERROR.MESSAGE.ANIMATION_ALREADY_PLAYING, ERROR.CODE.ANIMATION_ALREADY_PLAYING));\n }\n\n return this._control.moveToPanel(panel, {\n duration,\n direction\n });\n }\n\n /**\n * Return the {@link Panel} at the given index. `null` if it doesn't exists.\n * @ko 주어진 인덱스에 해당하는 {@link Panel}을 반환합니다. 주어진 인덱스에 해당하는 패널이 존재하지 않을 경우 `null`을 반환합니다.\n * @return {Panel | null} Panel at the given index주어진 인덱스에 해당하는 패널\n * @see Panel\n * @example\n * ```ts\n * const panel = flicking.getPanel(0);\n * // Which is a shorthand to...\n * const samePanel = flicking.panels[0];\n * ```\n */\n public getPanel(index: number): Panel | null {\n return this._renderer.getPanel(index);\n }\n\n /**\n * Enable input from the user (mouse/touch)\n * @ko 사용자의 입력(마우스/터치)를 활성화합니다\n * @return {this}\n */\n public enableInput(): this {\n this._control.enable();\n return this;\n }\n\n /**\n * Disable input from the user (mouse/touch)\n * @ko 사용자의 입력(마우스/터치)를 막습니다\n * @return {this}\n */\n public disableInput(): this {\n this._control.disable();\n return this;\n }\n\n /**\n * Get current flicking status. You can restore current state by giving returned value to {@link Flicking#setStatus setStatus()}\n * @ko 현재 상태를 반환합니다. 반환받은 값을 {@link Flicking#setStatus setStatus()} 메소드의 인자로 지정하면 현재 상태를 복원할 수 있습니다\n * @param {object} options Status retrieving optionsStatus 반환 옵션\n * @param {boolean} [options.index=true] Include current panel index to the returning status. Camera will automatically move to the given index when the {@link Flicking#setStatus setStatus} is called현재 패널 인덱스를 반환값에 포함시킵니다. {@link Flicking#setStatus setStatus} 호출시 자동으로 해당 인덱스로 카메라를 움직입니다\n * @param {boolean} [options.position=true] Include camera position to the returning status. This works only when the {@link Flicking#moveType moveType} is `freeScroll`카메라의 현재 위치를 반환값에 포함시킵니다. 이 옵션은 {@link Flicking#moveType moveType}이 `freeScroll`일 경우에만 동작합니다\n * @param {boolean} [options.includePanelHTML=false] Include panel's `outerHTML` to the returning status패널의 `outerHTML`을 반환값에 포함시킵니다\n * @param {boolean} [options.visiblePanelsOnly=false] Include only {@link Flicking#visiblePanel visiblePanel}'s HTML. This option is available only when the `includePanelHTML` is true\n * 현재 보이는 패널({@link Flicking#visiblePanel visiblePanel})의 HTML만 반환합니다. `includePanelHTML`이 `true`일 경우에만 동작합니다.\n * @return {Partial} An object with current status value information현재 상태값 정보를 가진 객체.\n */\n public getStatus({\n index = true,\n position = true,\n includePanelHTML = false,\n visiblePanelsOnly = false\n }: Partial<{\n index: boolean;\n position: boolean;\n includePanelHTML: boolean;\n visiblePanelsOnly: boolean;\n }> = {}): Status {\n const camera = this._camera;\n const panels = visiblePanelsOnly ? this.visiblePanels : this.panels;\n\n const status: Status = {\n panels: panels.map(panel => {\n const panelInfo: Status[\"panels\"][0] = { index: panel.index };\n\n if (includePanelHTML) {\n panelInfo.html = panel.element.outerHTML;\n }\n\n return panelInfo;\n })\n };\n\n if (index) {\n status.index = this.index;\n }\n if (position) {\n const nearestAnchor = camera.findNearestAnchor(camera.position);\n\n if (nearestAnchor) {\n status.position = {\n panel: nearestAnchor.panel.index,\n progressInPanel: camera.getProgressInPanel(nearestAnchor.panel)\n };\n }\n\n }\n\n if (visiblePanelsOnly) {\n const visiblePanels = this.visiblePanels;\n\n status.visibleOffset = visiblePanels[0]?.index ?? 0;\n }\n\n return status;\n }\n\n /**\n * Restore to the state of the given {@link Status}\n * @ko 주어진 {@link Status}의 상태로 복원합니다\n * @param {Partial} status Status value to be restored. You should use the return value of the {@link Flicking#getStatus getStatus()} method복원할 상태 값. {@link Flicking#getStatus getStatus()} 메서드의 반환값을 지정하면 됩니다\n * @return {void}\n */\n public setStatus(status: Status): void {\n if (!this._initialized) {\n throw new FlickingError(ERROR.MESSAGE.NOT_INITIALIZED, ERROR.CODE.NOT_INITIALIZED);\n }\n\n const {\n index,\n position,\n visibleOffset,\n panels\n } = status;\n\n const renderer = this._renderer;\n const control = this._control;\n\n // Can't add/remove panels on external rendering\n if (panels[0]?.html && !this._renderExternal) {\n renderer.batchRemove({ index: 0, deleteCount: this.panels.length });\n renderer.batchInsert({ index: 0, elements: parseElement(panels.map(panel => panel.html!)) });\n }\n\n if (index) {\n const panelIndex = visibleOffset\n ? index - visibleOffset\n : index;\n\n void this.moveTo(panelIndex, 0).catch(() => void 0);\n }\n\n if (position && this._moveType === MOVE_TYPE.FREE_SCROLL) {\n const { panel, progressInPanel } = position;\n const panelIndex = visibleOffset\n ? panel - visibleOffset\n : panel;\n const panelRange = renderer.panels[panelIndex].range;\n const newCameraPos = panelRange.min + (panelRange.max - panelRange.min) * progressInPanel;\n\n void control.moveToPosition(newCameraPos, 0).catch(() => void 0);\n }\n }\n\n /**\n * Add plugins that can have different effects on Flicking\n * @ko 플리킹에 다양한 효과를 부여할 수 있는 플러그인을 추가합니다\n * @param {...Plugin} plugins The plugin(s) to add추가할 플러그인(들)\n * @return {this}\n * @see https://github.com/naver/egjs-flicking-plugins\n */\n public addPlugins(...plugins: Plugin[]) {\n if (this._initialized) {\n plugins.forEach(item => item.init(this));\n }\n\n this._plugins.push(...plugins);\n\n return this;\n }\n\n /**\n * Remove plugins from Flicking.\n * @ko 플리킹으로부터 플러그인들을 제거합니다.\n * @param {...Plugin} plugin The plugin(s) to remove.제거 플러그인(들).\n * @return {this}\n * @see https://github.com/naver/egjs-flicking-plugins\n */\n public removePlugins(...plugins: Plugin[]) {\n plugins.forEach(item => {\n const foundIndex = findIndex(this._plugins, val => val === item);\n\n if (foundIndex >= 0) {\n item.destroy();\n this._plugins.splice(foundIndex, 1);\n }\n });\n\n return this;\n }\n\n /**\n * Update viewport/panel sizes\n * @ko 패널 및 뷰포트의 크기를 갱신합니다\n * @method\n * @fires Flicking#beforeResize\n * @fires Flicking#afterResize\n * @return {this}\n */\n public async resize(): Promise {\n const viewport = this._viewport;\n const renderer = this._renderer;\n const camera = this._camera;\n const control = this._control;\n\n const activePanel = control.activePanel;\n const prevWidth = viewport.width;\n const prevHeight = viewport.height;\n const prevProgressInPanel = activePanel\n ? camera.getProgressInPanel(activePanel)\n : 0;\n\n this.trigger(new ComponentEvent(EVENTS.BEFORE_RESIZE, {\n width: prevWidth,\n height: prevHeight,\n element: viewport.element\n }));\n\n viewport.resize();\n await renderer.forceRenderAllPanels(); // Render all panel elements, to update sizes\n renderer.updatePanelSize();\n camera.updateAlignPos();\n camera.updateRange();\n camera.updateAnchors();\n await renderer.render();\n\n if (control.animating) {\n // TODO:\n } else {\n control.updatePosition(prevProgressInPanel);\n control.updateInput();\n }\n\n const newWidth = viewport.width;\n const newHeight = viewport.height;\n const sizeChanged = newWidth !== prevWidth || newHeight !== prevHeight;\n\n this.trigger(new ComponentEvent(EVENTS.AFTER_RESIZE, {\n width: viewport.width,\n height: viewport.height,\n prev: {\n width: prevWidth,\n height: prevHeight\n },\n sizeChanged,\n element: viewport.element\n }));\n }\n\n /**\n * Add new panels after the last panel\n * @ko 패널 목록의 제일 끝에 새로운 패널들을 추가합니다\n * @param {ElementLike | ElementLike[]} element A new HTMLElement, a outerHTML of element, or an array of both\n * 새로운 HTMLElement, 혹은 엘리먼트의 outerHTML, 혹은 그것들의 배열\n * @return {Panel[]} An array of appended panels추가된 패널들의 배열\n * @see Panel\n * @see ElementLike\n * @throws {FlickingError} {@link ERROR_CODE ERROR_CODE.NOT_ALLOWED_IN_FRAMEWORK} if called on frameworks (React, Angular, Vue...)\n * @example\n * ```ts\n * const flicking = new Flicking(\"#flick\");\n * // These are possible parameters\n * flicking.append(document.createElement(\"div\"));\n * flicking.append(\"\\Panel\\
\");\n * flicking.append([\"\\Panel\\
\", document.createElement(\"div\")]);\n * // Even this is possible\n * flicking.append(\"\\Panel 1\\
\\Panel 2\\
\");\n * ```\n */\n public append(element: ElementLike | ElementLike[]): Panel[] {\n return this.insert(this._renderer.panelCount, element);\n }\n\n /**\n * Add new panels before the first panel\n * This will increase index of panels after by the number of panels added\n * @ko 패널 목록의 제일 앞(index 0)에 새로운 패널들을 추가합니다\n * 추가한 패널의 개수만큼 기존 패널들의 인덱스가 증가합니다.\n * @param {ElementLike | ElementLike[]} element A new HTMLElement, a outerHTML of element, or an array of both\n * 새로운 HTMLElement, 혹은 엘리먼트의 outerHTML, 혹은 그것들의 배열\n * @return {Panel[]} An array of prepended panels추가된 패널들의 배열\n * @see Panel\n * @see ElementLike\n * @throws {FlickingError} {@link ERROR_CODE ERROR_CODE.NOT_ALLOWED_IN_FRAMEWORK} if called on frameworks (React, Angular, Vue...)\n * @example\n * ```ts\n * const flicking = new eg.Flicking(\"#flick\");\n * flicking.prepend(document.createElement(\"div\"));\n * flicking.prepend(\"\\Panel\\
\");\n * flicking.prepend([\"\\Panel\\
\", document.createElement(\"div\")]);\n * // Even this is possible\n * flicking.prepend(\"\\Panel 1\\
\\Panel 2\\
\");\n * ```\n */\n public prepend(element: ElementLike | ElementLike[]): Panel[] {\n return this.insert(0, element);\n }\n\n /**\n * Insert new panels at given index\n * This will increase index of panels after by the number of panels added\n * @ko 주어진 인덱스에 새로운 패널들을 추가합니다\n * 해당 인덱스보다 같거나 큰 인덱스를 가진 기존 패널들은 추가한 패널의 개수만큼 인덱스가 증가합니다.\n * @param {number} index Index to insert new panels at새로 패널들을 추가할 인덱스\n * @param {ElementLike | ElementLike[]} element A new HTMLElement, a outerHTML of element, or an array of both\n * 새로운 HTMLElement, 혹은 엘리먼트의 outerHTML, 혹은 그것들의 배열\n * @return {Panel[]} An array of prepended panels추가된 패널들의 배열\n * @throws {FlickingError} {@link ERROR_CODE ERROR_CODE.NOT_ALLOWED_IN_FRAMEWORK} if called on frameworks (React, Angular, Vue...)\n * @example\n * ```ts\n * const flicking = new eg.Flicking(\"#flick\");\n * flicking.insert(0, document.createElement(\"div\"));\n * flicking.insert(2, \"\\Panel\\
\");\n * flicking.insert(1, [\"\\Panel\\
\", document.createElement(\"div\")]);\n * // Even this is possible\n * flicking.insert(3, \"\\Panel 1\\
\\Panel 2\\
\");\n * ```\n */\n public insert(index: number, element: ElementLike | ElementLike[]): Panel[] {\n if (this._renderExternal) {\n throw new FlickingError(ERROR.MESSAGE.NOT_ALLOWED_IN_FRAMEWORK, ERROR.CODE.NOT_ALLOWED_IN_FRAMEWORK);\n }\n\n return this._renderer.batchInsert({ index, elements: parseElement(element) });\n }\n\n /**\n * Remove the panel at the given index\n * This will decrease index of panels after by the number of panels removed\n * @ko 주어진 인덱스의 패널을 제거합니다\n * 해당 인덱스보다 큰 인덱스를 가진 기존 패널들은 제거한 패널의 개수만큼 인덱스가 감소합니다\n * @param {number} index Index of panel to remove제거할 패널의 인덱스\n * @param {number} [deleteCount=1] Number of panels to remove from index`index` 이후로 제거할 패널의 개수\n * @return {Panel[]} An array of removed panels제거된 패널들의 배열\n */\n public remove(index: number, deleteCount: number = 1): Panel[] {\n if (this._renderExternal) {\n throw new FlickingError(ERROR.MESSAGE.NOT_ALLOWED_IN_FRAMEWORK, ERROR.CODE.NOT_ALLOWED_IN_FRAMEWORK);\n }\n\n return this._renderer.batchRemove({ index, deleteCount });\n }\n\n private _createControl(): Control {\n const moveType = this._moveType;\n const moveTypes = Object.keys(MOVE_TYPE).map(key => MOVE_TYPE[key] as ValueOf);\n\n const moveTypeStr = Array.isArray(moveType)\n ? moveType[0]\n : moveType;\n\n const moveTypeOptions = Array.isArray(moveType)\n ? moveType[1] ?? {}\n : {};\n\n if (!includes(moveTypes, moveTypeStr)) {\n throw new FlickingError(ERROR.MESSAGE.WRONG_OPTION(\"moveType\", JSON.stringify(moveType)), ERROR.CODE.WRONG_OPTION);\n }\n\n switch (moveTypeStr) {\n case MOVE_TYPE.SNAP:\n return new SnapControl(moveTypeOptions as SnapControlOptions);\n case MOVE_TYPE.FREE_SCROLL:\n return new FreeControl(moveTypeOptions as FreeControlOptions);\n case MOVE_TYPE.STRICT:\n return new StrictControl(moveTypeOptions as StrictControlOptions);\n }\n }\n\n private _createCamera(): Camera {\n const cameraOption = { align: this._align };\n\n if (this._circular) {\n if (this._bound) {\n // eslint-disable-next-line no-console\n console.warn(\"\\\"circular\\\" and \\\"bound\\\" option cannot be used together, ignoring bound.\");\n }\n return new CircularCamera(cameraOption);\n } else if (this._bound) {\n return new BoundCamera(cameraOption);\n } else {\n return new LinearCamera(cameraOption);\n }\n }\n\n private _createRenderer(): Renderer {\n const rendererOptions = {\n align: this._align\n };\n\n const renderExternal = this._renderExternal;\n\n return renderExternal\n ? new (renderExternal.renderer as any)({ ...rendererOptions, ...renderExternal.rendererOptions })\n : new VanillaRenderer(rendererOptions);\n }\n\n private async _moveToInitialPanel(): Promise {\n const renderer = this._renderer;\n const control = this._control;\n const initialPanel = renderer.getPanel(this._defaultIndex) || renderer.getPanel(0);\n\n if (!initialPanel) return;\n\n control.setActive(initialPanel, null, false);\n\n return control.moveToPanel(initialPanel, {\n duration: 0\n });\n }\n}\n\nexport default Flicking;\n","/*\n * Copyright (c) 2015 NAVER Corp.\n * egjs projects are licensed under the MIT license\n */\nimport Panel, { PanelOptions } from \"./Panel\";\n\nexport interface ExternalPanelOptions extends PanelOptions {\n externalComponent: T;\n}\n\n/**\n * An slide data component that holds information of a single HTMLElement\n * @ko 슬라이드 데이터 컴포넌트로, 단일 HTMLElement의 정보를 갖고 있습니다\n */\nabstract class ExternalPanel extends Panel {\n protected _externalComponent: T;\n\n /**\n * @param {object} options An options object옵션 오브젝트\n * @param {HTMLElement} [options.el] A `HTMLElement` panel's referencing패널이 참조하는 `HTMLElement`\n * @param {number} [options.index] An initial index of the panel패널의 초기 인덱스\n * @param {Constants.ALIGN | string | number} [options.align] An initial {@link Flicking#align align} value of the panel패널의 초기 {@link Flicking#align align}값\n * @param {Flicking} [options.flicking] A Flicking instance panel's referencing패널이 참조하는 {@link Flicking} 인스턴스\n */\n public constructor(options: ExternalPanelOptions) {\n super(options);\n\n this._externalComponent = options.externalComponent;\n }\n}\n\nexport default ExternalPanel;\n","/*\n * Copyright (c) 2015 NAVER Corp.\n * egjs projects are licensed under the MIT license\n */\nimport Viewport from \"./Viewport\";\nimport FlickingError from \"./FlickingError\";\nimport AnchorPoint from \"./AnchorPoint\";\n\nexport {\n Viewport,\n FlickingError,\n AnchorPoint\n};\n\nexport * from \"./panel\";\n","import Component from \"@egjs/component\";\n\nimport Flicking from \"../Flicking\";\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> {\n * @withFlickingMethods\n * private flicking: Flicking;\n * }\n * ```\n */\nconst withFlickingMethods = (prototype: any, flickingName: string) => {\n [Component.prototype, Flicking.prototype].forEach(proto => {\n Object.getOwnPropertyNames(proto).filter(name => !prototype[name] && !name.startsWith(\"_\") && name !== \"constructor\")\n .forEach((name: string) => {\n const descriptor = Object.getOwnPropertyDescriptor(proto, name)!;\n\n if (descriptor.value) {\n // Public Function\n Object.defineProperty(prototype, name, {\n value: function(...args) {\n return descriptor.value.call(this[flickingName], ...args);\n }\n });\n } else {\n const getterDescriptor: { get?: () => any; set?: (val: any) => void } = {};\n if (descriptor.get) {\n getterDescriptor.get = function() {\n return descriptor.get?.call(this[flickingName]);\n };\n }\n if (descriptor.set) {\n getterDescriptor.set = function(...args) {\n return descriptor.set?.call(this[flickingName], ...args);\n };\n }\n\n Object.defineProperty(prototype, name, getterDescriptor);\n }\n });\n });\n};\n\nexport default withFlickingMethods;\n","import { DiffResult } from \"@egjs/list-differ\";\n\nimport Flicking from \"../Flicking\";\nimport Renderer from \"../renderer/Renderer\";\n\nexport default (flicking: Flicking, diffResult: DiffResult, rendered: any[]) => {\n const renderer = flicking.renderer;\n const panels = renderer.panels;\n\n if (diffResult.removed.length > 0) {\n let endIdx = -1;\n let prevIdx = -1;\n\n diffResult.removed.forEach(removedIdx => {\n if (endIdx < 0) {\n endIdx = removedIdx;\n }\n\n if (prevIdx >= 0 && removedIdx !== prevIdx - 1) {\n batchRemove(renderer, prevIdx, endIdx + 1);\n\n endIdx = removedIdx;\n prevIdx = removedIdx;\n } else {\n prevIdx = removedIdx;\n }\n });\n\n batchRemove(renderer, prevIdx, endIdx + 1);\n }\n\n diffResult.ordered.forEach(([prevIdx, newIdx]) => {\n const prevPanel = panels[prevIdx];\n const indexDiff = newIdx - prevIdx;\n\n if (indexDiff > 0) {\n const middlePanels = panels.slice(prevIdx + 1, newIdx + 1);\n\n prevPanel.increaseIndex(indexDiff);\n middlePanels.forEach(panel => panel.decreaseIndex(1));\n } else {\n const middlePanels = panels.slice(newIdx, prevIdx);\n\n prevPanel.decreaseIndex(-indexDiff);\n middlePanels.forEach(panel => panel.increaseIndex(1));\n }\n // Update position\n prevPanel.resize();\n });\n\n if (diffResult.ordered.length > 0) {\n panels.sort((panel1, panel2) => panel1.index - panel2.index);\n }\n\n if (diffResult.added.length > 0) {\n let startIdx = -1;\n let prevIdx = -1;\n\n diffResult.added.forEach((addedIdx, idx) => {\n if (startIdx < 0) {\n startIdx = idx;\n }\n\n if (prevIdx >= 0 && addedIdx !== prevIdx + 1) {\n batchInsert(renderer, diffResult, rendered, startIdx, idx + 1);\n\n startIdx = -1;\n prevIdx = -1;\n } else {\n prevIdx = addedIdx;\n }\n });\n\n if (startIdx >= 0) {\n batchInsert(renderer, diffResult, rendered, startIdx);\n }\n }\n};\n\nconst batchInsert = (renderer: Renderer, diffResult: DiffResult, rendered: any[], startIdx: number, endIdx?: number) => {\n renderer.batchInsert(\n ...diffResult.added.slice(startIdx, endIdx).map((index, elIdx) => ({ index, elements: [rendered[elIdx + diffResult.prevList.length]] }))\n );\n};\n\nconst batchRemove = (renderer: Renderer, startIdx: number, endIdx?: number) => {\n const removed = renderer.panels.slice(startIdx, endIdx);\n\n renderer.batchRemove({ index: startIdx, deleteCount: removed.length });\n};\n\n","import { DiffResult } from \"@egjs/list-differ\";\n\nimport Flicking from \"../Flicking\";\n\nexport default (flicking: Flicking, diffResult: DiffResult) => {\n const removedPanels = diffResult.removed.reduce((map, idx) => {\n map[idx] = true;\n return map;\n }, {});\n\n const maintainedMap = diffResult.maintained.reduce((map, [prev, current]) => {\n map[prev] = current;\n return map;\n }, {});\n\n return [\n ...flicking.panels\n .filter(panel => !removedPanels[panel.index])\n // Sort panels by position\n .sort((panel1, panel2) => (panel1.position + panel1.offset) - (panel2.position + panel2.offset))\n .map(panel => diffResult.list[maintainedMap[panel.index]]),\n ...diffResult.added.map(idx => diffResult.list[idx])\n ];\n};\n\n","import { FlickingOptions } from \"../Flicking\";\nimport { ALIGN } from \"../const/external\";\nimport { parseArithmeticExpression } from \"../utils\";\n\nexport default (align: FlickingOptions[\"align\"] = ALIGN.CENTER, horizontal: boolean = true, firstPanelSize?: string) => {\n const cameraAlign = getCameraAlign(align);\n const panelAlign = getPanelAlign(align);\n\n if (panelAlign == null) return \"\";\n\n const camPosition = `calc(${cameraAlign} - (${firstPanelSize || \"0px\"} * ${panelAlign.percentage}) - ${panelAlign.absolute}px)`;\n\n return horizontal\n ? `translate(${camPosition})`\n : `translate(0, ${camPosition})`;\n};\n\nconst getCameraAlign = (align: FlickingOptions[\"align\"]) => {\n const alignVal = typeof align === \"object\"\n ? (align as { camera: string | number }).camera\n : align;\n\n return parseAlign(alignVal);\n};\n\nconst getPanelAlign = (align: FlickingOptions[\"align\"]) => {\n const alignVal = typeof align === \"object\"\n ? (align as { panel: string | number }).panel\n : align;\n\n return parseArithmeticExpression(parseAlign(alignVal));\n};\n\nconst parseAlign = (alignVal: number | string) => {\n if (typeof alignVal === \"number\") {\n return `${alignVal}px`;\n }\n\n switch (alignVal) {\n case ALIGN.CENTER:\n return \"50%\";\n case ALIGN.NEXT:\n return \"100%\";\n case ALIGN.PREV:\n return \"0%\";\n default:\n return alignVal;\n }\n};\n","/*\n * Copyright (c) 2015 NAVER Corp.\n * egjs projects are licensed under the MIT license\n */\nimport Flicking from \"./Flicking\";\nimport * as Core from \"./core\";\nimport * as Camera from \"./camera\";\nimport * as Control from \"./control\";\nimport * as Renderer from \"./renderer\";\nimport * as Constants from \"./const/external\";\nimport * as CFC from \"./cfc\";\nimport { merge } from \"./utils\";\n\nmerge(Flicking, Core);\nmerge(Flicking, Camera);\nmerge(Flicking, Control);\nmerge(Flicking, Renderer);\nmerge(Flicking, Constants);\nmerge(Flicking, CFC);\n\nexport default Flicking;\n"],"names":["CODE","WRONG_TYPE","ELEMENT_NOT_FOUND","VAL_MUST_NOT_NULL","NOT_ATTACHED_TO_FLICKING","WRONG_OPTION","INDEX_OUT_OF_RANGE","POSITION_NOT_REACHABLE","TRANSFORM_NOT_SUPPORTED","STOP_CALLED_BY_USER","ANIMATION_INTERRUPTED","ANIMATION_ALREADY_PLAYING","NOT_ALLOWED_IN_FRAMEWORK","NOT_INITIALIZED","NO_ACTIVE","MESSAGE","wrongVal","correctTypes","map","type","join","selector","val","name","optionName","min","max","position","EVENTS","READY","BEFORE_RESIZE","AFTER_RESIZE","HOLD_START","HOLD_END","MOVE_START","MOVE","MOVE_END","WILL_CHANGE","CHANGED","WILL_RESTORE","RESTORED","SELECT","NEED_PANEL","VISIBLE_CHANGE","REACH_EDGE","PANEL_CHANGE","ALIGN","PREV","CENTER","NEXT","DIRECTION","NONE","MOVE_TYPE","SNAP","FREE_SCROLL","STRICT","merge","target","_i","sources","forEach","source","Object","keys","key","getElement","el","parent","targetEl","isString","parentEl","document","queryResult","querySelector","FlickingError","ERROR","nodeType","Node","ELEMENT_NODE","checkExistence","value","nameOnErrMsg","clamp","x","Math","getFlickingAttached","nameToThrowOnError","toArray","iterable","slice","call","parseAlign","align","size","alignPoint","parseArithmeticSize","parseBounce","bounce","parsedBounce","Array","isArray","parsedVal","cssValue","base","parsed","parseArithmeticExpression","percentage","absolute","cssRegex","idx","matchResult","exec","sign","unit","parsedValue","parseFloat","signMultiplier","getDirection","start","end","parseElement","element","elements","tempDiv","createElement","innerHTML","push","children","firstChild","removeChild","getMinusCompensatedIndex","includes","array","array_1","__values","circulatePosition","pos","offset","find","checker","array_2","findIndex","length","getProgress","prev","next","getStyle","window","getComputedStyle","currentStyle","isBetween","circulateIndex","index","setPrototypeOf","obj","proto","__proto__","__extends","message","code","_super","_this","prototype","Error","_el","_width","_height","_padding","left","right","top","bottom","_isBorderBoxSizing","_a","width","height","padding","isBorderBoxSizing","style","newWidth","newHeight","resize","elStyle","clientWidth","clientHeight","paddingLeft","paddingRight","paddingTop","paddingBottom","boxSizing","EVENT","HOLD","CHANGE","RELEASE","ANIMATION_END","FINISH","POSITION_KEY","STATE_TYPE","_delta","_targetPanel","prevState","ctx","flicking","axesEvent","transitTo","delta","AXES","camera","prevPosition","newPosition","circularEnabled","range","lookAt","moveEvent","ComponentEvent","isTrusted","holding","direction","trigger","isCanceled","DISABLED","renderer","panelCount","holdStartEvent","HOLDING","controller","control","animatingContext","moveStartEvent","ANIMATING","onChange","State","inputEvent","horizontal","offsetX","offsetY","DRAGGING","flick","setTo","IDLE","_releaseEvent","releaseEvent","srcEvent","clickedElement","touchEvent","touch","changedTouches","elementFromPoint","clientX","clientY","panels","clickedPanel","panels_1","panel","contains","cameraPosition","clickedPanelPosition","_moveToChangedPosition","destPos","duration","moveToPosition","updateInput","setActive","activePanel","stop","nextStateType","nextState","IdleState","HoldingState","DraggingState","AnimatingState","DisabledState","onEnter","_state","eventType","externalCtx","currentState","onHold","onRelease","onAnimationEnd","onFinish","_dragged","e","preventDefault","stopPropagation","_resetInternalValues","_stateMachine","StateMachine","_axes","state","_animatingContext","axes","circular","axis","_panInput","isEnable","get","_flicking","Axes","deceleration","interruptable","easing","PanInput","viewport","inputType","iOSEdgeSwipeThreshold","scale","releaseOnScroll","connect","on","fire","removePreventClickHandler","destroy","enable","disable","controlParams","axm","set","cameraEl","_onAxesHold","_onAxesChange","addEventListener","_preventClickWhenDragged","off","removeEventListener","Promise","reject","startPos","resolve","animate","resetContext","once","_b","newPos","animationFinishHandler","interruptionHandler","_controller","AxesController","_activePanel","animating","init","_progressInPanel","clampToReachablePosition","update","nearestAnchor","findNearestAnchor","removed","canReach","camPos_1","camRangeDiff","rangeDiff","possiblePositions","filter","reduce","nearestPosition","abs","Infinity","_triggerIndexChangeEvent","_animateToPosition","newActivePanel","prevActivePanel","updateAdaptiveHeight","prevIndex","prevPanel","triggeringEvent","event","animateTo","targetPanel","then","render","catch","err","_index","_pos","_panel","_c","count","_count","activeAnchor","findActiveAnchor","anchorAtCamera","snapThreshold","_calcSnapThreshold","posDelta","absPosDelta","snapDelta","targetAnchor","_findSnappedAnchor","threshold","_findAdjacentAnchor","currentPos","clampedPosition","anchorAtPosition","findAnchorIncludePosition","isFinite","anchors","anchorPoints","loopCount","floor","circularIndexOffset","anchorAtPositionIndex","anchor","AnchorPoint","loop","adjacentAnchor","getNextAnchor","getPrevAnchor","isNextDirection","panelSize","alignPos","alignPosition","margin","Control","stopAtEdge","_stopAtEdge","progressInPanel","panelRange","targetPos","_resetIndexRange","cameraRange","currentIndex","prevPanelIndex","nextPanelIndex","nextPanel","prevPos","nextPos","_indexRange","axesRange","indexRange","isOverThreshold","firstAnchor","lastAnchor","shouldBounceToFirst","shouldBounceToLast","transforms","supportedStyle","documentElement","transformName","transforms_1","prefixedTransform","_transform","_align","_position","_alignPos","_offset","_range","_visiblePanels","_anchors","NaN","nearestPanel","panelPos","bounceSize","prevRange","nextRange","nextPosition","viewportEl","firstElementChild","_checkTranslateSupport","_refreshVisiblePanels","_checkNeedPanel","_checkReachEnd","_applyTransform","anchorsIncludingPosition","includePosition","nearest","prevDist","anchorIdx","dist","activeIndex","visibleRange","includeRange","alignVal","adaptive","setSize","unRenderedPanels","rendered","sizeIncludingMargin","_needPanelTriggered","newVisiblePanels","canSee","prevVisiblePanels","added","visiblePanels","needPanelTriggered","cameraSize","needPanelThreshold","cameraPrev","cameraNext","firstPanel","lastPanel","firstPanelPrev","lastPanelNext","wasBetweenRange","isBetweenRange","actualPosition","getPanel","Camera","_circularOffset","_circularEnabled","positionInRange","anchorInRange","visibleInCurrentRange","visibleSize","panelSizeSum","canSetCircularMode","every","updateCircularToggleDirection","_updateCircularOffset","toggled","toggle","some","isToggled","sum","toggledPrev","toggledNext","toggleDirection","_calcPanelAreaSum","viewportSize","panelAreaSize","isBiggerThanViewport","firstPos","lastPos","reachablePanels","shouldPrependBoundAnchor","shouldAppendBoundAnchor","indexOffset_1","newAnchors","splice","nearestPanelAtMin","_findNearestPanel","panelAtMin","panelAtMax","panelIdx","_panels","panelAlign","_getPanelAlign","_collectPanels","panelsPerView","_updatePanelSizeByGrid","items","allPanelsInserted","addedPanels","item","insertingIdx","panelsPushed","panelsInserted","_createPanel","_insertPanelElements","increaseIndex","updatePosition","_updateCameraAndControl","moveToPanel","updateOffset","checkPanelContentsReady","allPanelsRemoved","deleteCount","removingIdx","panelsPulled","panelsRemoved","decreaseIndex","_removePanelElements","resetActive","checkingPanels","resizeOnContentsReady","hasContents","contentsReadyChecker","ImReady","loading","prevProgressInPanel","getProgressInPanel","panelBehind","initialized","updateRange","updateAnchors","readyCount","totalCount","check","resetNeedPanelHistory","renderOnlyVisible","_showOnlyVisiblePanels","markForShow","visibleIndexes","visibles","markForHide","gap","panelSizeObj","firstPanelSizeObj","noPanelStyleOverride","_removed","_loading","_resetInternalStates","_size","_margin","_toggled","_toggleDirection","cameraRangeDiff","progress","camPos","disappearPosNext","disappearPosPrev","checkingRange","cached","offsetWidth","offsetHeight","marginLeft","marginRight","marginTop","marginBottom","_updateAlignPos","includeMargin","moveTo","togglePosition","_togglePosition","prevToggled","camRange","camAlignPosition","camVisibleRange","camVisibleSize","minimumVisible","maximumVisible","shouldBeVisibleAtMin","shouldBeVisibleAtMax","options","_rendered","Panel","wasRenderedPanels","parentElement","_updateRenderingPanels","renderingPanels","_getRenderingPanelsByOrder","_resetPanelElementOrder","cameraElement","fragment","createDocumentFragment","appendChild","_removeAllChildsFromCamera","childNodes","node","TEXT_NODE","cameraChilds","ElementPanel","nextSibling","nextSiblingElement","insertBefore","reversedPanels","__spreadArray","reverse","nextPanelEl","nextElementSibling","sort","a","b","Renderer","root","_d","defaultIndex","_e","_f","_g","bound","_h","_j","_k","_l","_m","_o","preventEventsBeforeInit","_p","_q","_r","pow","_s","_t","moveType","_u","_v","_w","_x","_y","preventClickOnDrag","_z","disableOnInit","_0","_1","autoInit","_2","autoResize","_3","renderExternal","_initialized","_plugins","_defaultIndex","_horizontal","_circular","_bound","_adaptive","_panelsPerView","_noPanelStyleOverride","_resizeOnContentsReady","_needPanelThreshold","_preventEventsBeforeInit","_deceleration","_duration","_easing","_inputType","_moveType","_threshold","_interruptable","_bounce","_iOSEdgeSwipeThreshold","_preventClickOnDrag","_disableOnInit","_renderOnlyVisible","_autoResize","_autoInit","_renderExternal","_viewport","Viewport","_renderer","_createRenderer","_camera","_createCamera","_control","_createControl","bind","prevVal","addPreventClickHandler","originalTrigger","_moveToInitialPanel","disableInput","plugin","includePanelHTML","visiblePanelsOnly","status","panelInfo","html","outerHTML","visibleOffset","batchRemove","batchInsert","panelIndex","newCameraPos","plugins","foundIndex","prevWidth","prevHeight","forceRenderAllPanels","updatePanelSize","updateAlignPos","sizeChanged","insert","moveTypes","moveTypeStr","moveTypeOptions","JSON","stringify","SnapControl","FreeControl","StrictControl","cameraOption","console","warn","CircularCamera","BoundCamera","LinearCamera","rendererOptions","VanillaRenderer","initialPanel","Flicking","Component","_externalComponent","externalComponent","withFlickingMethods","flickingName","getOwnPropertyNames","startsWith","descriptor","getOwnPropertyDescriptor","defineProperty","args","getterDescriptor","diffResult","endIdx_1","prevIdx_1","removedIdx","ordered","__read","prevIdx","newIdx","indexDiff","middlePanels","panel1","panel2","startIdx_1","prevIdx_2","addedIdx","startIdx","endIdx","elIdx","prevList","removedPanels","maintainedMap","maintained","current","list","firstPanelSize","cameraAlign","getCameraAlign","getPanelAlign","camPosition","Core","Constants","CFC"],"mappings":"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;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;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"}