@anker-in/headless-ui 1.1.74 → 1.1.76
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/dist/cjs/biz-components/ActiveShelf/ProductCard.js +1 -1
- package/dist/cjs/biz-components/ActiveShelf/ProductCard.js.map +2 -2
- package/dist/cjs/biz-components/ActivityMechanism/index.d.ts +9 -0
- package/dist/cjs/biz-components/ActivityMechanism/index.js +2 -0
- package/dist/cjs/biz-components/ActivityMechanism/index.js.map +7 -0
- package/dist/cjs/biz-components/ActivityMechanism/types.d.ts +43 -0
- package/dist/cjs/biz-components/ActivityMechanism/types.js +2 -0
- package/dist/cjs/biz-components/ActivityMechanism/types.js.map +7 -0
- package/dist/cjs/biz-components/ActivitySchedule/index.d.ts +3 -0
- package/dist/cjs/biz-components/ActivitySchedule/index.js +2 -0
- package/dist/cjs/biz-components/ActivitySchedule/index.js.map +7 -0
- package/dist/cjs/biz-components/ActivitySchedule/types.d.ts +44 -0
- package/dist/cjs/biz-components/ActivitySchedule/types.js +2 -0
- package/dist/cjs/biz-components/ActivitySchedule/types.js.map +7 -0
- package/dist/cjs/biz-components/AnchorNavigation/index.d.ts +20 -0
- package/dist/cjs/biz-components/AnchorNavigation/index.js +1 -1
- package/dist/cjs/biz-components/AnchorNavigation/index.js.map +3 -3
- package/dist/cjs/biz-components/EventSchedule/index.js +1 -1
- package/dist/cjs/biz-components/EventSchedule/index.js.map +2 -2
- package/dist/cjs/biz-components/FooterNavigation/index.js +1 -1
- package/dist/cjs/biz-components/FooterNavigation/index.js.map +3 -3
- package/dist/cjs/biz-components/FooterNavigation/types.d.ts +7 -0
- package/dist/cjs/biz-components/FooterNavigation/types.js +1 -1
- package/dist/cjs/biz-components/FooterNavigation/types.js.map +2 -2
- package/dist/cjs/biz-components/GiftShelf/index.d.ts +3 -0
- package/dist/cjs/biz-components/GiftShelf/index.js +2 -0
- package/dist/cjs/biz-components/GiftShelf/index.js.map +7 -0
- package/dist/cjs/biz-components/GiftShelf/types.d.ts +120 -0
- package/dist/cjs/biz-components/GiftShelf/types.js +2 -0
- package/dist/cjs/biz-components/GiftShelf/types.js.map +7 -0
- package/dist/cjs/biz-components/GiftTierShelf/index.d.ts +3 -0
- package/dist/cjs/biz-components/GiftTierShelf/index.js +2 -0
- package/dist/cjs/biz-components/GiftTierShelf/index.js.map +7 -0
- package/dist/cjs/biz-components/GiftTierShelf/types.d.ts +75 -0
- package/dist/cjs/biz-components/GiftTierShelf/types.js +2 -0
- package/dist/cjs/biz-components/GiftTierShelf/types.js.map +7 -0
- package/dist/cjs/biz-components/HeroBanner/HeroBanner.js +1 -1
- package/dist/cjs/biz-components/HeroBanner/HeroBanner.js.map +2 -2
- package/dist/cjs/biz-components/HeroBanner/types.d.ts +2 -0
- package/dist/cjs/biz-components/HeroBanner/types.js +1 -1
- package/dist/cjs/biz-components/HeroBanner/types.js.map +1 -1
- package/dist/cjs/biz-components/ImageWithText/ImageWithText.js +1 -1
- package/dist/cjs/biz-components/ImageWithText/ImageWithText.js.map +2 -2
- package/dist/cjs/biz-components/Ksp/index.d.ts +45 -6
- package/dist/cjs/biz-components/Ksp/index.js +1 -1
- package/dist/cjs/biz-components/Ksp/index.js.map +3 -3
- package/dist/cjs/biz-components/MediaPlayerBase/index.js +1 -1
- package/dist/cjs/biz-components/MediaPlayerBase/index.js.map +3 -3
- package/dist/cjs/biz-components/PromotionalBar/index.js +1 -1
- package/dist/cjs/biz-components/PromotionalBar/index.js.map +3 -3
- package/dist/cjs/biz-components/ThreeDCarousel/ThreeDCarousel.js +1 -1
- package/dist/cjs/biz-components/ThreeDCarousel/ThreeDCarousel.js.map +2 -2
- package/dist/cjs/biz-components/Title/index.js +1 -1
- package/dist/cjs/biz-components/Title/index.js.map +3 -3
- package/dist/cjs/biz-components/Title/types.d.ts +10 -1
- package/dist/cjs/biz-components/Title/types.js +1 -1
- package/dist/cjs/biz-components/Title/types.js.map +1 -1
- package/dist/cjs/biz-components/VideoModal/index.js +1 -1
- package/dist/cjs/biz-components/VideoModal/index.js.map +2 -2
- package/dist/cjs/biz-components/WheelLottery/BaseModal.d.ts +61 -0
- package/dist/cjs/biz-components/WheelLottery/BaseModal.js +2 -0
- package/dist/cjs/biz-components/WheelLottery/BaseModal.js.map +7 -0
- package/dist/cjs/biz-components/WheelLottery/ChanceMethods.d.ts +25 -0
- package/dist/cjs/biz-components/WheelLottery/ChanceMethods.js +2 -0
- package/dist/cjs/biz-components/WheelLottery/ChanceMethods.js.map +7 -0
- package/dist/cjs/biz-components/WheelLottery/ErrorModal.d.ts +47 -0
- package/dist/cjs/biz-components/WheelLottery/ErrorModal.js +2 -0
- package/dist/cjs/biz-components/WheelLottery/ErrorModal.js.map +7 -0
- package/dist/cjs/biz-components/WheelLottery/MyRewardsModal.d.ts +101 -0
- package/dist/cjs/biz-components/WheelLottery/MyRewardsModal.js +2 -0
- package/dist/cjs/biz-components/WheelLottery/MyRewardsModal.js.map +7 -0
- package/dist/cjs/biz-components/WheelLottery/PrizePool.d.ts +29 -0
- package/dist/cjs/biz-components/WheelLottery/PrizePool.js +2 -0
- package/dist/cjs/biz-components/WheelLottery/PrizePool.js.map +7 -0
- package/dist/cjs/biz-components/WheelLottery/RulesModal.d.ts +56 -0
- package/dist/cjs/biz-components/WheelLottery/RulesModal.js +2 -0
- package/dist/cjs/biz-components/WheelLottery/RulesModal.js.map +7 -0
- package/dist/cjs/biz-components/WheelLottery/ShareModal.d.ts +79 -0
- package/dist/cjs/biz-components/WheelLottery/ShareModal.js +2 -0
- package/dist/cjs/biz-components/WheelLottery/ShareModal.js.map +7 -0
- package/dist/cjs/biz-components/WheelLottery/Wheel.d.ts +27 -0
- package/dist/cjs/biz-components/WheelLottery/Wheel.js +2 -0
- package/dist/cjs/biz-components/WheelLottery/Wheel.js.map +7 -0
- package/dist/cjs/biz-components/WheelLottery/WinnerModal.d.ts +27 -0
- package/dist/cjs/biz-components/WheelLottery/WinnerModal.js +2 -0
- package/dist/cjs/biz-components/WheelLottery/WinnerModal.js.map +7 -0
- package/dist/cjs/biz-components/WheelLottery/index.d.ts +48 -0
- package/dist/cjs/biz-components/WheelLottery/index.js +2 -0
- package/dist/cjs/biz-components/WheelLottery/index.js.map +7 -0
- package/dist/cjs/biz-components/WheelLottery/types.d.ts +1229 -0
- package/dist/cjs/biz-components/WheelLottery/types.js +2 -0
- package/dist/cjs/biz-components/WheelLottery/types.js.map +7 -0
- package/dist/cjs/biz-components/index.d.ts +11 -0
- package/dist/cjs/biz-components/index.js +1 -1
- package/dist/cjs/biz-components/index.js.map +3 -3
- package/dist/cjs/components/Countdown.d.ts +27 -4
- package/dist/cjs/components/Countdown.js +1 -1
- package/dist/cjs/components/Countdown.js.map +3 -3
- package/dist/cjs/hooks/useCountDown.js +1 -1
- package/dist/cjs/hooks/useCountDown.js.map +3 -3
- package/dist/cjs/hooks/useDraggableScroll.d.ts +77 -0
- package/dist/cjs/hooks/useDraggableScroll.js +2 -0
- package/dist/cjs/hooks/useDraggableScroll.js.map +7 -0
- package/dist/esm/biz-components/ActiveShelf/ProductCard.js +1 -1
- package/dist/esm/biz-components/ActiveShelf/ProductCard.js.map +2 -2
- package/dist/esm/biz-components/ActivityMechanism/index.d.ts +9 -0
- package/dist/esm/biz-components/ActivityMechanism/index.js +2 -0
- package/dist/esm/biz-components/ActivityMechanism/index.js.map +7 -0
- package/dist/esm/biz-components/ActivityMechanism/types.d.ts +43 -0
- package/dist/esm/biz-components/ActivityMechanism/types.js +1 -0
- package/dist/esm/biz-components/ActivityMechanism/types.js.map +7 -0
- package/dist/esm/biz-components/ActivitySchedule/index.d.ts +3 -0
- package/dist/esm/biz-components/ActivitySchedule/index.js +2 -0
- package/dist/esm/biz-components/ActivitySchedule/index.js.map +7 -0
- package/dist/esm/biz-components/ActivitySchedule/types.d.ts +44 -0
- package/dist/esm/biz-components/ActivitySchedule/types.js +1 -0
- package/dist/esm/biz-components/ActivitySchedule/types.js.map +7 -0
- package/dist/esm/biz-components/AnchorNavigation/index.d.ts +20 -0
- package/dist/esm/biz-components/AnchorNavigation/index.js +1 -1
- package/dist/esm/biz-components/AnchorNavigation/index.js.map +3 -3
- package/dist/esm/biz-components/EventSchedule/index.js +1 -1
- package/dist/esm/biz-components/EventSchedule/index.js.map +3 -3
- package/dist/esm/biz-components/FooterNavigation/index.js +1 -1
- package/dist/esm/biz-components/FooterNavigation/index.js.map +3 -3
- package/dist/esm/biz-components/FooterNavigation/types.d.ts +7 -0
- package/dist/esm/biz-components/FooterNavigation/types.js.map +2 -2
- package/dist/esm/biz-components/GiftShelf/index.d.ts +3 -0
- package/dist/esm/biz-components/GiftShelf/index.js +2 -0
- package/dist/esm/biz-components/GiftShelf/index.js.map +7 -0
- package/dist/esm/biz-components/GiftShelf/types.d.ts +120 -0
- package/dist/esm/biz-components/GiftShelf/types.js +1 -0
- package/dist/esm/biz-components/GiftShelf/types.js.map +7 -0
- package/dist/esm/biz-components/GiftTierShelf/index.d.ts +3 -0
- package/dist/esm/biz-components/GiftTierShelf/index.js +2 -0
- package/dist/esm/biz-components/GiftTierShelf/index.js.map +7 -0
- package/dist/esm/biz-components/GiftTierShelf/types.d.ts +75 -0
- package/dist/esm/biz-components/GiftTierShelf/types.js +1 -0
- package/dist/esm/biz-components/GiftTierShelf/types.js.map +7 -0
- package/dist/esm/biz-components/HeroBanner/HeroBanner.js +1 -1
- package/dist/esm/biz-components/HeroBanner/HeroBanner.js.map +2 -2
- package/dist/esm/biz-components/HeroBanner/types.d.ts +2 -0
- package/dist/esm/biz-components/ImageWithText/ImageWithText.js +1 -1
- package/dist/esm/biz-components/ImageWithText/ImageWithText.js.map +2 -2
- package/dist/esm/biz-components/Ksp/index.d.ts +45 -6
- package/dist/esm/biz-components/Ksp/index.js +1 -1
- package/dist/esm/biz-components/Ksp/index.js.map +3 -3
- package/dist/esm/biz-components/MediaPlayerBase/index.js +1 -1
- package/dist/esm/biz-components/MediaPlayerBase/index.js.map +3 -3
- package/dist/esm/biz-components/PromotionalBar/index.js +1 -1
- package/dist/esm/biz-components/PromotionalBar/index.js.map +3 -3
- package/dist/esm/biz-components/ThreeDCarousel/ThreeDCarousel.js +1 -1
- package/dist/esm/biz-components/ThreeDCarousel/ThreeDCarousel.js.map +2 -2
- package/dist/esm/biz-components/Title/index.js +1 -1
- package/dist/esm/biz-components/Title/index.js.map +3 -3
- package/dist/esm/biz-components/Title/types.d.ts +10 -1
- package/dist/esm/biz-components/VideoModal/index.js +1 -1
- package/dist/esm/biz-components/VideoModal/index.js.map +2 -2
- package/dist/esm/biz-components/WheelLottery/BaseModal.d.ts +61 -0
- package/dist/esm/biz-components/WheelLottery/BaseModal.js +2 -0
- package/dist/esm/biz-components/WheelLottery/BaseModal.js.map +7 -0
- package/dist/esm/biz-components/WheelLottery/ChanceMethods.d.ts +25 -0
- package/dist/esm/biz-components/WheelLottery/ChanceMethods.js +2 -0
- package/dist/esm/biz-components/WheelLottery/ChanceMethods.js.map +7 -0
- package/dist/esm/biz-components/WheelLottery/ErrorModal.d.ts +47 -0
- package/dist/esm/biz-components/WheelLottery/ErrorModal.js +2 -0
- package/dist/esm/biz-components/WheelLottery/ErrorModal.js.map +7 -0
- package/dist/esm/biz-components/WheelLottery/MyRewardsModal.d.ts +101 -0
- package/dist/esm/biz-components/WheelLottery/MyRewardsModal.js +2 -0
- package/dist/esm/biz-components/WheelLottery/MyRewardsModal.js.map +7 -0
- package/dist/esm/biz-components/WheelLottery/PrizePool.d.ts +29 -0
- package/dist/esm/biz-components/WheelLottery/PrizePool.js +2 -0
- package/dist/esm/biz-components/WheelLottery/PrizePool.js.map +7 -0
- package/dist/esm/biz-components/WheelLottery/RulesModal.d.ts +56 -0
- package/dist/esm/biz-components/WheelLottery/RulesModal.js +2 -0
- package/dist/esm/biz-components/WheelLottery/RulesModal.js.map +7 -0
- package/dist/esm/biz-components/WheelLottery/ShareModal.d.ts +79 -0
- package/dist/esm/biz-components/WheelLottery/ShareModal.js +2 -0
- package/dist/esm/biz-components/WheelLottery/ShareModal.js.map +7 -0
- package/dist/esm/biz-components/WheelLottery/Wheel.d.ts +27 -0
- package/dist/esm/biz-components/WheelLottery/Wheel.js +2 -0
- package/dist/esm/biz-components/WheelLottery/Wheel.js.map +7 -0
- package/dist/esm/biz-components/WheelLottery/WinnerModal.d.ts +27 -0
- package/dist/esm/biz-components/WheelLottery/WinnerModal.js +2 -0
- package/dist/esm/biz-components/WheelLottery/WinnerModal.js.map +7 -0
- package/dist/esm/biz-components/WheelLottery/index.d.ts +48 -0
- package/dist/esm/biz-components/WheelLottery/index.js +2 -0
- package/dist/esm/biz-components/WheelLottery/index.js.map +7 -0
- package/dist/esm/biz-components/WheelLottery/types.d.ts +1229 -0
- package/dist/esm/biz-components/WheelLottery/types.js +2 -0
- package/dist/esm/biz-components/WheelLottery/types.js.map +7 -0
- package/dist/esm/biz-components/index.d.ts +11 -0
- package/dist/esm/biz-components/index.js +1 -1
- package/dist/esm/biz-components/index.js.map +2 -2
- package/dist/esm/components/Countdown.d.ts +27 -4
- package/dist/esm/components/Countdown.js +1 -1
- package/dist/esm/components/Countdown.js.map +3 -3
- package/dist/esm/hooks/useCountDown.js +1 -1
- package/dist/esm/hooks/useCountDown.js.map +3 -3
- package/dist/esm/hooks/useDraggableScroll.d.ts +77 -0
- package/dist/esm/hooks/useDraggableScroll.js +2 -0
- package/dist/esm/hooks/useDraggableScroll.js.map +7 -0
- package/package.json +1 -1
- package/style.css +6252 -862
- package/tailwind.config.js +18 -2
- package/dist/cjs/biz-components/HeroBanner/Countdown.d.ts +0 -10
- package/dist/cjs/biz-components/HeroBanner/Countdown.js +0 -2
- package/dist/cjs/biz-components/HeroBanner/Countdown.js.map +0 -7
- package/dist/cjs/biz-components/Title/Countdown.d.ts +0 -14
- package/dist/cjs/biz-components/Title/Countdown.js +0 -2
- package/dist/cjs/biz-components/Title/Countdown.js.map +0 -7
- package/dist/esm/biz-components/HeroBanner/Countdown.d.ts +0 -10
- package/dist/esm/biz-components/HeroBanner/Countdown.js +0 -2
- package/dist/esm/biz-components/HeroBanner/Countdown.js.map +0 -7
- package/dist/esm/biz-components/Title/Countdown.d.ts +0 -14
- package/dist/esm/biz-components/Title/Countdown.js +0 -2
- package/dist/esm/biz-components/Title/Countdown.js.map +0 -7
|
@@ -0,0 +1,77 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* useDraggableScroll - 拖拽滚动 Hook
|
|
3
|
+
*
|
|
4
|
+
* 基于 Framer Motion 实现的水平拖拽滚动功能
|
|
5
|
+
*
|
|
6
|
+
* @module useDraggableScroll
|
|
7
|
+
* @date 2026-01-29
|
|
8
|
+
*/
|
|
9
|
+
export interface UseDraggableScrollOptions {
|
|
10
|
+
/**
|
|
11
|
+
* 拖拽速度倍数
|
|
12
|
+
* @default 1
|
|
13
|
+
*/
|
|
14
|
+
dragSpeed?: number;
|
|
15
|
+
/**
|
|
16
|
+
* 是否启用惯性滚动
|
|
17
|
+
* @default true
|
|
18
|
+
*/
|
|
19
|
+
enableMomentum?: boolean;
|
|
20
|
+
/**
|
|
21
|
+
* 边界弹性系数(0-1,0表示无弹性)
|
|
22
|
+
* @default 0.1
|
|
23
|
+
*/
|
|
24
|
+
dragElastic?: number;
|
|
25
|
+
}
|
|
26
|
+
export interface UseDraggableScrollReturn {
|
|
27
|
+
/**
|
|
28
|
+
* 容器 ref
|
|
29
|
+
*/
|
|
30
|
+
containerRef: React.RefObject<HTMLDivElement>;
|
|
31
|
+
/**
|
|
32
|
+
* 是否正在拖拽
|
|
33
|
+
*/
|
|
34
|
+
isDragging: boolean;
|
|
35
|
+
/**
|
|
36
|
+
* 滚动进度(0-100)
|
|
37
|
+
*/
|
|
38
|
+
scrollProgress: number;
|
|
39
|
+
/**
|
|
40
|
+
* 是否可以向左滚动
|
|
41
|
+
*/
|
|
42
|
+
canScrollLeft: boolean;
|
|
43
|
+
/**
|
|
44
|
+
* 是否可以向右滚动
|
|
45
|
+
*/
|
|
46
|
+
canScrollRight: boolean;
|
|
47
|
+
/**
|
|
48
|
+
* 滚动到指定位置
|
|
49
|
+
*/
|
|
50
|
+
scrollTo: (position: number, smooth?: boolean) => void;
|
|
51
|
+
/**
|
|
52
|
+
* 向左滚动
|
|
53
|
+
*/
|
|
54
|
+
scrollLeft: (amount?: number) => void;
|
|
55
|
+
/**
|
|
56
|
+
* 向右滚动
|
|
57
|
+
*/
|
|
58
|
+
scrollRight: (amount?: number) => void;
|
|
59
|
+
}
|
|
60
|
+
/**
|
|
61
|
+
* 拖拽滚动 Hook
|
|
62
|
+
*
|
|
63
|
+
* @example
|
|
64
|
+
* ```tsx
|
|
65
|
+
* const { containerRef, isDragging, scrollProgress } = useDraggableScroll({
|
|
66
|
+
* dragSpeed: 1.5,
|
|
67
|
+
* enableMomentum: true
|
|
68
|
+
* })
|
|
69
|
+
*
|
|
70
|
+
* return (
|
|
71
|
+
* <div ref={containerRef} className="overflow-x-auto">
|
|
72
|
+
* {items.map(item => <Item key={item.id} />)}
|
|
73
|
+
* </div>
|
|
74
|
+
* )
|
|
75
|
+
* ```
|
|
76
|
+
*/
|
|
77
|
+
export declare function useDraggableScroll(options?: UseDraggableScrollOptions): UseDraggableScrollReturn;
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
import{useRef as R,useState as l,useEffect as L}from"react";function T(i={}){const{dragSpeed:v=1,enableMomentum:p=!0,dragElastic:D=.1}=i,o=R(null),[g,M]=l(!1),[u,f]=l(0),[m,b]=l(!1),[S,h]=l(!1),n=()=>{const r=o.current;if(!r)return;const{scrollLeft:e,scrollWidth:t,clientWidth:s}=r,a=t-s,d=a>0?e/a*100:0;f(Math.min(100,Math.max(0,d))),b(e>0),h(e<a-1)};L(()=>{const r=o.current;if(!r)return;n(),r.addEventListener("scroll",n);const e=new ResizeObserver(n);return e.observe(r),()=>{r.removeEventListener("scroll",n),e.disconnect()}},[]);const c=(r,e=!0)=>{const t=o.current;t&&t.scrollTo({left:r,behavior:e?"smooth":"auto"})};return{containerRef:o,isDragging:g,scrollProgress:u,canScrollLeft:m,canScrollRight:S,scrollTo:c,scrollLeft:(r=300)=>{const e=o.current;if(!e)return;const t=Math.max(0,e.scrollLeft-r);c(t)},scrollRight:(r=300)=>{const e=o.current;if(!e)return;const t=e.scrollWidth-e.clientWidth,s=Math.min(t,e.scrollLeft+r);c(s)}}}export{T as useDraggableScroll};
|
|
2
|
+
//# sourceMappingURL=useDraggableScroll.js.map
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
{
|
|
2
|
+
"version": 3,
|
|
3
|
+
"sources": ["../../../src/hooks/useDraggableScroll.ts"],
|
|
4
|
+
"sourcesContent": ["/**\n * useDraggableScroll - \u62D6\u62FD\u6EDA\u52A8 Hook\n *\n * \u57FA\u4E8E Framer Motion \u5B9E\u73B0\u7684\u6C34\u5E73\u62D6\u62FD\u6EDA\u52A8\u529F\u80FD\n *\n * @module useDraggableScroll\n * @date 2026-01-29\n */\n\nimport { useRef, useState, useEffect } from 'react'\n\nexport interface UseDraggableScrollOptions {\n /**\n * \u62D6\u62FD\u901F\u5EA6\u500D\u6570\n * @default 1\n */\n dragSpeed?: number\n\n /**\n * \u662F\u5426\u542F\u7528\u60EF\u6027\u6EDA\u52A8\n * @default true\n */\n enableMomentum?: boolean\n\n /**\n * \u8FB9\u754C\u5F39\u6027\u7CFB\u6570\uFF080-1\uFF0C0\u8868\u793A\u65E0\u5F39\u6027\uFF09\n * @default 0.1\n */\n dragElastic?: number\n}\n\nexport interface UseDraggableScrollReturn {\n /**\n * \u5BB9\u5668 ref\n */\n containerRef: React.RefObject<HTMLDivElement>\n\n /**\n * \u662F\u5426\u6B63\u5728\u62D6\u62FD\n */\n isDragging: boolean\n\n /**\n * \u6EDA\u52A8\u8FDB\u5EA6\uFF080-100\uFF09\n */\n scrollProgress: number\n\n /**\n * \u662F\u5426\u53EF\u4EE5\u5411\u5DE6\u6EDA\u52A8\n */\n canScrollLeft: boolean\n\n /**\n * \u662F\u5426\u53EF\u4EE5\u5411\u53F3\u6EDA\u52A8\n */\n canScrollRight: boolean\n\n /**\n * \u6EDA\u52A8\u5230\u6307\u5B9A\u4F4D\u7F6E\n */\n scrollTo: (position: number, smooth?: boolean) => void\n\n /**\n * \u5411\u5DE6\u6EDA\u52A8\n */\n scrollLeft: (amount?: number) => void\n\n /**\n * \u5411\u53F3\u6EDA\u52A8\n */\n scrollRight: (amount?: number) => void\n}\n\n/**\n * \u62D6\u62FD\u6EDA\u52A8 Hook\n *\n * @example\n * ```tsx\n * const { containerRef, isDragging, scrollProgress } = useDraggableScroll({\n * dragSpeed: 1.5,\n * enableMomentum: true\n * })\n *\n * return (\n * <div ref={containerRef} className=\"overflow-x-auto\">\n * {items.map(item => <Item key={item.id} />)}\n * </div>\n * )\n * ```\n */\nexport function useDraggableScroll(options: UseDraggableScrollOptions = {}): UseDraggableScrollReturn {\n const { dragSpeed = 1, enableMomentum = true, dragElastic = 0.1 } = options\n\n const containerRef = useRef<HTMLDivElement>(null)\n const [isDragging, setIsDragging] = useState(false)\n const [scrollProgress, setScrollProgress] = useState(0)\n const [canScrollLeft, setCanScrollLeft] = useState(false)\n const [canScrollRight, setCanScrollRight] = useState(false)\n\n // \u66F4\u65B0\u6EDA\u52A8\u72B6\u6001\n const updateScrollState = () => {\n const container = containerRef.current\n if (!container) return\n\n const { scrollLeft, scrollWidth, clientWidth } = container\n\n // \u8BA1\u7B97\u6EDA\u52A8\u8FDB\u5EA6\n const maxScroll = scrollWidth - clientWidth\n const progress = maxScroll > 0 ? (scrollLeft / maxScroll) * 100 : 0\n setScrollProgress(Math.min(100, Math.max(0, progress)))\n\n // \u66F4\u65B0\u6EDA\u52A8\u65B9\u5411\u53EF\u7528\u6027\n setCanScrollLeft(scrollLeft > 0)\n setCanScrollRight(scrollLeft < maxScroll - 1) // -1 \u5BB9\u9519\n }\n\n // \u76D1\u542C\u5BB9\u5668\u6EDA\u52A8\u4E8B\u4EF6\n useEffect(() => {\n const container = containerRef.current\n if (!container) return\n\n // \u521D\u59CB\u5316\u72B6\u6001\n updateScrollState()\n\n // \u76D1\u542C\u6EDA\u52A8\n container.addEventListener('scroll', updateScrollState)\n\n // \u76D1\u542C\u7A97\u53E3\u5927\u5C0F\u53D8\u5316\n const resizeObserver = new ResizeObserver(updateScrollState)\n resizeObserver.observe(container)\n\n return () => {\n container.removeEventListener('scroll', updateScrollState)\n resizeObserver.disconnect()\n }\n }, [])\n\n // \u6EDA\u52A8\u5230\u6307\u5B9A\u4F4D\u7F6E\n const scrollTo = (position: number, smooth = true) => {\n const container = containerRef.current\n if (!container) return\n\n container.scrollTo({\n left: position,\n behavior: smooth ? 'smooth' : 'auto',\n })\n }\n\n // \u5411\u5DE6\u6EDA\u52A8\n const scrollLeftFn = (amount = 300) => {\n const container = containerRef.current\n if (!container) return\n\n const targetScroll = Math.max(0, container.scrollLeft - amount)\n scrollTo(targetScroll)\n }\n\n // \u5411\u53F3\u6EDA\u52A8\n const scrollRightFn = (amount = 300) => {\n const container = containerRef.current\n if (!container) return\n\n const maxScroll = container.scrollWidth - container.clientWidth\n const targetScroll = Math.min(maxScroll, container.scrollLeft + amount)\n scrollTo(targetScroll)\n }\n\n return {\n containerRef,\n isDragging,\n scrollProgress,\n canScrollLeft,\n canScrollRight,\n scrollTo,\n scrollLeft: scrollLeftFn,\n scrollRight: scrollRightFn,\n }\n}\n"],
|
|
5
|
+
"mappings": "AASA,OAAS,UAAAA,EAAQ,YAAAC,EAAU,aAAAC,MAAiB,QAiFrC,SAASC,EAAmBC,EAAqC,CAAC,EAA6B,CACpG,KAAM,CAAE,UAAAC,EAAY,EAAG,eAAAC,EAAiB,GAAM,YAAAC,EAAc,EAAI,EAAIH,EAE9DI,EAAeR,EAAuB,IAAI,EAC1C,CAACS,EAAYC,CAAa,EAAIT,EAAS,EAAK,EAC5C,CAACU,EAAgBC,CAAiB,EAAIX,EAAS,CAAC,EAChD,CAACY,EAAeC,CAAgB,EAAIb,EAAS,EAAK,EAClD,CAACc,EAAgBC,CAAiB,EAAIf,EAAS,EAAK,EAGpDgB,EAAoB,IAAM,CAC9B,MAAMC,EAAYV,EAAa,QAC/B,GAAI,CAACU,EAAW,OAEhB,KAAM,CAAE,WAAAC,EAAY,YAAAC,EAAa,YAAAC,CAAY,EAAIH,EAG3CI,EAAYF,EAAcC,EAC1BE,EAAWD,EAAY,EAAKH,EAAaG,EAAa,IAAM,EAClEV,EAAkB,KAAK,IAAI,IAAK,KAAK,IAAI,EAAGW,CAAQ,CAAC,CAAC,EAGtDT,EAAiBK,EAAa,CAAC,EAC/BH,EAAkBG,EAAaG,EAAY,CAAC,CAC9C,EAGApB,EAAU,IAAM,CACd,MAAMgB,EAAYV,EAAa,QAC/B,GAAI,CAACU,EAAW,OAGhBD,EAAkB,EAGlBC,EAAU,iBAAiB,SAAUD,CAAiB,EAGtD,MAAMO,EAAiB,IAAI,eAAeP,CAAiB,EAC3D,OAAAO,EAAe,QAAQN,CAAS,EAEzB,IAAM,CACXA,EAAU,oBAAoB,SAAUD,CAAiB,EACzDO,EAAe,WAAW,CAC5B,CACF,EAAG,CAAC,CAAC,EAGL,MAAMC,EAAW,CAACC,EAAkBC,EAAS,KAAS,CACpD,MAAMT,EAAYV,EAAa,QAC1BU,GAELA,EAAU,SAAS,CACjB,KAAMQ,EACN,SAAUC,EAAS,SAAW,MAChC,CAAC,CACH,EAqBA,MAAO,CACL,aAAAnB,EACA,WAAAC,EACA,eAAAE,EACA,cAAAE,EACA,eAAAE,EACA,SAAAU,EACA,WAzBmB,CAACG,EAAS,MAAQ,CACrC,MAAMV,EAAYV,EAAa,QAC/B,GAAI,CAACU,EAAW,OAEhB,MAAMW,EAAe,KAAK,IAAI,EAAGX,EAAU,WAAaU,CAAM,EAC9DH,EAASI,CAAY,CACvB,EAoBE,YAjBoB,CAACD,EAAS,MAAQ,CACtC,MAAMV,EAAYV,EAAa,QAC/B,GAAI,CAACU,EAAW,OAEhB,MAAMI,EAAYJ,EAAU,YAAcA,EAAU,YAC9CW,EAAe,KAAK,IAAIP,EAAWJ,EAAU,WAAaU,CAAM,EACtEH,EAASI,CAAY,CACvB,CAWA,CACF",
|
|
6
|
+
"names": ["useRef", "useState", "useEffect", "useDraggableScroll", "options", "dragSpeed", "enableMomentum", "dragElastic", "containerRef", "isDragging", "setIsDragging", "scrollProgress", "setScrollProgress", "canScrollLeft", "setCanScrollLeft", "canScrollRight", "setCanScrollRight", "updateScrollState", "container", "scrollLeft", "scrollWidth", "clientWidth", "maxScroll", "progress", "resizeObserver", "scrollTo", "position", "smooth", "amount", "targetScroll"]
|
|
7
|
+
}
|