@os-design/use-resize-observer 1.0.20 → 1.0.22
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/cjs/index.js +2 -3
- package/dist/cjs/index.js.map +1 -1
- package/dist/esm/index.js.map +1 -1
- package/package.json +4 -4
- package/src/index.mdx +75 -0
package/dist/cjs/index.js
CHANGED
|
@@ -8,7 +8,7 @@ var _useBrowserLayoutEffect = _interopRequireDefault(require("@os-design/use-bro
|
|
|
8
8
|
var _react = require("react");
|
|
9
9
|
var _resizeObserverPolyfill = _interopRequireDefault(require("resize-observer-polyfill"));
|
|
10
10
|
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { "default": obj }; }
|
|
11
|
-
function _typeof(
|
|
11
|
+
function _typeof(o) { "@babel/helpers - typeof"; return _typeof = "function" == typeof Symbol && "symbol" == typeof Symbol.iterator ? function (o) { return typeof o; } : function (o) { return o && "function" == typeof Symbol && o.constructor === Symbol && o !== Symbol.prototype ? "symbol" : typeof o; }, _typeof(o); }
|
|
12
12
|
var useResizeObserver = function useResizeObserver(target, listener) {
|
|
13
13
|
var listenerRef = (0, _react.useRef)();
|
|
14
14
|
(0, _react.useEffect)(function () {
|
|
@@ -33,6 +33,5 @@ var useResizeObserver = function useResizeObserver(target, listener) {
|
|
|
33
33
|
};
|
|
34
34
|
}, [target]);
|
|
35
35
|
};
|
|
36
|
-
var _default = useResizeObserver;
|
|
37
|
-
exports["default"] = _default;
|
|
36
|
+
var _default = exports["default"] = useResizeObserver;
|
|
38
37
|
//# sourceMappingURL=index.js.map
|
package/dist/cjs/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","names":["_useBrowserLayoutEffect","_interopRequireDefault","require","_react","_resizeObserverPolyfill","obj","__esModule","_typeof","Symbol","iterator","constructor","prototype","useResizeObserver","target","listener","listenerRef","useRef","useEffect","current","useBrowserLayoutEffect","element","Element","undefined","eventListener","entries","observer","resizeObserver","ResizeObserver","observe","unobserve","_default","exports"],"sources":["../../src/index.ts"],"sourcesContent":["import useBrowserLayoutEffect from '@os-design/use-browser-layout-effect';\nimport { RefObject, useEffect, useRef } from 'react';\nimport ResizeObserver from 'resize-observer-polyfill';\n\nconst useResizeObserver = (\n target: Element | RefObject<Element>,\n listener: ResizeObserverCallback\n): void => {\n const listenerRef = useRef<ResizeObserverCallback>();\n\n useEffect(() => {\n listenerRef.current = listener;\n }, [listener]);\n\n useBrowserLayoutEffect(() => {\n let element;\n if (typeof target === 'object' && target !== null) {\n element = target instanceof Element ? target : target.current;\n }\n\n if (!element) return () => undefined;\n\n const eventListener: ResizeObserverCallback = (entries, observer) => {\n if (!listenerRef.current) return;\n listenerRef.current(entries, observer);\n };\n\n const resizeObserver = new ResizeObserver(eventListener);\n resizeObserver.observe(element);\n\n return () => resizeObserver.unobserve(element);\n }, [target]);\n};\n\nexport default useResizeObserver;\n"],"mappings":";;;;;;AAAA,IAAAA,uBAAA,GAAAC,sBAAA,CAAAC,OAAA;AACA,IAAAC,MAAA,GAAAD,OAAA;AACA,IAAAE,uBAAA,GAAAH,sBAAA,CAAAC,OAAA;AAAsD,SAAAD,uBAAAI,GAAA,WAAAA,GAAA,IAAAA,GAAA,CAAAC,UAAA,GAAAD,GAAA,gBAAAA,GAAA;AAAA,SAAAE,
|
|
1
|
+
{"version":3,"file":"index.js","names":["_useBrowserLayoutEffect","_interopRequireDefault","require","_react","_resizeObserverPolyfill","obj","__esModule","_typeof","o","Symbol","iterator","constructor","prototype","useResizeObserver","target","listener","listenerRef","useRef","useEffect","current","useBrowserLayoutEffect","element","Element","undefined","eventListener","entries","observer","resizeObserver","ResizeObserver","observe","unobserve","_default","exports"],"sources":["../../src/index.ts"],"sourcesContent":["import useBrowserLayoutEffect from '@os-design/use-browser-layout-effect';\nimport { RefObject, useEffect, useRef } from 'react';\nimport ResizeObserver from 'resize-observer-polyfill';\n\nconst useResizeObserver = (\n target: Element | RefObject<Element>,\n listener: ResizeObserverCallback\n): void => {\n const listenerRef = useRef<ResizeObserverCallback>();\n\n useEffect(() => {\n listenerRef.current = listener;\n }, [listener]);\n\n useBrowserLayoutEffect(() => {\n let element;\n if (typeof target === 'object' && target !== null) {\n element = target instanceof Element ? target : target.current;\n }\n\n if (!element) return () => undefined;\n\n const eventListener: ResizeObserverCallback = (entries, observer) => {\n if (!listenerRef.current) return;\n listenerRef.current(entries, observer);\n };\n\n const resizeObserver = new ResizeObserver(eventListener);\n resizeObserver.observe(element);\n\n return () => resizeObserver.unobserve(element);\n }, [target]);\n};\n\nexport default useResizeObserver;\n"],"mappings":";;;;;;AAAA,IAAAA,uBAAA,GAAAC,sBAAA,CAAAC,OAAA;AACA,IAAAC,MAAA,GAAAD,OAAA;AACA,IAAAE,uBAAA,GAAAH,sBAAA,CAAAC,OAAA;AAAsD,SAAAD,uBAAAI,GAAA,WAAAA,GAAA,IAAAA,GAAA,CAAAC,UAAA,GAAAD,GAAA,gBAAAA,GAAA;AAAA,SAAAE,QAAAC,CAAA,sCAAAD,OAAA,wBAAAE,MAAA,uBAAAA,MAAA,CAAAC,QAAA,aAAAF,CAAA,kBAAAA,CAAA,gBAAAA,CAAA,WAAAA,CAAA,yBAAAC,MAAA,IAAAD,CAAA,CAAAG,WAAA,KAAAF,MAAA,IAAAD,CAAA,KAAAC,MAAA,CAAAG,SAAA,qBAAAJ,CAAA,KAAAD,OAAA,CAAAC,CAAA;AAEtD,IAAMK,iBAAiB,GAAG,SAApBA,iBAAiBA,CACrBC,MAAoC,EACpCC,QAAgC,EACvB;EACT,IAAMC,WAAW,GAAG,IAAAC,aAAM,EAAyB,CAAC;EAEpD,IAAAC,gBAAS,EAAC,YAAM;IACdF,WAAW,CAACG,OAAO,GAAGJ,QAAQ;EAChC,CAAC,EAAE,CAACA,QAAQ,CAAC,CAAC;EAEd,IAAAK,kCAAsB,EAAC,YAAM;IAC3B,IAAIC,OAAO;IACX,IAAId,OAAA,CAAOO,MAAM,MAAK,QAAQ,IAAIA,MAAM,KAAK,IAAI,EAAE;MACjDO,OAAO,GAAGP,MAAM,YAAYQ,OAAO,GAAGR,MAAM,GAAGA,MAAM,CAACK,OAAO;IAC/D;IAEA,IAAI,CAACE,OAAO,EAAE,OAAO;MAAA,OAAME,SAAS;IAAA;IAEpC,IAAMC,aAAqC,GAAG,SAAxCA,aAAqCA,CAAIC,OAAO,EAAEC,QAAQ,EAAK;MACnE,IAAI,CAACV,WAAW,CAACG,OAAO,EAAE;MAC1BH,WAAW,CAACG,OAAO,CAACM,OAAO,EAAEC,QAAQ,CAAC;IACxC,CAAC;IAED,IAAMC,cAAc,GAAG,IAAIC,kCAAc,CAACJ,aAAa,CAAC;IACxDG,cAAc,CAACE,OAAO,CAACR,OAAO,CAAC;IAE/B,OAAO;MAAA,OAAMM,cAAc,CAACG,SAAS,CAACT,OAAO,CAAC;IAAA;EAChD,CAAC,EAAE,CAACP,MAAM,CAAC,CAAC;AACd,CAAC;AAAC,IAAAiB,QAAA,GAAAC,OAAA,cAEanB,iBAAiB","ignoreList":[]}
|
package/dist/esm/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","names":["useBrowserLayoutEffect","useEffect","useRef","ResizeObserver","useResizeObserver","target","listener","listenerRef","current","element","Element","undefined","eventListener","entries","observer","resizeObserver","observe","unobserve"],"sources":["../../src/index.ts"],"sourcesContent":["import useBrowserLayoutEffect from '@os-design/use-browser-layout-effect';\nimport { RefObject, useEffect, useRef } from 'react';\nimport ResizeObserver from 'resize-observer-polyfill';\n\nconst useResizeObserver = (\n target: Element | RefObject<Element>,\n listener: ResizeObserverCallback\n): void => {\n const listenerRef = useRef<ResizeObserverCallback>();\n\n useEffect(() => {\n listenerRef.current = listener;\n }, [listener]);\n\n useBrowserLayoutEffect(() => {\n let element;\n if (typeof target === 'object' && target !== null) {\n element = target instanceof Element ? target : target.current;\n }\n\n if (!element) return () => undefined;\n\n const eventListener: ResizeObserverCallback = (entries, observer) => {\n if (!listenerRef.current) return;\n listenerRef.current(entries, observer);\n };\n\n const resizeObserver = new ResizeObserver(eventListener);\n resizeObserver.observe(element);\n\n return () => resizeObserver.unobserve(element);\n }, [target]);\n};\n\nexport default useResizeObserver;\n"],"mappings":"AAAA,OAAOA,sBAAsB,MAAM,sCAAsC;AACzE,SAAoBC,SAAS,EAAEC,MAAM,QAAQ,OAAO;AACpD,OAAOC,cAAc,MAAM,0BAA0B;AAErD,MAAMC,iBAAiB,GAAGA,CACxBC,MAAoC,EACpCC,QAAgC,KACvB;EACT,MAAMC,WAAW,GAAGL,MAAM,CAAyB,CAAC;EAEpDD,SAAS,CAAC,MAAM;IACdM,WAAW,CAACC,OAAO,GAAGF,QAAQ;EAChC,CAAC,EAAE,CAACA,QAAQ,CAAC,CAAC;EAEdN,sBAAsB,CAAC,MAAM;IAC3B,IAAIS,OAAO;IACX,IAAI,OAAOJ,MAAM,KAAK,QAAQ,IAAIA,MAAM,KAAK,IAAI,EAAE;MACjDI,OAAO,GAAGJ,MAAM,YAAYK,OAAO,GAAGL,MAAM,GAAGA,MAAM,CAACG,OAAO;IAC/D;IAEA,IAAI,CAACC,OAAO,EAAE,OAAO,MAAME,SAAS;IAEpC,MAAMC,aAAqC,GAAGA,CAACC,OAAO,EAAEC,QAAQ,KAAK;MACnE,IAAI,CAACP,WAAW,CAACC,OAAO,EAAE;MAC1BD,WAAW,CAACC,OAAO,CAACK,OAAO,EAAEC,QAAQ,CAAC;IACxC,CAAC;IAED,MAAMC,cAAc,GAAG,IAAIZ,cAAc,CAACS,aAAa,CAAC;IACxDG,cAAc,CAACC,OAAO,CAACP,OAAO,CAAC;IAE/B,OAAO,MAAMM,cAAc,CAACE,SAAS,CAACR,OAAO,CAAC;EAChD,CAAC,EAAE,CAACJ,MAAM,CAAC,CAAC;AACd,CAAC;AAED,eAAeD,iBAAiB"}
|
|
1
|
+
{"version":3,"file":"index.js","names":["useBrowserLayoutEffect","useEffect","useRef","ResizeObserver","useResizeObserver","target","listener","listenerRef","current","element","Element","undefined","eventListener","entries","observer","resizeObserver","observe","unobserve"],"sources":["../../src/index.ts"],"sourcesContent":["import useBrowserLayoutEffect from '@os-design/use-browser-layout-effect';\nimport { RefObject, useEffect, useRef } from 'react';\nimport ResizeObserver from 'resize-observer-polyfill';\n\nconst useResizeObserver = (\n target: Element | RefObject<Element>,\n listener: ResizeObserverCallback\n): void => {\n const listenerRef = useRef<ResizeObserverCallback>();\n\n useEffect(() => {\n listenerRef.current = listener;\n }, [listener]);\n\n useBrowserLayoutEffect(() => {\n let element;\n if (typeof target === 'object' && target !== null) {\n element = target instanceof Element ? target : target.current;\n }\n\n if (!element) return () => undefined;\n\n const eventListener: ResizeObserverCallback = (entries, observer) => {\n if (!listenerRef.current) return;\n listenerRef.current(entries, observer);\n };\n\n const resizeObserver = new ResizeObserver(eventListener);\n resizeObserver.observe(element);\n\n return () => resizeObserver.unobserve(element);\n }, [target]);\n};\n\nexport default useResizeObserver;\n"],"mappings":"AAAA,OAAOA,sBAAsB,MAAM,sCAAsC;AACzE,SAAoBC,SAAS,EAAEC,MAAM,QAAQ,OAAO;AACpD,OAAOC,cAAc,MAAM,0BAA0B;AAErD,MAAMC,iBAAiB,GAAGA,CACxBC,MAAoC,EACpCC,QAAgC,KACvB;EACT,MAAMC,WAAW,GAAGL,MAAM,CAAyB,CAAC;EAEpDD,SAAS,CAAC,MAAM;IACdM,WAAW,CAACC,OAAO,GAAGF,QAAQ;EAChC,CAAC,EAAE,CAACA,QAAQ,CAAC,CAAC;EAEdN,sBAAsB,CAAC,MAAM;IAC3B,IAAIS,OAAO;IACX,IAAI,OAAOJ,MAAM,KAAK,QAAQ,IAAIA,MAAM,KAAK,IAAI,EAAE;MACjDI,OAAO,GAAGJ,MAAM,YAAYK,OAAO,GAAGL,MAAM,GAAGA,MAAM,CAACG,OAAO;IAC/D;IAEA,IAAI,CAACC,OAAO,EAAE,OAAO,MAAME,SAAS;IAEpC,MAAMC,aAAqC,GAAGA,CAACC,OAAO,EAAEC,QAAQ,KAAK;MACnE,IAAI,CAACP,WAAW,CAACC,OAAO,EAAE;MAC1BD,WAAW,CAACC,OAAO,CAACK,OAAO,EAAEC,QAAQ,CAAC;IACxC,CAAC;IAED,MAAMC,cAAc,GAAG,IAAIZ,cAAc,CAACS,aAAa,CAAC;IACxDG,cAAc,CAACC,OAAO,CAACP,OAAO,CAAC;IAE/B,OAAO,MAAMM,cAAc,CAACE,SAAS,CAACR,OAAO,CAAC;EAChD,CAAC,EAAE,CAACJ,MAAM,CAAC,CAAC;AACd,CAAC;AAED,eAAeD,iBAAiB","ignoreList":[]}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@os-design/use-resize-observer",
|
|
3
|
-
"version": "1.0.
|
|
3
|
+
"version": "1.0.22",
|
|
4
4
|
"license": "UNLICENSED",
|
|
5
5
|
"repository": "git@gitlab.com:os-team/libs/os-design.git",
|
|
6
6
|
"main": "dist/cjs/index.js",
|
|
@@ -23,18 +23,18 @@
|
|
|
23
23
|
"build:esm": "cross-env BABEL_ENV=esm babel src --root-mode upward --extensions .ts,.tsx --out-dir dist/esm --source-maps",
|
|
24
24
|
"build:cjs": "cross-env BABEL_ENV=cjs babel src --root-mode upward --extensions .ts,.tsx --out-dir dist/cjs --source-maps",
|
|
25
25
|
"build:types": "tsc --emitDeclarationOnly --declaration --declarationDir dist/types",
|
|
26
|
-
"build": "yarn clean && npm-run-all build:*",
|
|
26
|
+
"build": "yarn clean && npm-run-all 'build:*'",
|
|
27
27
|
"ncu": "ncu -u"
|
|
28
28
|
},
|
|
29
29
|
"publishConfig": {
|
|
30
30
|
"access": "public"
|
|
31
31
|
},
|
|
32
32
|
"dependencies": {
|
|
33
|
-
"@os-design/use-browser-layout-effect": "^1.0.
|
|
33
|
+
"@os-design/use-browser-layout-effect": "^1.0.20",
|
|
34
34
|
"resize-observer-polyfill": "^1.5.1"
|
|
35
35
|
},
|
|
36
36
|
"peerDependencies": {
|
|
37
37
|
"react": ">=18"
|
|
38
38
|
},
|
|
39
|
-
"gitHead": "
|
|
39
|
+
"gitHead": "1f17189e344a56fd6347dd6b896d6e7ef6e7b35d"
|
|
40
40
|
}
|
package/src/index.mdx
ADDED
|
@@ -0,0 +1,75 @@
|
|
|
1
|
+
import { Meta } from '@storybook/blocks';
|
|
2
|
+
import UseResizeObserverExample from './index.example';
|
|
3
|
+
|
|
4
|
+
<Meta title='Utils/useResizeObserver' />
|
|
5
|
+
|
|
6
|
+
# useResizeObserver
|
|
7
|
+
|
|
8
|
+
Sets the listener that will be called whenever the resize event of an element occurs.
|
|
9
|
+
|
|
10
|
+
## Example of usage
|
|
11
|
+
|
|
12
|
+
```tsx
|
|
13
|
+
import React, {
|
|
14
|
+
useCallback,
|
|
15
|
+
useEffect,
|
|
16
|
+
useLayoutEffect,
|
|
17
|
+
useRef,
|
|
18
|
+
useState,
|
|
19
|
+
} from 'react';
|
|
20
|
+
import styled from '@emotion/styled';
|
|
21
|
+
import { useResizeObserver } from '@os-design/utils';
|
|
22
|
+
|
|
23
|
+
const getRandomInt = (min: number, max: number) =>
|
|
24
|
+
Math.floor(Math.random() * (max - min + 1) + min);
|
|
25
|
+
|
|
26
|
+
const Container = styled.div`
|
|
27
|
+
background-color: hsl(0, 0%, 90%);
|
|
28
|
+
width: 10em;
|
|
29
|
+
`;
|
|
30
|
+
|
|
31
|
+
const UseResizeObserverExample: React.FC = () => {
|
|
32
|
+
const containerRef = useRef<HTMLDivElement>();
|
|
33
|
+
const [size, setSize] = useState({ width: 0, height: 0 });
|
|
34
|
+
const [numberOfWords, setNumberOfWords] = useState(10);
|
|
35
|
+
|
|
36
|
+
// Change the content of the container every second
|
|
37
|
+
useEffect(() => {
|
|
38
|
+
const interval = setInterval(
|
|
39
|
+
() => setNumberOfWords(getRandomInt(5, 30)),
|
|
40
|
+
1000
|
|
41
|
+
);
|
|
42
|
+
return () => clearInterval(interval);
|
|
43
|
+
}, []);
|
|
44
|
+
|
|
45
|
+
const updateContainerSize = useCallback(() => {
|
|
46
|
+
setSize({
|
|
47
|
+
width: containerRef.current?.clientWidth,
|
|
48
|
+
height: containerRef.current?.clientHeight,
|
|
49
|
+
});
|
|
50
|
+
}, []);
|
|
51
|
+
|
|
52
|
+
// Detect container size on mount
|
|
53
|
+
useLayoutEffect(() => {
|
|
54
|
+
updateContainerSize();
|
|
55
|
+
}, [updateContainerSize]);
|
|
56
|
+
|
|
57
|
+
// Detect container size on resize
|
|
58
|
+
useResizeObserver(containerRef, updateContainerSize);
|
|
59
|
+
|
|
60
|
+
return (
|
|
61
|
+
<>
|
|
62
|
+
<Container ref={containerRef}>
|
|
63
|
+
{'Text '.repeat(numberOfWords).trimRight()}
|
|
64
|
+
</Container>
|
|
65
|
+
<p>
|
|
66
|
+
Size: {size.width}x{size.height}
|
|
67
|
+
</p>
|
|
68
|
+
</>
|
|
69
|
+
);
|
|
70
|
+
};
|
|
71
|
+
|
|
72
|
+
export default UseResizeObserverExample;
|
|
73
|
+
```
|
|
74
|
+
|
|
75
|
+
<UseResizeObserverExample />
|