1 | /**
|
2 | * egjs-conveyer
|
3 | * Copyright (c) 2022-present NAVER Corp.
|
4 | * MIT license
|
5 | */
|
6 | import { CONVEYER_METHODS } from "./consts";
|
7 | import Conveyer from "./Conveyer";
|
8 | /**
|
9 | * @typedef
|
10 | */
|
11 | export interface ConveyerOptions {
|
12 | /**
|
13 | * scroll direction. (true: Horizontal Scroll, false: Vertical Scroll)
|
14 | * <ko>스크롤 방향. (true: 가로 스크롤, false: 세로 스크롤)</ko>
|
15 | * @default true
|
16 | */
|
17 | horizontal?: boolean;
|
18 | /**
|
19 | * selector to find items inside.
|
20 | * <ko>내부의 아이템들을 찾기 위한 selector.</ko>
|
21 | * @default ""
|
22 | */
|
23 | itemSelector?: string;
|
24 | /**
|
25 | * Whether to use drag.
|
26 | * <ko> 드래그를 사용할지 여부.</ko>
|
27 | * @default true
|
28 | */
|
29 | useDrag?: boolean;
|
30 | /**
|
31 | * Whether to use the mouse wheel in a direction aside from the scroll direction.
|
32 | * <ko>스크롤 방향과 다른 방향의 마우스 휠 입력을 사용할지 여부.</ko>
|
33 | * @default false
|
34 | */
|
35 | useSideWheel?: boolean;
|
36 | /**
|
37 | * The minimum margin space for {@link Conveyer#event-reachStart reachStart}, {@link Conveyer#event-leaveStart leaveStart}, {@link Conveyer#event-reachEnd reachEnd}, and {@link Conveyer#event-leaveEnd leaveEnd} events to be triggered at the beginning and end of the scroll area.
|
38 | * <ko> 스크롤 영역의 시작과 끝에서 {@link Conveyer#event-reachStart reachStart}, {@link Conveyer#event-leaveStart leaveStart}, {@link Conveyer#event-reachEnd reachEnd}, {@link Conveyer#event-leaveEnd leaveEnd} 이벤트들이 발생하기 위한 최소 여백.</ko>
|
39 | * @default 0
|
40 | */
|
41 | boundaryMargin?: number;
|
42 | /**
|
43 | * The maximum amount of time the scroll event does not fire for the finishScroll event to be triggered.
|
44 | * <ko> finishScroll 이벤트가 발생되기 위한 scroll 이벤트가 발생하지 않는 최대 시간.</ko>
|
45 | * @default 100
|
46 | */
|
47 | scrollDebounce?: number;
|
48 | /**
|
49 | * Whether to prevent being selected.
|
50 | * <ko>셀렉트가 되는 것을 막을지 여부.</ko>
|
51 | * @default true
|
52 | */
|
53 | preventDefault?: boolean;
|
54 | /**
|
55 | * Whether to prevent click event when dragging.
|
56 | * <ko>드래그하면 클릭이벤트를 막을지 여부.</ko>
|
57 | * @default false
|
58 | */
|
59 | preventClickOnDrag?: boolean;
|
60 | /**
|
61 | * Whether to use the {@link https://developer.mozilla.org/ko/docs/Web/API/Event/preventDefault preventDefault} when the user starts dragging.
|
62 | * <ko>사용자가 드래그를 시작할 때 {@link https://developer.mozilla.org/ko/docs/Web/API/Event/preventDefault preventDefault} 실행 여부</ko>
|
63 | * @default false
|
64 | */
|
65 | preventDefaultOnDrag?: boolean;
|
66 | /**
|
67 | * Whether to automatically initialize when an instance is created. If set to false, initialization is possible while calling the init method.
|
68 | * <ko>인스턴스를 생성할 때 자동으로 초기화할지 여부. false로 설정하면 init 메서드를 호출하면서 초기화가 가능하다.</ko>
|
69 | * @default true
|
70 | */
|
71 | autoInit?: boolean;
|
72 | /**
|
73 | * If this option is enabled on a Conveyer placed inside an egjs component that has the same scroll direction including the Conveyer itself. The parent component moves in the same direction after the Conveyer reaches the first/last scroll position.
|
74 | * <ko>Conveyer 자신을 포함해서 동일한 스크롤 방향을 가진 egjs 컴포넌트 내부에 배치된 Conveyer에서 이 옵션을 활성화하면 Conveyer가 첫/마지막 스크롤 위치에 도달한 뒤부터 같은 방향으로 상위 컴포넌트가 움직인다.</ko>
|
75 | * @default false
|
76 | */
|
77 | nested?: boolean;
|
78 | /**
|
79 | * Whether to use the {@link https://developer.mozilla.org/en-US/docs/Web/API/ResizeObserver ResizeObserver} when resizing the Conveyer element and ConveyerItem elements.
|
80 | * <ko>Conveyer element와 ConveyerItem element 크기가 변경될 때 {@link https://developer.mozilla.org/en-US/docs/Web/API/ResizeObserver ResizeObserver} 적용 여부 </ko>
|
81 | * @default false
|
82 | */
|
83 | useResizeObserver?: boolean;
|
84 | }
|
85 | /**
|
86 | * @typedef
|
87 | */
|
88 | export interface OnFinishScroll {
|
89 | isWheelScroll: boolean;
|
90 | isDragScroll: boolean;
|
91 | isAnimationScroll: boolean;
|
92 | isTrusted: boolean;
|
93 | }
|
94 | export interface ConveyerEvents {
|
95 | reachStart: void;
|
96 | reachEnd: void;
|
97 | leaveStart: void;
|
98 | leaveEnd: void;
|
99 | beginScroll: void;
|
100 | finishScroll: OnFinishScroll;
|
101 | }
|
102 | export interface ConveyerReactiveState {
|
103 | readonly isReachStart: boolean;
|
104 | readonly isReachEnd: boolean;
|
105 | readonly scrollPos: number;
|
106 | }
|
107 | /**
|
108 | * @typedef
|
109 | */
|
110 | export interface FindItemOptions {
|
111 | /**
|
112 | * size ratio to find items. Use it if `padding` inside the item plays the same role as `margin` or `gap`.
|
113 | * <ko>아이템을 찾기 위한 사이즈 비율. 아이템 내부에 `padding`이 `margin`, `gap`과 같은 역할을 한다면 사용해라.</ko>
|
114 | * @default 1
|
115 | */
|
116 | hitTest?: number;
|
117 | /**
|
118 | * Whether to include items that intersect on the side
|
119 | * <ko>사이드에 교차하는 아이템까지 포함할지 여부.</ko>
|
120 | * @default 0
|
121 | */
|
122 | intersection?: boolean;
|
123 | /**
|
124 | * The number of items next to the item's index to return.
|
125 | * <ko>해당 아이템의 index에서 얼마나 옆에 있는 아이템을 반환할지 개수.</ko>
|
126 | * @default 0
|
127 | */
|
128 | sibling?: number;
|
129 | }
|
130 | /**
|
131 | * @typedef
|
132 | * @extends FindItemOptions
|
133 | */
|
134 | export interface ScrollIntoViewOptions extends FindItemOptions {
|
135 | /**
|
136 | * The position to align the target to.
|
137 | * <ko>target을 정렬할 위치.</ko>
|
138 | */
|
139 | align?: "start" | "end" | "center";
|
140 | /**
|
141 | * Whether to find the next item except sorting it in place.
|
142 | * <ko>아이템을 제자리에 정렬하는 것을 제외하고 다음 아이템을 찾을지 여부.</ko>
|
143 | * @default false
|
144 | */
|
145 | excludeStand?: boolean;
|
146 | /**
|
147 | * The value to scroll further from the sort position.
|
148 | * <ko>정렬하는 위치에서 얼만큼 더 스크롤할 값.</ko>
|
149 | * @default 0
|
150 | */
|
151 | offset?: number;
|
152 | /**
|
153 | * How long to scroll animation time.
|
154 | * <ko>얼마동한 스크롤할 할지 애니메이션 시간.</ko>
|
155 | * @default 0
|
156 | */
|
157 | duration?: number;
|
158 | }
|
159 | /**
|
160 | * @typedef
|
161 | */
|
162 | export interface ConveyerItem {
|
163 | element?: HTMLElement | null;
|
164 | pos: number;
|
165 | size: number;
|
166 | }
|
167 | export declare type ConveyerMethods = {
|
168 | [key in typeof CONVEYER_METHODS[number]]: Conveyer[key];
|
169 | };
|