@fastkit/scroller 0.14.4 â 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 +3 -0
- package/dist/scroller.mjs +44 -87
- package/dist/scroller.mjs.map +1 -1
- package/package.json +4 -4
package/README.md
CHANGED
package/dist/scroller.mjs
CHANGED
|
@@ -37,8 +37,7 @@ var handleKeydown = (e) => {
|
|
|
37
37
|
};
|
|
38
38
|
function enableScroll(el) {
|
|
39
39
|
const _el = el;
|
|
40
|
-
if (!_el.__ps_ctx__)
|
|
41
|
-
return;
|
|
40
|
+
if (!_el.__ps_ctx__) return;
|
|
42
41
|
const { options } = _el.__ps_ctx__;
|
|
43
42
|
_el.removeEventListener("wheel", handleWheel, eventListenerOptions);
|
|
44
43
|
_el.removeEventListener("scroll", handleScroll, eventListenerOptions);
|
|
@@ -51,8 +50,7 @@ function enableScroll(el) {
|
|
|
51
50
|
function disableScroll(el, opts = {}) {
|
|
52
51
|
const { hideScrollbar = false } = opts;
|
|
53
52
|
const _el = el;
|
|
54
|
-
if (_el.__ps_ctx__)
|
|
55
|
-
return;
|
|
53
|
+
if (_el.__ps_ctx__) return;
|
|
56
54
|
const options = {
|
|
57
55
|
hideScrollbar
|
|
58
56
|
};
|
|
@@ -135,15 +133,13 @@ function cumulativeOffset(element) {
|
|
|
135
133
|
};
|
|
136
134
|
}
|
|
137
135
|
function on(element, events, handler, opts = { passive: false }) {
|
|
138
|
-
if (!Array.isArray(events))
|
|
139
|
-
events = [events];
|
|
136
|
+
if (!Array.isArray(events)) events = [events];
|
|
140
137
|
for (let i = 0; i < events.length; i++) {
|
|
141
138
|
element.addEventListener(events[i], handler, opts);
|
|
142
139
|
}
|
|
143
140
|
}
|
|
144
141
|
function off(element, events, handler) {
|
|
145
|
-
if (!Array.isArray(events))
|
|
146
|
-
events = [events];
|
|
142
|
+
if (!Array.isArray(events)) events = [events];
|
|
147
143
|
for (let i = 0; i < events.length; i++) {
|
|
148
144
|
element.removeEventListener(events[i], handler);
|
|
149
145
|
}
|
|
@@ -187,8 +183,7 @@ function scroll(diffX, diffY, options = {}, _computedValues) {
|
|
|
187
183
|
targetY = _computedValues.targetY;
|
|
188
184
|
} else {
|
|
189
185
|
$container = $(container);
|
|
190
|
-
if (!$container)
|
|
191
|
-
throw error(`missing container ${container}`);
|
|
186
|
+
if (!$container) throw error(`missing container ${container}`);
|
|
192
187
|
initialX = $container.scrollLeft;
|
|
193
188
|
initialY = $container.scrollTop;
|
|
194
189
|
targetX = initialX + diffX;
|
|
@@ -246,8 +241,7 @@ function scroll(diffX, diffY, options = {}, _computedValues) {
|
|
|
246
241
|
doneResolver();
|
|
247
242
|
}
|
|
248
243
|
function canceller(e = null, checkCancelable = false) {
|
|
249
|
-
if (checkCancelable && !cancelable)
|
|
250
|
-
return;
|
|
244
|
+
if (checkCancelable && !cancelable) return;
|
|
251
245
|
off($container, abortEvents, abortFn);
|
|
252
246
|
callbackValues.abortEventSource = e;
|
|
253
247
|
callbackValues.aborted = true;
|
|
@@ -262,10 +256,8 @@ function scroll(diffX, diffY, options = {}, _computedValues) {
|
|
|
262
256
|
return result;
|
|
263
257
|
}
|
|
264
258
|
function step(timestamp) {
|
|
265
|
-
if (callbackValues.aborted)
|
|
266
|
-
|
|
267
|
-
if (!timeStart)
|
|
268
|
-
timeStart = timestamp;
|
|
259
|
+
if (callbackValues.aborted) return done();
|
|
260
|
+
if (!timeStart) timeStart = timestamp;
|
|
269
261
|
timeElapsed = timestamp - timeStart;
|
|
270
262
|
let progress = Math.min(timeElapsed / duration, 1);
|
|
271
263
|
progress = easingFn(progress);
|
|
@@ -275,20 +267,16 @@ function scroll(diffX, diffY, options = {}, _computedValues) {
|
|
|
275
267
|
timeElapsed < duration ? window.requestAnimationFrame(step) : done();
|
|
276
268
|
}
|
|
277
269
|
function topLeft(top, left) {
|
|
278
|
-
if (y)
|
|
279
|
-
|
|
280
|
-
if (x)
|
|
281
|
-
$container.scrollLeft = left;
|
|
270
|
+
if (y) $container.scrollTop = top;
|
|
271
|
+
if (x) $container.scrollLeft = left;
|
|
282
272
|
}
|
|
283
273
|
function done() {
|
|
284
|
-
if (!callbackValues.aborted)
|
|
285
|
-
topLeft(targetY, targetX);
|
|
274
|
+
if (!callbackValues.aborted) topLeft(targetY, targetX);
|
|
286
275
|
timeStart = 0;
|
|
287
276
|
off($container, abortEvents, abortFn);
|
|
288
277
|
callbackValues.progress = 1;
|
|
289
278
|
doneResolve();
|
|
290
|
-
if (!callbackValues.aborted && onDone)
|
|
291
|
-
onDone(callbackValues);
|
|
279
|
+
if (!callbackValues.aborted && onDone) onDone(callbackValues);
|
|
292
280
|
}
|
|
293
281
|
}
|
|
294
282
|
|
|
@@ -302,14 +290,11 @@ function scrollTo(scrollPosition, options = {}) {
|
|
|
302
290
|
let { x, y } = scrollPosition;
|
|
303
291
|
const container = options.container || defaultSettings.container;
|
|
304
292
|
const $container = $(container);
|
|
305
|
-
if (!$container)
|
|
306
|
-
throw error(`missing container ${container}`);
|
|
293
|
+
if (!$container) throw error(`missing container ${container}`);
|
|
307
294
|
const initialY = $container.scrollTop;
|
|
308
295
|
const initialX = $container.scrollLeft;
|
|
309
|
-
if (x === void 0)
|
|
310
|
-
|
|
311
|
-
if (y === void 0)
|
|
312
|
-
y = initialY;
|
|
296
|
+
if (x === void 0) x = initialX;
|
|
297
|
+
if (y === void 0) y = initialY;
|
|
313
298
|
const diffX = x - initialX;
|
|
314
299
|
const diffY = y - initialY;
|
|
315
300
|
return scroll(diffX, diffY, options, {
|
|
@@ -333,12 +318,10 @@ function scrollToElement(target, options = {}) {
|
|
|
333
318
|
const offsetSource = _options.offset;
|
|
334
319
|
const offset = typeof offsetSource === "number" ? { x: offsetSource, y: offsetSource } : offsetSource;
|
|
335
320
|
const $target = $(target);
|
|
336
|
-
if (!$target)
|
|
337
|
-
throw error(`missing element ${target}`);
|
|
321
|
+
if (!$target) throw error(`missing element ${target}`);
|
|
338
322
|
const container = _options.container || defaultSettings.container;
|
|
339
323
|
const $container = $(container);
|
|
340
|
-
if (!$container)
|
|
341
|
-
throw error(`missing container ${container}`);
|
|
324
|
+
if (!$container) throw error(`missing container ${container}`);
|
|
342
325
|
const cumulativeOffsetContainer = cumulativeOffset($container);
|
|
343
326
|
const cumulativeOffsetTarget = cumulativeOffset($target);
|
|
344
327
|
const initialY = $container.scrollTop;
|
|
@@ -371,12 +354,9 @@ function scrollToSide(targets, options) {
|
|
|
371
354
|
if (hasRight || hasBottom) {
|
|
372
355
|
const container = options && options.container || defaultSettings.container;
|
|
373
356
|
const $container = $(container);
|
|
374
|
-
if (!$container)
|
|
375
|
-
|
|
376
|
-
if (
|
|
377
|
-
position.x = $container.scrollWidth;
|
|
378
|
-
if (hasBottom)
|
|
379
|
-
position.y = $container.scrollHeight;
|
|
357
|
+
if (!$container) throw error(`missing container ${container}`);
|
|
358
|
+
if (hasRight) position.x = $container.scrollWidth;
|
|
359
|
+
if (hasBottom) position.y = $container.scrollHeight;
|
|
380
360
|
}
|
|
381
361
|
return scrollTo(position, options);
|
|
382
362
|
}
|
|
@@ -556,8 +536,7 @@ var Scroller = class extends EV {
|
|
|
556
536
|
return this._scrollTop;
|
|
557
537
|
}
|
|
558
538
|
set scrollTop(scrollTop) {
|
|
559
|
-
if (!this.el)
|
|
560
|
-
return;
|
|
539
|
+
if (!this.el) return;
|
|
561
540
|
this.el.scrollTop = scrollTop;
|
|
562
541
|
}
|
|
563
542
|
/**
|
|
@@ -567,8 +546,7 @@ var Scroller = class extends EV {
|
|
|
567
546
|
return this._scrollRight;
|
|
568
547
|
}
|
|
569
548
|
set scrollRight(scrollRight) {
|
|
570
|
-
if (!this.el)
|
|
571
|
-
return;
|
|
549
|
+
if (!this.el) return;
|
|
572
550
|
this.el.scrollLeft = this._scrollWidth - this._containerWidth - scrollRight;
|
|
573
551
|
}
|
|
574
552
|
/**
|
|
@@ -578,8 +556,7 @@ var Scroller = class extends EV {
|
|
|
578
556
|
return this._scrollBottom;
|
|
579
557
|
}
|
|
580
558
|
set scrollBottom(scrollBottom) {
|
|
581
|
-
if (!this.el)
|
|
582
|
-
return;
|
|
559
|
+
if (!this.el) return;
|
|
583
560
|
this.el.scrollTop = this._scrollHeight - this._containerHeight - scrollBottom;
|
|
584
561
|
}
|
|
585
562
|
/**
|
|
@@ -589,8 +566,7 @@ var Scroller = class extends EV {
|
|
|
589
566
|
return this._scrollLeft;
|
|
590
567
|
}
|
|
591
568
|
set scrollLeft(scrollLeft) {
|
|
592
|
-
if (!this.el)
|
|
593
|
-
return;
|
|
569
|
+
if (!this.el) return;
|
|
594
570
|
this.el.scrollLeft = scrollLeft;
|
|
595
571
|
}
|
|
596
572
|
/**
|
|
@@ -692,8 +668,7 @@ var Scroller = class extends EV {
|
|
|
692
668
|
} : settingOrElementOrQueryString;
|
|
693
669
|
if (convertedSetting.scrollingJudgeInterval !== void 0)
|
|
694
670
|
this.scrollingJudgeInterval = convertedSetting.scrollingJudgeInterval;
|
|
695
|
-
if (convertedSetting.baseAxis)
|
|
696
|
-
this.baseAxis = convertedSetting.baseAxis;
|
|
671
|
+
if (convertedSetting.baseAxis) this.baseAxis = convertedSetting.baseAxis;
|
|
697
672
|
this._lastAxis = this.baseAxis;
|
|
698
673
|
const { scrollSizeObserver } = convertedSetting;
|
|
699
674
|
if (scrollSizeObserver) {
|
|
@@ -717,8 +692,7 @@ var Scroller = class extends EV {
|
|
|
717
692
|
}
|
|
718
693
|
};
|
|
719
694
|
this._lastDirection = this._lastAxis === "y" ? "top" : "left";
|
|
720
|
-
if (!IN_WINDOW)
|
|
721
|
-
return;
|
|
695
|
+
if (!IN_WINDOW) return;
|
|
722
696
|
visibilityManager.change(this._visibilityListener);
|
|
723
697
|
this.setElement(convertedSetting.el);
|
|
724
698
|
}
|
|
@@ -728,8 +702,7 @@ var Scroller = class extends EV {
|
|
|
728
702
|
* @param el - Elementããããã¯CSSã¯ãšãªã»ã¬ã¯ã¿æååãæå®ããŸãã
|
|
729
703
|
*/
|
|
730
704
|
setElement(el) {
|
|
731
|
-
if (el === null)
|
|
732
|
-
return;
|
|
705
|
+
if (el === null) return;
|
|
733
706
|
if (!IN_WINDOW)
|
|
734
707
|
logger.error("Element can be set only when it is under DOM context.");
|
|
735
708
|
this.stop();
|
|
@@ -763,8 +736,7 @@ var Scroller = class extends EV {
|
|
|
763
736
|
*/
|
|
764
737
|
ready() {
|
|
765
738
|
this._checkDestroyed();
|
|
766
|
-
if (!this.isPending)
|
|
767
|
-
return Promise.resolve();
|
|
739
|
+
if (!this.isPending) return Promise.resolve();
|
|
768
740
|
return new Promise((resolve) => this._readyResolvers.push(resolve));
|
|
769
741
|
}
|
|
770
742
|
/**
|
|
@@ -773,8 +745,7 @@ var Scroller = class extends EV {
|
|
|
773
745
|
*/
|
|
774
746
|
async start() {
|
|
775
747
|
this._checkDestroyed();
|
|
776
|
-
if (this.isRunning)
|
|
777
|
-
return;
|
|
748
|
+
if (this.isRunning) return;
|
|
778
749
|
await this.ready();
|
|
779
750
|
this._startListeners();
|
|
780
751
|
this._setState("running" /* Running */);
|
|
@@ -787,8 +758,7 @@ var Scroller = class extends EV {
|
|
|
787
758
|
*/
|
|
788
759
|
stop() {
|
|
789
760
|
this._checkDestroyed();
|
|
790
|
-
if (!this.isRunning)
|
|
791
|
-
return;
|
|
761
|
+
if (!this.isRunning) return;
|
|
792
762
|
this._stopListeners();
|
|
793
763
|
this._setState("ready" /* Ready */);
|
|
794
764
|
}
|
|
@@ -800,8 +770,7 @@ var Scroller = class extends EV {
|
|
|
800
770
|
* æ¬ã¡ãœããã¯SPAçã§ã®ãµãŒãã¹ã«ãããŠã¯æèçã«å®è¡ããäºãåŒ·ãæšå¥šããŸãã
|
|
801
771
|
*/
|
|
802
772
|
destroy() {
|
|
803
|
-
if (this.isDestroyed)
|
|
804
|
-
return;
|
|
773
|
+
if (this.isDestroyed) return;
|
|
805
774
|
this.stop();
|
|
806
775
|
this.cancel();
|
|
807
776
|
this._readyResolvers = [];
|
|
@@ -880,8 +849,7 @@ var Scroller = class extends EV {
|
|
|
880
849
|
* ã¹ã¯ããŒã«äžã§ãã£ãå Žåãã¹ã¯ããŒã«ããã£ã³ã»ã«ããŸãã
|
|
881
850
|
*/
|
|
882
851
|
cancel() {
|
|
883
|
-
if (!this._scrollToResult)
|
|
884
|
-
return;
|
|
852
|
+
if (!this._scrollToResult) return;
|
|
885
853
|
this._scrollToResult.cancel();
|
|
886
854
|
this._clearScrollToResult();
|
|
887
855
|
}
|
|
@@ -917,10 +885,8 @@ var Scroller = class extends EV {
|
|
|
917
885
|
*/
|
|
918
886
|
toElement(target, options) {
|
|
919
887
|
const merged = this._createMergedScrollToElementOptions(options);
|
|
920
|
-
if (merged.x === void 0)
|
|
921
|
-
|
|
922
|
-
if (merged.y === void 0)
|
|
923
|
-
merged.y = this.baseAxis === "y";
|
|
888
|
+
if (merged.x === void 0) merged.x = this.baseAxis === "x";
|
|
889
|
+
if (merged.y === void 0) merged.y = this.baseAxis === "y";
|
|
924
890
|
return this._setScrollToResult(scrollToElement(target, merged));
|
|
925
891
|
}
|
|
926
892
|
/**
|
|
@@ -1083,13 +1049,11 @@ var Scroller = class extends EV {
|
|
|
1083
1049
|
_updateContainerSize(width, height) {
|
|
1084
1050
|
const { el, _isBodyElement } = this;
|
|
1085
1051
|
if (width === void 0) {
|
|
1086
|
-
if (!el)
|
|
1087
|
-
return;
|
|
1052
|
+
if (!el) return;
|
|
1088
1053
|
width = _isBodyElement ? document.documentElement.clientWidth : el.clientWidth;
|
|
1089
1054
|
}
|
|
1090
1055
|
if (height === void 0) {
|
|
1091
|
-
if (!el)
|
|
1092
|
-
return;
|
|
1056
|
+
if (!el) return;
|
|
1093
1057
|
height = _isBodyElement ? document.documentElement.clientHeight : el.clientHeight;
|
|
1094
1058
|
}
|
|
1095
1059
|
const { _containerWidth, _containerHeight } = this;
|
|
@@ -1107,8 +1071,7 @@ var Scroller = class extends EV {
|
|
|
1107
1071
|
}
|
|
1108
1072
|
_updateScrollSize() {
|
|
1109
1073
|
const { el, _scrollWidth, _scrollHeight } = this;
|
|
1110
|
-
if (!el)
|
|
1111
|
-
return;
|
|
1074
|
+
if (!el) return;
|
|
1112
1075
|
this._scrollWidth = el.scrollWidth;
|
|
1113
1076
|
this._scrollHeight = el.scrollHeight;
|
|
1114
1077
|
if (_scrollWidth !== this._scrollWidth || _scrollHeight !== this._scrollHeight) {
|
|
@@ -1121,8 +1084,7 @@ var Scroller = class extends EV {
|
|
|
1121
1084
|
}
|
|
1122
1085
|
}
|
|
1123
1086
|
_startScrollSizeObserver() {
|
|
1124
|
-
if (!IN_WINDOW)
|
|
1125
|
-
return;
|
|
1087
|
+
if (!IN_WINDOW) return;
|
|
1126
1088
|
this._stopScrollSizeObserver();
|
|
1127
1089
|
if (this.scrollSizeObserver) {
|
|
1128
1090
|
this._scrollSizeObserverPollingId = window.setInterval(() => {
|
|
@@ -1141,8 +1103,7 @@ var Scroller = class extends EV {
|
|
|
1141
1103
|
}
|
|
1142
1104
|
}
|
|
1143
1105
|
_updateScrollPositions() {
|
|
1144
|
-
if (!this.el)
|
|
1145
|
-
return;
|
|
1106
|
+
if (!this.el) return;
|
|
1146
1107
|
this._scrollTop = this.el.scrollTop;
|
|
1147
1108
|
this._scrollLeft = this.el.scrollLeft;
|
|
1148
1109
|
this._scrollBottom = this._scrollHeight - this._scrollTop - this._containerHeight;
|
|
@@ -1310,8 +1271,7 @@ var Scroller = class extends EV {
|
|
|
1310
1271
|
}
|
|
1311
1272
|
}
|
|
1312
1273
|
_syncToObservers(keys) {
|
|
1313
|
-
if (this._observers.length === 0)
|
|
1314
|
-
return;
|
|
1274
|
+
if (this._observers.length === 0) return;
|
|
1315
1275
|
keys = typeof keys === "string" ? [keys] : keys;
|
|
1316
1276
|
for (const observer of this._observers) {
|
|
1317
1277
|
this._syncToObserver(observer, keys);
|
|
@@ -1343,13 +1303,11 @@ var Scroller = class extends EV {
|
|
|
1343
1303
|
...source
|
|
1344
1304
|
};
|
|
1345
1305
|
let { _scrollToElementAdditionalOffset: additionalOffset } = this;
|
|
1346
|
-
if (!additionalOffset)
|
|
1347
|
-
return merged;
|
|
1306
|
+
if (!additionalOffset) return merged;
|
|
1348
1307
|
if (typeof additionalOffset === "function") {
|
|
1349
1308
|
additionalOffset = additionalOffset(this);
|
|
1350
1309
|
}
|
|
1351
|
-
if (!additionalOffset)
|
|
1352
|
-
return merged;
|
|
1310
|
+
if (!additionalOffset) return merged;
|
|
1353
1311
|
if (typeof additionalOffset === "number") {
|
|
1354
1312
|
additionalOffset = {
|
|
1355
1313
|
x: additionalOffset,
|
|
@@ -1373,8 +1331,7 @@ var Scroller = class extends EV {
|
|
|
1373
1331
|
return merged;
|
|
1374
1332
|
}
|
|
1375
1333
|
_clearScrollToResult() {
|
|
1376
|
-
if (!this._scrollToResult)
|
|
1377
|
-
return;
|
|
1334
|
+
if (!this._scrollToResult) return;
|
|
1378
1335
|
this._scrollToResult = null;
|
|
1379
1336
|
}
|
|
1380
1337
|
_setScrollToResult(result) {
|
|
@@ -1402,5 +1359,5 @@ var Scroller = class extends EV {
|
|
|
1402
1359
|
};
|
|
1403
1360
|
|
|
1404
1361
|
export { SCROLLABLE_KEY_CODES, Scroller, ScrollerState, defaultBaseSettings, defaultSettings, disableScroll, enableScroll, scrollBy, scrollTo, scrollToBottom, scrollToElement, scrollToElementSettingsDefaults, scrollToLeft, scrollToLeftBottom, scrollToLeftTop, scrollToRight, scrollToRightBottom, scrollToRightTop, scrollToSide, scrollToTop };
|
|
1405
|
-
//# sourceMappingURL=
|
|
1362
|
+
//# sourceMappingURL=scroller.mjs.map
|
|
1406
1363
|
//# sourceMappingURL=scroller.mjs.map
|
package/dist/scroller.mjs.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/scroller.ts","../src/util.ts","../src/logger.ts","../src/prevent-scroll.ts","../src/scroll/schemes.ts","../src/scroll/scroll-by-internal.ts","../src/scroll/easings.ts","../src/scroll/util.ts","../src/scroll/scroll-by.ts","../src/scroll/scroll-to.ts","../src/scroll/scroll-to-element.ts","../src/scroll/scroll-to-side.ts"],"names":["isBodyElement","ScrollerState"],"mappings":"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","sourcesContent":["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","// 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","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","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 { 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"]}
|
|
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.
|
|
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/
|
|
46
|
-
"@fastkit/visibility": "^0.
|
|
47
|
-
"@fastkit/tiny-logger": "^0.14.4"
|
|
46
|
+
"@fastkit/tiny-logger": "^0.15.0",
|
|
47
|
+
"@fastkit/visibility": "^0.15.0"
|
|
48
48
|
},
|
|
49
49
|
"buildOptions": {
|
|
50
50
|
"name": "Scroller"
|