@egjs/flicking-plugins 4.8.0 → 4.8.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -314,7 +314,7 @@ class AutoPlay {
314
314
  this._direction = direction;
315
315
  this._stopOnHover = stopOnHover;
316
316
  this._stopOnInit = stopOnInit;
317
- this._delayAfterHover = delayAfterHover ?? duration;
317
+ this._delayAfterHover = delayAfterHover != null ? delayAfterHover : duration;
318
318
  }
319
319
  /** Current value of the {@link AutoPlayOptions.duration | duration} option. */
320
320
  get duration() {
@@ -425,17 +425,18 @@ class AutoPlay {
425
425
  }
426
426
  this._playing = true;
427
427
  this._timerId = window.setTimeout(() => {
428
+ var _a, _b;
428
429
  let animationDuration = this._animationDuration || flicking.duration;
429
430
  const moveType = flicking.moveType;
430
- if (moveType === MOVE_TYPE.FREE_SCROLL || moveType?.[0] === MOVE_TYPE.FREE_SCROLL) {
431
+ if (moveType === MOVE_TYPE.FREE_SCROLL || (moveType == null ? void 0 : moveType[0]) === MOVE_TYPE.FREE_SCROLL) {
431
432
  const range = flicking.camera.range;
432
433
  const cameraPosition = flicking.camera.position;
433
434
  const currentPanel = flicking.currentPanel;
434
435
  const prevPanel = currentPanel.prev();
435
436
  const nextPanel = currentPanel.next();
436
437
  const currentPosition = currentPanel.position;
437
- let nextPosition = nextPanel?.position ?? range.max;
438
- let prevPosition = prevPanel?.position ?? range.min;
438
+ let nextPosition = (_a = nextPanel == null ? void 0 : nextPanel.position) != null ? _a : range.max;
439
+ let prevPosition = (_b = prevPanel == null ? void 0 : prevPanel.position) != null ? _b : range.min;
439
440
  if (prevPosition > currentPosition) {
440
441
  prevPosition = range.min - (range.max - prevPosition);
441
442
  }
@@ -1 +1 @@
1
- {"version":3,"file":"plugins.esm.js","sources":["../src/const.ts","../src/event.ts","../src/utils.ts","../src/Arrow.ts","../src/AutoPlay.ts","../src/Fade.ts","../src/Parallax.ts","../src/Perspective.ts","../src/Sync.ts","../src/pagination/renderer/Renderer.ts","../src/pagination/renderer/BulletRenderer.ts","../src/pagination/renderer/FractionRenderer.ts","../src/pagination/renderer/ScrollBulletRenderer.ts","../src/pagination/Pagination.ts"],"sourcesContent":["export const ARROW = {\n PREV_SELECTOR: \".flicking-arrow-prev\",\n NEXT_SELECTOR: \".flicking-arrow-next\",\n DISABLED_CLASS: \"flicking-arrow-disabled\"\n} as const;\n\nexport const PAGINATION = {\n SELECTOR: \".flicking-pagination\",\n PREFIX: \"flicking-pagination\",\n BULLET_WRAPPER_SUFFIX: \"bullets\",\n BULLET_SUFFIX: \"bullet\",\n BULLET_ACTIVE_SUFFIX: \"bullet-active\",\n FRACTION_WRAPPER_SUFFIX: \"fraction\",\n FRACTION_CURRENT_SUFFIX: \"fraction-current\",\n FRACTION_TOTAL_SUFFIX: \"fraction-total\",\n SCROLL_UNINIT_SUFFIX: \"uninitialized\",\n SCROLL_WRAPPER_SUFFIX: \"scroll\",\n SCROLL_SLIDER_SUFFIX: \"slider\",\n SCROLL_PREV_SUFFIX: \"bullet-prev\",\n SCROLL_NEXT_SUFFIX: \"bullet-next\",\n TYPE: {\n BULLET: \"bullet\",\n FRACTION: \"fraction\",\n SCROLL: \"scroll\"\n }\n} as const;\n\nexport const SYNC = {\n TYPE: {\n CAMERA: \"camera\",\n INDEX: \"index\"\n }\n} as const;\n","export const BROWSER = {\n CLICK: \"click\",\n MOUSE_DOWN: \"mousedown\",\n TOUCH_START: \"touchstart\"\n};\n","export const addClass = (el: HTMLElement, className: string) => {\n if (!el) return;\n\n if (el.classList) {\n el.classList.add(className);\n } else {\n const classes = el.className.split(\" \");\n\n if (classes.indexOf(className) < 0) {\n el.className = `${el.className} ${className}`;\n }\n }\n};\n\nexport const removeClass = (el: HTMLElement, className: string) => {\n if (!el) return;\n\n if (el.classList) {\n el.classList.remove(className);\n } else {\n const classRegex = new RegExp(`( |^)${className}( |$)`, \"g\");\n el.className.replace(classRegex, \" \");\n }\n};\n\nexport const getElement = (selector: string, parent: HTMLElement, pluginName: string) => {\n const el = parent.querySelector(selector);\n\n if (!el) {\n throw new Error(`[Flicking-${pluginName}] Couldn't find element with the given selector: ${selector}`);\n }\n\n return el as HTMLElement;\n};\n","import Flicking, { EVENTS, FlickingError, Plugin } from \"@egjs/flicking\";\nimport { ARROW } from \"./const\";\nimport { BROWSER } from \"./event\";\nimport { addClass, getElement, removeClass } from \"./utils\";\n\n/**\n * Options for the {@link Arrow} plugin\n */\nexport interface ArrowOptions {\n /**\n * The parent element to search for arrow elements. If `null`, the Flicking element is used\n * @defaultValue null\n */\n parentEl: HTMLElement | null;\n /**\n * CSS selector for the \"previous\" arrow element\n * @defaultValue \".flicking-arrow-prev\"\n */\n prevElSelector: string;\n /**\n * CSS selector for the \"next\" arrow element\n * @defaultValue \".flicking-arrow-next\"\n */\n nextElSelector: string;\n /**\n * CSS class added to an arrow element when it is disabled (at the start/end of non-circular Flicking)\n * @defaultValue \"flicking-arrow-disabled\"\n */\n disabledClass: string;\n /**\n * Number of panels to move when an arrow is clicked\n * @defaultValue 1\n */\n moveCount: number;\n /**\n * Whether to move by viewport size instead of panel count\n * @defaultValue false\n */\n moveByViewportSize: boolean;\n}\n\n/**\n * A plugin to easily create prev/next arrow buttons for Flicking\n * @see {@link https://naver.github.io/egjs-flicking/docs/demos/plugins/arrow | Demo: Arrow}\n */\nclass Arrow implements Plugin {\n /* Internal Values */\n private _flicking: Flicking | null = null;\n private _prevEl: HTMLElement;\n private _nextEl: HTMLElement;\n\n /* Options */\n private _parentEl: ArrowOptions[\"parentEl\"];\n private _prevElSelector: ArrowOptions[\"prevElSelector\"];\n private _nextElSelector: ArrowOptions[\"nextElSelector\"];\n private _disabledClass: ArrowOptions[\"disabledClass\"];\n private _moveCount: ArrowOptions[\"moveCount\"];\n private _moveByViewportSize: ArrowOptions[\"moveByViewportSize\"];\n\n /** The \"previous\" arrow HTMLElement\n * @readonly\n */\n public get prevEl() {\n return this._prevEl;\n }\n /** The \"next\" arrow HTMLElement\n * @readonly\n */\n public get nextEl() {\n return this._nextEl;\n }\n\n /** Current value of the {@link ArrowOptions.parentEl | parentEl} option. */\n public get parentEl() {\n return this._parentEl;\n }\n /** Current value of the {@link ArrowOptions.prevElSelector | prevElSelector} option. */\n public get prevElSelector() {\n return this._prevElSelector;\n }\n /** Current value of the {@link ArrowOptions.nextElSelector | nextElSelector} option. */\n public get nextElSelector() {\n return this._nextElSelector;\n }\n /** Current value of the {@link ArrowOptions.disabledClass | disabledClass} option. */\n public get disabledClass() {\n return this._disabledClass;\n }\n /** Current value of the {@link ArrowOptions.moveCount | moveCount} option. */\n public get moveCount() {\n return this._moveCount;\n }\n /** Current value of the {@link ArrowOptions.moveByViewportSize | moveByViewportSize} option. */\n public get moveByViewportSize() {\n return this._moveByViewportSize;\n }\n\n /** Sets {@link ArrowOptions.parentEl | parentEl}. */\n public set parentEl(val: ArrowOptions[\"parentEl\"]) {\n this._parentEl = val;\n }\n /** Sets {@link ArrowOptions.prevElSelector | prevElSelector}. */\n public set prevElSelector(val: ArrowOptions[\"prevElSelector\"]) {\n this._prevElSelector = val;\n }\n /** Sets {@link ArrowOptions.nextElSelector | nextElSelector}. */\n public set nextElSelector(val: ArrowOptions[\"nextElSelector\"]) {\n this._nextElSelector = val;\n }\n /** Sets {@link ArrowOptions.disabledClass | disabledClass}. */\n public set disabledClass(val: ArrowOptions[\"disabledClass\"]) {\n this._disabledClass = val;\n }\n /** Sets {@link ArrowOptions.moveCount | moveCount}. */\n public set moveCount(val: ArrowOptions[\"moveCount\"]) {\n this._moveCount = val;\n }\n /** Sets {@link ArrowOptions.moveByViewportSize | moveByViewportSize}. */\n public set moveByViewportSize(val: ArrowOptions[\"moveByViewportSize\"]) {\n this._moveByViewportSize = val;\n }\n\n /**\n * @param options - Options for the Arrow instance\n * @example\n * ```ts\n * flicking.addPlugins(new Arrow({ parentEl: null, prevElSelector: \".flicking-arrow-prev\", nextElSelector: \".flicking-arrow-next\" }));\n * ```\n */\n public constructor(options: Partial<ArrowOptions> = {}) {\n const {\n parentEl = null,\n prevElSelector = ARROW.PREV_SELECTOR,\n nextElSelector = ARROW.NEXT_SELECTOR,\n disabledClass = ARROW.DISABLED_CLASS,\n moveCount = 1,\n moveByViewportSize = false\n } = options;\n\n this._parentEl = parentEl;\n this._prevElSelector = prevElSelector;\n this._nextElSelector = nextElSelector;\n this._disabledClass = disabledClass;\n this._moveCount = moveCount;\n this._moveByViewportSize = moveByViewportSize;\n }\n\n /** Initialize the plugin and attach arrow event listeners to the Flicking instance.\n * @param flicking - The Flicking instance to attach this plugin to\n */\n public init(flicking: Flicking): void {\n if (this._flicking) {\n this.destroy();\n }\n\n this._flicking = flicking;\n\n flicking.on(EVENTS.MOVE, this._onAnimation);\n\n const parentEl = this._parentEl ? this._parentEl : flicking.element;\n const prevEl = getElement(this._prevElSelector, parentEl, \"Arrow\");\n const nextEl = getElement(this._nextElSelector, parentEl, \"Arrow\");\n\n [BROWSER.MOUSE_DOWN, BROWSER.TOUCH_START].forEach(evt => {\n prevEl.addEventListener(evt, this._preventInputPropagation, { passive: true });\n nextEl.addEventListener(evt, this._preventInputPropagation, { passive: true });\n });\n\n prevEl.addEventListener(BROWSER.CLICK, this._onPrevClick);\n nextEl.addEventListener(BROWSER.CLICK, this._onNextClick);\n\n this._prevEl = prevEl;\n this._nextEl = nextEl;\n\n this.update();\n }\n\n /** Destroy the plugin and remove all arrow event listeners. */\n public destroy(): void {\n const flicking = this._flicking;\n\n if (!flicking) {\n return;\n }\n\n flicking.off(EVENTS.MOVE, this._onAnimation);\n\n const prevEl = this._prevEl;\n const nextEl = this._nextEl;\n\n [BROWSER.MOUSE_DOWN, BROWSER.TOUCH_START].forEach(evt => {\n prevEl.removeEventListener(evt, this._preventInputPropagation);\n nextEl.removeEventListener(evt, this._preventInputPropagation);\n });\n\n prevEl.removeEventListener(BROWSER.CLICK, this._onPrevClick);\n nextEl.removeEventListener(BROWSER.CLICK, this._onNextClick);\n this._flicking = null;\n }\n\n /** Update the arrow disabled/enabled state based on the current camera position. */\n public update(): void {\n this._updateClass(this._flicking!.camera.position);\n }\n\n private _preventInputPropagation = (e: Event) => {\n e.stopPropagation();\n };\n\n private _onPrevClick = () => {\n const flicking = this._flicking!;\n const camera = flicking.camera;\n const anchorPoints = camera.anchorPoints;\n\n if (flicking.animating || anchorPoints.length <= 0) return;\n\n const firstAnchor = anchorPoints[0];\n const moveCount = this._moveCount;\n\n if (this._moveByViewportSize) {\n flicking.control.moveToPosition(camera.position - camera.size, flicking.duration).catch(this._onCatch);\n } else {\n if (flicking.circularEnabled) {\n let targetPanel = flicking.currentPanel;\n\n for (let i = 0; i < moveCount; i++) {\n targetPanel = targetPanel.prev()!;\n }\n\n targetPanel.focus().catch(this._onCatch);\n } else if (flicking.index > firstAnchor.panel.index) {\n flicking.moveTo(Math.max(flicking.index - moveCount, firstAnchor.panel.index)).catch(this._onCatch);\n } else if (camera.position > camera.range.min) {\n flicking.moveTo(flicking.index).catch(this._onCatch);\n }\n }\n };\n\n private _onNextClick = () => {\n const flicking = this._flicking!;\n\n const camera = flicking.camera;\n const anchorPoints = camera.anchorPoints;\n\n if (flicking.animating || anchorPoints.length <= 0) return;\n\n const lastAnchor = anchorPoints[anchorPoints.length - 1];\n const moveCount = this._moveCount;\n\n if (this._moveByViewportSize) {\n flicking.control.moveToPosition(camera.position + camera.size, flicking.duration).catch(this._onCatch);\n } else {\n if (flicking.circularEnabled) {\n let targetPanel = flicking.currentPanel;\n\n for (let i = 0; i < moveCount; i++) {\n targetPanel = targetPanel.next()!;\n }\n\n targetPanel.focus().catch(this._onCatch);\n } else if (flicking.index < lastAnchor.panel.index) {\n flicking.moveTo(Math.min(flicking.index + moveCount, lastAnchor.panel.index)).catch(this._onCatch);\n } else if (camera.position > camera.range.min) {\n flicking.moveTo(flicking.index).catch(this._onCatch);\n }\n }\n };\n\n private _onAnimation = () => {\n const flicking = this._flicking!;\n const camera = flicking.camera;\n const controller = flicking.control.controller;\n\n if (flicking.holding) {\n this._updateClass(camera.position);\n } else {\n this._updateClass(controller.animatingContext.end);\n }\n };\n\n private _updateClass(pos: number) {\n const flicking = this._flicking!;\n const disabledClass = this._disabledClass;\n const prevEl = this._prevEl;\n const nextEl = this._nextEl;\n const cameraRange = flicking.camera.range;\n\n const stopAtPrevEdge = flicking.circularEnabled ? false : pos <= cameraRange.min;\n const stopAtNextEdge = flicking.circularEnabled ? false : pos >= cameraRange.max;\n\n if (stopAtPrevEdge) {\n addClass(prevEl, disabledClass);\n } else {\n removeClass(prevEl, disabledClass);\n }\n\n if (stopAtNextEdge) {\n addClass(nextEl, disabledClass);\n } else {\n removeClass(nextEl, disabledClass);\n }\n }\n\n private _onCatch = (err: Error) => {\n if (err instanceof FlickingError) return;\n throw err;\n };\n}\n\nexport default Arrow;\n","import Flicking, { DIRECTION, EVENTS, MOVE_TYPE, Plugin } from \"@egjs/flicking\";\n\n/**\n * Options for the {@link AutoPlay} plugin\n */\nexport interface AutoPlayOptions {\n /**\n * Time to wait before moving on to the next panel (ms)\n * @defaultValue 2000\n */\n duration: number;\n /**\n * Duration of the panel move animation (ms). If `undefined`, the Flicking instance's `duration` is used\n * @defaultValue undefined\n */\n animationDuration: number | undefined;\n /**\n * The direction in which the panel moves\n * @defaultValue \"NEXT\"\n */\n direction: (typeof DIRECTION)[\"NEXT\"] | (typeof DIRECTION)[\"PREV\"];\n /**\n * Whether to stop when the mouse hovers over the element\n * @defaultValue false\n */\n stopOnHover: boolean;\n /**\n * Whether to stop autoplay when the plugin is first initialized\n * @defaultValue false\n */\n stopOnInit: boolean;\n /**\n * If `stopOnHover` is true, time to wait before resuming after mouse leaves (ms)\n * @defaultValue Same as `duration`\n */\n delayAfterHover: number;\n}\n\n/**\n * Plugin that allows you to automatically move to the next/previous panel on a specific time basis\n * @see {@link https://naver.github.io/egjs-flicking/docs/demos/plugins/autoplay | Demo: AutoPlay}\n */\nclass AutoPlay implements Plugin {\n /* Options */\n private _duration: AutoPlayOptions[\"duration\"];\n private _animationDuration: AutoPlayOptions[\"animationDuration\"];\n private _direction: AutoPlayOptions[\"direction\"];\n private _stopOnHover: AutoPlayOptions[\"stopOnHover\"];\n private _stopOnInit: AutoPlayOptions[\"stopOnInit\"];\n private _delayAfterHover: AutoPlayOptions[\"delayAfterHover\"];\n\n /* Internal Values */\n private _flicking: Flicking | null = null;\n private _timerId = 0;\n private _mouseEntered = false;\n private _playing = false;\n\n /** Current value of the {@link AutoPlayOptions.duration | duration} option. */\n public get duration() {\n return this._duration;\n }\n /** Current value of the {@link AutoPlayOptions.animationDuration | animationDuration} option. */\n public get animationDuration() {\n return this._animationDuration;\n }\n /** Current value of the {@link AutoPlayOptions.direction | direction} option. */\n public get direction() {\n return this._direction;\n }\n /** Current value of the {@link AutoPlayOptions.stopOnHover | stopOnHover} option. */\n public get stopOnHover() {\n return this._stopOnHover;\n }\n /** Current value of the {@link AutoPlayOptions.stopOnInit | stopOnInit} option. */\n public get stopOnInit() {\n return this._stopOnInit;\n }\n /** Current value of the {@link AutoPlayOptions.delayAfterHover | delayAfterHover} option. */\n public get delayAfterHover() {\n return this._delayAfterHover;\n }\n /** Whether the autoplay is currently active\n * @readonly\n */\n public get playing() {\n return this._playing;\n }\n\n /** Sets {@link AutoPlayOptions.duration | duration}. */\n public set duration(val: number) {\n this._duration = val;\n }\n /** Sets {@link AutoPlayOptions.animationDuration | animationDuration}. */\n public set animationDuration(val: number | undefined) {\n this._animationDuration = val;\n }\n /** Sets {@link AutoPlayOptions.direction | direction}. */\n public set direction(val: AutoPlayOptions[\"direction\"]) {\n this._direction = val;\n }\n /** Sets {@link AutoPlayOptions.stopOnHover | stopOnHover}. */\n public set stopOnHover(val: boolean) {\n this._stopOnHover = val;\n }\n /** Sets {@link AutoPlayOptions.stopOnInit | stopOnInit}. */\n public set stopOnInit(val: boolean) {\n this._stopOnInit = val;\n }\n /** Sets {@link AutoPlayOptions.delayAfterHover | delayAfterHover}. */\n public set delayAfterHover(val: number) {\n this._delayAfterHover = val;\n }\n\n /**\n * @param options - Options for the AutoPlay instance\n * @example\n * ```ts\n * flicking.addPlugins(new AutoPlay({ duration: 2000, direction: \"NEXT\" }));\n * ```\n */\n public constructor(options: Partial<AutoPlayOptions> = {}) {\n const {\n duration = 2000,\n animationDuration = undefined,\n direction = DIRECTION.NEXT,\n stopOnHover = false,\n stopOnInit = false,\n delayAfterHover\n } = options;\n\n this._duration = duration;\n this._animationDuration = animationDuration;\n this._direction = direction;\n this._stopOnHover = stopOnHover;\n this._stopOnInit = stopOnInit;\n this._delayAfterHover = delayAfterHover ?? duration;\n }\n\n /** Initialize the plugin and start autoplay on the given Flicking instance.\n * @param flicking - The Flicking instance to attach this plugin to\n */\n public init(flicking: Flicking): void {\n if (this._flicking) {\n this.destroy();\n }\n\n flicking.on({\n [EVENTS.MOVE_START]: this.stop,\n [EVENTS.HOLD_START]: this.stop,\n [EVENTS.MOVE_END]: this.play,\n [EVENTS.SELECT]: this.play\n });\n\n this._flicking = flicking;\n if (this._stopOnHover) {\n const targetEl = this._flicking.element;\n targetEl.addEventListener(\"mouseenter\", this._onMouseEnter, false);\n targetEl.addEventListener(\"mouseleave\", this._onMouseLeave, false);\n }\n\n if (!this._stopOnInit) {\n this.play();\n }\n }\n\n /** Destroy the plugin, stop autoplay, and remove all event listeners. */\n public destroy(): void {\n const flicking = this._flicking;\n\n this._mouseEntered = false;\n this.stop();\n\n if (!flicking) {\n return;\n }\n\n flicking.off(EVENTS.MOVE_START, this.stop);\n flicking.off(EVENTS.HOLD_START, this.stop);\n flicking.off(EVENTS.MOVE_END, this.play);\n flicking.off(EVENTS.SELECT, this.play);\n\n const targetEl = flicking.element;\n targetEl.removeEventListener(\"mouseenter\", this._onMouseEnter, false);\n targetEl.removeEventListener(\"mouseleave\", this._onMouseLeave, false);\n\n this._flicking = null;\n }\n\n /** Update the plugin state. This is a no-op for AutoPlay. */\n public update(): void {\n // DO-NOTHING\n }\n\n /** Start the autoplay timer. Panels will move automatically after the configured {@link AutoPlayOptions.duration | duration}. */\n public play = () => {\n this._movePanel(this._duration);\n };\n\n /** Stop the autoplay timer and cancel any pending panel movement. */\n public stop = () => {\n this._playing = false;\n clearTimeout(this._timerId);\n };\n\n private _movePanel(duration: number): void {\n const flicking = this._flicking;\n const direction = this._direction;\n\n if (!flicking) {\n return;\n }\n\n this.stop();\n\n if (this._mouseEntered || flicking.animating) {\n return;\n }\n\n this._playing = true;\n this._timerId = window.setTimeout(() => {\n let animationDuration = this._animationDuration || flicking.duration;\n const moveType = flicking.moveType;\n // for freeScroll\n if (moveType === MOVE_TYPE.FREE_SCROLL || moveType?.[0] === MOVE_TYPE.FREE_SCROLL) {\n const range = flicking.camera.range;\n const cameraPosition = flicking.camera.position;\n const currentPanel = flicking.currentPanel;\n const prevPanel = currentPanel.prev();\n const nextPanel = currentPanel.next();\n const currentPosition = currentPanel.position;\n let nextPosition = nextPanel?.position ?? range.max;\n let prevPosition = prevPanel?.position ?? range.min;\n\n // circular: prev (last) > cur (0) => prev(-1) < cur(0)\n if (prevPosition > currentPosition) {\n prevPosition = range.min - (range.max - prevPosition);\n }\n // current (last) > next (0)\n if (nextPosition < currentPosition) {\n nextPosition += range.max;\n }\n if (direction === DIRECTION.NEXT) {\n // prev - cur - camera - next\n const size = nextPosition - currentPosition;\n let restSize = nextPosition - cameraPosition;\n\n if (cameraPosition < currentPosition) {\n // prev - camera - cur - next\n restSize = nextPosition - cameraPosition;\n }\n\n animationDuration *= restSize / size;\n } else {\n // prev - caemra - cur - next\n const size = currentPosition - prevPosition;\n let restSize = cameraPosition - prevPosition;\n\n if (cameraPosition > currentPosition) {\n // prev - cur - camera - next\n restSize = cameraPosition - prevPosition;\n }\n animationDuration *= restSize / size;\n }\n }\n\n if (direction === DIRECTION.NEXT) {\n flicking.next(animationDuration).catch(() => void 0);\n } else {\n flicking.prev(animationDuration).catch(() => void 0);\n }\n\n this.play();\n }, duration);\n }\n\n private _onMouseEnter = () => {\n this._mouseEntered = true;\n this.stop();\n };\n\n private _onMouseLeave = () => {\n this._mouseEntered = false;\n this._movePanel(this._delayAfterHover);\n };\n}\n\nexport default AutoPlay;\n","import Flicking, { EVENTS, Plugin } from \"@egjs/flicking\";\n\n/**\n * A plugin to apply fade in/out effect while panels are moving\n * @see {@link https://naver.github.io/egjs-flicking/docs/demos/plugins/fade | Demo: Fade}\n */\nclass Fade implements Plugin {\n private _flicking: Flicking | null;\n\n /* Options */\n private _selector: string;\n private _scale: number;\n\n /** CSS selector for the element to apply the fade effect. If empty, the panel element itself is used\n * @readonly\n */\n public get selector() {\n return this._selector;\n }\n /** Effect amplification scale\n * @readonly\n */\n public get scale() {\n return this._scale;\n }\n\n /** Sets the CSS selector for the target fade element. */\n public set selector(val: string) {\n this._selector = val;\n }\n /** Sets the effect amplification scale. */\n public set scale(val: number) {\n this._scale = val;\n }\n\n /**\n * @param selector - CSS selector for the element to apply the fade effect. If empty, the panel element itself is used\n * @param scale - Effect amplification scale\n * @example\n * ```ts\n * flicking.addPlugins(new Fade(\"p\", 1));\n * ```\n */\n public constructor(selector = \"\", scale = 1) {\n this._flicking = null;\n this._selector = selector;\n this._scale = scale;\n }\n\n /** Initialize the plugin and apply the fade effect to the Flicking instance.\n * @param flicking - The Flicking instance to attach this plugin to\n */\n public init(flicking: Flicking): void {\n if (this._flicking) {\n this.destroy();\n }\n\n this._flicking = flicking;\n\n flicking.on(EVENTS.MOVE, this._onMove);\n flicking.on(EVENTS.AFTER_RESIZE, this.update);\n this._onMove();\n }\n\n /** Destroy the plugin and remove all event listeners. */\n public destroy(): void {\n if (!this._flicking) return;\n\n this._flicking.off(EVENTS.MOVE, this._onMove);\n this._flicking.off(EVENTS.AFTER_RESIZE, this.update);\n this._flicking = null;\n }\n\n /** Recalculate and apply the fade effect to all visible panels. */\n public update = (): void => {\n this._onMove();\n };\n\n private _onMove = (): void => {\n const flicking = this._flicking;\n const selector = this._selector;\n const scale = this._scale;\n\n if (!flicking) return;\n\n const panels = flicking.visiblePanels;\n\n panels.forEach(panel => {\n const progress = panel.outsetProgress;\n const el = panel.element;\n const target = selector ? (el.querySelector(selector) as HTMLElement) : el;\n\n if (target) {\n const opacity = Math.min(1, Math.max(0, 1 - Math.abs(progress * scale)));\n target.style.opacity = `${opacity}`;\n }\n });\n };\n}\n\nexport default Fade;\n","import Flicking, { EVENTS, Plugin } from \"@egjs/flicking\";\n\n/**\n * A plugin to apply parallax effect while panels are moving\n * @see {@link https://naver.github.io/egjs-flicking/docs/demos/plugins/parallax | Demo: Parallax}\n */\nclass Parallax implements Plugin {\n private _flicking: Flicking | null;\n\n /* Options */\n private _selector: string;\n private _scale: number;\n\n /** CSS selector for the element to apply the parallax effect. If empty, the panel element itself is used\n * @readonly\n */\n public get selector() {\n return this._selector;\n }\n /** Effect amplification scale\n * @readonly\n */\n public get scale() {\n return this._scale;\n }\n\n /** Sets the CSS selector for the target parallax element. */\n public set selector(val: string) {\n this._selector = val;\n }\n /** Sets the effect amplification scale. */\n public set scale(val: number) {\n this._scale = val;\n }\n\n /**\n * @param selector - CSS selector for the element to apply the parallax effect. If empty, the panel element itself is used\n * @param scale - Effect amplification scale\n * @example\n * ```ts\n * flicking.addPlugins(new Parallax(\"img\", 1));\n * ```\n */\n public constructor(selector = \"\", scale = 1) {\n this._flicking = null;\n this._selector = selector;\n this._scale = scale;\n }\n\n /** Initialize the plugin and apply the parallax effect to the Flicking instance.\n * @param flicking - The Flicking instance to attach this plugin to\n */\n public init(flicking: Flicking): void {\n if (this._flicking) {\n this.destroy();\n }\n\n this._flicking = flicking;\n\n flicking.on(EVENTS.MOVE, this._onMove);\n flicking.on(EVENTS.AFTER_RESIZE, this.update);\n this._onMove();\n }\n\n /** Destroy the plugin and remove all event listeners. */\n public destroy(): void {\n if (!this._flicking) return;\n\n this._flicking.off(EVENTS.MOVE, this._onMove);\n this._flicking.off(EVENTS.AFTER_RESIZE, this.update);\n this._flicking = null;\n }\n\n /** Recalculate and apply the parallax effect to all visible panels. */\n public update = (): void => {\n this._onMove();\n };\n\n private _onMove = (): void => {\n const flicking = this._flicking;\n\n if (!flicking) return;\n\n const panels = flicking.visiblePanels;\n\n panels.forEach(panel => {\n const progress = panel.outsetProgress;\n const el = panel.element;\n const target = this._selector ? (el.querySelector(this._selector) as HTMLElement) : el;\n const parentTarget = target.parentNode as Element;\n const rect = target.getBoundingClientRect();\n const parentRect = parentTarget.getBoundingClientRect();\n const position = ((parentRect.width - rect.width) / 2) * progress * this._scale;\n const transform = `translate(-50%) translate(${position}px)`;\n const style = target.style;\n\n style.cssText += `transform: ${transform};-webkit-transform: ${transform};-ms-transform:${transform}`;\n });\n };\n}\nexport default Parallax;\n","/* eslint-disable no-underscore-dangle */\nimport Flicking, { EVENTS, Plugin } from \"@egjs/flicking\";\n\n/**\n * Options for the {@link Perspective} plugin\n */\nexport interface PerspectiveOptions {\n /**\n * CSS selector for the element to apply the perspective effect. If empty, the panel element itself is used\n * @defaultValue \"\"\n */\n selector: string;\n /**\n * Effect amplification scale\n * @defaultValue 1\n */\n scale: number;\n /**\n * Rotation amplification scale\n * @defaultValue 1\n */\n rotate: number;\n /**\n * The value of the CSS `perspective` property (px)\n * @defaultValue 1000\n */\n perspective: number;\n}\n\n/**\n * A plugin to apply 3D perspective effect while panels are moving\n * @see {@link https://naver.github.io/egjs-flicking/docs/demos/plugins/perspective | Demo: Perspective}\n */\nclass Perspective implements Plugin {\n private _flicking: Flicking | null;\n\n /* Options */\n private _selector: PerspectiveOptions[\"selector\"];\n private _scale: PerspectiveOptions[\"scale\"];\n private _rotate: PerspectiveOptions[\"rotate\"];\n private _perspective: PerspectiveOptions[\"perspective\"];\n\n /** Current value of the {@link PerspectiveOptions.selector | selector} option. */\n public get selector() {\n return this._selector;\n }\n /** Current value of the {@link PerspectiveOptions.scale | scale} option. */\n public get scale() {\n return this._scale;\n }\n /** Current value of the {@link PerspectiveOptions.rotate | rotate} option. */\n public get rotate() {\n return this._rotate;\n }\n /** Current value of the {@link PerspectiveOptions.perspective | perspective} option. */\n public get perspective() {\n return this._perspective;\n }\n\n /** Sets {@link PerspectiveOptions.selector | selector}. */\n public set selector(val: string) {\n this._selector = val;\n }\n /** Sets {@link PerspectiveOptions.scale | scale}. */\n public set scale(val: number) {\n this._scale = val;\n }\n /** Sets {@link PerspectiveOptions.rotate | rotate}. */\n public set rotate(val: number) {\n this._rotate = val;\n }\n /** Sets {@link PerspectiveOptions.perspective | perspective}. */\n public set perspective(val: number) {\n this._perspective = val;\n }\n\n /**\n * @param options - Options for the Perspective instance\n * @example\n * ```ts\n * flicking.addPlugins(new Perspective({ selector: \"p\", scale: 1, rotate: 1, perspective: 1000 }));\n * ```\n */\n public constructor(options: Partial<PerspectiveOptions> = {}) {\n const { selector = \"\", scale = 1, rotate = 1, perspective = 1000 } = options;\n\n this._flicking = null;\n this._selector = selector;\n this._scale = scale;\n this._rotate = rotate;\n this._perspective = perspective;\n }\n\n /** Initialize the plugin and apply the perspective effect to the Flicking instance.\n * @param flicking - The Flicking instance to attach this plugin to\n */\n public init(flicking: Flicking): void {\n if (this._flicking) {\n this.destroy();\n }\n\n this._flicking = flicking;\n\n flicking.on(EVENTS.MOVE, this._onMove);\n flicking.on(EVENTS.AFTER_RESIZE, this.update);\n this._onMove();\n }\n\n /** Destroy the plugin and remove all event listeners. */\n public destroy(): void {\n if (!this._flicking) return;\n\n this._flicking.off(EVENTS.MOVE, this._onMove);\n this._flicking.off(EVENTS.AFTER_RESIZE, this.update);\n this._flicking = null;\n }\n\n /** Recalculate and apply the perspective effect to all visible panels. */\n public update = (): void => {\n this._onMove();\n };\n\n private _onMove = (): void => {\n const flicking = this._flicking;\n const selector = this._selector;\n const scale = this._scale;\n const rotate = this._rotate;\n const perspective = this._perspective;\n\n if (!flicking) return;\n\n const horizontal = flicking.horizontal;\n const panels = flicking.visiblePanels;\n\n panels.forEach(panel => {\n const progress = panel.outsetProgress;\n const el = panel.element;\n const target = selector ? (el.querySelector(selector) as HTMLElement) : el;\n const panelScale = 1 / (Math.abs(progress * scale) + 1);\n const rotateDegree =\n progress > 0 ? Math.min(90, progress * 100 * rotate) : Math.max(-90, progress * 100 * rotate);\n const [rotateX, rotateY] = horizontal ? [0, rotateDegree] : [rotateDegree, 0];\n\n target.style.transform = `perspective(${perspective}px) rotateX(${rotateX}deg) rotateY(${rotateY}deg) scale(${panelScale})`;\n });\n };\n}\n\nexport default Perspective;\n","import type { MoveEndEvent, MoveEvent, MoveStartEvent, Plugin, SelectEvent, WillChangeEvent } from \"@egjs/flicking\";\nimport Flicking, { clamp, EVENTS } from \"@egjs/flicking\";\n\nimport { SYNC } from \"./const\";\nimport { addClass, removeClass } from \"./utils\";\n\n/**\n * Options for the {@link Sync} plugin\n */\nexport interface SyncOptions {\n /**\n * Method to synchronize between Flickings. `\"camera\"` syncs by camera position, `\"index\"` syncs by panel index\n * @defaultValue \"camera\"\n */\n type: typeof SYNC.TYPE.CAMERA | typeof SYNC.TYPE.INDEX;\n /**\n * Detailed options for each Flicking instance to synchronize\n * @defaultValue []\n */\n synchronizedFlickingOptions: SychronizableFlickingOptions[];\n}\n\n/**\n * Per-instance synchronization options used in {@link SyncOptions.synchronizedFlickingOptions}\n */\nexport interface SychronizableFlickingOptions {\n /**\n * The Flicking instance to synchronize\n */\n flicking: Flicking;\n /**\n * Whether clicking this Flicking's panel changes the index of all synced Flickings\n * @defaultValue false\n */\n isClickable?: boolean;\n /**\n * Whether mouse/touch scroll on this Flicking changes other Flickings' index. Only available for the `\"index\"` type\n * @defaultValue false\n */\n isSlidable?: boolean;\n /**\n * CSS class added to the active (selected) panel\n * @defaultValue undefined\n */\n activeClass?: string;\n}\n\n/**\n * Plugin for synchronizing multiple Flicking instances\n * @see {@link https://naver.github.io/egjs-flicking/docs/demos/plugins/sync | Demo: Sync}\n */\nclass Sync implements Plugin {\n /* Internal Values */\n private _flicking: Flicking | null = null;\n private _disabledIndex: number[] = [];\n\n /* Options */\n private _type: SyncOptions[\"type\"];\n private _synchronizedFlickingOptions: SyncOptions[\"synchronizedFlickingOptions\"];\n\n /** Current value of the {@link SyncOptions.type | type} option. */\n public get type() {\n return this._type;\n }\n /** Current value of the {@link SyncOptions.synchronizedFlickingOptions | synchronizedFlickingOptions} option. */\n public get synchronizedFlickingOptions() {\n return this._synchronizedFlickingOptions;\n }\n\n /** Sets {@link SyncOptions.type | type}. */\n public set type(val: SyncOptions[\"type\"]) {\n this._type = val;\n }\n\n /** Sets {@link SyncOptions.synchronizedFlickingOptions | synchronizedFlickingOptions}. */\n public set synchronizedFlickingOptions(val: SyncOptions[\"synchronizedFlickingOptions\"]) {\n this._synchronizedFlickingOptions = val;\n }\n\n /**\n * @param options - Options for the Sync instance\n * @example\n * ```ts\n * flicking.addPlugins(new Sync({\n * type: \"camera\",\n * synchronizedFlickingOptions: [\n * { flicking: flicking1 },\n * { flicking: flicking2, isClickable: true }\n * ]\n * }));\n * ```\n */\n public constructor(options: Partial<SyncOptions> = {}) {\n const { type = SYNC.TYPE.CAMERA, synchronizedFlickingOptions = [] } = options;\n\n this._type = type;\n this._synchronizedFlickingOptions = synchronizedFlickingOptions;\n }\n\n /** Initialize the plugin and set up synchronization event listeners between Flicking instances.\n * @param flicking - The Flicking instance to attach this plugin to\n */\n public init(flicking: Flicking): void {\n const synced = this._synchronizedFlickingOptions;\n\n if (this._flicking) {\n this.destroy();\n }\n\n this._flicking = flicking;\n\n this._addEvents();\n\n synced.forEach(options => {\n const { flicking: syncedFlicking } = options;\n\n this._updateClass(options, syncedFlicking.defaultIndex);\n });\n }\n\n /** Destroy the plugin and remove all synchronization event listeners. */\n public destroy(): void {\n const flicking = this._flicking;\n\n if (!flicking) {\n return;\n }\n\n this._removeEvents();\n\n this._flicking = null;\n }\n\n /** Update the active class state for all synchronized Flicking instances. */\n public update(): void {\n this._synchronizedFlickingOptions.forEach(options => {\n this._updateClass(options, options.flicking.index);\n });\n }\n\n private _preventEvent(fn: () => void) {\n this._removeEvents();\n fn();\n this._addEvents();\n }\n\n private _addEvents = (): void => {\n const type = this._type;\n const synced = this._synchronizedFlickingOptions;\n\n synced.forEach(({ flicking, isSlidable, isClickable }) => {\n if (type === SYNC.TYPE.CAMERA) {\n flicking.on(EVENTS.MOVE, this._onMove);\n flicking.on(EVENTS.MOVE_START, this._onMoveStart);\n flicking.on(EVENTS.MOVE_END, this._onMoveEnd);\n }\n if (type === SYNC.TYPE.INDEX && isSlidable) {\n flicking.on(EVENTS.WILL_CHANGE, this._onIndexChange);\n flicking.on(EVENTS.WILL_RESTORE, this._onIndexChange);\n }\n if (isClickable) {\n flicking.on(EVENTS.SELECT, this._onSelect);\n }\n });\n };\n\n private _removeEvents = (): void => {\n const type = this._type;\n const synced = this._synchronizedFlickingOptions;\n\n synced.forEach(({ flicking, isSlidable, isClickable }) => {\n if (type === SYNC.TYPE.CAMERA) {\n flicking.off(EVENTS.MOVE, this._onMove);\n flicking.off(EVENTS.MOVE_START, this._onMoveStart);\n flicking.off(EVENTS.MOVE_END, this._onMoveEnd);\n }\n if (type === SYNC.TYPE.INDEX && isSlidable) {\n flicking.off(EVENTS.WILL_CHANGE, this._onIndexChange);\n flicking.off(EVENTS.WILL_RESTORE, this._onIndexChange);\n }\n if (isClickable) {\n flicking.off(EVENTS.SELECT, this._onSelect);\n }\n });\n };\n\n private _onIndexChange = (e: WillChangeEvent): void => {\n const flicking = e.currentTarget;\n\n if (!flicking.initialized) {\n return;\n }\n\n this._synchronizeByIndex(flicking, e.index);\n };\n\n private _onMove = (e: MoveEvent): void => {\n const camera = e.currentTarget.camera;\n const progress = (camera.position - camera.range.min) / camera.rangeDiff;\n\n this._synchronizedFlickingOptions.forEach(({ flicking }) => {\n if (flicking === e.currentTarget) return;\n\n let targetPosition = 0;\n\n if (camera.position < camera.range.min) {\n targetPosition = camera.position;\n } else if (camera.position > camera.range.max) {\n targetPosition = flicking.camera.range.max + camera.position - camera.range.max;\n } else {\n targetPosition = flicking.camera.range.min + flicking.camera.rangeDiff * progress;\n }\n\n void flicking.camera.lookAt(targetPosition);\n });\n };\n\n private _onMoveStart = (e: MoveStartEvent): void => {\n this._disabledIndex = [];\n this._synchronizedFlickingOptions.forEach(({ flicking }, i) => {\n if (flicking !== e.currentTarget && flicking.control.controller.enabled) {\n this._disabledIndex.push(i);\n flicking.disableInput();\n }\n });\n };\n\n private _onMoveEnd = (e: MoveEndEvent): void => {\n this._disabledIndex.forEach(i => {\n const flicking = this._synchronizedFlickingOptions[i].flicking;\n flicking.enableInput();\n flicking.control.updateInput();\n });\n };\n\n private _onSelect = (e: SelectEvent): void => {\n void e.currentTarget.moveTo(e.index).catch(() => void 0);\n\n this._synchronizeByIndex(e.currentTarget, e.index);\n };\n\n private _synchronizeByIndex = (activeFlicking: Flicking, index: number): void => {\n const synchronizedFlickingOptions = this._synchronizedFlickingOptions;\n\n this._preventEvent(() => {\n synchronizedFlickingOptions.forEach(options => {\n // Active class should be applied same to the Flicking which triggered event\n this._updateClass(options, index);\n\n const { flicking } = options;\n if (flicking === activeFlicking) return;\n\n const targetIndex = clamp(index, 0, flicking.panels.length);\n\n if (flicking.animating) {\n // Reserve moveTo once previous animation is finished\n flicking.once(EVENTS.MOVE_END, () => {\n void flicking.moveTo(targetIndex).catch(() => void 0);\n });\n } else {\n void flicking.moveTo(targetIndex);\n }\n });\n });\n };\n\n private _updateClass = ({ flicking, activeClass }: SychronizableFlickingOptions, index: number): void => {\n if (!activeClass) return;\n\n flicking.panels.forEach(panel => {\n if (panel.index === index) {\n addClass(panel.element, activeClass);\n } else {\n removeClass(panel.element, activeClass);\n }\n });\n };\n}\n\nexport default Sync;\n","import Flicking, { FlickingError } from \"@egjs/flicking\";\n\nimport { BROWSER } from \"../../event\";\nimport Pagination from \"../Pagination\";\n\nexport interface RendererOptions {\n flicking: Flicking;\n pagination: Pagination;\n wrapper: HTMLElement;\n}\n\nabstract class Renderer {\n protected _flicking: Flicking;\n protected _pagination: Pagination;\n protected _wrapper: HTMLElement;\n\n public constructor(options: RendererOptions) {\n const { flicking, pagination, wrapper } = options;\n\n this._flicking = flicking;\n this._pagination = pagination;\n this._wrapper = wrapper;\n }\n\n public abstract destroy(): void;\n public abstract render(): void;\n public abstract update(index: number): void;\n\n protected _createBulletFromString(html: string, index: number) {\n const range = document.createRange();\n const frag = range.createContextualFragment(html);\n const bullet = frag.firstChild as HTMLElement;\n\n this._addBulletEvents(bullet, index);\n\n return bullet;\n }\n\n protected _addBulletEvents(bullet: HTMLElement, index: number) {\n const anchorPoints = this._flicking.camera.anchorPoints;\n const panelIndex = anchorPoints[index].panel.index;\n\n bullet.addEventListener(BROWSER.MOUSE_DOWN, e => {\n e.stopPropagation();\n });\n\n bullet.addEventListener(\n BROWSER.TOUCH_START,\n e => {\n e.stopPropagation();\n },\n { passive: true }\n );\n\n bullet.addEventListener(BROWSER.CLICK, () => {\n this._flicking.moveTo(panelIndex).catch(err => {\n if (err instanceof FlickingError) return;\n throw err;\n });\n });\n }\n}\n\nexport default Renderer;\n","import { PAGINATION } from \"../../const\";\nimport { addClass, removeClass } from \"../../utils\";\n\nimport Renderer from \"./Renderer\";\n\nclass BulletRenderer extends Renderer {\n private _bullets: HTMLElement[] = [];\n private _prevIndex: number = -1;\n\n private get _bulletClass() {\n const pagination = this._pagination;\n return `${pagination.classPrefix}-${PAGINATION.BULLET_SUFFIX}`;\n }\n\n private get _activeClass() {\n const pagination = this._pagination;\n return `${pagination.classPrefix}-${PAGINATION.BULLET_ACTIVE_SUFFIX}`;\n }\n\n public destroy() {\n this._bullets = [];\n this._prevIndex = -1;\n }\n\n public render() {\n const flicking = this._flicking;\n const pagination = this._pagination;\n const wrapper = this._wrapper;\n const bulletClass = this._bulletClass;\n const activeClass = this._activeClass;\n const renderBullet = pagination.renderBullet;\n const renderActiveBullet = pagination.renderActiveBullet;\n const bulletWrapperClass = `${pagination.classPrefix}-${PAGINATION.BULLET_WRAPPER_SUFFIX}`;\n const anchorPoints = flicking.camera.anchorPoints;\n\n addClass(wrapper, bulletWrapperClass);\n\n wrapper.innerHTML = anchorPoints\n .map((anchorPoint, index) => {\n if (renderActiveBullet && anchorPoint.panel.index === flicking.index) {\n return renderActiveBullet(bulletClass, index);\n } else {\n return renderBullet(bulletClass, index);\n }\n })\n .join(\"\\n\");\n\n const bullets = [].slice.call(wrapper.children) as HTMLElement[];\n\n bullets.forEach((bullet, index) => {\n const anchorPoint = anchorPoints[index];\n\n if (anchorPoint.panel.index === flicking.index) {\n addClass(bullet, activeClass);\n this._prevIndex = index;\n }\n\n this._addBulletEvents(bullet, index);\n });\n\n this._bullets = bullets;\n }\n\n public update(index: number) {\n const flicking = this._flicking;\n const pagination = this._pagination;\n const wrapper = this._wrapper;\n const bullets = this._bullets;\n const bulletClass = this._bulletClass;\n const activeClass = this._activeClass;\n const prevIndex = this._prevIndex;\n const anchorPoints = flicking.camera.anchorPoints;\n const renderBullet = pagination.renderBullet;\n const renderActiveBullet = pagination.renderActiveBullet;\n\n if (anchorPoints.length <= 0) return;\n\n const anchorOffset = anchorPoints[0].panel.index;\n const activeBulletIndex = index - anchorOffset;\n\n if (prevIndex === activeBulletIndex) return;\n\n if (renderActiveBullet) {\n const prevBullet = bullets[prevIndex];\n if (prevBullet) {\n const newBullet = this._createBulletFromString(renderBullet(bulletClass, prevIndex), prevIndex);\n prevBullet.parentElement!.replaceChild(newBullet, prevBullet);\n bullets[prevIndex] = newBullet;\n }\n\n const activeBullet = bullets[activeBulletIndex];\n const newActiveBullet = this._createBulletFromString(\n renderActiveBullet(`${bulletClass} ${activeClass}`, activeBulletIndex),\n activeBulletIndex\n );\n\n wrapper.replaceChild(newActiveBullet, activeBullet);\n bullets[activeBulletIndex] = newActiveBullet;\n } else {\n const activeBullet = bullets[activeBulletIndex];\n const prevBullet = bullets[prevIndex];\n\n if (prevBullet) {\n removeClass(prevBullet, activeClass);\n }\n\n addClass(activeBullet, activeClass);\n }\n\n this._prevIndex = activeBulletIndex;\n }\n}\n\nexport default BulletRenderer;\n","import { PAGINATION } from \"../../const\";\nimport { addClass } from \"../../utils\";\n\nimport Renderer from \"./Renderer\";\n\nclass FractionRenderer extends Renderer {\n private _prevIndex: number = -1;\n private _prevTotal: number = -1;\n\n public destroy(): void {\n this._prevIndex = -1;\n this._prevTotal = -1;\n }\n\n public render() {\n const flicking = this._flicking;\n const wrapper = this._wrapper;\n const pagination = this._pagination;\n const fractionWrapperClass = `${pagination.classPrefix}-${PAGINATION.FRACTION_WRAPPER_SUFFIX}`;\n const fractionCurrentClass = `${pagination.classPrefix}-${PAGINATION.FRACTION_CURRENT_SUFFIX}`;\n const fractionTotalClass = `${pagination.classPrefix}-${PAGINATION.FRACTION_TOTAL_SUFFIX}`;\n\n addClass(wrapper, fractionWrapperClass);\n\n wrapper.innerHTML = pagination.renderFraction(fractionCurrentClass, fractionTotalClass);\n\n this.update(flicking.index);\n }\n\n public update(index: number) {\n const flicking = this._flicking;\n const wrapper = this._wrapper;\n const pagination = this._pagination;\n\n const anchorPoints = flicking.camera.anchorPoints;\n const currentIndex = anchorPoints.length > 0 ? index - anchorPoints[0].panel.index + 1 : 0;\n const anchorCount = anchorPoints.length;\n\n if (currentIndex === this._prevIndex && anchorCount === this._prevTotal) return;\n\n const fractionCurrentSelector = `.${pagination.classPrefix}-${PAGINATION.FRACTION_CURRENT_SUFFIX}`;\n const fractionTotalSelector = `.${pagination.classPrefix}-${PAGINATION.FRACTION_TOTAL_SUFFIX}`;\n\n const currentWrapper = wrapper.querySelector(fractionCurrentSelector) as HTMLElement;\n const totalWrapper = wrapper.querySelector(fractionTotalSelector) as HTMLElement;\n\n currentWrapper.innerHTML = pagination.fractionCurrentFormat(currentIndex);\n totalWrapper.innerHTML = pagination.fractionTotalFormat(anchorCount);\n\n this._prevIndex = currentIndex;\n this._prevTotal = anchorCount;\n }\n}\n\nexport default FractionRenderer;\n","import { DIRECTION } from \"@egjs/flicking\";\n\nimport { PAGINATION } from \"../../const\";\nimport { addClass, removeClass } from \"../../utils\";\n\nimport Renderer from \"./Renderer\";\n\nclass ScrollBulletRenderer extends Renderer {\n private _bullets: HTMLElement[] = [];\n private _bulletSize: number = 0;\n private _previousIndex: number = -1;\n private _sliderIndex: number = -1;\n\n public destroy(): void {\n this._bullets = [];\n this._bulletSize = 0;\n this._previousIndex = -1;\n this._sliderIndex = -1;\n }\n\n public render() {\n const wrapper = this._wrapper;\n const flicking = this._flicking;\n const pagination = this._pagination;\n const renderBullet = pagination.renderBullet;\n const anchorPoints = flicking.camera.anchorPoints;\n\n const dynamicWrapperClass = `${pagination.classPrefix}-${PAGINATION.SCROLL_WRAPPER_SUFFIX}`;\n const bulletClass = `${pagination.classPrefix}-${PAGINATION.BULLET_SUFFIX}`;\n const sliderClass = `${pagination.classPrefix}-${PAGINATION.SCROLL_SLIDER_SUFFIX}`;\n const uninitClass = `${pagination.classPrefix}-${PAGINATION.SCROLL_UNINIT_SUFFIX}`;\n\n const sliderEl = document.createElement(\"div\");\n\n addClass(sliderEl, sliderClass);\n addClass(wrapper, uninitClass);\n addClass(wrapper, dynamicWrapperClass);\n wrapper.appendChild(sliderEl);\n\n sliderEl.innerHTML = anchorPoints.map((_, index) => renderBullet(bulletClass, index)).join(\"\\n\");\n\n const bullets = [].slice.call(sliderEl.children) as HTMLElement[];\n\n bullets.forEach((bullet, index) => {\n this._addBulletEvents(bullet, index);\n });\n\n if (bullets.length <= 0) return;\n\n const bulletStyle = getComputedStyle(bullets[0]);\n const bulletSize =\n bullets[0].clientWidth + parseFloat(bulletStyle.marginLeft) + parseFloat(bulletStyle.marginRight);\n\n wrapper.style.width = `${bulletSize * pagination.bulletCount}px`;\n\n this._bullets = bullets;\n this._bulletSize = bulletSize;\n this._previousIndex = -1;\n\n this.update(this._flicking.index);\n\n window.requestAnimationFrame(() => {\n removeClass(wrapper, uninitClass);\n });\n }\n\n public update(index: number) {\n const pagination = this._pagination;\n const flicking = this._flicking;\n const bullets = this._bullets;\n const prevIndex = this._previousIndex;\n\n const renderBullet = pagination.renderBullet;\n const renderActiveBullet = pagination.renderActiveBullet;\n\n const anchorPoints = flicking.camera.anchorPoints;\n const anchorOffset = anchorPoints[0].panel.index;\n const activeIndex = index - anchorOffset;\n\n if (anchorPoints.length <= 0) return;\n\n const bulletClass = `${pagination.classPrefix}-${PAGINATION.BULLET_SUFFIX}`;\n const bulletActiveClass = `${pagination.classPrefix}-${PAGINATION.BULLET_ACTIVE_SUFFIX}`;\n const prevClassPrefix = `${pagination.classPrefix}-${PAGINATION.SCROLL_PREV_SUFFIX}`;\n const nextClassPrefix = `${pagination.classPrefix}-${PAGINATION.SCROLL_NEXT_SUFFIX}`;\n const bulletPrevClass = (offset: number) => `${prevClassPrefix}${offset > 1 ? offset : \"\"}`;\n const bulletNextClass = (offset: number) => `${nextClassPrefix}${offset > 1 ? offset : \"\"}`;\n\n const prevClassRegex = new RegExp(`^${prevClassPrefix}`);\n const nextClassRegex = new RegExp(`^${nextClassPrefix}`);\n\n if (renderActiveBullet) {\n const prevBullet = bullets[prevIndex];\n if (prevBullet) {\n const newBullet = this._createBulletFromString(renderBullet(bulletClass, prevIndex), prevIndex);\n prevBullet.parentElement!.replaceChild(newBullet, prevBullet);\n bullets[prevIndex] = newBullet;\n }\n\n const activeBullet = bullets[activeIndex];\n if (activeBullet) {\n const newActiveBullet = this._createBulletFromString(renderActiveBullet(bulletClass, activeIndex), activeIndex);\n\n activeBullet.parentElement!.replaceChild(newActiveBullet, activeBullet);\n bullets[activeIndex] = newActiveBullet;\n }\n }\n\n bullets.forEach((bullet, idx) => {\n const indexOffset = idx - activeIndex;\n const classList = bullet.className.split(\" \");\n\n for (const className of classList) {\n if (className === bulletActiveClass || prevClassRegex.test(className) || nextClassRegex.test(className)) {\n removeClass(bullet, className);\n }\n }\n\n if (indexOffset === 0) {\n addClass(bullet, bulletActiveClass);\n } else if (indexOffset > 0) {\n addClass(bullet, bulletNextClass(Math.abs(indexOffset)));\n } else {\n addClass(bullet, bulletPrevClass(Math.abs(indexOffset)));\n }\n });\n\n pagination.scrollOnChange(activeIndex, {\n total: bullets.length,\n prevIndex,\n sliderIndex: this._sliderIndex,\n direction: activeIndex > prevIndex ? DIRECTION.NEXT : DIRECTION.PREV,\n bullets: [...bullets],\n moveTo: this.moveTo\n });\n\n this._previousIndex = activeIndex;\n }\n\n public moveTo = (index: number): void => {\n const pagination = this._pagination;\n const sliderEl = this._wrapper.firstElementChild as HTMLElement;\n const bulletSize = this._bulletSize;\n const wrapperSize = bulletSize * pagination.bulletCount;\n\n sliderEl.style.transform = `translate(${wrapperSize / 2 - (index + 0.5) * bulletSize}px)`;\n this._sliderIndex = index;\n };\n}\n\nexport default ScrollBulletRenderer;\n","import Flicking, { EVENTS, Plugin } from \"@egjs/flicking\";\n\nimport { PAGINATION } from \"../const\";\nimport ScrollContext from \"../type\";\nimport BulletRenderer from \"./renderer/BulletRenderer\";\nimport FractionRenderer from \"./renderer/FractionRenderer\";\nimport Renderer from \"./renderer/Renderer\";\nimport ScrollBulletRenderer from \"./renderer/ScrollBulletRenderer\";\n\n/**\n * Options for the {@link Pagination} plugin\n */\nexport interface PaginationOptions {\n /**\n * The parent element to search for the pagination wrapper. If `null`, the Flicking element is used\n * @defaultValue null\n */\n parentEl: HTMLElement | null;\n /**\n * CSS selector for the pagination wrapper element\n * @defaultValue \".flicking-pagination\"\n */\n selector: string;\n /**\n * Pagination display type\n * @defaultValue \"bullet\"\n */\n type: \"bullet\" | \"fraction\" | \"scroll\";\n /**\n * CSS class prefix for pagination elements\n * @defaultValue \"flicking-pagination\"\n */\n classPrefix: string;\n /**\n * Maximum number of bullet indicators displayed at once (only for `\"scroll\"` type)\n * @defaultValue 5\n */\n bulletCount: number;\n /**\n * Custom render function for each bullet element\n */\n renderBullet: (className: string, index: number) => string;\n /**\n * Custom render function for the fraction display\n */\n renderFraction: (currentClass: string, totalClass: string) => string;\n /**\n * Custom render function for the active bullet element. If `null`, the default bullet is used\n * @defaultValue null\n */\n renderActiveBullet: ((className: string, index: number) => string) | null;\n /**\n * Format function for the current index in fraction type\n */\n fractionCurrentFormat: (index: number) => string;\n /**\n * Format function for the total count in fraction type\n */\n fractionTotalFormat: (total: number) => string;\n /**\n * Callback invoked when the scroll pagination index changes\n */\n scrollOnChange: (index: number, ctx: ScrollContext) => any;\n}\n\n/**\n * A plugin to add pagination indicators (bullets, fractions, or scrollable bullets) to Flicking\n * @see {@link https://naver.github.io/egjs-flicking/docs/demos/plugins/pagination | Demo: Pagination}\n */\nclass Pagination implements Plugin {\n /* Internal Values */\n private _flicking: Flicking | null = null;\n private _renderer: Renderer;\n private _wrapper: HTMLElement;\n\n /* Options */\n private _parentEl: PaginationOptions[\"parentEl\"];\n private _selector: PaginationOptions[\"selector\"];\n private _type: PaginationOptions[\"type\"];\n private _classPrefix: PaginationOptions[\"classPrefix\"];\n private _bulletCount: PaginationOptions[\"bulletCount\"];\n private _renderBullet: PaginationOptions[\"renderBullet\"];\n private _renderActiveBullet: PaginationOptions[\"renderActiveBullet\"];\n private _renderFraction: PaginationOptions[\"renderFraction\"];\n private _fractionCurrentFormat: PaginationOptions[\"fractionCurrentFormat\"];\n private _fractionTotalFormat: PaginationOptions[\"fractionTotalFormat\"];\n private _scrollOnChange: PaginationOptions[\"scrollOnChange\"];\n\n /** Current value of the {@link PaginationOptions.parentEl | parentEl} option. */\n public get parentEl() {\n return this._parentEl;\n }\n /** Current value of the {@link PaginationOptions.selector | selector} option. */\n public get selector() {\n return this._selector;\n }\n /** Current value of the {@link PaginationOptions.type | type} option. */\n public get type() {\n return this._type;\n }\n /** Current value of the {@link PaginationOptions.classPrefix | classPrefix} option. */\n public get classPrefix() {\n return this._classPrefix;\n }\n /** Current value of the {@link PaginationOptions.bulletCount | bulletCount} option. */\n public get bulletCount() {\n return this._bulletCount;\n }\n /** Current value of the {@link PaginationOptions.renderBullet | renderBullet} option. */\n public get renderBullet() {\n return this._renderBullet;\n }\n /** Current value of the {@link PaginationOptions.renderActiveBullet | renderActiveBullet} option. */\n public get renderActiveBullet() {\n return this._renderActiveBullet;\n }\n /** Current value of the {@link PaginationOptions.renderFraction | renderFraction} option. */\n public get renderFraction() {\n return this._renderFraction;\n }\n /** Current value of the {@link PaginationOptions.fractionCurrentFormat | fractionCurrentFormat} option. */\n public get fractionCurrentFormat() {\n return this._fractionCurrentFormat;\n }\n /** Current value of the {@link PaginationOptions.fractionTotalFormat | fractionTotalFormat} option. */\n public get fractionTotalFormat() {\n return this._fractionTotalFormat;\n }\n /** Current value of the {@link PaginationOptions.scrollOnChange | scrollOnChange} option. */\n public get scrollOnChange() {\n return this._scrollOnChange;\n }\n\n /** Sets {@link PaginationOptions.parentEl | parentEl}. */\n public set parentEl(val: PaginationOptions[\"parentEl\"]) {\n this._parentEl = val;\n }\n /** Sets {@link PaginationOptions.selector | selector}. */\n public set selector(val: PaginationOptions[\"selector\"]) {\n this._selector = val;\n }\n /** Sets {@link PaginationOptions.type | type}. */\n public set type(val: PaginationOptions[\"type\"]) {\n this._type = val;\n }\n /** Sets {@link PaginationOptions.classPrefix | classPrefix}. */\n public set bulletWrapperclassPrefixClass(val: PaginationOptions[\"classPrefix\"]) {\n this._classPrefix = val;\n }\n /** Sets {@link PaginationOptions.bulletCount | bulletCount}. */\n public set bulletCount(val: PaginationOptions[\"bulletCount\"]) {\n this._bulletCount = val;\n }\n /** Sets {@link PaginationOptions.renderBullet | renderBullet}. */\n public set renderBullet(val: PaginationOptions[\"renderBullet\"]) {\n this._renderBullet = val;\n }\n /** Sets {@link PaginationOptions.renderActiveBullet | renderActiveBullet}. */\n public set renderActiveBullet(val: PaginationOptions[\"renderActiveBullet\"]) {\n this._renderActiveBullet = val;\n }\n /** Sets {@link PaginationOptions.renderFraction | renderFraction}. */\n public set renderFraction(val: PaginationOptions[\"renderFraction\"]) {\n this._renderFraction = val;\n }\n /** Sets {@link PaginationOptions.fractionCurrentFormat | fractionCurrentFormat}. */\n public set fractionCurrentFormat(val: PaginationOptions[\"fractionCurrentFormat\"]) {\n this._fractionCurrentFormat = val;\n }\n /** Sets {@link PaginationOptions.fractionTotalFormat | fractionTotalFormat}. */\n public set fractionTotalFormat(val: PaginationOptions[\"fractionTotalFormat\"]) {\n this._fractionTotalFormat = val;\n }\n /** Sets {@link PaginationOptions.scrollOnChange | scrollOnChange}. */\n public set scrollOnChange(val: PaginationOptions[\"scrollOnChange\"]) {\n this._scrollOnChange = val;\n }\n\n /**\n * @param options - Options for the Pagination instance\n * @example\n * ```ts\n * flicking.addPlugins(new Pagination({ type: \"bullet\", selector: \".flicking-pagination\" }));\n * ```\n */\n public constructor(options: Partial<PaginationOptions> = {}) {\n const {\n parentEl = null,\n selector = PAGINATION.SELECTOR,\n type = PAGINATION.TYPE.BULLET,\n classPrefix = PAGINATION.PREFIX,\n bulletCount = 5,\n renderBullet = (className: string) => `<span class=\"${className}\"></span>`,\n renderActiveBullet = null,\n renderFraction = (currentClass: string, totalClass: string) =>\n `<span class=\"${currentClass}\"></span>/<span class=\"${totalClass}\"></span>`,\n fractionCurrentFormat = (index: number) => index.toString(),\n fractionTotalFormat = (index: number) => index.toString(),\n scrollOnChange = (index: number, ctx: ScrollContext) => ctx.moveTo(index)\n } = options;\n\n this._parentEl = parentEl;\n this._selector = selector;\n this._type = type;\n this._classPrefix = classPrefix;\n this._bulletCount = bulletCount;\n this._renderBullet = renderBullet;\n this._renderActiveBullet = renderActiveBullet;\n this._renderFraction = renderFraction;\n this._fractionCurrentFormat = fractionCurrentFormat;\n this._fractionTotalFormat = fractionTotalFormat;\n this._scrollOnChange = scrollOnChange;\n }\n\n /** Initialize the plugin, create the pagination renderer, and attach event listeners to the Flicking instance.\n * @param flicking - The Flicking instance to attach this plugin to\n */\n public init(flicking: Flicking): void {\n if (this._flicking) {\n this.destroy();\n }\n\n this._flicking = flicking;\n\n const type = this._type;\n const selector = this._selector;\n const parentEl = this._parentEl ? this._parentEl : flicking.element;\n const wrapper = parentEl.querySelector(selector);\n\n if (!wrapper) {\n throw new Error(`[Flicking-Pagination] Couldn't find element with the given selector: ${selector}`);\n }\n\n this._wrapper = wrapper as HTMLElement;\n this._renderer = this._createRenderer(type);\n\n flicking.on(EVENTS.WILL_CHANGE, this._onIndexChange);\n flicking.on(EVENTS.WILL_RESTORE, this._onIndexChange);\n flicking.on(EVENTS.PANEL_CHANGE, this.update);\n\n this.update();\n }\n\n /** Destroy the plugin, remove all event listeners, and clean up pagination DOM elements. */\n public destroy(): void {\n const flicking = this._flicking;\n\n if (!flicking) {\n return;\n }\n\n flicking.off(EVENTS.WILL_CHANGE, this._onIndexChange);\n flicking.off(EVENTS.WILL_RESTORE, this._onIndexChange);\n flicking.off(EVENTS.PANEL_CHANGE, this.update);\n\n this._renderer.destroy();\n this._removeAllChilds();\n this._flicking = null;\n }\n\n /** Re-render the pagination indicators to reflect the current panel state. */\n public update = (): void => {\n this._removeAllChilds();\n this._renderer.render();\n };\n\n private _createRenderer(type: PaginationOptions[\"type\"]) {\n const options = {\n flicking: this._flicking!,\n pagination: this,\n wrapper: this._wrapper\n };\n\n switch (type) {\n case PAGINATION.TYPE.BULLET:\n return new BulletRenderer(options);\n case PAGINATION.TYPE.FRACTION:\n return new FractionRenderer(options);\n case PAGINATION.TYPE.SCROLL:\n return new ScrollBulletRenderer(options);\n default:\n throw new Error(`[Flicking-Pagination] type \"${type}\" is not supported.`);\n }\n }\n\n private _onIndexChange = (evt: { index: number }) => {\n this._renderer.update(evt.index);\n };\n\n private _removeAllChilds() {\n const wrapper = this._wrapper;\n\n while (wrapper.firstChild) {\n wrapper.removeChild(wrapper.firstChild);\n }\n }\n}\n\nexport default Pagination;\n"],"names":["moveCount","selector","scale","rotate","perspective","type","synchronizedFlickingOptions","options"],"mappings":"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"}
1
+ {"version":3,"file":"plugins.esm.js","sources":["../src/const.ts","../src/event.ts","../src/utils.ts","../src/Arrow.ts","../src/AutoPlay.ts","../src/Fade.ts","../src/Parallax.ts","../src/Perspective.ts","../src/Sync.ts","../src/pagination/renderer/Renderer.ts","../src/pagination/renderer/BulletRenderer.ts","../src/pagination/renderer/FractionRenderer.ts","../src/pagination/renderer/ScrollBulletRenderer.ts","../src/pagination/Pagination.ts"],"sourcesContent":["export const ARROW = {\n PREV_SELECTOR: \".flicking-arrow-prev\",\n NEXT_SELECTOR: \".flicking-arrow-next\",\n DISABLED_CLASS: \"flicking-arrow-disabled\"\n} as const;\n\nexport const PAGINATION = {\n SELECTOR: \".flicking-pagination\",\n PREFIX: \"flicking-pagination\",\n BULLET_WRAPPER_SUFFIX: \"bullets\",\n BULLET_SUFFIX: \"bullet\",\n BULLET_ACTIVE_SUFFIX: \"bullet-active\",\n FRACTION_WRAPPER_SUFFIX: \"fraction\",\n FRACTION_CURRENT_SUFFIX: \"fraction-current\",\n FRACTION_TOTAL_SUFFIX: \"fraction-total\",\n SCROLL_UNINIT_SUFFIX: \"uninitialized\",\n SCROLL_WRAPPER_SUFFIX: \"scroll\",\n SCROLL_SLIDER_SUFFIX: \"slider\",\n SCROLL_PREV_SUFFIX: \"bullet-prev\",\n SCROLL_NEXT_SUFFIX: \"bullet-next\",\n TYPE: {\n BULLET: \"bullet\",\n FRACTION: \"fraction\",\n SCROLL: \"scroll\"\n }\n} as const;\n\nexport const SYNC = {\n TYPE: {\n CAMERA: \"camera\",\n INDEX: \"index\"\n }\n} as const;\n","export const BROWSER = {\n CLICK: \"click\",\n MOUSE_DOWN: \"mousedown\",\n TOUCH_START: \"touchstart\"\n};\n","export const addClass = (el: HTMLElement, className: string) => {\n if (!el) return;\n\n if (el.classList) {\n el.classList.add(className);\n } else {\n const classes = el.className.split(\" \");\n\n if (classes.indexOf(className) < 0) {\n el.className = `${el.className} ${className}`;\n }\n }\n};\n\nexport const removeClass = (el: HTMLElement, className: string) => {\n if (!el) return;\n\n if (el.classList) {\n el.classList.remove(className);\n } else {\n const classRegex = new RegExp(`( |^)${className}( |$)`, \"g\");\n el.className.replace(classRegex, \" \");\n }\n};\n\nexport const getElement = (selector: string, parent: HTMLElement, pluginName: string) => {\n const el = parent.querySelector(selector);\n\n if (!el) {\n throw new Error(`[Flicking-${pluginName}] Couldn't find element with the given selector: ${selector}`);\n }\n\n return el as HTMLElement;\n};\n","import Flicking, { EVENTS, FlickingError, Plugin } from \"@egjs/flicking\";\nimport { ARROW } from \"./const\";\nimport { BROWSER } from \"./event\";\nimport { addClass, getElement, removeClass } from \"./utils\";\n\n/**\n * Options for the {@link Arrow} plugin\n */\nexport interface ArrowOptions {\n /**\n * The parent element to search for arrow elements. If `null`, the Flicking element is used\n * @defaultValue null\n */\n parentEl: HTMLElement | null;\n /**\n * CSS selector for the \"previous\" arrow element\n * @defaultValue \".flicking-arrow-prev\"\n */\n prevElSelector: string;\n /**\n * CSS selector for the \"next\" arrow element\n * @defaultValue \".flicking-arrow-next\"\n */\n nextElSelector: string;\n /**\n * CSS class added to an arrow element when it is disabled (at the start/end of non-circular Flicking)\n * @defaultValue \"flicking-arrow-disabled\"\n */\n disabledClass: string;\n /**\n * Number of panels to move when an arrow is clicked\n * @defaultValue 1\n */\n moveCount: number;\n /**\n * Whether to move by viewport size instead of panel count\n * @defaultValue false\n */\n moveByViewportSize: boolean;\n}\n\n/**\n * A plugin to easily create prev/next arrow buttons for Flicking\n * @see {@link https://naver.github.io/egjs-flicking/docs/demos/plugins/arrow | Demo: Arrow}\n */\nclass Arrow implements Plugin {\n /* Internal Values */\n private _flicking: Flicking | null = null;\n private _prevEl: HTMLElement;\n private _nextEl: HTMLElement;\n\n /* Options */\n private _parentEl: ArrowOptions[\"parentEl\"];\n private _prevElSelector: ArrowOptions[\"prevElSelector\"];\n private _nextElSelector: ArrowOptions[\"nextElSelector\"];\n private _disabledClass: ArrowOptions[\"disabledClass\"];\n private _moveCount: ArrowOptions[\"moveCount\"];\n private _moveByViewportSize: ArrowOptions[\"moveByViewportSize\"];\n\n /** The \"previous\" arrow HTMLElement\n * @readonly\n */\n public get prevEl() {\n return this._prevEl;\n }\n /** The \"next\" arrow HTMLElement\n * @readonly\n */\n public get nextEl() {\n return this._nextEl;\n }\n\n /** Current value of the {@link ArrowOptions.parentEl | parentEl} option. */\n public get parentEl() {\n return this._parentEl;\n }\n /** Current value of the {@link ArrowOptions.prevElSelector | prevElSelector} option. */\n public get prevElSelector() {\n return this._prevElSelector;\n }\n /** Current value of the {@link ArrowOptions.nextElSelector | nextElSelector} option. */\n public get nextElSelector() {\n return this._nextElSelector;\n }\n /** Current value of the {@link ArrowOptions.disabledClass | disabledClass} option. */\n public get disabledClass() {\n return this._disabledClass;\n }\n /** Current value of the {@link ArrowOptions.moveCount | moveCount} option. */\n public get moveCount() {\n return this._moveCount;\n }\n /** Current value of the {@link ArrowOptions.moveByViewportSize | moveByViewportSize} option. */\n public get moveByViewportSize() {\n return this._moveByViewportSize;\n }\n\n /** Sets {@link ArrowOptions.parentEl | parentEl}. */\n public set parentEl(val: ArrowOptions[\"parentEl\"]) {\n this._parentEl = val;\n }\n /** Sets {@link ArrowOptions.prevElSelector | prevElSelector}. */\n public set prevElSelector(val: ArrowOptions[\"prevElSelector\"]) {\n this._prevElSelector = val;\n }\n /** Sets {@link ArrowOptions.nextElSelector | nextElSelector}. */\n public set nextElSelector(val: ArrowOptions[\"nextElSelector\"]) {\n this._nextElSelector = val;\n }\n /** Sets {@link ArrowOptions.disabledClass | disabledClass}. */\n public set disabledClass(val: ArrowOptions[\"disabledClass\"]) {\n this._disabledClass = val;\n }\n /** Sets {@link ArrowOptions.moveCount | moveCount}. */\n public set moveCount(val: ArrowOptions[\"moveCount\"]) {\n this._moveCount = val;\n }\n /** Sets {@link ArrowOptions.moveByViewportSize | moveByViewportSize}. */\n public set moveByViewportSize(val: ArrowOptions[\"moveByViewportSize\"]) {\n this._moveByViewportSize = val;\n }\n\n /**\n * @param options - Options for the Arrow instance\n * @example\n * ```ts\n * flicking.addPlugins(new Arrow({ parentEl: null, prevElSelector: \".flicking-arrow-prev\", nextElSelector: \".flicking-arrow-next\" }));\n * ```\n */\n public constructor(options: Partial<ArrowOptions> = {}) {\n const {\n parentEl = null,\n prevElSelector = ARROW.PREV_SELECTOR,\n nextElSelector = ARROW.NEXT_SELECTOR,\n disabledClass = ARROW.DISABLED_CLASS,\n moveCount = 1,\n moveByViewportSize = false\n } = options;\n\n this._parentEl = parentEl;\n this._prevElSelector = prevElSelector;\n this._nextElSelector = nextElSelector;\n this._disabledClass = disabledClass;\n this._moveCount = moveCount;\n this._moveByViewportSize = moveByViewportSize;\n }\n\n /** Initialize the plugin and attach arrow event listeners to the Flicking instance.\n * @param flicking - The Flicking instance to attach this plugin to\n */\n public init(flicking: Flicking): void {\n if (this._flicking) {\n this.destroy();\n }\n\n this._flicking = flicking;\n\n flicking.on(EVENTS.MOVE, this._onAnimation);\n\n const parentEl = this._parentEl ? this._parentEl : flicking.element;\n const prevEl = getElement(this._prevElSelector, parentEl, \"Arrow\");\n const nextEl = getElement(this._nextElSelector, parentEl, \"Arrow\");\n\n [BROWSER.MOUSE_DOWN, BROWSER.TOUCH_START].forEach(evt => {\n prevEl.addEventListener(evt, this._preventInputPropagation, { passive: true });\n nextEl.addEventListener(evt, this._preventInputPropagation, { passive: true });\n });\n\n prevEl.addEventListener(BROWSER.CLICK, this._onPrevClick);\n nextEl.addEventListener(BROWSER.CLICK, this._onNextClick);\n\n this._prevEl = prevEl;\n this._nextEl = nextEl;\n\n this.update();\n }\n\n /** Destroy the plugin and remove all arrow event listeners. */\n public destroy(): void {\n const flicking = this._flicking;\n\n if (!flicking) {\n return;\n }\n\n flicking.off(EVENTS.MOVE, this._onAnimation);\n\n const prevEl = this._prevEl;\n const nextEl = this._nextEl;\n\n [BROWSER.MOUSE_DOWN, BROWSER.TOUCH_START].forEach(evt => {\n prevEl.removeEventListener(evt, this._preventInputPropagation);\n nextEl.removeEventListener(evt, this._preventInputPropagation);\n });\n\n prevEl.removeEventListener(BROWSER.CLICK, this._onPrevClick);\n nextEl.removeEventListener(BROWSER.CLICK, this._onNextClick);\n this._flicking = null;\n }\n\n /** Update the arrow disabled/enabled state based on the current camera position. */\n public update(): void {\n this._updateClass(this._flicking!.camera.position);\n }\n\n private _preventInputPropagation = (e: Event) => {\n e.stopPropagation();\n };\n\n private _onPrevClick = () => {\n const flicking = this._flicking!;\n const camera = flicking.camera;\n const anchorPoints = camera.anchorPoints;\n\n if (flicking.animating || anchorPoints.length <= 0) return;\n\n const firstAnchor = anchorPoints[0];\n const moveCount = this._moveCount;\n\n if (this._moveByViewportSize) {\n flicking.control.moveToPosition(camera.position - camera.size, flicking.duration).catch(this._onCatch);\n } else {\n if (flicking.circularEnabled) {\n let targetPanel = flicking.currentPanel;\n\n for (let i = 0; i < moveCount; i++) {\n targetPanel = targetPanel.prev()!;\n }\n\n targetPanel.focus().catch(this._onCatch);\n } else if (flicking.index > firstAnchor.panel.index) {\n flicking.moveTo(Math.max(flicking.index - moveCount, firstAnchor.panel.index)).catch(this._onCatch);\n } else if (camera.position > camera.range.min) {\n flicking.moveTo(flicking.index).catch(this._onCatch);\n }\n }\n };\n\n private _onNextClick = () => {\n const flicking = this._flicking!;\n\n const camera = flicking.camera;\n const anchorPoints = camera.anchorPoints;\n\n if (flicking.animating || anchorPoints.length <= 0) return;\n\n const lastAnchor = anchorPoints[anchorPoints.length - 1];\n const moveCount = this._moveCount;\n\n if (this._moveByViewportSize) {\n flicking.control.moveToPosition(camera.position + camera.size, flicking.duration).catch(this._onCatch);\n } else {\n if (flicking.circularEnabled) {\n let targetPanel = flicking.currentPanel;\n\n for (let i = 0; i < moveCount; i++) {\n targetPanel = targetPanel.next()!;\n }\n\n targetPanel.focus().catch(this._onCatch);\n } else if (flicking.index < lastAnchor.panel.index) {\n flicking.moveTo(Math.min(flicking.index + moveCount, lastAnchor.panel.index)).catch(this._onCatch);\n } else if (camera.position > camera.range.min) {\n flicking.moveTo(flicking.index).catch(this._onCatch);\n }\n }\n };\n\n private _onAnimation = () => {\n const flicking = this._flicking!;\n const camera = flicking.camera;\n const controller = flicking.control.controller;\n\n if (flicking.holding) {\n this._updateClass(camera.position);\n } else {\n this._updateClass(controller.animatingContext.end);\n }\n };\n\n private _updateClass(pos: number) {\n const flicking = this._flicking!;\n const disabledClass = this._disabledClass;\n const prevEl = this._prevEl;\n const nextEl = this._nextEl;\n const cameraRange = flicking.camera.range;\n\n const stopAtPrevEdge = flicking.circularEnabled ? false : pos <= cameraRange.min;\n const stopAtNextEdge = flicking.circularEnabled ? false : pos >= cameraRange.max;\n\n if (stopAtPrevEdge) {\n addClass(prevEl, disabledClass);\n } else {\n removeClass(prevEl, disabledClass);\n }\n\n if (stopAtNextEdge) {\n addClass(nextEl, disabledClass);\n } else {\n removeClass(nextEl, disabledClass);\n }\n }\n\n private _onCatch = (err: Error) => {\n if (err instanceof FlickingError) return;\n throw err;\n };\n}\n\nexport default Arrow;\n","import Flicking, { DIRECTION, EVENTS, MOVE_TYPE, Plugin } from \"@egjs/flicking\";\n\n/**\n * Options for the {@link AutoPlay} plugin\n */\nexport interface AutoPlayOptions {\n /**\n * Time to wait before moving on to the next panel (ms)\n * @defaultValue 2000\n */\n duration: number;\n /**\n * Duration of the panel move animation (ms). If `undefined`, the Flicking instance's `duration` is used\n * @defaultValue undefined\n */\n animationDuration: number | undefined;\n /**\n * The direction in which the panel moves\n * @defaultValue \"NEXT\"\n */\n direction: (typeof DIRECTION)[\"NEXT\"] | (typeof DIRECTION)[\"PREV\"];\n /**\n * Whether to stop when the mouse hovers over the element\n * @defaultValue false\n */\n stopOnHover: boolean;\n /**\n * Whether to stop autoplay when the plugin is first initialized\n * @defaultValue false\n */\n stopOnInit: boolean;\n /**\n * If `stopOnHover` is true, time to wait before resuming after mouse leaves (ms)\n * @defaultValue Same as `duration`\n */\n delayAfterHover: number;\n}\n\n/**\n * Plugin that allows you to automatically move to the next/previous panel on a specific time basis\n * @see {@link https://naver.github.io/egjs-flicking/docs/demos/plugins/autoplay | Demo: AutoPlay}\n */\nclass AutoPlay implements Plugin {\n /* Options */\n private _duration: AutoPlayOptions[\"duration\"];\n private _animationDuration: AutoPlayOptions[\"animationDuration\"];\n private _direction: AutoPlayOptions[\"direction\"];\n private _stopOnHover: AutoPlayOptions[\"stopOnHover\"];\n private _stopOnInit: AutoPlayOptions[\"stopOnInit\"];\n private _delayAfterHover: AutoPlayOptions[\"delayAfterHover\"];\n\n /* Internal Values */\n private _flicking: Flicking | null = null;\n private _timerId = 0;\n private _mouseEntered = false;\n private _playing = false;\n\n /** Current value of the {@link AutoPlayOptions.duration | duration} option. */\n public get duration() {\n return this._duration;\n }\n /** Current value of the {@link AutoPlayOptions.animationDuration | animationDuration} option. */\n public get animationDuration() {\n return this._animationDuration;\n }\n /** Current value of the {@link AutoPlayOptions.direction | direction} option. */\n public get direction() {\n return this._direction;\n }\n /** Current value of the {@link AutoPlayOptions.stopOnHover | stopOnHover} option. */\n public get stopOnHover() {\n return this._stopOnHover;\n }\n /** Current value of the {@link AutoPlayOptions.stopOnInit | stopOnInit} option. */\n public get stopOnInit() {\n return this._stopOnInit;\n }\n /** Current value of the {@link AutoPlayOptions.delayAfterHover | delayAfterHover} option. */\n public get delayAfterHover() {\n return this._delayAfterHover;\n }\n /** Whether the autoplay is currently active\n * @readonly\n */\n public get playing() {\n return this._playing;\n }\n\n /** Sets {@link AutoPlayOptions.duration | duration}. */\n public set duration(val: number) {\n this._duration = val;\n }\n /** Sets {@link AutoPlayOptions.animationDuration | animationDuration}. */\n public set animationDuration(val: number | undefined) {\n this._animationDuration = val;\n }\n /** Sets {@link AutoPlayOptions.direction | direction}. */\n public set direction(val: AutoPlayOptions[\"direction\"]) {\n this._direction = val;\n }\n /** Sets {@link AutoPlayOptions.stopOnHover | stopOnHover}. */\n public set stopOnHover(val: boolean) {\n this._stopOnHover = val;\n }\n /** Sets {@link AutoPlayOptions.stopOnInit | stopOnInit}. */\n public set stopOnInit(val: boolean) {\n this._stopOnInit = val;\n }\n /** Sets {@link AutoPlayOptions.delayAfterHover | delayAfterHover}. */\n public set delayAfterHover(val: number) {\n this._delayAfterHover = val;\n }\n\n /**\n * @param options - Options for the AutoPlay instance\n * @example\n * ```ts\n * flicking.addPlugins(new AutoPlay({ duration: 2000, direction: \"NEXT\" }));\n * ```\n */\n public constructor(options: Partial<AutoPlayOptions> = {}) {\n const {\n duration = 2000,\n animationDuration = undefined,\n direction = DIRECTION.NEXT,\n stopOnHover = false,\n stopOnInit = false,\n delayAfterHover\n } = options;\n\n this._duration = duration;\n this._animationDuration = animationDuration;\n this._direction = direction;\n this._stopOnHover = stopOnHover;\n this._stopOnInit = stopOnInit;\n this._delayAfterHover = delayAfterHover ?? duration;\n }\n\n /** Initialize the plugin and start autoplay on the given Flicking instance.\n * @param flicking - The Flicking instance to attach this plugin to\n */\n public init(flicking: Flicking): void {\n if (this._flicking) {\n this.destroy();\n }\n\n flicking.on({\n [EVENTS.MOVE_START]: this.stop,\n [EVENTS.HOLD_START]: this.stop,\n [EVENTS.MOVE_END]: this.play,\n [EVENTS.SELECT]: this.play\n });\n\n this._flicking = flicking;\n if (this._stopOnHover) {\n const targetEl = this._flicking.element;\n targetEl.addEventListener(\"mouseenter\", this._onMouseEnter, false);\n targetEl.addEventListener(\"mouseleave\", this._onMouseLeave, false);\n }\n\n if (!this._stopOnInit) {\n this.play();\n }\n }\n\n /** Destroy the plugin, stop autoplay, and remove all event listeners. */\n public destroy(): void {\n const flicking = this._flicking;\n\n this._mouseEntered = false;\n this.stop();\n\n if (!flicking) {\n return;\n }\n\n flicking.off(EVENTS.MOVE_START, this.stop);\n flicking.off(EVENTS.HOLD_START, this.stop);\n flicking.off(EVENTS.MOVE_END, this.play);\n flicking.off(EVENTS.SELECT, this.play);\n\n const targetEl = flicking.element;\n targetEl.removeEventListener(\"mouseenter\", this._onMouseEnter, false);\n targetEl.removeEventListener(\"mouseleave\", this._onMouseLeave, false);\n\n this._flicking = null;\n }\n\n /** Update the plugin state. This is a no-op for AutoPlay. */\n public update(): void {\n // DO-NOTHING\n }\n\n /** Start the autoplay timer. Panels will move automatically after the configured {@link AutoPlayOptions.duration | duration}. */\n public play = () => {\n this._movePanel(this._duration);\n };\n\n /** Stop the autoplay timer and cancel any pending panel movement. */\n public stop = () => {\n this._playing = false;\n clearTimeout(this._timerId);\n };\n\n private _movePanel(duration: number): void {\n const flicking = this._flicking;\n const direction = this._direction;\n\n if (!flicking) {\n return;\n }\n\n this.stop();\n\n if (this._mouseEntered || flicking.animating) {\n return;\n }\n\n this._playing = true;\n this._timerId = window.setTimeout(() => {\n let animationDuration = this._animationDuration || flicking.duration;\n const moveType = flicking.moveType;\n // for freeScroll\n if (moveType === MOVE_TYPE.FREE_SCROLL || moveType?.[0] === MOVE_TYPE.FREE_SCROLL) {\n const range = flicking.camera.range;\n const cameraPosition = flicking.camera.position;\n const currentPanel = flicking.currentPanel;\n const prevPanel = currentPanel.prev();\n const nextPanel = currentPanel.next();\n const currentPosition = currentPanel.position;\n let nextPosition = nextPanel?.position ?? range.max;\n let prevPosition = prevPanel?.position ?? range.min;\n\n // circular: prev (last) > cur (0) => prev(-1) < cur(0)\n if (prevPosition > currentPosition) {\n prevPosition = range.min - (range.max - prevPosition);\n }\n // current (last) > next (0)\n if (nextPosition < currentPosition) {\n nextPosition += range.max;\n }\n if (direction === DIRECTION.NEXT) {\n // prev - cur - camera - next\n const size = nextPosition - currentPosition;\n let restSize = nextPosition - cameraPosition;\n\n if (cameraPosition < currentPosition) {\n // prev - camera - cur - next\n restSize = nextPosition - cameraPosition;\n }\n\n animationDuration *= restSize / size;\n } else {\n // prev - caemra - cur - next\n const size = currentPosition - prevPosition;\n let restSize = cameraPosition - prevPosition;\n\n if (cameraPosition > currentPosition) {\n // prev - cur - camera - next\n restSize = cameraPosition - prevPosition;\n }\n animationDuration *= restSize / size;\n }\n }\n\n if (direction === DIRECTION.NEXT) {\n flicking.next(animationDuration).catch(() => void 0);\n } else {\n flicking.prev(animationDuration).catch(() => void 0);\n }\n\n this.play();\n }, duration);\n }\n\n private _onMouseEnter = () => {\n this._mouseEntered = true;\n this.stop();\n };\n\n private _onMouseLeave = () => {\n this._mouseEntered = false;\n this._movePanel(this._delayAfterHover);\n };\n}\n\nexport default AutoPlay;\n","import Flicking, { EVENTS, Plugin } from \"@egjs/flicking\";\n\n/**\n * A plugin to apply fade in/out effect while panels are moving\n * @see {@link https://naver.github.io/egjs-flicking/docs/demos/plugins/fade | Demo: Fade}\n */\nclass Fade implements Plugin {\n private _flicking: Flicking | null;\n\n /* Options */\n private _selector: string;\n private _scale: number;\n\n /** CSS selector for the element to apply the fade effect. If empty, the panel element itself is used\n * @readonly\n */\n public get selector() {\n return this._selector;\n }\n /** Effect amplification scale\n * @readonly\n */\n public get scale() {\n return this._scale;\n }\n\n /** Sets the CSS selector for the target fade element. */\n public set selector(val: string) {\n this._selector = val;\n }\n /** Sets the effect amplification scale. */\n public set scale(val: number) {\n this._scale = val;\n }\n\n /**\n * @param selector - CSS selector for the element to apply the fade effect. If empty, the panel element itself is used\n * @param scale - Effect amplification scale\n * @example\n * ```ts\n * flicking.addPlugins(new Fade(\"p\", 1));\n * ```\n */\n public constructor(selector = \"\", scale = 1) {\n this._flicking = null;\n this._selector = selector;\n this._scale = scale;\n }\n\n /** Initialize the plugin and apply the fade effect to the Flicking instance.\n * @param flicking - The Flicking instance to attach this plugin to\n */\n public init(flicking: Flicking): void {\n if (this._flicking) {\n this.destroy();\n }\n\n this._flicking = flicking;\n\n flicking.on(EVENTS.MOVE, this._onMove);\n flicking.on(EVENTS.AFTER_RESIZE, this.update);\n this._onMove();\n }\n\n /** Destroy the plugin and remove all event listeners. */\n public destroy(): void {\n if (!this._flicking) return;\n\n this._flicking.off(EVENTS.MOVE, this._onMove);\n this._flicking.off(EVENTS.AFTER_RESIZE, this.update);\n this._flicking = null;\n }\n\n /** Recalculate and apply the fade effect to all visible panels. */\n public update = (): void => {\n this._onMove();\n };\n\n private _onMove = (): void => {\n const flicking = this._flicking;\n const selector = this._selector;\n const scale = this._scale;\n\n if (!flicking) return;\n\n const panels = flicking.visiblePanels;\n\n panels.forEach(panel => {\n const progress = panel.outsetProgress;\n const el = panel.element;\n const target = selector ? (el.querySelector(selector) as HTMLElement) : el;\n\n if (target) {\n const opacity = Math.min(1, Math.max(0, 1 - Math.abs(progress * scale)));\n target.style.opacity = `${opacity}`;\n }\n });\n };\n}\n\nexport default Fade;\n","import Flicking, { EVENTS, Plugin } from \"@egjs/flicking\";\n\n/**\n * A plugin to apply parallax effect while panels are moving\n * @see {@link https://naver.github.io/egjs-flicking/docs/demos/plugins/parallax | Demo: Parallax}\n */\nclass Parallax implements Plugin {\n private _flicking: Flicking | null;\n\n /* Options */\n private _selector: string;\n private _scale: number;\n\n /** CSS selector for the element to apply the parallax effect. If empty, the panel element itself is used\n * @readonly\n */\n public get selector() {\n return this._selector;\n }\n /** Effect amplification scale\n * @readonly\n */\n public get scale() {\n return this._scale;\n }\n\n /** Sets the CSS selector for the target parallax element. */\n public set selector(val: string) {\n this._selector = val;\n }\n /** Sets the effect amplification scale. */\n public set scale(val: number) {\n this._scale = val;\n }\n\n /**\n * @param selector - CSS selector for the element to apply the parallax effect. If empty, the panel element itself is used\n * @param scale - Effect amplification scale\n * @example\n * ```ts\n * flicking.addPlugins(new Parallax(\"img\", 1));\n * ```\n */\n public constructor(selector = \"\", scale = 1) {\n this._flicking = null;\n this._selector = selector;\n this._scale = scale;\n }\n\n /** Initialize the plugin and apply the parallax effect to the Flicking instance.\n * @param flicking - The Flicking instance to attach this plugin to\n */\n public init(flicking: Flicking): void {\n if (this._flicking) {\n this.destroy();\n }\n\n this._flicking = flicking;\n\n flicking.on(EVENTS.MOVE, this._onMove);\n flicking.on(EVENTS.AFTER_RESIZE, this.update);\n this._onMove();\n }\n\n /** Destroy the plugin and remove all event listeners. */\n public destroy(): void {\n if (!this._flicking) return;\n\n this._flicking.off(EVENTS.MOVE, this._onMove);\n this._flicking.off(EVENTS.AFTER_RESIZE, this.update);\n this._flicking = null;\n }\n\n /** Recalculate and apply the parallax effect to all visible panels. */\n public update = (): void => {\n this._onMove();\n };\n\n private _onMove = (): void => {\n const flicking = this._flicking;\n\n if (!flicking) return;\n\n const panels = flicking.visiblePanels;\n\n panels.forEach(panel => {\n const progress = panel.outsetProgress;\n const el = panel.element;\n const target = this._selector ? (el.querySelector(this._selector) as HTMLElement) : el;\n const parentTarget = target.parentNode as Element;\n const rect = target.getBoundingClientRect();\n const parentRect = parentTarget.getBoundingClientRect();\n const position = ((parentRect.width - rect.width) / 2) * progress * this._scale;\n const transform = `translate(-50%) translate(${position}px)`;\n const style = target.style;\n\n style.cssText += `transform: ${transform};-webkit-transform: ${transform};-ms-transform:${transform}`;\n });\n };\n}\nexport default Parallax;\n","/* eslint-disable no-underscore-dangle */\nimport Flicking, { EVENTS, Plugin } from \"@egjs/flicking\";\n\n/**\n * Options for the {@link Perspective} plugin\n */\nexport interface PerspectiveOptions {\n /**\n * CSS selector for the element to apply the perspective effect. If empty, the panel element itself is used\n * @defaultValue \"\"\n */\n selector: string;\n /**\n * Effect amplification scale\n * @defaultValue 1\n */\n scale: number;\n /**\n * Rotation amplification scale\n * @defaultValue 1\n */\n rotate: number;\n /**\n * The value of the CSS `perspective` property (px)\n * @defaultValue 1000\n */\n perspective: number;\n}\n\n/**\n * A plugin to apply 3D perspective effect while panels are moving\n * @see {@link https://naver.github.io/egjs-flicking/docs/demos/plugins/perspective | Demo: Perspective}\n */\nclass Perspective implements Plugin {\n private _flicking: Flicking | null;\n\n /* Options */\n private _selector: PerspectiveOptions[\"selector\"];\n private _scale: PerspectiveOptions[\"scale\"];\n private _rotate: PerspectiveOptions[\"rotate\"];\n private _perspective: PerspectiveOptions[\"perspective\"];\n\n /** Current value of the {@link PerspectiveOptions.selector | selector} option. */\n public get selector() {\n return this._selector;\n }\n /** Current value of the {@link PerspectiveOptions.scale | scale} option. */\n public get scale() {\n return this._scale;\n }\n /** Current value of the {@link PerspectiveOptions.rotate | rotate} option. */\n public get rotate() {\n return this._rotate;\n }\n /** Current value of the {@link PerspectiveOptions.perspective | perspective} option. */\n public get perspective() {\n return this._perspective;\n }\n\n /** Sets {@link PerspectiveOptions.selector | selector}. */\n public set selector(val: string) {\n this._selector = val;\n }\n /** Sets {@link PerspectiveOptions.scale | scale}. */\n public set scale(val: number) {\n this._scale = val;\n }\n /** Sets {@link PerspectiveOptions.rotate | rotate}. */\n public set rotate(val: number) {\n this._rotate = val;\n }\n /** Sets {@link PerspectiveOptions.perspective | perspective}. */\n public set perspective(val: number) {\n this._perspective = val;\n }\n\n /**\n * @param options - Options for the Perspective instance\n * @example\n * ```ts\n * flicking.addPlugins(new Perspective({ selector: \"p\", scale: 1, rotate: 1, perspective: 1000 }));\n * ```\n */\n public constructor(options: Partial<PerspectiveOptions> = {}) {\n const { selector = \"\", scale = 1, rotate = 1, perspective = 1000 } = options;\n\n this._flicking = null;\n this._selector = selector;\n this._scale = scale;\n this._rotate = rotate;\n this._perspective = perspective;\n }\n\n /** Initialize the plugin and apply the perspective effect to the Flicking instance.\n * @param flicking - The Flicking instance to attach this plugin to\n */\n public init(flicking: Flicking): void {\n if (this._flicking) {\n this.destroy();\n }\n\n this._flicking = flicking;\n\n flicking.on(EVENTS.MOVE, this._onMove);\n flicking.on(EVENTS.AFTER_RESIZE, this.update);\n this._onMove();\n }\n\n /** Destroy the plugin and remove all event listeners. */\n public destroy(): void {\n if (!this._flicking) return;\n\n this._flicking.off(EVENTS.MOVE, this._onMove);\n this._flicking.off(EVENTS.AFTER_RESIZE, this.update);\n this._flicking = null;\n }\n\n /** Recalculate and apply the perspective effect to all visible panels. */\n public update = (): void => {\n this._onMove();\n };\n\n private _onMove = (): void => {\n const flicking = this._flicking;\n const selector = this._selector;\n const scale = this._scale;\n const rotate = this._rotate;\n const perspective = this._perspective;\n\n if (!flicking) return;\n\n const horizontal = flicking.horizontal;\n const panels = flicking.visiblePanels;\n\n panels.forEach(panel => {\n const progress = panel.outsetProgress;\n const el = panel.element;\n const target = selector ? (el.querySelector(selector) as HTMLElement) : el;\n const panelScale = 1 / (Math.abs(progress * scale) + 1);\n const rotateDegree =\n progress > 0 ? Math.min(90, progress * 100 * rotate) : Math.max(-90, progress * 100 * rotate);\n const [rotateX, rotateY] = horizontal ? [0, rotateDegree] : [rotateDegree, 0];\n\n target.style.transform = `perspective(${perspective}px) rotateX(${rotateX}deg) rotateY(${rotateY}deg) scale(${panelScale})`;\n });\n };\n}\n\nexport default Perspective;\n","import type { MoveEndEvent, MoveEvent, MoveStartEvent, Plugin, SelectEvent, WillChangeEvent } from \"@egjs/flicking\";\nimport Flicking, { clamp, EVENTS } from \"@egjs/flicking\";\n\nimport { SYNC } from \"./const\";\nimport { addClass, removeClass } from \"./utils\";\n\n/**\n * Options for the {@link Sync} plugin\n */\nexport interface SyncOptions {\n /**\n * Method to synchronize between Flickings. `\"camera\"` syncs by camera position, `\"index\"` syncs by panel index\n * @defaultValue \"camera\"\n */\n type: typeof SYNC.TYPE.CAMERA | typeof SYNC.TYPE.INDEX;\n /**\n * Detailed options for each Flicking instance to synchronize\n * @defaultValue []\n */\n synchronizedFlickingOptions: SychronizableFlickingOptions[];\n}\n\n/**\n * Per-instance synchronization options used in {@link SyncOptions.synchronizedFlickingOptions}\n */\nexport interface SychronizableFlickingOptions {\n /**\n * The Flicking instance to synchronize\n */\n flicking: Flicking;\n /**\n * Whether clicking this Flicking's panel changes the index of all synced Flickings\n * @defaultValue false\n */\n isClickable?: boolean;\n /**\n * Whether mouse/touch scroll on this Flicking changes other Flickings' index. Only available for the `\"index\"` type\n * @defaultValue false\n */\n isSlidable?: boolean;\n /**\n * CSS class added to the active (selected) panel\n * @defaultValue undefined\n */\n activeClass?: string;\n}\n\n/**\n * Plugin for synchronizing multiple Flicking instances\n * @see {@link https://naver.github.io/egjs-flicking/docs/demos/plugins/sync | Demo: Sync}\n */\nclass Sync implements Plugin {\n /* Internal Values */\n private _flicking: Flicking | null = null;\n private _disabledIndex: number[] = [];\n\n /* Options */\n private _type: SyncOptions[\"type\"];\n private _synchronizedFlickingOptions: SyncOptions[\"synchronizedFlickingOptions\"];\n\n /** Current value of the {@link SyncOptions.type | type} option. */\n public get type() {\n return this._type;\n }\n /** Current value of the {@link SyncOptions.synchronizedFlickingOptions | synchronizedFlickingOptions} option. */\n public get synchronizedFlickingOptions() {\n return this._synchronizedFlickingOptions;\n }\n\n /** Sets {@link SyncOptions.type | type}. */\n public set type(val: SyncOptions[\"type\"]) {\n this._type = val;\n }\n\n /** Sets {@link SyncOptions.synchronizedFlickingOptions | synchronizedFlickingOptions}. */\n public set synchronizedFlickingOptions(val: SyncOptions[\"synchronizedFlickingOptions\"]) {\n this._synchronizedFlickingOptions = val;\n }\n\n /**\n * @param options - Options for the Sync instance\n * @example\n * ```ts\n * flicking.addPlugins(new Sync({\n * type: \"camera\",\n * synchronizedFlickingOptions: [\n * { flicking: flicking1 },\n * { flicking: flicking2, isClickable: true }\n * ]\n * }));\n * ```\n */\n public constructor(options: Partial<SyncOptions> = {}) {\n const { type = SYNC.TYPE.CAMERA, synchronizedFlickingOptions = [] } = options;\n\n this._type = type;\n this._synchronizedFlickingOptions = synchronizedFlickingOptions;\n }\n\n /** Initialize the plugin and set up synchronization event listeners between Flicking instances.\n * @param flicking - The Flicking instance to attach this plugin to\n */\n public init(flicking: Flicking): void {\n const synced = this._synchronizedFlickingOptions;\n\n if (this._flicking) {\n this.destroy();\n }\n\n this._flicking = flicking;\n\n this._addEvents();\n\n synced.forEach(options => {\n const { flicking: syncedFlicking } = options;\n\n this._updateClass(options, syncedFlicking.defaultIndex);\n });\n }\n\n /** Destroy the plugin and remove all synchronization event listeners. */\n public destroy(): void {\n const flicking = this._flicking;\n\n if (!flicking) {\n return;\n }\n\n this._removeEvents();\n\n this._flicking = null;\n }\n\n /** Update the active class state for all synchronized Flicking instances. */\n public update(): void {\n this._synchronizedFlickingOptions.forEach(options => {\n this._updateClass(options, options.flicking.index);\n });\n }\n\n private _preventEvent(fn: () => void) {\n this._removeEvents();\n fn();\n this._addEvents();\n }\n\n private _addEvents = (): void => {\n const type = this._type;\n const synced = this._synchronizedFlickingOptions;\n\n synced.forEach(({ flicking, isSlidable, isClickable }) => {\n if (type === SYNC.TYPE.CAMERA) {\n flicking.on(EVENTS.MOVE, this._onMove);\n flicking.on(EVENTS.MOVE_START, this._onMoveStart);\n flicking.on(EVENTS.MOVE_END, this._onMoveEnd);\n }\n if (type === SYNC.TYPE.INDEX && isSlidable) {\n flicking.on(EVENTS.WILL_CHANGE, this._onIndexChange);\n flicking.on(EVENTS.WILL_RESTORE, this._onIndexChange);\n }\n if (isClickable) {\n flicking.on(EVENTS.SELECT, this._onSelect);\n }\n });\n };\n\n private _removeEvents = (): void => {\n const type = this._type;\n const synced = this._synchronizedFlickingOptions;\n\n synced.forEach(({ flicking, isSlidable, isClickable }) => {\n if (type === SYNC.TYPE.CAMERA) {\n flicking.off(EVENTS.MOVE, this._onMove);\n flicking.off(EVENTS.MOVE_START, this._onMoveStart);\n flicking.off(EVENTS.MOVE_END, this._onMoveEnd);\n }\n if (type === SYNC.TYPE.INDEX && isSlidable) {\n flicking.off(EVENTS.WILL_CHANGE, this._onIndexChange);\n flicking.off(EVENTS.WILL_RESTORE, this._onIndexChange);\n }\n if (isClickable) {\n flicking.off(EVENTS.SELECT, this._onSelect);\n }\n });\n };\n\n private _onIndexChange = (e: WillChangeEvent): void => {\n const flicking = e.currentTarget;\n\n if (!flicking.initialized) {\n return;\n }\n\n this._synchronizeByIndex(flicking, e.index);\n };\n\n private _onMove = (e: MoveEvent): void => {\n const camera = e.currentTarget.camera;\n const progress = (camera.position - camera.range.min) / camera.rangeDiff;\n\n this._synchronizedFlickingOptions.forEach(({ flicking }) => {\n if (flicking === e.currentTarget) return;\n\n let targetPosition = 0;\n\n if (camera.position < camera.range.min) {\n targetPosition = camera.position;\n } else if (camera.position > camera.range.max) {\n targetPosition = flicking.camera.range.max + camera.position - camera.range.max;\n } else {\n targetPosition = flicking.camera.range.min + flicking.camera.rangeDiff * progress;\n }\n\n void flicking.camera.lookAt(targetPosition);\n });\n };\n\n private _onMoveStart = (e: MoveStartEvent): void => {\n this._disabledIndex = [];\n this._synchronizedFlickingOptions.forEach(({ flicking }, i) => {\n if (flicking !== e.currentTarget && flicking.control.controller.enabled) {\n this._disabledIndex.push(i);\n flicking.disableInput();\n }\n });\n };\n\n private _onMoveEnd = (e: MoveEndEvent): void => {\n this._disabledIndex.forEach(i => {\n const flicking = this._synchronizedFlickingOptions[i].flicking;\n flicking.enableInput();\n flicking.control.updateInput();\n });\n };\n\n private _onSelect = (e: SelectEvent): void => {\n void e.currentTarget.moveTo(e.index).catch(() => void 0);\n\n this._synchronizeByIndex(e.currentTarget, e.index);\n };\n\n private _synchronizeByIndex = (activeFlicking: Flicking, index: number): void => {\n const synchronizedFlickingOptions = this._synchronizedFlickingOptions;\n\n this._preventEvent(() => {\n synchronizedFlickingOptions.forEach(options => {\n // Active class should be applied same to the Flicking which triggered event\n this._updateClass(options, index);\n\n const { flicking } = options;\n if (flicking === activeFlicking) return;\n\n const targetIndex = clamp(index, 0, flicking.panels.length);\n\n if (flicking.animating) {\n // Reserve moveTo once previous animation is finished\n flicking.once(EVENTS.MOVE_END, () => {\n void flicking.moveTo(targetIndex).catch(() => void 0);\n });\n } else {\n void flicking.moveTo(targetIndex);\n }\n });\n });\n };\n\n private _updateClass = ({ flicking, activeClass }: SychronizableFlickingOptions, index: number): void => {\n if (!activeClass) return;\n\n flicking.panels.forEach(panel => {\n if (panel.index === index) {\n addClass(panel.element, activeClass);\n } else {\n removeClass(panel.element, activeClass);\n }\n });\n };\n}\n\nexport default Sync;\n","import Flicking, { FlickingError } from \"@egjs/flicking\";\n\nimport { BROWSER } from \"../../event\";\nimport Pagination from \"../Pagination\";\n\nexport interface RendererOptions {\n flicking: Flicking;\n pagination: Pagination;\n wrapper: HTMLElement;\n}\n\nabstract class Renderer {\n protected _flicking: Flicking;\n protected _pagination: Pagination;\n protected _wrapper: HTMLElement;\n\n public constructor(options: RendererOptions) {\n const { flicking, pagination, wrapper } = options;\n\n this._flicking = flicking;\n this._pagination = pagination;\n this._wrapper = wrapper;\n }\n\n public abstract destroy(): void;\n public abstract render(): void;\n public abstract update(index: number): void;\n\n protected _createBulletFromString(html: string, index: number) {\n const range = document.createRange();\n const frag = range.createContextualFragment(html);\n const bullet = frag.firstChild as HTMLElement;\n\n this._addBulletEvents(bullet, index);\n\n return bullet;\n }\n\n protected _addBulletEvents(bullet: HTMLElement, index: number) {\n const anchorPoints = this._flicking.camera.anchorPoints;\n const panelIndex = anchorPoints[index].panel.index;\n\n bullet.addEventListener(BROWSER.MOUSE_DOWN, e => {\n e.stopPropagation();\n });\n\n bullet.addEventListener(\n BROWSER.TOUCH_START,\n e => {\n e.stopPropagation();\n },\n { passive: true }\n );\n\n bullet.addEventListener(BROWSER.CLICK, () => {\n this._flicking.moveTo(panelIndex).catch(err => {\n if (err instanceof FlickingError) return;\n throw err;\n });\n });\n }\n}\n\nexport default Renderer;\n","import { PAGINATION } from \"../../const\";\nimport { addClass, removeClass } from \"../../utils\";\n\nimport Renderer from \"./Renderer\";\n\nclass BulletRenderer extends Renderer {\n private _bullets: HTMLElement[] = [];\n private _prevIndex: number = -1;\n\n private get _bulletClass() {\n const pagination = this._pagination;\n return `${pagination.classPrefix}-${PAGINATION.BULLET_SUFFIX}`;\n }\n\n private get _activeClass() {\n const pagination = this._pagination;\n return `${pagination.classPrefix}-${PAGINATION.BULLET_ACTIVE_SUFFIX}`;\n }\n\n public destroy() {\n this._bullets = [];\n this._prevIndex = -1;\n }\n\n public render() {\n const flicking = this._flicking;\n const pagination = this._pagination;\n const wrapper = this._wrapper;\n const bulletClass = this._bulletClass;\n const activeClass = this._activeClass;\n const renderBullet = pagination.renderBullet;\n const renderActiveBullet = pagination.renderActiveBullet;\n const bulletWrapperClass = `${pagination.classPrefix}-${PAGINATION.BULLET_WRAPPER_SUFFIX}`;\n const anchorPoints = flicking.camera.anchorPoints;\n\n addClass(wrapper, bulletWrapperClass);\n\n wrapper.innerHTML = anchorPoints\n .map((anchorPoint, index) => {\n if (renderActiveBullet && anchorPoint.panel.index === flicking.index) {\n return renderActiveBullet(bulletClass, index);\n } else {\n return renderBullet(bulletClass, index);\n }\n })\n .join(\"\\n\");\n\n const bullets = [].slice.call(wrapper.children) as HTMLElement[];\n\n bullets.forEach((bullet, index) => {\n const anchorPoint = anchorPoints[index];\n\n if (anchorPoint.panel.index === flicking.index) {\n addClass(bullet, activeClass);\n this._prevIndex = index;\n }\n\n this._addBulletEvents(bullet, index);\n });\n\n this._bullets = bullets;\n }\n\n public update(index: number) {\n const flicking = this._flicking;\n const pagination = this._pagination;\n const wrapper = this._wrapper;\n const bullets = this._bullets;\n const bulletClass = this._bulletClass;\n const activeClass = this._activeClass;\n const prevIndex = this._prevIndex;\n const anchorPoints = flicking.camera.anchorPoints;\n const renderBullet = pagination.renderBullet;\n const renderActiveBullet = pagination.renderActiveBullet;\n\n if (anchorPoints.length <= 0) return;\n\n const anchorOffset = anchorPoints[0].panel.index;\n const activeBulletIndex = index - anchorOffset;\n\n if (prevIndex === activeBulletIndex) return;\n\n if (renderActiveBullet) {\n const prevBullet = bullets[prevIndex];\n if (prevBullet) {\n const newBullet = this._createBulletFromString(renderBullet(bulletClass, prevIndex), prevIndex);\n prevBullet.parentElement!.replaceChild(newBullet, prevBullet);\n bullets[prevIndex] = newBullet;\n }\n\n const activeBullet = bullets[activeBulletIndex];\n const newActiveBullet = this._createBulletFromString(\n renderActiveBullet(`${bulletClass} ${activeClass}`, activeBulletIndex),\n activeBulletIndex\n );\n\n wrapper.replaceChild(newActiveBullet, activeBullet);\n bullets[activeBulletIndex] = newActiveBullet;\n } else {\n const activeBullet = bullets[activeBulletIndex];\n const prevBullet = bullets[prevIndex];\n\n if (prevBullet) {\n removeClass(prevBullet, activeClass);\n }\n\n addClass(activeBullet, activeClass);\n }\n\n this._prevIndex = activeBulletIndex;\n }\n}\n\nexport default BulletRenderer;\n","import { PAGINATION } from \"../../const\";\nimport { addClass } from \"../../utils\";\n\nimport Renderer from \"./Renderer\";\n\nclass FractionRenderer extends Renderer {\n private _prevIndex: number = -1;\n private _prevTotal: number = -1;\n\n public destroy(): void {\n this._prevIndex = -1;\n this._prevTotal = -1;\n }\n\n public render() {\n const flicking = this._flicking;\n const wrapper = this._wrapper;\n const pagination = this._pagination;\n const fractionWrapperClass = `${pagination.classPrefix}-${PAGINATION.FRACTION_WRAPPER_SUFFIX}`;\n const fractionCurrentClass = `${pagination.classPrefix}-${PAGINATION.FRACTION_CURRENT_SUFFIX}`;\n const fractionTotalClass = `${pagination.classPrefix}-${PAGINATION.FRACTION_TOTAL_SUFFIX}`;\n\n addClass(wrapper, fractionWrapperClass);\n\n wrapper.innerHTML = pagination.renderFraction(fractionCurrentClass, fractionTotalClass);\n\n this.update(flicking.index);\n }\n\n public update(index: number) {\n const flicking = this._flicking;\n const wrapper = this._wrapper;\n const pagination = this._pagination;\n\n const anchorPoints = flicking.camera.anchorPoints;\n const currentIndex = anchorPoints.length > 0 ? index - anchorPoints[0].panel.index + 1 : 0;\n const anchorCount = anchorPoints.length;\n\n if (currentIndex === this._prevIndex && anchorCount === this._prevTotal) return;\n\n const fractionCurrentSelector = `.${pagination.classPrefix}-${PAGINATION.FRACTION_CURRENT_SUFFIX}`;\n const fractionTotalSelector = `.${pagination.classPrefix}-${PAGINATION.FRACTION_TOTAL_SUFFIX}`;\n\n const currentWrapper = wrapper.querySelector(fractionCurrentSelector) as HTMLElement;\n const totalWrapper = wrapper.querySelector(fractionTotalSelector) as HTMLElement;\n\n currentWrapper.innerHTML = pagination.fractionCurrentFormat(currentIndex);\n totalWrapper.innerHTML = pagination.fractionTotalFormat(anchorCount);\n\n this._prevIndex = currentIndex;\n this._prevTotal = anchorCount;\n }\n}\n\nexport default FractionRenderer;\n","import { DIRECTION } from \"@egjs/flicking\";\n\nimport { PAGINATION } from \"../../const\";\nimport { addClass, removeClass } from \"../../utils\";\n\nimport Renderer from \"./Renderer\";\n\nclass ScrollBulletRenderer extends Renderer {\n private _bullets: HTMLElement[] = [];\n private _bulletSize: number = 0;\n private _previousIndex: number = -1;\n private _sliderIndex: number = -1;\n\n public destroy(): void {\n this._bullets = [];\n this._bulletSize = 0;\n this._previousIndex = -1;\n this._sliderIndex = -1;\n }\n\n public render() {\n const wrapper = this._wrapper;\n const flicking = this._flicking;\n const pagination = this._pagination;\n const renderBullet = pagination.renderBullet;\n const anchorPoints = flicking.camera.anchorPoints;\n\n const dynamicWrapperClass = `${pagination.classPrefix}-${PAGINATION.SCROLL_WRAPPER_SUFFIX}`;\n const bulletClass = `${pagination.classPrefix}-${PAGINATION.BULLET_SUFFIX}`;\n const sliderClass = `${pagination.classPrefix}-${PAGINATION.SCROLL_SLIDER_SUFFIX}`;\n const uninitClass = `${pagination.classPrefix}-${PAGINATION.SCROLL_UNINIT_SUFFIX}`;\n\n const sliderEl = document.createElement(\"div\");\n\n addClass(sliderEl, sliderClass);\n addClass(wrapper, uninitClass);\n addClass(wrapper, dynamicWrapperClass);\n wrapper.appendChild(sliderEl);\n\n sliderEl.innerHTML = anchorPoints.map((_, index) => renderBullet(bulletClass, index)).join(\"\\n\");\n\n const bullets = [].slice.call(sliderEl.children) as HTMLElement[];\n\n bullets.forEach((bullet, index) => {\n this._addBulletEvents(bullet, index);\n });\n\n if (bullets.length <= 0) return;\n\n const bulletStyle = getComputedStyle(bullets[0]);\n const bulletSize =\n bullets[0].clientWidth + parseFloat(bulletStyle.marginLeft) + parseFloat(bulletStyle.marginRight);\n\n wrapper.style.width = `${bulletSize * pagination.bulletCount}px`;\n\n this._bullets = bullets;\n this._bulletSize = bulletSize;\n this._previousIndex = -1;\n\n this.update(this._flicking.index);\n\n window.requestAnimationFrame(() => {\n removeClass(wrapper, uninitClass);\n });\n }\n\n public update(index: number) {\n const pagination = this._pagination;\n const flicking = this._flicking;\n const bullets = this._bullets;\n const prevIndex = this._previousIndex;\n\n const renderBullet = pagination.renderBullet;\n const renderActiveBullet = pagination.renderActiveBullet;\n\n const anchorPoints = flicking.camera.anchorPoints;\n const anchorOffset = anchorPoints[0].panel.index;\n const activeIndex = index - anchorOffset;\n\n if (anchorPoints.length <= 0) return;\n\n const bulletClass = `${pagination.classPrefix}-${PAGINATION.BULLET_SUFFIX}`;\n const bulletActiveClass = `${pagination.classPrefix}-${PAGINATION.BULLET_ACTIVE_SUFFIX}`;\n const prevClassPrefix = `${pagination.classPrefix}-${PAGINATION.SCROLL_PREV_SUFFIX}`;\n const nextClassPrefix = `${pagination.classPrefix}-${PAGINATION.SCROLL_NEXT_SUFFIX}`;\n const bulletPrevClass = (offset: number) => `${prevClassPrefix}${offset > 1 ? offset : \"\"}`;\n const bulletNextClass = (offset: number) => `${nextClassPrefix}${offset > 1 ? offset : \"\"}`;\n\n const prevClassRegex = new RegExp(`^${prevClassPrefix}`);\n const nextClassRegex = new RegExp(`^${nextClassPrefix}`);\n\n if (renderActiveBullet) {\n const prevBullet = bullets[prevIndex];\n if (prevBullet) {\n const newBullet = this._createBulletFromString(renderBullet(bulletClass, prevIndex), prevIndex);\n prevBullet.parentElement!.replaceChild(newBullet, prevBullet);\n bullets[prevIndex] = newBullet;\n }\n\n const activeBullet = bullets[activeIndex];\n if (activeBullet) {\n const newActiveBullet = this._createBulletFromString(renderActiveBullet(bulletClass, activeIndex), activeIndex);\n\n activeBullet.parentElement!.replaceChild(newActiveBullet, activeBullet);\n bullets[activeIndex] = newActiveBullet;\n }\n }\n\n bullets.forEach((bullet, idx) => {\n const indexOffset = idx - activeIndex;\n const classList = bullet.className.split(\" \");\n\n for (const className of classList) {\n if (className === bulletActiveClass || prevClassRegex.test(className) || nextClassRegex.test(className)) {\n removeClass(bullet, className);\n }\n }\n\n if (indexOffset === 0) {\n addClass(bullet, bulletActiveClass);\n } else if (indexOffset > 0) {\n addClass(bullet, bulletNextClass(Math.abs(indexOffset)));\n } else {\n addClass(bullet, bulletPrevClass(Math.abs(indexOffset)));\n }\n });\n\n pagination.scrollOnChange(activeIndex, {\n total: bullets.length,\n prevIndex,\n sliderIndex: this._sliderIndex,\n direction: activeIndex > prevIndex ? DIRECTION.NEXT : DIRECTION.PREV,\n bullets: [...bullets],\n moveTo: this.moveTo\n });\n\n this._previousIndex = activeIndex;\n }\n\n public moveTo = (index: number): void => {\n const pagination = this._pagination;\n const sliderEl = this._wrapper.firstElementChild as HTMLElement;\n const bulletSize = this._bulletSize;\n const wrapperSize = bulletSize * pagination.bulletCount;\n\n sliderEl.style.transform = `translate(${wrapperSize / 2 - (index + 0.5) * bulletSize}px)`;\n this._sliderIndex = index;\n };\n}\n\nexport default ScrollBulletRenderer;\n","import Flicking, { EVENTS, Plugin } from \"@egjs/flicking\";\n\nimport { PAGINATION } from \"../const\";\nimport ScrollContext from \"../type\";\nimport BulletRenderer from \"./renderer/BulletRenderer\";\nimport FractionRenderer from \"./renderer/FractionRenderer\";\nimport Renderer from \"./renderer/Renderer\";\nimport ScrollBulletRenderer from \"./renderer/ScrollBulletRenderer\";\n\n/**\n * Options for the {@link Pagination} plugin\n */\nexport interface PaginationOptions {\n /**\n * The parent element to search for the pagination wrapper. If `null`, the Flicking element is used\n * @defaultValue null\n */\n parentEl: HTMLElement | null;\n /**\n * CSS selector for the pagination wrapper element\n * @defaultValue \".flicking-pagination\"\n */\n selector: string;\n /**\n * Pagination display type\n * @defaultValue \"bullet\"\n */\n type: \"bullet\" | \"fraction\" | \"scroll\";\n /**\n * CSS class prefix for pagination elements\n * @defaultValue \"flicking-pagination\"\n */\n classPrefix: string;\n /**\n * Maximum number of bullet indicators displayed at once (only for `\"scroll\"` type)\n * @defaultValue 5\n */\n bulletCount: number;\n /**\n * Custom render function for each bullet element\n */\n renderBullet: (className: string, index: number) => string;\n /**\n * Custom render function for the fraction display\n */\n renderFraction: (currentClass: string, totalClass: string) => string;\n /**\n * Custom render function for the active bullet element. If `null`, the default bullet is used\n * @defaultValue null\n */\n renderActiveBullet: ((className: string, index: number) => string) | null;\n /**\n * Format function for the current index in fraction type\n */\n fractionCurrentFormat: (index: number) => string;\n /**\n * Format function for the total count in fraction type\n */\n fractionTotalFormat: (total: number) => string;\n /**\n * Callback invoked when the scroll pagination index changes\n */\n scrollOnChange: (index: number, ctx: ScrollContext) => any;\n}\n\n/**\n * A plugin to add pagination indicators (bullets, fractions, or scrollable bullets) to Flicking\n * @see {@link https://naver.github.io/egjs-flicking/docs/demos/plugins/pagination | Demo: Pagination}\n */\nclass Pagination implements Plugin {\n /* Internal Values */\n private _flicking: Flicking | null = null;\n private _renderer: Renderer;\n private _wrapper: HTMLElement;\n\n /* Options */\n private _parentEl: PaginationOptions[\"parentEl\"];\n private _selector: PaginationOptions[\"selector\"];\n private _type: PaginationOptions[\"type\"];\n private _classPrefix: PaginationOptions[\"classPrefix\"];\n private _bulletCount: PaginationOptions[\"bulletCount\"];\n private _renderBullet: PaginationOptions[\"renderBullet\"];\n private _renderActiveBullet: PaginationOptions[\"renderActiveBullet\"];\n private _renderFraction: PaginationOptions[\"renderFraction\"];\n private _fractionCurrentFormat: PaginationOptions[\"fractionCurrentFormat\"];\n private _fractionTotalFormat: PaginationOptions[\"fractionTotalFormat\"];\n private _scrollOnChange: PaginationOptions[\"scrollOnChange\"];\n\n /** Current value of the {@link PaginationOptions.parentEl | parentEl} option. */\n public get parentEl() {\n return this._parentEl;\n }\n /** Current value of the {@link PaginationOptions.selector | selector} option. */\n public get selector() {\n return this._selector;\n }\n /** Current value of the {@link PaginationOptions.type | type} option. */\n public get type() {\n return this._type;\n }\n /** Current value of the {@link PaginationOptions.classPrefix | classPrefix} option. */\n public get classPrefix() {\n return this._classPrefix;\n }\n /** Current value of the {@link PaginationOptions.bulletCount | bulletCount} option. */\n public get bulletCount() {\n return this._bulletCount;\n }\n /** Current value of the {@link PaginationOptions.renderBullet | renderBullet} option. */\n public get renderBullet() {\n return this._renderBullet;\n }\n /** Current value of the {@link PaginationOptions.renderActiveBullet | renderActiveBullet} option. */\n public get renderActiveBullet() {\n return this._renderActiveBullet;\n }\n /** Current value of the {@link PaginationOptions.renderFraction | renderFraction} option. */\n public get renderFraction() {\n return this._renderFraction;\n }\n /** Current value of the {@link PaginationOptions.fractionCurrentFormat | fractionCurrentFormat} option. */\n public get fractionCurrentFormat() {\n return this._fractionCurrentFormat;\n }\n /** Current value of the {@link PaginationOptions.fractionTotalFormat | fractionTotalFormat} option. */\n public get fractionTotalFormat() {\n return this._fractionTotalFormat;\n }\n /** Current value of the {@link PaginationOptions.scrollOnChange | scrollOnChange} option. */\n public get scrollOnChange() {\n return this._scrollOnChange;\n }\n\n /** Sets {@link PaginationOptions.parentEl | parentEl}. */\n public set parentEl(val: PaginationOptions[\"parentEl\"]) {\n this._parentEl = val;\n }\n /** Sets {@link PaginationOptions.selector | selector}. */\n public set selector(val: PaginationOptions[\"selector\"]) {\n this._selector = val;\n }\n /** Sets {@link PaginationOptions.type | type}. */\n public set type(val: PaginationOptions[\"type\"]) {\n this._type = val;\n }\n /** Sets {@link PaginationOptions.classPrefix | classPrefix}. */\n public set bulletWrapperclassPrefixClass(val: PaginationOptions[\"classPrefix\"]) {\n this._classPrefix = val;\n }\n /** Sets {@link PaginationOptions.bulletCount | bulletCount}. */\n public set bulletCount(val: PaginationOptions[\"bulletCount\"]) {\n this._bulletCount = val;\n }\n /** Sets {@link PaginationOptions.renderBullet | renderBullet}. */\n public set renderBullet(val: PaginationOptions[\"renderBullet\"]) {\n this._renderBullet = val;\n }\n /** Sets {@link PaginationOptions.renderActiveBullet | renderActiveBullet}. */\n public set renderActiveBullet(val: PaginationOptions[\"renderActiveBullet\"]) {\n this._renderActiveBullet = val;\n }\n /** Sets {@link PaginationOptions.renderFraction | renderFraction}. */\n public set renderFraction(val: PaginationOptions[\"renderFraction\"]) {\n this._renderFraction = val;\n }\n /** Sets {@link PaginationOptions.fractionCurrentFormat | fractionCurrentFormat}. */\n public set fractionCurrentFormat(val: PaginationOptions[\"fractionCurrentFormat\"]) {\n this._fractionCurrentFormat = val;\n }\n /** Sets {@link PaginationOptions.fractionTotalFormat | fractionTotalFormat}. */\n public set fractionTotalFormat(val: PaginationOptions[\"fractionTotalFormat\"]) {\n this._fractionTotalFormat = val;\n }\n /** Sets {@link PaginationOptions.scrollOnChange | scrollOnChange}. */\n public set scrollOnChange(val: PaginationOptions[\"scrollOnChange\"]) {\n this._scrollOnChange = val;\n }\n\n /**\n * @param options - Options for the Pagination instance\n * @example\n * ```ts\n * flicking.addPlugins(new Pagination({ type: \"bullet\", selector: \".flicking-pagination\" }));\n * ```\n */\n public constructor(options: Partial<PaginationOptions> = {}) {\n const {\n parentEl = null,\n selector = PAGINATION.SELECTOR,\n type = PAGINATION.TYPE.BULLET,\n classPrefix = PAGINATION.PREFIX,\n bulletCount = 5,\n renderBullet = (className: string) => `<span class=\"${className}\"></span>`,\n renderActiveBullet = null,\n renderFraction = (currentClass: string, totalClass: string) =>\n `<span class=\"${currentClass}\"></span>/<span class=\"${totalClass}\"></span>`,\n fractionCurrentFormat = (index: number) => index.toString(),\n fractionTotalFormat = (index: number) => index.toString(),\n scrollOnChange = (index: number, ctx: ScrollContext) => ctx.moveTo(index)\n } = options;\n\n this._parentEl = parentEl;\n this._selector = selector;\n this._type = type;\n this._classPrefix = classPrefix;\n this._bulletCount = bulletCount;\n this._renderBullet = renderBullet;\n this._renderActiveBullet = renderActiveBullet;\n this._renderFraction = renderFraction;\n this._fractionCurrentFormat = fractionCurrentFormat;\n this._fractionTotalFormat = fractionTotalFormat;\n this._scrollOnChange = scrollOnChange;\n }\n\n /** Initialize the plugin, create the pagination renderer, and attach event listeners to the Flicking instance.\n * @param flicking - The Flicking instance to attach this plugin to\n */\n public init(flicking: Flicking): void {\n if (this._flicking) {\n this.destroy();\n }\n\n this._flicking = flicking;\n\n const type = this._type;\n const selector = this._selector;\n const parentEl = this._parentEl ? this._parentEl : flicking.element;\n const wrapper = parentEl.querySelector(selector);\n\n if (!wrapper) {\n throw new Error(`[Flicking-Pagination] Couldn't find element with the given selector: ${selector}`);\n }\n\n this._wrapper = wrapper as HTMLElement;\n this._renderer = this._createRenderer(type);\n\n flicking.on(EVENTS.WILL_CHANGE, this._onIndexChange);\n flicking.on(EVENTS.WILL_RESTORE, this._onIndexChange);\n flicking.on(EVENTS.PANEL_CHANGE, this.update);\n\n this.update();\n }\n\n /** Destroy the plugin, remove all event listeners, and clean up pagination DOM elements. */\n public destroy(): void {\n const flicking = this._flicking;\n\n if (!flicking) {\n return;\n }\n\n flicking.off(EVENTS.WILL_CHANGE, this._onIndexChange);\n flicking.off(EVENTS.WILL_RESTORE, this._onIndexChange);\n flicking.off(EVENTS.PANEL_CHANGE, this.update);\n\n this._renderer.destroy();\n this._removeAllChilds();\n this._flicking = null;\n }\n\n /** Re-render the pagination indicators to reflect the current panel state. */\n public update = (): void => {\n this._removeAllChilds();\n this._renderer.render();\n };\n\n private _createRenderer(type: PaginationOptions[\"type\"]) {\n const options = {\n flicking: this._flicking!,\n pagination: this,\n wrapper: this._wrapper\n };\n\n switch (type) {\n case PAGINATION.TYPE.BULLET:\n return new BulletRenderer(options);\n case PAGINATION.TYPE.FRACTION:\n return new FractionRenderer(options);\n case PAGINATION.TYPE.SCROLL:\n return new ScrollBulletRenderer(options);\n default:\n throw new Error(`[Flicking-Pagination] type \"${type}\" is not supported.`);\n }\n }\n\n private _onIndexChange = (evt: { index: number }) => {\n this._renderer.update(evt.index);\n };\n\n private _removeAllChilds() {\n const wrapper = this._wrapper;\n\n while (wrapper.firstChild) {\n wrapper.removeChild(wrapper.firstChild);\n }\n }\n}\n\nexport default Pagination;\n"],"names":["moveCount","selector","scale","rotate","perspective","type","synchronizedFlickingOptions","options"],"mappings":"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"}
package/dist/plugins.js CHANGED
@@ -317,7 +317,7 @@
317
317
  this._direction = direction;
318
318
  this._stopOnHover = stopOnHover;
319
319
  this._stopOnInit = stopOnInit;
320
- this._delayAfterHover = delayAfterHover ?? duration;
320
+ this._delayAfterHover = delayAfterHover != null ? delayAfterHover : duration;
321
321
  }
322
322
  /** Current value of the {@link AutoPlayOptions.duration | duration} option. */
323
323
  get duration() {
@@ -428,17 +428,18 @@
428
428
  }
429
429
  this._playing = true;
430
430
  this._timerId = window.setTimeout(() => {
431
+ var _a, _b;
431
432
  let animationDuration = this._animationDuration || flicking$1.duration;
432
433
  const moveType = flicking$1.moveType;
433
- if (moveType === flicking.MOVE_TYPE.FREE_SCROLL || moveType?.[0] === flicking.MOVE_TYPE.FREE_SCROLL) {
434
+ if (moveType === flicking.MOVE_TYPE.FREE_SCROLL || (moveType == null ? void 0 : moveType[0]) === flicking.MOVE_TYPE.FREE_SCROLL) {
434
435
  const range = flicking$1.camera.range;
435
436
  const cameraPosition = flicking$1.camera.position;
436
437
  const currentPanel = flicking$1.currentPanel;
437
438
  const prevPanel = currentPanel.prev();
438
439
  const nextPanel = currentPanel.next();
439
440
  const currentPosition = currentPanel.position;
440
- let nextPosition = nextPanel?.position ?? range.max;
441
- let prevPosition = prevPanel?.position ?? range.min;
441
+ let nextPosition = (_a = nextPanel == null ? void 0 : nextPanel.position) != null ? _a : range.max;
442
+ let prevPosition = (_b = prevPanel == null ? void 0 : prevPanel.position) != null ? _b : range.min;
442
443
  if (prevPosition > currentPosition) {
443
444
  prevPosition = range.min - (range.max - prevPosition);
444
445
  }