@aiquants/virtualscroll 3.11.1 → 3.11.2
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/CHANGELOG.md +44 -0
- package/README.md +6 -4
- package/dist/ScrollBar.d.ts.map +1 -1
- package/dist/ScrollPane.d.ts.map +1 -1
- package/dist/TapScrollCircle.d.ts.map +1 -1
- package/dist/VirtualGrid.d.ts.map +1 -1
- package/dist/VirtualScroll.d.ts.map +1 -1
- package/dist/index.cjs +1 -1
- package/dist/index.js +1619 -1465
- package/dist/residualQuantizer.d.ts.map +1 -1
- package/dist/useGridTapScroll.d.ts.map +1 -1
- package/dist/useWheelBridge.d.ts.map +1 -1
- package/package.json +4 -1
- package/src/ScrollBar.tsx +61 -34
- package/src/ScrollPane.tsx +16 -0
- package/src/TapScrollCircle.tsx +8 -0
- package/src/VirtualGrid.tsx +70 -0
- package/src/VirtualScroll.tsx +47 -17
- package/src/residualQuantizer.ts +14 -0
- package/src/useGridTapScroll.ts +35 -9
- package/src/useWheelBridge.ts +14 -0
package/src/useWheelBridge.ts
CHANGED
|
@@ -95,6 +95,12 @@ export const useWheelBridge = (target: RefObject<WheelBridgeTarget | null>, opti
|
|
|
95
95
|
// WeakMap なので、外し損ねた要素があっても要素ごと GC される。
|
|
96
96
|
const attachedRef = useRef<WeakMap<HTMLElement, (event: WheelEvent) => void>>(new WeakMap())
|
|
97
97
|
|
|
98
|
+
/**
|
|
99
|
+
* The ref callback for an element outside the pane: it attaches one non-passive wheel listener per element, which applies each
|
|
100
|
+
* wheel event to the target, and returns the cleanup that removes it (React 19). Its identity never changes.
|
|
101
|
+
* ペインの外の要素に付ける ref コールバック。要素ごとに 1 つの非 passive なホイールのリスナーを付け (ホイールのイベントをそれぞれ対象へ当てる)、
|
|
102
|
+
* それを外す後始末を返す (React 19)。同一性は変わらない。
|
|
103
|
+
*/
|
|
98
104
|
return useCallback((node: HTMLElement | null) => {
|
|
99
105
|
// ❗ null 呼び出しでは何も外さない。どの要素の話か分からないため、ここで外すと
|
|
100
106
|
// 無関係の要素を巻き添えにする。解除は下のクリーンアップ (要素を知っている) が行う。
|
|
@@ -111,6 +117,10 @@ export const useWheelBridge = (target: RefObject<WheelBridgeTarget | null>, opti
|
|
|
111
117
|
return
|
|
112
118
|
}
|
|
113
119
|
|
|
120
|
+
/**
|
|
121
|
+
* Applies one wheel event to the target unless the bridge is disabled.
|
|
122
|
+
* ブリッジが無効でなければ、ホイールのイベント 1 つを対象へ当てる処理。
|
|
123
|
+
*/
|
|
114
124
|
const listener = (event: WheelEvent) => {
|
|
115
125
|
if (optionsRef.current?.enableBridge === false) {
|
|
116
126
|
return
|
|
@@ -126,6 +136,10 @@ export const useWheelBridge = (target: RefObject<WheelBridgeTarget | null>, opti
|
|
|
126
136
|
node.addEventListener("wheel", listener, { passive: false })
|
|
127
137
|
attachedRef.current.set(node, listener)
|
|
128
138
|
|
|
139
|
+
/**
|
|
140
|
+
* Removes the element's listener, when it is still the one this call attached.
|
|
141
|
+
* 要素のリスナーを、この呼び出しが付けたものである限り外す処理。
|
|
142
|
+
*/
|
|
129
143
|
// React 19 はこのクリーンアップを受け取ると `null` 呼び出しの代わりに実行する。
|
|
130
144
|
// ❗ listener の一致判定は**意図的な防御**である。ref コールバックの identity は固定
|
|
131
145
|
// (依存配列が空) なので、要素がマウントされている限り React は張り直さず、現状この分岐が
|