{"version":3,"file":"flicking.pkgd.min.js","sources":["../src/const/error.ts","../src/const/external.ts","../src/utils.ts","../src/core/FlickingError.ts","../src/core/Viewport.ts","../src/core/AutoResizer.ts","../src/core/panel/provider/VanillaElementProvider.ts","../src/core/panel/provider/VirtualElementProvider.ts","../src/core/VirtualManager.ts","../src/control/states/State.ts","../src/const/axes.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/camera/mode/CameraMode.ts","../src/camera/mode/LinearCameraMode.ts","../src/camera/mode/CircularCameraMode.ts","../src/camera/mode/BoundCameraMode.ts","../src/camera/Camera.ts","../src/renderer/Renderer.ts","../src/renderer/VanillaRenderer.ts","../src/renderer/ExternalRenderer.ts","../src/core/panel/Panel.ts","../src/renderer/strategy/NormalRenderingStrategy.ts","../src/core/panel/VirtualPanel.ts","../src/renderer/strategy/VirtualRenderingStrategy.ts","../src/Flicking.ts","../src/CrossFlicking.ts","../src/cfc/sync.ts","../src/cfc/getDefaultCameraTransform.ts","../src/cfc/withFlickingMethods.ts","../src/cfc/getRenderingPanels.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 * @property {number} NOT_ALLOWED_IN_VIRTUAL When the non-allowed method is called while the virtual option is enabled<ko>virtual �듭뀡�� �쒖꽦�붾맂 �곹깭�먯꽌 �ъ슜 遺덇��ν븳 硫붿냼�쒓� �몄텧�섏뿀�� 寃쎌슦</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  NOT_ALLOWED_IN_VIRTUAL: 14\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: \"This module 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  NOT_ALLOWED_IN_VIRTUAL: \"This behavior is not allowed when the virtual option is enabled\"\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\nexport const CLASS = {\n  VIEWPORT: \"flicking-viewport\",\n  CAMERA: \"flicking-camera\",\n  VERTICAL: \"vertical\",\n  HIDDEN: \"flicking-hidden\",\n  DEFAULT_VIRTUAL: \"flicking-panel\"\n};\n\n/**\n * An object with all possible {@link Flicking#circularFallback circularFallback}s\n * @ko Flicking�� {@link Flicking#circularFallback circularFallback}�� �ㅼ젙 媛��ν븳 媛믩뱾�� �닿퀬 �덈뒗 媛앹껜\n * @type {object}\n * @property {string} LINEAR \"linear\"\n * @property {string} BOUND \"bound\"\n */\nexport const CIRCULAR_FALLBACK = {\n  LINEAR: \"linear\",\n  BOUND: \"bound\"\n} as const;\n\n/**\n * An object for identifying {@link https://developer.mozilla.org/en-US/docs/Web/CSS/direction direction} CSS property applied to the camera element(`.flicking-camera`)\n * @ko 移대찓�� �섎━癒쇳듃(`.flicking-camera`)�� �곸슜�� {@link https://developer.mozilla.org/en-US/docs/Web/CSS/direction direction} CSS �띿꽦�� 援щ텇�섍린 �꾪븳 媛앹껜\n * @type {object}\n * @property {string} LTR \"ltr\"\n * @property {string} RTL \"rtl\"\n */\nexport const ORDER = {\n  LTR: \"ltr\",\n  RTL: \"rtl\"\n} as const;\n\n/**\n * An object that contains the direction that {@link Flicking} is moving\n * @ko {@link Flicking}�� ��吏곸씠�� 諛⑺뼢�� �닿퀬 �덈뒗 媛앹껜\n * @type {object}\n * @property {\"horizontal\"} HORIZONTAL horizontal<ko>�섑룊 諛⑺뼢</ko>\n * @property {\"vertical\"} VERTICAL vertical<ko>�섏쭅 諛⑺뼢</ko>\n */\nexport const MOVE_DIRECTION = {\n  HORIZONTAL: \"horizontal\",\n  VERTICAL: \"vertical\"\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): Flicking => {\n  if (!val) {\n    throw new FlickingError(ERROR.MESSAGE.NOT_ATTACHED_TO_FLICKING, 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 parsePanelAlign = (align: FlickingOptions[\"align\"]) => typeof align === \"object\"\n  ? (align as { panel: string | number }).panel\n  : align;\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 setSize = (el: HTMLElement, { width, height }: Partial<{\n  width: number | string;\n  height: number | string;\n}>) => {\n  if (!el) {\n    return;\n  }\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\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 range = (end: number): number[] => {\n  const arr = new Array(end);\n\n  for (let i = 0; i < end; i++) {\n    arr[i] = i;\n  }\n\n  return arr;\n};\n\nexport const getElementSize = ({\n  el,\n  horizontal,\n  useFractionalSize,\n  useOffset,\n  style\n}: {\n  el: HTMLElement;\n  horizontal: boolean;\n  useFractionalSize: boolean;\n  useOffset: boolean;\n  style: CSSStyleDeclaration;\n}): number => {\n  let size = 0;\n  if (useFractionalSize) {\n    const baseSize = parseFloat(horizontal ? style.width : style.height) || 0;\n    const isBorderBoxSizing = style.boxSizing === \"border-box\";\n    const border = horizontal\n      ? parseFloat(style.borderLeftWidth || \"0\") + parseFloat(style.borderRightWidth || \"0\")\n      : parseFloat(style.borderTopWidth || \"0\") + parseFloat(style.borderBottomWidth || \"0\");\n\n    if (isBorderBoxSizing) {\n      size = useOffset\n        ? baseSize\n        : baseSize - border;\n    } else {\n      const padding = horizontal\n        ? parseFloat(style.paddingLeft || \"0\") + parseFloat(style.paddingRight || \"0\")\n        : parseFloat(style.paddingTop || \"0\") + parseFloat(style.paddingBottom || \"0\");\n\n      size = useOffset\n        ? baseSize + padding + border\n        : baseSize + padding;\n    }\n  } else {\n    const sizeStr = horizontal ? \"Width\" : \"Height\";\n\n    size = useOffset\n      ? el[`offset${sizeStr}`]\n      : el[`client${sizeStr}`];\n  }\n\n  return Math.max(size, 0);\n};\n\nexport const setPrototypeOf = Object.setPrototypeOf || ((obj, proto) => {\n  obj.__proto__ = proto;\n  return obj;\n});\n\nexport const camelize = (str: string): string => {\n  return str.replace(/[\\s-_]([a-z])/g, (all, letter) => letter.toUpperCase());\n};\n\nexport const getDataAttributes = (element: HTMLElement, attributePrefix: string): Record<string, string> => {\n  const dataAttributes: Record<string, string> = {};\n  const attributes = element.attributes;\n  const length = attributes.length;\n\n  for (let i = 0; i < length; ++i) {\n    const attribute = attributes[i];\n    const { name, value } = attribute;\n    if (name.indexOf(attributePrefix) === -1) {\n      continue;\n    }\n    dataAttributes[camelize(name.replace(attributePrefix, \"\"))] = value;\n  }\n\n  return dataAttributes;\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 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 Flicking from \"../Flicking\";\nimport { getElementSize, getStyle, isString } from \"../utils\";\n\n/**\n * A component that manages viewport size\n * @ko 酉고룷�� �ш린 �뺣낫瑜� �대떦�섎뒗 而댄룷�뚰듃\n */\nclass Viewport {\n  private _flicking: Flicking;\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(flicking: Flicking, el: HTMLElement) {\n    this._flicking = flicking;\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    const {\n      useFractionalSize\n    } = this._flicking;\n\n    this._width = getElementSize({\n      el,\n      horizontal: true,\n      useFractionalSize,\n      useOffset: false,\n      style: elStyle\n    });\n    this._height = getElementSize({\n      el,\n      horizontal: false,\n      useFractionalSize,\n      useOffset: false,\n      style: elStyle\n    });\n\n    this._padding = {\n      left: elStyle.paddingLeft ? parseFloat(elStyle.paddingLeft) : 0,\n      right: elStyle.paddingRight ? parseFloat(elStyle.paddingRight) : 0,\n      top: elStyle.paddingTop ? parseFloat(elStyle.paddingTop) : 0,\n      bottom: elStyle.paddingBottom ? parseFloat(elStyle.paddingBottom) : 0\n    };\n    this._isBorderBoxSizing = elStyle.boxSizing === \"border-box\";\n  }\n}\n\nexport default Viewport;\n","/*\n * Copyright (c) 2015 NAVER Corp.\n * egjs projects are licensed under the MIT license\n */\nimport Flicking from \"../Flicking\";\n\nclass AutoResizer {\n  private _flicking: Flicking;\n  private _enabled: boolean;\n  private _resizeObserver: ResizeObserver | null;\n  private _resizeTimer: number;\n  private _maxResizeDebounceTimer: number;\n\n  public get enabled() { return this._enabled; }\n\n  public constructor(flicking: Flicking) {\n    this._flicking = flicking;\n    this._enabled = false;\n    this._resizeObserver = null;\n    this._resizeTimer = -1;\n    this._maxResizeDebounceTimer = -1;\n  }\n\n  public enable(): this {\n    const flicking = this._flicking;\n    const viewport = flicking.viewport;\n\n    if (this._enabled) {\n      this.disable();\n    }\n\n    if (flicking.useResizeObserver && !!window.ResizeObserver) {\n      const viewportSizeNot0 = viewport.width !== 0 || viewport.height !== 0;\n\n      const resizeObserver = viewportSizeNot0\n        ? new ResizeObserver(this._skipFirstResize)\n        : new ResizeObserver(this._onResize);\n\n      resizeObserver.observe(flicking.viewport.element);\n\n      this._resizeObserver = resizeObserver;\n    } else {\n      window.addEventListener(\"resize\", this._onResize);\n    }\n\n    this._enabled = true;\n\n    return this;\n  }\n\n  public disable(): this {\n    if (!this._enabled) return this;\n\n    const resizeObserver = this._resizeObserver;\n    if (resizeObserver) {\n      resizeObserver.disconnect();\n      this._resizeObserver = null;\n    } else {\n      window.removeEventListener(\"resize\", this._onResize);\n    }\n\n    this._enabled = false;\n\n    return this;\n  }\n\n  private _onResize = () => {\n    const flicking = this._flicking;\n    const resizeDebounce = flicking.resizeDebounce;\n    const maxResizeDebounce = flicking.maxResizeDebounce;\n\n    if (resizeDebounce <= 0) {\n      void flicking.resize();\n    } else {\n      if (this._maxResizeDebounceTimer <= 0) {\n        if (maxResizeDebounce > 0 && maxResizeDebounce >= resizeDebounce) {\n          this._maxResizeDebounceTimer = window.setTimeout(this._doScheduledResize, maxResizeDebounce);\n        }\n      }\n\n      if (this._resizeTimer > 0) {\n        clearTimeout(this._resizeTimer);\n        this._resizeTimer = 0;\n      }\n\n      this._resizeTimer = window.setTimeout(this._doScheduledResize, resizeDebounce);\n    }\n  };\n\n  private _doScheduledResize = () => {\n    clearTimeout(this._resizeTimer);\n    clearTimeout(this._maxResizeDebounceTimer);\n\n    this._maxResizeDebounceTimer = -1;\n    this._resizeTimer = -1;\n\n    void this._flicking.resize();\n  };\n\n  // eslint-disable-next-line @typescript-eslint/member-ordering\n  private _skipFirstResize = (() => {\n    let isFirstResize = true;\n\n    return (() => {\n      if (isFirstResize) {\n        isFirstResize = false;\n        return;\n      }\n      this._onResize();\n    });\n  })();\n}\n\nexport default AutoResizer;\n","/*\n * Copyright (c) 2015 NAVER Corp.\n * egjs projects are licensed under the MIT license\n */\nimport Flicking from \"../../../Flicking\";\n\nimport ElementProvider from \"./ElementProvider\";\n\n/**\n * @internal\n */\nclass VanillaElementProvider implements ElementProvider {\n  private _element: HTMLElement;\n  private _rendered: boolean;\n\n  public get element() { return this._element; }\n  public get rendered() { return this._rendered; }\n\n  public constructor(element: HTMLElement) {\n    this._element = element;\n    this._rendered = true;\n  }\n\n  public show(flicking: Flicking): void {\n    const el = this.element;\n    const cameraEl = flicking.camera.element;\n\n    if (el.parentElement !== cameraEl) {\n      cameraEl.appendChild(el);\n      this._rendered = true;\n    }\n  }\n\n  public hide(flicking: Flicking): void {\n    const el = this.element;\n    const cameraEl = flicking.camera.element;\n\n    if (el.parentElement === cameraEl) {\n      cameraEl.removeChild(el);\n      this._rendered = false;\n    }\n  }\n}\n\nexport default VanillaElementProvider;\n","/*\n * Copyright (c) 2015 NAVER Corp.\n * egjs projects are licensed under the MIT license\n */\n\nimport Flicking from \"../../../Flicking\";\nimport VirtualPanel from \"../VirtualPanel\";\n\nimport ElementProvider from \"./ElementProvider\";\n\n/**\n * @internal\n */\nclass VirtualElementProvider implements ElementProvider {\n  private _flicking: Flicking;\n  private _panel: VirtualPanel;\n\n  public get element() { return this._virtualElement.nativeElement; }\n  public get rendered() { return this._virtualElement.visible; }\n\n  private get _virtualElement() {\n    const flicking = this._flicking;\n    const elIndex = this._panel.elementIndex;\n    const virtualElements = flicking.virtual.elements;\n\n    return virtualElements[elIndex];\n  }\n\n  public constructor(flicking: Flicking) {\n    this._flicking = flicking;\n  }\n\n  public init(panel: VirtualPanel) {\n    this._panel = panel;\n  }\n\n  public show(): void {\n    // DO_NOTHING\n    // Actual element visibility is controlled by VirtualManager\n  }\n\n  public hide(): void {\n    // DO_NOTHING\n    // Actual element visibility is controlled by VirtualManager\n  }\n}\n\nexport default VirtualElementProvider;\n","/*\n * Copyright (c) 2015 NAVER Corp.\n * egjs projects are licensed under the MIT license\n */\nimport Flicking from \"../Flicking\";\nimport { range } from \"../utils\";\nimport { CLASS } from \"../const/external\";\n\nimport VirtualPanel from \"./panel/VirtualPanel\";\n\nexport interface VirtualOptions {\n  renderPanel: (panel: VirtualPanel, index: number) => string;\n  initialPanelCount: number;\n  cache?: boolean;\n  panelClass?: string;\n}\n\n/**\n * A manager class to add / remove virtual panels\n */\nclass VirtualManager {\n  private _flicking: Flicking;\n\n  private _renderPanel: (panel: VirtualPanel, index: number) => string;\n  private _initialPanelCount: number;\n  private _cache: boolean;\n  private _panelClass: string;\n\n  private _elements: Array<{ nativeElement: HTMLElement; visible: boolean }>;\n\n  public get elements() { return this._elements; }\n\n  // Options\n  /**\n   * A rendering function for the panel element's innerHTML\n   * @ko �⑤꼸 �섎━癒쇳듃�� innerHTML�� �뚮뜑留곹븯�� �⑥닔\n   * @type {function}\n   * @param {VirtualPanel} panel Instance of the panel<ko>�⑤꼸 �몄뒪�댁뒪</ko>\n   * @param {number} index Index of the panel<ko>�⑤꼸 �몃뜳��</ko>\n   * @default \"() => {}\"\n   */\n  public get renderPanel() { return this._renderPanel; }\n  /**\n   * Initial panel count to render\n   * @ko 理쒖큹濡� �뚮뜑留곹븷 �⑤꼸�� 媛쒖닔\n   * @readonly\n   * @type {number}\n   * @default -1\n   */\n  public get initialPanelCount() { return this._initialPanelCount; }\n  /**\n   * Whether to cache rendered panel's innerHTML\n   * @ko �뚮뜑留곷맂 �⑤꼸�� innerHTML �뺣낫瑜� 罹먯떆�좎� �щ�\n   * @type {boolean}\n   * @default false\n   */\n  public get cache() { return this._cache; }\n  /**\n   * The class name that will be applied to rendered panel elements\n   * @ko �뚮뜑留곷릺�� �⑤꼸 �섎━癒쇳듃�� �곸슜�� �대옒�� �대쫫\n   * @type {string}\n   * @default \"flicking-panel\"\n   */\n  public get panelClass() { return this._panelClass; }\n\n  public set renderPanel(val: VirtualOptions[\"renderPanel\"]) {\n    this._renderPanel = val;\n    this._flicking.renderer.panels.forEach((panel: VirtualPanel) => panel.uncacheRenderResult());\n  }\n\n  public set cache(val: NonNullable<VirtualOptions[\"cache\"]>) { this._cache = val; }\n  public set panelClass(val: NonNullable<VirtualOptions[\"panelClass\"]>) { this._panelClass = val; }\n\n  public constructor(flicking: Flicking, options: VirtualOptions | null) {\n    this._flicking = flicking;\n\n    this._renderPanel = options?.renderPanel ?? (() => \"\");\n    this._initialPanelCount = options?.initialPanelCount ?? -1;\n    this._cache = options?.cache ?? false;\n    this._panelClass = options?.panelClass ?? CLASS.DEFAULT_VIRTUAL;\n\n    this._elements = [];\n  }\n\n  public init() {\n    const flicking = this._flicking;\n\n    if (!flicking.virtualEnabled) return;\n\n    if (!flicking.externalRenderer && !flicking.renderExternal) {\n      this._initVirtualElements();\n    }\n\n    const virtualElements = flicking.camera.children;\n    this._elements = virtualElements.map(el => ({ nativeElement: el, visible: true }));\n  }\n\n  public show(index: number) {\n    const el = this._elements[index];\n    const nativeEl = el.nativeElement;\n\n    el.visible = true;\n\n    if (nativeEl.style.display) {\n      nativeEl.style.display = \"\";\n    }\n  }\n\n  public hide(index: number) {\n    const el = this._elements[index];\n    const nativeEl = el.nativeElement;\n\n    el.visible = false;\n    nativeEl.style.display = \"none\";\n  }\n\n  /**\n   * Add new virtual panels at the end of the list\n   * @ko �덈줈�� 媛��� �⑤꼸�ㅼ쓣 由ъ뒪�몄쓽 �앹뿉 異붽��⑸땲��\n   * @param {number} count The number of panels to add<ko>異붽��� �⑤꼸�� 媛쒖닔</ko>\n   * @returns {Array<VirtualPanel>} The new panels added<ko>�덈∼寃� 異붽��� �⑤꼸��</ko>\n   */\n  public append(count: number = 1): VirtualPanel[] {\n    const flicking = this._flicking;\n\n    return this.insert(flicking.panels.length, count);\n  }\n\n  /**\n   * Add new virtual panels at the start of the list\n   * @ko �덈줈�� 媛��� �⑤꼸�ㅼ쓣 由ъ뒪�몄쓽 �쒖옉�� 異붽��⑸땲��\n   * @param {number} count The number of panels to add<ko>異붽��� �⑤꼸�� 媛쒖닔</ko>\n   * @returns {Array<VirtualPanel>} The new panels added<ko>�덈∼寃� 異붽��� �⑤꼸��</ko>\n   */\n  public prepend(count: number = 1): VirtualPanel[] {\n    return this.insert(0, count);\n  }\n\n  /**\n   * Add new virtual panels at the given index\n   * @ko �덈줈�� 媛��� �⑤꼸�ㅼ쓣 二쇱뼱吏� �몃뜳�ㅼ뿉 異붽��⑸땲��\n   * @param {number} count The number of panels to add<ko>異붽��� �⑤꼸�� 媛쒖닔</ko>\n   * @returns {Array<VirtualPanel>} The new panels added<ko>�덈∼寃� 異붽��� �⑤꼸��</ko>\n   */\n  public insert(index: number, count: number = 1): VirtualPanel[] {\n    if (count <= 0) return [];\n\n    const flicking = this._flicking;\n\n    return flicking.renderer.batchInsert({ index, elements: range(count), hasDOMInElements: false }) as VirtualPanel[];\n  }\n\n  /**\n   * Remove panels at the given index\n   * @ko 二쇱뼱吏� �몃뜳�ㅼ뿉�� �⑤꼸�ㅼ쓣 ��젣�⑸땲��\n   * @param {number} count The number of panels to remove<ko>��젣�� �⑤꼸�� 媛쒖닔</ko>\n   * @returns {Array<VirtualPanel>} The panels removed<ko>��젣�� �⑤꼸��</ko>\n   */\n  public remove(index: number, count: number): VirtualPanel[] {\n    if (count <= 0) return [];\n\n    const flicking = this._flicking;\n\n    return flicking.renderer.batchRemove({ index, deleteCount: count, hasDOMInElements: false }) as VirtualPanel[];\n  }\n\n  private _initVirtualElements() {\n    const flicking = this._flicking;\n    const cameraElement = flicking.camera.element;\n    const panelsPerView = flicking.panelsPerView;\n    const fragment = document.createDocumentFragment();\n\n    const newElements = range(panelsPerView + 1).map(idx => {\n      const panelEl = document.createElement(\"div\");\n      panelEl.className = this._panelClass;\n      panelEl.dataset.elementIndex = idx.toString();\n      return panelEl;\n    });\n\n    newElements.forEach(el => {\n      fragment.appendChild(el);\n    });\n\n    cameraElement.appendChild(fragment);\n  }\n}\n\nexport default VirtualManager;\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 * 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 */\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    if (!inputEvent) {\n      return;\n    }\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]) {\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    try {\n      void control.moveToPosition(position, duration, axesEvent);\n    } catch (err) {\n      transitTo(STATE_TYPE.IDLE);\n      axesEvent.setTo({ [AXES.POSITION_KEY]: flicking.camera.position }, 0);\n    }\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    const targetPanel = this._targetPanel;\n    const control = flicking.control;\n\n    this._delta = 0;\n    flicking.control.updateInput();\n\n    if (flicking.changeOnHold && targetPanel) {\n      control.setActive(targetPanel, control.activePanel, axesEvent.isTrusted);\n    }\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    const targetPanel = this._targetPanel;\n    if (targetPanel) {\n      control.setActive(targetPanel, control.activePanel, axesEvent.isTrusted);\n    }\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 { ORDER } from \"../const/external\";\nimport { 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/docs/api/Axes Axes} instance\n   * @ko {@link https://naver.github.io/egjs-axes/docs/api/Axes Axes}�� �몄뒪�댁뒪\n   * @type {Axes | null}\n   * @see https://naver.github.io/egjs-axes/docs/api/Axes\n   * @readonly\n   */\n  public get axes() { return this._axes; }\n  /**\n   * An {@link https://naver.github.io/egjs-axes/docs/api/PanInput PanInput} instance\n   * @ko {@link https://naver.github.io/egjs-axes/docs/api/PanInput PanInput}�� �몄뒪�댁뒪\n   * @type {PanInput | null}\n   * @see https://naver.github.io/egjs-axes/docs/api/PanInput\n   * @readonly\n   */\n  public get panInput() { return this._panInput; }\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?.isEnabled() ?? 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      nested: flicking.nested,\n      easing: flicking.easing\n    });\n    this._panInput = new PanInput(flicking.viewport.element, {\n      inputType: flicking.inputType,\n      threshold: flicking.dragThreshold,\n      iOSEdgeSwipeThreshold: flicking.iOSEdgeSwipeThreshold,\n      preventDefaultOnDrag: flicking.preventDefaultOnDrag,\n      scale: flicking.horizontal ? [flicking.camera.panelOrder === ORDER.RTL ? 1 : -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   * Releases ongoing user input (mouse/touch)\n   * @ko �ъ슜�먯쓽 �꾩옱 �낅젰(留덉슦��/�곗튂)瑜� 以묐떒�쒗궢�덈떎\n   * @chainable\n   * @return {this}\n   */\n  public release(): this {\n    this._panInput?.release();\n\n    return this;\n  }\n\n  /**\n   * Change the destination and duration of the animation currently playing\n   * @ko �ъ깮 以묒씤 �좊땲硫붿씠�섏쓽 紐⑹쟻吏��� �ъ깮 �쒓컙�� 蹂�寃쏀빀�덈떎\n   * @param {number} position A position to move<ko>�대룞�� 醫뚰몴</ko>\n   * @param {number} duration Duration of the animation (unit: ms)<ko>�좊땲硫붿씠�� 吏꾪뻾 �쒓컙 (�⑥쐞: ms)</ko>\n   * @chainable\n   * @return {this}\n   */\n  public updateAnimation(position: number, duration?: number): this {\n    this._animatingContext = {\n      ...this._animatingContext,\n      end: position\n    };\n    this._axes?.updateAnimation({\n      destPos: { [AXES.POSITION_KEY]: position },\n      duration\n    });\n\n    return this;\n  }\n\n  /**\n   * Stops the animation currently playing\n   * @ko �ъ깮 以묒씤 �좊땲硫붿씠�섏쓣 以묐떒�쒗궢�덈떎\n   * @chainable\n   * @return {this}\n   */\n  public stopAnimation(): this {\n    this._axes?.stopAnimation();\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);\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.axisManager.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);\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);\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    const state = this._stateMachine.state;\n\n    if (!axes) {\n      return Promise.reject(new FlickingError(ERROR.MESSAGE.NOT_ATTACHED_TO_FLICKING, 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);\n\n      flicking.camera.lookAt(position);\n\n      if (state.targetPanel) {\n        flicking.control.setActive(state.targetPanel, flicking.control.activePanel, axesEvent?.isTrusted ?? false);\n      }\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    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  public updateDirection() {\n    const flicking = getFlickingAttached(this._flicking);\n    const axes = this._axes!;\n    const panInput = this._panInput!;\n\n    axes.disconnect(panInput);\n    axes.connect(flicking.horizontal ? [AXES.POSITION_KEY, \"\"] : [\"\", AXES.POSITION_KEY], panInput);\n\n    panInput.options.scale = flicking.horizontal ? [flicking.camera.panelOrder === ORDER.RTL ? 1 : -1, 0] : [0, -1];\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 = !!this._panInput?.isEnabled();\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  protected _nextPanel: 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   * Releases ongoing user input (mouse/touch)\n   * @ko �ъ슜�먯쓽 �꾩옱 �낅젰(留덉슦��/�곗튂)瑜� 以묐떒�쒗궢�덈떎\n   * @chainable\n   * @return {this}\n   */\n  public release(): this {\n    this._controller.release();\n\n    return this;\n  }\n\n  /**\n   * Change the destination and duration of the animation currently playing\n   * @ko �ъ깮 以묒씤 �좊땲硫붿씠�섏쓽 紐⑹쟻吏��� �ъ깮 �쒓컙�� 蹂�寃쏀빀�덈떎\n   * @param {Panel} panel The target panel to move<ko>�대룞�� �⑤꼸</ko>\n   * @param {number} duration Duration of the animation (unit: ms)<ko>�좊땲硫붿씠�� 吏꾪뻾 �쒓컙 (�⑥쐞: ms)</ko>\n   * @param {DIRECTION} direction Direction to move, only available in the {@link Flicking#circular circular} mode<ko>�대룞�� 諛⑺뼢. {@link Flicking#circular circular} �듭뀡 �쒖꽦�붿떆�먮쭔 �ъ슜 媛��ν빀�덈떎</ko>\n   * @chainable\n   * @throws {FlickingError}\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   * <ko>{@link ERROR_CODE POSITION_NOT_REACHABLE} 二쇱뼱吏� �⑤꼸�� �쒓굅�섏뿀嫄곕굹, Camera�� {@link Camera#range range} 諛뽰뿉 �덉쓣 寃쎌슦</ko>\n   * @return {this}\n   */\n  public updateAnimation(panel: Panel, duration?: number, direction?: ValueOf<typeof DIRECTION>): this {\n    const state = this._controller.state;\n    const position = this._getPosition(panel, direction ?? DIRECTION.NONE);\n\n    state.targetPanel = panel;\n    this._controller.updateAnimation(position, duration);\n\n    return this;\n  }\n\n  /**\n   * Stops the animation currently playing\n   * @ko �ъ깮 以묒씤 �좊땲硫붿씠�섏쓣 以묐떒�쒗궢�덈떎\n   * @chainable\n   * @return {this}\n   */\n  public stopAnimation(): this {\n    const state = this._controller.state;\n\n    state.targetPanel = null;\n    this._controller.stopAnimation();\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);\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);\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 position = this._getPosition(panel, direction);\n    this._triggerIndexChangeEvent(panel, panel.position, axesEvent, direction);\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);\n\n    this._activePanel = newActivePanel;\n    this._nextPanel = null;\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  /**\n   * @internal\n   */\n  public copy(control: Control) {\n    this._flicking = control._flicking;\n    this._activePanel = control._activePanel;\n    this._controller = control._controller;\n  }\n\n  protected _triggerIndexChangeEvent(panel: Panel, position: number, axesEvent?: OnRelease, direction?: ValueOf<typeof DIRECTION>) {\n    const flicking = getFlickingAttached(this._flicking);\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: direction ?? getDirection(activePanel?.position ?? camera.position, position)\n    });\n\n    this._nextPanel = panel;\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);\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  private _getPosition(panel: Panel, direction: ValueOf<typeof DIRECTION> = DIRECTION.NONE) {\n    const flicking = getFlickingAttached(this._flicking);\n    const camera = flicking.camera;\n\n    let position = panel.position;\n    const nearestAnchor = camera.findNearestAnchor(position);\n\n    if (panel.removed || !nearestAnchor) {\n      throw 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    return position;\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 moveToPosition(position: number, duration: number, axesEvent?: OnRelease) {\n    const flicking = getFlickingAttached(this._flicking);\n    const camera = flicking.camera;\n    const activeAnchor = camera.findActiveAnchor();\n    const anchorAtCamera = camera.findNearestAnchor(camera.position);\n    const state = this._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(flicking.threshold, 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(position, posDelta, anchorAtCamera);\n    } else {\n      // Fallback to nearest panel from current camera\n      return this.moveToPanel(anchorAtCamera.panel, {\n        duration,\n        axesEvent\n      });\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);\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(position: number, posDelta: number, anchorAtCamera: AnchorPoint): AnchorPoint {\n    const flicking = getFlickingAttached(this._flicking);\n    const camera = flicking.camera;\n\n    if (camera.circularEnabled) {\n      const anchorIncludePosition = camera.findAnchorIncludePosition(position);\n\n      if (anchorIncludePosition && anchorIncludePosition.position !== anchorAtCamera.position) {\n        return anchorIncludePosition;\n      }\n    }\n\n    const adjacentAnchor = (posDelta > 0 ? camera.getNextAnchor(anchorAtCamera) : camera.getPrevAnchor(anchorAtCamera)) ?? anchorAtCamera;\n\n    return adjacentAnchor;\n  }\n\n  private _calcSnapThreshold(threshold: number, 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 Math.max(threshold, 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);\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 moveToPosition(position: number, duration: number, axesEvent?: OnRelease) {\n    const flicking = getFlickingAttached(this._flicking);\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);\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  public async moveToPanel(panel: Panel, options: Parameters<Control[\"moveToPanel\"]>[1]): Promise<void> {\n    const flicking = getFlickingAttached(this._flicking);\n    const camera = flicking.camera;\n    const controller = this._controller;\n\n    controller.update(camera.controlParams);\n\n    return super.moveToPanel(panel, options);\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 moveToPosition(position: number, duration: number, axesEvent?: OnRelease) {\n    const flicking = getFlickingAttached(this._flicking);\n    const camera = flicking.camera;\n    const currentPanel = this._nextPanel ?? this._activePanel;\n    const axesRange = this._controller.range;\n    const indexRange = this._indexRange;\n    const cameraRange = camera.range;\n    const state = this._controller.state;\n\n    const clampedPosition = clamp(camera.clampToReachablePosition(position), axesRange[0], axesRange[1]);\n    const anchorAtPosition = camera.findAnchorIncludePosition(clampedPosition);\n\n    if (!anchorAtPosition || !currentPanel) {\n      return Promise.reject(new FlickingError(ERROR.MESSAGE.POSITION_NOT_REACHABLE(position), ERROR.CODE.POSITION_NOT_REACHABLE));\n    }\n\n    const prevPos = currentPanel.position;\n    const posDelta = flicking.animating\n      ? state.delta\n      : position - camera.position;\n\n    const isOverThreshold = Math.abs(posDelta) >= 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    const isAdjacent = adjacentAnchor && (indexRange.min <= indexRange.max\n      ? isBetween(adjacentAnchor.index, indexRange.min, indexRange.max)\n      : adjacentAnchor.index >= indexRange.min || adjacentAnchor.index <= 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 !== currentPanel.position) {\n      // Move to anchor at position\n      targetPanel = anchorAtPosition.panel;\n      targetPos = anchorAtPosition.position;\n    } else if (isOverThreshold && isAdjacent) {\n      // Move to adjacent anchor\n      targetPanel = adjacentAnchor!.panel;\n      targetPos = adjacentAnchor!.position;\n    } else {\n      // Fallback to nearest panel from current camera\n      const anchorAtCamera = camera.findNearestAnchor(camera.position);\n      if (!anchorAtCamera) {\n        return Promise.reject(new FlickingError(ERROR.MESSAGE.POSITION_NOT_REACHABLE(position), ERROR.CODE.POSITION_NOT_REACHABLE));\n      }\n      return this.moveToPanel(anchorAtCamera.panel, {\n        duration,\n        axesEvent\n      });\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 Flicking from \"../../Flicking\";\nimport Panel from \"../../core/panel/Panel\";\nimport AnchorPoint from \"../../core/AnchorPoint\";\nimport { clamp } from \"../../utils\";\n\n/**\n * A mode of camera\n */\nabstract class CameraMode {\n  protected _flicking: Flicking;\n\n  /** */\n  public constructor(flicking: Flicking) {\n    this._flicking = flicking;\n  }\n\n  public abstract checkAvailability(): boolean;\n  public abstract getRange(): { min: number; max: number };\n\n  public getAnchors(): AnchorPoint[] {\n    const panels = this._flicking.renderer.panels;\n\n    return panels.map((panel, index) => new AnchorPoint({\n      index,\n      position: panel.position,\n      panel\n    }));\n  }\n\n  public findAnchorIncludePosition(position: number): AnchorPoint | null {\n    const anchors = this._flicking.camera.anchorPoints;\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  public findNearestAnchor(position: number): AnchorPoint | null {\n    const anchors = this._flicking.camera.anchorPoints;\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  public clampToReachablePosition(position: number): number {\n    const camera = this._flicking.camera;\n    const range = camera.range;\n\n    return clamp(position, range.min, range.max);\n  }\n\n  public getCircularOffset(): number {\n    return 0;\n  }\n\n  public canReach(panel: Panel): boolean {\n    const camera = this._flicking.camera;\n    const range = camera.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  public canSee(panel: Panel): boolean {\n    const camera = this._flicking.camera;\n    const visibleRange = camera.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.isVisibleOnRange(visibleRange.min, visibleRange.max);\n  }\n}\n\nexport default CameraMode;\n","/*\n * Copyright (c) 2015 NAVER Corp.\n * egjs projects are licensed under the MIT license\n */\nimport CameraMode from \"./CameraMode\";\n\nclass LinearCameraMode extends CameraMode {\n  public checkAvailability(): boolean {\n    // It's always available\n    return true;\n  }\n\n  public getRange(): { min: number; max: number } {\n    const renderer = this._flicking.renderer;\n\n    const firstPanel = renderer.getPanel(0);\n    const lastPanel = renderer.getPanel(renderer.panelCount - 1);\n\n    return { min: firstPanel?.position ?? 0, max: lastPanel?.position ?? 0 };\n  }\n}\n\nexport default LinearCameraMode;\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 } from \"../../utils\";\n\nimport CameraMode from \"./CameraMode\";\n\n/**\n * A {@link Camera} mode that connects the last panel and the first panel, enabling continuous loop\n * @ko 泥ル쾲吏� �⑤꼸怨� 留덉�留� �⑤꼸�� �댁뼱吏� �곹깭濡�, 臾댄븳�� �뚯쟾�� �� �덈뒗 醫낅쪟�� {@link Camera} 紐⑤뱶\n */\nclass CircularCameraMode extends CameraMode {\n  public checkAvailability(): boolean {\n    const flicking = this._flicking;\n    const renderer = flicking.renderer;\n    const panels = renderer.panels;\n\n    if (panels.length <= 0) {\n      return false;\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 = flicking.camera.size;\n    const panelSizeSum = lastPanelNext - firstPanelPrev;\n\n    const canSetCircularMode = panels\n      .every(panel => panelSizeSum - panel.size >= visibleSize);\n\n    return canSetCircularMode;\n  }\n\n  public getRange(): { min: number; max: number } {\n    const flicking = this._flicking;\n    const panels = flicking.renderer.panels;\n\n    if (panels.length <= 0) {\n      return { min: 0, max: 0 };\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    return { min: firstPanelPrev, max: lastPanelNext };\n  }\n\n  public getAnchors(): AnchorPoint[] {\n    const flicking = this._flicking;\n    const panels = flicking.renderer.panels;\n\n    return panels.map((panel, index) => new AnchorPoint({\n      index,\n      position: panel.position,\n      panel\n    }));\n  }\n\n  public findNearestAnchor(position: number): AnchorPoint | null {\n    const camera = this._flicking.camera;\n    const anchors = camera.anchorPoints;\n\n    if (anchors.length <= 0) return null;\n\n    const camRange = camera.range;\n    let minDist = Infinity;\n    let minDistIndex = -1;\n    for (let anchorIdx = 0; anchorIdx < anchors.length; anchorIdx++) {\n      const anchor = anchors[anchorIdx];\n      const dist = Math.min(\n        Math.abs(anchor.position - position),\n        Math.abs(anchor.position - camRange.min + camRange.max - position),\n        Math.abs(position - camRange.min + camRange.max - anchor.position)\n      );\n\n      if (dist < minDist) {\n        minDist = dist;\n        minDistIndex = anchorIdx;\n      }\n    }\n\n    // Return last anchor\n    return anchors[minDistIndex];\n  }\n\n  public findAnchorIncludePosition(position: number): AnchorPoint | null {\n    const camera = this._flicking.camera;\n    const range = camera.range;\n    const anchors = camera.anchorPoints;\n    const rangeDiff = camera.rangeDiff;\n    const anchorCount = anchors.length;\n    const positionInRange = circulatePosition(position, range.min, range.max);\n\n    let anchorInRange: AnchorPoint | null = super.findAnchorIncludePosition(positionInRange);\n\n    if (anchorCount > 0 && (position === range.min || position === range.max)) {\n      const possibleAnchors = [\n        anchorInRange,\n        new AnchorPoint({\n          index: 0,\n          position: anchors[0].position + rangeDiff,\n          panel: anchors[0].panel\n        }),\n        new AnchorPoint({\n          index: anchorCount - 1,\n          position: anchors[anchorCount - 1].position - rangeDiff,\n          panel: anchors[anchorCount - 1].panel\n        })\n      ].filter(anchor => !!anchor) as AnchorPoint[];\n\n      anchorInRange = possibleAnchors.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    if (!anchorInRange) return null;\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 getCircularOffset(): number {\n    const flicking = this._flicking;\n    const camera = flicking.camera;\n\n    if (!camera.circularEnabled) return 0;\n\n    const toggled = flicking.panels.filter(panel => panel.toggled);\n    const toggledPrev = toggled.filter(panel => panel.toggleDirection === DIRECTION.PREV);\n    const toggledNext = toggled.filter(panel => panel.toggleDirection === DIRECTION.NEXT);\n\n    return this._calcPanelAreaSum(toggledPrev) - this._calcPanelAreaSum(toggledNext);\n  }\n\n  public clampToReachablePosition(position: number): number {\n    // Basically all position is reachable for circular camera\n    return position;\n  }\n\n  public canReach(panel: Panel): boolean {\n    if (panel.removed) return false;\n\n    // Always reachable on circular mode\n    return true;\n  }\n\n  public canSee(panel: Panel): boolean {\n    const camera = this._flicking.camera;\n    const range = camera.range;\n    const rangeDiff = camera.rangeDiff;\n    const visibleRange = camera.visibleRange;\n    const visibleInCurrentRange = super.canSee(panel);\n\n    // Check looped visible area for circular case\n    if (visibleRange.min < range.min) {\n      return visibleInCurrentRange || panel.isVisibleOnRange(visibleRange.min + rangeDiff, visibleRange.max + rangeDiff);\n    } else if (visibleRange.max > range.max) {\n      return visibleInCurrentRange || panel.isVisibleOnRange(visibleRange.min - rangeDiff, visibleRange.max - rangeDiff);\n    }\n\n    return visibleInCurrentRange;\n  }\n\n  private _calcPanelAreaSum(panels: Panel[]) {\n    return panels.reduce((sum: number, panel: Panel) => sum + panel.sizeIncludingMargin, 0);\n  }\n}\n\nexport default CircularCameraMode;\n","/*\n * Copyright (c) 2015 NAVER Corp.\n * egjs projects are licensed under the MIT license\n */\nimport AnchorPoint from \"../../core/AnchorPoint\";\nimport Panel from \"../../core/panel/Panel\";\nimport { parseAlign } from \"../../utils\";\n\nimport CameraMode from \"./CameraMode\";\n\nclass BoundCameraMode extends CameraMode {\n  public checkAvailability(): boolean {\n    const flicking = this._flicking;\n    const renderer = flicking.renderer;\n\n    const firstPanel = renderer.getPanel(0);\n    const lastPanel = renderer.getPanel(renderer.panelCount - 1);\n\n    if (!firstPanel || !lastPanel) {\n      return false;\n    }\n\n    const viewportSize = flicking.camera.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    return isBiggerThanViewport;\n  }\n\n  public getRange(): { min: number; max: number } {\n    const flicking = this._flicking;\n    const renderer = flicking.renderer;\n    const alignPos = flicking.camera.alignPosition;\n\n    const firstPanel = renderer.getPanel(0);\n    const lastPanel = renderer.getPanel(renderer.panelCount - 1);\n\n    if (!firstPanel || !lastPanel) {\n      return { min: 0, max: 0 };\n    }\n\n    const viewportSize = flicking.camera.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      return { min: firstPos, max: lastPos };\n    } else {\n      const align = flicking.camera.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      return { min: pos, max: pos };\n    }\n  }\n\n  public getAnchors(): AnchorPoint[] {\n    const flicking = this._flicking;\n    const camera = flicking.camera;\n    const panels = flicking.renderer.panels;\n\n    if (panels.length <= 0) {\n      return [];\n    }\n\n    const range = flicking.camera.range;\n    const reachablePanels = panels.filter(panel => camera.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      return 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      return [\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      return [new AnchorPoint({\n        index: 0,\n        position: range.min,\n        panel: this._findNearestPanel(range.min, panels)\n      })];\n    }\n  }\n\n  public findAnchorIncludePosition(position: number): AnchorPoint | null {\n    const camera = this._flicking.camera;\n    const range = camera.range;\n    const anchors = camera.anchorPoints;\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 BoundCameraMode;\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, CIRCULAR_FALLBACK, DIRECTION, EVENTS, ORDER } from \"../const/external\";\nimport { checkExistence, find, getFlickingAttached, getProgress, getStyle, includes, parseAlign, toArray } from \"../utils\";\nimport { ValueOf } from \"../type/internal\";\n\nimport { CameraMode, BoundCameraMode, CircularCameraMode, LinearCameraMode } from \"./mode\";\n\nexport interface CameraOptions {\n  align: FlickingOptions[\"align\"];\n}\n\n/**\n * A component that manages actual movement inside the viewport\n * @ko 酉고룷�� �댁뿉�쒖쓽 �ㅼ젣 ��吏곸엫�� �대떦�섎뒗 而댄룷�뚰듃\n */\nclass Camera {\n  // Options\n  private _align: FlickingOptions[\"align\"];\n\n  // Internal states\n  private _flicking: Flicking;\n  private _mode: CameraMode;\n  private _el: HTMLElement;\n  private _transform: string;\n  private _lookedOffset = 0;\n  private _position: number;\n  private _alignPos: number;\n  private _offset: number;\n  private _circularOffset: number;\n  private _circularEnabled: boolean;\n  private _range: { min: number; max: number };\n  private _visiblePanels: Panel[];\n  private _anchors: AnchorPoint[];\n  private _needPanelTriggered: { prev: boolean; next: boolean };\n  private _panelOrder: ValueOf<typeof ORDER>;\n\n  // Internal states getter\n  /**\n   * The camera element(`.flicking-camera`)\n   * @ko 移대찓�� �섎━癒쇳듃(`.flicking-camera`)\n   * @type {HTMLElement}\n   * @readonly\n   */\n  public get element() { return this._el; }\n  /**\n   * An array of the child elements of the camera element(`.flicking-camera`)\n   * @ko 移대찓�� �섎━癒쇳듃(`.flicking-camera`)�� �먯떇 �섎━癒쇳듃 諛곗뿴\n   * @type {HTMLElement[]}\n   * @readonly\n   */\n  public get children() { return toArray(this._el.children) as HTMLElement[]; }\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 - this._circularOffset; }\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._circularEnabled; }\n  /**\n   * A current camera mode\n   * @type {CameraMode}\n   * @readonly\n   */\n  public get mode() { return this._mode; }\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} max 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: this._circularEnabled }; }\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  /**\n   * {@link https://developer.mozilla.org/en-US/docs/Web/CSS/direction direction} CSS property applied to the camera element(`.flicking-camera`)\n   * @ko 移대찓�� �섎━癒쇳듃(`.flicking-camera`)�� �곸슜�� {@link https://developer.mozilla.org/en-US/docs/Web/CSS/direction direction} CSS �띿꽦\n   * @type {string}\n   * @readonly\n   */\n  public get panelOrder() { return this._panelOrder; }\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(flicking: Flicking, {\n    align = ALIGN.CENTER\n  }: Partial<CameraOptions> = {}) {\n    this._flicking = flicking;\n    this._resetInternalValues();\n\n    // Options\n    this._align = align;\n  }\n\n  /**\n   * Initialize Camera\n   * @ko Camera瑜� 珥덇린�뷀빀�덈떎\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(): this {\n    const viewportEl = this._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    this._updateMode();\n    this.updatePanelOrder();\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._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 prevOffset = this._offset;\n    const isChangedOffset = this._lookedOffset !== prevOffset;\n    const flicking = getFlickingAttached(this._flicking);\n    const prevPos = this._position;\n\n    this._position = pos;\n    const toggled = this._togglePanels(prevPos, pos);\n    this._refreshVisiblePanels();\n    this._checkNeedPanel();\n    this._checkReachEnd(prevPos, pos);\n\n    if (toggled) {\n      void flicking.renderer.render().then(() => {\n        this.updateOffset();\n        this._lookedOffset = this._offset;\n      });\n    } else if (isChangedOffset) {\n      // sync offset for renderOnlyVisible on resize\n      this.updateOffset();\n      this._lookedOffset = this._offset;\n    } else {\n      this.applyTransform();\n    }\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    if (!this._circularEnabled || anchor.index !== 0) {\n      return this._anchors[anchor.index - 1] || null;\n    } else {\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\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    const anchors = this._anchors;\n\n    if (!this._circularEnabled || anchor.index !== anchors.length - 1) {\n      return anchors[anchor.index + 1] || null;\n    } else {\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\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    return this._mode.findAnchorIncludePosition(position);\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    return this._mode.findNearestAnchor(position);\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);\n    const activePanel = flicking.control.activePanel;\n\n    if (!activePanel) return null;\n\n    return find(this._anchors, anchor => anchor.panel.index === activePanel.index) ?? this.findNearestAnchor(activePanel.position);\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    return this._mode.clampToReachablePosition(position);\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    return this._mode.canReach(panel);\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    return this._mode.canSee(panel);\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 updateRange() {\n    const flicking = getFlickingAttached(this._flicking);\n    const renderer = flicking.renderer;\n    const panels = renderer.panels;\n\n    this._updateMode();\n    this._range = this._mode.getRange();\n\n    panels.forEach(panel => panel.updateCircularToggleDirection());\n\n    return this;\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    this._anchors = this._mode.getAnchors();\n\n    return this;\n  }\n\n  /**\n   * Update Viewport's height to visible panel's max 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);\n    const activePanel = flicking.control.activePanel;\n    const visiblePanels = flicking.visiblePanels;\n\n    const selectedPanels = [...visiblePanels];\n\n    if (activePanel) {\n      selectedPanels.push(activePanel);\n    }\n\n    if (!flicking.horizontal || !flicking.adaptive || !selectedPanels.length) return;\n\n\n    const maxHeight = Math.max(...selectedPanels.map(panel => panel.height));\n\n\n    flicking.viewport.setSize({\n      height: maxHeight\n    });\n  }\n\n  /**\n   * Update current offset of the camera\n   * @ko �꾩옱 移대찓�쇱쓽 �ㅽ봽�뗭쓣 �낅뜲�댄듃�⑸땲��\n   * @chainable\n   * @return {this}\n   */\n  public updateOffset(): this {\n    const flicking = getFlickingAttached(this._flicking);\n    const position = this._position;\n    const unRenderedPanels = flicking.panels.filter(panel => !panel.rendered);\n\n    this._offset = unRenderedPanels\n      .filter(panel => panel.position + panel.offset < position)\n      .reduce((offset, panel) => offset + panel.sizeIncludingMargin, 0);\n\n    this._circularOffset = this._mode.getCircularOffset();\n\n    this.applyTransform();\n\n    return this;\n  }\n\n  /**\n   * Update direction to match the {@link https://developer.mozilla.org/en-US/docs/Web/CSS/direction direction} CSS property applied to the camera element\n   * @ko 移대찓�� �섎━癒쇳듃�� �곸슜�� {@link https://developer.mozilla.org/en-US/docs/Web/CSS/direction direction} CSS �띿꽦�� 留욊쾶 諛⑺뼢�� �낅뜲�댄듃�⑸땲��\n   * @return {this}\n   */\n  public updatePanelOrder(): this {\n    const flicking = getFlickingAttached(this._flicking);\n\n    if (!flicking.horizontal) return this;\n\n    const el = this._el;\n    const direction = getStyle(el).direction;\n    if (direction !== this._panelOrder) {\n      this._panelOrder = direction === ORDER.RTL ? ORDER.RTL : ORDER.LTR;\n      if (flicking.initialized) {\n        flicking.control.controller.updateDirection();\n      }\n    }\n\n    return this;\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  /**\n   * Apply \"transform\" style with the current position to camera element\n   * @ko �꾩옱 �꾩튂瑜� 湲곗��쇰줈�� transform �ㅽ��쇱쓣 移대찓�� �섎━癒쇳듃�� �곸슜�⑸땲��.\n   * @return {this}\n   */\n  public applyTransform(): this {\n    const el = this._el;\n    const flicking = getFlickingAttached(this._flicking);\n    const renderer = flicking.renderer;\n\n    if (renderer.rendering || !flicking.initialized) return this;\n\n    const actualPosition = this._position - this._alignPos - this._offset + this._circularOffset;\n\n    el.style[this._transform] = flicking.horizontal\n      ? `translate(${this._panelOrder === ORDER.RTL ? actualPosition : -actualPosition}px)`\n      : `translate(0, ${-actualPosition}px)`;\n\n    return this;\n  }\n\n  private _resetInternalValues() {\n    this._position = 0;\n    this._lookedOffset = 0;\n    this._alignPos = 0;\n    this._offset = 0;\n    this._circularOffset = 0;\n    this._circularEnabled = false;\n    this._range = { min: 0, max: 0 };\n    this._visiblePanels = [];\n    this._anchors = [];\n    this._needPanelTriggered = { prev: false, next: false };\n  }\n\n  private _refreshVisiblePanels() {\n    const flicking = getFlickingAttached(this._flicking);\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  private _checkNeedPanel(): void {\n    const needPanelTriggered = this._needPanelTriggered;\n\n    if (needPanelTriggered.prev && needPanelTriggered.next) return;\n\n    const flicking = getFlickingAttached(this._flicking);\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  private _checkReachEnd(prevPos: number, newPos: number): void {\n    const flicking = getFlickingAttached(this._flicking);\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  private _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  private _updateMode() {\n    const flicking = getFlickingAttached(this._flicking);\n\n    if (flicking.circular) {\n      const circularMode = new CircularCameraMode(flicking);\n      const canSetCircularMode = circularMode.checkAvailability();\n\n      if (canSetCircularMode) {\n        this._mode = circularMode;\n      } else {\n        const fallbackMode = flicking.circularFallback;\n\n        this._mode = fallbackMode === CIRCULAR_FALLBACK.BOUND\n          ? new BoundCameraMode(flicking)\n          : new LinearCameraMode(flicking);\n      }\n\n      this._circularEnabled = canSetCircularMode;\n    } else {\n      this._mode = flicking.bound\n        ? new BoundCameraMode(flicking)\n        : new LinearCameraMode(flicking);\n      this._circularEnabled = false;\n    }\n  }\n\n  private _togglePanels(prevPos: number, pos: number): boolean {\n    if (pos === prevPos) return false;\n\n    const flicking = getFlickingAttached(this._flicking);\n    const panels = flicking.renderer.panels;\n    const toggled = panels.map(panel => panel.toggle(prevPos, pos));\n\n    return toggled.some(isToggled => isToggled);\n  }\n}\n\nexport default Camera;\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, parsePanelAlign } from \"../utils\";\n\nimport RenderingStrategy from \"./strategy/RenderingStrategy\";\n\nexport interface RendererOptions {\n  align?: FlickingOptions[\"align\"];\n  strategy: RenderingStrategy;\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  protected _rendering: boolean;\n\n  // Options\n  protected _align: NonNullable<RendererOptions[\"align\"]>;\n  protected _strategy: RendererOptions[\"strategy\"];\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   * A boolean value indicating whether rendering is in progress\n   * @ko �꾩옱 �뚮뜑留곸씠 �쒖옉�섏뼱 �앸굹湲� �꾧퉴吏��� �곹깭�몄��� �щ�\n   * @type {boolean}\n   * @readonly\n   * @internal\n   */\n  public get rendering() { return this._rendering; }\n  /**\n   * Count of panels\n   * @ko �꾩껜 �⑤꼸�� 媛쒖닔\n   * @type {number}\n   * @readonly\n   */\n  public get panelCount() { return this._panels.length; }\n  /**\n   * @internal\n   */\n  public get strategy() { return this._strategy; }\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: NonNullable<RendererOptions[\"align\"]>) {\n    this._align = val;\n\n    const panelAlign = parsePanelAlign(val);\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=\"center\"] An {@link Flicking#align align} value that will be applied to all panels<ko>�꾩껜 �⑤꼸�� �곸슜�� {@link Flicking#align align} 媛�</ko>\n   * @param {object} [options.strategy] An instance of RenderingStrategy(internal module)<ko>RenderingStrategy�� �몄뒪�댁뒪(�대� 紐⑤뱢)</ko>\n   */\n  public constructor({\n    align = ALIGN.CENTER,\n    strategy\n  }: RendererOptions) {\n    this._flicking = null;\n    this._panels = [];\n    this._rendering = false;\n\n    // Bind options\n    this._align = align;\n    this._strategy = strategy;\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\n  protected abstract _collectPanels(): void;\n  protected abstract _createPanel(el: any, options: Omit<PanelOptions, \"elementProvider\">): Panel;\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  public forceRenderAllPanels(): Promise<void> {\n    this._panels.forEach(panel => panel.markForShow());\n\n    return Promise.resolve();\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);\n    const panels = this._panels;\n\n    if (panels.length <= 0) return this;\n\n    if (flicking.panelsPerView > 0) {\n      const firstPanel = panels[0];\n      firstPanel.resize();\n\n      this._updatePanelSizeByGrid(firstPanel, panels);\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 {Array<object>} items An array of items to insert<ko>異붽��� �꾩씠�쒕뱾�� 諛곗뿴</ko>\n   * @param {number} [items.index] Index to insert new panels at<ko>�덈줈 �⑤꼸�ㅼ쓣 異붽��� �몃뜳��</ko>\n   * @param {any[]} [items.elements] An array of element or framework component with element in it<ko>�섎━癒쇳듃�� 諛곗뿴 �뱀� �꾨젅�꾩썙�ъ뿉�� �섎━癒쇳듃瑜� �ы븿�� 而댄룷�뚰듃�ㅼ쓽 諛곗뿴</ko>\n   * @param {boolean} [items.hasDOMInElements] Whether it contains actual DOM elements. If set to true, renderer will add them to the camera element<ko>�대��� �ㅼ젣 DOM �섎━癒쇳듃�ㅼ쓣 �ы븿�섍퀬 �덈뒗吏� �щ�. true濡� �ㅼ젙�� 寃쎌슦, �뚮뜑�щ뒗 �대떦 �섎━癒쇳듃�ㅼ쓣 移대찓�� �섎━癒쇳듃 �대��� 異붽��⑸땲��</ko>\n   * @return {Panel[]} An array of prepended panels<ko>異붽��� �⑤꼸�ㅼ쓽 諛곗뿴</ko>\n   */\n  public batchInsert(...items: Array<{\n    index: number;\n    elements: any[];\n    hasDOMInElements: boolean;\n  }>): Panel[] {\n    const allPanelsInserted = this.batchInsertDefer(...items);\n\n    if (allPanelsInserted.length <= 0) return [];\n\n    this.updateAfterPanelChange(allPanelsInserted, []);\n\n    return allPanelsInserted;\n  }\n\n  /**\n   * Defers update\n   * camera position & others will be updated after calling updateAfterPanelChange\n   * @internal\n   */\n  public batchInsertDefer(...items: Array<{\n    index: number;\n    elements: any[];\n    hasDOMInElements: boolean;\n  }>) {\n    const panels = this._panels;\n    const flicking = getFlickingAttached(this._flicking);\n\n    const prevFirstPanel = panels[0];\n    const align = parsePanelAlign(this._align);\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      if (item.hasDOMInElements) {\n        // Insert the actual elements as camera element's children\n        this._insertPanelElements(panelsInserted, panelsPushed[0] ?? null);\n      }\n\n      // Resize the newly added panels\n      if (flicking.panelsPerView > 0) {\n        const firstPanel = prevFirstPanel || panelsInserted[0].resize();\n\n        this._updatePanelSizeByGrid(firstPanel, panelsInserted);\n      } else {\n        panelsInserted.forEach(panel => panel.resize());\n      }\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    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 {Array<object>} items An array of items to remove<ko>�쒓굅�� �꾩씠�쒕뱾�� 諛곗뿴</ko>\n   * @param {number} [items.index] Index of panel to remove<ko>�쒓굅�� �⑤꼸�� �몃뜳��</ko>\n   * @param {number} [items.deleteCount=1] Number of panels to remove from index<ko>`index` �댄썑濡� �쒓굅�� �⑤꼸�� 媛쒖닔</ko>\n   * @param {boolean} [items.hasDOMInElements=1] Whether it contains actual DOM elements. If set to true, renderer will remove them from the camera element<ko>�대��� �ㅼ젣 DOM �섎━癒쇳듃�ㅼ쓣 �ы븿�섍퀬 �덈뒗吏� �щ�. true濡� �ㅼ젙�� 寃쎌슦, �뚮뜑�щ뒗 �대떦 �섎━癒쇳듃�ㅼ쓣 移대찓�� �섎━癒쇳듃 �대��먯꽌 �쒓굅�⑸땲��</ko>\n   * @return An array of removed panels<ko>�쒓굅�� �⑤꼸�ㅼ쓽 諛곗뿴</ko>\n   */\n  public batchRemove(...items: Array<{\n    index: number;\n    deleteCount: number;\n    hasDOMInElements: boolean;\n  }>): Panel[] {\n    const allPanelsRemoved = this.batchRemoveDefer(...items);\n\n    if (allPanelsRemoved.length <= 0) return [];\n\n    this.updateAfterPanelChange([], allPanelsRemoved);\n\n    return allPanelsRemoved;\n  }\n\n  /**\n   * Defers update\n   * camera position & others will be updated after calling updateAfterPanelChange\n   * @internal\n   */\n  public batchRemoveDefer(...items: Array<{\n    index: number;\n    deleteCount: number;\n    hasDOMInElements: boolean;\n  }>) {\n    const panels = this._panels;\n    const flicking = getFlickingAttached(this._flicking);\n\n    const { control } = flicking;\n    const activePanel = control.activePanel;\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      if (item.hasDOMInElements) {\n        this._removePanelElements(panelsRemoved);\n      }\n\n      // Remove panel elements\n      panelsRemoved.forEach(panel => panel.destroy());\n\n      if (includes(panelsRemoved, activePanel)) {\n        control.resetActive();\n      }\n\n      return [...removed, ...panelsRemoved];\n    }, []);\n\n    return allPanelsRemoved;\n  }\n\n  /**\n   * @internal\n   */\n  public updateAfterPanelChange(panelsAdded: Panel[], panelsRemoved: Panel[]) {\n    const flicking = getFlickingAttached(this._flicking);\n    const { camera, control } = flicking;\n    const panels = this._panels;\n    const activePanel = control.activePanel;\n\n    // Update camera & control\n    this._updateCameraAndControl();\n\n    void this.render();\n\n    if (!flicking.animating) {\n      if (!activePanel || activePanel.removed) {\n        if (panels.length <= 0) {\n          // All panels removed\n          camera.lookAt(0);\n        } else {\n          let targetIndex = activePanel?.index ?? 0;\n          if (targetIndex > panels.length - 1) {\n            targetIndex = panels.length - 1;\n          }\n\n          void control.moveToPanel(panels[targetIndex], {\n            duration: 0\n          }).catch(() => void 0);\n        }\n      } else {\n        void control.moveToPanel(activePanel, {\n          duration: 0\n        }).catch(() => void 0);\n      }\n    }\n\n    flicking.camera.updateOffset();\n\n    if (panelsAdded.length > 0 || panelsRemoved.length > 0) {\n      flicking.trigger(new ComponentEvent(EVENTS.PANEL_CHANGE, {\n        added: panelsAdded,\n        removed: panelsRemoved\n      }));\n\n      this.checkPanelContentsReady([\n        ...panelsAdded,\n        ...panelsRemoved\n      ]);\n    }\n  }\n\n  /**\n   * @internal\n   */\n  public checkPanelContentsReady(checkingPanels: Panel[]) {\n    const flicking = getFlickingAttached(this._flicking);\n    const resizeOnContentsReady = flicking.resizeOnContentsReady;\n    const panels = this._panels;\n\n    if (!resizeOnContentsReady || flicking.virtualEnabled) return;\n\n    const hasContents = (panel: Panel) => panel.element && !!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      if (!this._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.updateOffset();\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 _updateCameraAndControl() {\n    const flicking = getFlickingAttached(this._flicking);\n    const { camera, control } = flicking;\n\n    camera.updateRange();\n    camera.updateOffset();\n    camera.updateAnchors();\n    camera.resetNeedPanelHistory();\n    control.updateInput();\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\n  protected _updatePanelSizeByGrid(referencePanel: Panel, panels: Panel[]) {\n    const flicking = getFlickingAttached(this._flicking);\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    const viewportSize = flicking.camera.size;\n    const gap = referencePanel.margin.prev + referencePanel.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      margin: referencePanel.margin,\n      ...(!flicking.horizontal && { height: referencePanel.height})\n    };\n\n    if (!flicking.noPanelStyleOverride) {\n      this._strategy.updatePanelSizes(flicking, panelSizeObj);\n    }\n\n    flicking.panels.forEach(panel => panel.resize(firstPanelSizeObj));\n  }\n\n  protected _removeAllChildsFromCamera() {\n    const flicking = getFlickingAttached(this._flicking);\n    const cameraElement = flicking.camera.element;\n\n    // Remove other elements\n    while (cameraElement.firstChild) {\n      cameraElement.removeChild(cameraElement.firstChild);\n    }\n  }\n\n  protected _insertPanelElements(panels: Panel[], nextSibling: Panel | null = null) {\n    const flicking = getFlickingAttached(this._flicking);\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\n  protected _removePanelElements(panels: Panel[]) {\n    const flicking = getFlickingAttached(this._flicking);\n    const cameraElement = flicking.camera.element;\n\n    panels.forEach(panel => {\n      cameraElement.removeChild(panel.element);\n    });\n  }\n\n  protected _afterRender() {\n    const flicking = getFlickingAttached(this._flicking);\n\n    flicking.camera.applyTransform();\n  }\n}\n\nexport default Renderer;\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\";\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);\n    const strategy = this._strategy;\n\n    strategy.updateRenderingPanels(flicking);\n    strategy.renderPanels(flicking);\n\n    this._resetPanelElementOrder();\n    this._afterRender();\n  }\n\n  protected _collectPanels() {\n    const flicking = getFlickingAttached(this._flicking);\n    const camera = flicking.camera;\n\n    this._removeAllTextNodes();\n    this._panels = this._strategy.collectPanels(flicking, camera.children);\n  }\n\n  protected _createPanel(el: HTMLElement, options: Omit<PanelOptions, \"elementProvider\">): Panel {\n    return this._strategy.createPanel(el, options);\n  }\n\n  private _resetPanelElementOrder() {\n    const flicking = getFlickingAttached(this._flicking);\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 reversedElements = this._strategy\n      .getRenderingElementsByOrder(flicking)\n      .reverse();\n\n    reversedElements.forEach((el, idx) => {\n      const nextEl = reversedElements[idx - 1] ? reversedElements[idx - 1] : null;\n\n      if (el.nextElementSibling !== nextEl) {\n        cameraEl.insertBefore(el, nextEl);\n      }\n    });\n  }\n\n  private _removeAllTextNodes() {\n    const flicking = getFlickingAttached(this._flicking);\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}\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 * @internal\n */\nabstract class ExternalRenderer extends Renderer {\n  /* eslint-disable @typescript-eslint/no-unused-vars */\n  protected _removePanelElements(panels: Panel[]): void {\n    // DO NOTHING, overrided to prevent an unexpected error\n  }\n\n  protected _removeAllChildsFromCamera(): void {\n    // DO NOTHING, overrided to prevent an unexpected error\n  }\n  /* eslint-enable @typescript-eslint/no-unused-vars */\n}\n\nexport default ExternalRenderer;\n","/*\n * Copyright (c) 2015 NAVER Corp.\n * egjs projects are licensed under the MIT license\n */\nimport Flicking from \"../../Flicking\";\nimport { getElementSize, getProgress, getStyle, parseAlign, setSize } from \"../../utils\";\nimport { ALIGN, DIRECTION } from \"../../const/external\";\nimport { LiteralUnion, ValueOf } from \"../../type/internal\";\n\nimport ElementProvider from \"./provider/ElementProvider\";\n\nexport interface PanelOptions {\n  index: number;\n  align: LiteralUnion<ValueOf<typeof ALIGN>> | number;\n  flicking: Flicking;\n  elementProvider: ElementProvider;\n}\n\n/**\n * A slide data component that holds information of a single HTMLElement\n * @ko �щ씪�대뱶 �곗씠�� 而댄룷�뚰듃濡�, �⑥씪 HTMLElement�� �뺣낫瑜� 媛뽮퀬 �덉뒿�덈떎\n */\nclass Panel {\n  // Internal States\n  protected _flicking: Flicking;\n  protected _elProvider: ElementProvider;\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 _rendered: boolean;\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  public get element() { return this._elProvider.element; }\n  /**\n   * @internal\n   * @readonly\n   */\n  public get elementProvider() { return this._elProvider; }\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 element is being rendered on the screen\n   * @ko �⑤꼸�� �섎━癒쇳듃媛� �붾㈃�곸뿉 �뚮뜑留곷릺怨좎엳�붿� �щ�瑜� �섑��대뒗 媛�\n   * @type {boolean}\n   * @readonly\n   */\n  public get rendered() { return this._rendered; }\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   * 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\"]) {\n    this._align = val;\n    this._updateAlignPos();\n  }\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   * @param {Flicking} [options.elementProvider] A provider instance that redirects elements<ko>�ㅼ젣 �섎━癒쇳듃瑜� 諛섑솚�섎뒗 �섎━癒쇳듃 怨듦툒�먯쓽 �몄뒪�댁뒪</ko>\n   */\n  public constructor({\n    index,\n    align,\n    flicking,\n    elementProvider\n  }: PanelOptions) {\n    this._index = index;\n    this._flicking = flicking;\n    this._elProvider = elementProvider;\n\n    this._align = align;\n\n    this._removed = false;\n    this._rendered = true;\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 markForShow() {\n    this._rendered = true;\n    this._elProvider.show(this._flicking);\n  }\n\n  /**\n   * Mark panel element to be removed from the camera element\n   * @internal\n   */\n  public markForHide() {\n    this._rendered = false;\n    this._elProvider.hide(this._flicking);\n  }\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 flicking = this._flicking;\n    const {\n      horizontal,\n      useFractionalSize\n    } = flicking;\n\n    if (!el) {\n      return this;\n    }\n\n    if (cached) {\n      this._size = cached.size;\n      this._margin = { ...cached.margin };\n      this._height = cached.height ?? getElementSize({\n        el,\n        horizontal: false,\n        useFractionalSize,\n        useOffset: true,\n        style: getStyle(el)\n      });\n    } else {\n      const elStyle = getStyle(el);\n\n      this._size = getElementSize({\n        el,\n        horizontal,\n        useFractionalSize,\n        useOffset: true,\n        style: elStyle\n      });\n\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\n      this._height = horizontal\n        ? getElementSize({\n          el,\n          horizontal: false,\n          useFractionalSize,\n          useOffset: true,\n          style: elStyle\n        })\n        : 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(size: Partial<{\n    width: number | string;\n    height: number | string;\n  }>): this {\n    setSize(this.element, size);\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 (inclusive)\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   * Check whether the panel is visble in the given range (exclusive)\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   * @returns {boolean} A Boolean value indicating whether the panel is visible<ko>�대떦 踰붿쐞 �댁뿉�� �⑤꼸�� 蹂� �� �덈뒗吏� �щ�</ko>\n   */\n  public isVisibleOnRange(min: number, max: number): boolean {\n    const panelRange = this.range;\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._togglePosition = 0;\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 Flicking from \"../../Flicking\";\nimport Panel, { PanelOptions } from \"../../core/panel/Panel\";\nimport ElementProvider from \"../../core/panel/provider/ElementProvider\";\nimport { DIRECTION } from \"../../const/external\";\nimport { parsePanelAlign } from \"../../utils\";\n\nimport RenderingStrategy from \"./RenderingStrategy\";\n\nexport interface NormalRenderingStrategyOptions {\n  providerCtor: new (...args: any) => ElementProvider;\n}\n\n\nclass NormalRenderingStrategy implements RenderingStrategy {\n  private _providerCtor: NormalRenderingStrategyOptions[\"providerCtor\"];\n\n  public constructor({ providerCtor }: NormalRenderingStrategyOptions) {\n    this._providerCtor = providerCtor;\n  }\n\n  public renderPanels() {\n    // DO_NOTHING\n  }\n\n  public getRenderingIndexesByOrder(flicking: Flicking) {\n    const renderedPanels = flicking.renderer.panels.filter(panel => panel.rendered);\n    const toggledPrev = renderedPanels.filter(panel => panel.toggled && panel.toggleDirection === DIRECTION.PREV);\n    const toggledNext = renderedPanels.filter(panel => panel.toggled && panel.toggleDirection === DIRECTION.NEXT);\n    const notToggled = renderedPanels.filter(panel => !panel.toggled);\n\n    return [...toggledPrev, ...notToggled, ...toggledNext].map(panel => panel.index);\n  }\n\n  public getRenderingElementsByOrder(flicking: Flicking) {\n    const panels = flicking.panels;\n\n    return this.getRenderingIndexesByOrder(flicking).map(index => panels[index].element);\n  }\n\n  public updateRenderingPanels(flicking: Flicking) {\n    if (flicking.renderOnlyVisible) {\n      this._showOnlyVisiblePanels(flicking);\n    } else {\n      flicking.panels.forEach(panel => panel.markForShow());\n    }\n  }\n\n  public collectPanels(\n    flicking: Flicking,\n    elements: any[]\n  ) {\n    const align = parsePanelAlign(flicking.renderer.align);\n\n    return elements.map((el, index) => new Panel({\n      index,\n      elementProvider: new this._providerCtor(el),\n      align,\n      flicking\n    }));\n  }\n\n  public createPanel(\n    element: any,\n    options: Omit<PanelOptions, \"elementProvider\">\n  ) {\n    return new Panel({\n      ...options,\n      elementProvider: new this._providerCtor(element)\n    });\n  }\n\n  public updatePanelSizes(flicking: Flicking, size: Partial<{\n    width: number | string;\n    height: number | string;\n  }>) {\n    flicking.panels.forEach(panel => panel.setSize(size));\n  }\n\n  private _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\nexport default NormalRenderingStrategy;\n","/*\n * Copyright (c) 2015 NAVER Corp.\n * egjs projects are licensed under the MIT license\n */\nimport { DIRECTION } from \"../../const/external\";\nimport { circulateIndex } from \"../../utils\";\n\nimport Panel, { PanelOptions } from \"./Panel\";\nimport VirtualElementProvider from \"./provider/VirtualElementProvider\";\n\ninterface VirtualPanelOptions extends PanelOptions {\n  elementProvider: VirtualElementProvider;\n}\n\n/**\n * An slide data component that holds information of a single HTMLElement\n * @ko �щ씪�대뱶 �곗씠�� 而댄룷�뚰듃濡�, �⑥씪 HTMLElement�� �뺣낫瑜� 媛뽮퀬 �덉뒿�덈떎\n */\nclass VirtualPanel extends Panel {\n  protected _elProvider: VirtualElementProvider;\n  protected _cachedInnerHTML: string | null;\n\n  /**\n   * `HTMLElement` that panel's referencing\n   * @ko �⑤꼸�� 李몄“�섍퀬 �덈뒗 `HTMLElement`\n   * @type {HTMLElement}\n   * @readonly\n   */\n  public get element() { return this._elProvider.element; }\n\n  /**\n   * Cached innerHTML by the previous render function\n   * @ko �댁쟾 �뚮뜑留곸뿉�� 罹먯떆�� innerHTML �뺣낫\n   * @type {string|null}\n   * @readonly\n   */\n  public get cachedInnerHTML() { return this._cachedInnerHTML; }\n\n  /**\n   * An number for indexing which element it will be rendered on\n   * @ko 紐� 踰덉㎏ �섎━癒쇳듃�� �뚮뜑留곷맆 寃껋씤吏�瑜� �섑��대뒗 �レ옄\n   * @type {number}\n   * @readonly\n   */\n  public get elementIndex() {\n    const flicking = this._flicking;\n    const virtualElCount = flicking.panelsPerView + 1;\n    const panelCount = flicking.panelCount;\n    let index = this._index;\n\n    if (this._toggled) {\n      // To prevent element duplication\n      index = this._toggleDirection === DIRECTION.NEXT\n        ? index + panelCount\n        : index - panelCount;\n    }\n\n    return circulateIndex(index, virtualElCount);\n  }\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(options: VirtualPanelOptions) {\n    super(options);\n\n    options.elementProvider.init(this);\n    this._elProvider = options.elementProvider;\n    this._cachedInnerHTML = null;\n  }\n\n  public cacheRenderResult(result: string) {\n    this._cachedInnerHTML = result;\n  }\n\n  public uncacheRenderResult() {\n    this._cachedInnerHTML = null;\n  }\n\n  public render() {\n    const flicking = this._flicking;\n    const { renderPanel, cache } = flicking.virtual;\n\n    const element = this._elProvider.element;\n    const newInnerHTML = this._cachedInnerHTML || renderPanel(this, this._index);\n\n    if (newInnerHTML === element.innerHTML) return;\n\n    element.innerHTML = newInnerHTML;\n\n    if (cache) {\n      this.cacheRenderResult(newInnerHTML);\n    }\n  }\n\n  public increaseIndex(val: number) {\n    this.uncacheRenderResult();\n    return super.increaseIndex(val);\n  }\n\n  public decreaseIndex(val: number) {\n    this.uncacheRenderResult();\n    return super.decreaseIndex(val);\n  }\n}\n\nexport default VirtualPanel;\n","/*\n * Copyright (c) 2015 NAVER Corp.\n * egjs projects are licensed under the MIT license\n */\nimport Flicking from \"../../Flicking\";\nimport { PanelOptions } from \"../../core/panel/Panel\";\nimport VirtualPanel from \"../../core/panel/VirtualPanel\";\nimport VirtualElementProvider from \"../../core/panel/provider/VirtualElementProvider\";\nimport { parsePanelAlign, range, setSize } from \"../../utils\";\n\nimport RenderingStrategy from \"./RenderingStrategy\";\n\nclass VirtualRenderingStrategy implements RenderingStrategy {\n  public renderPanels(flicking: Flicking) {\n    const virtualManager = flicking.virtual;\n    const visiblePanels = flicking.visiblePanels as VirtualPanel[];\n    const invisibleIndexes = range(flicking.panelsPerView + 1);\n\n    visiblePanels.forEach(panel => {\n      const elementIndex = panel.elementIndex;\n\n      panel.render();\n\n      virtualManager.show(elementIndex);\n      invisibleIndexes[elementIndex] = -1;\n    });\n\n    invisibleIndexes\n      .filter(val => val >= 0)\n      .forEach(idx => {\n        virtualManager.hide(idx);\n      });\n  }\n\n  public getRenderingIndexesByOrder(flicking: Flicking) {\n    const virtualManager = flicking.virtual;\n    const visiblePanels = [...flicking.visiblePanels]\n      .filter(panel => panel.rendered)\n      .sort((panel1, panel2) => {\n        return (panel1.position + panel1.offset) - (panel2.position + panel2.offset);\n      }) as VirtualPanel[];\n\n    if (visiblePanels.length <= 0) return virtualManager.elements.map((_, idx) => idx);\n\n    const visibleIndexes = visiblePanels.map(panel => panel.elementIndex);\n    const invisibleIndexes = virtualManager.elements\n      .map((el, idx) => ({ ...el, idx }))\n      .filter(el => !el.visible)\n      .map(el => el.idx);\n\n    return [...visibleIndexes, ...invisibleIndexes];\n  }\n\n  public getRenderingElementsByOrder(flicking: Flicking) {\n    const virtualManager = flicking.virtual;\n    const elements = virtualManager.elements;\n\n    return this.getRenderingIndexesByOrder(flicking).map(index => elements[index].nativeElement);\n  }\n\n  public updateRenderingPanels(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 {\n        panel.markForHide();\n      }\n    });\n\n    camera.updateOffset();\n  }\n\n  public collectPanels(flicking: Flicking) {\n    const align = parsePanelAlign(flicking.renderer.align);\n\n    return range(flicking.virtual.initialPanelCount).map(index => new VirtualPanel({\n      index,\n      elementProvider: new VirtualElementProvider(flicking),\n      align,\n      flicking\n    }));\n  }\n\n  public createPanel(_el: any, options: PanelOptions) {\n    return new VirtualPanel({\n      ...options,\n      elementProvider: new VirtualElementProvider(options.flicking)\n    });\n  }\n\n  public updatePanelSizes(flicking: Flicking, size: Partial<{\n    width: number | string;\n    height: number | string;\n  }>) {\n    flicking.virtual.elements.forEach(el => {\n      setSize(el.nativeElement, size);\n    });\n    flicking.panels.forEach(panel => panel.setSize(size));\n  }\n}\n\nexport default VirtualRenderingStrategy;\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 AutoResizer from \"./core/AutoResizer\";\nimport { Panel } from \"./core/panel\";\nimport { VanillaElementProvider } from \"./core/panel/provider\";\nimport VirtualManager, { VirtualOptions } from \"./core/VirtualManager\";\nimport { Control, SnapControl, SnapControlOptions, FreeControl, StrictControl, FreeControlOptions, StrictControlOptions } from \"./control\";\nimport { Camera } from \"./camera\";\nimport { Renderer, VanillaRenderer, ExternalRenderer, RendererOptions, NormalRenderingStrategy, VirtualRenderingStrategy } from \"./renderer\";\nimport { EVENTS, ALIGN, MOVE_TYPE, DIRECTION, CIRCULAR_FALLBACK } 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  circularFallback: LiteralUnion<ValueOf<typeof CIRCULAR_FALLBACK>>;\n  bound: boolean;\n  adaptive: boolean;\n  panelsPerView: number;\n  noPanelStyleOverride: boolean;\n  resizeOnContentsReady: boolean;\n  nested: boolean;\n\n  // EVENT\n  needPanelThreshold: number;\n  preventEventsBeforeInit: boolean;\n\n  // ANIMATION\n  deceleration: number;\n  duration: number;\n  easing: (x: number) => number;\n\n  // INPUT\n  inputType: string[];\n  moveType: ValueOf<typeof MOVE_TYPE> | MoveTypeOptions<ValueOf<typeof MOVE_TYPE>>;\n  threshold: number;\n  dragThreshold: number;\n  interruptable: boolean;\n  bounce: number | string | [number | string, number | string];\n  iOSEdgeSwipeThreshold: number;\n  preventClickOnDrag: boolean;\n  preventDefaultOnDrag: boolean;\n  disableOnInit: boolean;\n  changeOnHold: boolean;\n\n  // PERFORMANCE\n  renderOnlyVisible: boolean;\n  virtual: VirtualOptions | null;\n\n  // OTHERS\n  autoInit: boolean;\n  autoResize: boolean;\n  useResizeObserver: boolean;\n  resizeDebounce: number;\n  maxResizeDebounce: number;\n  useFractionalSize: boolean;\n  externalRenderer: ExternalRenderer | null;\n\n  // @deprecated\n  renderExternal: {\n    renderer: new (options: RendererOptions) => ExternalRenderer;\n    rendererOptions: RendererOptions;\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 _autoResizer: AutoResizer;\n  private _camera: Camera;\n  private _control: Control;\n  private _renderer: Renderer;\n  private _virtualManager: VirtualManager;\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 _circularFallback: FlickingOptions[\"circularFallback\"];\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  private _virtual: FlickingOptions[\"virtual\"];\n  private _nested: FlickingOptions[\"nested\"];\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 _dragThreshold: FlickingOptions[\"dragThreshold\"];\n  private _interruptable: FlickingOptions[\"interruptable\"];\n  private _bounce: FlickingOptions[\"bounce\"];\n  private _iOSEdgeSwipeThreshold: FlickingOptions[\"iOSEdgeSwipeThreshold\"];\n  private _preventClickOnDrag: FlickingOptions[\"preventClickOnDrag\"];\n  private _preventDefaultOnDrag: FlickingOptions[\"preventDefaultOnDrag\"];\n  private _disableOnInit: FlickingOptions[\"disableOnInit\"];\n  private _changeOnHold: FlickingOptions[\"changeOnHold\"];\n\n  private _renderOnlyVisible: FlickingOptions[\"renderOnlyVisible\"];\n\n  private _autoInit: FlickingOptions[\"autoInit\"];\n  private _autoResize: FlickingOptions[\"autoResize\"];\n  private _useResizeObserver: FlickingOptions[\"useResizeObserver\"];\n  private _resizeDebounce: FlickingOptions[\"resizeDebounce\"];\n  private _maxResizeDebounce: FlickingOptions[\"maxResizeDebounce\"];\n  private _useFractionalSize: FlickingOptions[\"useFractionalSize\"];\n  private _externalRenderer: FlickingOptions[\"externalRenderer\"];\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.circularEnabled; }\n  /**\n   * Whether the `virtual` option is enabled.\n   * The {@link Flicking#virtual virtual} option can't be enabled when  {@link Flicking#panelsPerView panelsPerView} is less or equal than zero.\n   * @ko {@link Flicking#virtual virtual} �듭뀡�� �쒖꽦�붾릺�덈뒗吏� �щ�瑜� �섑��대뒗 硫ㅻ쾭 蹂���.\n   * {@link Flicking#virtual virtual} �듭뀡�� {@link Flicking#panelsPerView panelsPerView} �듭뀡�� 媛믪씠 0蹂대떎 媛숆굅�� �묒쑝硫� 鍮꾪솢�깊솕�⑸땲��.\n   * @type {boolean}\n   * @default false\n   * @readonly\n   */\n  public get virtualEnabled() { return this._panelsPerView > 0 && this._virtual != null; }\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   * @see {@link https://naver.github.io/egjs-flicking/Options#align align ( Options )}\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   * @see {@link https://naver.github.io/egjs-flicking/Options#defaultindex defaultIndex ( Options )}\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   * @see {@link https://naver.github.io/egjs-flicking/Options#horizontal horizontal ( Options )}\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   * @see {@link https://naver.github.io/egjs-flicking/Options#circular circular ( Options )}\n   */\n  public get circular() { return this._circular; }\n  /**\n   * Set panel control mode for the case when circular cannot be enabled.\n   * \"linear\" will set the view's range from the top of the first panel to the top of the last panel.\n   * \"bound\" will prevent the view from going out of the first/last panel, so it won't show empty spaces before/after the first/last panel.\n   * @ko �쒗솚 紐⑤뱶 �ъ슜 遺덇��μ떆 �ъ슜�� �⑤꼸 議곗옉 踰붿쐞 �ㅼ젙 諛⑹떇�� 蹂�寃쏀빀�덈떎.\n   * \"linear\" �ъ슜�� �쒖젏�� 泥ル쾲吏� �섎━癒쇳듃 �꾩뿉�쒕��� 留덉�留� �섎━癒쇳듃 �꾧퉴吏� ��吏곸씪 �� �덈룄濡� �ㅼ젙�⑸땲��.\n   * \"bound\" �ъ슜�� �쒖젏�� 泥ル쾲吏� �섎━癒쇳듃�� 留덉�留� �섎━癒쇳듃�� �앷낵 �� �ъ씠�먯꽌 ��吏곸씪 �� �덈룄濡� �ㅼ젙�⑸땲��.\n   * @see CIRCULAR_FALLBACK\n   * @type {string}\n   * @default \"linear\"\n   * @see {@link https://naver.github.io/egjs-flicking/Options#circularfallback circularFallback ( Options )}\n   */\n  public get circularFallback() { return this._circularFallback; }\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   * @see {@link https://naver.github.io/egjs-flicking/Options#bound bound ( Options )}\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   * @see {@link https://naver.github.io/egjs-flicking/Options#adaptive adaptive ( Options )}\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   * @see {@link https://naver.github.io/egjs-flicking/Options#panelsperview panelsPerView ( Options )}\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   * @see {@link https://naver.github.io/egjs-flicking/Options#resizeOnContentsReady resizeOnContentsReady ( Options )}\n   */\n  public get resizeOnContentsReady() { return this._resizeOnContentsReady; }\n  /**\n   * If you enable this option on child Flicking when the Flicking is placed inside the Flicking, the parent Flicking will move in the same direction after the child Flicking reaches the first/last panel.\n   * If the parent Flicking and child Flicking have different horizontal option, you do not need to set this option.\n   * @ko Flicking �대��� Flicking�� 諛곗튂�� �� �섏쐞 Flicking�먯꽌 �� �듭뀡�� �쒖꽦�뷀븯硫� �섏쐞 Flicking�� 泥�/留덉�留� �⑤꼸�� �꾨떖�� �ㅻ��� 媛숈� 諛⑺뼢�쇰줈 �곸쐞 Flicking�� ��吏곸엯�덈떎.\n   * 留뚯빟 �곸쐞 Flicking怨� �섏쐞 Flicking�� �쒕줈 �ㅻⅨ horizontal �듭뀡�� 媛�吏�怨� �덈떎硫� �� �듭뀡�� �ㅼ젙�� �꾩슂媛� �놁뒿�덈떎.\n   * @type {boolean}\n   * @default false\n   * @see {@link https://naver.github.io/egjs-flicking/Options#nested nested ( Options )}\n   */\n  public get nested() { return this._nested; }\n  // EVENTS\n  /**\n   * A Threshold from viewport edge before triggering `needPanel` event\n   * @ko `needPanel`�대깽�멸� 諛쒖깮�섍린 �꾪븳 酉고룷�� �앹쑝濡쒕��곗쓽 理쒕� 嫄곕━\n   * @type {number}\n   * @default 0\n   * @see {@link https://naver.github.io/egjs-flicking/Options#needpanelthreshold needPanelThreshold ( Options )}\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   * @see {@link https://naver.github.io/egjs-flicking/Options#preventeventsbeforeinit preventEventsBeforeInit ( Options )}\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   * @see {@link https://naver.github.io/egjs-flicking/Options#deceleration deceleration ( Options )}\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   * @see {@link https://naver.github.io/egjs-flicking/Options#easing Easing ( Options )}\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   * @see {@link https://naver.github.io/egjs-flicking/Options#duration duration ( Options )}\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/Options#paninput-options Possible values (PanInputOption#inputType)}\n   * <ko>{@link https://naver.github.io/egjs-axes/Options#paninput-options 媛��ν븳 媛믩뱾 (PanInputOption#inputType)}</ko>\n   * @see {@link https://naver.github.io/egjs-flicking/Options#inputtype inputType ( Options )}\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   * @see {@link https://naver.github.io/egjs-flicking/Options#movetype moveType ( Options )}\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   * @see {@link https://naver.github.io/egjs-flicking/Options#threshold Threshold ( Options )}\n   */\n  public get threshold() { return this._threshold; }\n  /**\n   * Minimal distance of user input before recognizing (unit: px). It should be dragged above the dragThreshold to move the panel.\n   * @ko �ъ슜�먯쓽 �낅젰�� �몄떇�섍린 �꾪븳 理쒖냼�쒖쓽 嫄곕━ (�⑥쐞: px). 二쇱뼱吏� 媛� �댁긽�쇰줈 �ㅽ겕濡ㅽ빐�쇰쭔 �⑤꼸�� ��吏곸엯�덈떎.\n   * @type {number}\n   * @default 1\n   * @see {@link https://naver.github.io/egjs-flicking/Options#dragThreshold dragThreshold ( Options )}\n   */\n  public get dragThreshold() { return this._dragThreshold; }\n  /**\n   * Set animation to be interruptable by click/touch.\n   * @ko �ъ슜�먯쓽 �대┃/�곗튂濡� �명빐 �좊땲硫붿씠�섏쓣 �꾩쨷�� 硫덉텧 �� �덈룄濡� �ㅼ젙�⑸땲��.\n   * @type {boolean}\n   * @default true\n   * @see {@link https://naver.github.io/egjs-flicking/Options#interruptable Interruptable ( Options )}\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   * @see {@link https://naver.github.io/egjs-flicking/Options#bounce bounce ( Options )}\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   * @see {@link https://naver.github.io/egjs-flicking/Options#iosedgeswipethreshold iOSEdgeSwipeThreshold ( Options )}\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   * @see {@link https://naver.github.io/egjs-flicking/Options#preventclickondrag preventClickOnDrag ( Options )}\n   */\n  public get preventClickOnDrag() { return this._preventClickOnDrag; }\n  /**\n   * Whether to use the {@link https://developer.mozilla.org/ko/docs/Web/API/Event/preventDefault preventDefault} when the user starts dragging\n   * @ko �ъ슜�먭� �쒕옒洹몃� �쒖옉�� �� {@link https://developer.mozilla.org/ko/docs/Web/API/Event/preventDefault preventDefault} �ㅽ뻾 �щ�\n   * @type {boolean}\n   * @default false\n   * @see {@link https://naver.github.io/egjs-flicking/Options#preventDefaultOnDrag preventDefaultOnDrag ( Options )}\n   */\n  public get preventDefaultOnDrag() { return this._preventDefaultOnDrag; }\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   * @see {@link https://naver.github.io/egjs-flicking/Options#disableoninit disableOnInit ( Options )}\n   */\n  public get disableOnInit() { return this._disableOnInit; }\n  /**\n   * Change active panel index on mouse/touch hold while animating.\n   * `index` of the `willChange`/`willRestore` event will be used as new index.\n   * @ko �좊땲硫붿씠�� �꾩쨷 留덉슦��/�곗튂 �낅젰�� �꾩옱 �쒖꽦�붾맂 �⑤꼸�� �몃뜳�ㅻ� 蹂�寃쏀빀�덈떎.\n   * `willChange`/`willRestore` �대깽�몄쓽 `index`媛믪씠 �덈줈�� �몃뜳�ㅻ줈 �ъ슜�� 寃껋엯�덈떎.\n   * @type {boolean}\n   * @default false\n   * @see {@link https://naver.github.io/egjs-flicking/Options#changeonhold changeOnHold ( Options )}\n   */\n  public get changeOnHold() { return this._changeOnHold; }\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   * @see {@link https://naver.github.io/egjs-flicking/Options#renderonlyvisible renderOnlyVisible ( Options )}\n   */\n  public get renderOnlyVisible() { return this._renderOnlyVisible; }\n  /**\n   * By enabling this option, it will reduce memory consumption by restricting the number of DOM elements to `panelsPerView + 1`\n   * Must be used with `panelsPerview`.\n   * After Flicking's initialized, this property can be used to add/remove the panel count.\n   * @ko �� �듭뀡�� �쒖꽦�뷀븷 寃쎌슦 �⑤꼸 �섎━癒쇳듃�� 媛쒖닔瑜� `panelsPerView + 1` 媛쒕줈 怨좎젙�⑥쑝濡쒖뜥, 硫붾え由� �ъ슜�됱쓣 以꾩씪 �� �덉뒿�덈떎.\n   * `panelsPerView` �듭뀡怨� �④퍡 �ъ슜�섏뼱�쇰쭔 �⑸땲��.\n   * Flicking 珥덇린�� �댄썑��, �� �꾨줈�쇳떚�� �뚮뜑留곹븯�� �⑤꼸�� 媛쒖닔瑜� 異붽�/�쒓굅�섍린 �꾪빐 �ъ슜�� �� �덉뒿�덈떎.\n   * @type {VirtualManager}\n   * @property {function} renderPanel A rendering function for the panel element's innerHTML<ko>�⑤꼸 �섎━癒쇳듃�� innerHTML�� �뚮뜑留곹븯�� �⑥닔</ko>\n   * @property {number} initialPanelCount Initial panel count to render<ko>理쒖큹濡� �뚮뜑留곹븷 �⑤꼸�� 媛쒖닔</ko>\n   * @property {boolean} [cache=false] Whether to cache rendered panel's innerHTML<ko>�뚮뜑留곷맂 �⑤꼸�� innerHTML �뺣낫瑜� 罹먯떆�좎� �щ�</ko>\n   * @property {string} [panelClass=\"flicking-panel\"] The class name that will be applied to rendered panel elements<ko>�뚮뜑留곷릺�� �⑤꼸 �섎━癒쇳듃�� �곸슜�� �대옒�� �대쫫</ko>\n   * @see {@link https://naver.github.io/egjs-flicking/Options#virtual virtual ( Options )}\n   * @example\n   * ```ts\n   * import Flicking, { VirtualPanel } from \"@egjs/flicking\";\n   *\n   * const flicking = new Flicking(\"#some_el\", {\n   *   panelsPerView: 3,\n   *   virtual: {\n   *     renderPanel: (panel: VirtualPanel, index: number) => `Panel ${index}`,\n   *     initialPanelCount: 100\n   *   }\n   * });\n   *\n   * // Add 100 virtual panels (at the end)\n   * flicking.virtual.append(100);\n   *\n   * // Remove 100 virtual panels from 0 to 100\n   * flicking.virtual.remove(0, 100);\n   * ```\n   */\n  public get virtual() { return this._virtualManager; }\n\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   * @see {@link https://naver.github.io/egjs-flicking/Options#autoinit autoInit ( Options )}\n   * @readonly\n   */\n  public get autoInit() { return this._autoInit; }\n  /**\n   * Whether to automatically call {@link Flicking#resize resize()} when the viewport element(.flicking-viewport)'s size is changed\n   * @ko 酉고룷�� �섎━癒쇳듃(.flicking-viewport)�� �ш린 蹂�寃쎌떆 {@link Flicking#resize resize()} 硫붿냼�쒕� �먮룞�쇰줈 �몄텧�좎� �щ�瑜� �ㅼ젙�⑸땲��\n   * @type {boolean}\n   * @default true\n   */\n  public get autoResize() { return this._autoResize; }\n  /**\n   * Whether to listen {@link https://developer.mozilla.org/en-US/docs/Web/API/ResizeObserver ResizeObserver}'s event instead of Window's {@link https://developer.mozilla.org/ko/docs/Web/API/Window/resize_event resize} event when using the `autoResize` option\n   * @ko autoResize �듭뀡 �ъ슜�� {@link https://developer.mozilla.org/en-US/docs/Web/API/ResizeObserver ResizeObserver}�� �대깽�몃� Window媛앹껜�� {@link https://developer.mozilla.org/ko/docs/Web/API/Window/resize_event resize} �대깽�� ���� �섏떊�좎� �щ�瑜� �ㅼ젙�⑸땲��\n   * @type {boolean}\n   * @default true\n   * @see {@link https://naver.github.io/egjs-flicking/Options#useresizeobserver useResizeObserver ( Options )}\n   */\n  public get useResizeObserver() { return this._useResizeObserver; }\n  /**\n   * Delays size recalculation from `autoResize` by the given time in milisecond.\n   * If the size is changed again while being delayed, it cancels the previous one and delays from the beginning again.\n   * This can increase performance by preventing `resize` being called too often.\n   * @ko `autoResize` �ㅼ젙�쒖뿉 �몄텧�섎뒗 �ш린 �ш퀎�곗쓣 二쇱뼱吏� �쒓컙(�⑥쐞: ms)留뚰겮 吏��곗떆�듬땲��.\n   * 吏��곗떆�ㅻ뒗 �꾩쨷 �ш린媛� �ㅼ떆 蹂�寃쎈릺�덉쓣 寃쎌슦, �댁쟾 寃껋쓣 痍⑥냼�섍퀬 二쇱뼱吏� �쒓컙留뚰겮 �ㅼ떆 吏��곗떆�듬땲��.\n   * �대� �듯빐 `resize`媛� �덈Т 留롮씠 �몄텧�섎뒗 寃껋쓣 諛⑹��섏뿬 �깅뒫�� �μ긽�쒗궗 �� �덉뒿�덈떎.\n   * @type {number}\n   * @default 0\n   * @see {@link https://naver.github.io/egjs-flicking/Options#resizedebounce resizeDebounce ( Options )}\n   */\n  public get resizeDebounce() { return this._resizeDebounce; }\n  /**\n   * The maximum time for size recalculation delay when using `resizeDebounce`, in milisecond.\n   * This guarantees that size recalculation is performed at least once every (n)ms.\n   * @ko `resizeDebounce` �ъ슜�쒖뿉 �ш린 �ш퀎�곗씠 吏��곕릺�� 理쒕� �쒓컙�� 吏��뺥빀�덈떎. (�⑥쐞: ms)\n   * �대� �듯빐, �곸뼱�� (n)ms�� �쒕쾲�� �ш린 �ш퀎�곗쓣 �섑뻾�섎뒗 寃껋쓣 蹂댁옣�� �� �덉뒿�덈떎.\n   * @type {number}\n   * @default 100\n   * @see {@link https://naver.github.io/egjs-flicking/Options#maxresizedebounce maxResizeDebounce ( Options )}\n   */\n  public get maxResizeDebounce() { return this._maxResizeDebounce; }\n  /**\n   * By enabling this, Flicking will calculate all internal size with CSS width computed with getComputedStyle.\n   * This can prevent 1px offset issue in some cases where panel size has the fractional part.\n   * All sizes will have the original size before CSS {@link https://developer.mozilla.org/en-US/docs/Web/CSS/transform transform} is applied on the element.\n   * @ko �� �듭뀡�� �쒖꽦�뷀븷 寃쎌슦, Flicking�� �대��� 紐⑤뱺 �ш린瑜� {@link https://developer.mozilla.org/en-US/docs/Web/API/Element/getBoundingClientRect getBoundingClientRect}瑜� �댁슜�섏뿬 怨꾩궛�⑸땲��.\n   * �대� �듯빐, �⑤꼸 �ш린�� �뚯닔�먯쓣 �ы븿�� 寃쎌슦�� 諛쒖깮�� �� �덈뒗 �쇰� 1px �ㅽ봽�� �댁뒋瑜� �닿껐 媛��ν빀�덈떎.\n   * 紐⑤뱺 �ш린�� CSS {@link https://developer.mozilla.org/en-US/docs/Web/CSS/transform transform}�� �섎━癒쇳듃�� �곸슜�섍린 �댁쟾�� �ш린瑜� �ъ슜�� 寃껋엯�덈떎.\n   * @type {boolean}\n   * @default false\n   * @see {@link https://naver.github.io/egjs-flicking/Options#usefractionalsize useFractionalSize ( Options )}\n   */\n  public get useFractionalSize() { return this._useFractionalSize; }\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   * @default null\n   * @internal\n   * @readonly\n   */\n  public get externalRenderer() { return this._externalRenderer; }\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   * @default null\n   * @internal\n   * @readonly\n   * @deprecated\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    void this.resize();\n  }\n\n  public set defaultIndex(val: FlickingOptions[\"defaultIndex\"]) { this._defaultIndex = val; }\n  public set horizontal(val: FlickingOptions[\"horizontal\"]) {\n    this._horizontal = val;\n    this._control.controller.updateDirection();\n    void this.resize();\n  }\n\n  public set circular(val: FlickingOptions[\"circular\"]) {\n    this._circular = val;\n    void this.resize();\n  }\n\n  public set bound(val: FlickingOptions[\"bound\"]) {\n    this._bound = val;\n    void this.resize();\n  }\n\n  public set adaptive(val: FlickingOptions[\"adaptive\"]) {\n    this._adaptive = val;\n    void this.resize();\n  }\n\n  public set panelsPerView(val: FlickingOptions[\"panelsPerView\"]) {\n    this._panelsPerView = val;\n    void this.resize();\n  }\n\n  public set noPanelStyleOverride(val: FlickingOptions[\"noPanelStyleOverride\"]) {\n    this._noPanelStyleOverride = val;\n    void this.resize();\n  }\n\n  public set resizeOnContentsReady(val: FlickingOptions[\"resizeOnContentsReady\"]) {\n    this._resizeOnContentsReady = val;\n    if (val) {\n      this._renderer.checkPanelContentsReady(this._renderer.panels);\n    }\n  }\n\n  public set nested(val: FlickingOptions[\"nested\"]) {\n    this._nested = val;\n    const axes = this._control.controller.axes;\n\n    if (axes) {\n      axes.options.nested = val;\n    }\n  }\n\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\"]) {\n    this._deceleration = val;\n    const axes = this._control.controller.axes;\n\n    if (axes) {\n      axes.options.deceleration = val;\n    }\n  }\n\n  public set easing(val: FlickingOptions[\"easing\"]) {\n    this._easing = val;\n    const axes = this._control.controller.axes;\n\n    if (axes) {\n      axes.options.easing = val;\n    }\n  }\n\n  public set duration(val: FlickingOptions[\"duration\"]) { this._duration = val; }\n  // INPUT\n  public set inputType(val: FlickingOptions[\"inputType\"]) {\n    this._inputType = val;\n    const panInput = this._control.controller.panInput;\n\n    if (panInput) {\n      panInput.options.inputType = val;\n    }\n  }\n\n  public set moveType(val: FlickingOptions[\"moveType\"]) {\n    this._moveType = val;\n\n    const prevControl = this._control;\n    const newControl = this._createControl();\n    const activePanel = prevControl.activePanel;\n    newControl.copy(prevControl);\n\n    const prevProgressInPanel = activePanel\n      ? this._camera.getProgressInPanel(activePanel)\n      : 0;\n\n    this._control = newControl;\n    this._control.updatePosition(prevProgressInPanel);\n    this._control.updateInput();\n  }\n\n  public set threshold(val: FlickingOptions[\"threshold\"]) { this._threshold = val; }\n\n  public set dragThreshold(val: FlickingOptions[\"dragThreshold\"]) {\n    this._dragThreshold = val;\n    const panInput = this._control.controller.panInput;\n\n    if (panInput) {\n      panInput.options.threshold = val;\n    }\n  }\n\n  public set interruptable(val: FlickingOptions[\"interruptable\"]) {\n    this._interruptable = val;\n\n    const axes = this._control.controller.axes;\n\n    if (axes) {\n      axes.options.interruptable = val;\n    }\n  }\n\n  public set bounce(val: FlickingOptions[\"bounce\"]) {\n    this._bounce = val;\n    this._control.updateInput();\n  }\n\n  public set iOSEdgeSwipeThreshold(val: FlickingOptions[\"iOSEdgeSwipeThreshold\"]) {\n    this._iOSEdgeSwipeThreshold = val;\n    const panInput = this._control.controller.panInput;\n\n    if (panInput) {\n      panInput.options.iOSEdgeSwipeThreshold = val;\n    }\n  }\n\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 preventDefaultOnDrag(val: FlickingOptions[\"preventDefaultOnDrag\"]) {\n    this._preventDefaultOnDrag = val;\n    const panInput = this._control.controller.panInput;\n\n    if (panInput) {\n      panInput.options.preventDefaultOnDrag = val;\n    }\n  }\n\n  public set disableOnInit(val: FlickingOptions[\"disableOnInit\"]) { this._disableOnInit = val; }\n  public set changeOnHold(val: FlickingOptions[\"changeOnHold\"]) { this._changeOnHold = val; }\n  // PERFORMANCE\n  public set renderOnlyVisible(val: FlickingOptions[\"renderOnlyVisible\"]) {\n    this._renderOnlyVisible = val;\n    void this._renderer.render();\n  }\n\n  // OTHERS\n  public set autoResize(val: FlickingOptions[\"autoResize\"]) {\n    this._autoResize = val;\n\n    if (val) {\n      this._autoResizer.enable();\n    } else {\n      this._autoResizer.disable();\n    }\n  }\n\n  public set useResizeObserver(val: FlickingOptions[\"useResizeObserver\"]) {\n    this._useResizeObserver = val;\n\n    if (this._autoResize) {\n      this._autoResizer.enable();\n    }\n  }\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    circularFallback = CIRCULAR_FALLBACK.LINEAR,\n    bound = false,\n    adaptive = false,\n    panelsPerView = -1,\n    noPanelStyleOverride = false,\n    resizeOnContentsReady = false,\n    nested = 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    dragThreshold = 1,\n    interruptable = true,\n    bounce = \"20%\",\n    iOSEdgeSwipeThreshold = 30,\n    preventClickOnDrag = true,\n    preventDefaultOnDrag = false,\n    disableOnInit = false,\n    changeOnHold = false,\n    renderOnlyVisible = false,\n    virtual = null,\n    autoInit = true,\n    autoResize = true,\n    useResizeObserver = true,\n    resizeDebounce = 0,\n    maxResizeDebounce = 100,\n    useFractionalSize = false,\n    externalRenderer = null,\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._circularFallback = circularFallback;\n    this._bound = bound;\n    this._adaptive = adaptive;\n    this._panelsPerView = panelsPerView;\n    this._noPanelStyleOverride = noPanelStyleOverride;\n    this._resizeOnContentsReady = resizeOnContentsReady;\n    this._nested = nested;\n    this._virtual = virtual;\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._dragThreshold = dragThreshold;\n    this._interruptable = interruptable;\n    this._bounce = bounce;\n    this._iOSEdgeSwipeThreshold = iOSEdgeSwipeThreshold;\n    this._preventClickOnDrag = preventClickOnDrag;\n    this._preventDefaultOnDrag = preventDefaultOnDrag;\n    this._disableOnInit = disableOnInit;\n    this._changeOnHold = changeOnHold;\n    this._renderOnlyVisible = renderOnlyVisible;\n    this._autoInit = autoInit;\n    this._autoResize = autoResize;\n    this._useResizeObserver = useResizeObserver;\n    this._resizeDebounce = resizeDebounce;\n    this._maxResizeDebounce = maxResizeDebounce;\n    this._useFractionalSize = useFractionalSize;\n    this._externalRenderer = externalRenderer;\n    this._renderExternal = renderExternal;\n\n    // Create core components\n    this._viewport = new Viewport(this, getElement(root));\n    this._autoResizer = new AutoResizer(this);\n    this._renderer = this._createRenderer();\n    this._camera = this._createCamera();\n    this._control = this._createControl();\n    this._virtualManager = new VirtualManager(this, virtual);\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 {Promise<void>}\n   */\n  public init(): Promise<void> {\n    if (this._initialized) return Promise.resolve();\n\n    const camera = this._camera;\n    const renderer = this._renderer;\n    const control = this._control;\n    const virtualManager = this._virtualManager;\n    const originalTrigger = this.trigger;\n    const preventEventsBeforeInit = this._preventEventsBeforeInit;\n\n    camera.init();\n    virtualManager.init();\n    renderer.init(this);\n    control.init(this);\n\n    if (preventEventsBeforeInit) {\n      this.trigger = () => this;\n    }\n\n    this._initialResize();\n\n    // Look at initial panel\n    this._moveToInitialPanel();\n    if (this._autoResize) {\n      this._autoResizer.enable();\n    }\n    if (this._preventClickOnDrag) {\n      control.controller.addPreventClickHandler();\n    }\n    if (this._disableOnInit) {\n      this.disableInput();\n    }\n    renderer.checkPanelContentsReady(renderer.panels);\n    this._initialized = true;\n\n    return renderer.render().then(() => {\n      // Done initializing & emit ready event\n      this._plugins.forEach(plugin => plugin.init(this));\n\n      if (preventEventsBeforeInit) {\n        this.trigger = originalTrigger;\n      }\n      this.trigger(new ComponentEvent(EVENTS.READY));\n    });\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\n    this._autoResizer.disable();\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    if (this._control.holding) {\n      this._control.controller.release();\n    }\n\n    return this._control.moveToPanel(panel, {\n      duration,\n      direction\n    });\n  }\n\n  /**\n   * Change the destination and duration of the animation currently playing\n   * @ko �ъ깮 以묒씤 �좊땲硫붿씠�섏쓽 紐⑹쟻吏��� �ъ깮 �쒓컙�� 蹂�寃쏀빀�덈떎\n   * @param {number} index The index of the panel to move<ko>�대룞�� �⑤꼸�� �몃뜳��</ko>\n   * @param {number} duration Duration of the animation (unit: ms)<ko>�좊땲硫붿씠�� 吏꾪뻾 �쒓컙 (�⑥쐞: ms)</ko>\n   * @param {DIRECTION} direction Direction to move, only available in the {@link Flicking#circular circular} mode<ko>�대룞�� 諛⑺뼢. {@link Flicking#circular circular} �듭뀡 �쒖꽦�붿떆�먮쭔 �ъ슜 媛��ν빀�덈떎</ko>\n   * @throws {FlickingError}\n   * {@link ERROR_CODE INDEX_OUT_OF_RANGE} When the root is not either string or HTMLElement\n   * <ko>{@link ERROR_CODE INDEX_OUT_OF_RANGE} �대떦 �몃뜳�ㅻ� 媛�吏� �⑤꼸�� 議댁옱�섏� �딆쓣 寃쎌슦</ko>\n   * @return {void}\n   */\n  public updateAnimation(index: number, duration?: number, direction?: ValueOf<typeof DIRECTION>): void {\n    if (!this._control.animating) {\n      return;\n    }\n\n    const renderer = this._renderer;\n    const panelCount = renderer.panelCount;\n\n    const panel = renderer.getPanel(index);\n\n    if (!panel) {\n      throw new FlickingError(ERROR.MESSAGE.INDEX_OUT_OF_RANGE(index, 0, panelCount - 1), ERROR.CODE.INDEX_OUT_OF_RANGE);\n    }\n\n    this._control.updateAnimation(panel, duration, direction);\n  }\n\n  /**\n   * Stops the animation currently playing\n   * @ko �ъ깮 以묒씤 �좊땲硫붿씠�섏쓣 以묐떒�쒗궢�덈떎\n   * @fires Flicking#moveEnd\n   * @return {void}\n   */\n  public stopAnimation(): void {\n    if (!this._control.animating) {\n      return;\n    }\n\n    this._control.stopAnimation();\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 {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, hasDOMInElements: true });\n      renderer.batchInsert({ index: 0, elements: parseElement(panels.map(panel => panel.html!)), hasDOMInElements: true });\n    }\n\n    if (index != null) {\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    if (!this._initialized) {\n      return;\n    }\n    renderer.updatePanelSize();\n    camera.updateAlignPos();\n    camera.updateRange();\n    camera.updateAnchors();\n    camera.updateAdaptiveHeight();\n    camera.updatePanelOrder();\n    camera.updateOffset();\n    await renderer.render();\n    if (!this._initialized) {\n      return;\n    }\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), hasDOMInElements: true });\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, hasDOMInElements: true });\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    if (this._circular && this._bound) {\n      // eslint-disable-next-line no-console\n      console.warn(\"\\\"circular\\\" and \\\"bound\\\" option cannot be used together, ignoring bound.\");\n    }\n\n    return new Camera(this, {\n      align: this._align\n    });\n  }\n\n  private _createRenderer(): Renderer {\n    const externalRenderer = this._externalRenderer;\n    if (this._virtual && this._panelsPerView <= 0) {\n      // eslint-disable-next-line no-console\n      console.warn(\"\\\"virtual\\\" and \\\"panelsPerView\\\" option should be used together, ignoring virtual.\");\n    }\n\n    return externalRenderer\n      ? externalRenderer\n      : this._renderExternal\n        ? this._createExternalRenderer()\n        : this._createVanillaRenderer();\n  }\n\n  private _createExternalRenderer(): ExternalRenderer {\n    const {\n      renderer,\n      rendererOptions\n    } = this._renderExternal!;\n\n    return new (renderer)({ align: this._align, ...rendererOptions });\n  }\n\n  private _createVanillaRenderer(): VanillaRenderer {\n    const virtual = this.virtualEnabled;\n\n    return new VanillaRenderer({\n      align: this._align,\n      strategy: virtual\n        ? new VirtualRenderingStrategy()\n        : new NormalRenderingStrategy({\n          providerCtor: VanillaElementProvider\n        })\n    });\n  }\n\n  private _moveToInitialPanel(): void {\n    const renderer = this._renderer;\n    const control = this._control;\n    const camera = this._camera;\n    const defaultPanel = renderer.getPanel(this._defaultIndex) || renderer.getPanel(0);\n\n    if (!defaultPanel) return;\n\n    const nearestAnchor = camera.findNearestAnchor(defaultPanel.position);\n    const initialPanel = (nearestAnchor && defaultPanel.position !== nearestAnchor.panel.position && defaultPanel.index !== nearestAnchor.panel.index) ? nearestAnchor.panel : defaultPanel;\n    control.setActive(initialPanel, null, false);\n\n    if (!nearestAnchor) {\n      throw new FlickingError(ERROR.MESSAGE.POSITION_NOT_REACHABLE(initialPanel.position), ERROR.CODE.POSITION_NOT_REACHABLE);\n    }\n\n    let position = initialPanel.position;\n\n    if (!camera.canReach(initialPanel)) {\n      position = nearestAnchor.position;\n    }\n\n    camera.lookAt(position);\n    control.updateInput();\n    camera.updateOffset();\n  }\n\n  private _initialResize() {\n    const viewport = this._viewport;\n    const renderer = this._renderer;\n    const camera = this._camera;\n    const control = this._control;\n\n    this.trigger(new ComponentEvent(EVENTS.BEFORE_RESIZE, {\n      width: 0,\n      height: 0,\n      element: viewport.element\n    }));\n\n    viewport.resize();\n    renderer.updatePanelSize();\n    camera.updateAlignPos();\n    camera.updateRange();\n    camera.updateAnchors();\n    camera.updateOffset();\n    control.updateInput();\n\n    const newWidth = viewport.width;\n    const newHeight = viewport.height;\n    const sizeChanged = newWidth !== 0 || newHeight !== 0;\n\n    this.trigger(new ComponentEvent(EVENTS.AFTER_RESIZE, {\n      width: viewport.width,\n      height: viewport.height,\n      prev: {\n        width: 0,\n        height: 0\n      },\n      sizeChanged,\n      element: viewport.element\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 { ComponentEvent } from \"@egjs/component\";\nimport { EventKey } from \"@egjs/component/declaration/types\";\n\nimport Flicking, { FlickingEvents, FlickingOptions } from \"./Flicking\";\nimport {\n  ChangedEvent,\n  HoldEndEvent,\n  HoldStartEvent,\n  MoveEndEvent,\n  MoveEvent,\n  MoveStartEvent,\n  RestoredEvent,\n  WillChangeEvent,\n  WillRestoreEvent\n} from \"./type/event\";\nimport { LiteralUnion, ValueOf } from \"./type/internal\";\nimport { CLASS, EVENTS, MOVE_DIRECTION } from \"./const/external\";\nimport { getDataAttributes, includes, toArray } from \"./utils\";\n\nexport const SIDE_EVENTS = {\n  HOLD_START: \"sideHoldStart\",\n  HOLD_END: \"sideHoldEnd\",\n  MOVE_START: \"sideMoveStart\",\n  MOVE: \"sideMove\",\n  MOVE_END: \"sideMoveEnd\",\n  WILL_CHANGE: \"sideWillChange\",\n  CHANGED: \"sideChanged\",\n  WILL_RESTORE: \"sideWillRestore\",\n  RESTORED: \"sideRestored\"\n} as const;\n\nexport type CrossFlickingEvent<T> = { mainIndex: number } & T;\n\nexport interface CrossFlickingEvents extends FlickingEvents {\n  [SIDE_EVENTS.HOLD_START]: CrossFlickingEvent<HoldStartEvent>;\n  [SIDE_EVENTS.HOLD_END]: CrossFlickingEvent<HoldEndEvent>;\n  [SIDE_EVENTS.MOVE_START]: CrossFlickingEvent<MoveStartEvent>;\n  [SIDE_EVENTS.MOVE]: CrossFlickingEvent<MoveEvent>;\n  [SIDE_EVENTS.MOVE_END]: CrossFlickingEvent<MoveEndEvent>;\n  [SIDE_EVENTS.WILL_CHANGE]: CrossFlickingEvent<WillChangeEvent>;\n  [SIDE_EVENTS.CHANGED]: CrossFlickingEvent<ChangedEvent>;\n  [SIDE_EVENTS.WILL_RESTORE]: CrossFlickingEvent<WillRestoreEvent>;\n  [SIDE_EVENTS.RESTORED]: CrossFlickingEvent<RestoredEvent>;\n}\n\nexport interface CrossFlickingOptions extends FlickingOptions {\n  sideOptions: Partial<FlickingOptions> | undefined;\n  preserveIndex: boolean | undefined;\n  disableSlideOnHold: boolean | undefined;\n  disableIndexSync: boolean | undefined;\n}\n\nexport interface SideState {\n  key: string;\n  start: number;\n  end: number;\n  element: HTMLElement;\n}\n\nexport interface CrossFlickingChangedEvent extends ChangedEvent {\n  sideIndex?: number;\n}\n\nexport interface CrossFlickingWillChangeEvent extends WillChangeEvent {\n  sideIndex?: number;\n}\n\nexport class CrossFlicking extends Flicking {\n  // Core components\n  private _sideFlicking: Flicking[];\n\n  // Options\n  private _sideOptions: CrossFlickingOptions[\"sideOptions\"];\n  private _preserveIndex: CrossFlickingOptions[\"preserveIndex\"];\n  private _disableSlideOnHold: CrossFlickingOptions[\"disableSlideOnHold\"];\n  private _disableIndexSync: CrossFlickingOptions[\"disableIndexSync\"];\n\n  // Internal State\n  private _sideState: SideState[];\n  private _moveDirection: LiteralUnion<ValueOf<typeof MOVE_DIRECTION>> | null;\n  private _originalDragThreshold: number;\n  private _nextIndex: number;\n\n  // Components\n  public get sideFlicking() {\n    return this._sideFlicking;\n  }\n\n  public get sideIndex() {\n    return this._sideFlicking.map(i => i.index);\n  }\n\n  public get sideState() {\n    return this._sideState;\n  }\n\n  // Options Getter\n  public get sideOptions() { return this._sideOptions; }\n\n  public get preserveIndex() { return this._preserveIndex; }\n\n  public get disableSlideOnHold() { return this._disableSlideOnHold; }\n\n  public get disableIndexSync() { return this._disableIndexSync; }\n\n  // Options Setter\n  public set sideOptions(val: CrossFlickingOptions[\"sideOptions\"]) {\n    this._sideOptions = val;\n  }\n\n  public set preserveIndex(val: CrossFlickingOptions[\"preserveIndex\"]) {\n    this._preserveIndex = val;\n  }\n\n  public set disableSlideOnHold(val: CrossFlickingOptions[\"disableSlideOnHold\"]) {\n    this._disableSlideOnHold = val;\n  }\n\n  public set disableIndexSync(val: CrossFlickingOptions[\"disableIndexSync\"]) {\n    this._disableIndexSync = val;\n  }\n\n  public constructor(\n    root: HTMLElement | string,\n    options: Partial<CrossFlickingOptions>\n  ) {\n    super(root, options);\n    const {\n      sideOptions = {},\n      preserveIndex = true,\n      disableSlideOnHold = true,\n      disableIndexSync = false\n    } = options;\n\n    // Internal states\n    this._moveDirection = null;\n    this._nextIndex = 0;\n    this._originalDragThreshold = this.dragThreshold;\n\n    // Bind options\n    this._sideOptions = sideOptions;\n    this._preserveIndex = preserveIndex;\n    this._disableSlideOnHold = disableSlideOnHold;\n    this._disableIndexSync = disableIndexSync;\n  }\n\n  public init(): Promise<void> {\n    return super.init().then(() => {\n      this._sideState = this._createSideState();\n      this._sideFlicking = this._createSideFlicking();\n      this._addComponentEvents();\n    });\n  }\n\n  public destroy(): void {\n    this._sideFlicking.forEach((flicking) => {\n      flicking.destroy();\n    });\n    super.destroy();\n  }\n\n  private _addComponentEvents(): void {\n    this.on(EVENTS.HOLD_START, this._onHorizontalHoldStart);\n    this.on(EVENTS.MOVE, this._onHorizontalMove);\n    this.on(EVENTS.MOVE_END, this._onHorizontalMoveEnd);\n    [EVENTS.CHANGED, EVENTS.WILL_CHANGE].forEach((event) => {\n      this.on(event, this._addSideIndex);\n    });\n\n    this._sideFlicking.forEach((flicking, mainIndex) => {\n      flicking.on(EVENTS.HOLD_START, this._onSideHoldStart);\n      flicking.on(EVENTS.MOVE, this._onSideMove);\n      flicking.on(EVENTS.MOVE_END, this._onSideMoveEnd);\n      flicking.on(EVENTS.CHANGED, this._onSideChanged);\n\n      Object.keys(SIDE_EVENTS).forEach((name: EventKey<FlickingEvents>) => {\n        flicking.on(EVENTS[name], (event) => {\n          this.trigger(\n            new ComponentEvent(SIDE_EVENTS[name], {\n              mainIndex,\n              ...event\n            })\n          );\n        });\n      });\n    });\n  }\n\n  private _createSideState(): SideState[] {\n    const viewportEl = this.element;\n    const cameraEl = this.camera.element;\n    const panels = toArray(cameraEl.children) as HTMLElement[];\n    const isCrossStructure = getDataAttributes(\n      viewportEl,\n      \"data-cross-\"\n    ).structure;\n    let sideState: SideState[] = [];\n\n    if (!isCrossStructure) {\n      const groupPanels = this._getGroupFromAttribute(panels);\n      const groupKeys = Object.keys(groupPanels);\n\n      if (groupKeys.length) {\n        sideState = this._getSideStateFromGroup(groupPanels);\n        this.remove(0, this.panelCount - groupKeys.length);\n      } else {\n        sideState = this._getSideStateFromPanels(panels);\n      }\n\n      this._createCrossStructure(sideState);\n    } else {\n      sideState = this._getSideStateFromCrossStructure(panels);\n    }\n\n    void this.resize();\n\n    return sideState;\n  }\n\n  private _createCrossStructure(sideState: SideState[]) {\n    const sideCamera = document.createElement(\"div\");\n    let sidePanels: string = \"\";\n\n    sideCamera.classList.add(CLASS.CAMERA);\n    sideState.forEach((state, i) => {\n      const panel = this.camera.children[i];\n      sidePanels += state.element.innerHTML;\n      Array.from(panel.attributes).forEach((attribute) =>\n        panel.removeAttribute(attribute.name)\n      );\n    });\n\n    sideCamera.innerHTML = sidePanels;\n\n    sideState.forEach((_, i) => {\n      const panel = this.camera.children[i];\n      [CLASS.VIEWPORT, CLASS.VERTICAL].forEach((className) => {\n        if (!panel.classList.contains(className)) {\n          panel.classList.add(className);\n        }\n      });\n      panel.innerHTML = sideCamera.outerHTML;\n    });\n\n    this.element.setAttribute(\"data-cross-structure\", \"true\");\n  }\n\n  private _getGroupFromAttribute(\n    panels: HTMLElement[]\n  ): Record<string, HTMLElement[]> {\n    const groupKeys: string[] = [];\n    const groupPanels: Record<string, HTMLElement[]> = {};\n\n    panels.forEach((panel) => {\n      const groupKey = getDataAttributes(panel, \"data-cross-\").groupkey;\n      if (groupKey && !includes(groupKeys, groupKey)) {\n        groupKeys.push(groupKey);\n        groupPanels[groupKey] = [panel];\n      } else if (groupKey) {\n        groupPanels[groupKey].push(panel);\n      }\n    });\n\n    return groupPanels;\n  }\n\n  private _getSideStateFromGroup(\n    groupPanels: Record<string, HTMLElement[]>\n  ): SideState[] {\n    return Object.keys(groupPanels).reduce(\n      (state: SideState[], key: string) => {\n        const start = state.length ? +state[state.length - 1].end + 1 : 0;\n        const element = groupPanels[key].reduce(\n          (el: HTMLElement, panel: HTMLElement) => {\n            el.innerHTML += panel.outerHTML;\n            return el;\n          },\n          document.createElement(\"div\")\n        );\n        return [\n          ...state,\n          {\n            key,\n            start,\n            end: start + groupPanels[key].length - 1,\n            element: element\n          }\n        ];\n      },\n      []\n    );\n  }\n\n  private _getSideStateFromPanels(panels: HTMLElement[]): SideState[] {\n    return panels.reduce(\n      (state: SideState[], panel: HTMLElement, i: number) => {\n        const start = state.length ? +state[state.length - 1].end + 1 : 0;\n        return [\n          ...state,\n          {\n            key: i.toString(),\n            start,\n            end: start + panel.children.length - 1,\n            element: panel\n          }\n        ];\n      },\n      []\n    );\n  }\n\n  private _getSideStateFromCrossStructure(panels: HTMLElement[]): SideState[] {\n    const groupPanels = this._getGroupFromAttribute(panels);\n    return this._getSideStateFromGroup(groupPanels);\n  }\n\n  private _createSideFlicking(): Flicking[] {\n    return this.sideState.map((state, i) => {\n      return new Flicking(this.camera.children[i], {\n        ...this.sideOptions,\n        horizontal: false,\n        panelsPerView: 1,\n        defaultIndex: state.start\n      });\n    });\n  }\n\n  private _syncToCategory = (index: number, outerIndex: number): void => {\n    if (this._disableIndexSync) {\n      return;\n    }\n\n    this.stopAnimation();\n    this._sideFlicking.forEach((child, i) => {\n      const { start, end } = this._sideState[i];\n\n      if (start <= index && end >= index && outerIndex !== i) {\n        child.stopAnimation();\n        void child.moveTo(index, 0);\n        void this.moveTo(i, 0);\n      }\n    });\n  };\n\n  private _setDraggable = (\n    direction: ValueOf<typeof MOVE_DIRECTION>,\n    draggable: boolean\n  ): void => {\n    if (!this._disableSlideOnHold) {\n      return;\n    }\n\n    const dragThreshold = this._originalDragThreshold;\n    const threshold = draggable\n      ? dragThreshold && dragThreshold >= 10\n        ? dragThreshold\n        : 10\n      : Infinity;\n\n    if ((direction === MOVE_DIRECTION.HORIZONTAL) === this.horizontal) {\n      this.dragThreshold = threshold;\n    } else if ((direction === MOVE_DIRECTION.VERTICAL) === this.horizontal) {\n      this._sideFlicking.forEach((child) => {\n        child.dragThreshold = threshold;\n      });\n    }\n  };\n\n  private _setPreviousSideIndex = () => {\n    this._sideFlicking.forEach((child, i) => {\n      const { start, end } = this._sideState[i];\n\n      if (this._preserveIndex) {\n        if (this._nextIndex !== i) {\n          if (child.index < start) {\n            child.stopAnimation();\n            void child.moveTo(start, 0);\n          } else if (child.index > end) {\n            child.stopAnimation();\n            void child.moveTo(end, 0);\n          }\n        }\n      } else {\n        if (this._nextIndex !== i) {\n          void child.moveTo(start, 0);\n        }\n      }\n    });\n  };\n\n  private _addSideIndex = (e: ChangedEvent | WillChangeEvent): void => {\n    (e as CrossFlickingChangedEvent | CrossFlickingWillChangeEvent).sideIndex = this._sideFlicking[e.index].index;\n  };\n\n  private _onHorizontalHoldStart = (): void => {\n    this._setDraggable(MOVE_DIRECTION.HORIZONTAL, true);\n    this._moveDirection = null;\n  };\n\n  private _onHorizontalMove = (e: MoveEvent): void => {\n    if (e.isTrusted && !this._moveDirection) {\n      this._setDraggable(MOVE_DIRECTION.VERTICAL, false);\n      this._moveDirection = MOVE_DIRECTION.HORIZONTAL;\n    }\n  };\n\n  private _onHorizontalMoveEnd = (e: MoveEndEvent): void => {\n    const visiblePanels = this.visiblePanels;\n\n    if (visiblePanels.length > 1) {\n      this._nextIndex =\n        e.direction === \"NEXT\"\n          ? visiblePanels[1].index\n          : visiblePanels[0].index;\n    } else {\n      this._nextIndex = visiblePanels[0].index;\n    }\n\n    this._setDraggable(MOVE_DIRECTION.VERTICAL, true);\n    this._moveDirection = null;\n\n    // _syncToCategory�먯꽌 �꾩쟾�� 媛�濡� �대룞�� �대(�댁�湲� �꾩뿉 �몃줈 諛⑺뼢 index媛� 蹂��섎뒗 寃쎌슦媛� �덉뼱 requestAnimationFrame 泥섎━\n    requestAnimationFrame(() => this._setPreviousSideIndex());\n\n    if (e.isTrusted) {\n      this._syncToCategory(\n        this._sideFlicking[this._nextIndex].index,\n        this._nextIndex\n      );\n    }\n  };\n\n  private _onSideHoldStart = (): void => {\n    this._setDraggable(MOVE_DIRECTION.VERTICAL, true);\n    this._moveDirection = null;\n  };\n\n  private _onSideMove = (e: MoveEvent): void => {\n    if (e.isTrusted && !this._moveDirection) {\n      this._setDraggable(MOVE_DIRECTION.HORIZONTAL, false);\n      this._moveDirection = MOVE_DIRECTION.VERTICAL;\n    }\n  };\n\n  private _onSideMoveEnd = (): void => {\n    this._setDraggable(MOVE_DIRECTION.HORIZONTAL, true);\n    this._moveDirection = null;\n  };\n\n  private _onSideChanged = (e: ChangedEvent): void => {\n    // If this.visiblePanels.length >= 2, it means that horizontal flicking is being dragged.\n    // In this case, syncToCategory in _onHorizontalMoveEnd will fire after moving finishes, so we don't fire it here.\n    if (\n      this.visiblePanels.length < 2 &&\n      this._sideFlicking[this.index] === e.currentTarget\n    ) {\n      this._syncToCategory(e.index, this.index);\n    }\n  };\n}\n","import { DiffResult } from \"@egjs/list-differ\";\n\nimport Flicking from \"../Flicking\";\nimport Renderer from \"../renderer/Renderer\";\nimport Panel from \"../core/panel/Panel\";\n\nexport default (flicking: Flicking, diffResult: DiffResult<any>, rendered: any[]) => {\n  const renderer = flicking.renderer;\n  const panels = renderer.panels;\n  const prevList = [...diffResult.prevList];\n\n  const added: Panel[] = [];\n  const removed: Panel[] = [];\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        removed.push(...batchRemove(renderer, prevIdx, endIdx + 1));\n\n        endIdx = removedIdx;\n        prevIdx = removedIdx;\n      } else {\n        prevIdx = removedIdx;\n      }\n\n      prevList.splice(removedIdx, 1);\n    });\n\n    removed.push(...batchRemove(renderer, prevIdx, endIdx + 1));\n  }\n\n  diffResult.ordered.forEach(([from, to]) => {\n    const prevPanel = panels.splice(from, 1)[0];\n    panels.splice(to, 0, prevPanel);\n  });\n\n  if (diffResult.ordered.length > 0) {\n    panels.forEach((panel, idx) => {\n      const indexDiff = idx - panel.index;\n\n      if (indexDiff > 0) {\n        panel.increaseIndex(indexDiff);\n      } else {\n        panel.decreaseIndex(-indexDiff);\n      }\n    });\n\n    panels.sort((panel1, panel2) => panel1.index - panel2.index);\n\n    panels.forEach(panel => {\n      panel.updatePosition();\n    });\n  }\n\n  if (diffResult.added.length > 0) {\n    let startIdx = -1;\n    let prevIdx = -1;\n\n    const addedElements = rendered.slice(prevList.length);\n\n    diffResult.added.forEach((addedIdx, idx) => {\n      if (startIdx < 0) {\n        startIdx = idx;\n      }\n\n      if (prevIdx >= 0 && addedIdx !== prevIdx + 1) {\n        added.push(...batchInsert(renderer, diffResult, addedElements, startIdx, idx + 1));\n\n        startIdx = -1;\n        prevIdx = -1;\n      } else {\n        prevIdx = addedIdx;\n      }\n    });\n\n    if (startIdx >= 0) {\n      added.push(...batchInsert(renderer, diffResult, addedElements, startIdx));\n    }\n  }\n\n  if (diffResult.added.length > 0 || diffResult.removed.length > 0) {\n    renderer.updateAfterPanelChange(added, removed);\n  }\n};\n\nconst batchInsert = (renderer: Renderer, diffResult: DiffResult<any>, addedElements: any[], startIdx: number, endIdx?: number) => {\n  return renderer.batchInsertDefer(\n    ...diffResult.added.slice(startIdx, endIdx).map((index, elIdx) => ({ index, elements: [addedElements[elIdx]], hasDOMInElements: false }))\n  );\n};\n\nconst batchRemove = (renderer: Renderer, startIdx: number, endIdx?: number) => {\n  const removed = renderer.panels.slice(startIdx, endIdx);\n\n  return renderer.batchRemoveDefer({ index: startIdx, deleteCount: removed.length, hasDOMInElements: false });\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","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.indexOf(\"_\") !== 0 && 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              const flicking = this[flickingName];\n              return flicking && descriptor.get?.call(flicking);\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\";\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","/*\n * Copyright (c) 2015 NAVER Corp.\n * egjs projects are licensed under the MIT license\n */\nimport Flicking from \"./Flicking\";\nimport * as CrossFlicking from \"./CrossFlicking\";\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 * as Utils from \"./utils\";\nimport { merge } from \"./utils\";\n\nmerge(Flicking, Core);\nmerge(Flicking, Camera);\nmerge(Flicking, Control);\nmerge(Flicking, Renderer);\nmerge(Flicking, Constants);\nmerge(Flicking, CFC);\nmerge(Flicking, Utils);\nmerge(Flicking, CrossFlicking);\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","NOT_ALLOWED_IN_VIRTUAL","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","CLASS","VIEWPORT","CAMERA","VERTICAL","HIDDEN","DEFAULT_VIRTUAL","CIRCULAR_FALLBACK","LINEAR","BOUND","ORDER","LTR","RTL","MOVE_DIRECTION","HORIZONTAL","merge","target","sources","_i","arguments","length","forEach","source","Object","keys","key","getElement","el","parent","targetEl","isString","queryResult","document","querySelector","FlickingError","ERROR","nodeType","Node","ELEMENT_NODE","checkExistence","value","nameOnErrMsg","clamp","x","Math","getFlickingAttached","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","parsePanelAlign","panel","getDirection","start","end","parseElement","element","elements","tempDiv","createElement","innerHTML","push","apply","__spread","children","firstChild","removeChild","getMinusCompensatedIndex","includes","array","array_1","__values","array_1_1","done","next","circulatePosition","pos","find","checker","array_2","array_2_1","findIndex","getProgress","prev","getStyle","window","getComputedStyle","currentStyle","setSize","_a","width","height","style","isBetween","circulateIndex","index","range","arr","i","getElementSize","horizontal","useFractionalSize","useOffset","baseSize","isBorderBoxSizing","boxSizing","border","borderLeftWidth","borderRightWidth","borderTopWidth","borderBottomWidth","padding","paddingLeft","paddingRight","paddingTop","paddingBottom","sizeStr","setPrototypeOf","obj","proto","__proto__","camelize","str","replace","all","letter","toUpperCase","getDataAttributes","attributePrefix","dataAttributes","attributes","attribute","name_1","indexOf","_super","message","code","_this","this","prototype","__extends","Error","Viewport","flicking","_flicking","_el","_width","_height","_padding","left","right","top","bottom","_isBorderBoxSizing","__proto","defineProperty","get","newWidth","newHeight","resize","elStyle","AutoResizer","isFirstResize","_onResize","resizeDebounce","maxResizeDebounce","_maxResizeDebounceTimer","setTimeout","_doScheduledResize","_resizeTimer","clearTimeout","_skipFirstResize","_enabled","_resizeObserver","enable","viewport","disable","useResizeObserver","ResizeObserver","resizeObserver","observe","addEventListener","disconnect","removeEventListener","VanillaElementProvider","_element","_rendered","show","cameraEl","camera","parentElement","appendChild","hide","VirtualElementProvider","_virtualElement","nativeElement","visible","elIndex","_panel","elementIndex","virtual","init","VirtualManager","options","_renderPanel","renderPanel","_initialPanelCount","_b","initialPanelCount","_cache","_c","cache","_panelClass","_d","panelClass","_elements","set","renderer","panels","uncacheRenderResult","virtualEnabled","externalRenderer","renderExternal","_initVirtualElements","virtualElements","nativeEl","display","append","count","insert","prepend","batchInsert","hasDOMInElements","remove","batchRemove","deleteCount","cameraElement","panelsPerView","fragment","createDocumentFragment","panelEl","className","dataset","toString","STATE_TYPE","EVENT","HOLD","CHANGE","RELEASE","ANIMATION_END","FINISH","POSITION_KEY","State","_delta","_targetPanel","onEnter","prevState","onHold","ctx","onChange","onRelease","onAnimationEnd","onFinish","_moveToChangedPosition","axesEvent","transitTo","delta","AXES","prevPosition","newPosition","circularEnabled","lookAt","moveEvent","ComponentEvent","isTrusted","holding","direction","trigger","isCanceled","DISABLED","IdleState","animating","panelCount","holdStartEvent","HOLDING","animatingContext","control","controller","moveStartEvent","ANIMATING","HoldingState","_releaseEvent","inputEvent","offset","offsetX","offsetY","DRAGGING","flick","setTo","IDLE","clickedElement","srcEvent","touch","changedTouches","elementFromPoint","clientX","clientY","clickedPanel","panels_1","panels_1_1","contains","cameraPosition","clickedPanelPosition","DraggingState","destPos","duration","moveToPosition","err","AnimatingState","targetPanel","updateInput","changeOnHold","setActive","activePanel","DisabledState","stop","StateMachine","nextStateType","nextState","_state","fire","eventType","externalCtx","currentState","__assign","AxesController","_onAxesHold","_dragged","_onAxesChange","_panInput","isEnabled","_preventClickWhenDragged","e","preventDefault","stopPropagation","_resetInternalValues","_stateMachine","_axes","state","_animatingContext","axes","circular","axis","Axes","deceleration","interruptable","nested","easing","PanInput","inputType","threshold","dragThreshold","iOSEdgeSwipeThreshold","preventDefaultOnDrag","scale","panelOrder","releaseOnScroll","connect","on","destroy","removePreventClickHandler","release","updateAnimation","stopAnimation","update","controlParams","axisManager","addPreventClickHandler","off","animateTo","Promise","reject","startPos","resolve","animationFinishHandler","interruptionHandler","once","animate","updateDirection","panInput","Control","_controller","_activePanel","_getPosition","updatePosition","progressInPanel","clampToReachablePosition","resetActive","moveToPanel","_triggerIndexChangeEvent","_animateToPosition","newActivePanel","prevActivePanel","_nextPanel","updateAdaptiveHeight","prevIndex","prevPanel","copy","triggeringEvent","event","then","__awaiter","render","sent","catch","nearestAnchor","findNearestAnchor","removed","canReach","camPos_1","camRangeDiff","rangeDiff","possiblePositions","filter","reduce","nearestPosition","abs","Infinity","AnchorPoint","_index","_pos","SnapControl","_count","activeAnchor","findActiveAnchor","anchorAtCamera","targetAnchor","snapThreshold","_calcSnapThreshold","posDelta","absPosDelta","snapDelta","_findSnappedAnchor","_findAdjacentAnchor","currentPos","clampedPosition","anchorAtPosition","findAnchorIncludePosition","isFinite","anchors","anchorPoints","loopCount","floor","circularIndexOffset","anchorAtPositionIndex","anchor","loop","anchorIncludePosition","getNextAnchor","getPrevAnchor","isNextDirection","panelSize","alignPos","alignPosition","margin","FreeControl","stopAtEdge","_stopAtEdge","panelRange","targetPos","StrictControl","_resetIndexRange","cameraRange","currentIndex","prevPanelIndex","nextPanelIndex","nextPanel","prevPos","nextPos","_indexRange","currentPanel","axesRange","indexRange","isOverThreshold","adjacentAnchor","firstAnchor","lastAnchor","shouldBounceToFirst","shouldBounceToLast","isAdjacent","CameraMode","getAnchors","includePosition","nearest","prevDist","anchorIdx","dist","getCircularOffset","panelPos","canSee","visibleRange","isVisibleOnRange","LinearCameraMode","checkAvailability","getRange","firstPanel","getPanel","lastPanel","CircularCameraMode","firstPanelPrev","lastPanelNext","visibleSize","panelSizeSum","every","camRange","minDist","minDistIndex","anchorCount","positionInRange","anchorInRange","possibleAnchors","toggled","toggledPrev","toggleDirection","toggledNext","_calcPanelAreaSum","visibleInCurrentRange","sum","sizeIncludingMargin","BoundCameraMode","viewportSize","firstPos","lastPos","alignVal","reachablePanels","shouldPrependBoundAnchor","shouldAppendBoundAnchor","indexOffset_1","newAnchors","splice","nearestPanelAtMin","_findNearestPanel","panelAtMin","panelAtMax","panelIdx","Camera","_lookedOffset","_checkTranslateSupport","supportedStyle","documentElement","transformName","transforms_1","transforms_1_1","prefixedTransform","_transform","_align","_position","_alignPos","_offset","_circularOffset","_circularEnabled","_mode","_range","_visiblePanels","_anchors","NaN","nearestPanel","bounceSize","prevRange","nextRange","nextPosition","_panelOrder","viewportEl","firstElementChild","_updateMode","updatePanelOrder","prevOffset","isChangedOffset","_togglePanels","_refreshVisiblePanels","_checkNeedPanel","_checkReachEnd","updateOffset","applyTransform","getProgressInPanel","updateRange","updateCircularToggleDirection","updateAlignPos","updateAnchors","selectedPanels","visiblePanels","adaptive","maxHeight","unRenderedPanels","rendered","initialized","resetNeedPanelHistory","_needPanelTriggered","rendering","actualPosition","newVisiblePanels","prevVisiblePanels","added","needPanelTriggered","cameraSize","needPanelThreshold","cameraPrev","cameraNext","newPos","wasBetweenRange","isBetweenRange","circularMode","canSetCircularMode","fallbackMode","circularFallback","bound","toggle","some","isToggled","Renderer","strategy","_panels","_rendering","_strategy","panelAlign","_collectPanels","forceRenderAllPanels","markForShow","updatePanelSize","_updatePanelSizeByGrid","items","allPanelsInserted","batchInsertDefer","updateAfterPanelChange","prevFirstPanel","addedPanels","item","insertingIdx","panelsPushed","panelsInserted","_createPanel","_insertPanelElements","increaseIndex","allPanelsRemoved","batchRemoveDefer","removingIdx","panelsPulled","panelsRemoved","decreaseIndex","_removePanelElements","panelsAdded","_updateCameraAndControl","targetIndex","checkPanelContentsReady","checkingPanels","resizeOnContentsReady","hasContents","contentsReadyChecker","ImReady","loading","prevProgressInPanel","panelBehind","readyCount","totalCount","check","_showOnlyVisiblePanels","visibleIndexes","visibles","markForHide","referencePanel","panelSizeObj","firstPanelSizeObj","noPanelStyleOverride","updatePanelSizes","_removeAllChildsFromCamera","nextSibling","nextSiblingElement","insertBefore","_afterRender","VanillaRenderer","updateRenderingPanels","renderPanels","_resetPanelElementOrder","_removeAllTextNodes","collectPanels","createPanel","reversedElements","getRenderingElementsByOrder","reverse","nextEl","nextElementSibling","childNodes","node","TEXT_NODE","ExternalRenderer","Panel","elementProvider","_elProvider","_removed","_loading","_resetInternalStates","_size","_margin","_toggled","_toggleDirection","cameraRangeDiff","progress","camPos","disappearPosNext","disappearPosPrev","checkingRange","_updateAlignPos","cached","marginLeft","marginRight","marginTop","marginBottom","includeMargin","includeRange","focus","moveTo","togglePosition","_togglePosition","prevToggled","camAlignPosition","camVisibleRange","camVisibleSize","minimumVisible","maximumVisible","shouldBeVisibleAtMin","shouldBeVisibleAtMax","NormalRenderingStrategy","providerCtor","_providerCtor","getRenderingIndexesByOrder","renderedPanels","renderOnlyVisible","VirtualPanel","_cachedInnerHTML","virtualElCount","cacheRenderResult","result","newInnerHTML","VirtualRenderingStrategy","virtualManager","invisibleIndexes","sort","panel1","panel2","_","Flicking","root","defaultIndex","_e","_f","_g","_h","_j","_k","_l","_m","_o","_p","_q","preventEventsBeforeInit","_r","_s","_t","pow","_u","_v","moveType","_w","_x","_y","_z","_0","_1","preventClickOnDrag","_2","_3","disableOnInit","_4","_5","_6","_7","autoInit","_8","autoResize","_9","_10","_11","_12","_13","_14","_initialized","_plugins","_defaultIndex","_horizontal","_circular","_circularFallback","_bound","_adaptive","_panelsPerView","_noPanelStyleOverride","_resizeOnContentsReady","_nested","_virtual","_needPanelThreshold","_preventEventsBeforeInit","_deceleration","_duration","_easing","_inputType","_moveType","_threshold","_dragThreshold","_interruptable","_bounce","_iOSEdgeSwipeThreshold","_preventClickOnDrag","_preventDefaultOnDrag","_disableOnInit","_changeOnHold","_renderOnlyVisible","_autoInit","_autoResize","_useResizeObserver","_resizeDebounce","_maxResizeDebounce","_useFractionalSize","_externalRenderer","_renderExternal","_viewport","_autoResizer","_renderer","_createRenderer","_camera","_createCamera","_control","_createControl","_virtualManager","activeIndex","prevControl","newControl","originalTrigger","_initialResize","_moveToInitialPanel","disableInput","plugin","enableInput","getStatus","includePanelHTML","visiblePanelsOnly","status","panelInfo","html","outerHTML","visibleOffset","setStatus","panelIndex","newCameraPos","addPlugins","plugins","removePlugins","foundIndex","prevWidth","prevHeight","sizeChanged","moveTypes","moveTypeStr","moveTypeOptions","JSON","stringify","console","warn","_createExternalRenderer","_createVanillaRenderer","rendererOptions","defaultPanel","initialPanel","VERSION","Component","SIDE_EVENTS","CrossFlicking","_syncToCategory","outerIndex","_disableIndexSync","_sideFlicking","child","_sideState","_setDraggable","draggable","_disableSlideOnHold","_originalDragThreshold","_setPreviousSideIndex","_preserveIndex","_nextIndex","_addSideIndex","sideIndex","_onHorizontalHoldStart","_moveDirection","_onHorizontalMove","_onHorizontalMoveEnd","requestAnimationFrame","_onSideHoldStart","_onSideMove","_onSideMoveEnd","_onSideChanged","currentTarget","sideOptions","preserveIndex","disableSlideOnHold","disableIndexSync","_sideOptions","_createSideState","_createSideFlicking","_addComponentEvents","mainIndex","sideState","structure","_getSideStateFromCrossStructure","groupPanels","_getGroupFromAttribute","groupKeys","_getSideStateFromGroup","_getSideStateFromPanels","_createCrossStructure","sideCamera","sidePanels","classList","add","from","removeAttribute","setAttribute","groupKey","groupkey","diffResult","addedElements","startIdx","endIdx","elIdx","getCameraAlign","getPanelAlign","flickingName","getOwnPropertyNames","descriptor","getOwnPropertyDescriptor","args","getterDescriptor","prevList","endIdx_1","prevIdx_1","removedIdx","ordered","__read","to","indexDiff","startIdx_1","prevIdx_2","addedElements_1","addedIdx","removedPanels","maintainedMap","maintained","current","list","firstPanelSize","cameraAlign","camPosition","Constants","CFC","Utils"],"mappings":"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"}