UNPKG

391 kBSource Map (JSON)View Raw
1{"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<ko>패러미터의 타입이 잘못되었을 경우</ko>\n * @property {number} ELEMENT_NOT_FOUND Element is not found inside page with the given CSS selector<ko>주어진 CSS selector로 페이지 내에서 해당 엘리먼트를 찾지 못했을 경우</ko>\n * @property {number} VAL_MUST_NOT_NULL Expected non-null value, but given `null` or `undefined`<ko>값을 기대했으나, `null`이나 `undefined`를 받은 경우</ko>\n * @property {number} NOT_ATTACHED_TO_FLICKING When Flicking's component is not initialized (i.e. {@link Flicking#init} is not called)<ko>Flicking 내부 컴포넌트가 초기화되지 않은 경우 ({@link Flicking#init}이 호출되지 않은 경우)</ko>\n * @property {number} WRONG_OPTION One of the options is wrong<ko>옵션들 중 잘못된 값이 있을 때</ko>\n * @property {number} INDEX_OUT_OF_RANGE When the given index is out of possible range<ko>인덱스가 주어진 범위를 벗어난 경우</ko>\n * @property {number} POSITION_NOT_REACHABLE When {@link Control#moveToPosition}'s position parameter is out of possible range.<ko>{@link Control#moveToPosition}의 `position` 패러미터가 도달 가능한 범위를 벗어난 경우</ko>\n * @property {number} TRANSFORM_NOT_SUPPORTED CSS `transform` property is not available(<=IE8) <ko>CSS `transform` 속성을 사용할 수 없는 경우(<=IE8)</ko>\n * @property {number} STOP_CALLED_BY_USER When the event's `stop()` is called by user.<ko>사용자에 의해 이벤트의 `stop()`이 호출된 경우</ko>\n * @property {number} ANIMATION_INTERRUPTED When the animation is interrupted by user.<ko>사용자에 의해 애니메이션이 중단된 경우</ko>\n * @property {number} ANIMATION_ALREADY_PLAYING When the animation is already playing.<ko>현재 애니메이션이 이미 진행중인 경우</ko>\n * @property {number} NOT_ALLOWED_IN_FRAMEWORK When the non-allowed method is called from frameworks (React, Angular, Vue...)\n * <ko>프레임워크(React, Angular, Vue ...)에서 사용 불가능한 메소드를 호출했을 경우</ko>\n * @property {number} NOT_INITIALIZED When the {@link Flicking#init} is not called before but is needed<ko>{@link Flicking#init}의 호출이 필요하나, 아직 호출되지 않았을 경우</ko>\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<ko>현재 Flicking이 선택한 패널이 없을 경우. 일반적으로 패널이 하나도 없는 경우에 발생할 수 있습니다</ko>\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 event<ko>holdStart 이벤트</ko>\n * @property {\"holdEnd\"} HOLD_END holdEnd event<ko>holdEnd 이벤트</ko>\n * @property {\"moveStart\"} MOVE_START moveStart event<ko>moveStart 이벤트</ko>\n * @property {\"move\"} MOVE move event<ko>move 이벤트</ko>\n * @property {\"moveEnd\"} MOVE_END moveEnd event<ko>moveEnd 이벤트</ko>\n * @property {\"willChange\"} WILL_CHANGE willChange event<ko>willChange 이벤트</ko>\n * @property {\"changed\"} CHANGED changed event<ko>changed 이벤트</ko>\n * @property {\"willRestore\"} WILL_RESTORE willRestore event<ko>willRestore 이벤트</ko>\n * @property {\"restored\"} RESTORED restored event<ko>restored 이벤트</ko>\n * @property {\"select\"} SELECT select event<ko>select 이벤트</ko>\n * @property {\"needPanel\"} NEED_PANEL needPanel event<ko>needPanel 이벤트</ko>\n * @property {\"panelChange\"} PANEL_CHANGE panelChange event<ko>panelChange 이벤트</ko>\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<ko>좌/상 정렬</ko>\n * @property {\"center\"} CENTER center align<ko>중앙 정렬</ko>\n * @property {\"next\"} NEXT right/bottom align<ko>우/하 정렬</ko>\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 * <ko>{@link Flicking#horizontal horizontal}가 `true`일 경우 왼쪽, {@link Flicking#horizontal horizontal}가 `false`일 경우 위쪽을 의미합니다</ko>\n * @property {\"NEXT\"} NEXT \"right\" when {@link Flicking#horizontal horizontal} is true, and \"bottom\" when {@link Flicking#horizontal horizontal} is false\n * <ko>{@link Flicking#horizontal horizontal}가 `true`일 경우 오른쪽, {@link Flicking#horizontal horizontal}가 `false`일 경우 아래쪽을 의미합니다</ko>\n * @property {null} NONE This value usually means it's the same position<ko>주로 제자리인 경우를 의미합니다</ko>\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 * <ko>Flicking의 {@link Flicking#control control}을 {@link SnapControl}로 설정하게 하는 {@link Flicking#moveType moveType}</ko>\n * @property {\"freeScroll\"} FREE_SCROLL Flicking's {@link Flicking#moveType moveType} that enables {@link FreeControl} as a Flicking's {@link Flicking#control control}\n * <ko>Flicking의 {@link Flicking#control control}을 {@link FreeControl}로 설정하게 하는 {@link Flicking#moveType moveType}</ko>\n * @property {\"strict\"} STRICT Flicking's {@link Flicking#moveType moveType} that enables {@link StrictControl} as a Flicking's {@link Flicking#control control}\n * <ko>Flicking의 {@link Flicking#control control}을 {@link StrictControl}로 설정하게 하는 {@link Flicking#moveType moveType}</ko>\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 = <From extends object, To extends object>(target: From, ...sources: To[]): Merged<From, To> => {\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<From, To>;\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 = <T>(iterable: ArrayLike<T>): T[] => [].slice.call(iterable) as T[];\n\nexport const parseAlign = (align: LiteralUnion<ValueOf<typeof ALIGN>> | 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<number | null>;\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<typeof DIRECTION> => {\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 = <T>(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 = <T>(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 = <T>(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 = <T>(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<ko>에러 코드</ko>\n * @property {string} message Error message<ko>에러 메시지</ko>\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<ko>에러 메시지</ko>\n * @param code Error code<ko>에러 코드</ko>\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<ko>뷰포트 엘리먼트</ko>\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<ko>새 뷰포트 크기</ko>\n * @param {number|string} [size.width] CSS string or number(in px)<ko>CSS 문자열 또는 숫자(px)</ko>\n * @param {number|string} [size.height] CSS string or number(in px)<ko>CSS 문자열 또는 숫자(px)</ko>\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<ko>이전 상태값</ko>\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<ko>이벤트 콘텍스트</ko>\n * @param {Flicking} [ctx.flicking] An instance of Flicking<ko>Flicking 인스턴스</ko>\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 * <ko>Axes의 {@link https://naver.github.io/egjs-axes/release/latest/doc/eg.Axes.html#event:hold hold} 이벤트</ko>\n * @param {function} [ctx.transitTo] A function for changing current state to other state<ko>다른 상태로 변경하기 위한 함수</ko>\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<ko>이벤트 콘텍스트</ko>\n * @param {Flicking} [ctx.flicking] An instance of Flicking<ko>Flicking 인스턴스</ko>\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 * <ko>Axes의 {@link https://naver.github.io/egjs-axes/release/latest/doc/eg.Axes.html#event:change change} 이벤트</ko>\n * @param {function} [ctx.transitTo] A function for changing current state to other state<ko>다른 상태로 변경하기 위한 함수</ko>\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<ko>이벤트 콘텍스트</ko>\n * @param {Flicking} [ctx.flicking] An instance of Flicking<ko>Flicking 인스턴스</ko>\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 * <ko>Axes의 {@link https://naver.github.io/egjs-axes/release/latest/doc/eg.Axes.html#event:release release} 이벤트</ko>\n * @param {function} [ctx.transitTo] A function for changing current state to other state<ko>다른 상태로 변경하기 위한 함수</ko>\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<ko>이벤트 콘텍스트</ko>\n * @param {Flicking} [ctx.flicking] An instance of Flicking<ko>Flicking 인스턴스</ko>\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 * <ko>Axes의 {@link https://naver.github.io/egjs-axes/release/latest/doc/eg.Axes.html#event:animationEnd animationEnd} 이벤트</ko>\n * @param {function} [ctx.transitTo] A function for changing current state to other state<ko>다른 상태로 변경하기 위한 함수</ko>\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<ko>이벤트 콘텍스트</ko>\n * @param {Flicking} [ctx.flicking] An instance of Flicking<ko>Flicking 인스턴스</ko>\n * @param {object} [ctx.axesEvent] A {@link https://naver.github.io/egjs-axes/release/latest/doc/eg.Axes.html#event:finish finish} event of Axes<ko>Axes의 {@link https://naver.github.io/egjs-axes/release/latest/doc/eg.Axes.html#event:finish finish} 이벤트</ko>\n * @param {function} [ctx.transitTo] A function for changing current state to other state<ko>다른 상태로 변경하기 위한 함수</ko>\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<State[\"onChange\"]>[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<State[\"onHold\"]>[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<State[\"onChange\"]>[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<State[\"onChange\"]>[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<State[\"onRelease\"]>[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<State[\"onFinish\"]>[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<State[\"onChange\"]>[0]): void {\n this._moveToChangedPosition(ctx);\n }\n\n public onRelease(ctx: Parameters<State[\"onRelease\"]>[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<State[\"onHold\"]>[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<State[\"onChange\"]>[0]): void {\n this._moveToChangedPosition(ctx);\n }\n\n public onFinish(ctx: Parameters<State[\"onFinish\"]>[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<State[\"onAnimationEnd\"]>[0]): void {\n const { transitTo } = ctx;\n\n transitTo(STATE_TYPE.IDLE);\n }\n\n public onChange(ctx: Parameters<State[\"onChange\"]>[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<State[\"onRelease\"]>[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<ko>애니메이션 시작 지점</ko>\n * @property {number} end A end position of the animation<ko>애니메이션 끝 지점</ko>\n * @property {number} offset camera offset<ko>카메라 오프셋</ko>\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 * <ko>{@link AxesController#init init}이 이전에 호출되지 않은 경우</ko>\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<ko>이동할 좌표</ko>\n * @param {number} duration Duration of the animation (unit: ms)<ko>애니메이션 진행 시간 (단위: ms)</ko>\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<ko>이 값이 주어졌을 경우, 해당 이벤트의 {@link https://naver#github#io/egjs-axes/release/latest/doc/eg#Axes#html#setTo setTo} 메소드를 대신해서 사용합니다.</ko>\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 * <ko>\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 * </ko>\n * @return {Promise<void>} A Promise which will be resolved after reaching the target position<ko>해당 좌표 도달시에 resolve되는 Promise</ko>\n */\n public animateTo(position: number, duration: number, axesEvent?: OnRelease): Promise<void> {\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<ko>이동할 좌표</ko>\n * @param {number} duration Duration of the panel movement animation (unit: ms).<ko>패널 이동 애니메이션 진행 시간 (단위: ms)</ko>\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 * <ko>{@link https://naver.github.io/egjs-axes/ Axes}의 {@link https://naver.github.io/egjs-axes/release/latest/doc/eg.Axes.html#event:release release} 이벤트</ko>\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 * <ko>\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 * </ko>\n * @return {Promise<void>} A Promise which will be resolved after reaching the target position<ko>해당 좌표 도달시에 resolve되는 Promise</ko>\n */\n public abstract moveToPosition(position: number, duration: number, axesEvent?: OnRelease): Promise<void>;\n\n /**\n * Initialize Control\n * @ko Control을 초기화합니다\n * @param {Flicking} flicking An instance of {@link Flicking}<ko>Flicking의 인스턴스</ko>\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 resize<ko>Resize 이전 현재 선택된 패널 내에서의 카메라 progress 값</ko>\n * @throws {FlickingError}\n * {@link ERROR_CODE NOT_ATTACHED_TO_FLICKING} When {@link Camera#init init} is not called before\n * <ko>{@link ERROR_CODE NOT_ATTACHED_TO_FLICKING} {@link Camera#init init}이 이전에 호출되지 않은 경우</ko>\n * @chainable\n * @return {Promise<void>}\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<ko>이동할 패널</ko>\n * @param {object} options An options object<ko>옵션 오브젝트</ko>\n * @param {number} duration Duration of the animation (unit: ms)<ko>애니메이션 진행 시간 (단위: ms)</ko>\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 * <ko>{@link https://naver.github.io/egjs-axes/ Axes}의 {@link https://naver.github.io/egjs-axes/release/latest/doc/eg.Axes.html#event:release release} 이벤트</ko>\n * @param {DIRECTION} [direction=DIRECTION.NONE] Direction to move, only available in the {@link Flicking#circular circular} mode<ko>이동할 방향. {@link Flicking#circular circular} 옵션 활성화시에만 사용 가능합니다</ko>\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 * <ko>\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 * </ko>\n * @return {Promise<void>} A Promise which will be resolved after reaching the target panel<ko>해당 패널 도달시에 resolve되는 Promise</ko>\n */\n public async moveToPanel(panel: Panel, {\n duration,\n direction = DIRECTION.NONE,\n axesEvent\n }: {\n duration: number;\n direction?: ValueOf<typeof DIRECTION>;\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<ko>옵션 객체</ko>\n * @param {number} [options.index] Index of AnchorPoint<ko>AnchorPoint의 인덱스</ko>\n * @param {number} [options.position] Position of AnchorPoint<ko>AnchorPoint의 좌표</ko>\n * @param {Panel} [options.panel] A {@link Panel} instance AnchorPoint is referencing to<ko>AnchorPoint가 참조하고 있는 {@link Panel}</ko>\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<ko>입력 중단 이후 통과하여 이동할 수 있는 패널의 최대 갯수</ko>\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<SnapControlOptions> = {}) {\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<ko>이동할 좌표</ko>\n * @param {number} duration Duration of the panel movement animation (unit: ms).<ko>패널 이동 애니메이션 진행 시간 (단위: ms)</ko>\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 * <ko>{@link https://naver.github.io/egjs-axes/ Axes}의 {@link https://naver.github.io/egjs-axes/release/latest/doc/eg.Axes.html#event:release release} 이벤트</ko>\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 * <ko>\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 * </ko>\n * @return {Promise<void>} A Promise which will be resolved after reaching the target position<ko>해당 좌표 도달시에 resolve되는 Promise</ko>\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 * <ko>스크롤 애니메이션을 스크롤 영역의 시작과 끝부분에서 멈추도록 하여, 바운스 영역을 넘어가지 않도록 합니다</ko>\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<FreeControlOptions> = {}) {\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 resize<ko>Resize 이전 현재 선택된 패널 내에서의 카메라 progress 값</ko>\n * @throws {FlickingError}\n * {@link ERROR_CODE NOT_ATTACHED_TO_FLICKING} When {@link Camera#init init} is not called before\n * <ko>{@link ERROR_CODE NOT_ATTACHED_TO_FLICKING} {@link Camera#init init}이 이전에 호출되지 않은 경우</ko>\n * @chainable\n * @return {Promise<void>}\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<ko>이동할 좌표</ko>\n * @param {number} duration Duration of the panel movement animation (unit: ms).<ko>패널 이동 애니메이션 진행 시간 (단위: ms)</ko>\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 * <ko>{@link https://naver.github.io/egjs-axes/ Axes}의 {@link https://naver.github.io/egjs-axes/release/latest/doc/eg.Axes.html#event:release release} 이벤트</ko>\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 * <ko>\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 * </ko>\n * @return {Promise<void>} A Promise which will be resolved after reaching the target position<ko>해당 좌표 도달시에 resolve되는 Promise</ko>\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<ko>최대로 움직일 수 있는 패널의 개수</ko>\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<StrictControlOptions> = {}) {\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<ko>이동할 좌표</ko>\n * @param {number} duration Duration of the panel movement animation (unit: ms).<ko>패널 이동 애니메이션 진행 시간 (단위: ms)</ko>\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 * <ko>{@link https://naver.github.io/egjs-axes/ Axes}의 {@link https://naver.github.io/egjs-axes/release/latest/doc/eg.Axes.html#event:release release} 이벤트</ko>\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 * <ko>\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 * </ko>\n * @return {Promise<void>} A Promise which will be resolved after reaching the target position<ko>해당 좌표 도달시에 resolve되는 Promise</ko>\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<ko>최소 위치</ko>\n * @property {number} min A maximum position<ko>최대 위치</ko>\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<ko>최소 위치</ko>\n * @property {number} min A maximum position<ko>최대 위치</ko>\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<CameraOptions> = {}) {\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 * <ko>{@link ERROR_CODE NOT_ATTACHED_TO_FLICKING} {@link Camera#init init}이 이전에 호출되지 않은 경우</ko>\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}<ko>Flicking의 인스턴스</ko>\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 * <ko>{@link ERROR_CODE VAL_MUST_NOT_NULL} 뷰포트 엘리먼트 내부에 카메라 엘리먼트(`.flicking-camera`)가 존재하지 않을 경우</ko>\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<ko>움직일 위치</ko>\n * @throws {FlickingError}\n * {@link ERROR_CODE NOT_ATTACHED_TO_FLICKING} When {@link Camera#init init} is not called before\n * <ko>{@link ERROR_CODE NOT_ATTACHED_TO_FLICKING} {@link Camera#init init}이 이전에 호출되지 않은 경우</ko>\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}<ko>기준 {@link AnchorPoint}</ko>\n * @return {AnchorPoint | null} The previous {@link AnchorPoint}<ko>이전 {@link AnchorPoint}</ko>\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}<ko>기준 {@link AnchorPoint}</ko>\n * @return {AnchorPoint | null} The next {@link AnchorPoint}<ko>다음 {@link AnchorPoint}</ko>\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<ko>확인할 좌표</ko>\n * @return {AnchorPoint | null} The {@link AnchorPoint} that includes the given position<ko>해당 좌표를 포함하는 {@link AnchorPoint}</ko>\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<ko>확인할 좌표</ko>\n * @return {AnchorPoint | null} The {@link AnchorPoint} nearest to the given position<ko>해당 좌표에 가장 인접한 {@link AnchorPoint}</ko>\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<ko>범위를 제한할 좌표</ko>\n * @return {number} A clamped position<ko>범위 제한된 좌표</ko>\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<ko>확인할 {@link Panel}의 인스턴스</ko>\n * @return {boolean} Whether the panel's inside Camera's range<ko>도달 가능한 범위 내에 해당 패널이 존재하는지 여부</ko>\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<ko>확인할 {@link Panel}의 인스턴스</ko>\n * @return Whether the panel element is visible at the current position<ko>현재 위치에서 해당 패널 엘리먼트가 보이는지 여부</ko>\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 * <ko>{@link ERROR_CODE NOT_ATTACHED_TO_FLICKING} {@link Camera#init init}이 이전에 호출되지 않은 경우</ko>\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 * <ko>{@link ERROR_CODE NOT_ATTACHED_TO_FLICKING} {@link Camera#init init}이 이전에 호출되지 않은 경우</ko>\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 * <ko>{@link ERROR_CODE NOT_ATTACHED_TO_FLICKING} {@link Camera#init init}이 이전에 호출되지 않은 경우</ko>\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<ko>순서를 변경할 패널</ko>\n * @property {DIRECTION} direction Toggling position<ko>순서를 변경할 방향</ko>\n * @property {boolean} toggled Whether the panel has toggled its position to `direction`<ko>`direction` 방향으로 패널 위치를 변경했는지 여부를 나타내는 값</ko>\n */\nexport interface TogglePoint {\n panel: Panel;\n direction: ValueOf<typeof DIRECTION>;\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 * <ko>{@link ERROR_CODE NOT_ATTACHED_TO_FLICKING} {@link Camera#init init}이 이전에 호출되지 않은 경우</ko>\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 * <ko>{@link ERROR_CODE NOT_ATTACHED_TO_FLICKING} {@link Camera#init init}이 이전에 호출되지 않은 경우</ko>\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<ko>옵션 오브젝트</ko>\n * @param {Constants.ALIGN | string | number} [options.align] An {@link Flicking#align align} value that will be applied to all panels<ko>전체 패널에 적용될 {@link Flicking#align align} 값</ko>\n */\n public constructor({\n align = ALIGN.CENTER\n }: Partial<RendererOptions> = {}) {\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<void>;\n public abstract forceRenderAllPanels(): Promise<void>;\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}<ko>Flicking의 인스턴스</ko>\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<ko>주어진 인덱스에 해당하는 패널</ko>\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<ko>새로 패널들을 추가할 인덱스</ko>\n * @param {any[]} elements An array of element or framework component with element in it<ko>엘리먼트의 배열 혹은 프레임워크에서 엘리먼트를 포함한 컴포넌트들의 배열</ko>\n * @return {Panel[]} An array of prepended panels<ko>추가된 패널들의 배열</ko>\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<ko>제거할 패널의 인덱스</ko>\n * @param {number} [deleteCount=1] Number of panels to remove from index<ko>`index` 이후로 제거할 패널의 개수</ko>\n * @return An array of removed panels<ko>제거된 패널들의 배열</ko>\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<ValueOf<typeof ALIGN>> | 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<typeof DIRECTION>;\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 * <ko>{@link Flicking#horizontal horizontal}이 `true`일 경우 `margin-left`, `false`일 경우 `margin-top`에 해당하는 값</ko>\n * @property {number} next CSS `margin-right` when the {@link Flicking#horizontal horizontal} is `true`, and `margin-bottom` else\n * <ko>{@link Flicking#horizontal horizontal}이 `true`일 경우 `margin-right`, `false`일 경우 `margin-bottom`에 해당하는 값</ko>\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<ko>옵션 오브젝트</ko>\n * @param {number} [options.index] An initial index of the panel<ko>패널의 초기 인덱스</ko>\n * @param {Constants.ALIGN | string | number} [options.align] An initial {@link Flicking#align align} value of the panel<ko>패널의 초기 {@link Flicking#align align}값</ko>\n * @param {Flicking} [options.flicking] A Flicking instance panel's referencing<ko>패널이 참조하는 {@link Flicking} 인스턴스</ko>\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<ko>사전에 캐시된 패널의 크기 정보</ko>\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<ko>새 패널 크기</ko>\n * @param {number|string} [size.width] CSS string or number(in px)<ko>CSS 문자열 또는 숫자(px)</ko>\n * @param {number|string} [size.height] CSS string or number(in px)<ko>CSS 문자열 또는 숫자(px)</ko>\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<ko>확인하고자 하는 HTMLElement</ko>\n * @return {boolean} A Boolean value indicating the element is inside of this panel {@link Panel#element element}<ko>패널의 {@link Panel#element element}내에 해당 엘리먼트 포함 여부</ko>\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<ko>확인하고자 하는 좌표</ko>\n * @param {boolean} [includeMargin=false] Include {@link Panel#margin margin} to the range<ko>패널 영역에 {@link Panel#margin margin}값을 포함시킵니다</ko>\n * @return {boolean} A Boolean value indicating whether the given position is included in the panel range<ko>해당 좌표가 패널 영역 내에 속해있는지 여부</ko>\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<ko>확인하고자 하는 최소 범위</ko>\n * @param {number} max Maximum value of the range to check<ko>확인하고자 하는 최대 범위</ko>\n * @param {boolean} [includeMargin=false] Include {@link Panel#margin margin} to the range<ko>패널 영역에 {@link Panel#margin margin}값을 포함시킵니다</ko>\n * @returns {boolean} A Boolean value indicating whether the given range is fully included in the panel range<ko>해당 범위가 패널 영역 내에 완전히 속해있는지 여부</ko>\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)<ko>애니메이션 진행 시간 (단위: ms)</ko>\n * @returns {Promise<void>} A Promise which will be resolved after reaching the panel<ko>패널 도달시에 resolve되는 Promise</ko>\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<ko>이전 패널</ko>\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<ko>다음 패널</ko>\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 0<ko>0보다 같거나 큰 정수</ko>\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 0<ko>0보다 같거나 큰 정수</ko>\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<ko>옵션 오브젝트</ko>\n * @param {HTMLElement} [options.el] A `HTMLElement` panel's referencing<ko>패널이 참조하는 `HTMLElement`</ko>\n * @param {number} [options.index] An initial index of the panel<ko>패널의 초기 인덱스</ko>\n * @param {Constants.ALIGN | string | number} [options.align] An initial {@link Flicking#align align} value of the panel<ko>패널의 초기 {@link Flicking#align align}값</ko>\n * @param {Flicking} [options.flicking] A Flicking instance panel's referencing<ko>패널이 참조하는 {@link Flicking} 인스턴스</ko>\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<ValueOf<typeof ALIGN>> | 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<typeof MOVE_TYPE> | MoveTypeOptions<ValueOf<typeof MOVE_TYPE>>;\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<FlickingEvents> {\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<ko>개개의 {@link Panel}에 적용할 값</ko>\n * @property {ALIGN | string | number} camera The align value for {@link Camera}<ko>{@link Camera}에 적용할 값</ko>\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/} <ko>이징 함수 Cheat Sheet {@link http://easings.net/}</ko>\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 * <ko>{@link https://naver.github.io/egjs-axes/release/latest/doc/global.html#PanInputOption 가능한 값들 (PanInputOption#inputType)}</ko>\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<string, object>}\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<string | number>}\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 * <ko>Flicking을 초기화할 HTMLElement로, `string` 타입으로 지정시 css 선택자 문자열을 지정해야 합니다.</ko>\n * @param {object} [options={}] An options object for Flicking.<ko>Flicking에 적용할 옵션 오브젝트</ko>\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 * <ko>\n *\n * |code|조건|\n * |---|---|\n * |{@link ERROR_CODE WRONG_TYPE}|루트 엘리먼트가 string이나 HTMLElement가 아닐 경우|\n * |{@link ERROR_CODE ELEMENT_NOT_FOUND}|주어진 CSS selector로 엘리먼트를 찾지 못했을 경우|\n *\n * </ko>\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<FlickingOptions> = {}) {\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<void> {\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)<ko>패널 이동 애니메이션 진행 시간 (단위: ms)</ko>\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 * <ko>\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 * </ko>\n * @return {Promise<void>} A Promise which will be resolved after reaching the previous panel<ko>이전 패널 도달시에 resolve되는 Promise</ko>\n */\n public prev(duration: number = this._duration): Promise<void> {\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).<ko>패널 이동 애니메이션 진행 시간 (단위: ms)</ko>\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 * <ko>\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 * </ko>\n * @return {Promise<void>} A Promise which will be resolved after reaching the next panel<ko>다음 패널 도달시에 resolve되는 Promise</ko>\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<ko>이동할 패널의 인덱스</ko>\n * @param {number} [duration={@link Flicking#duration options.duration}] Duration of the animation (unit: ms)<ko>애니메이션 진행 시간 (단위: ms)</ko>\n * @param {DIRECTION} [direction=DIRECTION.NONE] Direction to move, only available in the {@link Flicking#circular circular} mode<ko>이동할 방향. {@link Flicking#circular circular} 옵션 활성화시에만 사용 가능합니다</ko>\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 * <ko>\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 * </ko>\n * @return {Promise<void>} A Promise which will be resolved after reaching the target panel<ko>해당 패널 도달시에 resolve되는 Promise</ko>\n */\n public moveTo(index: number, duration: number = this._duration, direction: ValueOf<typeof DIRECTION> = 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<ko>주어진 인덱스에 해당하는 패널</ko>\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 options<ko>Status 반환 옵션</ko>\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<ko>현재 패널 인덱스를 반환값에 포함시킵니다. {@link Flicking#setStatus setStatus} 호출시 자동으로 해당 인덱스로 카메라를 움직입니다</ko>\n * @param {boolean} [options.position=true] Include camera position to the returning status. This works only when the {@link Flicking#moveType moveType} is `freeScroll`<ko>카메라의 현재 위치를 반환값에 포함시킵니다. 이 옵션은 {@link Flicking#moveType moveType}이 `freeScroll`일 경우에만 동작합니다</ko>\n * @param {boolean} [options.includePanelHTML=false] Include panel's `outerHTML` to the returning status<ko>패널의 `outerHTML`을 반환값에 포함시킵니다</ko>\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 * <ko>현재 보이는 패널({@link Flicking#visiblePanel visiblePanel})의 HTML만 반환합니다. `includePanelHTML`이 `true`일 경우에만 동작합니다.</ko>\n * @return {Partial<Status>} An object with current status value information<ko>현재 상태값 정보를 가진 객체.</ko>\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 Status value to be restored. You should use the return value of the {@link Flicking#getStatus getStatus()} method<ko>복원할 상태 값. {@link Flicking#getStatus getStatus()} 메서드의 반환값을 지정하면 됩니다</ko>\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<ko>추가할 플러그인(들)</ko>\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.<ko>제거 플러그인(들).</ko>\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<void> {\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 * <ko>새로운 HTMLElement, 혹은 엘리먼트의 outerHTML, 혹은 그것들의 배열</ko>\n * @return {Panel[]} An array of appended panels<ko>추가된 패널들의 배열</ko>\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(\"\\<div\\>Panel\\</div\\>\");\n * flicking.append([\"\\<div\\>Panel\\</div\\>\", document.createElement(\"div\")]);\n * // Even this is possible\n * flicking.append(\"\\<div\\>Panel 1\\</div\\>\\<div\\>Panel 2\\</div\\>\");\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 * <ko>새로운 HTMLElement, 혹은 엘리먼트의 outerHTML, 혹은 그것들의 배열</ko>\n * @return {Panel[]} An array of prepended panels<ko>추가된 패널들의 배열</ko>\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(\"\\<div\\>Panel\\</div\\>\");\n * flicking.prepend([\"\\<div\\>Panel\\</div\\>\", document.createElement(\"div\")]);\n * // Even this is possible\n * flicking.prepend(\"\\<div\\>Panel 1\\</div\\>\\<div\\>Panel 2\\</div\\>\");\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<ko>새로 패널들을 추가할 인덱스</ko>\n * @param {ElementLike | ElementLike[]} element A new HTMLElement, a outerHTML of element, or an array of both\n * <ko>새로운 HTMLElement, 혹은 엘리먼트의 outerHTML, 혹은 그것들의 배열</ko>\n * @return {Panel[]} An array of prepended panels<ko>추가된 패널들의 배열</ko>\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, \"\\<div\\>Panel\\</div\\>\");\n * flicking.insert(1, [\"\\<div\\>Panel\\</div\\>\", document.createElement(\"div\")]);\n * // Even this is possible\n * flicking.insert(3, \"\\<div\\>Panel 1\\</div\\>\\<div\\>Panel 2\\</div\\>\");\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<ko>제거할 패널의 인덱스</ko>\n * @param {number} [deleteCount=1] Number of panels to remove from index<ko>`index` 이후로 제거할 패널의 개수</ko>\n * @return {Panel[]} An array of removed panels<ko>제거된 패널들의 배열</ko>\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<typeof MOVE_TYPE>);\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<void> {\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<T> 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<T = any> extends Panel {\n protected _externalComponent: T;\n\n /**\n * @param {object} options An options object<ko>옵션 오브젝트</ko>\n * @param {HTMLElement} [options.el] A `HTMLElement` panel's referencing<ko>패널이 참조하는 `HTMLElement`</ko>\n * @param {number} [options.index] An initial index of the panel<ko>패널의 초기 인덱스</ko>\n * @param {Constants.ALIGN | string | number} [options.align] An initial {@link Flicking#align align} value of the panel<ko>패널의 초기 {@link Flicking#align align}값</ko>\n * @param {Flicking} [options.flicking] A Flicking instance panel's referencing<ko>패널이 참조하는 {@link Flicking} 인스턴스</ko>\n */\n public constructor(options: ExternalPanelOptions<T>) {\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<Partial<FlickingProps & FlickingOptions>> {\n * &#64;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<any>, 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<any>, 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 <T>(flicking: Flicking, diffResult: DiffResult<T>) => {\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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"}
\No newline at end of file