@superrb/react-addons 4.0.0-9 → 4.0.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.
@@ -23,22 +23,31 @@ export default function useDraggableScroll(ref, { className, ...opts }) {
23
23
  ref.current?.classList[fn](`${className}--draggable`);
24
24
  }, [ref, className]);
25
25
  const onDragStart = () => {
26
+ if (!isInViewport) {
27
+ return;
28
+ }
26
29
  setDragging(true);
27
30
  ref.current?.classList.add(`${className}--dragging`);
28
31
  };
29
32
  const onDragMove = () => {
33
+ if (!isInViewport) {
34
+ return;
35
+ }
30
36
  if (timer.current && dragging) {
31
37
  clearTimeout(timer.current);
32
38
  }
33
39
  };
34
40
  const onDragEnd = () => {
41
+ if (!isInViewport) {
42
+ return;
43
+ }
35
44
  setDragging(false);
36
45
  timer.current = setTimeout(() => {
37
46
  ref.current?.classList.remove(`${className}--dragging`);
38
47
  }, 100);
39
48
  };
40
- useEventListener('mousemove', onDragMove, undefined, undefined, isInViewport && shouldScroll);
41
- useEventListener('mouseup', onDragEnd, undefined, undefined, isInViewport && shouldScroll);
49
+ useEventListener('mousemove', onDragMove);
50
+ useEventListener('mouseup', onDragEnd);
42
51
  useEffect(() => {
43
52
  if (!shouldScroll) {
44
53
  setModifiedEvents({
@@ -1 +1 @@
1
- {"version":3,"file":"use-escape.d.ts","sourceRoot":"","sources":["../src/hooks/use-escape.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,OAAO,CAAA;AAGjC,QAAA,MAAM,SAAS,GACb,KAAK,SAAS,CAAC,WAAW,GAAG,IAAI,CAAC,EAClC,UAAU,MAAM,IAAI,EACpB;;CAEC,SAiBF,CAAA;AAED,eAAe,SAAS,CAAA"}
1
+ {"version":3,"file":"use-escape.d.ts","sourceRoot":"","sources":["../src/hooks/use-escape.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAU,MAAM,OAAO,CAAA;AAGzC,QAAA,MAAM,SAAS,GACb,KAAK,SAAS,CAAC,WAAW,GAAG,IAAI,CAAC,EAClC,UAAU,MAAM,IAAI,EACpB;;CAEC,SAqBF,CAAA;AAED,eAAe,SAAS,CAAA"}
@@ -1,13 +1,16 @@
1
- import { useEventListener } from '../hooks';
1
+ import { useRef } from 'react';
2
+ import useEventListener from './use-event-listener';
2
3
  const useEscape = (ref, callback, opts = {
3
- requireFocus: true
4
+ requireFocus: true,
4
5
  }) => {
6
+ const documentRef = useRef(typeof document !== 'undefined' ? document : null);
5
7
  useEventListener('keydown', (event) => {
6
- if ((opts.requireFocus == false || ref.current?.contains(document.activeElement)) &&
8
+ if ((opts.requireFocus == false ||
9
+ ref.current?.contains(document.activeElement)) &&
7
10
  event.key === 'Escape') {
8
11
  event.preventDefault();
9
12
  callback();
10
13
  }
11
- }, {}, typeof document !== 'undefined' ? document : undefined, ref.current !== undefined && typeof document !== 'undefined');
14
+ }, undefined, documentRef);
12
15
  };
13
16
  export default useEscape;
@@ -1,7 +1,6 @@
1
- type Target = Document | Window | Element;
2
- type EventMap<T extends Target> = T extends Window ? WindowEventHandlersEventMap & GlobalEventHandlersEventMap : T extends Document ? DocumentEventMap : GlobalEventHandlersEventMap;
3
- type EventName<T extends Target> = keyof EventMap<T>;
4
- type EventListener<T extends Target, E extends EventName<T>> = (event: EventMap<T>[E]) => void | boolean;
5
- export default function useEventListener<T extends Target, E extends EventName<T>>(eventName: E, handler: EventListener<T, E>, options?: boolean | AddEventListenerOptions, element?: T | null, flag?: boolean): void;
6
- export {};
1
+ import type { RefObject } from 'react';
2
+ export default function useEventListener<K extends keyof MediaQueryListEventMap>(eventName: K, handler: (event: MediaQueryListEventMap[K]) => void, options?: boolean | AddEventListenerOptions, element?: RefObject<MediaQueryList>, flag?: boolean): void;
3
+ export default function useEventListener<K extends keyof WindowEventMap>(eventName: K, handler: (event: WindowEventMap[K]) => void, options?: boolean | AddEventListenerOptions, element?: undefined, flag?: boolean): void;
4
+ export default function useEventListener<K extends keyof HTMLElementEventMap & keyof SVGElementEventMap, T extends Element = K extends keyof HTMLElementEventMap ? HTMLDivElement : SVGElement>(eventName: K, handler: ((event: HTMLElementEventMap[K]) => void) | ((event: SVGElementEventMap[K]) => void), options?: boolean | AddEventListenerOptions, element?: RefObject<T>, flag?: boolean): void;
5
+ export default function useEventListener<K extends keyof DocumentEventMap>(eventName: K, handler: (event: DocumentEventMap[K]) => void, options?: boolean | AddEventListenerOptions, element?: RefObject<Document>, flag?: boolean): void;
7
6
  //# sourceMappingURL=use-event-listener.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"use-event-listener.d.ts","sourceRoot":"","sources":["../src/hooks/use-event-listener.ts"],"names":[],"mappings":"AAEA,KAAK,MAAM,GAAG,QAAQ,GAAG,MAAM,GAAG,OAAO,CAAA;AAEzC,KAAK,QAAQ,CAAC,CAAC,SAAS,MAAM,IAAI,CAAC,SAAS,MAAM,GAC9C,2BAA2B,GAAG,2BAA2B,GACzD,CAAC,SAAS,QAAQ,GAChB,gBAAgB,GAChB,2BAA2B,CAAA;AAEjC,KAAK,SAAS,CAAC,CAAC,SAAS,MAAM,IAAI,MAAM,QAAQ,CAAC,CAAC,CAAC,CAAA;AAEpD,KAAK,aAAa,CAAC,CAAC,SAAS,MAAM,EAAE,CAAC,SAAS,SAAS,CAAC,CAAC,CAAC,IAAI,CAC7D,KAAK,EAAE,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,KAClB,IAAI,GAAG,OAAO,CAAA;AAGnB,MAAM,CAAC,OAAO,UAAU,gBAAgB,CACtC,CAAC,SAAS,MAAM,EAChB,CAAC,SAAS,SAAS,CAAC,CAAC,CAAC,EAEtB,SAAS,EAAE,CAAC,EACZ,OAAO,EAAE,aAAa,CAAC,CAAC,EAAE,CAAC,CAAC,EAC5B,OAAO,GAAE,OAAO,GAAG,uBAA4B,EAC/C,OAAO,CAAC,EAAE,CAAC,GAAG,IAAI,EAClB,IAAI,GAAE,OAAc,QAmDrB"}
1
+ {"version":3,"file":"use-event-listener.d.ts","sourceRoot":"","sources":["../src/hooks/use-event-listener.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,OAAO,CAAA;AAKtC,MAAM,CAAC,OAAO,UAAU,gBAAgB,CACtC,CAAC,SAAS,MAAM,sBAAsB,EAEtC,SAAS,EAAE,CAAC,EACZ,OAAO,EAAE,CAAC,KAAK,EAAE,sBAAsB,CAAC,CAAC,CAAC,KAAK,IAAI,EACnD,OAAO,CAAC,EAAE,OAAO,GAAG,uBAAuB,EAC3C,OAAO,CAAC,EAAE,SAAS,CAAC,cAAc,CAAC,EACnC,IAAI,CAAC,EAAE,OAAO,GACb,IAAI,CAAA;AAGP,MAAM,CAAC,OAAO,UAAU,gBAAgB,CAAC,CAAC,SAAS,MAAM,cAAc,EACrE,SAAS,EAAE,CAAC,EACZ,OAAO,EAAE,CAAC,KAAK,EAAE,cAAc,CAAC,CAAC,CAAC,KAAK,IAAI,EAC3C,OAAO,CAAC,EAAE,OAAO,GAAG,uBAAuB,EAC3C,OAAO,CAAC,EAAE,SAAS,EACnB,IAAI,CAAC,EAAE,OAAO,GACb,IAAI,CAAA;AAGP,MAAM,CAAC,OAAO,UAAU,gBAAgB,CACtC,CAAC,SAAS,MAAM,mBAAmB,GAAG,MAAM,kBAAkB,EAC9D,CAAC,SAAS,OAAO,GAAG,CAAC,SAAS,MAAM,mBAAmB,GACnD,cAAc,GACd,UAAU,EAEd,SAAS,EAAE,CAAC,EACZ,OAAO,EACH,CAAC,CAAC,KAAK,EAAE,mBAAmB,CAAC,CAAC,CAAC,KAAK,IAAI,CAAC,GACzC,CAAC,CAAC,KAAK,EAAE,kBAAkB,CAAC,CAAC,CAAC,KAAK,IAAI,CAAC,EAC5C,OAAO,CAAC,EAAE,OAAO,GAAG,uBAAuB,EAC3C,OAAO,CAAC,EAAE,SAAS,CAAC,CAAC,CAAC,EACtB,IAAI,CAAC,EAAE,OAAO,GACb,IAAI,CAAA;AAGP,MAAM,CAAC,OAAO,UAAU,gBAAgB,CAAC,CAAC,SAAS,MAAM,gBAAgB,EACvE,SAAS,EAAE,CAAC,EACZ,OAAO,EAAE,CAAC,KAAK,EAAE,gBAAgB,CAAC,CAAC,CAAC,KAAK,IAAI,EAC7C,OAAO,CAAC,EAAE,OAAO,GAAG,uBAAuB,EAC3C,OAAO,CAAC,EAAE,SAAS,CAAC,QAAQ,CAAC,EAC7B,IAAI,CAAC,EAAE,OAAO,GACb,IAAI,CAAA"}
@@ -1,37 +1,28 @@
1
1
  import { useEffect, useRef } from 'react';
2
- // Hook
3
- export default function useEventListener(eventName, handler, options = {}, element, flag = true) {
2
+ import { useIsomorphicLayoutEffect } from 'usehooks-ts';
3
+ export default function useEventListener(eventName, handler, options, element, flag = true) {
4
4
  // Create a ref that stores handler
5
- const savedHandler = useRef(null);
6
- const elementRef = useRef(null);
7
- useEffect(() => {
8
- elementRef.current = element || window;
9
- }, [element]);
10
- // Update ref.current value if handler changes.
11
- // This allows our effect below to always get latest handler ...
12
- // ... without us needing to pass it in effect deps array ...
13
- // ... and potentially cause effect to re-run every render.
14
- useEffect(() => {
5
+ const savedHandler = useRef(handler);
6
+ useIsomorphicLayoutEffect(() => {
15
7
  savedHandler.current = handler;
16
8
  }, [handler]);
17
9
  useEffect(() => {
18
- // Make sure element supports addEventListener
19
- // On
20
- const isSupported = elementRef.current && elementRef.current.addEventListener;
21
- if (!isSupported)
10
+ const targetElement = element?.current ?? window;
11
+ if (!(targetElement && targetElement.addEventListener))
22
12
  return;
23
13
  // Create event listener that calls handler function stored in ref
24
- const eventListener = (event) => savedHandler.current?.(event);
14
+ const listener = (event) => {
15
+ savedHandler.current(event);
16
+ };
25
17
  if (flag) {
26
- // Add event listener
27
- elementRef.current?.addEventListener(eventName, eventListener, options);
18
+ targetElement.addEventListener(eventName, listener, options);
28
19
  }
29
20
  else {
30
- elementRef.current?.removeEventListener(eventName, eventListener);
21
+ targetElement.removeEventListener(eventName, listener, options);
31
22
  }
32
23
  // Remove event listener on cleanup
33
24
  return () => {
34
- elementRef.current?.removeEventListener(eventName, eventListener);
25
+ targetElement.removeEventListener(eventName, listener, options);
35
26
  };
36
- }, [eventName, handler, options, element, flag]);
27
+ }, [eventName, element, options, flag]);
37
28
  }
@@ -1 +1 @@
1
- {"version":3,"file":"use-hide-on-scroll.d.ts","sourceRoot":"","sources":["../src/hooks/use-hide-on-scroll.ts"],"names":[],"mappings":"AAGA,MAAM,CAAC,OAAO,UAAU,eAAe,CACrC,YAAY,GAAE,OAAe,GAC5B,OAAO,CA+DT"}
1
+ {"version":3,"file":"use-hide-on-scroll.d.ts","sourceRoot":"","sources":["../src/hooks/use-hide-on-scroll.ts"],"names":[],"mappings":"AAGA,MAAM,CAAC,OAAO,UAAU,eAAe,CACrC,YAAY,GAAE,OAAe,GAC5B,OAAO,CA2CT"}
@@ -1,5 +1,5 @@
1
- import { useEventListener } from '../hooks';
2
1
  import { useCallback, useEffect, useState } from 'react';
2
+ import useEventListener from './use-event-listener';
3
3
  export default function useHideOnScroll(hiddenOnLoad = false) {
4
4
  const [hidden, setHidden] = useState(hiddenOnLoad);
5
5
  const handleScroll = useCallback(() => {
@@ -26,9 +26,9 @@ export default function useHideOnScroll(hiddenOnLoad = false) {
26
26
  useEffect(() => {
27
27
  handleScroll();
28
28
  }, []);
29
- useEventListener('scroll', handleScroll, { passive: true }, typeof window !== 'undefined' ? window : undefined);
30
- useEventListener('resize', handleLoad, { passive: true }, typeof window !== 'undefined' ? window : undefined);
31
- useEventListener('popstate', handleLoad, { passive: true }, typeof window !== 'undefined' ? window : undefined);
32
- useEventListener('pageshow', handleLoad, { passive: true }, typeof window !== 'undefined' ? window : undefined);
29
+ useEventListener('scroll', handleScroll, { passive: true });
30
+ useEventListener('resize', handleLoad, { passive: true });
31
+ useEventListener('popstate', handleLoad, { passive: true });
32
+ useEventListener('pageshow', handleLoad, { passive: true });
33
33
  return hidden;
34
34
  }
@@ -1 +1 @@
1
- {"version":3,"file":"use-parallax.d.ts","sourceRoot":"","sources":["../src/hooks/use-parallax.ts"],"names":[],"mappings":"AAGA,MAAM,CAAC,OAAO,UAAU,WAAW,CACjC,KAAK,EAAE,WAAW,EAAE,EACpB,IAAI,GAAE,OAAc,QA4BrB"}
1
+ {"version":3,"file":"use-parallax.d.ts","sourceRoot":"","sources":["../src/hooks/use-parallax.ts"],"names":[],"mappings":"AAGA,MAAM,CAAC,OAAO,UAAU,WAAW,CACjC,KAAK,EAAE,WAAW,EAAE,EACpB,IAAI,GAAE,OAAc,QA0BrB"}
@@ -3,6 +3,9 @@ import { useCallback } from 'react';
3
3
  export default function useParallax(items, flag = true) {
4
4
  const isMotionAllowed = useMotionAllowed();
5
5
  const onScroll = useCallback((event) => {
6
+ if (!flag || !isMotionAllowed) {
7
+ return;
8
+ }
6
9
  items.forEach((item, index) => {
7
10
  if (!item) {
8
11
  return;
@@ -12,6 +15,6 @@ export default function useParallax(items, flag = true) {
12
15
  item.style.transform = `translate3d(0, ${(box.top / window.innerHeight) * 100 * (1 + index / 500)}%, 0)`;
13
16
  });
14
17
  });
15
- }, [items]);
16
- useEventListener('scroll', onScroll, { passive: true }, undefined, flag && isMotionAllowed);
18
+ }, [items, flag, isMotionAllowed]);
19
+ useEventListener('scroll', onScroll, { passive: true });
17
20
  }
@@ -1 +1 @@
1
- {"version":3,"file":"use-slideshow.d.ts","sourceRoot":"","sources":["../src/hooks/use-slideshow.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,gBAAgB,EAAuB,MAAM,OAAO,CAAA;AAG7D,MAAM,MAAM,gBAAgB,GAAG,WAAW,GAAG;IAC3C,cAAc,CAAC,EAAE,MAAM,CAAA;CACxB,CAAA;AAED,MAAM,MAAM,SAAS,GAAG;IACtB,YAAY,EAAE,gBAAgB,CAAC,gBAAgB,CAAC,CAAA;IAChD,YAAY,EAAE,MAAM,CAAA;IACpB,UAAU,EAAE,MAAM,CAAA;IAClB,IAAI,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,IAAI,CAAA;IAC7B,OAAO,EAAE,OAAO,CAAA;IAChB,KAAK,EAAE,OAAO,CAAA;CACf,CAAA;AAED,wBAAgB,YAAY,CAAC,OAAO,EAAE,gBAAgB,GAAG,OAAO,CAE/D;AAED,wBAAgB,UAAU,CAAC,OAAO,EAAE,gBAAgB,GAAG,OAAO,CAK7D;AAED,wBAAgB,iBAAiB,CAAC,MAAM,EAAE,gBAAgB,UAMzD;AAED,wBAAgB,oBAAoB,CAClC,OAAO,EAAE,gBAAgB,EACzB,YAAY,EAAE,MAAM,GACnB,MAAM,CAkER;AAED,MAAM,CAAC,OAAO,UAAU,YAAY,CAClC,SAAS,EAAE,gBAAgB,CAAC,gBAAgB,CAAC,GAC5C,SAAS,CAqGX"}
1
+ {"version":3,"file":"use-slideshow.d.ts","sourceRoot":"","sources":["../src/hooks/use-slideshow.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,gBAAgB,EAAuB,MAAM,OAAO,CAAA;AAG7D,MAAM,MAAM,gBAAgB,GAAG,WAAW,GAAG;IAC3C,cAAc,CAAC,EAAE,MAAM,CAAA;CACxB,CAAA;AAED,MAAM,MAAM,SAAS,GAAG;IACtB,YAAY,EAAE,gBAAgB,CAAC,gBAAgB,CAAC,CAAA;IAChD,YAAY,EAAE,MAAM,CAAA;IACpB,UAAU,EAAE,MAAM,CAAA;IAClB,IAAI,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,IAAI,CAAA;IAC7B,OAAO,EAAE,OAAO,CAAA;IAChB,KAAK,EAAE,OAAO,CAAA;CACf,CAAA;AAED,wBAAgB,YAAY,CAAC,OAAO,EAAE,gBAAgB,GAAG,OAAO,CAE/D;AAED,wBAAgB,UAAU,CAAC,OAAO,EAAE,gBAAgB,GAAG,OAAO,CAK7D;AAED,wBAAgB,iBAAiB,CAAC,MAAM,EAAE,gBAAgB,UAMzD;AAED,wBAAgB,oBAAoB,CAClC,OAAO,EAAE,gBAAgB,EACzB,YAAY,EAAE,MAAM,GACnB,MAAM,CAkER;AAED,MAAM,CAAC,OAAO,UAAU,YAAY,CAClC,SAAS,EAAE,gBAAgB,CAAC,gBAAgB,CAAC,GAC5C,SAAS,CA8FX"}
@@ -65,7 +65,6 @@ export function getCurrentSlideIndex(element, currentIndex) {
65
65
  export default function useSlideshow(slideshow) {
66
66
  const [currentSlide, setCurrentSlide] = useState(0);
67
67
  const [progress, setProgress] = useState(-1);
68
- const [ready, setReady] = useState(false);
69
68
  const update = () => {
70
69
  if (!slideshow.current) {
71
70
  return;
@@ -73,10 +72,9 @@ export default function useSlideshow(slideshow) {
73
72
  setCurrentSlide((current) => getCurrentSlideIndex(slideshow.current, current));
74
73
  setProgress(getScrollProgress(slideshow.current));
75
74
  };
76
- useEventListener('scroll', update, { passive: true }, slideshow.current, !!slideshow.current && ready);
77
- useEventListener('resize', update, { passive: true }, slideshow.current, !!slideshow.current && ready);
75
+ useEventListener('scroll', update, { passive: true }, slideshow);
76
+ useEventListener('resize', update, { passive: true }, slideshow);
78
77
  useEffect(() => {
79
- setReady(true);
80
78
  if (slideshow.current) {
81
79
  update();
82
80
  slideshow.current.setAttribute('role', 'region');
@@ -87,7 +85,7 @@ export default function useSlideshow(slideshow) {
87
85
  useEffect(() => {
88
86
  ;
89
87
  [...slideshow.current?.children].forEach((child) => child.setAttribute('aria-hidden', 'true'));
90
- slideshow.current?.children[currentSlide].setAttribute('aria-hidden', 'false');
88
+ slideshow.current?.children?.[currentSlide]?.setAttribute('aria-hidden', 'false');
91
89
  }, [currentSlide, slideshow]);
92
90
  return {
93
91
  slideshowRef: slideshow,
@@ -95,37 +93,47 @@ export default function useSlideshow(slideshow) {
95
93
  slideCount: slideshow.current?.children.length || 0,
96
94
  goTo(index) {
97
95
  index = Math.min(slideshow.current?.children.length - 1, Math.max(0, index));
98
- const newElement = slideshow.current?.children[index];
99
- newElement.scrollIntoView({
100
- behavior: 'smooth',
101
- block: isHorizontal(slideshow.current)
102
- ? 'nearest'
103
- : isCentered(slideshow.current)
104
- ? 'center'
105
- : 'start',
106
- inline: isHorizontal(slideshow.current)
107
- ? isCentered(slideshow.current)
108
- ? 'center'
109
- : 'start'
110
- : 'nearest',
111
- });
112
- // const scrollOpts: ScrollToOptions = {
96
+ const newElement = slideshow.current?.children?.[index];
97
+ // newElement.scrollIntoView({
113
98
  // behavior: 'smooth',
114
- // }
115
- // if (isHorizontal(slideshow.current)) {
116
- // if (isCentered(slideshow.current)) {
117
- // scrollOpts.left = newElement?.offsetLeft + newElement?.clientWidth / 2
118
- // } else {
119
- // scrollOpts.left = newElement?.offsetLeft
120
- // }
121
- // } else {
122
- // if (isCentered(slideshow.current)) {
123
- // scrollOpts.top = newElement?.offsetTop + newElement?.clientHeight / 2
124
- // } else {
125
- // scrollOpts.top = newElement?.offsetTop
126
- // }
127
- // }
128
- // slideshow.current?.scrollTo(scrollOpts)
99
+ // block: isHorizontal(slideshow.current)
100
+ // ? 'nearest'
101
+ // : isCentered(slideshow.current)
102
+ // ? 'center'
103
+ // : 'start',
104
+ // inline: isHorizontal(slideshow.current)
105
+ // ? isCentered(slideshow.current)
106
+ // ? 'center'
107
+ // : 'start'
108
+ // : 'nearest',
109
+ // })
110
+ const scrollOpts = {
111
+ behavior: 'smooth',
112
+ };
113
+ const horizontal = isHorizontal(slideshow.current);
114
+ const styles = window.getComputedStyle(slideshow.current);
115
+ const padding = horizontal
116
+ ? parseInt(styles.paddingLeft)
117
+ : parseInt(styles.paddingTop);
118
+ if (isHorizontal(slideshow.current)) {
119
+ if (isCentered(slideshow.current)) {
120
+ scrollOpts.left =
121
+ newElement?.offsetLeft + newElement?.clientWidth / 2 - padding;
122
+ }
123
+ else {
124
+ scrollOpts.left = newElement?.offsetLeft - padding;
125
+ }
126
+ }
127
+ else {
128
+ if (isCentered(slideshow.current)) {
129
+ scrollOpts.top =
130
+ newElement?.offsetTop + newElement?.clientHeight / 2 - padding;
131
+ }
132
+ else {
133
+ scrollOpts.top = newElement?.offsetTop - padding;
134
+ }
135
+ }
136
+ slideshow.current?.scrollTo(scrollOpts);
129
137
  },
130
138
  atStart: progress <= 0 || progress === -1,
131
139
  atEnd: progress >= 1 || progress === -1,
package/package.json CHANGED
@@ -1,28 +1,28 @@
1
1
  {
2
2
  "name": "@superrb/react-addons",
3
3
  "type": "module",
4
- "version": "4.0.0-9",
4
+ "version": "4.0.0",
5
5
  "main": "index.js",
6
6
  "module": "index.js",
7
7
  "repository": "https://github.com/superrbstudio/react-addons",
8
8
  "author": "@molovo",
9
9
  "license": "MIT",
10
10
  "dependencies": {
11
- "@hookform/resolvers": "^3.3.1",
12
- "change-case": "^5.0.0",
11
+ "@hookform/resolvers": "^3.10.0",
12
+ "change-case": "^5.4.4",
13
13
  "install-peers-cli": "^2.2.0",
14
14
  "js-cookie": "^3.0.5",
15
- "react-google-recaptcha-v3": "^1.10.1",
16
- "react-hook-form": "^7.46.1",
17
- "react-use-draggable-scroll": "^0.4.7",
18
- "simple-zustand-devtools": "^1.1.0"
15
+ "react-google-recaptcha-v3": "^1.11.0",
16
+ "react-hook-form": "^7.71.2",
17
+ "react-use-draggable-scroll": "^0.4.7"
19
18
  },
20
19
  "peerDependencies": {
21
20
  "csp-header": "^6.1.0",
22
21
  "react": "^19.1.0",
23
22
  "typescript": "^5.2.2",
23
+ "usehooks-ts": "^3.1.1",
24
24
  "yup": "^1.4.0",
25
- "zustand": "^4.4.7"
25
+ "zustand": "^5.0.5"
26
26
  },
27
27
  "scripts": {
28
28
  "build": "tsc",
@@ -31,24 +31,26 @@
31
31
  "dev": "watch 'yarn build' ./src"
32
32
  },
33
33
  "devDependencies": {
34
- "@types/js-cookie": "^3.0.3",
35
- "@types/node": "^20.5.7",
36
- "@types/react": "^19.1.0",
37
- "csp-header": "^6.1.0",
38
- "eslint": "^8.50.0",
39
- "eslint-config-next": "^13.5.3",
40
- "eslint-config-prettier": "^9.0.0",
41
- "eslint-plugin-jsx-a11y": "^6.7.1",
42
- "eslint-plugin-react": "^7.33.2",
43
- "eslint-plugin-react-hooks": "^4.6.0",
44
- "prettier": "^3.2.2",
45
- "react": "^19.1.0",
46
- "typescript": "^5.2.2",
47
- "typescript-eslint": "^0.0.1-alpha.0",
34
+ "@types/js-cookie": "^3.0.6",
35
+ "@types/node": "^24.11.0",
36
+ "@types/react": "^19.2.14",
37
+ "csp-header": "^6.3.0",
38
+ "eslint": "10.0.2",
39
+ "eslint-config-next": "^16.1.6",
40
+ "eslint-config-prettier": "^10.1.8",
41
+ "eslint-plugin-jsx-a11y": "^6.10.2",
42
+ "eslint-plugin-react": "^7.37.5",
43
+ "eslint-plugin-react-hooks": "^7.0.1",
44
+ "prettier": "^3.8.1",
45
+ "react": "^19.2.4",
46
+ "react-dom": "^19.2.4",
47
+ "typescript": "^5.9.3",
48
+ "typescript-eslint": "^8.56.1",
49
+ "usehooks-ts": "^3.1.1",
48
50
  "watch": "^1.0.2",
49
- "yup": "^1.4.0",
50
- "zustand": "^4.4.7"
51
+ "yup": "^1.7.1",
52
+ "zustand": "^5.0.11"
51
53
  },
52
- "packageManager": "yarn@4.9.1",
54
+ "packageManager": "yarn@4.12.0",
53
55
  "stableVersion": "3.0.0"
54
56
  }
@@ -1 +1 @@
1
- {"version":3,"file":"cookies.d.ts","sourceRoot":"","sources":["../src/store/cookies.ts"],"names":[],"mappings":"AAIA,MAAM,WAAW,WAAW;IAC1B,eAAe,EAAE,OAAO,CAAA;IACxB,uBAAuB,EAAE,OAAO,CAAA;IAChC,kBAAkB,EAAE,CAAC,QAAQ,EAAE,OAAO,KAAK,IAAI,CAAA;IAC/C,0BAA0B,EAAE,CAAC,QAAQ,EAAE,OAAO,KAAK,IAAI,CAAA;IACvD,SAAS,EAAE,OAAO,CAAA;IAClB,SAAS,EAAE,MAAM,IAAI,CAAA;IACrB,UAAU,EAAE,MAAM,IAAI,CAAA;CACvB;AAED,QAAA,MAAM,cAAc,0EAyBlB,CAAA;AAMF,eAAe,cAAc,CAAA"}
1
+ {"version":3,"file":"cookies.d.ts","sourceRoot":"","sources":["../src/store/cookies.ts"],"names":[],"mappings":"AAGA,MAAM,WAAW,WAAW;IAC1B,eAAe,EAAE,OAAO,CAAA;IACxB,uBAAuB,EAAE,OAAO,CAAA;IAChC,kBAAkB,EAAE,CAAC,QAAQ,EAAE,OAAO,KAAK,IAAI,CAAA;IAC/C,0BAA0B,EAAE,CAAC,QAAQ,EAAE,OAAO,KAAK,IAAI,CAAA;IACvD,SAAS,EAAE,OAAO,CAAA;IAClB,SAAS,EAAE,MAAM,IAAI,CAAA;IACrB,UAAU,EAAE,MAAM,IAAI,CAAA;CACvB;AAED,QAAA,MAAM,cAAc,0EAyBlB,CAAA;AAEF,eAAe,cAAc,CAAA"}
package/store/cookies.js CHANGED
@@ -1,5 +1,4 @@
1
1
  import { create } from 'zustand';
2
- import { mountStoreDevtool } from 'simple-zustand-devtools';
3
2
  import Cookies from 'js-cookie';
4
3
  const useCookieStore = create()((set) => {
5
4
  const cookiesAccepted = !!Cookies.get('accepted-cookies') || false;
@@ -26,7 +25,4 @@ const useCookieStore = create()((set) => {
26
25
  closePopup: () => set({ popupOpen: false }),
27
26
  };
28
27
  });
29
- if (process.env.NODE_ENV === 'development') {
30
- mountStoreDevtool('CookieStore', useCookieStore);
31
- }
32
28
  export default useCookieStore;
@@ -1 +1 @@
1
- {"version":3,"file":"modal.d.ts","sourceRoot":"","sources":["../src/store/modal.ts"],"names":[],"mappings":"AAGA,UAAU,UAAU;IAClB,SAAS,EAAE;QACT,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAA;KACvB,CAAA;IACD,MAAM,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,OAAO,CAAA;IACjC,SAAS,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,IAAI,CAAA;IACjC,UAAU,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,IAAI,CAAA;CACnC;AAED,QAAA,MAAM,aAAa,yEASjB,CAAA;AAMF,eAAe,aAAa,CAAA"}
1
+ {"version":3,"file":"modal.d.ts","sourceRoot":"","sources":["../src/store/modal.ts"],"names":[],"mappings":"AAGA,UAAU,UAAU;IAClB,SAAS,EAAE;QACT,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAA;KACvB,CAAA;IACD,MAAM,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,OAAO,CAAA;IACjC,SAAS,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,IAAI,CAAA;IACjC,UAAU,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,IAAI,CAAA;CACnC;AAED,QAAA,MAAM,aAAa,yEASjB,CAAA;AAEF,eAAe,aAAa,CAAA"}
package/store/modal.js CHANGED
@@ -1,5 +1,4 @@
1
1
  import { create } from 'zustand';
2
- import { mountStoreDevtool } from 'simple-zustand-devtools';
3
2
  const useModalStore = create()((set, get) => {
4
3
  return {
5
4
  openState: {},
@@ -8,7 +7,4 @@ const useModalStore = create()((set, get) => {
8
7
  closeModal: (name) => set((state) => ({ openState: { ...state.openState, [name]: false } })),
9
8
  };
10
9
  });
11
- if (process.env.NODE_ENV === 'development') {
12
- mountStoreDevtool('ModalStore', useModalStore);
13
- }
14
10
  export default useModalStore;
@@ -1 +1 @@
1
- {"version":3,"file":"nav.d.ts","sourceRoot":"","sources":["../src/store/nav.ts"],"names":[],"mappings":"AAGA,UAAU,QAAQ;IAChB,OAAO,EAAE,OAAO,CAAA;IAChB,SAAS,EAAE,MAAM,IAAI,CAAA;IACrB,OAAO,EAAE,MAAM,IAAI,CAAA;IACnB,QAAQ,EAAE,MAAM,IAAI,CAAA;CACrB;AAED,QAAA,MAAM,WAAW,uEAKd,CAAA;AAMH,eAAe,WAAW,CAAA"}
1
+ {"version":3,"file":"nav.d.ts","sourceRoot":"","sources":["../src/store/nav.ts"],"names":[],"mappings":"AAEA,UAAU,QAAQ;IAChB,OAAO,EAAE,OAAO,CAAA;IAChB,SAAS,EAAE,MAAM,IAAI,CAAA;IACrB,OAAO,EAAE,MAAM,IAAI,CAAA;IACnB,QAAQ,EAAE,MAAM,IAAI,CAAA;CACrB;AAED,QAAA,MAAM,WAAW,uEAKd,CAAA;AAEH,eAAe,WAAW,CAAA"}
package/store/nav.js CHANGED
@@ -1,12 +1,8 @@
1
1
  import { create } from 'zustand';
2
- import { mountStoreDevtool } from 'simple-zustand-devtools';
3
2
  const useNavStore = create()((set) => ({
4
3
  navOpen: false,
5
4
  toggleNav: () => set((state) => ({ navOpen: !state.navOpen })),
6
5
  openNav: () => set({ navOpen: true }),
7
6
  closeNav: () => set({ navOpen: false }),
8
7
  }));
9
- if (process.env.NODE_ENV === 'development') {
10
- mountStoreDevtool('NavStore', useNavStore);
11
- }
12
8
  export default useNavStore;