@number-flow/react 0.4.2 → 0.4.4

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/README.md CHANGED
@@ -1,15 +1,13 @@
1
1
  [![NumberFlow for React](https://number-flow.barvian.me/preview.webp)](https://number-flow.barvian.me)
2
2
 
3
- # Number Flow for React
3
+ # NumberFlow for React
4
4
 
5
- A React component to transition & format numbers.
5
+ An animated number component.
6
6
 
7
7
  [![NPM Version](https://img.shields.io/npm/v/@number-flow/react.svg)](https://npmjs.com/package/@number-flow/react)
8
8
  [![Bundle size](https://badgen.net/bundlephobia/minzip/@number-flow/react@latest)](https://bundlephobia.com/package/@number-flow/react@latest)
9
9
  [![Follow @mbarvian](https://img.shields.io/twitter/follow/mbarvian.svg?style=social&label=Follow)](https://x.com/mbarvian)
10
10
 
11
- ---
12
-
13
11
  ## Documentation
14
12
 
15
13
  For full documentation, visit [number-flow.barvian.me](https://number-flow.barvian.me).
package/dist/index.d.mts CHANGED
@@ -37,8 +37,10 @@ declare const NumberFlow: React.ForwardRefExoticComponent<React.HTMLAttributes<N
37
37
  declare function NumberFlowGroup({ children }: {
38
38
  children: React.ReactNode;
39
39
  }): React.JSX.Element;
40
+ declare const useIsSupported: () => boolean;
41
+ declare const usePrefersReducedMotion: () => boolean;
40
42
  declare function useCanAnimate({ respectMotionPreference }?: {
41
43
  respectMotionPreference?: boolean | undefined;
42
44
  }): boolean;
43
45
 
44
- export { NumberFlowElement, NumberFlowGroup, type NumberFlowProps, NumberFlow as default, useCanAnimate };
46
+ export { NumberFlowElement, NumberFlowGroup, type NumberFlowProps, NumberFlow as default, useCanAnimate, useIsSupported, usePrefersReducedMotion };
package/dist/index.d.ts CHANGED
@@ -37,8 +37,10 @@ declare const NumberFlow: React.ForwardRefExoticComponent<React.HTMLAttributes<N
37
37
  declare function NumberFlowGroup({ children }: {
38
38
  children: React.ReactNode;
39
39
  }): React.JSX.Element;
40
+ declare const useIsSupported: () => boolean;
41
+ declare const usePrefersReducedMotion: () => boolean;
40
42
  declare function useCanAnimate({ respectMotionPreference }?: {
41
43
  respectMotionPreference?: boolean | undefined;
42
44
  }): boolean;
43
45
 
44
- export { NumberFlowElement, NumberFlowGroup, type NumberFlowProps, NumberFlow as default, useCanAnimate };
46
+ export { NumberFlowElement, NumberFlowGroup, type NumberFlowProps, NumberFlow as default, useCanAnimate, useIsSupported, usePrefersReducedMotion };
package/dist/index.js CHANGED
@@ -34,7 +34,9 @@ __export(src_exports, {
34
34
  NumberFlowElement: () => NumberFlowElement,
35
35
  NumberFlowGroup: () => NumberFlowGroup,
36
36
  default: () => src_default,
37
- useCanAnimate: () => useCanAnimate
37
+ useCanAnimate: () => useCanAnimate,
38
+ useIsSupported: () => useIsSupported,
39
+ usePrefersReducedMotion: () => usePrefersReducedMotion
38
40
  });
39
41
  module.exports = __toCommonJS(src_exports);
40
42
  var React = __toESM(require("react"));
@@ -219,28 +221,31 @@ function NumberFlowGroup({ children }) {
219
221
  );
220
222
  return /* @__PURE__ */ React.createElement(NumberFlowGroupContext.Provider, { value }, children);
221
223
  }
224
+ var useIsSupported = () => React.useSyncExternalStore(
225
+ () => () => {
226
+ },
227
+ // this value doesn't change, but it's useful to specify a different SSR value:
228
+ () => import_number_flow.canAnimate,
229
+ () => false
230
+ );
231
+ var usePrefersReducedMotion = () => React.useSyncExternalStore(
232
+ (cb) => {
233
+ import_number_flow.prefersReducedMotion?.addEventListener("change", cb);
234
+ return () => import_number_flow.prefersReducedMotion?.removeEventListener("change", cb);
235
+ },
236
+ () => import_number_flow.prefersReducedMotion.matches,
237
+ () => false
238
+ );
222
239
  function useCanAnimate({ respectMotionPreference = true } = {}) {
223
- const [canAnimate, setCanAnimate] = React.useState(false);
224
- const [reducedMotion, setReducedMotion] = React.useState(false);
225
- React.useEffect(() => {
226
- setCanAnimate(import_number_flow.canAnimate);
227
- setReducedMotion(import_number_flow.prefersReducedMotion?.matches ?? false);
228
- }, []);
229
- React.useEffect(() => {
230
- if (!respectMotionPreference) return;
231
- const onChange = ({ matches }) => {
232
- setReducedMotion(matches);
233
- };
234
- import_number_flow.prefersReducedMotion?.addEventListener("change", onChange);
235
- return () => {
236
- import_number_flow.prefersReducedMotion?.removeEventListener("change", onChange);
237
- };
238
- }, [respectMotionPreference]);
239
- return canAnimate && (!respectMotionPreference || !reducedMotion);
240
+ const isSupported = useIsSupported();
241
+ const reducedMotion = usePrefersReducedMotion();
242
+ return isSupported && (!respectMotionPreference || !reducedMotion);
240
243
  }
241
244
  // Annotate the CommonJS export names for ESM import in node:
242
245
  0 && (module.exports = {
243
246
  NumberFlowElement,
244
247
  NumberFlowGroup,
245
- useCanAnimate
248
+ useCanAnimate,
249
+ useIsSupported,
250
+ usePrefersReducedMotion
246
251
  });
package/dist/index.mjs CHANGED
@@ -6,7 +6,7 @@ import {
6
6
  renderInnerHTML,
7
7
  formatToData,
8
8
  NumberFlowLite,
9
- prefersReducedMotion,
9
+ prefersReducedMotion as _prefersReducedMotion,
10
10
  canAnimate as _canAnimate,
11
11
  define
12
12
  } from "number-flow";
@@ -190,28 +190,31 @@ function NumberFlowGroup({ children }) {
190
190
  );
191
191
  return /* @__PURE__ */ React.createElement(NumberFlowGroupContext.Provider, { value }, children);
192
192
  }
193
+ var useIsSupported = () => React.useSyncExternalStore(
194
+ () => () => {
195
+ },
196
+ // this value doesn't change, but it's useful to specify a different SSR value:
197
+ () => _canAnimate,
198
+ () => false
199
+ );
200
+ var usePrefersReducedMotion = () => React.useSyncExternalStore(
201
+ (cb) => {
202
+ _prefersReducedMotion?.addEventListener("change", cb);
203
+ return () => _prefersReducedMotion?.removeEventListener("change", cb);
204
+ },
205
+ () => _prefersReducedMotion.matches,
206
+ () => false
207
+ );
193
208
  function useCanAnimate({ respectMotionPreference = true } = {}) {
194
- const [canAnimate, setCanAnimate] = React.useState(false);
195
- const [reducedMotion, setReducedMotion] = React.useState(false);
196
- React.useEffect(() => {
197
- setCanAnimate(_canAnimate);
198
- setReducedMotion(prefersReducedMotion?.matches ?? false);
199
- }, []);
200
- React.useEffect(() => {
201
- if (!respectMotionPreference) return;
202
- const onChange = ({ matches }) => {
203
- setReducedMotion(matches);
204
- };
205
- prefersReducedMotion?.addEventListener("change", onChange);
206
- return () => {
207
- prefersReducedMotion?.removeEventListener("change", onChange);
208
- };
209
- }, [respectMotionPreference]);
210
- return canAnimate && (!respectMotionPreference || !reducedMotion);
209
+ const isSupported = useIsSupported();
210
+ const reducedMotion = usePrefersReducedMotion();
211
+ return isSupported && (!respectMotionPreference || !reducedMotion);
211
212
  }
212
213
  export {
213
214
  NumberFlowElement,
214
215
  NumberFlowGroup,
215
216
  src_default as default,
216
- useCanAnimate
217
+ useCanAnimate,
218
+ useIsSupported,
219
+ usePrefersReducedMotion
217
220
  };
package/package.json CHANGED
@@ -3,7 +3,7 @@
3
3
  "publishConfig": {
4
4
  "access": "public"
5
5
  },
6
- "version": "0.4.2",
6
+ "version": "0.4.4",
7
7
  "author": {
8
8
  "name": "Maxwell Barvian",
9
9
  "email": "max@barvian.me",
@@ -49,7 +49,7 @@
49
49
  },
50
50
  "dependencies": {
51
51
  "esm-env": "^1.1.4",
52
- "number-flow": "0.4.1"
52
+ "number-flow": "0.4.2"
53
53
  },
54
54
  "devDependencies": {
55
55
  "@playwright/test": "^1.48.0",
@@ -61,8 +61,8 @@
61
61
  "tsup": "^8.2.4"
62
62
  },
63
63
  "peerDependencies": {
64
- "react": "^18 || ^19.0.0-rc-915b914b3a-20240515",
65
- "react-dom": "^18"
64
+ "react": "^18 || ^19",
65
+ "react-dom": "^18 || ^19"
66
66
  },
67
67
  "scripts": {
68
68
  "build": "tsup --tsconfig tsconfig.build.json",