scroll-system 1.0.1 → 1.1.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.
Files changed (79) hide show
  1. package/README.md +138 -3
  2. package/dist/components/AriaLiveRegion.d.ts +18 -0
  3. package/dist/components/AriaLiveRegion.d.ts.map +1 -0
  4. package/dist/components/ControlledView.d.ts +16 -0
  5. package/dist/components/ControlledView.d.ts.map +1 -0
  6. package/dist/components/FullView.d.ts +20 -0
  7. package/dist/components/FullView.d.ts.map +1 -0
  8. package/dist/components/LazyView.d.ts +33 -0
  9. package/dist/components/LazyView.d.ts.map +1 -0
  10. package/dist/components/NestedScrollView.d.ts +38 -0
  11. package/dist/components/NestedScrollView.d.ts.map +1 -0
  12. package/dist/components/ScrollContainer.d.ts +9 -0
  13. package/dist/components/ScrollContainer.d.ts.map +1 -0
  14. package/dist/components/ScrollDebugOverlay.d.ts +17 -0
  15. package/dist/components/ScrollDebugOverlay.d.ts.map +1 -0
  16. package/dist/components/ScrollLockedView.d.ts +10 -0
  17. package/dist/components/ScrollLockedView.d.ts.map +1 -0
  18. package/dist/components/index.d.ts +9 -0
  19. package/dist/components/index.d.ts.map +1 -0
  20. package/dist/constants.d.ts +17 -0
  21. package/dist/constants.d.ts.map +1 -0
  22. package/dist/hooks/index.d.ts +21 -0
  23. package/dist/hooks/index.d.ts.map +1 -0
  24. package/dist/hooks/useAutoScroll.d.ts +41 -0
  25. package/dist/hooks/useAutoScroll.d.ts.map +1 -0
  26. package/dist/hooks/useDragHandler.d.ts +28 -0
  27. package/dist/hooks/useDragHandler.d.ts.map +1 -0
  28. package/dist/hooks/useFocusManagement.d.ts +19 -0
  29. package/dist/hooks/useFocusManagement.d.ts.map +1 -0
  30. package/dist/hooks/useGestureConfig.d.ts +37 -0
  31. package/dist/hooks/useGestureConfig.d.ts.map +1 -0
  32. package/dist/hooks/useGlobalProgress.d.ts +36 -0
  33. package/dist/hooks/useGlobalProgress.d.ts.map +1 -0
  34. package/dist/hooks/useHashSync.d.ts +24 -0
  35. package/dist/hooks/useHashSync.d.ts.map +1 -0
  36. package/dist/hooks/useInfiniteScroll.d.ts +41 -0
  37. package/dist/hooks/useInfiniteScroll.d.ts.map +1 -0
  38. package/dist/hooks/useKeyboardHandler.d.ts +20 -0
  39. package/dist/hooks/useKeyboardHandler.d.ts.map +1 -0
  40. package/dist/hooks/useMetricsReporter.d.ts +23 -0
  41. package/dist/hooks/useMetricsReporter.d.ts.map +1 -0
  42. package/dist/hooks/useNavigation.d.ts +42 -0
  43. package/dist/hooks/useNavigation.d.ts.map +1 -0
  44. package/dist/hooks/useParallax.d.ts +33 -0
  45. package/dist/hooks/useParallax.d.ts.map +1 -0
  46. package/dist/hooks/usePreload.d.ts +31 -0
  47. package/dist/hooks/usePreload.d.ts.map +1 -0
  48. package/dist/hooks/useScrollAnalytics.d.ts +40 -0
  49. package/dist/hooks/useScrollAnalytics.d.ts.map +1 -0
  50. package/dist/hooks/useScrollLock.d.ts +40 -0
  51. package/dist/hooks/useScrollLock.d.ts.map +1 -0
  52. package/dist/hooks/useScrollSystem.d.ts +16 -0
  53. package/dist/hooks/useScrollSystem.d.ts.map +1 -0
  54. package/dist/hooks/useSnapPoints.d.ts +77 -0
  55. package/dist/hooks/useSnapPoints.d.ts.map +1 -0
  56. package/dist/hooks/useTouchHandler.d.ts +12 -0
  57. package/dist/hooks/useTouchHandler.d.ts.map +1 -0
  58. package/dist/hooks/useViewProgress.d.ts +22 -0
  59. package/dist/hooks/useViewProgress.d.ts.map +1 -0
  60. package/dist/hooks/useViewRegistration.d.ts +25 -0
  61. package/dist/hooks/useViewRegistration.d.ts.map +1 -0
  62. package/dist/hooks/useWheelHandler.d.ts +8 -0
  63. package/dist/hooks/useWheelHandler.d.ts.map +1 -0
  64. package/dist/index.d.ts +16 -2009
  65. package/dist/index.d.ts.map +1 -0
  66. package/dist/index.js +860 -284
  67. package/dist/index.mjs +799 -212
  68. package/dist/store/index.d.ts +2 -0
  69. package/dist/store/index.d.ts.map +1 -0
  70. package/dist/store/navigation.store.d.ts +23 -0
  71. package/dist/store/navigation.store.d.ts.map +1 -0
  72. package/dist/types/index.d.ts +315 -0
  73. package/dist/types/index.d.ts.map +1 -0
  74. package/dist/utils/index.d.ts +21 -0
  75. package/dist/utils/index.d.ts.map +1 -0
  76. package/dist/utils/normalizeWheel.d.ts +10 -0
  77. package/dist/utils/normalizeWheel.d.ts.map +1 -0
  78. package/package.json +4 -2
  79. package/dist/index.d.mts +0 -2010
@@ -0,0 +1,2 @@
1
+ export * from "./navigation.store";
2
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../store/index.ts"],"names":[],"mappings":"AAAA,cAAc,oBAAoB,CAAC"}
@@ -0,0 +1,23 @@
1
+ /**
2
+ * Scroll System - Navigation Store
3
+ * ========================================
4
+ * Store principal de Zustand con Arquitectura Determinística.
5
+ * Implementa State Machine explícita y Modelo de Intención.
6
+ */
7
+ import type { ScrollSystemStore, ViewState } from "../types";
8
+ export declare const useScrollStore: import("zustand").UseBoundStore<Omit<import("zustand").StoreApi<ScrollSystemStore>, "subscribe"> & {
9
+ subscribe: {
10
+ (listener: (selectedState: ScrollSystemStore, previousSelectedState: ScrollSystemStore) => void): () => void;
11
+ <U>(selector: (state: ScrollSystemStore) => U, listener: (selectedState: U, previousSelectedState: U) => void, options?: {
12
+ equalityFn?: ((a: U, b: U) => boolean) | undefined;
13
+ fireImmediately?: boolean;
14
+ } | undefined): () => void;
15
+ };
16
+ }>;
17
+ export declare const selectActiveView: (state: ScrollSystemStore) => ViewState;
18
+ export declare const selectActiveViewProgress: (state: ScrollSystemStore) => number;
19
+ export declare const selectCanNavigateNext: (state: ScrollSystemStore) => boolean;
20
+ export declare const selectCanNavigatePrevious: (state: ScrollSystemStore) => boolean;
21
+ export declare const selectGlobalProgress: (state: ScrollSystemStore) => number;
22
+ export declare const selectIsAutoScrolling: (state: ScrollSystemStore) => boolean;
23
+ //# sourceMappingURL=navigation.store.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"navigation.store.d.ts","sourceRoot":"","sources":["../../store/navigation.store.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAIH,OAAO,KAAK,EACV,iBAAiB,EAGjB,SAAS,EAKV,MAAM,UAAU,CAAC;AA6DlB,eAAO,MAAM,cAAc;;;;;;;;EAmR1B,CAAC;AAMF,eAAO,MAAM,gBAAgB,GAAI,OAAO,iBAAiB,cACzB,CAAC;AAEjC,eAAO,MAAM,wBAAwB,GAAI,OAAO,iBAAiB,WAClB,CAAC;AAEhD,eAAO,MAAM,qBAAqB,GAAI,OAAO,iBAAiB,YAM7D,CAAC;AAEF,eAAO,MAAM,yBAAyB,GAAI,OAAO,iBAAiB,YAIjE,CAAC;AAEF,eAAO,MAAM,oBAAoB,GAAI,OAAO,iBAAiB,WACvC,CAAC;AAEvB,eAAO,MAAM,qBAAqB,GAAI,OAAO,iBAAiB,YACV,CAAC"}
@@ -0,0 +1,315 @@
1
+ /**
2
+ * Scroll System - Type Definitions
3
+ * ========================================
4
+ * Sistema de scroll tipo TikTok con arquitectura determinística.
5
+ * El Store es la única fuente de verdad.
6
+ */
7
+ /**
8
+ * Capacidad física de scroll de una vista.
9
+ * Distingue si el contenido cabe o no en el viewport.
10
+ */
11
+ export type ScrollCapability = "none" | "internal";
12
+ /**
13
+ * Estado de permiso de navegación.
14
+ */
15
+ export type NavigationState = "locked" | "unlocked";
16
+ /**
17
+ * Métricas crudas del DOM reportadas por las vistas.
18
+ */
19
+ export interface ViewMetrics {
20
+ scrollHeight: number;
21
+ clientHeight: number;
22
+ scrollTop: number;
23
+ }
24
+ export type UserIntentionType = "scroll" | "navigate";
25
+ export type UserDirection = "up" | "down" | "left" | "right";
26
+ export interface UserIntention {
27
+ type: UserIntentionType;
28
+ direction: UserDirection;
29
+ strength: number;
30
+ origin: "wheel" | "touch" | "keyboard" | "programmatic";
31
+ }
32
+ /**
33
+ * Configuration for gesture sensitivity and behavior.
34
+ */
35
+ export interface GestureConfig {
36
+ /** Minimum distance in px to trigger a swipe (default: 50) */
37
+ swipeThreshold?: number;
38
+ /** Minimum velocity in px/ms to trigger a swipe (default: 0.5) */
39
+ swipeVelocity?: number;
40
+ /** Resistance factor when dragging at boundaries 0-1 (default: 0.3) */
41
+ dragResistance?: number;
42
+ /** Enable/disable wheel navigation (default: true) */
43
+ enableWheel?: boolean;
44
+ /** Enable/disable touch navigation (default: true) */
45
+ enableTouch?: boolean;
46
+ /** Enable/disable keyboard navigation (default: true) */
47
+ enableKeyboard?: boolean;
48
+ }
49
+ /**
50
+ * Configuration for automatic view advancement.
51
+ */
52
+ export interface AutoScrollConfig {
53
+ /** Enable auto-scroll functionality */
54
+ enabled: boolean;
55
+ /** Interval between transitions in ms */
56
+ interval: number;
57
+ /** Pause auto-scroll when user interacts (default: true) */
58
+ pauseOnInteraction?: boolean;
59
+ /** Resume delay after interaction in ms (default: 3000) */
60
+ resumeDelay?: number;
61
+ /** Direction of auto-scroll (default: 'forward') */
62
+ direction?: "forward" | "backward";
63
+ /** Stop at last view or loop (requires infiniteScroll) */
64
+ stopAtEnd?: boolean;
65
+ }
66
+ /**
67
+ * A snap point within a view for sub-view navigation.
68
+ */
69
+ export interface SnapPoint {
70
+ /** Unique identifier for the snap point */
71
+ id: string;
72
+ /** Position within the view as percentage 0-1 */
73
+ position: number;
74
+ /** Optional label for accessibility */
75
+ label?: string;
76
+ /** Callback when this snap point is reached */
77
+ onReach?: () => void;
78
+ /** Callback when leaving this snap point */
79
+ onLeave?: () => void;
80
+ }
81
+ /**
82
+ * State of snap points within a view.
83
+ */
84
+ export interface SnapPointState {
85
+ viewId: string;
86
+ points: SnapPoint[];
87
+ activePointId: string | null;
88
+ activePointIndex: number;
89
+ }
90
+ /**
91
+ * Configuration for parallax effects.
92
+ */
93
+ export interface ParallaxConfig {
94
+ /** Speed multiplier (1 = normal, <1 = slower, >1 = faster). Default: 0.5 */
95
+ speed?: number;
96
+ /** Direction of parallax effect (default: matches container orientation) */
97
+ direction?: "vertical" | "horizontal";
98
+ /** Initial offset in pixels */
99
+ offset?: number;
100
+ /** Easing function for the effect */
101
+ easing?: "linear" | "easeOut" | "easeInOut";
102
+ }
103
+ /**
104
+ * Return type for useParallax hook.
105
+ */
106
+ export interface ParallaxState {
107
+ /** Current transform value in pixels */
108
+ transform: number;
109
+ /** CSS transform string ready to use */
110
+ style: React.CSSProperties;
111
+ /** Current progress 0-1 based on view visibility */
112
+ progress: number;
113
+ }
114
+ /**
115
+ * Configuration for view preloading.
116
+ */
117
+ export interface PreloadConfig {
118
+ /** Number of views to preload ahead (default: 1) */
119
+ ahead?: number;
120
+ /** Number of views to preload behind (default: 1) */
121
+ behind?: number;
122
+ /** Delay before preloading starts in ms (default: 100) */
123
+ delay?: number;
124
+ }
125
+ /**
126
+ * Configuration for infinite/loop scroll behavior.
127
+ */
128
+ export interface InfiniteScrollConfig {
129
+ /** Enable infinite scroll (loop from last to first) */
130
+ enabled: boolean;
131
+ /** Direction(s) to loop (default: 'both') */
132
+ loopDirection?: "forward" | "backward" | "both";
133
+ }
134
+ /**
135
+ * Configuration for nested scroll areas.
136
+ */
137
+ export interface NestedScrollConfig {
138
+ /** Direction of nested scroll (perpendicular to main) */
139
+ direction: "horizontal" | "vertical";
140
+ /** Enable snap behavior within nested scroll */
141
+ enableSnap?: boolean;
142
+ /** Number of items/sections in nested scroll */
143
+ itemCount?: number;
144
+ /** Current active item index */
145
+ activeItem?: number;
146
+ /** Callback when nested item changes */
147
+ onItemChange?: (index: number) => void;
148
+ }
149
+ export interface ScrollSystemAPI {
150
+ goToNext: () => boolean;
151
+ goToPrev: () => boolean;
152
+ goTo: (index: number | string) => void;
153
+ getCurrentIndex: () => number;
154
+ getProgress: () => number;
155
+ getActiveViewProgress: () => number;
156
+ isLocked: () => boolean;
157
+ canGoNext: boolean;
158
+ canGoPrev: boolean;
159
+ activeIndex: number;
160
+ activeId: string | null;
161
+ activeViewType: ViewType | null;
162
+ totalViews: number;
163
+ isAutoScrolling?: boolean;
164
+ pauseAutoScroll?: () => void;
165
+ resumeAutoScroll?: () => void;
166
+ }
167
+ export type ViewType = "full" | "scroll-locked" | "controlled" | "nested";
168
+ export type ScrollDirection = "vertical" | "horizontal" | "none";
169
+ export interface BaseViewConfig {
170
+ id: string;
171
+ type: ViewType;
172
+ index?: number;
173
+ meta?: Record<string, unknown>;
174
+ /** Snap points within this view (NEW) */
175
+ snapPoints?: SnapPoint[];
176
+ }
177
+ export interface FullViewConfig extends BaseViewConfig {
178
+ type: "full";
179
+ }
180
+ export interface ScrollLockedViewConfig extends BaseViewConfig {
181
+ type: "scroll-locked";
182
+ scrollDirection: ScrollDirection;
183
+ scrollEndThreshold?: number;
184
+ }
185
+ export interface ControlledViewConfig extends BaseViewConfig {
186
+ type: "controlled";
187
+ scrollDirection?: ScrollDirection;
188
+ allowInternalScroll?: boolean;
189
+ allowGoBack?: boolean;
190
+ }
191
+ export interface NestedViewConfig extends BaseViewConfig {
192
+ type: "nested";
193
+ nestedConfig: NestedScrollConfig;
194
+ }
195
+ export type ViewConfig = FullViewConfig | ScrollLockedViewConfig | ControlledViewConfig | NestedViewConfig;
196
+ export interface ViewState {
197
+ id: string;
198
+ index: number;
199
+ type: ViewType;
200
+ isActive: boolean;
201
+ /** NEW: Is this view preloaded */
202
+ isPreloaded: boolean;
203
+ capability: ScrollCapability;
204
+ navigation: NavigationState;
205
+ explicitLock: NavigationState | null;
206
+ progress: number;
207
+ metrics: ViewMetrics;
208
+ config: ViewConfig;
209
+ /** NEW: Active snap point within this view */
210
+ activeSnapPointId: string | null;
211
+ }
212
+ export interface ScrollSystemState {
213
+ views: ViewState[];
214
+ activeIndex: number;
215
+ activeId: string | null;
216
+ totalViews: number;
217
+ isInitialized: boolean;
218
+ isTransitioning: boolean;
219
+ isGlobalLocked: boolean;
220
+ isDragging: boolean;
221
+ globalProgress: number;
222
+ /** NEW: AutoScroll state */
223
+ isAutoScrolling: boolean;
224
+ isAutoScrollPaused: boolean;
225
+ /** NEW: Infinite scroll enabled */
226
+ infiniteScrollEnabled: boolean;
227
+ }
228
+ export interface ScrollSystemActions {
229
+ initialize: () => void;
230
+ registerView: (config: ViewConfig) => void;
231
+ unregisterView: (id: string) => void;
232
+ processIntention: (intention: UserIntention) => boolean;
233
+ goToNext: () => void;
234
+ goToPrevious: () => void;
235
+ goToView: (indexOrId: number | string) => void;
236
+ updateViewMetrics: (id: string, metrics: ViewMetrics) => void;
237
+ setViewExplicitLock: (id: string, lock: NavigationState | null) => void;
238
+ setGlobalLock: (locked: boolean) => void;
239
+ setDragging: (dragging: boolean) => void;
240
+ startTransition: () => void;
241
+ endTransition: () => void;
242
+ setAutoScrolling: (enabled: boolean) => void;
243
+ setAutoScrollPaused: (paused: boolean) => void;
244
+ setInfiniteScrollEnabled: (enabled: boolean) => void;
245
+ setViewPreloaded: (id: string, preloaded: boolean) => void;
246
+ setActiveSnapPoint: (viewId: string, snapPointId: string | null) => void;
247
+ resetNavigationCooldown: () => void;
248
+ }
249
+ export type ScrollSystemStore = ScrollSystemState & ScrollSystemActions;
250
+ export interface BaseViewProps {
251
+ id: string;
252
+ children: React.ReactNode;
253
+ className?: string;
254
+ onActivate?: () => void;
255
+ onDeactivate?: () => void;
256
+ onEnterStart?: () => void;
257
+ onEnterEnd?: () => void;
258
+ onExitStart?: () => void;
259
+ onExitEnd?: () => void;
260
+ /** NEW: Snap points within this view */
261
+ snapPoints?: SnapPoint[];
262
+ /** NEW: Callback when snap point changes */
263
+ onSnapPointChange?: (snapPointId: string | null) => void;
264
+ }
265
+ export interface FullViewProps extends BaseViewProps {
266
+ meta?: Record<string, unknown>;
267
+ }
268
+ export interface ScrollLockedViewProps extends BaseViewProps {
269
+ scrollDirection?: ScrollDirection;
270
+ scrollEndThreshold?: number;
271
+ onScrollProgress?: (progress: number) => void;
272
+ }
273
+ export interface ControlledViewProps extends BaseViewProps {
274
+ scrollDirection?: ScrollDirection;
275
+ allowInternalScroll?: boolean;
276
+ canProceed?: boolean;
277
+ allowGoBack?: boolean;
278
+ }
279
+ /** NEW: Props for NestedScrollView component */
280
+ export interface NestedScrollViewProps extends BaseViewProps {
281
+ /** Direction of nested scroll (perpendicular to main) */
282
+ nestedDirection?: "horizontal" | "vertical";
283
+ /** Enable snap behavior within nested scroll */
284
+ enableSnap?: boolean;
285
+ /** Callback when nested item changes */
286
+ onItemChange?: (index: number) => void;
287
+ }
288
+ export interface ScrollContainerProps {
289
+ children: React.ReactNode;
290
+ className?: string;
291
+ transitionDuration?: number;
292
+ transitionEasing?: string;
293
+ onViewChange?: (fromIndex: number, toIndex: number) => void;
294
+ onInitialized?: () => void;
295
+ enableHashSync?: boolean;
296
+ hashPushHistory?: boolean;
297
+ hashPrefix?: string;
298
+ respectReducedMotion?: boolean;
299
+ enableFocusManagement?: boolean;
300
+ enableDragPhysics?: boolean;
301
+ orientation?: "vertical" | "horizontal";
302
+ /** Skip the initial animation when mounting (default: false) */
303
+ skipInitialAnimation?: boolean;
304
+ /** Callback reporting global scroll progress 0-1 */
305
+ onProgress?: (progress: number) => void;
306
+ /** Custom gesture sensitivity and behavior */
307
+ gestureConfig?: GestureConfig;
308
+ /** Enable automatic view advancement */
309
+ autoScroll?: AutoScrollConfig;
310
+ /** Enable looping from last to first view */
311
+ infiniteScroll?: boolean | InfiniteScrollConfig;
312
+ /** Configure view preloading */
313
+ preload?: boolean | PreloadConfig;
314
+ }
315
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../types/index.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,21 @@
1
+ /**
2
+ * Scroll System - Utility Functions
3
+ * =========================================
4
+ * Performance utilities for the scroll system.
5
+ */
6
+ /**
7
+ * Creates a throttled version of a function.
8
+ * The function will only be called at most once per `limit` milliseconds.
9
+ */
10
+ export declare function throttle<T extends (...args: unknown[]) => void>(fn: T, limit: number): T;
11
+ /**
12
+ * Check if user prefers reduced motion.
13
+ * Returns true if the user has enabled "Reduce motion" in their OS settings.
14
+ */
15
+ export declare function prefersReducedMotion(): boolean;
16
+ /**
17
+ * Get transition duration respecting reduced motion preference.
18
+ * Returns 0 if user prefers reduced motion, otherwise returns the provided duration.
19
+ */
20
+ export declare function getTransitionDuration(duration: number): number;
21
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../utils/index.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH;;;GAGG;AACH,wBAAgB,QAAQ,CAAC,CAAC,SAAS,CAAC,GAAG,IAAI,EAAE,OAAO,EAAE,KAAK,IAAI,EAC7D,EAAE,EAAE,CAAC,EACL,KAAK,EAAE,MAAM,GACZ,CAAC,CAyBH;AAED;;;GAGG;AACH,wBAAgB,oBAAoB,IAAI,OAAO,CAG9C;AAED;;;GAGG;AACH,wBAAgB,qBAAqB,CAAC,QAAQ,EAAE,MAAM,GAAG,MAAM,CAE9D"}
@@ -0,0 +1,10 @@
1
+ /**
2
+ * Normaliza eventos de rueda (mouse wheel) entre navegadores.
3
+ * Retorna pixelY consistente.
4
+ */
5
+ export declare function normalizeWheel(event: any): {
6
+ pixelX: number;
7
+ pixelY: number;
8
+ pixelZ: number;
9
+ };
10
+ //# sourceMappingURL=normalizeWheel.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"normalizeWheel.d.ts","sourceRoot":"","sources":["../../utils/normalizeWheel.ts"],"names":[],"mappings":"AAAA;;;GAGG;AACH,wBAAgB,cAAc,CAAC,KAAK,EAAE,GAAG;;;;EAyCxC"}
package/package.json CHANGED
@@ -1,12 +1,14 @@
1
1
  {
2
2
  "name": "scroll-system",
3
- "version": "1.0.1",
3
+ "version": "1.1.0",
4
4
  "description": "TikTok-style vertical scroll system with snap views, touch physics, and accessibility features",
5
5
  "main": "./dist/index.js",
6
6
  "module": "./dist/index.mjs",
7
7
  "types": "./dist/index.d.ts",
8
8
  "scripts": {
9
- "build": "tsup index.ts --format cjs,esm --dts",
9
+ "build": "tsup && tsc --emitDeclarationOnly --declaration --declarationMap --outDir dist",
10
+ "build:js": "tsup",
11
+ "build:types": "tsc --emitDeclarationOnly --declaration --outDir dist",
10
12
  "test": "vitest",
11
13
  "test:run": "vitest run",
12
14
  "prepublishOnly": "npm run test:run && npm run build"