@peculiar/react-components 1.8.2 → 1.8.3

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.
@@ -3,7 +3,8 @@ var __importDefault = (this && this.__importDefault) || function (mod) {
3
3
  return (mod && mod.__esModule) ? mod : { "default": mod };
4
4
  };
5
5
  Object.defineProperty(exports, "__esModule", { value: true });
6
- exports.useEnhancedEffect = void 0;
6
+ exports.useEnhancedEffect = exports.IS_SERVER = void 0;
7
7
  var react_1 = __importDefault(require("react"));
8
- exports.useEnhancedEffect = typeof window !== 'undefined' ? react_1.default.useLayoutEffect : react_1.default.useEffect;
8
+ exports.IS_SERVER = typeof window === 'undefined';
9
+ exports.useEnhancedEffect = exports.IS_SERVER ? react_1.default.useEffect : react_1.default.useLayoutEffect;
9
10
  //# sourceMappingURL=use_enhanced_effect.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"use_enhanced_effect.js","sourceRoot":"","sources":["../../../src/hooks/use_enhanced_effect.ts"],"names":[],"mappings":";;;;;;AAAA,gDAA0B;AAEb,QAAA,iBAAiB,GAAG,OAAO,MAAM,KAAK,WAAW,CAAC,CAAC,CAAC,eAAK,CAAC,eAAe,CAAC,CAAC,CAAC,eAAK,CAAC,SAAS,CAAC"}
1
+ {"version":3,"file":"use_enhanced_effect.js","sourceRoot":"","sources":["../../../src/hooks/use_enhanced_effect.ts"],"names":[],"mappings":";;;;;;AAAA,gDAA0B;AAEb,QAAA,SAAS,GAAG,OAAO,MAAM,KAAK,WAAW,CAAC;AAE1C,QAAA,iBAAiB,GAAG,iBAAS,CAAC,CAAC,CAAC,eAAK,CAAC,SAAS,CAAC,CAAC,CAAC,eAAK,CAAC,eAAe,CAAC"}
@@ -12,21 +12,30 @@ var use_enhanced_effect_1 = require("./use_enhanced_effect");
12
12
  *
13
13
  * @param query The media query you want to match against e.g. `"only screen and (min-width: 12em)"`
14
14
  */
15
- function useMediaQuery(query) {
16
- var _a = react_1.default.useState(false), matches = _a[0], setMatches = _a[1];
17
- (0, use_enhanced_effect_1.useEnhancedEffect)(function () {
18
- var media = window.matchMedia(query);
19
- if (media.matches !== matches) {
20
- setMatches(media.matches);
15
+ function useMediaQuery(query, defaultValue) {
16
+ if (defaultValue === void 0) { defaultValue = false; }
17
+ var _a = react_1.default.useState(function () {
18
+ // Prevent a React hydration mismatch when a default value is provided
19
+ // by not defaulting to window.matchMedia(query).matches.
20
+ if (defaultValue !== undefined) {
21
+ return defaultValue;
22
+ }
23
+ if (use_enhanced_effect_1.IS_SERVER) {
24
+ return false;
21
25
  }
22
- var listener = function () {
23
- setMatches(media.matches);
26
+ return window.matchMedia(query).matches;
27
+ }), matches = _a[0], setMatches = _a[1];
28
+ (0, use_enhanced_effect_1.useEnhancedEffect)(function () {
29
+ var matchMedia = window.matchMedia(query);
30
+ var onChange = function () {
31
+ setMatches(matchMedia.matches);
24
32
  };
25
- media.addListener(listener);
33
+ onChange();
34
+ matchMedia.addListener(onChange);
26
35
  return function () {
27
- media.removeListener(listener);
36
+ matchMedia.removeListener(onChange);
28
37
  };
29
- }, [matches, query]);
38
+ }, [query]);
30
39
  return matches;
31
40
  }
32
41
  //# sourceMappingURL=use_media_query.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"use_media_query.js","sourceRoot":"","sources":["../../../src/hooks/use_media_query.ts"],"names":[],"mappings":";;;;;AASA,sCAsBC;AA/BD,gDAA0B;AAC1B,6DAA0D;AAE1D;;;;;GAKG;AACH,SAAgB,aAAa,CAAC,KAAa;IACnC,IAAA,KAAwB,eAAK,CAAC,QAAQ,CAAC,KAAK,CAAC,EAA5C,OAAO,QAAA,EAAE,UAAU,QAAyB,CAAC;IAEpD,IAAA,uCAAiB,EAAC;QAChB,IAAM,KAAK,GAAG,MAAM,CAAC,UAAU,CAAC,KAAK,CAAC,CAAC;QAEvC,IAAI,KAAK,CAAC,OAAO,KAAK,OAAO,EAAE,CAAC;YAC9B,UAAU,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC;QAC5B,CAAC;QAED,IAAM,QAAQ,GAAG;YACf,UAAU,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC;QAC5B,CAAC,CAAC;QAEF,KAAK,CAAC,WAAW,CAAC,QAAQ,CAAC,CAAC;QAE5B,OAAO;YACL,KAAK,CAAC,cAAc,CAAC,QAAQ,CAAC,CAAC;QACjC,CAAC,CAAC;IACJ,CAAC,EAAE,CAAC,OAAO,EAAE,KAAK,CAAC,CAAC,CAAC;IAErB,OAAO,OAAO,CAAC;AACjB,CAAC"}
1
+ {"version":3,"file":"use_media_query.js","sourceRoot":"","sources":["../../../src/hooks/use_media_query.ts"],"names":[],"mappings":";;;;;AASA,sCA+BC;AAxCD,gDAA0B;AAC1B,6DAAqE;AAErE;;;;;GAKG;AACH,SAAgB,aAAa,CAAC,KAAa,EAAE,YAAoB;IAApB,6BAAA,EAAA,oBAAoB;IACzD,IAAA,KAAwB,eAAK,CAAC,QAAQ,CAAC;QAC3C,sEAAsE;QACtE,yDAAyD;QACzD,IAAI,YAAY,KAAK,SAAS,EAAE,CAAC;YAC/B,OAAO,YAAY,CAAC;QACtB,CAAC;QAED,IAAI,+BAAS,EAAE,CAAC;YACd,OAAO,KAAK,CAAC;QACf,CAAC;QAED,OAAO,MAAM,CAAC,UAAU,CAAC,KAAK,CAAC,CAAC,OAAO,CAAC;IAC1C,CAAC,CAAC,EAZK,OAAO,QAAA,EAAE,UAAU,QAYxB,CAAC;IAEH,IAAA,uCAAiB,EAAC;QAChB,IAAM,UAAU,GAAG,MAAM,CAAC,UAAU,CAAC,KAAK,CAAC,CAAC;QAE5C,IAAM,QAAQ,GAAG;YACf,UAAU,CAAC,UAAU,CAAC,OAAO,CAAC,CAAC;QACjC,CAAC,CAAC;QAEF,QAAQ,EAAE,CAAC;QACX,UAAU,CAAC,WAAW,CAAC,QAAQ,CAAC,CAAC;QAEjC,OAAO;YACL,UAAU,CAAC,cAAc,CAAC,QAAQ,CAAC,CAAC;QACtC,CAAC,CAAC;IACJ,CAAC,EAAE,CAAC,KAAK,CAAC,CAAC,CAAC;IAEZ,OAAO,OAAO,CAAC;AACjB,CAAC"}
@@ -1,3 +1,4 @@
1
1
  import React from 'react';
2
- export var useEnhancedEffect = typeof window !== 'undefined' ? React.useLayoutEffect : React.useEffect;
2
+ export var IS_SERVER = typeof window === 'undefined';
3
+ export var useEnhancedEffect = IS_SERVER ? React.useEffect : React.useLayoutEffect;
3
4
  //# sourceMappingURL=use_enhanced_effect.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"use_enhanced_effect.js","sourceRoot":"","sources":["../../../src/hooks/use_enhanced_effect.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,OAAO,CAAC;AAE1B,MAAM,CAAC,IAAM,iBAAiB,GAAG,OAAO,MAAM,KAAK,WAAW,CAAC,CAAC,CAAC,KAAK,CAAC,eAAe,CAAC,CAAC,CAAC,KAAK,CAAC,SAAS,CAAC"}
1
+ {"version":3,"file":"use_enhanced_effect.js","sourceRoot":"","sources":["../../../src/hooks/use_enhanced_effect.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,OAAO,CAAC;AAE1B,MAAM,CAAC,IAAM,SAAS,GAAG,OAAO,MAAM,KAAK,WAAW,CAAC;AAEvD,MAAM,CAAC,IAAM,iBAAiB,GAAG,SAAS,CAAC,CAAC,CAAC,KAAK,CAAC,SAAS,CAAC,CAAC,CAAC,KAAK,CAAC,eAAe,CAAC"}
@@ -1,26 +1,35 @@
1
1
  import React from 'react';
2
- import { useEnhancedEffect } from './use_enhanced_effect';
2
+ import { IS_SERVER, useEnhancedEffect } from './use_enhanced_effect';
3
3
  /**
4
4
  * A hook that returns `true` if the media query matched and `false` if not. This
5
5
  * hook will always return `false` when rendering on the server.
6
6
  *
7
7
  * @param query The media query you want to match against e.g. `"only screen and (min-width: 12em)"`
8
8
  */
9
- export function useMediaQuery(query) {
10
- var _a = React.useState(false), matches = _a[0], setMatches = _a[1];
11
- useEnhancedEffect(function () {
12
- var media = window.matchMedia(query);
13
- if (media.matches !== matches) {
14
- setMatches(media.matches);
9
+ export function useMediaQuery(query, defaultValue) {
10
+ if (defaultValue === void 0) { defaultValue = false; }
11
+ var _a = React.useState(function () {
12
+ // Prevent a React hydration mismatch when a default value is provided
13
+ // by not defaulting to window.matchMedia(query).matches.
14
+ if (defaultValue !== undefined) {
15
+ return defaultValue;
16
+ }
17
+ if (IS_SERVER) {
18
+ return false;
15
19
  }
16
- var listener = function () {
17
- setMatches(media.matches);
20
+ return window.matchMedia(query).matches;
21
+ }), matches = _a[0], setMatches = _a[1];
22
+ useEnhancedEffect(function () {
23
+ var matchMedia = window.matchMedia(query);
24
+ var onChange = function () {
25
+ setMatches(matchMedia.matches);
18
26
  };
19
- media.addListener(listener);
27
+ onChange();
28
+ matchMedia.addListener(onChange);
20
29
  return function () {
21
- media.removeListener(listener);
30
+ matchMedia.removeListener(onChange);
22
31
  };
23
- }, [matches, query]);
32
+ }, [query]);
24
33
  return matches;
25
34
  }
26
35
  //# sourceMappingURL=use_media_query.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"use_media_query.js","sourceRoot":"","sources":["../../../src/hooks/use_media_query.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,OAAO,CAAC;AAC1B,OAAO,EAAE,iBAAiB,EAAE,MAAM,uBAAuB,CAAC;AAE1D;;;;;GAKG;AACH,MAAM,UAAU,aAAa,CAAC,KAAa;IACnC,IAAA,KAAwB,KAAK,CAAC,QAAQ,CAAC,KAAK,CAAC,EAA5C,OAAO,QAAA,EAAE,UAAU,QAAyB,CAAC;IAEpD,iBAAiB,CAAC;QAChB,IAAM,KAAK,GAAG,MAAM,CAAC,UAAU,CAAC,KAAK,CAAC,CAAC;QAEvC,IAAI,KAAK,CAAC,OAAO,KAAK,OAAO,EAAE,CAAC;YAC9B,UAAU,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC;QAC5B,CAAC;QAED,IAAM,QAAQ,GAAG;YACf,UAAU,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC;QAC5B,CAAC,CAAC;QAEF,KAAK,CAAC,WAAW,CAAC,QAAQ,CAAC,CAAC;QAE5B,OAAO;YACL,KAAK,CAAC,cAAc,CAAC,QAAQ,CAAC,CAAC;QACjC,CAAC,CAAC;IACJ,CAAC,EAAE,CAAC,OAAO,EAAE,KAAK,CAAC,CAAC,CAAC;IAErB,OAAO,OAAO,CAAC;AACjB,CAAC"}
1
+ {"version":3,"file":"use_media_query.js","sourceRoot":"","sources":["../../../src/hooks/use_media_query.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,OAAO,CAAC;AAC1B,OAAO,EAAE,SAAS,EAAE,iBAAiB,EAAE,MAAM,uBAAuB,CAAC;AAErE;;;;;GAKG;AACH,MAAM,UAAU,aAAa,CAAC,KAAa,EAAE,YAAoB;IAApB,6BAAA,EAAA,oBAAoB;IACzD,IAAA,KAAwB,KAAK,CAAC,QAAQ,CAAC;QAC3C,sEAAsE;QACtE,yDAAyD;QACzD,IAAI,YAAY,KAAK,SAAS,EAAE,CAAC;YAC/B,OAAO,YAAY,CAAC;QACtB,CAAC;QAED,IAAI,SAAS,EAAE,CAAC;YACd,OAAO,KAAK,CAAC;QACf,CAAC;QAED,OAAO,MAAM,CAAC,UAAU,CAAC,KAAK,CAAC,CAAC,OAAO,CAAC;IAC1C,CAAC,CAAC,EAZK,OAAO,QAAA,EAAE,UAAU,QAYxB,CAAC;IAEH,iBAAiB,CAAC;QAChB,IAAM,UAAU,GAAG,MAAM,CAAC,UAAU,CAAC,KAAK,CAAC,CAAC;QAE5C,IAAM,QAAQ,GAAG;YACf,UAAU,CAAC,UAAU,CAAC,OAAO,CAAC,CAAC;QACjC,CAAC,CAAC;QAEF,QAAQ,EAAE,CAAC;QACX,UAAU,CAAC,WAAW,CAAC,QAAQ,CAAC,CAAC;QAEjC,OAAO;YACL,UAAU,CAAC,cAAc,CAAC,QAAQ,CAAC,CAAC;QACtC,CAAC,CAAC;IACJ,CAAC,EAAE,CAAC,KAAK,CAAC,CAAC,CAAC;IAEZ,OAAO,OAAO,CAAC;AACjB,CAAC"}
@@ -1,3 +1,4 @@
1
1
  import React from 'react';
2
- export const useEnhancedEffect = typeof window !== 'undefined' ? React.useLayoutEffect : React.useEffect;
2
+ export const IS_SERVER = typeof window === 'undefined';
3
+ export const useEnhancedEffect = IS_SERVER ? React.useEffect : React.useLayoutEffect;
3
4
  //# sourceMappingURL=use_enhanced_effect.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"use_enhanced_effect.js","sourceRoot":"","sources":["../../../src/hooks/use_enhanced_effect.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,OAAO,CAAC;AAE1B,MAAM,CAAC,MAAM,iBAAiB,GAAG,OAAO,MAAM,KAAK,WAAW,CAAC,CAAC,CAAC,KAAK,CAAC,eAAe,CAAC,CAAC,CAAC,KAAK,CAAC,SAAS,CAAC"}
1
+ {"version":3,"file":"use_enhanced_effect.js","sourceRoot":"","sources":["../../../src/hooks/use_enhanced_effect.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,OAAO,CAAC;AAE1B,MAAM,CAAC,MAAM,SAAS,GAAG,OAAO,MAAM,KAAK,WAAW,CAAC;AAEvD,MAAM,CAAC,MAAM,iBAAiB,GAAG,SAAS,CAAC,CAAC,CAAC,KAAK,CAAC,SAAS,CAAC,CAAC,CAAC,KAAK,CAAC,eAAe,CAAC"}
@@ -1,26 +1,34 @@
1
1
  import React from 'react';
2
- import { useEnhancedEffect } from './use_enhanced_effect';
2
+ import { IS_SERVER, useEnhancedEffect } from './use_enhanced_effect';
3
3
  /**
4
4
  * A hook that returns `true` if the media query matched and `false` if not. This
5
5
  * hook will always return `false` when rendering on the server.
6
6
  *
7
7
  * @param query The media query you want to match against e.g. `"only screen and (min-width: 12em)"`
8
8
  */
9
- export function useMediaQuery(query) {
10
- const [matches, setMatches] = React.useState(false);
11
- useEnhancedEffect(() => {
12
- const media = window.matchMedia(query);
13
- if (media.matches !== matches) {
14
- setMatches(media.matches);
9
+ export function useMediaQuery(query, defaultValue = false) {
10
+ const [matches, setMatches] = React.useState(() => {
11
+ // Prevent a React hydration mismatch when a default value is provided
12
+ // by not defaulting to window.matchMedia(query).matches.
13
+ if (defaultValue !== undefined) {
14
+ return defaultValue;
15
+ }
16
+ if (IS_SERVER) {
17
+ return false;
15
18
  }
16
- const listener = () => {
17
- setMatches(media.matches);
19
+ return window.matchMedia(query).matches;
20
+ });
21
+ useEnhancedEffect(() => {
22
+ const matchMedia = window.matchMedia(query);
23
+ const onChange = () => {
24
+ setMatches(matchMedia.matches);
18
25
  };
19
- media.addListener(listener);
26
+ onChange();
27
+ matchMedia.addListener(onChange);
20
28
  return () => {
21
- media.removeListener(listener);
29
+ matchMedia.removeListener(onChange);
22
30
  };
23
- }, [matches, query]);
31
+ }, [query]);
24
32
  return matches;
25
33
  }
26
34
  //# sourceMappingURL=use_media_query.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"use_media_query.js","sourceRoot":"","sources":["../../../src/hooks/use_media_query.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,OAAO,CAAC;AAC1B,OAAO,EAAE,iBAAiB,EAAE,MAAM,uBAAuB,CAAC;AAE1D;;;;;GAKG;AACH,MAAM,UAAU,aAAa,CAAC,KAAa;IACzC,MAAM,CAAC,OAAO,EAAE,UAAU,CAAC,GAAG,KAAK,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC;IAEpD,iBAAiB,CAAC,GAAG,EAAE;QACrB,MAAM,KAAK,GAAG,MAAM,CAAC,UAAU,CAAC,KAAK,CAAC,CAAC;QAEvC,IAAI,KAAK,CAAC,OAAO,KAAK,OAAO,EAAE,CAAC;YAC9B,UAAU,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC;QAC5B,CAAC;QAED,MAAM,QAAQ,GAAG,GAAG,EAAE;YACpB,UAAU,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC;QAC5B,CAAC,CAAC;QAEF,KAAK,CAAC,WAAW,CAAC,QAAQ,CAAC,CAAC;QAE5B,OAAO,GAAG,EAAE;YACV,KAAK,CAAC,cAAc,CAAC,QAAQ,CAAC,CAAC;QACjC,CAAC,CAAC;IACJ,CAAC,EAAE,CAAC,OAAO,EAAE,KAAK,CAAC,CAAC,CAAC;IAErB,OAAO,OAAO,CAAC;AACjB,CAAC"}
1
+ {"version":3,"file":"use_media_query.js","sourceRoot":"","sources":["../../../src/hooks/use_media_query.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,OAAO,CAAC;AAC1B,OAAO,EAAE,SAAS,EAAE,iBAAiB,EAAE,MAAM,uBAAuB,CAAC;AAErE;;;;;GAKG;AACH,MAAM,UAAU,aAAa,CAAC,KAAa,EAAE,YAAY,GAAG,KAAK;IAC/D,MAAM,CAAC,OAAO,EAAE,UAAU,CAAC,GAAG,KAAK,CAAC,QAAQ,CAAC,GAAG,EAAE;QAChD,sEAAsE;QACtE,yDAAyD;QACzD,IAAI,YAAY,KAAK,SAAS,EAAE,CAAC;YAC/B,OAAO,YAAY,CAAC;QACtB,CAAC;QAED,IAAI,SAAS,EAAE,CAAC;YACd,OAAO,KAAK,CAAC;QACf,CAAC;QAED,OAAO,MAAM,CAAC,UAAU,CAAC,KAAK,CAAC,CAAC,OAAO,CAAC;IAC1C,CAAC,CAAC,CAAC;IAEH,iBAAiB,CAAC,GAAG,EAAE;QACrB,MAAM,UAAU,GAAG,MAAM,CAAC,UAAU,CAAC,KAAK,CAAC,CAAC;QAE5C,MAAM,QAAQ,GAAG,GAAG,EAAE;YACpB,UAAU,CAAC,UAAU,CAAC,OAAO,CAAC,CAAC;QACjC,CAAC,CAAC;QAEF,QAAQ,EAAE,CAAC;QACX,UAAU,CAAC,WAAW,CAAC,QAAQ,CAAC,CAAC;QAEjC,OAAO,GAAG,EAAE;YACV,UAAU,CAAC,cAAc,CAAC,QAAQ,CAAC,CAAC;QACtC,CAAC,CAAC;IACJ,CAAC,EAAE,CAAC,KAAK,CAAC,CAAC,CAAC;IAEZ,OAAO,OAAO,CAAC;AACjB,CAAC"}
@@ -1,2 +1,3 @@
1
1
  import React from 'react';
2
- export declare const useEnhancedEffect: typeof React.useLayoutEffect;
2
+ export declare const IS_SERVER: boolean;
3
+ export declare const useEnhancedEffect: typeof React.useEffect;
@@ -4,4 +4,4 @@
4
4
  *
5
5
  * @param query The media query you want to match against e.g. `"only screen and (min-width: 12em)"`
6
6
  */
7
- export declare function useMediaQuery(query: string): boolean;
7
+ export declare function useMediaQuery(query: string, defaultValue?: boolean): boolean;
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "@peculiar/react-components",
3
3
  "private": false,
4
- "version": "1.8.2",
4
+ "version": "1.8.3",
5
5
  "author": "PeculiarVentures Team",
6
6
  "description": "A simple and customizable component library to build faster, beautiful, and more accessible React applications.",
7
7
  "keywords": [
@@ -79,5 +79,5 @@
79
79
  "node": ">=18.x"
80
80
  },
81
81
  "license": "MIT",
82
- "gitHead": "921155ef94b2d0151d67b36e1e4cea6ef4397d35"
82
+ "gitHead": "93c1a2219bb2de67609606f0bbb8c36cf9c1043b"
83
83
  }