@number-flow/react 0.4.3 → 0.5.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.
package/dist/index.d.mts CHANGED
@@ -1,6 +1,7 @@
1
1
  import * as React from 'react';
2
2
  import { NumberFlowLite, Value, Format, Props } from 'number-flow';
3
3
  export { Format, NumberPartType, Trend, Value } from 'number-flow';
4
+ export * from 'number-flow/plugins';
4
5
 
5
6
  declare const OBSERVED_ATTRIBUTES: readonly ["data", "digits"];
6
7
  type ObservedAttribute = (typeof OBSERVED_ATTRIBUTES)[number];
@@ -37,8 +38,10 @@ declare const NumberFlow: React.ForwardRefExoticComponent<React.HTMLAttributes<N
37
38
  declare function NumberFlowGroup({ children }: {
38
39
  children: React.ReactNode;
39
40
  }): React.JSX.Element;
41
+ declare const useIsSupported: () => boolean;
42
+ declare const usePrefersReducedMotion: () => boolean;
40
43
  declare function useCanAnimate({ respectMotionPreference }?: {
41
44
  respectMotionPreference?: boolean | undefined;
42
45
  }): boolean;
43
46
 
44
- export { NumberFlowElement, NumberFlowGroup, type NumberFlowProps, NumberFlow as default, useCanAnimate };
47
+ export { NumberFlowElement, NumberFlowGroup, type NumberFlowProps, NumberFlow as default, useCanAnimate, useIsSupported, usePrefersReducedMotion };
package/dist/index.d.ts CHANGED
@@ -1,6 +1,7 @@
1
1
  import * as React from 'react';
2
2
  import { NumberFlowLite, Value, Format, Props } from 'number-flow';
3
3
  export { Format, NumberPartType, Trend, Value } from 'number-flow';
4
+ export * from 'number-flow/plugins';
4
5
 
5
6
  declare const OBSERVED_ATTRIBUTES: readonly ["data", "digits"];
6
7
  type ObservedAttribute = (typeof OBSERVED_ATTRIBUTES)[number];
@@ -37,8 +38,10 @@ declare const NumberFlow: React.ForwardRefExoticComponent<React.HTMLAttributes<N
37
38
  declare function NumberFlowGroup({ children }: {
38
39
  children: React.ReactNode;
39
40
  }): React.JSX.Element;
41
+ declare const useIsSupported: () => boolean;
42
+ declare const usePrefersReducedMotion: () => boolean;
40
43
  declare function useCanAnimate({ respectMotionPreference }?: {
41
44
  respectMotionPreference?: boolean | undefined;
42
45
  }): boolean;
43
46
 
44
- export { NumberFlowElement, NumberFlowGroup, type NumberFlowProps, NumberFlow as default, useCanAnimate };
47
+ export { NumberFlowElement, NumberFlowGroup, type NumberFlowProps, NumberFlow as default, useCanAnimate, useIsSupported, usePrefersReducedMotion };
package/dist/index.js CHANGED
@@ -18,6 +18,7 @@ var __copyProps = (to, from, except, desc) => {
18
18
  }
19
19
  return to;
20
20
  };
21
+ var __reExport = (target, mod, secondTarget) => (__copyProps(target, mod, "default"), secondTarget && __copyProps(secondTarget, mod, "default"));
21
22
  var __toESM = (mod, isNodeMode, target) => (target = mod != null ? __create(__getProtoOf(mod)) : {}, __copyProps(
22
23
  // If the importer is in node compatibility mode or this is not an ESM
23
24
  // file that has been converted to a CommonJS file using a Babel-
@@ -34,12 +35,15 @@ __export(src_exports, {
34
35
  NumberFlowElement: () => NumberFlowElement,
35
36
  NumberFlowGroup: () => NumberFlowGroup,
36
37
  default: () => src_default,
37
- useCanAnimate: () => useCanAnimate
38
+ useCanAnimate: () => useCanAnimate,
39
+ useIsSupported: () => useIsSupported,
40
+ usePrefersReducedMotion: () => usePrefersReducedMotion
38
41
  });
39
42
  module.exports = __toCommonJS(src_exports);
40
43
  var React = __toESM(require("react"));
41
44
  var import_number_flow = require("number-flow");
42
45
  var import_esm_env = require("esm-env");
46
+ __reExport(src_exports, require("number-flow/plugins"), module.exports);
43
47
  var REACT_MAJOR = parseInt(React.version.match(/^(\d+)\./)?.[1]);
44
48
  var isReact19 = REACT_MAJOR >= 19;
45
49
  var OBSERVED_ATTRIBUTES = ["data", "digits"];
@@ -60,7 +64,7 @@ function splitProps(props) {
60
64
  animated,
61
65
  respectMotionPreference,
62
66
  trend,
63
- continuous,
67
+ plugins,
64
68
  ...rest
65
69
  } = props;
66
70
  return [
@@ -71,7 +75,7 @@ function splitProps(props) {
71
75
  animated,
72
76
  respectMotionPreference,
73
77
  trend,
74
- continuous
78
+ plugins
75
79
  },
76
80
  rest
77
81
  ];
@@ -219,28 +223,32 @@ function NumberFlowGroup({ children }) {
219
223
  );
220
224
  return /* @__PURE__ */ React.createElement(NumberFlowGroupContext.Provider, { value }, children);
221
225
  }
226
+ var useIsSupported = () => React.useSyncExternalStore(
227
+ () => () => {
228
+ },
229
+ // this value doesn't change, but it's useful to specify a different SSR value:
230
+ () => import_number_flow.canAnimate,
231
+ () => false
232
+ );
233
+ var usePrefersReducedMotion = () => React.useSyncExternalStore(
234
+ (cb) => {
235
+ import_number_flow.prefersReducedMotion?.addEventListener("change", cb);
236
+ return () => import_number_flow.prefersReducedMotion?.removeEventListener("change", cb);
237
+ },
238
+ () => import_number_flow.prefersReducedMotion.matches,
239
+ () => false
240
+ );
222
241
  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);
242
+ const isSupported = useIsSupported();
243
+ const reducedMotion = usePrefersReducedMotion();
244
+ return isSupported && (!respectMotionPreference || !reducedMotion);
240
245
  }
241
246
  // Annotate the CommonJS export names for ESM import in node:
242
247
  0 && (module.exports = {
243
248
  NumberFlowElement,
244
249
  NumberFlowGroup,
245
- useCanAnimate
250
+ useCanAnimate,
251
+ useIsSupported,
252
+ usePrefersReducedMotion,
253
+ ...require("number-flow/plugins")
246
254
  });
package/dist/index.mjs CHANGED
@@ -6,11 +6,12 @@ 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";
13
13
  import { BROWSER } from "esm-env";
14
+ export * from "number-flow/plugins";
14
15
  var REACT_MAJOR = parseInt(React.version.match(/^(\d+)\./)?.[1]);
15
16
  var isReact19 = REACT_MAJOR >= 19;
16
17
  var OBSERVED_ATTRIBUTES = ["data", "digits"];
@@ -31,7 +32,7 @@ function splitProps(props) {
31
32
  animated,
32
33
  respectMotionPreference,
33
34
  trend,
34
- continuous,
35
+ plugins,
35
36
  ...rest
36
37
  } = props;
37
38
  return [
@@ -42,7 +43,7 @@ function splitProps(props) {
42
43
  animated,
43
44
  respectMotionPreference,
44
45
  trend,
45
- continuous
46
+ plugins
46
47
  },
47
48
  rest
48
49
  ];
@@ -190,28 +191,31 @@ function NumberFlowGroup({ children }) {
190
191
  );
191
192
  return /* @__PURE__ */ React.createElement(NumberFlowGroupContext.Provider, { value }, children);
192
193
  }
194
+ var useIsSupported = () => React.useSyncExternalStore(
195
+ () => () => {
196
+ },
197
+ // this value doesn't change, but it's useful to specify a different SSR value:
198
+ () => _canAnimate,
199
+ () => false
200
+ );
201
+ var usePrefersReducedMotion = () => React.useSyncExternalStore(
202
+ (cb) => {
203
+ _prefersReducedMotion?.addEventListener("change", cb);
204
+ return () => _prefersReducedMotion?.removeEventListener("change", cb);
205
+ },
206
+ () => _prefersReducedMotion.matches,
207
+ () => false
208
+ );
193
209
  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);
210
+ const isSupported = useIsSupported();
211
+ const reducedMotion = usePrefersReducedMotion();
212
+ return isSupported && (!respectMotionPreference || !reducedMotion);
211
213
  }
212
214
  export {
213
215
  NumberFlowElement,
214
216
  NumberFlowGroup,
215
217
  src_default as default,
216
- useCanAnimate
218
+ useCanAnimate,
219
+ useIsSupported,
220
+ usePrefersReducedMotion
217
221
  };
package/package.json CHANGED
@@ -3,7 +3,7 @@
3
3
  "publishConfig": {
4
4
  "access": "public"
5
5
  },
6
- "version": "0.4.3",
6
+ "version": "0.5.0",
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.5.0"
53
53
  },
54
54
  "devDependencies": {
55
55
  "@playwright/test": "^1.48.0",