@fastkit/scroller 0.14.5 → 0.15.0

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.
package/README.md CHANGED
@@ -1,4 +1,7 @@
1
+
1
2
  # @fastkit/scroller
2
3
 
4
+ 🌐 English | [日本語](https://github.com/dadajam4/fastkit/blob/main/packages/scroller/README-ja.md)
5
+
3
6
  ## Documentation
4
7
  https://dadajam4.github.io/fastkit/scroller/
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/util.ts","../src/logger.ts","../src/prevent-scroll.ts","../src/scroll/schemes.ts","../src/scroll/easings.ts","../src/scroll/util.ts","../src/scroll/scroll-by-internal.ts","../src/scroll/scroll-by.ts","../src/scroll/scroll-to.ts","../src/scroll/scroll-to-element.ts","../src/scroll/scroll-to-side.ts","../src/scroller.ts"],"names":["isBodyElement","ScrollerState"],"mappings":"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","file":"scroller.mjs","sourcesContent":["// export const HAS_WINDOW = typeof window !== 'undefined';\n\n// export function warn(message: string): void {\n// if (typeof console === 'object' && console.warn) {\n// console.warn(`[scroller] ${message}`);\n// }\n// }\n\n// export function error(message: string): Error {\n// return new Error(`[scroller] ${message}`);\n// }\n\nexport function isDocumentElement(el: Element): el is HTMLHtmlElement {\n return el.constructor === HTMLHtmlElement;\n}\n\nexport function isBodyElement(el: Element): el is HTMLBodyElement {\n return el.constructor === HTMLBodyElement;\n}\n\nexport function isRootElement(\n el: Element,\n): el is HTMLHtmlElement | HTMLBodyElement {\n return isDocumentElement(el) || isBodyElement(el);\n}\n","import { TinyLogger } from '@fastkit/tiny-logger';\n\nexport const logger = new TinyLogger('scroller');\n","// space: 32, page up: 33, page down: 34, end: 35, home: 36\n// left: 37, up: 38, right: 39, down: 40\nexport const SCROLLABLE_KEY_CODES = [32, 33, 34, 35, 36, 37, 38, 39, 40];\n\nexport interface PreventScrollOptions {\n hideScrollbar: boolean;\n}\n\nexport interface PreventScrollContext {\n options: PreventScrollOptions;\n el: PreventScrollElement;\n overflowOrigin?: string | null;\n lockPosition: {\n x: number;\n y: number;\n };\n}\n\nexport interface PreventScrollElement extends HTMLElement {\n __ps_ctx__: PreventScrollContext;\n}\n\nconst eventListenerOptions: AddEventListenerOptions = {\n passive: false,\n};\n\nconst handleWheel = (e: WheelEvent) => {\n e.preventDefault();\n};\n\nconst handleScroll = (e: Event) => {\n const el = e.target as PreventScrollElement;\n if (el && el.__ps_ctx__) {\n el.scrollTo(el.__ps_ctx__.lockPosition.x, el.__ps_ctx__.lockPosition.y);\n }\n};\n\nconst handleKeydown = (e: KeyboardEvent) => {\n if (\n e.target &&\n ['INPUT', 'TEXTAREA'].includes((e.target as HTMLElement).tagName)\n ) {\n return;\n }\n if (SCROLLABLE_KEY_CODES.includes(e.which)) {\n e.preventDefault();\n }\n};\n\nexport function enableScroll(el: Element) {\n const _el: PreventScrollElement = <PreventScrollElement>el;\n if (!_el.__ps_ctx__) return;\n\n const { options } = _el.__ps_ctx__;\n\n _el.removeEventListener('wheel', handleWheel, eventListenerOptions);\n _el.removeEventListener('scroll', handleScroll, eventListenerOptions);\n _el.removeEventListener('keydown', handleKeydown);\n\n if (options.hideScrollbar) {\n _el.style.overflow = _el.__ps_ctx__.overflowOrigin as string;\n }\n delete (_el as any).__ps_ctx__;\n}\n\nexport function disableScroll(\n el: Element,\n opts: Partial<PreventScrollOptions> = {},\n) {\n const { hideScrollbar = false } = opts;\n\n const _el: PreventScrollElement = <PreventScrollElement>el;\n if (_el.__ps_ctx__) return;\n\n const options = {\n hideScrollbar,\n };\n\n _el.__ps_ctx__ = {\n options,\n el: _el,\n overflowOrigin: _el.style.overflow,\n lockPosition: {\n x: _el.scrollLeft || (_el as any).scrollX,\n y: _el.scrollTop || (_el as any).scrollY,\n },\n };\n\n if (options.hideScrollbar) {\n _el.style.overflow = 'hidden';\n }\n\n _el.addEventListener('wheel', handleWheel, eventListenerOptions);\n _el.addEventListener('scroll', handleScroll, eventListenerOptions);\n _el.addEventListener('keydown', handleKeydown);\n}\n","import { EasingName } from './easings';\n\n/**\n * スクロヌル系メ゜ッドの基本オプション蚭定です。\n */\nexport interface ScrollBaseSettings {\n /**\n * アニメヌションの総合時間をms単䜍で指定したす。\n */\n duration: number;\n\n /**\n * アニメヌションのむヌゞングを指定したす。\n * {@link EasingName}\n */\n easing: EasingName;\n\n /**\n * スクロヌルアニメヌションがナヌザヌのむンタラクションにより䞭断可胜かをboolean倀で瀺したす。\n */\n cancelable: boolean;\n}\n\n/**\n * Scrollerで利甚するスクロヌル系メ゜ッドのオプション蚭定です。\n */\nexport interface ScrollerScrollSettings extends ScrollBaseSettings {\n onProgress?: ScrollCallback;\n onCancel?: ScrollCallback;\n onDone?: ScrollCallback;\n}\n\nexport interface ScrollSettings extends ScrollerScrollSettings {\n container: string | Element;\n}\n\nexport type ScrollerScrollOptions = Partial<ScrollerScrollSettings>;\nexport type ScrollOptions = Partial<ScrollSettings>;\n\n/**\n * スクロヌル関連メ゜ッドによるスクロヌルアニメヌションをキャンセルするメ゜ッドです。<br>\n * ナヌザヌのむンタラクション起因の䞭断の堎合、Eventオブゞェクトが枡されたす。\n */\nexport type ScrollCanceller = (\n event?: Event | null,\n checkCancelable?: boolean,\n) => void;\n\n/**\n * スクロヌル関連メ゜ッドの返华倀ずなるむンタヌフェヌスです。\n */\nexport interface ScrollResult {\n /**\n * スクロヌルをキャンセルするメ゜ッドです。\n */\n cancel: ScrollCanceller;\n\n /**\n * スクロヌルの完了、キャンセル、䞭断を問わず終了を怜知するPromiseむンスタンスです。\n */\n promise: Promise<void>; // resolve when done or cancel\n\n /**\n * スクロヌル開始䜍眮から完了䜍眮たでの想定px数をx、y軞共に返华したす。<br>\n * スクロヌルが途䞭でキャンセルされた堎合はこのpxが加算されおいない事もありたす。\n */\n plans: { x: number; y: number };\n}\n\n/**\n * スクロヌル関連の各皮メ゜ッドにおいお、コヌルバックメ゜ッドに枡されるむンタヌフェヌスです。\n */\nexport interface ScrollCallbackValues {\n /**\n * スクロヌル䞭のコンテナ芁玠です。\n */\n container: Element;\n\n /**\n * スクロヌルの進捗を0〜1で瀺したす。\n */\n progress: number;\n\n /**\n * スクロヌルが䞭断されおいる堎合trueを瀺したす。\n */\n aborted: boolean;\n\n /**\n * ナヌザヌのむンタラクションによりスクロヌルが䞭断されおいた堎合、そのEventオブゞェクトが蚭定されたす。\n */\n abortEventSource: Event | null;\n}\n\nexport type ScrollCallback = (\n scrollToCallbackValues: ScrollCallbackValues,\n) => any;\n\n/**\n * スクロヌル倀をx軞、y軞で瀺したす。\n */\nexport interface ScrollPosition {\n x: number;\n y: number;\n}\n\nexport const defaultBaseSettings: ScrollBaseSettings = {\n duration: 500,\n easing: 'ease',\n cancelable: true,\n};\n\nexport const defaultSettings: ScrollSettings = {\n get container(): Element {\n return document.scrollingElement as Element;\n },\n ...defaultBaseSettings,\n};\n","const easings = {\n ease: [0.25, 0.1, 0.25, 1.0] as EasingValues,\n linear: [0.0, 0.0, 1.0, 1.0] as EasingValues,\n 'ease-in': [0.42, 0.0, 1.0, 1.0] as EasingValues,\n 'ease-out': [0.0, 0.0, 0.58, 1.0] as EasingValues,\n 'ease-in-out': [0.42, 0.0, 0.58, 1.0] as EasingValues,\n};\nexport type EasingName = keyof typeof easings;\nexport type EasingValues = [number, number, number, number];\nexport default easings;\n","import { logger } from '../logger';\n\nexport function isBodyElement(el: Element): el is HTMLBodyElement {\n return el.tagName.toLowerCase() === 'body';\n}\n\nexport function getContainerDimension(el: Element) {\n if (isBodyElement(el)) {\n const documentElement = <HTMLElement>document.documentElement;\n return {\n // width: window.innerWidth,\n // height: window.innerHeight,\n width: documentElement.clientWidth,\n height: documentElement.clientWidth,\n };\n }\n return {\n width: el.clientWidth,\n height: el.clientHeight,\n };\n}\n\nexport function $(selectorOrElement: string | Element): HTMLElement | null {\n if (typeof selectorOrElement !== 'string')\n return selectorOrElement as HTMLElement;\n return document.querySelector(selectorOrElement);\n}\n\nexport function cumulativeOffset(element: Element) {\n let top = 0;\n let left = 0;\n let el: HTMLElement | null = element as HTMLElement;\n\n while (el) {\n top += el.offsetTop || 0;\n left += el.offsetLeft || 0;\n el = el.offsetParent as HTMLElement;\n }\n\n return {\n top,\n left,\n };\n}\n\nexport type HTMLElementEventMapKey =\n | keyof HTMLElementEventMap\n | 'DOMMouseScroll'\n | 'mousewheel';\n\nexport function on(\n element: Element,\n events: HTMLElementEventMapKey | HTMLElementEventMapKey[],\n handler: EventListenerOrEventListenerObject,\n opts = { passive: false },\n) {\n if (!Array.isArray(events)) events = [events];\n for (let i = 0; i < events.length; i++) {\n element.addEventListener(events[i], handler, opts);\n }\n}\n\nexport function off(\n element: Element,\n events: HTMLElementEventMapKey | HTMLElementEventMapKey[],\n handler: EventListenerOrEventListenerObject,\n) {\n if (!Array.isArray(events)) events = [events];\n for (let i = 0; i < events.length; i++) {\n element.removeEventListener(events[i], handler);\n }\n}\n\nexport function warn(message: string): void {\n logger.warn(message);\n}\n\nexport function error(message: string): Error {\n return new Error(`[scroll] ${message}`);\n}\n","import BezierEasing, { EasingFunction } from 'bezier-easing';\nimport { removeUndef } from '@fastkit/helpers';\nimport easings, { EasingValues } from './easings';\nimport {\n ScrollResult,\n ScrollCallbackValues,\n ScrollOptions,\n defaultSettings,\n} from './schemes';\nimport {\n $,\n on,\n off,\n getContainerDimension,\n HTMLElementEventMapKey,\n error,\n} from './util';\nimport { PreventScrollElement } from '../prevent-scroll';\n\ninterface ComputedValues {\n $container: HTMLElement;\n initialX: number;\n initialY: number;\n targetX: number;\n targetY: number;\n}\n\nconst abortEvents: HTMLElementEventMapKey[] = [\n 'mousedown',\n 'wheel',\n 'DOMMouseScroll',\n 'mousewheel',\n 'keyup',\n 'touchmove',\n];\n\nexport function scroll(\n diffX: number,\n diffY: number,\n // eslint-disable-next-line default-param-last\n options: ScrollOptions = {},\n _computedValues?: ComputedValues,\n): ScrollResult {\n let $container: HTMLElement;\n let initialX: number;\n let initialY: number;\n let targetX: number;\n let targetY: number;\n\n const _options = { ...defaultSettings, ...removeUndef(options) };\n const {\n container,\n duration,\n easing,\n cancelable,\n onProgress,\n onCancel,\n onDone,\n } = _options;\n\n const x = diffX !== 0;\n const y = diffY !== 0;\n\n if (_computedValues) {\n $container = _computedValues.$container;\n initialX = _computedValues.initialX;\n initialY = _computedValues.initialY;\n targetX = _computedValues.targetX;\n targetY = _computedValues.targetY;\n } else {\n $container = $(container) as HTMLElement;\n if (!$container) throw error(`missing container ${container}`);\n initialX = $container.scrollLeft;\n initialY = $container.scrollTop;\n targetX = initialX + diffX;\n targetY = initialY + diffY;\n }\n\n // compute overflow and adjust values\n const { scrollWidth, scrollHeight } = $container;\n const { width, height } = getContainerDimension($container);\n const overflowX = targetX + width - scrollWidth;\n const overflowY = targetY + height - scrollHeight;\n if (overflowX > 0) {\n diffX -= overflowX;\n targetX -= overflowX;\n }\n if (overflowY > 0) {\n diffY -= overflowY;\n targetY -= overflowY;\n }\n\n //\n // Setup Temporary values\n //\n // eslint-disable-next-line @typescript-eslint/ban-types\n let doneResolver: Function;\n let timeStart = 0;\n let timeElapsed: number;\n\n const callbackValues: ScrollCallbackValues = {\n container: $container,\n progress: 0,\n aborted: false,\n abortEventSource: null,\n };\n\n const result: ScrollResult = {\n cancel: canceller,\n promise: new Promise((resolve) => {\n doneResolver = resolve;\n }),\n plans: {\n x: diffX,\n y: diffY,\n },\n };\n\n //\n // processes\n //\n if (\n (diffY === 0 && diffX === 0) ||\n !!($container as PreventScrollElement).__ps_ctx__\n )\n return initialAbort();\n\n // setup easings\n let easingValues: EasingValues;\n if (!easing) {\n easingValues = easings.ease;\n } else if (typeof easing === 'string') {\n easingValues = easings[_options.easing];\n } else {\n easingValues = easing;\n }\n const easingFn: EasingFunction = BezierEasing.apply(\n BezierEasing,\n easingValues,\n );\n\n on($container, abortEvents, abortFn, { passive: true });\n window.requestAnimationFrame(step);\n return result;\n\n //\n // inner methods\n //\n function doneResolve(): void {\n doneResolver();\n }\n\n function canceller(e: Event | null = null, checkCancelable = false) {\n if (checkCancelable && !cancelable) return;\n off($container, abortEvents, abortFn);\n callbackValues.abortEventSource = e;\n callbackValues.aborted = true;\n onCancel && onCancel(callbackValues);\n }\n\n function abortFn(e: Event) {\n canceller(e, true);\n }\n\n function initialAbort(e: Event | null = null) {\n canceller(e);\n doneResolve();\n return result;\n }\n\n function step(timestamp: number): void {\n if (callbackValues.aborted) return done();\n if (!timeStart) timeStart = timestamp;\n\n timeElapsed = timestamp - timeStart;\n\n let progress = Math.min(timeElapsed / duration, 1);\n progress = easingFn(progress);\n callbackValues.progress = progress;\n\n topLeft(initialY + diffY * progress, initialX + diffX * progress);\n onProgress && onProgress(callbackValues);\n\n timeElapsed < duration ? window.requestAnimationFrame(step) : done();\n }\n\n function topLeft(top: number, left: number) {\n if (y) $container.scrollTop = top;\n if (x) $container.scrollLeft = left;\n }\n\n function done() {\n if (!callbackValues.aborted) topLeft(targetY, targetX);\n timeStart = 0;\n off($container, abortEvents, abortFn);\n callbackValues.progress = 1;\n doneResolve();\n if (!callbackValues.aborted && onDone) onDone(callbackValues);\n }\n}\n","import { scroll } from './scroll-by-internal';\nimport { ScrollOptions, ScrollResult } from './schemes';\n\n/**\n * 指定の差分だけコンテナをスクロヌルしたす。\n * @param diffX - 暪軞の移動量pxです。デフォルトは0です。\n * @param diffY - 瞊軞の移動量pxです。デフォルトは0です。\n * @param options - スクロヌルオプション\n */\nexport function scrollBy(\n diffX: number,\n diffY: number,\n options?: ScrollOptions,\n): ScrollResult {\n return scroll(diffX, diffY, options);\n}\n","import { scroll } from './scroll-by-internal';\nimport {\n ScrollOptions,\n defaultSettings,\n ScrollPosition,\n ScrollResult,\n} from './schemes';\nimport { $, error } from './util';\n\n/**\n * 任意の䜍眮pxぞコンテナをスクロヌルしたす。\n * @param scrollPosition - スクロヌル先を指定したす。x, y 共にオプショナルなるです。未指定の軞は珟圚のスクロヌル倀のたた保持されたす。\n * @param options - スクロヌルオプション\n */\nexport function scrollTo(\n scrollPosition: Partial<ScrollPosition>,\n options: ScrollOptions = {},\n): ScrollResult {\n let { x, y } = scrollPosition;\n const container = options.container || defaultSettings.container;\n const $container = $(container) as HTMLElement;\n if (!$container) throw error(`missing container ${container}`);\n const initialY = $container.scrollTop;\n const initialX = $container.scrollLeft;\n if (x === undefined) x = initialX;\n if (y === undefined) y = initialY;\n const diffX = x - initialX;\n const diffY = y - initialY;\n\n return scroll(diffX, diffY, options, {\n $container,\n initialX,\n initialY,\n targetX: x,\n targetY: y,\n });\n}\n","import { scroll } from './scroll-by-internal';\nimport { ScrollOptions, ScrollResult, defaultSettings } from './schemes';\nimport { $, cumulativeOffset, error } from './util';\n\n/**\n * スクロヌル先の芁玠をElement or CSSク゚リストリングで瀺したす。\n */\nexport type ScrollToElementTarget = string | Element;\n\n/**\n * 芁玠ぞスクロヌルする際のオプション蚭定です。\n */\nexport interface ScrollToElementSettings {\n /**\n * 芁玠ぞスクロヌルする際、そのスクロヌル先をずらす際に蚭定したす。<br>\n * x, y 個別に蚭定が可胜ですが、シングルのnumberのみを指定した堎合、x, y のそれぞれのオプションが有効な堎合にのみその軞に蚭定されたす。\n */\n offset: number | { x?: number; y?: number };\n\n /**\n * 暪スクロヌルの可吊を瀺したす。\n */\n x: boolean;\n\n /**\n * 瞊スクロヌルの可吊を瀺したす。\n */\n y: boolean;\n}\n\n/**\n * 芁玠スクロヌル利甚事のデフォルト蚭定です。\n * {@link ScrollToElementSettings}\n */\nexport const scrollToElementSettingsDefaults: ScrollToElementSettings = {\n offset: 0,\n x: false,\n y: true,\n};\n\n/**\n * 芁玠ぞスクロヌルさせる際のオプション蚭定です。\n */\nexport type ScrollToElementOptions = Partial<\n ScrollOptions & ScrollToElementSettings\n>;\n\n/**\n * 任意の芁玠の䜍眮ぞスクロヌルしたす。\n * @param target - スクロヌル先の芁玠\n * @param options - スクロヌルオプション\n */\nexport function scrollToElement(\n target: ScrollToElementTarget,\n options: ScrollToElementOptions = {},\n): ScrollResult {\n //\n // Setup Options\n //\n\n const _options = { ...scrollToElementSettingsDefaults, ...options };\n\n const { x, y } = _options;\n\n const offsetSource = _options.offset;\n\n const offset =\n typeof offsetSource === 'number'\n ? { x: offsetSource, y: offsetSource }\n : offsetSource;\n\n //\n // Setup Elements\n //\n\n const $target = $(target) as HTMLElement;\n if (!$target) throw error(`missing element ${target}`);\n\n const container = _options.container || defaultSettings.container;\n const $container = $(container) as HTMLElement;\n if (!$container) throw error(`missing container ${container}`);\n\n const cumulativeOffsetContainer = cumulativeOffset($container);\n const cumulativeOffsetTarget = cumulativeOffset($target);\n\n const initialY = $container.scrollTop;\n const initialX = $container.scrollLeft;\n\n const targetY =\n cumulativeOffsetTarget.top -\n cumulativeOffsetContainer.top +\n (offset.y || 0);\n\n const targetX =\n cumulativeOffsetTarget.left -\n cumulativeOffsetContainer.left +\n (offset.x || 0);\n\n const diffX = x ? targetX - initialX : 0;\n const diffY = y ? targetY - initialY : 0;\n\n return scroll(diffX, diffY, _options, {\n $container,\n initialX,\n initialY,\n targetX,\n targetY,\n });\n}\n","import {\n ScrollOptions,\n ScrollResult,\n defaultSettings,\n ScrollPosition,\n} from './schemes';\nimport { $, error } from './util';\nimport { scrollTo } from './scroll-to';\n\n/**\n * y軞の䞡端の蟺を瀺したす。\n */\nexport type ScrollYSide = 'top' | 'bottom';\n\n/**\n * x軞の䞡端の蟺を瀺したす。\n */\nexport type ScrollXSide = 'left' | 'right';\n\n/**\n * コンテナの4蟺を瀺したす。\n */\nexport type ScrollSide = ScrollYSide | ScrollXSide;\n\n/**\n * コンテナの蟺ぞスクロヌルさせる際のタヌゲット指定のパタヌンです。\n */\nexport type ScrollToSideTargets =\n | ScrollSide\n | [ScrollSide]\n | [ScrollYSide, ScrollXSide]\n | [ScrollXSide, ScrollYSide];\n\n/**\n * コンテナをいずれかの蟺たでスクロヌルしたす。\n * @param targets - 蟺を指定したす。シングルの文字列、及び配列に察応しおいたす。\n * @param options - スクロヌルオプション\n */\nexport function scrollToSide(\n targets: ScrollToSideTargets,\n options?: ScrollOptions,\n): ScrollResult {\n const sides: ScrollSide[] = typeof targets === 'string' ? [targets] : targets;\n const position: Partial<ScrollPosition> = {};\n\n const hasRight = sides.includes('right');\n const hasBottom = sides.includes('bottom');\n\n if (sides.includes('top')) {\n position.y = 0;\n }\n\n if (sides.includes('left')) {\n position.x = 0;\n }\n\n if (hasRight || hasBottom) {\n const container =\n (options && options.container) || defaultSettings.container;\n const $container = $(container) as HTMLElement;\n if (!$container) throw error(`missing container ${container}`);\n\n if (hasRight) position.x = $container.scrollWidth;\n if (hasBottom) position.y = $container.scrollHeight;\n }\n\n return scrollTo(position, options);\n}\n\n/**\n * コンテナを䞊蟺たでスクロヌルしたす。\n * @param options - スクロヌルオプション\n */\nexport function scrollToTop(options?: ScrollOptions) {\n return scrollToSide('top', options);\n}\n\n/**\n * コンテナを右蟺たでスクロヌルしたす。\n * @param options - スクロヌルオプション\n */\nexport function scrollToRight(options?: ScrollOptions) {\n return scrollToSide('right', options);\n}\n\n/**\n * コンテナを䞋蟺たでスクロヌルしたす。\n * @param options - スクロヌルオプション\n */\nexport function scrollToBottom(options?: ScrollOptions) {\n return scrollToSide('bottom', options);\n}\n\n/**\n * コンテナを巊蟺たでスクロヌルしたす。\n * @param options - スクロヌルオプション\n */\nexport function scrollToLeft(options?: ScrollOptions) {\n return scrollToSide('left', options);\n}\n\n/**\n * コンテナを巊䞊コヌナヌたでスクロヌルしたす。\n * @param options - スクロヌルオプション\n */\nexport function scrollToLeftTop(options?: ScrollOptions) {\n return scrollToSide(['left', 'top'], options);\n}\n\n/**\n * コンテナを巊䞋コヌナヌたでスクロヌルしたす。\n * @param options - スクロヌルオプション\n */\nexport function scrollToLeftBottom(options?: ScrollOptions) {\n return scrollToSide(['left', 'bottom'], options);\n}\n\n/**\n * コンテナを右䞊コヌナヌたでスクロヌルしたす。\n * @param options - スクロヌルオプション\n */\nexport function scrollToRightTop(options?: ScrollOptions) {\n return scrollToSide(['right', 'top'], options);\n}\n\n/**\n * コンテナを右䞋コヌナヌたでスクロヌルしたす。\n * @param options - スクロヌルオプション\n */\nexport function scrollToRightBottom(options?: ScrollOptions) {\n return scrollToSide(['right', 'bottom'], options);\n}\n","import { EV } from '@fastkit/ev';\nimport {\n visibilityManager,\n VisibilityStateListener,\n} from '@fastkit/visibility';\nimport { IN_WINDOW } from '@fastkit/helpers';\nimport { isDocumentElement, isBodyElement } from './util';\nimport { logger } from './logger';\n\nimport { enableScroll, disableScroll } from './prevent-scroll';\n\nimport {\n ScrollPosition,\n ScrollOptions,\n ScrollBaseSettings,\n ScrollToElementTarget,\n ScrollResult,\n ScrollerScrollOptions,\n ScrollToElementSettings,\n scrollToElementSettingsDefaults as _scrollToElementSettingsDefaults,\n scrollBy,\n scrollTo,\n scrollToElement,\n scrollToSide,\n scrollToTop,\n scrollToRight,\n scrollToBottom,\n scrollToLeft,\n scrollToLeftTop,\n scrollToLeftBottom,\n scrollToRightTop,\n scrollToRightBottom,\n ScrollToSideTargets,\n ScrollToElementOptions,\n} from './scroll';\n\nimport { defaultBaseSettings } from './scroll/schemes';\n\nexport * from './prevent-scroll';\n\nexport * from './scroll';\n\nexport type ScrollToElementAdditionalOffset =\n | number\n | { x?: number; y?: number }\n | ((scroller: Scroller) => number | { x?: number; y?: number } | undefined);\n\n/**\n * [[Scroller]]を任意のElementたでスクロヌルさせる際のオプションです。\n * 詳现は [[ScrollerScrollOptions]] 及び、 [[ScrollToElementSettings]] を参照しおください。\n */\nexport type ScrollerScrollToElementOptions = Partial<\n ScrollerScrollOptions & ScrollToElementSettings\n>;\n\n// Scroller は蚭定されたコンテキスト芁玠に応じおscrollやsize怜知のリスナを\n// window か 自身のelementに切り替えたす\ntype ScrollerEventTarget = Window | Element;\n\n/**\n * Scrollerに瞊スクロヌルが発生した際の方向を瀺すTypeです。\n */\nexport type ScrollYDirection = 'top' | 'bottom';\n\n/**\n * Scrollerに暪スクロヌルが発生した際の方向を瀺すTypeです。\n */\nexport type ScrollXDirection = 'left' | 'right';\n\n/**\n * Scrollerにスクロヌルが発生した際の方向を瀺すTypeです。\n */\nexport type ScrollDirection = ScrollYDirection | ScrollXDirection;\n\n/**\n * スクロヌルの軞を瀺したす。\n * xは氎平、\n * yは垂盎をそれぞれ瀺したす\n */\nexport type ScrollAxis = 'x' | 'y';\n\nexport interface ScrollSizeObserverSetting {\n interval: number;\n width: boolean;\n height: boolean;\n}\n\n/**\n * Scrollerの基本セッティングです。\n * 個々のフィヌルドの詳现は[[Scroller]]の同名プロパティを参照しおください。\n */\nexport interface ScrollerSetting {\n el: Element | string | null;\n scrollingJudgeInterval: number;\n baseAxis: ScrollAxis;\n scrollSizeObserver: Partial<ScrollSizeObserverSetting>;\n}\n\n/**\n * Elementのscrollむベントを怜知した際に、通知する情報です\n * 珟圚のスクロヌルポゞションや、スクロヌル開始or前回のtickからのスクロヌル量が枡されたす。\n */\nexport interface ScrollerPayload {\n /**\n * [[Scroller.scrollTop]] が枡されたす\n */\n top: number;\n\n /**\n * [[Scroller.scrollLeft]] が枡されたす\n */\n left: number;\n\n /**\n * [[Scroller.scrollBottom]] が枡されたす\n */\n bottom: number;\n\n /**\n * [[Scroller.scrollRight]] が枡されたす\n */\n right: number;\n\n /**\n * 発生したスクロヌルの軞が枡されたす。\n * 斜めスクロヌルが発生した際は、x、yのうち移動量が倧きいものが自動刀定されお枡されたす。\n * どちらも同じ移動量であった堎合は[[Scroller.baseAxis]]の蚭定倀が枡されたす。\n */\n axis: ScrollAxis;\n\n /**\n * 発生したスクロヌルの方向が枡されたす。\n * 斜めスクロヌルが発生した際は、x、yのうち移動量が倧きいものが自動刀定されお枡されたす。\n * どちらも同じ移動量であった堎合は[[Scroller.baseAxis]]の蚭定倀が枡されたす。\n */\n direction: ScrollDirection;\n\n /**\n * 発生したスクロヌルの氎平方向が枡されたす。\n */\n directionX: ScrollXDirection;\n\n /**\n * 発生したスクロヌルの垂盎方向が枡されたす。\n */\n directionY: ScrollYDirection;\n\n // tick amount at element.on('scroll') detect\n\n /**\n * [[Scroller.on]]('scroll')時の前回からの氎平移動量が枡されたす。\n */\n tickedX: number;\n\n /**\n * [[Scroller.on]]('scroll')時の前回からの垂盎移動量が枡されたす。\n */\n tickedY: number;\n\n /**\n * [[Scroller.on]]('scrollStart')時からの合蚈氎平移動量が枡されたす。\n */\n totalX: number;\n\n /**\n * [[Scroller.on]]('scrollStart')時からの合蚈垂盎移動量が枡されたす。\n */\n totalY: number;\n}\n\n/**\n * Scrollerは蚭定されたElementのスクロヌル開始、tick、終了を怜知し\n * むベントを通知したす。\n * これらのむベントを賌読する事でスクロヌル量や移動方向を怜知可胜です。\n */\nexport interface ScrollerScrollEventMap {\n /**\n * スクロヌルの開始時に発生したす。\n */\n scrollStart: ScrollerPayload;\n\n /**\n * 毎スクロヌル怜知時に発生したす。\n */\n scroll: ScrollerPayload;\n\n /**\n * スクロヌルの終了時に発生したす。\n */\n scrollEnd: ScrollerPayload;\n}\n\n/**\n * Scrollerに発生するむベントの党おです。\n */\nexport interface ScrollerEventMap extends ScrollerScrollEventMap {\n /**\n * Scrollerが利甚可胜になった時Elementが蚭定されお初期化が完了したに発生したす。\n */\n ready: void;\n\n /**\n * [[Scroller.state]]が倉曎された時に発生したす。\n */\n changeState: ScrollerState;\n\n /**\n * [[Scroller.el]]のサむズ倉曎を怜知した際に発生したす。\n */\n resize: { width: number; height: number };\n\n /**\n * [[Scroller.lastAxis]]の倉曎を怜知した際に発生したす。\n */\n changeAxis: ScrollAxis;\n\n /**\n * [[Scroller.lastDirection]]の倉曎を怜知した際に発生したす。\n */\n changeLastDirection: ScrollDirection;\n\n /**\n * [[Scroller.lastYDirection]]の倉曎を怜知した際に発生したす。\n */\n changeLastYDirection: ScrollYDirection;\n\n /**\n * [[Scroller.lastXDirection]]の倉曎を怜知した際に発生したす。\n */\n changeLastXDirection: ScrollXDirection;\n}\n\n/**\n * Scrollerの状態を瀺したす。\n */\n// eslint-disable-next-line no-shadow\nexport enum ScrollerState {\n /**\n * Scrollerが初期化されおいないElementが蚭定されおいない状態を瀺したす。\n */\n Pending = 'pending',\n\n /**\n * Scrollerが初期化されおいるが、[[Scroller.el]]のリサむズやスクロヌルのむベント監芖が動䜜しおいない状態を瀺したす。\n */\n Ready = 'ready',\n\n /**\n * Scrollerが初期化されおいお、[[Scroller.el]]のリサむズやスクロヌルのむベント監芖が動䜜しおいる状態を瀺したす。\n */\n Running = 'running',\n\n /**\n * [[Scroller.destroy]]が実行され、Scrollerが利甚䞍可である状態を瀺したす。\n */\n Destroyed = 'destroyed',\n}\n\n/**\n * Scrollerクラスの状態を監芖同期するオブゞェクトが\n * 保有すべきプロパティ䞀芧です。\n * 個々のプロパティ名は、同名のScrollerクラスのプロパティを参照しお䞋さい\n */\nexport interface ScrollerObserver {\n state: ScrollerState;\n isPending: boolean;\n isReady: boolean;\n isRunning: boolean;\n isDestroyed: boolean;\n scrollEnabled: boolean;\n containerWidth: number;\n containerHeight: number;\n scrollWidth: number;\n scrollHeight: number;\n scrollableX: boolean;\n scrollableY: boolean;\n scrollTop: number;\n scrollLeft: number;\n scrollRight: number;\n scrollBottom: number;\n lastAxis: ScrollAxis;\n lastDirection: ScrollDirection;\n lastYDirection: ScrollYDirection;\n lastXDirection: ScrollXDirection;\n nowScrolling: boolean;\n}\n\n/**\n * Scrollerクラスの状態を監芖同期するオブゞェクトが\n * 保有すべきプロパティ䞀のキヌ芧です。\n */\nexport type ScrollerObservableKeys = keyof ScrollerObserver;\nconst scrollerObservableKeys: ScrollerObservableKeys[] = [\n 'state',\n 'isPending',\n 'isReady',\n 'isRunning',\n 'isDestroyed',\n 'scrollEnabled',\n 'containerWidth',\n 'containerHeight',\n 'scrollWidth',\n 'scrollHeight',\n 'scrollableX',\n 'scrollableY',\n 'scrollTop',\n 'scrollLeft',\n 'scrollRight',\n 'scrollBottom',\n 'lastAxis',\n 'lastDirection',\n 'lastYDirection',\n 'lastXDirection',\n 'nowScrolling',\n];\n\n/**\n * スクロヌルを停止させるための゜ヌスオブゞェクト\n */\nexport type ScrollStopper = number | string | Record<string, unknown> | symbol;\n\n/**\n * 任意のElementor HTML Documentのスクロヌルやサむズ倉曎を監芖し、その情報を通知するクラスです。<br>\n * <a href=\"https://dadajam4.github.io/dadajam4/ev/classes/_ev_.ev.html\" target=\"_blank\">EV</a>を継承しおおり、むベントの賌読[[Scroller.on]]等のむンタヌフェヌスを利甚するか、\n * [[Scroller.observe]]メ゜ッドを利甚したす。<br>\n * [[Scroller.on]]、[[Scroller.once]]で賌読可胜なむベントに぀いおは[[ScrollerEventMap]]を参照しおください。\n */\nexport class Scroller extends EV<ScrollerEventMap> {\n /**\n * Scrollerクラスの状態を監芖同期するオブゞェクトが\n * 保有すべきプロパティ䞀のキヌの配列です。\n */\n static readonly scrollerObservableKeys = scrollerObservableKeys;\n\n /**\n * Scrollerの状態を瀺すenum倀です。\n * {@link ScrollerState}\n */\n static readonly States = ScrollerState;\n\n /**\n * スクロヌルを怜知しおから、移動がなくなった際に、䜕ms埌にスクロヌル終了ず刀定するかのむンタヌバル倀を瀺したす。\n * デフォルトは500です。\n */\n scrollingJudgeInterval = 500;\n\n /**\n * 瞊、暪のどちらのスクロヌルを基準ずするかを瀺したす。\n * デフォルトはyです。<br>\n * この蚭定は[[Scroller.toElement]]のデフォルト倀にも圱響したす。\n */\n baseAxis: ScrollAxis = 'y';\n\n /**\n * スクロヌル系メ゜ッド[[Scroller.to]]等を利甚する際のデフォルトの蚭定を瀺したす。\n */\n scrollSettingsDefaults: ScrollBaseSettings = { ...defaultBaseSettings };\n\n /**\n * [[Scroller.toElement]]のデフォルトオプションの蚭定を瀺したす。\n */\n scrollToElementSettingsDefaults: ScrollerScrollToElementOptions = {\n ..._scrollToElementSettingsDefaults,\n };\n\n scrollSizeObserver?: ScrollSizeObserverSetting;\n\n /**\n * 蚭定されたElement芁玠です。\n * 初期化が完了しおいない時には本getterはundefinedを返华する事に泚意しおください。\n */\n get el() {\n return this._el;\n }\n\n /**\n * 珟圚の状態です。<br>\n * {@link ScrollerState}\n */\n get state(): ScrollerState {\n return this._state;\n }\n\n /**\n * 未初期化である堎合trueを瀺したす。\n */\n get isPending(): boolean {\n return this._state === ScrollerState.Pending;\n }\n\n /**\n * 初期化枈み停止状態である堎合trueを瀺したす。\n */\n get isReady(): boolean {\n return this._state === ScrollerState.Ready;\n }\n\n /**\n * 初期化枈み動䜜䞭である堎合trueを瀺したす。\n */\n get isRunning(): boolean {\n return this._state === ScrollerState.Running;\n }\n\n /**\n * むンスタンスが砎棄枈みである堎合trueを瀺したす。\n */\n get isDestroyed(): boolean {\n return this._state === ScrollerState.Destroyed;\n }\n\n /**\n * スクロヌルの有効状態を取埗したす\n */\n get scrollEnabled(): boolean {\n return this._scrollStoppers.length === 0;\n }\n\n /**\n * スクロヌル芁玠の幅を瀺したす。\n */\n get containerWidth(): number {\n return this._containerWidth;\n }\n\n /**\n * スクロヌル芁玠の高さを瀺したす。\n */\n get containerHeight(): number {\n return this._containerHeight;\n }\n\n /**\n * スクロヌル芁玠内のコンテンツの幅を瀺したす。\n */\n get scrollWidth(): number {\n return this._scrollWidth;\n }\n\n /**\n * スクロヌル芁玠内のコンテンツの高さを瀺したす。\n */\n get scrollHeight(): number {\n return this._scrollHeight;\n }\n\n /**\n * x軞にスクロヌル可胜な堎合trueを瀺したす\n */\n get scrollableX(): boolean {\n return this._scrollWidth > this._containerWidth;\n }\n\n /**\n * y軞にスクロヌル可胜な堎合trueを瀺したす\n */\n get scrollableY(): boolean {\n return this._scrollHeight > this._containerHeight;\n }\n\n /**\n * 珟圚の䞊蟺からのスクロヌル量を瀺したす。\n */\n get scrollTop(): number {\n return this._scrollTop;\n }\n\n set scrollTop(scrollTop: number) {\n if (!this.el) return;\n this.el.scrollTop = scrollTop;\n }\n\n /**\n * 珟圚の右蟺からのスクロヌル量を瀺したす。\n */\n get scrollRight(): number {\n return this._scrollRight;\n }\n\n set scrollRight(scrollRight: number) {\n if (!this.el) return;\n this.el.scrollLeft = this._scrollWidth - this._containerWidth - scrollRight;\n }\n\n /**\n * 珟圚の䞋蟺からのスクロヌル量を瀺したす。\n */\n get scrollBottom(): number {\n return this._scrollBottom;\n }\n\n set scrollBottom(scrollBottom: number) {\n if (!this.el) return;\n this.el.scrollTop =\n this._scrollHeight - this._containerHeight - scrollBottom;\n }\n\n /**\n * 珟圚の巊蟺からのスクロヌル量を瀺したす。\n */\n get scrollLeft(): number {\n return this._scrollLeft;\n }\n\n set scrollLeft(scrollLeft: number) {\n if (!this.el) return;\n this.el.scrollLeft = scrollLeft;\n }\n\n /**\n * 珟圚スクロヌル䞭である堎合trueを瀺したす。\n */\n get nowScrolling(): boolean {\n return this._nowScrolling;\n }\n\n /**\n * 最埌に怜知したスクロヌルの軞を瀺したす。\n */\n get lastAxis(): ScrollAxis {\n return this._lastAxis;\n }\n\n /**\n * 最埌に怜知したスクロヌルの方向を瀺したす。\n */\n get lastDirection(): ScrollDirection {\n return this._lastDirection;\n }\n\n /**\n * 最埌に怜知したスクロヌルの垂盎方向を瀺したす。\n */\n get lastYDirection(): ScrollYDirection {\n return this._lastYDirection;\n }\n\n /**\n * 最埌に怜知したスクロヌルの氎平方向を瀺したす。\n */\n get lastXDirection(): ScrollXDirection {\n return this._lastXDirection;\n }\n\n /**\n * 最埌に怜知したスクロヌルにより通知した情報を瀺したす。\n */\n get lastPayload(): ScrollerPayload {\n return {\n top: this._scrollTop,\n left: this._scrollLeft,\n bottom: this._scrollBottom,\n right: this._scrollRight,\n axis: this._lastAxis,\n direction: this._lastDirection,\n directionX: this._lastXDirection,\n directionY: this._lastYDirection,\n tickedX: this._tickedX,\n tickedY: this._tickedY,\n totalX: this._lastTotalX,\n totalY: this._lastTotalY,\n };\n }\n\n private _el!: Element | null;\n\n private _eventTarget!: ScrollerEventTarget;\n\n private _isDocumentElement = false;\n\n private _isBodyElement = false;\n\n private _isRootElement = false;\n\n private _state: ScrollerState = ScrollerState.Pending;\n\n private _containerWidth = 0;\n\n private _containerHeight = 0;\n\n private _scrollWidth = 0;\n\n private _scrollHeight = 0;\n\n private _scrollTop = 0;\n\n private _scrollRight = 0;\n\n private _scrollBottom = 0;\n\n private _scrollLeft = 0;\n\n private _lastAxis: ScrollAxis;\n\n private _lastDirection: ScrollDirection;\n\n private _lastYDirection: ScrollYDirection = 'top';\n\n private _lastXDirection: ScrollXDirection = 'left';\n\n private _nowScrolling = false;\n\n // eslint-disable-next-line @typescript-eslint/ban-types\n private _readyResolvers: Function[] = [];\n\n private _scrollingJudgeTimerId: number | null = null;\n\n private _startX = 0;\n\n private _startY = 0;\n\n private _tickedX = 0;\n\n private _tickedY = 0;\n\n private _lastTotalX = 0;\n\n private _lastTotalY = 0;\n\n private _scrollListener?: EventListener;\n\n private _resizeListener?: EventListener;\n\n private _resizeObserver?: ResizeObserver;\n\n private _scrollToResult: ScrollResult | null = null;\n\n private _observers: ScrollerObserver[] = [];\n\n private _scrollStoppers: ScrollStopper[] = [];\n\n private _scrollSizeObserverPollingId: number | null = null;\n\n private _scrollSizeObserverSuspended = false;\n\n private _visibilityListener: VisibilityStateListener;\n\n /**\n * Scrollerむンスタンスを䜜成したす。\n * コンテキストずなるElementをこの時点で指定するか吊かは任意です。\n *\n * @param settingOrElementOrQueryString - 任意です。{@link ScrollerSetting}か Elementor cssク゚リセレクタ文字列を盎接指定したす。この時点でElementを指定しない堎合は、[[setElement]]を実行するたでむンスタンスは動䜜したせん。\n */\n constructor(\n settingOrElementOrQueryString:\n | Partial<ScrollerSetting>\n | Element\n | string = {},\n ) {\n super();\n\n const convertedSetting: Partial<ScrollerSetting> =\n typeof settingOrElementOrQueryString === 'string' ||\n settingOrElementOrQueryString === null ||\n (IN_WINDOW && settingOrElementOrQueryString instanceof Element)\n ? (settingOrElementOrQueryString = {\n el: <Element | string>settingOrElementOrQueryString,\n })\n : (settingOrElementOrQueryString as Partial<ScrollerSetting>);\n\n if (convertedSetting.scrollingJudgeInterval !== undefined)\n this.scrollingJudgeInterval = convertedSetting.scrollingJudgeInterval;\n\n if (convertedSetting.baseAxis) this.baseAxis = convertedSetting.baseAxis;\n this._lastAxis = this.baseAxis;\n\n const { scrollSizeObserver } = convertedSetting;\n if (scrollSizeObserver) {\n this.scrollSizeObserver = {\n interval: 500,\n width: true,\n height: true,\n ...scrollSizeObserver,\n };\n }\n\n this._visibilityListener = () => {\n if (visibilityManager.isVisible) {\n this.update();\n if (this._scrollSizeObserverSuspended) {\n this._scrollSizeObserverSuspended = false;\n this._startScrollSizeObserver();\n }\n } else {\n this._scrollSizeObserverSuspended =\n this._scrollSizeObserverPollingId !== null;\n this._stopScrollSizeObserver();\n }\n };\n\n this._lastDirection = this._lastAxis === 'y' ? 'top' : 'left';\n\n // for SSR\n if (!IN_WINDOW) return;\n\n // Add Visibility Listener\n visibilityManager.change(this._visibilityListener);\n\n // Skip auto setup when missing scrolling element.\n this.setElement(convertedSetting.el);\n }\n\n /**\n * むンスタンスにElementを蚭定したす。特別な理由SSRの利甚等によりコンストラクタでElementを指定できない堎合、\n * 本メ゜ッドを利甚しブラりザコンテキスト配䞋で本メ゜ッドを実行しおください。\n * @param el - Element、もしくはCSSク゚リセレクタ文字列を指定したす。\n */\n setElement(el?: Element | string | null) {\n if (el === null) return;\n if (!IN_WINDOW)\n logger.error('Element can be set only when it is under DOM context.');\n\n this.stop();\n\n let _el: Element | null;\n if (typeof el === 'string') {\n _el = document.querySelector(el);\n } else {\n _el = el || document.scrollingElement;\n }\n if (!_el) {\n const message = 'missing scrolling element';\n logger.error(message, el);\n throw new Error(message);\n }\n\n this._el = _el;\n this._isDocumentElement = isDocumentElement(_el);\n this._isBodyElement = isBodyElement(_el);\n this._isRootElement = this._isDocumentElement || this._isBodyElement;\n this._eventTarget =\n this._isDocumentElement || this._isBodyElement ? window : this._el;\n\n this._setup();\n }\n\n private _scrollToElementAdditionalOffset:\n | ScrollToElementAdditionalOffset\n | undefined;\n\n setScrollToElementAdditionalOffset(\n offset: ScrollToElementAdditionalOffset | undefined,\n ) {\n this._scrollToElementAdditionalOffset = offset;\n }\n\n deleteScrollToElementAdditionalOffset() {\n delete this._scrollToElementAdditionalOffset;\n }\n\n /**\n * むンスタンスが実行可胜になった際にresolveされるPromiseむンスタンスを返华したす。\n */\n ready(): Promise<void> {\n this._checkDestroyed();\n if (!this.isPending) return Promise.resolve();\n return new Promise((resolve) => this._readyResolvers.push(resolve));\n }\n\n /**\n * むンスタンスの動䜜を開始したす。本むンスタンスはElementが蚭定され初期化された際に自動で動䜜を開始したすが、\n * [[Scroller.stop]]メ゜ッドを利甚し動䜜を停止した埌に再開する堎合に本メ゜ッドを利甚したす。\n */\n async start(): Promise<void> {\n this._checkDestroyed();\n if (this.isRunning) return;\n await this.ready();\n this._startListeners();\n this._setState(ScrollerState.Running);\n }\n\n /**\n * むンスタンスの動䜜スクロヌル、リサむズむベントの怜知等を停止したす。\n * 䜕らかの理由で動䜜を停止させたい堎合に利甚しおください。\n * 本メ゜ッドを実行埌もむンスタンス内の状態は保持されたたたです。\n * 完党にむンスタンスを砎棄するためには[[Scroller.destroy]]を利甚しおください。\n */\n stop(): void {\n this._checkDestroyed();\n if (!this.isRunning) return;\n this._stopListeners();\n this._setState(ScrollerState.Ready);\n }\n\n /**\n * むンスタンスの動䜜を停止し、内郚情報を完党に砎棄したす。\n * これに䌎い、スクロヌル䞭であった堎合にはキャンセルされ、以埌むベント通知は完党に行われたせん。\n * たた[[Scroller.start]]メ゜ッドでの再利甚も䞍可ずなりたす。\n * 本むンスタンスの利甚を完党に停止する堎合に必ず実行し、利甚偎のオブゞェクト等においお本むンスタンスぞの参照を完党に削陀しおください。\n * 本メ゜ッドはSPA等でのサヌビスにおいおは意識的に実行する事を匷く掚奚したす。\n */\n destroy() {\n if (this.isDestroyed) return;\n this.stop();\n this.cancel();\n this._readyResolvers = [];\n this._scrollStoppers = [];\n this._scrollEnable();\n this._observers = [];\n visibilityManager.remove(this._visibilityListener);\n\n delete (this as any)._el;\n delete (this as any)._eventTarget;\n delete this._scrollListener;\n delete this._resizeListener;\n delete (this as any)._resizeObserver;\n delete (this as any)._scrollToResult;\n delete (this as any)._visibilityListener;\n\n this.deleteScrollToElementAdditionalOffset();\n this._setState(ScrollerState.Destroyed);\n this.offAll();\n }\n\n /**\n * むンスタンス内郚のスクロヌル量や、Elementのサむズを匷制的に曎新したす。\n * 基本的に利甚が必芁なケヌスはありたせんが、䜕らかの理由で曎新をトリガヌしたい堎合に利甚したす。\n */\n update(): void {\n this._update();\n }\n\n /**\n * むンスタンス内の情報をjsonオブゞェクトずしお返华したす。\n * 情報の詳现は[[ScrollerObserver]]を参照しおください。\n */\n toJSON(): ScrollerObserver {\n const json: Partial<ScrollerObserver> = {};\n for (const key of scrollerObservableKeys) {\n json[key] = this[key] as any;\n }\n return <ScrollerObserver>json;\n }\n\n /**\n * [[Scroller.toJSON]]の情報を文字列ずしお返华したす。\n */\n toString(): string {\n return JSON.stringify(this.toJSON());\n }\n\n /**\n * 本むンスタンスの情報を賌読するためのオブゞェクトを蚭定する事で、\n * むンスタンスの内郚情報が倉曎される床にパラメヌタが同期されたす。\n * 蚭定するオブゞェクトは[[ScrollerObserver]]のむンタヌフェヌスを満たしおいれば内容は問いたせん。\n * 本機胜により同期される方法は単玔にオブゞェクトプロパティぞの倉数代入です。\n * 埓っお察象ずなるプロパティをgetterずしお実装Ex: Vue computed等、、しおおく事により、\n * 同期を受け取るオブゞェクト偎でパラメヌタ倉曎埌の動䜜をリアクティブに実装可胜です。\n * @param observer - 同期させたいオブゞェクト\n * @returns 同期を停止するためのメ゜ッド\n */\n observe(observer: ScrollerObserver): () => void {\n if (!this._observers.includes(observer)) {\n this._observers.push(observer);\n }\n this._syncToObserver(observer);\n const unobserve = () => {\n this.unobserve(observer);\n };\n return unobserve;\n }\n\n /**\n * [[Scroller.observe]]でパラメヌタ同期䞭のオブゞェクトを停止したす。\n * [[Scroller.destroy]]実行時にも、同期䞭のオブゞェクトは党停止されたすが、destroy前に任意のタむミングで停止したい堎合\n * 本メ゜ッドを利甚したす。\n * @param observer - 同期䞭のオブゞェクト\n */\n unobserve(observer: ScrollerObserver) {\n const index = this._observers.indexOf(observer);\n if (index !== -1) {\n this._observers.splice(index, 1);\n }\n }\n\n /**\n * スクロヌル䞭であった堎合、スクロヌルをキャンセルしたす。\n */\n cancel() {\n if (!this._scrollToResult) return;\n this._scrollToResult.cancel();\n this._clearScrollToResult();\n }\n\n /**\n * x, yの差分pxを指定しスクロヌルしたす。\n * メ゜ッド、パラメヌタの詳现は[[scrollBy]]を参照しおください。\n * @param diffX - 暪移動量\n * @param diffY - 瞊移動量\n * @param options - スクロヌルオプション\n */\n by(\n diffX: number,\n diffY: number,\n options?: ScrollerScrollOptions,\n ): ScrollResult {\n return this._setScrollToResult(\n scrollBy(diffX, diffY, this._createMergedScrollOptions(options)),\n );\n }\n\n /**\n * 指定の座暙ぞスクロヌルしたす。\n * メ゜ッド、パラメヌタの詳现は[[scrollTo]]を参照しおください。\n * @param scrollPosition - 座暙\n * @param options - スクロヌルオプション\n */\n to(\n scrollPosition: Partial<ScrollPosition>,\n options?: ScrollerScrollOptions,\n ): ScrollResult {\n return this._setScrollToResult(\n scrollTo(scrollPosition, this._createMergedScrollOptions(options)),\n );\n }\n\n /**\n * 指定の芁玠の䜍眮ぞスクロヌルしたす。\n * メ゜ッド、パラメヌタの詳现は[[scrollToElement]]を参照しおください。\n * オプションのx, yが未蚭定であった堎合、[[Scroller.baseAxis]]により自動蚭定されたす。\n * @param target - スクロヌル先の芁玠\n * @param options - スクロヌルオプション\n */\n toElement(\n target: ScrollToElementTarget,\n options?: ScrollerScrollToElementOptions,\n ) {\n const merged = this._createMergedScrollToElementOptions(options);\n if (merged.x === undefined) merged.x = this.baseAxis === 'x';\n if (merged.y === undefined) merged.y = this.baseAxis === 'y';\n\n return this._setScrollToResult(scrollToElement(target, merged));\n }\n\n /**\n * 指定の蟺ぞスクロヌルしたす。\n * メ゜ッド、パラメヌタの詳现は[[scrollToSide]]を参照しおください。\n * @param targets - スクロヌル先\n * @param options - スクロヌルオプション\n */\n toSide(\n targets: ScrollToSideTargets,\n options?: ScrollerScrollOptions,\n ): ScrollResult {\n return this._setScrollToResult(\n scrollToSide(targets, this._createMergedScrollOptions(options)),\n );\n }\n\n /**\n * 䞊蟺ぞスクロヌルしたす。\n * メ゜ッド、パラメヌタの詳现は[[scrollToTop]]を参照しおください。\n * @param options - スクロヌルオプション\n */\n toTop(options?: ScrollerScrollOptions) {\n return this._setScrollToResult(\n scrollToTop(this._createMergedScrollOptions(options)),\n );\n }\n\n /**\n * 右蟺ぞスクロヌルしたす。\n * メ゜ッド、パラメヌタの詳现は[[scrollToRight]]を参照しおください。\n * @param options - スクロヌルオプション\n */\n toRight(options?: ScrollerScrollOptions) {\n return this._setScrollToResult(\n scrollToRight(this._createMergedScrollOptions(options)),\n );\n }\n\n /**\n * 䞋蟺ぞスクロヌルしたす。\n * メ゜ッド、パラメヌタの詳现は[[scrollToBottom]]を参照しおください。\n * @param options - スクロヌルオプション\n */\n toBottom(options?: ScrollerScrollOptions) {\n return this._setScrollToResult(\n scrollToBottom(this._createMergedScrollOptions(options)),\n );\n }\n\n /**\n * 巊蟺ぞスクロヌルしたす。\n * メ゜ッド、パラメヌタの詳现は[[scrollToLeft]]を参照しおください。\n * @param options - スクロヌルオプション\n */\n toLeft(options?: ScrollerScrollOptions) {\n return this._setScrollToResult(\n scrollToLeft(this._createMergedScrollOptions(options)),\n );\n }\n\n /**\n * 巊䞊コヌナヌぞスクロヌルしたす。\n * メ゜ッド、パラメヌタの詳现は[[scrollToLeftTop]]を参照しおください。\n * @param options - スクロヌルオプション\n */\n toLeftTop(options?: ScrollerScrollOptions) {\n return this._setScrollToResult(\n scrollToLeftTop(this._createMergedScrollOptions(options)),\n );\n }\n\n /**\n * 巊䞋コヌナヌぞスクロヌルしたす。\n * メ゜ッド、パラメヌタの詳现は[[scrollToLeftBottom]]を参照しおください。\n * @param options - スクロヌルオプション\n */\n toLeftBottom(options?: ScrollerScrollOptions) {\n return this._setScrollToResult(\n scrollToLeftBottom(this._createMergedScrollOptions(options)),\n );\n }\n\n /**\n * 右䞊コヌナヌぞスクロヌルしたす。\n * メ゜ッド、パラメヌタの詳现は[[scrollToRightTop]]を参照しおください。\n * @param options - スクロヌルオプション\n */\n toRightTop(options?: ScrollerScrollOptions) {\n return this._setScrollToResult(\n scrollToRightTop(this._createMergedScrollOptions(options)),\n );\n }\n\n /**\n * 右䞋コヌナヌぞスクロヌルしたす。\n * メ゜ッド、パラメヌタの詳现は[[scrollToRightBottom]]を参照しおください。\n * @param options - スクロヌルオプション\n */\n toRightBottom(options?: ScrollerScrollOptions) {\n return this._setScrollToResult(\n scrollToRightBottom(this._createMergedScrollOptions(options)),\n );\n }\n\n /**\n * スクロヌルの停止を芁求したす。\n * @param stopper - 停止芁求゜ヌス\n */\n pushScrollStopper(stopper: ScrollStopper) {\n if (!this._scrollStoppers.includes(stopper)) {\n this._scrollStoppers.push(stopper);\n if (this._scrollStoppers.length === 1) {\n this._updateScrollable();\n this._syncToObservers(['scrollEnabled']);\n }\n }\n return () => {\n this.removeScrollStopper(stopper);\n };\n }\n\n /**\n * スクロヌルの停止芁求を解陀したす。<br>\n * 別のプロセスにより異なる[[ScrollStopper]]が登録されおいる堎合、\n * スクロヌルは再開されない事に泚意しおください。\n * @param stopper - 停止芁求゜ヌス\n */\n removeScrollStopper(stopper: ScrollStopper) {\n const index = this._scrollStoppers.indexOf(stopper);\n if (index !== -1) {\n this._scrollStoppers.splice(index, 1);\n if (this._scrollStoppers.length === 0) {\n this._updateScrollable();\n this._syncToObservers(['scrollEnabled']);\n }\n }\n }\n\n private async _setup(): Promise<void> {\n this._updateScrollable();\n this._update();\n this._setState(ScrollerState.Ready);\n this.start();\n this.emit('ready', undefined);\n this._readyResolvers.forEach((resolve) => resolve());\n this._readyResolvers = [];\n }\n\n private _setState(state: ScrollerState): void {\n if (this._state !== state) {\n this._state = state;\n this._syncToObservers([\n 'state',\n 'isPending',\n 'isReady',\n 'isRunning',\n 'isDestroyed',\n ]);\n this.emit('changeState', state);\n }\n }\n\n private _checkDestroyed(): void {\n if (this.isDestroyed) {\n const message = 'already destroyed.';\n logger.error(message);\n throw new Error(message);\n }\n }\n\n private _update(width?: number, height?: number): void {\n this._updateContainerSize(width, height);\n this._updateScrollSize();\n this._updateScrollPositions();\n }\n\n private _updateContainerSize(width?: number, height?: number): void {\n const { el, _isBodyElement } = this;\n if (width === undefined) {\n if (!el) return;\n width = _isBodyElement\n ? (document.documentElement as HTMLElement).clientWidth\n : el.clientWidth;\n }\n\n if (height === undefined) {\n if (!el) return;\n height = _isBodyElement\n ? (document.documentElement as HTMLElement).clientHeight\n : el.clientHeight;\n }\n\n const { _containerWidth, _containerHeight } = this;\n this._containerWidth = width;\n this._containerHeight = height;\n if (width !== _containerWidth || height !== _containerHeight) {\n this._syncToObservers([\n 'containerWidth',\n 'containerHeight',\n 'scrollableX',\n 'scrollableY',\n ]);\n this.emit('resize', { width, height });\n }\n }\n\n private _updateScrollSize(): void {\n const { el, _scrollWidth, _scrollHeight } = this;\n if (!el) return;\n this._scrollWidth = el.scrollWidth;\n this._scrollHeight = el.scrollHeight;\n if (\n _scrollWidth !== this._scrollWidth ||\n _scrollHeight !== this._scrollHeight\n ) {\n this._syncToObservers([\n 'scrollWidth',\n 'scrollHeight',\n 'scrollableX',\n 'scrollableY',\n ]);\n }\n }\n\n private _startScrollSizeObserver() {\n if (!IN_WINDOW) return;\n\n this._stopScrollSizeObserver();\n\n if (this.scrollSizeObserver) {\n this._scrollSizeObserverPollingId = window.setInterval(() => {\n if (!this.scrollSizeObserver || this.isDestroyed) {\n this._stopScrollSizeObserver();\n return;\n }\n\n this._updateScrollSize();\n }, this.scrollSizeObserver.interval);\n }\n }\n\n private _stopScrollSizeObserver() {\n if (this._scrollSizeObserverPollingId !== null) {\n clearInterval(this._scrollSizeObserverPollingId);\n this._scrollSizeObserverPollingId = null;\n }\n }\n\n private _updateScrollPositions(): void {\n if (!this.el) return;\n this._scrollTop = this.el.scrollTop;\n this._scrollLeft = this.el.scrollLeft;\n\n // advanced values\n this._scrollBottom =\n this._scrollHeight - this._scrollTop - this._containerHeight;\n this._scrollRight =\n this._scrollWidth - this._scrollLeft - this._containerWidth;\n\n this._syncToObservers([\n 'scrollTop',\n 'scrollRight',\n 'scrollBottom',\n 'scrollLeft',\n ]);\n }\n\n private _startListeners() {\n this._stopListeners();\n\n this._scrollListener = () => {\n this._onScroll();\n };\n this._eventTarget.addEventListener('scroll', this._scrollListener, false);\n\n if (this._isRootElement) {\n this._resizeListener = () => {\n this._onResize();\n };\n window.addEventListener('resize', this._resizeListener, false);\n } else {\n this._resizeObserver = new ResizeObserver((entries) => {\n for (const entry of entries) {\n const { width, height } = entry.contentRect;\n this._onResize(width, height);\n }\n });\n this._el && this._resizeObserver.observe(this._el);\n }\n\n if (visibilityManager.isVisible) {\n this._scrollSizeObserverSuspended = false;\n this._startScrollSizeObserver();\n } else {\n this._scrollSizeObserverSuspended = true;\n }\n }\n\n private _stopListeners() {\n if (this._scrollListener) {\n this._eventTarget.removeEventListener(\n 'scroll',\n this._scrollListener,\n false,\n );\n delete this._scrollListener;\n }\n\n if (this._resizeListener) {\n if (this._isDocumentElement) {\n window.removeEventListener('resize', this._resizeListener, false);\n delete this._resizeListener;\n }\n }\n\n if (this._resizeObserver && this._el) {\n this._resizeObserver.unobserve(this._el);\n this._resizeObserver.disconnect();\n delete this._resizeObserver;\n }\n }\n\n private _clearScrollingJudgeTimer() {\n if (this._scrollingJudgeTimerId !== null) {\n clearTimeout(this._scrollingJudgeTimerId);\n this._scrollingJudgeTimerId = null;\n }\n }\n\n private _onResize(width?: number, height?: number) {\n this._update(width, height);\n }\n\n private _triggerScrollTick(event: keyof ScrollerScrollEventMap): void {\n const { _nowScrolling } = this;\n\n if (event === 'scrollStart') {\n this._startX = this._scrollLeft;\n this._startY = this._scrollTop;\n this._lastTotalX = 0;\n this._lastTotalY = 0;\n this._nowScrolling = true;\n } else if (event === 'scrollEnd') {\n this._nowScrolling = false;\n }\n\n if (_nowScrolling !== this._nowScrolling) {\n this._syncToObservers('nowScrolling');\n }\n this.emit(event, this.lastPayload);\n }\n\n private _onScroll() {\n if (!this.scrollEnabled && this._el) {\n this._el.scrollLeft = this._scrollLeft;\n this._el.scrollTop = this._scrollTop;\n return;\n }\n\n // remember before values\n const {\n _scrollTop,\n _scrollLeft,\n _lastAxis,\n _lastDirection,\n _lastXDirection,\n _lastYDirection,\n } = this;\n\n // ,,,and next update values\n this._updateScrollPositions();\n\n // calculate scrolled amount at (ticked time)\n const tickedX = this._scrollLeft - _scrollLeft;\n const tickedY = this._scrollTop - _scrollTop;\n this._tickedX = tickedX;\n this._tickedY = tickedY;\n\n // update axis\n if (tickedX === tickedY) {\n this._lastAxis = this.baseAxis;\n } else {\n this._lastAxis = Math.abs(tickedX) > Math.abs(tickedY) ? 'x' : 'y';\n }\n\n // update directions\n if (_scrollTop < this._scrollTop) {\n this._lastYDirection = 'bottom';\n } else if (_scrollTop > this._scrollTop) {\n this._lastYDirection = 'top';\n }\n\n if (_scrollLeft < this._scrollLeft) {\n this._lastXDirection = 'right';\n } else if (_scrollLeft > this._scrollLeft) {\n this._lastXDirection = 'left';\n }\n\n this._lastDirection =\n this._lastAxis === 'y' ? this._lastYDirection : this._lastXDirection;\n\n // judge scroll end by before axis and directions\n const axisIsChanged = this._lastAxis !== _lastAxis;\n const lastXDirectionIsChanged = this._lastXDirection !== _lastXDirection;\n const lastYDirectionIsChanged = this._lastYDirection !== _lastYDirection;\n const lastDirectionIsChanged = this._lastDirection !== _lastDirection;\n\n if (axisIsChanged) {\n this.emit('changeAxis', this._lastAxis);\n }\n\n if (lastXDirectionIsChanged) {\n this.emit('changeLastXDirection', this._lastXDirection);\n }\n\n if (lastYDirectionIsChanged) {\n this.emit('changeLastYDirection', this._lastYDirection);\n }\n\n if (lastDirectionIsChanged) {\n this.emit('changeLastDirection', this._lastDirection);\n }\n\n if (\n axisIsChanged ||\n lastXDirectionIsChanged ||\n lastYDirectionIsChanged ||\n lastDirectionIsChanged\n ) {\n this._syncToObservers([\n 'lastAxis',\n 'lastDirection',\n 'lastYDirection',\n 'lastXDirection',\n ]);\n }\n\n if (this._nowScrolling) {\n if (\n axisIsChanged ||\n (_lastAxis === 'y' && lastYDirectionIsChanged) ||\n (_lastAxis === 'x' && lastXDirectionIsChanged)\n ) {\n // emit scroll end & start(both)\n this._triggerScrollTick('scrollEnd');\n } else {\n // add scroll amounts\n this._lastTotalX = this._scrollLeft - this._startX;\n this._lastTotalY = this._scrollTop - this._startY;\n this._triggerScrollTick('scroll');\n }\n }\n\n // judge scroll start\n if (!this._nowScrolling) {\n this._updateScrollSize();\n this._triggerScrollTick('scrollStart');\n }\n\n this._clearScrollingJudgeTimer();\n this._scrollingJudgeTimerId = window.setTimeout(() => {\n this._triggerScrollTick('scrollEnd');\n }, this.scrollingJudgeInterval);\n }\n\n private _syncToObserver(\n observer: ScrollerObserver,\n keys: ScrollerObservableKeys[] = scrollerObservableKeys,\n ) {\n for (const key of keys) {\n (observer as any)[key] = this[key];\n }\n }\n\n private _syncToObservers(\n keys: ScrollerObservableKeys | ScrollerObservableKeys[],\n ) {\n if (this._observers.length === 0) return;\n keys = typeof keys === 'string' ? [keys] : keys;\n for (const observer of this._observers) {\n this._syncToObserver(observer, keys);\n }\n }\n\n private _checkElement() {\n const { _el } = this;\n if (!_el) {\n const message = 'missing element';\n logger.error(message);\n throw new Error(message);\n }\n return _el;\n }\n\n private _createMergedScrollOptions(\n source?: ScrollerScrollOptions,\n ): ScrollOptions {\n const el = this._checkElement();\n const merged: ScrollOptions = {\n container: el,\n ...this.scrollSettingsDefaults,\n ...source,\n };\n return merged;\n }\n\n private _createMergedScrollToElementOptions(\n source?: ScrollerScrollToElementOptions,\n ): ScrollToElementOptions {\n const el = this._checkElement();\n const merged: ScrollToElementOptions = {\n container: el,\n ...this.scrollToElementSettingsDefaults,\n ...source,\n };\n let { _scrollToElementAdditionalOffset: additionalOffset } = this;\n if (!additionalOffset) return merged;\n if (typeof additionalOffset === 'function') {\n additionalOffset = additionalOffset(this);\n }\n if (!additionalOffset) return merged;\n if (typeof additionalOffset === 'number') {\n additionalOffset = {\n x: additionalOffset,\n y: additionalOffset,\n };\n }\n let { offset } = merged;\n if (!offset) {\n merged.offset = additionalOffset;\n return merged;\n }\n if (typeof offset === 'number') {\n offset = {\n x: offset,\n y: offset,\n };\n }\n\n offset.x = (offset.x || 0) + (additionalOffset.x || 0);\n offset.y = (offset.y || 0) + (additionalOffset.y || 0);\n merged.offset = offset;\n return merged;\n }\n\n private _clearScrollToResult() {\n if (!this._scrollToResult) return;\n this._scrollToResult = null;\n }\n\n private _setScrollToResult(result: ScrollResult): ScrollResult {\n this._scrollToResult = result;\n result.promise.then(() => {\n this._clearScrollToResult();\n });\n return result;\n }\n\n private _updateScrollable() {\n if (this.scrollEnabled) {\n this._scrollEnable();\n } else {\n this._scrollDisable();\n }\n }\n\n private _scrollEnable() {\n enableScroll(this._checkElement());\n }\n\n private _scrollDisable() {\n const el = this._checkElement();\n this.cancel();\n disableScroll(el);\n }\n}\n"]}
1
+ {"version":3,"sources":["../src/util.ts","../src/logger.ts","../src/prevent-scroll.ts","../src/scroll/schemes.ts","../src/scroll/easings.ts","../src/scroll/util.ts","../src/scroll/scroll-by-internal.ts","../src/scroll/scroll-by.ts","../src/scroll/scroll-to.ts","../src/scroll/scroll-to-element.ts","../src/scroll/scroll-to-side.ts","../src/scroller.ts"],"names":["isBodyElement","ScrollerState"],"mappings":"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","file":"scroller.mjs","sourcesContent":["// export const HAS_WINDOW = typeof window !== 'undefined';\n\n// export function warn(message: string): void {\n// if (typeof console === 'object' && console.warn) {\n// console.warn(`[scroller] ${message}`);\n// }\n// }\n\n// export function error(message: string): Error {\n// return new Error(`[scroller] ${message}`);\n// }\n\nexport function isDocumentElement(el: Element): el is HTMLHtmlElement {\n return el.constructor === HTMLHtmlElement;\n}\n\nexport function isBodyElement(el: Element): el is HTMLBodyElement {\n return el.constructor === HTMLBodyElement;\n}\n\nexport function isRootElement(\n el: Element,\n): el is HTMLHtmlElement | HTMLBodyElement {\n return isDocumentElement(el) || isBodyElement(el);\n}\n","import { TinyLogger } from '@fastkit/tiny-logger';\n\nexport const logger = new TinyLogger('scroller');\n","// space: 32, page up: 33, page down: 34, end: 35, home: 36\n// left: 37, up: 38, right: 39, down: 40\nexport const SCROLLABLE_KEY_CODES = [32, 33, 34, 35, 36, 37, 38, 39, 40];\n\nexport interface PreventScrollOptions {\n hideScrollbar: boolean;\n}\n\nexport interface PreventScrollContext {\n options: PreventScrollOptions;\n el: PreventScrollElement;\n overflowOrigin?: string | null;\n lockPosition: {\n x: number;\n y: number;\n };\n}\n\nexport interface PreventScrollElement extends HTMLElement {\n __ps_ctx__: PreventScrollContext;\n}\n\nconst eventListenerOptions: AddEventListenerOptions = {\n passive: false,\n};\n\nconst handleWheel = (e: WheelEvent) => {\n e.preventDefault();\n};\n\nconst handleScroll = (e: Event) => {\n const el = e.target as PreventScrollElement;\n if (el && el.__ps_ctx__) {\n el.scrollTo(el.__ps_ctx__.lockPosition.x, el.__ps_ctx__.lockPosition.y);\n }\n};\n\nconst handleKeydown = (e: KeyboardEvent) => {\n if (\n e.target &&\n ['INPUT', 'TEXTAREA'].includes((e.target as HTMLElement).tagName)\n ) {\n return;\n }\n if (SCROLLABLE_KEY_CODES.includes(e.which)) {\n e.preventDefault();\n }\n};\n\nexport function enableScroll(el: Element) {\n const _el: PreventScrollElement = <PreventScrollElement>el;\n if (!_el.__ps_ctx__) return;\n\n const { options } = _el.__ps_ctx__;\n\n _el.removeEventListener('wheel', handleWheel, eventListenerOptions);\n _el.removeEventListener('scroll', handleScroll, eventListenerOptions);\n _el.removeEventListener('keydown', handleKeydown);\n\n if (options.hideScrollbar) {\n _el.style.overflow = _el.__ps_ctx__.overflowOrigin as string;\n }\n delete (_el as any).__ps_ctx__;\n}\n\nexport function disableScroll(\n el: Element,\n opts: Partial<PreventScrollOptions> = {},\n) {\n const { hideScrollbar = false } = opts;\n\n const _el: PreventScrollElement = <PreventScrollElement>el;\n if (_el.__ps_ctx__) return;\n\n const options = {\n hideScrollbar,\n };\n\n _el.__ps_ctx__ = {\n options,\n el: _el,\n overflowOrigin: _el.style.overflow,\n lockPosition: {\n x: _el.scrollLeft || (_el as any).scrollX,\n y: _el.scrollTop || (_el as any).scrollY,\n },\n };\n\n if (options.hideScrollbar) {\n _el.style.overflow = 'hidden';\n }\n\n _el.addEventListener('wheel', handleWheel, eventListenerOptions);\n _el.addEventListener('scroll', handleScroll, eventListenerOptions);\n _el.addEventListener('keydown', handleKeydown);\n}\n","import { EasingName } from './easings';\n\n/**\n * スクロヌル系メ゜ッドの基本オプション蚭定です。\n */\nexport interface ScrollBaseSettings {\n /**\n * アニメヌションの総合時間をms単䜍で指定したす。\n */\n duration: number;\n\n /**\n * アニメヌションのむヌゞングを指定したす。\n * {@link EasingName}\n */\n easing: EasingName;\n\n /**\n * スクロヌルアニメヌションがナヌザヌのむンタラクションにより䞭断可胜かをboolean倀で瀺したす。\n */\n cancelable: boolean;\n}\n\n/**\n * Scrollerで利甚するスクロヌル系メ゜ッドのオプション蚭定です。\n */\nexport interface ScrollerScrollSettings extends ScrollBaseSettings {\n onProgress?: ScrollCallback;\n onCancel?: ScrollCallback;\n onDone?: ScrollCallback;\n}\n\nexport interface ScrollSettings extends ScrollerScrollSettings {\n container: string | Element;\n}\n\nexport type ScrollerScrollOptions = Partial<ScrollerScrollSettings>;\nexport type ScrollOptions = Partial<ScrollSettings>;\n\n/**\n * スクロヌル関連メ゜ッドによるスクロヌルアニメヌションをキャンセルするメ゜ッドです。<br>\n * ナヌザヌのむンタラクション起因の䞭断の堎合、Eventオブゞェクトが枡されたす。\n */\nexport type ScrollCanceller = (\n event?: Event | null,\n checkCancelable?: boolean,\n) => void;\n\n/**\n * スクロヌル関連メ゜ッドの返华倀ずなるむンタヌフェヌスです。\n */\nexport interface ScrollResult {\n /**\n * スクロヌルをキャンセルするメ゜ッドです。\n */\n cancel: ScrollCanceller;\n\n /**\n * スクロヌルの完了、キャンセル、䞭断を問わず終了を怜知するPromiseむンスタンスです。\n */\n promise: Promise<void>; // resolve when done or cancel\n\n /**\n * スクロヌル開始䜍眮から完了䜍眮たでの想定px数をx、y軞共に返华したす。<br>\n * スクロヌルが途䞭でキャンセルされた堎合はこのpxが加算されおいない事もありたす。\n */\n plans: { x: number; y: number };\n}\n\n/**\n * スクロヌル関連の各皮メ゜ッドにおいお、コヌルバックメ゜ッドに枡されるむンタヌフェヌスです。\n */\nexport interface ScrollCallbackValues {\n /**\n * スクロヌル䞭のコンテナ芁玠です。\n */\n container: Element;\n\n /**\n * スクロヌルの進捗を0〜1で瀺したす。\n */\n progress: number;\n\n /**\n * スクロヌルが䞭断されおいる堎合trueを瀺したす。\n */\n aborted: boolean;\n\n /**\n * ナヌザヌのむンタラクションによりスクロヌルが䞭断されおいた堎合、そのEventオブゞェクトが蚭定されたす。\n */\n abortEventSource: Event | null;\n}\n\nexport type ScrollCallback = (\n scrollToCallbackValues: ScrollCallbackValues,\n) => any;\n\n/**\n * スクロヌル倀をx軞、y軞で瀺したす。\n */\nexport interface ScrollPosition {\n x: number;\n y: number;\n}\n\nexport const defaultBaseSettings: ScrollBaseSettings = {\n duration: 500,\n easing: 'ease',\n cancelable: true,\n};\n\nexport const defaultSettings: ScrollSettings = {\n get container(): Element {\n return document.scrollingElement as Element;\n },\n ...defaultBaseSettings,\n};\n","const easings = {\n ease: [0.25, 0.1, 0.25, 1.0] as EasingValues,\n linear: [0.0, 0.0, 1.0, 1.0] as EasingValues,\n 'ease-in': [0.42, 0.0, 1.0, 1.0] as EasingValues,\n 'ease-out': [0.0, 0.0, 0.58, 1.0] as EasingValues,\n 'ease-in-out': [0.42, 0.0, 0.58, 1.0] as EasingValues,\n};\nexport type EasingName = keyof typeof easings;\nexport type EasingValues = [number, number, number, number];\nexport default easings;\n","import { logger } from '../logger';\n\nexport function isBodyElement(el: Element): el is HTMLBodyElement {\n return el.tagName.toLowerCase() === 'body';\n}\n\nexport function getContainerDimension(el: Element) {\n if (isBodyElement(el)) {\n const documentElement = <HTMLElement>document.documentElement;\n return {\n // width: window.innerWidth,\n // height: window.innerHeight,\n width: documentElement.clientWidth,\n height: documentElement.clientWidth,\n };\n }\n return {\n width: el.clientWidth,\n height: el.clientHeight,\n };\n}\n\nexport function $(selectorOrElement: string | Element): HTMLElement | null {\n if (typeof selectorOrElement !== 'string')\n return selectorOrElement as HTMLElement;\n return document.querySelector(selectorOrElement);\n}\n\nexport function cumulativeOffset(element: Element) {\n let top = 0;\n let left = 0;\n let el: HTMLElement | null = element as HTMLElement;\n\n while (el) {\n top += el.offsetTop || 0;\n left += el.offsetLeft || 0;\n el = el.offsetParent as HTMLElement;\n }\n\n return {\n top,\n left,\n };\n}\n\nexport type HTMLElementEventMapKey =\n | keyof HTMLElementEventMap\n | 'DOMMouseScroll'\n | 'mousewheel';\n\nexport function on(\n element: Element,\n events: HTMLElementEventMapKey | HTMLElementEventMapKey[],\n handler: EventListenerOrEventListenerObject,\n opts = { passive: false },\n) {\n if (!Array.isArray(events)) events = [events];\n for (let i = 0; i < events.length; i++) {\n element.addEventListener(events[i], handler, opts);\n }\n}\n\nexport function off(\n element: Element,\n events: HTMLElementEventMapKey | HTMLElementEventMapKey[],\n handler: EventListenerOrEventListenerObject,\n) {\n if (!Array.isArray(events)) events = [events];\n for (let i = 0; i < events.length; i++) {\n element.removeEventListener(events[i], handler);\n }\n}\n\nexport function warn(message: string): void {\n logger.warn(message);\n}\n\nexport function error(message: string): Error {\n return new Error(`[scroll] ${message}`);\n}\n","import BezierEasing, { EasingFunction } from 'bezier-easing';\nimport { removeUndef } from '@fastkit/helpers';\nimport easings, { EasingValues } from './easings';\nimport {\n ScrollResult,\n ScrollCallbackValues,\n ScrollOptions,\n defaultSettings,\n} from './schemes';\nimport {\n $,\n on,\n off,\n getContainerDimension,\n HTMLElementEventMapKey,\n error,\n} from './util';\nimport { PreventScrollElement } from '../prevent-scroll';\n\ninterface ComputedValues {\n $container: HTMLElement;\n initialX: number;\n initialY: number;\n targetX: number;\n targetY: number;\n}\n\nconst abortEvents: HTMLElementEventMapKey[] = [\n 'mousedown',\n 'wheel',\n 'DOMMouseScroll',\n 'mousewheel',\n 'keyup',\n 'touchmove',\n];\n\nexport function scroll(\n diffX: number,\n diffY: number,\n // eslint-disable-next-line default-param-last\n options: ScrollOptions = {},\n _computedValues?: ComputedValues,\n): ScrollResult {\n let $container: HTMLElement;\n let initialX: number;\n let initialY: number;\n let targetX: number;\n let targetY: number;\n\n const _options = { ...defaultSettings, ...removeUndef(options) };\n const {\n container,\n duration,\n easing,\n cancelable,\n onProgress,\n onCancel,\n onDone,\n } = _options;\n\n const x = diffX !== 0;\n const y = diffY !== 0;\n\n if (_computedValues) {\n $container = _computedValues.$container;\n initialX = _computedValues.initialX;\n initialY = _computedValues.initialY;\n targetX = _computedValues.targetX;\n targetY = _computedValues.targetY;\n } else {\n $container = $(container) as HTMLElement;\n if (!$container) throw error(`missing container ${container}`);\n initialX = $container.scrollLeft;\n initialY = $container.scrollTop;\n targetX = initialX + diffX;\n targetY = initialY + diffY;\n }\n\n // compute overflow and adjust values\n const { scrollWidth, scrollHeight } = $container;\n const { width, height } = getContainerDimension($container);\n const overflowX = targetX + width - scrollWidth;\n const overflowY = targetY + height - scrollHeight;\n if (overflowX > 0) {\n diffX -= overflowX;\n targetX -= overflowX;\n }\n if (overflowY > 0) {\n diffY -= overflowY;\n targetY -= overflowY;\n }\n\n //\n // Setup Temporary values\n //\n // eslint-disable-next-line @typescript-eslint/ban-types\n let doneResolver: Function;\n let timeStart = 0;\n let timeElapsed: number;\n\n const callbackValues: ScrollCallbackValues = {\n container: $container,\n progress: 0,\n aborted: false,\n abortEventSource: null,\n };\n\n const result: ScrollResult = {\n cancel: canceller,\n promise: new Promise((resolve) => {\n doneResolver = resolve;\n }),\n plans: {\n x: diffX,\n y: diffY,\n },\n };\n\n //\n // processes\n //\n if (\n (diffY === 0 && diffX === 0) ||\n !!($container as PreventScrollElement).__ps_ctx__\n )\n return initialAbort();\n\n // setup easings\n let easingValues: EasingValues;\n if (!easing) {\n easingValues = easings.ease;\n } else if (typeof easing === 'string') {\n easingValues = easings[_options.easing];\n } else {\n easingValues = easing;\n }\n const easingFn: EasingFunction = BezierEasing.apply(\n BezierEasing,\n easingValues,\n );\n\n on($container, abortEvents, abortFn, { passive: true });\n window.requestAnimationFrame(step);\n return result;\n\n //\n // inner methods\n //\n function doneResolve(): void {\n doneResolver();\n }\n\n function canceller(e: Event | null = null, checkCancelable = false) {\n if (checkCancelable && !cancelable) return;\n off($container, abortEvents, abortFn);\n callbackValues.abortEventSource = e;\n callbackValues.aborted = true;\n onCancel && onCancel(callbackValues);\n }\n\n function abortFn(e: Event) {\n canceller(e, true);\n }\n\n function initialAbort(e: Event | null = null) {\n canceller(e);\n doneResolve();\n return result;\n }\n\n function step(timestamp: number): void {\n if (callbackValues.aborted) return done();\n if (!timeStart) timeStart = timestamp;\n\n timeElapsed = timestamp - timeStart;\n\n let progress = Math.min(timeElapsed / duration, 1);\n progress = easingFn(progress);\n callbackValues.progress = progress;\n\n topLeft(initialY + diffY * progress, initialX + diffX * progress);\n onProgress && onProgress(callbackValues);\n\n timeElapsed < duration ? window.requestAnimationFrame(step) : done();\n }\n\n function topLeft(top: number, left: number) {\n if (y) $container.scrollTop = top;\n if (x) $container.scrollLeft = left;\n }\n\n function done() {\n if (!callbackValues.aborted) topLeft(targetY, targetX);\n timeStart = 0;\n off($container, abortEvents, abortFn);\n callbackValues.progress = 1;\n doneResolve();\n if (!callbackValues.aborted && onDone) onDone(callbackValues);\n }\n}\n","import { scroll } from './scroll-by-internal';\nimport { ScrollOptions, ScrollResult } from './schemes';\n\n/**\n * 指定の差分だけコンテナをスクロヌルしたす。\n * @param diffX - 暪軞の移動量pxです。デフォルトは0です。\n * @param diffY - 瞊軞の移動量pxです。デフォルトは0です。\n * @param options - スクロヌルオプション\n */\nexport function scrollBy(\n diffX: number,\n diffY: number,\n options?: ScrollOptions,\n): ScrollResult {\n return scroll(diffX, diffY, options);\n}\n","import { scroll } from './scroll-by-internal';\nimport {\n ScrollOptions,\n defaultSettings,\n ScrollPosition,\n ScrollResult,\n} from './schemes';\nimport { $, error } from './util';\n\n/**\n * 任意の䜍眮pxぞコンテナをスクロヌルしたす。\n * @param scrollPosition - スクロヌル先を指定したす。x, y 共にオプショナルなるです。未指定の軞は珟圚のスクロヌル倀のたた保持されたす。\n * @param options - スクロヌルオプション\n */\nexport function scrollTo(\n scrollPosition: Partial<ScrollPosition>,\n options: ScrollOptions = {},\n): ScrollResult {\n let { x, y } = scrollPosition;\n const container = options.container || defaultSettings.container;\n const $container = $(container) as HTMLElement;\n if (!$container) throw error(`missing container ${container}`);\n const initialY = $container.scrollTop;\n const initialX = $container.scrollLeft;\n if (x === undefined) x = initialX;\n if (y === undefined) y = initialY;\n const diffX = x - initialX;\n const diffY = y - initialY;\n\n return scroll(diffX, diffY, options, {\n $container,\n initialX,\n initialY,\n targetX: x,\n targetY: y,\n });\n}\n","import { scroll } from './scroll-by-internal';\nimport { ScrollOptions, ScrollResult, defaultSettings } from './schemes';\nimport { $, cumulativeOffset, error } from './util';\n\n/**\n * スクロヌル先の芁玠をElement or CSSク゚リストリングで瀺したす。\n */\nexport type ScrollToElementTarget = string | Element;\n\n/**\n * 芁玠ぞスクロヌルする際のオプション蚭定です。\n */\nexport interface ScrollToElementSettings {\n /**\n * 芁玠ぞスクロヌルする際、そのスクロヌル先をずらす際に蚭定したす。<br>\n * x, y 個別に蚭定が可胜ですが、シングルのnumberのみを指定した堎合、x, y のそれぞれのオプションが有効な堎合にのみその軞に蚭定されたす。\n */\n offset: number | { x?: number; y?: number };\n\n /**\n * 暪スクロヌルの可吊を瀺したす。\n */\n x: boolean;\n\n /**\n * 瞊スクロヌルの可吊を瀺したす。\n */\n y: boolean;\n}\n\n/**\n * 芁玠スクロヌル利甚事のデフォルト蚭定です。\n * {@link ScrollToElementSettings}\n */\nexport const scrollToElementSettingsDefaults: ScrollToElementSettings = {\n offset: 0,\n x: false,\n y: true,\n};\n\n/**\n * 芁玠ぞスクロヌルさせる際のオプション蚭定です。\n */\nexport type ScrollToElementOptions = Partial<\n ScrollOptions & ScrollToElementSettings\n>;\n\n/**\n * 任意の芁玠の䜍眮ぞスクロヌルしたす。\n * @param target - スクロヌル先の芁玠\n * @param options - スクロヌルオプション\n */\nexport function scrollToElement(\n target: ScrollToElementTarget,\n options: ScrollToElementOptions = {},\n): ScrollResult {\n //\n // Setup Options\n //\n\n const _options = { ...scrollToElementSettingsDefaults, ...options };\n\n const { x, y } = _options;\n\n const offsetSource = _options.offset;\n\n const offset =\n typeof offsetSource === 'number'\n ? { x: offsetSource, y: offsetSource }\n : offsetSource;\n\n //\n // Setup Elements\n //\n\n const $target = $(target) as HTMLElement;\n if (!$target) throw error(`missing element ${target}`);\n\n const container = _options.container || defaultSettings.container;\n const $container = $(container) as HTMLElement;\n if (!$container) throw error(`missing container ${container}`);\n\n const cumulativeOffsetContainer = cumulativeOffset($container);\n const cumulativeOffsetTarget = cumulativeOffset($target);\n\n const initialY = $container.scrollTop;\n const initialX = $container.scrollLeft;\n\n const targetY =\n cumulativeOffsetTarget.top -\n cumulativeOffsetContainer.top +\n (offset.y || 0);\n\n const targetX =\n cumulativeOffsetTarget.left -\n cumulativeOffsetContainer.left +\n (offset.x || 0);\n\n const diffX = x ? targetX - initialX : 0;\n const diffY = y ? targetY - initialY : 0;\n\n return scroll(diffX, diffY, _options, {\n $container,\n initialX,\n initialY,\n targetX,\n targetY,\n });\n}\n","import {\n ScrollOptions,\n ScrollResult,\n defaultSettings,\n ScrollPosition,\n} from './schemes';\nimport { $, error } from './util';\nimport { scrollTo } from './scroll-to';\n\n/**\n * y軞の䞡端の蟺を瀺したす。\n */\nexport type ScrollYSide = 'top' | 'bottom';\n\n/**\n * x軞の䞡端の蟺を瀺したす。\n */\nexport type ScrollXSide = 'left' | 'right';\n\n/**\n * コンテナの4蟺を瀺したす。\n */\nexport type ScrollSide = ScrollYSide | ScrollXSide;\n\n/**\n * コンテナの蟺ぞスクロヌルさせる際のタヌゲット指定のパタヌンです。\n */\nexport type ScrollToSideTargets =\n | ScrollSide\n | [ScrollSide]\n | [ScrollYSide, ScrollXSide]\n | [ScrollXSide, ScrollYSide];\n\n/**\n * コンテナをいずれかの蟺たでスクロヌルしたす。\n * @param targets - 蟺を指定したす。シングルの文字列、及び配列に察応しおいたす。\n * @param options - スクロヌルオプション\n */\nexport function scrollToSide(\n targets: ScrollToSideTargets,\n options?: ScrollOptions,\n): ScrollResult {\n const sides: ScrollSide[] = typeof targets === 'string' ? [targets] : targets;\n const position: Partial<ScrollPosition> = {};\n\n const hasRight = sides.includes('right');\n const hasBottom = sides.includes('bottom');\n\n if (sides.includes('top')) {\n position.y = 0;\n }\n\n if (sides.includes('left')) {\n position.x = 0;\n }\n\n if (hasRight || hasBottom) {\n const container =\n (options && options.container) || defaultSettings.container;\n const $container = $(container) as HTMLElement;\n if (!$container) throw error(`missing container ${container}`);\n\n if (hasRight) position.x = $container.scrollWidth;\n if (hasBottom) position.y = $container.scrollHeight;\n }\n\n return scrollTo(position, options);\n}\n\n/**\n * コンテナを䞊蟺たでスクロヌルしたす。\n * @param options - スクロヌルオプション\n */\nexport function scrollToTop(options?: ScrollOptions) {\n return scrollToSide('top', options);\n}\n\n/**\n * コンテナを右蟺たでスクロヌルしたす。\n * @param options - スクロヌルオプション\n */\nexport function scrollToRight(options?: ScrollOptions) {\n return scrollToSide('right', options);\n}\n\n/**\n * コンテナを䞋蟺たでスクロヌルしたす。\n * @param options - スクロヌルオプション\n */\nexport function scrollToBottom(options?: ScrollOptions) {\n return scrollToSide('bottom', options);\n}\n\n/**\n * コンテナを巊蟺たでスクロヌルしたす。\n * @param options - スクロヌルオプション\n */\nexport function scrollToLeft(options?: ScrollOptions) {\n return scrollToSide('left', options);\n}\n\n/**\n * コンテナを巊䞊コヌナヌたでスクロヌルしたす。\n * @param options - スクロヌルオプション\n */\nexport function scrollToLeftTop(options?: ScrollOptions) {\n return scrollToSide(['left', 'top'], options);\n}\n\n/**\n * コンテナを巊䞋コヌナヌたでスクロヌルしたす。\n * @param options - スクロヌルオプション\n */\nexport function scrollToLeftBottom(options?: ScrollOptions) {\n return scrollToSide(['left', 'bottom'], options);\n}\n\n/**\n * コンテナを右䞊コヌナヌたでスクロヌルしたす。\n * @param options - スクロヌルオプション\n */\nexport function scrollToRightTop(options?: ScrollOptions) {\n return scrollToSide(['right', 'top'], options);\n}\n\n/**\n * コンテナを右䞋コヌナヌたでスクロヌルしたす。\n * @param options - スクロヌルオプション\n */\nexport function scrollToRightBottom(options?: ScrollOptions) {\n return scrollToSide(['right', 'bottom'], options);\n}\n","import { EV } from '@fastkit/ev';\nimport {\n visibilityManager,\n VisibilityStateListener,\n} from '@fastkit/visibility';\nimport { IN_WINDOW } from '@fastkit/helpers';\nimport { isDocumentElement, isBodyElement } from './util';\nimport { logger } from './logger';\n\nimport { enableScroll, disableScroll } from './prevent-scroll';\n\nimport {\n ScrollPosition,\n ScrollOptions,\n ScrollBaseSettings,\n ScrollToElementTarget,\n ScrollResult,\n ScrollerScrollOptions,\n ScrollToElementSettings,\n scrollToElementSettingsDefaults as _scrollToElementSettingsDefaults,\n scrollBy,\n scrollTo,\n scrollToElement,\n scrollToSide,\n scrollToTop,\n scrollToRight,\n scrollToBottom,\n scrollToLeft,\n scrollToLeftTop,\n scrollToLeftBottom,\n scrollToRightTop,\n scrollToRightBottom,\n ScrollToSideTargets,\n ScrollToElementOptions,\n} from './scroll';\n\nimport { defaultBaseSettings } from './scroll/schemes';\n\nexport * from './prevent-scroll';\n\nexport * from './scroll';\n\nexport type ScrollToElementAdditionalOffset =\n | number\n | { x?: number; y?: number }\n | ((scroller: Scroller) => number | { x?: number; y?: number } | undefined);\n\n/**\n * [[Scroller]]を任意のElementたでスクロヌルさせる際のオプションです。\n * 詳现は [[ScrollerScrollOptions]] 及び、 [[ScrollToElementSettings]] を参照しおください。\n */\nexport type ScrollerScrollToElementOptions = Partial<\n ScrollerScrollOptions & ScrollToElementSettings\n>;\n\n// Scroller は蚭定されたコンテキスト芁玠に応じおscrollやsize怜知のリスナを\n// window か 自身のelementに切り替えたす\ntype ScrollerEventTarget = Window | Element;\n\n/**\n * Scrollerに瞊スクロヌルが発生した際の方向を瀺すTypeです。\n */\nexport type ScrollYDirection = 'top' | 'bottom';\n\n/**\n * Scrollerに暪スクロヌルが発生した際の方向を瀺すTypeです。\n */\nexport type ScrollXDirection = 'left' | 'right';\n\n/**\n * Scrollerにスクロヌルが発生した際の方向を瀺すTypeです。\n */\nexport type ScrollDirection = ScrollYDirection | ScrollXDirection;\n\n/**\n * スクロヌルの軞を瀺したす。\n * xは氎平、\n * yは垂盎をそれぞれ瀺したす\n */\nexport type ScrollAxis = 'x' | 'y';\n\nexport interface ScrollSizeObserverSetting {\n interval: number;\n width: boolean;\n height: boolean;\n}\n\n/**\n * Scrollerの基本セッティングです。\n * 個々のフィヌルドの詳现は[[Scroller]]の同名プロパティを参照しおください。\n */\nexport interface ScrollerSetting {\n el: Element | string | null;\n scrollingJudgeInterval: number;\n baseAxis: ScrollAxis;\n scrollSizeObserver: Partial<ScrollSizeObserverSetting>;\n}\n\n/**\n * Elementのscrollむベントを怜知した際に、通知する情報です\n * 珟圚のスクロヌルポゞションや、スクロヌル開始or前回のtickからのスクロヌル量が枡されたす。\n */\nexport interface ScrollerPayload {\n /**\n * [[Scroller.scrollTop]] が枡されたす\n */\n top: number;\n\n /**\n * [[Scroller.scrollLeft]] が枡されたす\n */\n left: number;\n\n /**\n * [[Scroller.scrollBottom]] が枡されたす\n */\n bottom: number;\n\n /**\n * [[Scroller.scrollRight]] が枡されたす\n */\n right: number;\n\n /**\n * 発生したスクロヌルの軞が枡されたす。\n * 斜めスクロヌルが発生した際は、x、yのうち移動量が倧きいものが自動刀定されお枡されたす。\n * どちらも同じ移動量であった堎合は[[Scroller.baseAxis]]の蚭定倀が枡されたす。\n */\n axis: ScrollAxis;\n\n /**\n * 発生したスクロヌルの方向が枡されたす。\n * 斜めスクロヌルが発生した際は、x、yのうち移動量が倧きいものが自動刀定されお枡されたす。\n * どちらも同じ移動量であった堎合は[[Scroller.baseAxis]]の蚭定倀が枡されたす。\n */\n direction: ScrollDirection;\n\n /**\n * 発生したスクロヌルの氎平方向が枡されたす。\n */\n directionX: ScrollXDirection;\n\n /**\n * 発生したスクロヌルの垂盎方向が枡されたす。\n */\n directionY: ScrollYDirection;\n\n // tick amount at element.on('scroll') detect\n\n /**\n * [[Scroller.on]]('scroll')時の前回からの氎平移動量が枡されたす。\n */\n tickedX: number;\n\n /**\n * [[Scroller.on]]('scroll')時の前回からの垂盎移動量が枡されたす。\n */\n tickedY: number;\n\n /**\n * [[Scroller.on]]('scrollStart')時からの合蚈氎平移動量が枡されたす。\n */\n totalX: number;\n\n /**\n * [[Scroller.on]]('scrollStart')時からの合蚈垂盎移動量が枡されたす。\n */\n totalY: number;\n}\n\n/**\n * Scrollerは蚭定されたElementのスクロヌル開始、tick、終了を怜知し\n * むベントを通知したす。\n * これらのむベントを賌読する事でスクロヌル量や移動方向を怜知可胜です。\n */\nexport interface ScrollerScrollEventMap {\n /**\n * スクロヌルの開始時に発生したす。\n */\n scrollStart: ScrollerPayload;\n\n /**\n * 毎スクロヌル怜知時に発生したす。\n */\n scroll: ScrollerPayload;\n\n /**\n * スクロヌルの終了時に発生したす。\n */\n scrollEnd: ScrollerPayload;\n}\n\n/**\n * Scrollerに発生するむベントの党おです。\n */\nexport interface ScrollerEventMap extends ScrollerScrollEventMap {\n /**\n * Scrollerが利甚可胜になった時Elementが蚭定されお初期化が完了したに発生したす。\n */\n ready: void;\n\n /**\n * [[Scroller.state]]が倉曎された時に発生したす。\n */\n changeState: ScrollerState;\n\n /**\n * [[Scroller.el]]のサむズ倉曎を怜知した際に発生したす。\n */\n resize: { width: number; height: number };\n\n /**\n * [[Scroller.lastAxis]]の倉曎を怜知した際に発生したす。\n */\n changeAxis: ScrollAxis;\n\n /**\n * [[Scroller.lastDirection]]の倉曎を怜知した際に発生したす。\n */\n changeLastDirection: ScrollDirection;\n\n /**\n * [[Scroller.lastYDirection]]の倉曎を怜知した際に発生したす。\n */\n changeLastYDirection: ScrollYDirection;\n\n /**\n * [[Scroller.lastXDirection]]の倉曎を怜知した際に発生したす。\n */\n changeLastXDirection: ScrollXDirection;\n}\n\n/**\n * Scrollerの状態を瀺したす。\n */\n// eslint-disable-next-line no-shadow\nexport enum ScrollerState {\n /**\n * Scrollerが初期化されおいないElementが蚭定されおいない状態を瀺したす。\n */\n Pending = 'pending',\n\n /**\n * Scrollerが初期化されおいるが、[[Scroller.el]]のリサむズやスクロヌルのむベント監芖が動䜜しおいない状態を瀺したす。\n */\n Ready = 'ready',\n\n /**\n * Scrollerが初期化されおいお、[[Scroller.el]]のリサむズやスクロヌルのむベント監芖が動䜜しおいる状態を瀺したす。\n */\n Running = 'running',\n\n /**\n * [[Scroller.destroy]]が実行され、Scrollerが利甚䞍可である状態を瀺したす。\n */\n Destroyed = 'destroyed',\n}\n\n/**\n * Scrollerクラスの状態を監芖同期するオブゞェクトが\n * 保有すべきプロパティ䞀芧です。\n * 個々のプロパティ名は、同名のScrollerクラスのプロパティを参照しお䞋さい\n */\nexport interface ScrollerObserver {\n state: ScrollerState;\n isPending: boolean;\n isReady: boolean;\n isRunning: boolean;\n isDestroyed: boolean;\n scrollEnabled: boolean;\n containerWidth: number;\n containerHeight: number;\n scrollWidth: number;\n scrollHeight: number;\n scrollableX: boolean;\n scrollableY: boolean;\n scrollTop: number;\n scrollLeft: number;\n scrollRight: number;\n scrollBottom: number;\n lastAxis: ScrollAxis;\n lastDirection: ScrollDirection;\n lastYDirection: ScrollYDirection;\n lastXDirection: ScrollXDirection;\n nowScrolling: boolean;\n}\n\n/**\n * Scrollerクラスの状態を監芖同期するオブゞェクトが\n * 保有すべきプロパティ䞀のキヌ芧です。\n */\nexport type ScrollerObservableKeys = keyof ScrollerObserver;\nconst scrollerObservableKeys: ScrollerObservableKeys[] = [\n 'state',\n 'isPending',\n 'isReady',\n 'isRunning',\n 'isDestroyed',\n 'scrollEnabled',\n 'containerWidth',\n 'containerHeight',\n 'scrollWidth',\n 'scrollHeight',\n 'scrollableX',\n 'scrollableY',\n 'scrollTop',\n 'scrollLeft',\n 'scrollRight',\n 'scrollBottom',\n 'lastAxis',\n 'lastDirection',\n 'lastYDirection',\n 'lastXDirection',\n 'nowScrolling',\n];\n\n/**\n * スクロヌルを停止させるための゜ヌスオブゞェクト\n */\nexport type ScrollStopper = number | string | Record<string, unknown> | symbol;\n\n/**\n * 任意のElementor HTML Documentのスクロヌルやサむズ倉曎を監芖し、その情報を通知するクラスです。<br>\n * <a href=\"https://dadajam4.github.io/dadajam4/ev/classes/_ev_.ev.html\" target=\"_blank\">EV</a>を継承しおおり、むベントの賌読[[Scroller.on]]等のむンタヌフェヌスを利甚するか、\n * [[Scroller.observe]]メ゜ッドを利甚したす。<br>\n * [[Scroller.on]]、[[Scroller.once]]で賌読可胜なむベントに぀いおは[[ScrollerEventMap]]を参照しおください。\n */\nexport class Scroller extends EV<ScrollerEventMap> {\n /**\n * Scrollerクラスの状態を監芖同期するオブゞェクトが\n * 保有すべきプロパティ䞀のキヌの配列です。\n */\n static readonly scrollerObservableKeys = scrollerObservableKeys;\n\n /**\n * Scrollerの状態を瀺すenum倀です。\n * {@link ScrollerState}\n */\n static readonly States = ScrollerState;\n\n /**\n * スクロヌルを怜知しおから、移動がなくなった際に、䜕ms埌にスクロヌル終了ず刀定するかのむンタヌバル倀を瀺したす。\n * デフォルトは500です。\n */\n scrollingJudgeInterval = 500;\n\n /**\n * 瞊、暪のどちらのスクロヌルを基準ずするかを瀺したす。\n * デフォルトはyです。<br>\n * この蚭定は[[Scroller.toElement]]のデフォルト倀にも圱響したす。\n */\n baseAxis: ScrollAxis = 'y';\n\n /**\n * スクロヌル系メ゜ッド[[Scroller.to]]等を利甚する際のデフォルトの蚭定を瀺したす。\n */\n scrollSettingsDefaults: ScrollBaseSettings = { ...defaultBaseSettings };\n\n /**\n * [[Scroller.toElement]]のデフォルトオプションの蚭定を瀺したす。\n */\n scrollToElementSettingsDefaults: ScrollerScrollToElementOptions = {\n ..._scrollToElementSettingsDefaults,\n };\n\n scrollSizeObserver?: ScrollSizeObserverSetting;\n\n /**\n * 蚭定されたElement芁玠です。\n * 初期化が完了しおいない時には本getterはundefinedを返华する事に泚意しおください。\n */\n get el() {\n return this._el;\n }\n\n /**\n * 珟圚の状態です。<br>\n * {@link ScrollerState}\n */\n get state(): ScrollerState {\n return this._state;\n }\n\n /**\n * 未初期化である堎合trueを瀺したす。\n */\n get isPending(): boolean {\n return this._state === ScrollerState.Pending;\n }\n\n /**\n * 初期化枈み停止状態である堎合trueを瀺したす。\n */\n get isReady(): boolean {\n return this._state === ScrollerState.Ready;\n }\n\n /**\n * 初期化枈み動䜜䞭である堎合trueを瀺したす。\n */\n get isRunning(): boolean {\n return this._state === ScrollerState.Running;\n }\n\n /**\n * むンスタンスが砎棄枈みである堎合trueを瀺したす。\n */\n get isDestroyed(): boolean {\n return this._state === ScrollerState.Destroyed;\n }\n\n /**\n * スクロヌルの有効状態を取埗したす\n */\n get scrollEnabled(): boolean {\n return this._scrollStoppers.length === 0;\n }\n\n /**\n * スクロヌル芁玠の幅を瀺したす。\n */\n get containerWidth(): number {\n return this._containerWidth;\n }\n\n /**\n * スクロヌル芁玠の高さを瀺したす。\n */\n get containerHeight(): number {\n return this._containerHeight;\n }\n\n /**\n * スクロヌル芁玠内のコンテンツの幅を瀺したす。\n */\n get scrollWidth(): number {\n return this._scrollWidth;\n }\n\n /**\n * スクロヌル芁玠内のコンテンツの高さを瀺したす。\n */\n get scrollHeight(): number {\n return this._scrollHeight;\n }\n\n /**\n * x軞にスクロヌル可胜な堎合trueを瀺したす\n */\n get scrollableX(): boolean {\n return this._scrollWidth > this._containerWidth;\n }\n\n /**\n * y軞にスクロヌル可胜な堎合trueを瀺したす\n */\n get scrollableY(): boolean {\n return this._scrollHeight > this._containerHeight;\n }\n\n /**\n * 珟圚の䞊蟺からのスクロヌル量を瀺したす。\n */\n get scrollTop(): number {\n return this._scrollTop;\n }\n\n set scrollTop(scrollTop: number) {\n if (!this.el) return;\n this.el.scrollTop = scrollTop;\n }\n\n /**\n * 珟圚の右蟺からのスクロヌル量を瀺したす。\n */\n get scrollRight(): number {\n return this._scrollRight;\n }\n\n set scrollRight(scrollRight: number) {\n if (!this.el) return;\n this.el.scrollLeft = this._scrollWidth - this._containerWidth - scrollRight;\n }\n\n /**\n * 珟圚の䞋蟺からのスクロヌル量を瀺したす。\n */\n get scrollBottom(): number {\n return this._scrollBottom;\n }\n\n set scrollBottom(scrollBottom: number) {\n if (!this.el) return;\n this.el.scrollTop =\n this._scrollHeight - this._containerHeight - scrollBottom;\n }\n\n /**\n * 珟圚の巊蟺からのスクロヌル量を瀺したす。\n */\n get scrollLeft(): number {\n return this._scrollLeft;\n }\n\n set scrollLeft(scrollLeft: number) {\n if (!this.el) return;\n this.el.scrollLeft = scrollLeft;\n }\n\n /**\n * 珟圚スクロヌル䞭である堎合trueを瀺したす。\n */\n get nowScrolling(): boolean {\n return this._nowScrolling;\n }\n\n /**\n * 最埌に怜知したスクロヌルの軞を瀺したす。\n */\n get lastAxis(): ScrollAxis {\n return this._lastAxis;\n }\n\n /**\n * 最埌に怜知したスクロヌルの方向を瀺したす。\n */\n get lastDirection(): ScrollDirection {\n return this._lastDirection;\n }\n\n /**\n * 最埌に怜知したスクロヌルの垂盎方向を瀺したす。\n */\n get lastYDirection(): ScrollYDirection {\n return this._lastYDirection;\n }\n\n /**\n * 最埌に怜知したスクロヌルの氎平方向を瀺したす。\n */\n get lastXDirection(): ScrollXDirection {\n return this._lastXDirection;\n }\n\n /**\n * 最埌に怜知したスクロヌルにより通知した情報を瀺したす。\n */\n get lastPayload(): ScrollerPayload {\n return {\n top: this._scrollTop,\n left: this._scrollLeft,\n bottom: this._scrollBottom,\n right: this._scrollRight,\n axis: this._lastAxis,\n direction: this._lastDirection,\n directionX: this._lastXDirection,\n directionY: this._lastYDirection,\n tickedX: this._tickedX,\n tickedY: this._tickedY,\n totalX: this._lastTotalX,\n totalY: this._lastTotalY,\n };\n }\n\n private _el!: Element | null;\n\n private _eventTarget!: ScrollerEventTarget;\n\n private _isDocumentElement = false;\n\n private _isBodyElement = false;\n\n private _isRootElement = false;\n\n private _state: ScrollerState = ScrollerState.Pending;\n\n private _containerWidth = 0;\n\n private _containerHeight = 0;\n\n private _scrollWidth = 0;\n\n private _scrollHeight = 0;\n\n private _scrollTop = 0;\n\n private _scrollRight = 0;\n\n private _scrollBottom = 0;\n\n private _scrollLeft = 0;\n\n private _lastAxis: ScrollAxis;\n\n private _lastDirection: ScrollDirection;\n\n private _lastYDirection: ScrollYDirection = 'top';\n\n private _lastXDirection: ScrollXDirection = 'left';\n\n private _nowScrolling = false;\n\n // eslint-disable-next-line @typescript-eslint/ban-types\n private _readyResolvers: Function[] = [];\n\n private _scrollingJudgeTimerId: number | null = null;\n\n private _startX = 0;\n\n private _startY = 0;\n\n private _tickedX = 0;\n\n private _tickedY = 0;\n\n private _lastTotalX = 0;\n\n private _lastTotalY = 0;\n\n private _scrollListener?: EventListener;\n\n private _resizeListener?: EventListener;\n\n private _resizeObserver?: ResizeObserver;\n\n private _scrollToResult: ScrollResult | null = null;\n\n private _observers: ScrollerObserver[] = [];\n\n private _scrollStoppers: ScrollStopper[] = [];\n\n private _scrollSizeObserverPollingId: number | null = null;\n\n private _scrollSizeObserverSuspended = false;\n\n private _visibilityListener: VisibilityStateListener;\n\n /**\n * Scrollerむンスタンスを䜜成したす。\n * コンテキストずなるElementをこの時点で指定するか吊かは任意です。\n *\n * @param settingOrElementOrQueryString - 任意です。{@link ScrollerSetting}か Elementor cssク゚リセレクタ文字列を盎接指定したす。この時点でElementを指定しない堎合は、[[setElement]]を実行するたでむンスタンスは動䜜したせん。\n */\n constructor(\n settingOrElementOrQueryString:\n | Partial<ScrollerSetting>\n | Element\n | string = {},\n ) {\n super();\n\n const convertedSetting: Partial<ScrollerSetting> =\n typeof settingOrElementOrQueryString === 'string' ||\n settingOrElementOrQueryString === null ||\n (IN_WINDOW && settingOrElementOrQueryString instanceof Element)\n ? (settingOrElementOrQueryString = {\n el: <Element | string>settingOrElementOrQueryString,\n })\n : (settingOrElementOrQueryString as Partial<ScrollerSetting>);\n\n if (convertedSetting.scrollingJudgeInterval !== undefined)\n this.scrollingJudgeInterval = convertedSetting.scrollingJudgeInterval;\n\n if (convertedSetting.baseAxis) this.baseAxis = convertedSetting.baseAxis;\n this._lastAxis = this.baseAxis;\n\n const { scrollSizeObserver } = convertedSetting;\n if (scrollSizeObserver) {\n this.scrollSizeObserver = {\n interval: 500,\n width: true,\n height: true,\n ...scrollSizeObserver,\n };\n }\n\n this._visibilityListener = () => {\n if (visibilityManager.isVisible) {\n this.update();\n if (this._scrollSizeObserverSuspended) {\n this._scrollSizeObserverSuspended = false;\n this._startScrollSizeObserver();\n }\n } else {\n this._scrollSizeObserverSuspended =\n this._scrollSizeObserverPollingId !== null;\n this._stopScrollSizeObserver();\n }\n };\n\n this._lastDirection = this._lastAxis === 'y' ? 'top' : 'left';\n\n // for SSR\n if (!IN_WINDOW) return;\n\n // Add Visibility Listener\n visibilityManager.change(this._visibilityListener);\n\n // Skip auto setup when missing scrolling element.\n this.setElement(convertedSetting.el);\n }\n\n /**\n * むンスタンスにElementを蚭定したす。特別な理由SSRの利甚等によりコンストラクタでElementを指定できない堎合、\n * 本メ゜ッドを利甚しブラりザコンテキスト配䞋で本メ゜ッドを実行しおください。\n * @param el - Element、もしくはCSSク゚リセレクタ文字列を指定したす。\n */\n setElement(el?: Element | string | null) {\n if (el === null) return;\n if (!IN_WINDOW)\n logger.error('Element can be set only when it is under DOM context.');\n\n this.stop();\n\n let _el: Element | null;\n if (typeof el === 'string') {\n _el = document.querySelector(el);\n } else {\n _el = el || document.scrollingElement;\n }\n if (!_el) {\n const message = 'missing scrolling element';\n logger.error(message, el);\n throw new Error(message);\n }\n\n this._el = _el;\n this._isDocumentElement = isDocumentElement(_el);\n this._isBodyElement = isBodyElement(_el);\n this._isRootElement = this._isDocumentElement || this._isBodyElement;\n this._eventTarget =\n this._isDocumentElement || this._isBodyElement ? window : this._el;\n\n this._setup();\n }\n\n private _scrollToElementAdditionalOffset:\n | ScrollToElementAdditionalOffset\n | undefined;\n\n setScrollToElementAdditionalOffset(\n offset: ScrollToElementAdditionalOffset | undefined,\n ) {\n this._scrollToElementAdditionalOffset = offset;\n }\n\n deleteScrollToElementAdditionalOffset() {\n delete this._scrollToElementAdditionalOffset;\n }\n\n /**\n * むンスタンスが実行可胜になった際にresolveされるPromiseむンスタンスを返华したす。\n */\n ready(): Promise<void> {\n this._checkDestroyed();\n if (!this.isPending) return Promise.resolve();\n return new Promise((resolve) => this._readyResolvers.push(resolve));\n }\n\n /**\n * むンスタンスの動䜜を開始したす。本むンスタンスはElementが蚭定され初期化された際に自動で動䜜を開始したすが、\n * [[Scroller.stop]]メ゜ッドを利甚し動䜜を停止した埌に再開する堎合に本メ゜ッドを利甚したす。\n */\n async start(): Promise<void> {\n this._checkDestroyed();\n if (this.isRunning) return;\n await this.ready();\n this._startListeners();\n this._setState(ScrollerState.Running);\n }\n\n /**\n * むンスタンスの動䜜スクロヌル、リサむズむベントの怜知等を停止したす。\n * 䜕らかの理由で動䜜を停止させたい堎合に利甚しおください。\n * 本メ゜ッドを実行埌もむンスタンス内の状態は保持されたたたです。\n * 完党にむンスタンスを砎棄するためには[[Scroller.destroy]]を利甚しおください。\n */\n stop(): void {\n this._checkDestroyed();\n if (!this.isRunning) return;\n this._stopListeners();\n this._setState(ScrollerState.Ready);\n }\n\n /**\n * むンスタンスの動䜜を停止し、内郚情報を完党に砎棄したす。\n * これに䌎い、スクロヌル䞭であった堎合にはキャンセルされ、以埌むベント通知は完党に行われたせん。\n * たた[[Scroller.start]]メ゜ッドでの再利甚も䞍可ずなりたす。\n * 本むンスタンスの利甚を完党に停止する堎合に必ず実行し、利甚偎のオブゞェクト等においお本むンスタンスぞの参照を完党に削陀しおください。\n * 本メ゜ッドはSPA等でのサヌビスにおいおは意識的に実行する事を匷く掚奚したす。\n */\n destroy() {\n if (this.isDestroyed) return;\n this.stop();\n this.cancel();\n this._readyResolvers = [];\n this._scrollStoppers = [];\n this._scrollEnable();\n this._observers = [];\n visibilityManager.remove(this._visibilityListener);\n\n delete (this as any)._el;\n delete (this as any)._eventTarget;\n delete this._scrollListener;\n delete this._resizeListener;\n delete (this as any)._resizeObserver;\n delete (this as any)._scrollToResult;\n delete (this as any)._visibilityListener;\n\n this.deleteScrollToElementAdditionalOffset();\n this._setState(ScrollerState.Destroyed);\n this.offAll();\n }\n\n /**\n * むンスタンス内郚のスクロヌル量や、Elementのサむズを匷制的に曎新したす。\n * 基本的に利甚が必芁なケヌスはありたせんが、䜕らかの理由で曎新をトリガヌしたい堎合に利甚したす。\n */\n update(): void {\n this._update();\n }\n\n /**\n * むンスタンス内の情報をjsonオブゞェクトずしお返华したす。\n * 情報の詳现は[[ScrollerObserver]]を参照しおください。\n */\n toJSON(): ScrollerObserver {\n const json: Partial<ScrollerObserver> = {};\n for (const key of scrollerObservableKeys) {\n json[key] = this[key] as any;\n }\n return <ScrollerObserver>json;\n }\n\n /**\n * [[Scroller.toJSON]]の情報を文字列ずしお返华したす。\n */\n toString(): string {\n return JSON.stringify(this.toJSON());\n }\n\n /**\n * 本むンスタンスの情報を賌読するためのオブゞェクトを蚭定する事で、\n * むンスタンスの内郚情報が倉曎される床にパラメヌタが同期されたす。\n * 蚭定するオブゞェクトは[[ScrollerObserver]]のむンタヌフェヌスを満たしおいれば内容は問いたせん。\n * 本機胜により同期される方法は単玔にオブゞェクトプロパティぞの倉数代入です。\n * 埓っお察象ずなるプロパティをgetterずしお実装Ex: Vue computed等、、しおおく事により、\n * 同期を受け取るオブゞェクト偎でパラメヌタ倉曎埌の動䜜をリアクティブに実装可胜です。\n * @param observer - 同期させたいオブゞェクト\n * @returns 同期を停止するためのメ゜ッド\n */\n observe(observer: ScrollerObserver): () => void {\n if (!this._observers.includes(observer)) {\n this._observers.push(observer);\n }\n this._syncToObserver(observer);\n const unobserve = () => {\n this.unobserve(observer);\n };\n return unobserve;\n }\n\n /**\n * [[Scroller.observe]]でパラメヌタ同期䞭のオブゞェクトを停止したす。\n * [[Scroller.destroy]]実行時にも、同期䞭のオブゞェクトは党停止されたすが、destroy前に任意のタむミングで停止したい堎合\n * 本メ゜ッドを利甚したす。\n * @param observer - 同期䞭のオブゞェクト\n */\n unobserve(observer: ScrollerObserver) {\n const index = this._observers.indexOf(observer);\n if (index !== -1) {\n this._observers.splice(index, 1);\n }\n }\n\n /**\n * スクロヌル䞭であった堎合、スクロヌルをキャンセルしたす。\n */\n cancel() {\n if (!this._scrollToResult) return;\n this._scrollToResult.cancel();\n this._clearScrollToResult();\n }\n\n /**\n * x, yの差分pxを指定しスクロヌルしたす。\n * メ゜ッド、パラメヌタの詳现は[[scrollBy]]を参照しおください。\n * @param diffX - 暪移動量\n * @param diffY - 瞊移動量\n * @param options - スクロヌルオプション\n */\n by(\n diffX: number,\n diffY: number,\n options?: ScrollerScrollOptions,\n ): ScrollResult {\n return this._setScrollToResult(\n scrollBy(diffX, diffY, this._createMergedScrollOptions(options)),\n );\n }\n\n /**\n * 指定の座暙ぞスクロヌルしたす。\n * メ゜ッド、パラメヌタの詳现は[[scrollTo]]を参照しおください。\n * @param scrollPosition - 座暙\n * @param options - スクロヌルオプション\n */\n to(\n scrollPosition: Partial<ScrollPosition>,\n options?: ScrollerScrollOptions,\n ): ScrollResult {\n return this._setScrollToResult(\n scrollTo(scrollPosition, this._createMergedScrollOptions(options)),\n );\n }\n\n /**\n * 指定の芁玠の䜍眮ぞスクロヌルしたす。\n * メ゜ッド、パラメヌタの詳现は[[scrollToElement]]を参照しおください。\n * オプションのx, yが未蚭定であった堎合、[[Scroller.baseAxis]]により自動蚭定されたす。\n * @param target - スクロヌル先の芁玠\n * @param options - スクロヌルオプション\n */\n toElement(\n target: ScrollToElementTarget,\n options?: ScrollerScrollToElementOptions,\n ) {\n const merged = this._createMergedScrollToElementOptions(options);\n if (merged.x === undefined) merged.x = this.baseAxis === 'x';\n if (merged.y === undefined) merged.y = this.baseAxis === 'y';\n\n return this._setScrollToResult(scrollToElement(target, merged));\n }\n\n /**\n * 指定の蟺ぞスクロヌルしたす。\n * メ゜ッド、パラメヌタの詳现は[[scrollToSide]]を参照しおください。\n * @param targets - スクロヌル先\n * @param options - スクロヌルオプション\n */\n toSide(\n targets: ScrollToSideTargets,\n options?: ScrollerScrollOptions,\n ): ScrollResult {\n return this._setScrollToResult(\n scrollToSide(targets, this._createMergedScrollOptions(options)),\n );\n }\n\n /**\n * 䞊蟺ぞスクロヌルしたす。\n * メ゜ッド、パラメヌタの詳现は[[scrollToTop]]を参照しおください。\n * @param options - スクロヌルオプション\n */\n toTop(options?: ScrollerScrollOptions) {\n return this._setScrollToResult(\n scrollToTop(this._createMergedScrollOptions(options)),\n );\n }\n\n /**\n * 右蟺ぞスクロヌルしたす。\n * メ゜ッド、パラメヌタの詳现は[[scrollToRight]]を参照しおください。\n * @param options - スクロヌルオプション\n */\n toRight(options?: ScrollerScrollOptions) {\n return this._setScrollToResult(\n scrollToRight(this._createMergedScrollOptions(options)),\n );\n }\n\n /**\n * 䞋蟺ぞスクロヌルしたす。\n * メ゜ッド、パラメヌタの詳现は[[scrollToBottom]]を参照しおください。\n * @param options - スクロヌルオプション\n */\n toBottom(options?: ScrollerScrollOptions) {\n return this._setScrollToResult(\n scrollToBottom(this._createMergedScrollOptions(options)),\n );\n }\n\n /**\n * 巊蟺ぞスクロヌルしたす。\n * メ゜ッド、パラメヌタの詳现は[[scrollToLeft]]を参照しおください。\n * @param options - スクロヌルオプション\n */\n toLeft(options?: ScrollerScrollOptions) {\n return this._setScrollToResult(\n scrollToLeft(this._createMergedScrollOptions(options)),\n );\n }\n\n /**\n * 巊䞊コヌナヌぞスクロヌルしたす。\n * メ゜ッド、パラメヌタの詳现は[[scrollToLeftTop]]を参照しおください。\n * @param options - スクロヌルオプション\n */\n toLeftTop(options?: ScrollerScrollOptions) {\n return this._setScrollToResult(\n scrollToLeftTop(this._createMergedScrollOptions(options)),\n );\n }\n\n /**\n * 巊䞋コヌナヌぞスクロヌルしたす。\n * メ゜ッド、パラメヌタの詳现は[[scrollToLeftBottom]]を参照しおください。\n * @param options - スクロヌルオプション\n */\n toLeftBottom(options?: ScrollerScrollOptions) {\n return this._setScrollToResult(\n scrollToLeftBottom(this._createMergedScrollOptions(options)),\n );\n }\n\n /**\n * 右䞊コヌナヌぞスクロヌルしたす。\n * メ゜ッド、パラメヌタの詳现は[[scrollToRightTop]]を参照しおください。\n * @param options - スクロヌルオプション\n */\n toRightTop(options?: ScrollerScrollOptions) {\n return this._setScrollToResult(\n scrollToRightTop(this._createMergedScrollOptions(options)),\n );\n }\n\n /**\n * 右䞋コヌナヌぞスクロヌルしたす。\n * メ゜ッド、パラメヌタの詳现は[[scrollToRightBottom]]を参照しおください。\n * @param options - スクロヌルオプション\n */\n toRightBottom(options?: ScrollerScrollOptions) {\n return this._setScrollToResult(\n scrollToRightBottom(this._createMergedScrollOptions(options)),\n );\n }\n\n /**\n * スクロヌルの停止を芁求したす。\n * @param stopper - 停止芁求゜ヌス\n */\n pushScrollStopper(stopper: ScrollStopper) {\n if (!this._scrollStoppers.includes(stopper)) {\n this._scrollStoppers.push(stopper);\n if (this._scrollStoppers.length === 1) {\n this._updateScrollable();\n this._syncToObservers(['scrollEnabled']);\n }\n }\n return () => {\n this.removeScrollStopper(stopper);\n };\n }\n\n /**\n * スクロヌルの停止芁求を解陀したす。<br>\n * 別のプロセスにより異なる[[ScrollStopper]]が登録されおいる堎合、\n * スクロヌルは再開されない事に泚意しおください。\n * @param stopper - 停止芁求゜ヌス\n */\n removeScrollStopper(stopper: ScrollStopper) {\n const index = this._scrollStoppers.indexOf(stopper);\n if (index !== -1) {\n this._scrollStoppers.splice(index, 1);\n if (this._scrollStoppers.length === 0) {\n this._updateScrollable();\n this._syncToObservers(['scrollEnabled']);\n }\n }\n }\n\n private async _setup(): Promise<void> {\n this._updateScrollable();\n this._update();\n this._setState(ScrollerState.Ready);\n this.start();\n this.emit('ready', undefined);\n this._readyResolvers.forEach((resolve) => resolve());\n this._readyResolvers = [];\n }\n\n private _setState(state: ScrollerState): void {\n if (this._state !== state) {\n this._state = state;\n this._syncToObservers([\n 'state',\n 'isPending',\n 'isReady',\n 'isRunning',\n 'isDestroyed',\n ]);\n this.emit('changeState', state);\n }\n }\n\n private _checkDestroyed(): void {\n if (this.isDestroyed) {\n const message = 'already destroyed.';\n logger.error(message);\n throw new Error(message);\n }\n }\n\n private _update(width?: number, height?: number): void {\n this._updateContainerSize(width, height);\n this._updateScrollSize();\n this._updateScrollPositions();\n }\n\n private _updateContainerSize(width?: number, height?: number): void {\n const { el, _isBodyElement } = this;\n if (width === undefined) {\n if (!el) return;\n width = _isBodyElement\n ? (document.documentElement as HTMLElement).clientWidth\n : el.clientWidth;\n }\n\n if (height === undefined) {\n if (!el) return;\n height = _isBodyElement\n ? (document.documentElement as HTMLElement).clientHeight\n : el.clientHeight;\n }\n\n const { _containerWidth, _containerHeight } = this;\n this._containerWidth = width;\n this._containerHeight = height;\n if (width !== _containerWidth || height !== _containerHeight) {\n this._syncToObservers([\n 'containerWidth',\n 'containerHeight',\n 'scrollableX',\n 'scrollableY',\n ]);\n this.emit('resize', { width, height });\n }\n }\n\n private _updateScrollSize(): void {\n const { el, _scrollWidth, _scrollHeight } = this;\n if (!el) return;\n this._scrollWidth = el.scrollWidth;\n this._scrollHeight = el.scrollHeight;\n if (\n _scrollWidth !== this._scrollWidth ||\n _scrollHeight !== this._scrollHeight\n ) {\n this._syncToObservers([\n 'scrollWidth',\n 'scrollHeight',\n 'scrollableX',\n 'scrollableY',\n ]);\n }\n }\n\n private _startScrollSizeObserver() {\n if (!IN_WINDOW) return;\n\n this._stopScrollSizeObserver();\n\n if (this.scrollSizeObserver) {\n this._scrollSizeObserverPollingId = window.setInterval(() => {\n if (!this.scrollSizeObserver || this.isDestroyed) {\n this._stopScrollSizeObserver();\n return;\n }\n\n this._updateScrollSize();\n }, this.scrollSizeObserver.interval);\n }\n }\n\n private _stopScrollSizeObserver() {\n if (this._scrollSizeObserverPollingId !== null) {\n clearInterval(this._scrollSizeObserverPollingId);\n this._scrollSizeObserverPollingId = null;\n }\n }\n\n private _updateScrollPositions(): void {\n if (!this.el) return;\n this._scrollTop = this.el.scrollTop;\n this._scrollLeft = this.el.scrollLeft;\n\n // advanced values\n this._scrollBottom =\n this._scrollHeight - this._scrollTop - this._containerHeight;\n this._scrollRight =\n this._scrollWidth - this._scrollLeft - this._containerWidth;\n\n this._syncToObservers([\n 'scrollTop',\n 'scrollRight',\n 'scrollBottom',\n 'scrollLeft',\n ]);\n }\n\n private _startListeners() {\n this._stopListeners();\n\n this._scrollListener = () => {\n this._onScroll();\n };\n this._eventTarget.addEventListener('scroll', this._scrollListener, false);\n\n if (this._isRootElement) {\n this._resizeListener = () => {\n this._onResize();\n };\n window.addEventListener('resize', this._resizeListener, false);\n } else {\n this._resizeObserver = new ResizeObserver((entries) => {\n for (const entry of entries) {\n const { width, height } = entry.contentRect;\n this._onResize(width, height);\n }\n });\n this._el && this._resizeObserver.observe(this._el);\n }\n\n if (visibilityManager.isVisible) {\n this._scrollSizeObserverSuspended = false;\n this._startScrollSizeObserver();\n } else {\n this._scrollSizeObserverSuspended = true;\n }\n }\n\n private _stopListeners() {\n if (this._scrollListener) {\n this._eventTarget.removeEventListener(\n 'scroll',\n this._scrollListener,\n false,\n );\n delete this._scrollListener;\n }\n\n if (this._resizeListener) {\n if (this._isDocumentElement) {\n window.removeEventListener('resize', this._resizeListener, false);\n delete this._resizeListener;\n }\n }\n\n if (this._resizeObserver && this._el) {\n this._resizeObserver.unobserve(this._el);\n this._resizeObserver.disconnect();\n delete this._resizeObserver;\n }\n }\n\n private _clearScrollingJudgeTimer() {\n if (this._scrollingJudgeTimerId !== null) {\n clearTimeout(this._scrollingJudgeTimerId);\n this._scrollingJudgeTimerId = null;\n }\n }\n\n private _onResize(width?: number, height?: number) {\n this._update(width, height);\n }\n\n private _triggerScrollTick(event: keyof ScrollerScrollEventMap): void {\n const { _nowScrolling } = this;\n\n if (event === 'scrollStart') {\n this._startX = this._scrollLeft;\n this._startY = this._scrollTop;\n this._lastTotalX = 0;\n this._lastTotalY = 0;\n this._nowScrolling = true;\n } else if (event === 'scrollEnd') {\n this._nowScrolling = false;\n }\n\n if (_nowScrolling !== this._nowScrolling) {\n this._syncToObservers('nowScrolling');\n }\n this.emit(event, this.lastPayload);\n }\n\n private _onScroll() {\n if (!this.scrollEnabled && this._el) {\n this._el.scrollLeft = this._scrollLeft;\n this._el.scrollTop = this._scrollTop;\n return;\n }\n\n // remember before values\n const {\n _scrollTop,\n _scrollLeft,\n _lastAxis,\n _lastDirection,\n _lastXDirection,\n _lastYDirection,\n } = this;\n\n // ,,,and next update values\n this._updateScrollPositions();\n\n // calculate scrolled amount at (ticked time)\n const tickedX = this._scrollLeft - _scrollLeft;\n const tickedY = this._scrollTop - _scrollTop;\n this._tickedX = tickedX;\n this._tickedY = tickedY;\n\n // update axis\n if (tickedX === tickedY) {\n this._lastAxis = this.baseAxis;\n } else {\n this._lastAxis = Math.abs(tickedX) > Math.abs(tickedY) ? 'x' : 'y';\n }\n\n // update directions\n if (_scrollTop < this._scrollTop) {\n this._lastYDirection = 'bottom';\n } else if (_scrollTop > this._scrollTop) {\n this._lastYDirection = 'top';\n }\n\n if (_scrollLeft < this._scrollLeft) {\n this._lastXDirection = 'right';\n } else if (_scrollLeft > this._scrollLeft) {\n this._lastXDirection = 'left';\n }\n\n this._lastDirection =\n this._lastAxis === 'y' ? this._lastYDirection : this._lastXDirection;\n\n // judge scroll end by before axis and directions\n const axisIsChanged = this._lastAxis !== _lastAxis;\n const lastXDirectionIsChanged = this._lastXDirection !== _lastXDirection;\n const lastYDirectionIsChanged = this._lastYDirection !== _lastYDirection;\n const lastDirectionIsChanged = this._lastDirection !== _lastDirection;\n\n if (axisIsChanged) {\n this.emit('changeAxis', this._lastAxis);\n }\n\n if (lastXDirectionIsChanged) {\n this.emit('changeLastXDirection', this._lastXDirection);\n }\n\n if (lastYDirectionIsChanged) {\n this.emit('changeLastYDirection', this._lastYDirection);\n }\n\n if (lastDirectionIsChanged) {\n this.emit('changeLastDirection', this._lastDirection);\n }\n\n if (\n axisIsChanged ||\n lastXDirectionIsChanged ||\n lastYDirectionIsChanged ||\n lastDirectionIsChanged\n ) {\n this._syncToObservers([\n 'lastAxis',\n 'lastDirection',\n 'lastYDirection',\n 'lastXDirection',\n ]);\n }\n\n if (this._nowScrolling) {\n if (\n axisIsChanged ||\n (_lastAxis === 'y' && lastYDirectionIsChanged) ||\n (_lastAxis === 'x' && lastXDirectionIsChanged)\n ) {\n // emit scroll end & start(both)\n this._triggerScrollTick('scrollEnd');\n } else {\n // add scroll amounts\n this._lastTotalX = this._scrollLeft - this._startX;\n this._lastTotalY = this._scrollTop - this._startY;\n this._triggerScrollTick('scroll');\n }\n }\n\n // judge scroll start\n if (!this._nowScrolling) {\n this._updateScrollSize();\n this._triggerScrollTick('scrollStart');\n }\n\n this._clearScrollingJudgeTimer();\n this._scrollingJudgeTimerId = window.setTimeout(() => {\n this._triggerScrollTick('scrollEnd');\n }, this.scrollingJudgeInterval);\n }\n\n private _syncToObserver(\n observer: ScrollerObserver,\n keys: ScrollerObservableKeys[] = scrollerObservableKeys,\n ) {\n for (const key of keys) {\n (observer as any)[key] = this[key];\n }\n }\n\n private _syncToObservers(\n keys: ScrollerObservableKeys | ScrollerObservableKeys[],\n ) {\n if (this._observers.length === 0) return;\n keys = typeof keys === 'string' ? [keys] : keys;\n for (const observer of this._observers) {\n this._syncToObserver(observer, keys);\n }\n }\n\n private _checkElement() {\n const { _el } = this;\n if (!_el) {\n const message = 'missing element';\n logger.error(message);\n throw new Error(message);\n }\n return _el;\n }\n\n private _createMergedScrollOptions(\n source?: ScrollerScrollOptions,\n ): ScrollOptions {\n const el = this._checkElement();\n const merged: ScrollOptions = {\n container: el,\n ...this.scrollSettingsDefaults,\n ...source,\n };\n return merged;\n }\n\n private _createMergedScrollToElementOptions(\n source?: ScrollerScrollToElementOptions,\n ): ScrollToElementOptions {\n const el = this._checkElement();\n const merged: ScrollToElementOptions = {\n container: el,\n ...this.scrollToElementSettingsDefaults,\n ...source,\n };\n let { _scrollToElementAdditionalOffset: additionalOffset } = this;\n if (!additionalOffset) return merged;\n if (typeof additionalOffset === 'function') {\n additionalOffset = additionalOffset(this);\n }\n if (!additionalOffset) return merged;\n if (typeof additionalOffset === 'number') {\n additionalOffset = {\n x: additionalOffset,\n y: additionalOffset,\n };\n }\n let { offset } = merged;\n if (!offset) {\n merged.offset = additionalOffset;\n return merged;\n }\n if (typeof offset === 'number') {\n offset = {\n x: offset,\n y: offset,\n };\n }\n\n offset.x = (offset.x || 0) + (additionalOffset.x || 0);\n offset.y = (offset.y || 0) + (additionalOffset.y || 0);\n merged.offset = offset;\n return merged;\n }\n\n private _clearScrollToResult() {\n if (!this._scrollToResult) return;\n this._scrollToResult = null;\n }\n\n private _setScrollToResult(result: ScrollResult): ScrollResult {\n this._scrollToResult = result;\n result.promise.then(() => {\n this._clearScrollToResult();\n });\n return result;\n }\n\n private _updateScrollable() {\n if (this.scrollEnabled) {\n this._scrollEnable();\n } else {\n this._scrollDisable();\n }\n }\n\n private _scrollEnable() {\n enableScroll(this._checkElement());\n }\n\n private _scrollDisable() {\n const el = this._checkElement();\n this.cancel();\n disableScroll(el);\n }\n}\n"]}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@fastkit/scroller",
3
- "version": "0.14.5",
3
+ "version": "0.15.0",
4
4
  "description": "Library for controlling the scrolling state of DOM elements.",
5
5
  "keywords": [
6
6
  "fastkit",
@@ -41,10 +41,10 @@
41
41
  ],
42
42
  "dependencies": {
43
43
  "bezier-easing": "^2.1.0",
44
+ "@fastkit/helpers": "^0.15.0",
44
45
  "@fastkit/ev": "^0.14.1",
45
- "@fastkit/helpers": "^0.14.5",
46
- "@fastkit/tiny-logger": "^0.14.5",
47
- "@fastkit/visibility": "^0.14.5"
46
+ "@fastkit/tiny-logger": "^0.15.0",
47
+ "@fastkit/visibility": "^0.15.0"
48
48
  },
49
49
  "buildOptions": {
50
50
  "name": "Scroller"