@ehfuse/overlay-scrollbar 1.6.0 → 1.6.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.
Files changed (42) hide show
  1. package/README.md +1 -0
  2. package/dist/OverlayScrollbar.d.ts +86 -0
  3. package/dist/OverlayScrollbar.d.ts.map +1 -0
  4. package/dist/components/ScrollbarArrows.d.ts +29 -0
  5. package/dist/components/ScrollbarArrows.d.ts.map +1 -0
  6. package/dist/components/ScrollbarThumb.d.ts +35 -0
  7. package/dist/components/ScrollbarThumb.d.ts.map +1 -0
  8. package/dist/components/ScrollbarTrack.d.ts +32 -0
  9. package/dist/components/ScrollbarTrack.d.ts.map +1 -0
  10. package/dist/hooks/useArrowNavigation.d.ts +27 -0
  11. package/dist/hooks/useArrowNavigation.d.ts.map +1 -0
  12. package/dist/hooks/useAutoHide.d.ts +19 -0
  13. package/dist/hooks/useAutoHide.d.ts.map +1 -0
  14. package/dist/hooks/useDragScroll.d.ts +23 -0
  15. package/dist/hooks/useDragScroll.d.ts.map +1 -0
  16. package/dist/hooks/useKeyboardNavigation.d.ts +18 -0
  17. package/dist/hooks/useKeyboardNavigation.d.ts.map +1 -0
  18. package/dist/hooks/useScrollEvents.d.ts +20 -0
  19. package/dist/hooks/useScrollEvents.d.ts.map +1 -0
  20. package/dist/hooks/useScrollbarConfig.d.ts +53 -0
  21. package/dist/hooks/useScrollbarConfig.d.ts.map +1 -0
  22. package/dist/hooks/useScrollbarInitialization.d.ts +21 -0
  23. package/dist/hooks/useScrollbarInitialization.d.ts.map +1 -0
  24. package/dist/hooks/useScrollbarUpdate.d.ts +27 -0
  25. package/dist/hooks/useScrollbarUpdate.d.ts.map +1 -0
  26. package/dist/hooks/useThumbDrag.d.ts +25 -0
  27. package/dist/hooks/useThumbDrag.d.ts.map +1 -0
  28. package/dist/hooks/useTrackClick.d.ts +20 -0
  29. package/dist/hooks/useTrackClick.d.ts.map +1 -0
  30. package/dist/index.d.ts +8 -3
  31. package/dist/index.d.ts.map +1 -1
  32. package/dist/index.esm.js +43 -21
  33. package/dist/index.esm.js.map +4 -4
  34. package/dist/index.js +43 -21
  35. package/dist/index.js.map +4 -4
  36. package/dist/src/OverlayScrollbar.d.ts +61 -2
  37. package/dist/src/OverlayScrollbar.d.ts.map +1 -1
  38. package/dist/types.d.ts +70 -0
  39. package/dist/types.d.ts.map +1 -0
  40. package/dist/utils/dragScrollUtils.d.ts +40 -0
  41. package/dist/utils/dragScrollUtils.d.ts.map +1 -0
  42. package/package.json +4 -11
package/README.md CHANGED
@@ -100,6 +100,7 @@ interface AutoHideConfig {
100
100
  enabled?: boolean; // Enable auto-hide (default: true)
101
101
  delay?: number; // Auto-hide delay (default: 1500ms)
102
102
  delayOnWheel?: number; // Quick hide after wheel (default: 700ms)
103
+ initialDelay?: number; // Delay before showing scrollbar on mount (default: 200ms)
103
104
  }
104
105
  ```
105
106
 
@@ -0,0 +1,86 @@
1
+ /**
2
+ * OverlayScrollbar.tsx
3
+ *
4
+ * @copyright 2025 KIM YOUNG JIN (ehfuse@gmail.com)
5
+ *
6
+ * Permission is hereby granted, free of charge, to any person obtaining a copy
7
+ * of this software and associated documentation files (the "Software"), to deal
8
+ * in the Software without restriction, including without limitation the rights
9
+ * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
10
+ * copies of the Software, and to permit persons to whom the Software is
11
+ * furnished to do so, subject to the following conditions:
12
+ *
13
+ * The above copyright notice and this permission notice shall be included in all
14
+ * copies or substantial portions of the Software.
15
+ *
16
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
17
+ * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
18
+ * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
19
+ * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
20
+ * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
21
+ * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
22
+ * SOFTWARE.
23
+ */
24
+ import React, { ReactNode } from "react";
25
+ export interface ThumbConfig {
26
+ width?: number;
27
+ minHeight?: number;
28
+ radius?: number;
29
+ color?: string;
30
+ opacity?: number;
31
+ hoverColor?: string;
32
+ hoverOpacity?: number;
33
+ }
34
+ export interface TrackConfig {
35
+ width?: number;
36
+ color?: string;
37
+ visible?: boolean;
38
+ alignment?: "center" | "outside";
39
+ radius?: number;
40
+ margin?: number;
41
+ }
42
+ export interface ArrowsConfig {
43
+ visible?: boolean;
44
+ step?: number;
45
+ color?: string;
46
+ opacity?: number;
47
+ hoverColor?: string;
48
+ hoverOpacity?: number;
49
+ }
50
+ export interface DragScrollConfig {
51
+ enabled?: boolean;
52
+ excludeClasses?: string[];
53
+ excludeSelectors?: string[];
54
+ }
55
+ export interface AutoHideConfig {
56
+ enabled?: boolean;
57
+ delay?: number;
58
+ delayOnWheel?: number;
59
+ initialDelay?: number;
60
+ }
61
+ export interface OverlayScrollbarProps {
62
+ className?: string;
63
+ style?: React.CSSProperties;
64
+ containerStyle?: React.CSSProperties;
65
+ contentStyle?: React.CSSProperties;
66
+ children: ReactNode;
67
+ onScroll?: (event: Event) => void;
68
+ thumb?: ThumbConfig;
69
+ track?: TrackConfig;
70
+ arrows?: ArrowsConfig;
71
+ dragScroll?: DragScrollConfig;
72
+ autoHide?: AutoHideConfig;
73
+ showScrollbar?: boolean;
74
+ detectInnerScroll?: boolean;
75
+ }
76
+ export interface OverlayScrollbarRef {
77
+ getScrollContainer: () => HTMLDivElement | null;
78
+ scrollTo: (options: ScrollToOptions) => void;
79
+ scrollTop: number;
80
+ scrollHeight: number;
81
+ clientHeight: number;
82
+ }
83
+ declare const OverlayScrollbar: React.ForwardRefExoticComponent<OverlayScrollbarProps & React.RefAttributes<OverlayScrollbarRef>>;
84
+ export default OverlayScrollbar;
85
+ export { OverlayScrollbar };
86
+ //# sourceMappingURL=OverlayScrollbar.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"OverlayScrollbar.d.ts","sourceRoot":"","sources":["../src/OverlayScrollbar.tsx"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;GAsBG;AAEH,OAAO,KAAK,EAAE,EAMV,SAAS,EAIZ,MAAM,OAAO,CAAC;AAIf,MAAM,WAAW,WAAW;IACxB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,YAAY,CAAC,EAAE,MAAM,CAAC;CACzB;AAGD,MAAM,WAAW,WAAW;IACxB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,SAAS,CAAC,EAAE,QAAQ,GAAG,SAAS,CAAC;IACjC,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,MAAM,CAAC,EAAE,MAAM,CAAC;CACnB;AAGD,MAAM,WAAW,YAAY;IACzB,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,YAAY,CAAC,EAAE,MAAM,CAAC;CACzB;AAGD,MAAM,WAAW,gBAAgB;IAC7B,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,cAAc,CAAC,EAAE,MAAM,EAAE,CAAC;IAC1B,gBAAgB,CAAC,EAAE,MAAM,EAAE,CAAC;CAC/B;AAGD,MAAM,WAAW,cAAc;IAC3B,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,YAAY,CAAC,EAAE,MAAM,CAAC;CACzB;AAED,MAAM,WAAW,qBAAqB;IAClC,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,KAAK,CAAC,EAAE,KAAK,CAAC,aAAa,CAAC;IAC5B,cAAc,CAAC,EAAE,KAAK,CAAC,aAAa,CAAC;IACrC,YAAY,CAAC,EAAE,KAAK,CAAC,aAAa,CAAC;IACnC,QAAQ,EAAE,SAAS,CAAC;IACpB,QAAQ,CAAC,EAAE,CAAC,KAAK,EAAE,KAAK,KAAK,IAAI,CAAC;IAGlC,KAAK,CAAC,EAAE,WAAW,CAAC;IACpB,KAAK,CAAC,EAAE,WAAW,CAAC;IACpB,MAAM,CAAC,EAAE,YAAY,CAAC;IACtB,UAAU,CAAC,EAAE,gBAAgB,CAAC;IAC9B,QAAQ,CAAC,EAAE,cAAc,CAAC;IAG1B,aAAa,CAAC,EAAE,OAAO,CAAC;IACxB,iBAAiB,CAAC,EAAE,OAAO,CAAC;CAC/B;AAGD,MAAM,WAAW,mBAAmB;IAChC,kBAAkB,EAAE,MAAM,cAAc,GAAG,IAAI,CAAC;IAChD,QAAQ,EAAE,CAAC,OAAO,EAAE,eAAe,KAAK,IAAI,CAAC;IAC7C,SAAS,EAAE,MAAM,CAAC;IAClB,YAAY,EAAE,MAAM,CAAC;IACrB,YAAY,EAAE,MAAM,CAAC;CACxB;AASD,QAAA,MAAM,gBAAgB,mGA6oDrB,CAAC;AAEF,eAAe,gBAAgB,CAAC;AAChC,OAAO,EAAE,gBAAgB,EAAE,CAAC"}
@@ -0,0 +1,29 @@
1
+ /**
2
+ * ScrollbarArrows.tsx
3
+ * 스크롤바 화살표 버튼 컴포넌트
4
+ *
5
+ * @copyright 2025 KIM YOUNG JIN (ehfuse@gmail.com)
6
+ */
7
+ import React from "react";
8
+ interface ScrollbarArrowsProps {
9
+ adjustedTrackWidth: number;
10
+ finalThumbWidth: number;
11
+ scrollbarVisible: boolean;
12
+ hoveredArrow: "up" | "down" | null;
13
+ finalArrowsConfig: {
14
+ color: string;
15
+ opacity: number;
16
+ hoverColor: string;
17
+ hoverOpacity: number;
18
+ };
19
+ finalTrackConfig: {
20
+ alignment: string;
21
+ margin: number;
22
+ };
23
+ setHoveredArrow: (arrow: "up" | "down" | null) => void;
24
+ handleUpArrowClick: (e: React.MouseEvent) => void;
25
+ handleDownArrowClick: (e: React.MouseEvent) => void;
26
+ }
27
+ export declare const ScrollbarArrows: React.FC<ScrollbarArrowsProps>;
28
+ export {};
29
+ //# sourceMappingURL=ScrollbarArrows.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ScrollbarArrows.d.ts","sourceRoot":"","sources":["../../src/components/ScrollbarArrows.tsx"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,KAAK,MAAM,OAAO,CAAC;AAE1B,UAAU,oBAAoB;IAC1B,kBAAkB,EAAE,MAAM,CAAC;IAC3B,eAAe,EAAE,MAAM,CAAC;IACxB,gBAAgB,EAAE,OAAO,CAAC;IAC1B,YAAY,EAAE,IAAI,GAAG,MAAM,GAAG,IAAI,CAAC;IACnC,iBAAiB,EAAE;QACf,KAAK,EAAE,MAAM,CAAC;QACd,OAAO,EAAE,MAAM,CAAC;QAChB,UAAU,EAAE,MAAM,CAAC;QACnB,YAAY,EAAE,MAAM,CAAC;KACxB,CAAC;IACF,gBAAgB,EAAE;QACd,SAAS,EAAE,MAAM,CAAC;QAClB,MAAM,EAAE,MAAM,CAAC;KAClB,CAAC;IACF,eAAe,EAAE,CAAC,KAAK,EAAE,IAAI,GAAG,MAAM,GAAG,IAAI,KAAK,IAAI,CAAC;IACvD,kBAAkB,EAAE,CAAC,CAAC,EAAE,KAAK,CAAC,UAAU,KAAK,IAAI,CAAC;IAClD,oBAAoB,EAAE,CAAC,CAAC,EAAE,KAAK,CAAC,UAAU,KAAK,IAAI,CAAC;CACvD;AAED,eAAO,MAAM,eAAe,EAAE,KAAK,CAAC,EAAE,CAAC,oBAAoB,CA8E1D,CAAC"}
@@ -0,0 +1,35 @@
1
+ /**
2
+ * ScrollbarThumb.tsx
3
+ * 스크롤바 썸 컴포넌트
4
+ *
5
+ * @copyright 2025 KIM YOUNG JIN (ehfuse@gmail.com)
6
+ */
7
+ import React from "react";
8
+ interface ScrollbarThumbProps {
9
+ thumbRef: React.RefObject<HTMLDivElement>;
10
+ thumbTop: number;
11
+ thumbHeight: number;
12
+ thumbMinHeight: number;
13
+ showArrows: boolean;
14
+ finalThumbWidth: number;
15
+ adjustedTrackWidth: number;
16
+ isDragging: boolean;
17
+ isThumbHovered: boolean;
18
+ finalThumbConfig: {
19
+ width: number;
20
+ color: string;
21
+ opacity: number;
22
+ hoverColor: string;
23
+ hoverOpacity: number;
24
+ radius: number;
25
+ };
26
+ finalTrackConfig: {
27
+ alignment: string;
28
+ margin: number;
29
+ };
30
+ handleThumbMouseDown: (e: React.MouseEvent) => void;
31
+ setIsThumbHovered: (hovered: boolean) => void;
32
+ }
33
+ export declare const ScrollbarThumb: React.FC<ScrollbarThumbProps>;
34
+ export {};
35
+ //# sourceMappingURL=ScrollbarThumb.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ScrollbarThumb.d.ts","sourceRoot":"","sources":["../../src/components/ScrollbarThumb.tsx"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,KAAK,MAAM,OAAO,CAAC;AAE1B,UAAU,mBAAmB;IACzB,QAAQ,EAAE,KAAK,CAAC,SAAS,CAAC,cAAc,CAAC,CAAC;IAC1C,QAAQ,EAAE,MAAM,CAAC;IACjB,WAAW,EAAE,MAAM,CAAC;IACpB,cAAc,EAAE,MAAM,CAAC;IACvB,UAAU,EAAE,OAAO,CAAC;IACpB,eAAe,EAAE,MAAM,CAAC;IACxB,kBAAkB,EAAE,MAAM,CAAC;IAC3B,UAAU,EAAE,OAAO,CAAC;IACpB,cAAc,EAAE,OAAO,CAAC;IACxB,gBAAgB,EAAE;QACd,KAAK,EAAE,MAAM,CAAC;QACd,KAAK,EAAE,MAAM,CAAC;QACd,OAAO,EAAE,MAAM,CAAC;QAChB,UAAU,EAAE,MAAM,CAAC;QACnB,YAAY,EAAE,MAAM,CAAC;QACrB,MAAM,EAAE,MAAM,CAAC;KAClB,CAAC;IACF,gBAAgB,EAAE;QACd,SAAS,EAAE,MAAM,CAAC;QAClB,MAAM,EAAE,MAAM,CAAC;KAClB,CAAC;IACF,oBAAoB,EAAE,CAAC,CAAC,EAAE,KAAK,CAAC,UAAU,KAAK,IAAI,CAAC;IACpD,iBAAiB,EAAE,CAAC,OAAO,EAAE,OAAO,KAAK,IAAI,CAAC;CACjD;AAED,eAAO,MAAM,cAAc,EAAE,KAAK,CAAC,EAAE,CAAC,mBAAmB,CAkDxD,CAAC"}
@@ -0,0 +1,32 @@
1
+ /**
2
+ * ScrollbarTrack.tsx
3
+ * 스크롤바 트랙 컴포넌트
4
+ *
5
+ * @copyright 2025 KIM YOUNG JIN (ehfuse@gmail.com)
6
+ */
7
+ import React from "react";
8
+ interface ScrollbarTrackProps {
9
+ scrollbarRef: React.RefObject<HTMLDivElement>;
10
+ adjustedTrackWidth: number;
11
+ scrollbarVisible: boolean;
12
+ isDragging: boolean;
13
+ showArrows: boolean;
14
+ finalThumbWidth: number;
15
+ finalTrackConfig: {
16
+ visible: boolean;
17
+ alignment: string;
18
+ margin: number;
19
+ color: string;
20
+ radius: number;
21
+ width: number;
22
+ };
23
+ clearHideTimer: () => void;
24
+ setScrollbarVisible: (visible: boolean) => void;
25
+ setHideTimer: (delay: number) => void;
26
+ autoHideDelay: number;
27
+ handleTrackClick: (e: React.MouseEvent) => void;
28
+ children: React.ReactNode;
29
+ }
30
+ export declare const ScrollbarTrack: React.FC<ScrollbarTrackProps>;
31
+ export {};
32
+ //# sourceMappingURL=ScrollbarTrack.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ScrollbarTrack.d.ts","sourceRoot":"","sources":["../../src/components/ScrollbarTrack.tsx"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,KAAK,MAAM,OAAO,CAAC;AAE1B,UAAU,mBAAmB;IACzB,YAAY,EAAE,KAAK,CAAC,SAAS,CAAC,cAAc,CAAC,CAAC;IAC9C,kBAAkB,EAAE,MAAM,CAAC;IAC3B,gBAAgB,EAAE,OAAO,CAAC;IAC1B,UAAU,EAAE,OAAO,CAAC;IACpB,UAAU,EAAE,OAAO,CAAC;IACpB,eAAe,EAAE,MAAM,CAAC;IACxB,gBAAgB,EAAE;QACd,OAAO,EAAE,OAAO,CAAC;QACjB,SAAS,EAAE,MAAM,CAAC;QAClB,MAAM,EAAE,MAAM,CAAC;QACf,KAAK,EAAE,MAAM,CAAC;QACd,MAAM,EAAE,MAAM,CAAC;QACf,KAAK,EAAE,MAAM,CAAC;KACjB,CAAC;IACF,cAAc,EAAE,MAAM,IAAI,CAAC;IAC3B,mBAAmB,EAAE,CAAC,OAAO,EAAE,OAAO,KAAK,IAAI,CAAC;IAChD,YAAY,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,IAAI,CAAC;IACtC,aAAa,EAAE,MAAM,CAAC;IACtB,gBAAgB,EAAE,CAAC,CAAC,EAAE,KAAK,CAAC,UAAU,KAAK,IAAI,CAAC;IAChD,QAAQ,EAAE,KAAK,CAAC,SAAS,CAAC;CAC7B;AAED,eAAO,MAAM,cAAc,EAAE,KAAK,CAAC,EAAE,CAAC,mBAAmB,CA+ExD,CAAC"}
@@ -0,0 +1,27 @@
1
+ /**
2
+ * useArrowNavigation.ts
3
+ * 화살표 네비게이션 관련 로직
4
+ *
5
+ * @copyright 2025 KIM YOUNG JIN (ehfuse@gmail.com)
6
+ */
7
+ import { ArrowsConfig } from "../types";
8
+ interface UseArrowNavigationProps {
9
+ arrows: ArrowsConfig;
10
+ containerRef: React.RefObject<HTMLDivElement>;
11
+ contentRef: React.RefObject<HTMLDivElement>;
12
+ updateScrollbar: () => void;
13
+ setScrollbarVisible: (visible: boolean) => void;
14
+ setHideTimer: (delay: number) => void;
15
+ hideDelay: number;
16
+ maintainFocus: () => void;
17
+ }
18
+ export declare const useArrowNavigation: ({ arrows, containerRef, contentRef, updateScrollbar, setScrollbarVisible, setHideTimer, hideDelay, maintainFocus, }: UseArrowNavigationProps) => {
19
+ activeArrow: "up" | "down" | null;
20
+ setActiveArrow: import("react").Dispatch<import("react").SetStateAction<"up" | "down" | null>>;
21
+ hoveredArrow: "up" | "down" | null;
22
+ setHoveredArrow: import("react").Dispatch<import("react").SetStateAction<"up" | "down" | null>>;
23
+ handleUpArrowClick: (event: React.MouseEvent) => void;
24
+ handleDownArrowClick: (event: React.MouseEvent) => void;
25
+ };
26
+ export {};
27
+ //# sourceMappingURL=useArrowNavigation.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"useArrowNavigation.d.ts","sourceRoot":"","sources":["../../src/hooks/useArrowNavigation.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAGH,OAAO,EAAE,YAAY,EAAE,MAAM,UAAU,CAAC;AAExC,UAAU,uBAAuB;IAC7B,MAAM,EAAE,YAAY,CAAC;IACrB,YAAY,EAAE,KAAK,CAAC,SAAS,CAAC,cAAc,CAAC,CAAC;IAC9C,UAAU,EAAE,KAAK,CAAC,SAAS,CAAC,cAAc,CAAC,CAAC;IAC5C,eAAe,EAAE,MAAM,IAAI,CAAC;IAC5B,mBAAmB,EAAE,CAAC,OAAO,EAAE,OAAO,KAAK,IAAI,CAAC;IAChD,YAAY,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,IAAI,CAAC;IACtC,SAAS,EAAE,MAAM,CAAC;IAClB,aAAa,EAAE,MAAM,IAAI,CAAC;CAC7B;AAED,eAAO,MAAM,kBAAkB,GAAI,qHAShC,uBAAuB;;;;;gCAUV,KAAK,CAAC,UAAU;kCAiChB,KAAK,CAAC,UAAU;CA2C/B,CAAC"}
@@ -0,0 +1,19 @@
1
+ /**
2
+ * useAutoHide.ts
3
+ * 스크롤바 자동 숨김 관련 로직
4
+ *
5
+ * @copyright 2025 KIM YOUNG JIN (ehfuse@gmail.com)
6
+ */
7
+ import { AutoHideConfig } from "../types";
8
+ interface UseAutoHideProps {
9
+ autoHide: AutoHideConfig;
10
+ isScrollable: () => boolean;
11
+ setScrollbarVisible: (visible: boolean) => void;
12
+ }
13
+ export declare const useAutoHide: ({ autoHide, isScrollable, setScrollbarVisible, }: UseAutoHideProps) => {
14
+ clearHideTimer: () => void;
15
+ setHideTimer: (delay: number) => void;
16
+ hideTimeoutRef: import("react").MutableRefObject<NodeJS.Timeout | null>;
17
+ };
18
+ export {};
19
+ //# sourceMappingURL=useAutoHide.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"useAutoHide.d.ts","sourceRoot":"","sources":["../../src/hooks/useAutoHide.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAGH,OAAO,EAAE,cAAc,EAAE,MAAM,UAAU,CAAC;AAE1C,UAAU,gBAAgB;IACtB,QAAQ,EAAE,cAAc,CAAC;IACzB,YAAY,EAAE,MAAM,OAAO,CAAC;IAC5B,mBAAmB,EAAE,CAAC,OAAO,EAAE,OAAO,KAAK,IAAI,CAAC;CACnD;AAED,eAAO,MAAM,WAAW,GAAI,kDAIzB,gBAAgB;;0BAaH,MAAM;;CAiBrB,CAAC"}
@@ -0,0 +1,23 @@
1
+ /**
2
+ * useDragScroll.ts
3
+ * 드래그 스크롤 관련 로직
4
+ *
5
+ * @copyright 2025 KIM YOUNG JIN (ehfuse@gmail.com)
6
+ */
7
+ import { DragScrollConfig } from "../types";
8
+ interface UseDragScrollProps {
9
+ dragScroll: DragScrollConfig;
10
+ findScrollableElement: () => HTMLElement | null;
11
+ clearHideTimer: () => void;
12
+ setScrollbarVisible: (visible: boolean) => void;
13
+ updateScrollbar: () => void;
14
+ setHideTimer: (delay: number) => void;
15
+ hideDelay: number;
16
+ isScrollable: () => boolean;
17
+ }
18
+ export declare const useDragScroll: ({ dragScroll, findScrollableElement, clearHideTimer, setScrollbarVisible, updateScrollbar, setHideTimer, hideDelay, isScrollable, }: UseDragScrollProps) => {
19
+ isDragScrolling: boolean;
20
+ handleDragScrollStart: (event: React.MouseEvent) => void;
21
+ };
22
+ export {};
23
+ //# sourceMappingURL=useDragScroll.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"useDragScroll.d.ts","sourceRoot":"","sources":["../../src/hooks/useDragScroll.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAGH,OAAO,EAAE,gBAAgB,EAAE,MAAM,UAAU,CAAC;AAG5C,UAAU,kBAAkB;IACxB,UAAU,EAAE,gBAAgB,CAAC;IAC7B,qBAAqB,EAAE,MAAM,WAAW,GAAG,IAAI,CAAC;IAChD,cAAc,EAAE,MAAM,IAAI,CAAC;IAC3B,mBAAmB,EAAE,CAAC,OAAO,EAAE,OAAO,KAAK,IAAI,CAAC;IAChD,eAAe,EAAE,MAAM,IAAI,CAAC;IAC5B,YAAY,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,IAAI,CAAC;IACtC,SAAS,EAAE,MAAM,CAAC;IAClB,YAAY,EAAE,MAAM,OAAO,CAAC;CAC/B;AAED,eAAO,MAAM,aAAa,GAAI,qIAS3B,kBAAkB;;mCAeL,KAAK,CAAC,UAAU;CAsH/B,CAAC"}
@@ -0,0 +1,18 @@
1
+ /**
2
+ * useKeyboardNavigation.ts
3
+ * 키보드 네비게이션 관련 로직 (방향키, PageUp/PageDown/Home/End)
4
+ *
5
+ * @copyright 2025 KIM YOUNG JIN (ehfuse@gmail.com)
6
+ */
7
+ interface UseKeyboardNavigationProps {
8
+ containerRef: React.RefObject<HTMLDivElement>;
9
+ findScrollableElement: () => HTMLElement | null;
10
+ updateScrollbar: () => void;
11
+ clearHideTimer: () => void;
12
+ setScrollbarVisible: (visible: boolean) => void;
13
+ setHideTimer: (delay: number) => void;
14
+ hideDelay: number;
15
+ }
16
+ export declare const useKeyboardNavigation: ({ containerRef, findScrollableElement, updateScrollbar, clearHideTimer, setScrollbarVisible, setHideTimer, hideDelay, }: UseKeyboardNavigationProps) => void;
17
+ export {};
18
+ //# sourceMappingURL=useKeyboardNavigation.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"useKeyboardNavigation.d.ts","sourceRoot":"","sources":["../../src/hooks/useKeyboardNavigation.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAIH,UAAU,0BAA0B;IAChC,YAAY,EAAE,KAAK,CAAC,SAAS,CAAC,cAAc,CAAC,CAAC;IAC9C,qBAAqB,EAAE,MAAM,WAAW,GAAG,IAAI,CAAC;IAChD,eAAe,EAAE,MAAM,IAAI,CAAC;IAC5B,cAAc,EAAE,MAAM,IAAI,CAAC;IAC3B,mBAAmB,EAAE,CAAC,OAAO,EAAE,OAAO,KAAK,IAAI,CAAC;IAChD,YAAY,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,IAAI,CAAC;IACtC,SAAS,EAAE,MAAM,CAAC;CACrB;AAED,eAAO,MAAM,qBAAqB,GAAI,yHAQnC,0BAA0B,SA+F5B,CAAC"}
@@ -0,0 +1,20 @@
1
+ /**
2
+ * useScrollEvents.ts
3
+ * 스크롤 이벤트 관련 로직
4
+ *
5
+ * @copyright 2025 KIM YOUNG JIN (ehfuse@gmail.com)
6
+ */
7
+ import { AutoHideConfig } from "../types";
8
+ interface UseScrollEventsProps {
9
+ containerRef: React.RefObject<HTMLDivElement>;
10
+ findScrollableElement: () => HTMLElement | null;
11
+ updateScrollbar: () => void;
12
+ clearHideTimer: () => void;
13
+ setScrollbarVisible: (visible: boolean) => void;
14
+ setHideTimer: (delay: number) => void;
15
+ autoHide: AutoHideConfig;
16
+ onScroll?: (event: Event) => void;
17
+ }
18
+ export declare const useScrollEvents: ({ containerRef, findScrollableElement, updateScrollbar, clearHideTimer, setScrollbarVisible, setHideTimer, autoHide, onScroll, }: UseScrollEventsProps) => void;
19
+ export {};
20
+ //# sourceMappingURL=useScrollEvents.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"useScrollEvents.d.ts","sourceRoot":"","sources":["../../src/hooks/useScrollEvents.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAGH,OAAO,EAAE,cAAc,EAAE,MAAM,UAAU,CAAC;AAE1C,UAAU,oBAAoB;IAC1B,YAAY,EAAE,KAAK,CAAC,SAAS,CAAC,cAAc,CAAC,CAAC;IAC9C,qBAAqB,EAAE,MAAM,WAAW,GAAG,IAAI,CAAC;IAChD,eAAe,EAAE,MAAM,IAAI,CAAC;IAC5B,cAAc,EAAE,MAAM,IAAI,CAAC;IAC3B,mBAAmB,EAAE,CAAC,OAAO,EAAE,OAAO,KAAK,IAAI,CAAC;IAChD,YAAY,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,IAAI,CAAC;IACtC,QAAQ,EAAE,cAAc,CAAC;IACzB,QAAQ,CAAC,EAAE,CAAC,KAAK,EAAE,KAAK,KAAK,IAAI,CAAC;CACrC;AAED,eAAO,MAAM,eAAe,GAAI,kIAS7B,oBAAoB,SA+JtB,CAAC"}
@@ -0,0 +1,53 @@
1
+ /**
2
+ * useScrollbarConfig.ts
3
+ * 스크롤바 설정 계산 로직
4
+ *
5
+ * @copyright 2025 KIM YOUNG JIN (ehfuse@gmail.com)
6
+ */
7
+ import { ThumbConfig, TrackConfig, ArrowsConfig, DragScrollConfig, AutoHideConfig } from "../types";
8
+ interface UseScrollbarConfigProps {
9
+ thumb: ThumbConfig;
10
+ track: TrackConfig;
11
+ arrows: ArrowsConfig;
12
+ dragScroll: DragScrollConfig;
13
+ autoHide: AutoHideConfig;
14
+ }
15
+ export declare const useScrollbarConfig: ({ thumb, track, arrows, dragScroll, autoHide, }: UseScrollbarConfigProps) => {
16
+ finalThumbConfig: {
17
+ width: number;
18
+ minHeight: number;
19
+ radius: number;
20
+ color: string;
21
+ opacity: number;
22
+ hoverColor: string;
23
+ hoverOpacity: number;
24
+ };
25
+ finalTrackConfig: {
26
+ width: number;
27
+ color: string;
28
+ visible: boolean;
29
+ alignment: "center" | "outside";
30
+ radius: number;
31
+ margin: number;
32
+ };
33
+ finalArrowsConfig: {
34
+ visible: boolean;
35
+ step: number;
36
+ color: string;
37
+ opacity: number;
38
+ hoverColor: string;
39
+ hoverOpacity: number;
40
+ };
41
+ finalDragScrollConfig: {
42
+ enabled: boolean;
43
+ excludeClasses: string[];
44
+ excludeSelectors: string[];
45
+ };
46
+ finalAutoHideConfig: {
47
+ enabled: boolean;
48
+ delay: number;
49
+ delayOnWheel: number;
50
+ };
51
+ };
52
+ export {};
53
+ //# sourceMappingURL=useScrollbarConfig.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"useScrollbarConfig.d.ts","sourceRoot":"","sources":["../../src/hooks/useScrollbarConfig.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAGH,OAAO,EACH,WAAW,EACX,WAAW,EACX,YAAY,EACZ,gBAAgB,EAChB,cAAc,EACjB,MAAM,UAAU,CAAC;AAElB,UAAU,uBAAuB;IAC7B,KAAK,EAAE,WAAW,CAAC;IACnB,KAAK,EAAE,WAAW,CAAC;IACnB,MAAM,EAAE,YAAY,CAAC;IACrB,UAAU,EAAE,gBAAgB,CAAC;IAC7B,QAAQ,EAAE,cAAc,CAAC;CAC5B;AAED,eAAO,MAAM,kBAAkB,GAAI,iDAMhC,uBAAuB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAoEzB,CAAC"}
@@ -0,0 +1,21 @@
1
+ /**
2
+ * useScrollbarInitialization.ts
3
+ * 스크롤바 초기화 관련 로직 (ResizeObserver, MutationObserver, CSS 주입 등)
4
+ *
5
+ * @copyright 2025 KIM YOUNG JIN (ehfuse@gmail.com)
6
+ */
7
+ import { AutoHideConfig } from "../types";
8
+ interface UseScrollbarInitializationProps {
9
+ containerRef: React.RefObject<HTMLDivElement>;
10
+ contentRef: React.RefObject<HTMLDivElement>;
11
+ cachedScrollContainerRef: React.MutableRefObject<HTMLElement | null>;
12
+ updateScrollbar: () => void;
13
+ setScrollbarVisible: (visible: boolean) => void;
14
+ isScrollable: () => boolean;
15
+ autoHide: AutoHideConfig;
16
+ }
17
+ export declare const useScrollbarInitialization: ({ containerRef, contentRef, cachedScrollContainerRef, updateScrollbar, setScrollbarVisible, isScrollable, autoHide, }: UseScrollbarInitializationProps) => {
18
+ isInitialized: boolean;
19
+ };
20
+ export {};
21
+ //# sourceMappingURL=useScrollbarInitialization.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"useScrollbarInitialization.d.ts","sourceRoot":"","sources":["../../src/hooks/useScrollbarInitialization.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAGH,OAAO,EAAE,cAAc,EAAE,MAAM,UAAU,CAAC;AAE1C,UAAU,+BAA+B;IACrC,YAAY,EAAE,KAAK,CAAC,SAAS,CAAC,cAAc,CAAC,CAAC;IAC9C,UAAU,EAAE,KAAK,CAAC,SAAS,CAAC,cAAc,CAAC,CAAC;IAC5C,wBAAwB,EAAE,KAAK,CAAC,gBAAgB,CAAC,WAAW,GAAG,IAAI,CAAC,CAAC;IACrE,eAAe,EAAE,MAAM,IAAI,CAAC;IAC5B,mBAAmB,EAAE,CAAC,OAAO,EAAE,OAAO,KAAK,IAAI,CAAC;IAChD,YAAY,EAAE,MAAM,OAAO,CAAC;IAC5B,QAAQ,EAAE,cAAc,CAAC;CAC5B;AAED,eAAO,MAAM,0BAA0B,GAAI,uHAQxC,+BAA+B;;CA6HjC,CAAC"}
@@ -0,0 +1,27 @@
1
+ /**
2
+ * useScrollbarUpdate.ts
3
+ * 스크롤바 업데이트 관련 로직
4
+ *
5
+ * @copyright 2025 KIM YOUNG JIN (ehfuse@gmail.com)
6
+ */
7
+ import { ThumbConfig, TrackConfig, ArrowsConfig, AutoHideConfig } from "../types";
8
+ interface UseScrollbarUpdateProps {
9
+ wrapperRef: React.RefObject<HTMLDivElement>;
10
+ scrollbarRef: React.RefObject<HTMLDivElement>;
11
+ contentRef: React.RefObject<HTMLDivElement>;
12
+ findScrollableElement: () => HTMLElement | null;
13
+ clearHideTimer: () => void;
14
+ setScrollbarVisible: (visible: boolean) => void;
15
+ thumb: ThumbConfig;
16
+ track: TrackConfig;
17
+ arrows: ArrowsConfig;
18
+ autoHide: AutoHideConfig;
19
+ }
20
+ export declare const useScrollbarUpdate: ({ wrapperRef, scrollbarRef, contentRef, findScrollableElement, clearHideTimer, setScrollbarVisible, thumb, track, arrows, autoHide, }: UseScrollbarUpdateProps) => {
21
+ thumbHeight: number;
22
+ thumbTop: number;
23
+ hasScrollableContent: boolean;
24
+ updateScrollbar: () => void;
25
+ };
26
+ export {};
27
+ //# sourceMappingURL=useScrollbarUpdate.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"useScrollbarUpdate.d.ts","sourceRoot":"","sources":["../../src/hooks/useScrollbarUpdate.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAGH,OAAO,EACH,WAAW,EACX,WAAW,EACX,YAAY,EACZ,cAAc,EACjB,MAAM,UAAU,CAAC;AAElB,UAAU,uBAAuB;IAC7B,UAAU,EAAE,KAAK,CAAC,SAAS,CAAC,cAAc,CAAC,CAAC;IAC5C,YAAY,EAAE,KAAK,CAAC,SAAS,CAAC,cAAc,CAAC,CAAC;IAC9C,UAAU,EAAE,KAAK,CAAC,SAAS,CAAC,cAAc,CAAC,CAAC;IAC5C,qBAAqB,EAAE,MAAM,WAAW,GAAG,IAAI,CAAC;IAChD,cAAc,EAAE,MAAM,IAAI,CAAC;IAC3B,mBAAmB,EAAE,CAAC,OAAO,EAAE,OAAO,KAAK,IAAI,CAAC;IAChD,KAAK,EAAE,WAAW,CAAC;IACnB,KAAK,EAAE,WAAW,CAAC;IACnB,MAAM,EAAE,YAAY,CAAC;IACrB,QAAQ,EAAE,cAAc,CAAC;CAC5B;AAED,eAAO,MAAM,kBAAkB,GAAI,uIAWhC,uBAAuB;;;;;CAiHzB,CAAC"}
@@ -0,0 +1,25 @@
1
+ /**
2
+ * useThumbDrag.ts
3
+ * 썸 드래그 관련 로직
4
+ *
5
+ * @copyright 2025 KIM YOUNG JIN (ehfuse@gmail.com)
6
+ */
7
+ interface UseThumbDragProps {
8
+ findScrollableElement: () => HTMLElement | null;
9
+ thumbHeight: number;
10
+ clearHideTimer: () => void;
11
+ setScrollbarVisible: (visible: boolean) => void;
12
+ updateScrollbar: () => void;
13
+ setHideTimer: (delay: number) => void;
14
+ hideDelay: number;
15
+ isScrollable: () => boolean;
16
+ maintainFocus: () => void;
17
+ }
18
+ export declare const useThumbDrag: ({ findScrollableElement, thumbHeight, clearHideTimer, setScrollbarVisible, updateScrollbar, setHideTimer, hideDelay, isScrollable, maintainFocus, }: UseThumbDragProps) => {
19
+ isDragging: boolean;
20
+ isThumbHovered: boolean;
21
+ setIsThumbHovered: import("react").Dispatch<import("react").SetStateAction<boolean>>;
22
+ handleThumbMouseDown: (event: React.MouseEvent) => void;
23
+ };
24
+ export {};
25
+ //# sourceMappingURL=useThumbDrag.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"useThumbDrag.d.ts","sourceRoot":"","sources":["../../src/hooks/useThumbDrag.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAIH,UAAU,iBAAiB;IACvB,qBAAqB,EAAE,MAAM,WAAW,GAAG,IAAI,CAAC;IAChD,WAAW,EAAE,MAAM,CAAC;IACpB,cAAc,EAAE,MAAM,IAAI,CAAC;IAC3B,mBAAmB,EAAE,CAAC,OAAO,EAAE,OAAO,KAAK,IAAI,CAAC;IAChD,eAAe,EAAE,MAAM,IAAI,CAAC;IAC5B,YAAY,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,IAAI,CAAC;IACtC,SAAS,EAAE,MAAM,CAAC;IAClB,YAAY,EAAE,MAAM,OAAO,CAAC;IAC5B,aAAa,EAAE,MAAM,IAAI,CAAC;CAC7B;AAED,eAAO,MAAM,YAAY,GAAI,qJAU1B,iBAAiB;;;;kCAOJ,KAAK,CAAC,UAAU;CA2F/B,CAAC"}
@@ -0,0 +1,20 @@
1
+ /**
2
+ * useTrackClick.ts
3
+ * 트랙 클릭 관련 로직
4
+ *
5
+ * @copyright 2025 KIM YOUNG JIN (ehfuse@gmail.com)
6
+ */
7
+ interface UseTrackClickProps {
8
+ scrollbarRef: React.RefObject<HTMLDivElement>;
9
+ findScrollableElement: () => HTMLElement | null;
10
+ updateScrollbar: () => void;
11
+ setScrollbarVisible: (visible: boolean) => void;
12
+ setHideTimer: (delay: number) => void;
13
+ hideDelay: number;
14
+ maintainFocus: () => void;
15
+ }
16
+ export declare const useTrackClick: ({ scrollbarRef, findScrollableElement, updateScrollbar, setScrollbarVisible, setHideTimer, hideDelay, maintainFocus, }: UseTrackClickProps) => {
17
+ handleTrackClick: (event: React.MouseEvent) => void;
18
+ };
19
+ export {};
20
+ //# sourceMappingURL=useTrackClick.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"useTrackClick.d.ts","sourceRoot":"","sources":["../../src/hooks/useTrackClick.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAIH,UAAU,kBAAkB;IACxB,YAAY,EAAE,KAAK,CAAC,SAAS,CAAC,cAAc,CAAC,CAAC;IAC9C,qBAAqB,EAAE,MAAM,WAAW,GAAG,IAAI,CAAC;IAChD,eAAe,EAAE,MAAM,IAAI,CAAC;IAC5B,mBAAmB,EAAE,CAAC,OAAO,EAAE,OAAO,KAAK,IAAI,CAAC;IAChD,YAAY,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,IAAI,CAAC;IACtC,SAAS,EAAE,MAAM,CAAC;IAClB,aAAa,EAAE,MAAM,IAAI,CAAC;CAC7B;AAED,eAAO,MAAM,aAAa,GAAI,wHAQ3B,kBAAkB;8BAGL,KAAK,CAAC,UAAU;CA+C/B,CAAC"}
package/dist/index.d.ts CHANGED
@@ -1,4 +1,9 @@
1
- export { default } from "./src/OverlayScrollbar";
2
- export { default as OverlayScrollbar } from "./src/OverlayScrollbar";
3
- export type { OverlayScrollbarRef, OverlayScrollbarProps, ThumbConfig, TrackConfig, ArrowsConfig, DragScrollConfig, AutoHideConfig, } from "./src/types";
1
+ /**
2
+ * src/index.ts
3
+ *
4
+ * @copyright 2025 KIM YOUNG JIN (ehfuse@gmail.com)
5
+ */
6
+ export { default } from "./OverlayScrollbar";
7
+ export { default as OverlayScrollbar } from "./OverlayScrollbar";
8
+ export type { OverlayScrollbarRef, OverlayScrollbarProps, ThumbConfig, TrackConfig, ArrowsConfig, DragScrollConfig, AutoHideConfig, } from "./types";
4
9
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,wBAAwB,CAAC;AACjD,OAAO,EAAE,OAAO,IAAI,gBAAgB,EAAE,MAAM,wBAAwB,CAAC;AACrE,YAAY,EACR,mBAAmB,EACnB,qBAAqB,EACrB,WAAW,EACX,WAAW,EACX,YAAY,EACZ,gBAAgB,EAChB,cAAc,GACjB,MAAM,aAAa,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,EAAE,OAAO,EAAE,MAAM,oBAAoB,CAAC;AAC7C,OAAO,EAAE,OAAO,IAAI,gBAAgB,EAAE,MAAM,oBAAoB,CAAC;AACjE,YAAY,EACR,mBAAmB,EACnB,qBAAqB,EACrB,WAAW,EACX,WAAW,EACX,YAAY,EACZ,gBAAgB,EAChB,cAAc,GACjB,MAAM,SAAS,CAAC"}