From ec6a2d586fd8af028ae775ff29f454e963fcb789 Mon Sep 17 00:00:00 2001 From: Gavrilov Grigoriy Date: Mon, 4 Oct 2021 22:27:45 +0300 Subject: [PATCH 1/7] =?UTF-8?q?=D0=94=D0=BE=D0=B1=D0=B0=D0=B2=D0=BB=D0=B5?= =?UTF-8?q?=D0=BD=20ResizeObserverMocker=20=D0=B4=D0=BB=D1=8F=20=D0=BC?= =?UTF-8?q?=D0=BE=D0=BA=D0=B0=20ResizeObserver?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/hooks/scroll.ts | 1 - src/hooks/useTimer.ts | 2 +- .../index.stories.tsx | 8 +-- .../ResizeObserverMocker.test.ts | 36 +++++++++++++ src/tests/utils/ResizeObserverMocker/index.ts | 50 +++++++++++++++++++ src/tests/utils/ResizeObserverMocker/types.ts | 19 +++++++ 6 files changed, 110 insertions(+), 6 deletions(-) rename src/stories/{useChildrenWidthDetector => useChildrenMeasure}/index.stories.tsx (88%) create mode 100644 src/tests/utils/ResizeObserverMocker/ResizeObserverMocker.test.ts create mode 100644 src/tests/utils/ResizeObserverMocker/index.ts create mode 100644 src/tests/utils/ResizeObserverMocker/types.ts diff --git a/src/hooks/scroll.ts b/src/hooks/scroll.ts index f2750f2..2fb14da 100644 --- a/src/hooks/scroll.ts +++ b/src/hooks/scroll.ts @@ -85,7 +85,6 @@ export function useScrollToElement(center: boolean, behavior?: ScrollBehavior, p }; } - export interface ScrollInfo { inStartPos: boolean; inEndPos: boolean; diff --git a/src/hooks/useTimer.ts b/src/hooks/useTimer.ts index f35074d..fae2e70 100644 --- a/src/hooks/useTimer.ts +++ b/src/hooks/useTimer.ts @@ -17,7 +17,7 @@ export function useTimer({ onSuccess?: () => void; }) { const forceUpdate = useForceUpdate(); - const timerRef = useRef(null!); + const timerRef = useRef(null!); const valueRef = useRef(initialValue() || 0); const start = useCallback( diff --git a/src/stories/useChildrenWidthDetector/index.stories.tsx b/src/stories/useChildrenMeasure/index.stories.tsx similarity index 88% rename from src/stories/useChildrenWidthDetector/index.stories.tsx rename to src/stories/useChildrenMeasure/index.stories.tsx index 274da6d..60169b1 100644 --- a/src/stories/useChildrenWidthDetector/index.stories.tsx +++ b/src/stories/useChildrenMeasure/index.stories.tsx @@ -36,7 +36,7 @@ const Template: ComponentStory = (props) => { }; export default { - title: "Hooks/useChildrenWidthDetector", + title: "Hooks/useChildrenMeasure", component: Demo, argTypes: { useResizeObserver: { @@ -58,7 +58,7 @@ export default { }, } as ComponentMeta; -export const useChildrenWidthDetectorInfo = Template.bind({}); -useChildrenWidthDetectorInfo.args = {}; +export const useChildrenMeasureInfo = Template.bind({}); +useChildrenMeasureInfo.args = {}; -useChildrenWidthDetectorInfo.storyName = "useChildrenWidthDetector"; +useChildrenMeasureInfo.storyName = "useChildrenMeasure"; diff --git a/src/tests/utils/ResizeObserverMocker/ResizeObserverMocker.test.ts b/src/tests/utils/ResizeObserverMocker/ResizeObserverMocker.test.ts new file mode 100644 index 0000000..a07d036 --- /dev/null +++ b/src/tests/utils/ResizeObserverMocker/ResizeObserverMocker.test.ts @@ -0,0 +1,36 @@ +import { ResizeObserverMocker } from "./index"; +import { ConnectRect } from "./types"; + +const globalState = { + domRect: {}, +}; + +describe("ResizeObserverMocker", () => { + test("ResizeObserverMocker should be defined", () => { + expect(ResizeObserverMocker).toBeDefined(); + }); + + test("method in resizeObserverMocker should get default DOMRect", () => { + const resizeObserverMocker = new ResizeObserverMocker(); + + resizeObserverMocker.setResizeObserverToWindow(); + const resizeObserverCallback: any = jest.fn((data: ConnectRect) => (globalState.domRect = data)); + new ResizeObserver(resizeObserverCallback); + + resizeObserverMocker.listener(ResizeObserverMocker.defaultDOMRect); + + expect(globalState.domRect).toMatchObject(ResizeObserverMocker.defaultDOMRect); + }); + + test("methods in resizeObserverMocker should be called", () => { + const resizeObserverMocker = new ResizeObserverMocker(); + + resizeObserverMocker.disconnect(); + resizeObserverMocker.unobserve(); + resizeObserverMocker.observe(); + + expect(resizeObserverMocker.disconnect).toBeCalled(); + expect(resizeObserverMocker.unobserve).toBeCalled(); + expect(resizeObserverMocker.observe).toBeCalled(); + }); +}); diff --git a/src/tests/utils/ResizeObserverMocker/index.ts b/src/tests/utils/ResizeObserverMocker/index.ts new file mode 100644 index 0000000..308f1bc --- /dev/null +++ b/src/tests/utils/ResizeObserverMocker/index.ts @@ -0,0 +1,50 @@ +import { ConnectRect, ResizeObserverMethodsNames } from "./types"; + +const Global = window || global; +export class ResizeObserverMocker { + static defaultDOMRect: ConnectRect = { + contentRect: { + x: 0, + y: 0, + bottom: 0, + height: 0, + left: 0, + right: 0, + top: 0, + width: 0, + }, + }; + + constructor() { + this.setListener = this.setListener.bind(this); + } + + observe = jest.fn(); + unobserve = jest.fn(); + disconnect = jest.fn(); + listener: any = undefined as any; + + implementResizeObserverMethod(methodName: ResizeObserverMethodsNames, mockMethod: jest.Mock) { + this[methodName] = mockMethod; + } + + setResizeObserverToWindow() { + const setListener = this.setListener.bind(this); + const { observe, unobserve, disconnect } = this; + + // @ts-ignore + Global.ResizeObserver = class ResizeObserver { + constructor(ls: any) { + setListener(ls); + } + }; + + Global.ResizeObserver.prototype.observe = observe; + Global.ResizeObserver.prototype.unobserve = unobserve; + Global.ResizeObserver.prototype.disconnect = disconnect; + } + + private setListener(ls: ResizeObserverCallback) { + this.listener = ls; + } +} diff --git a/src/tests/utils/ResizeObserverMocker/types.ts b/src/tests/utils/ResizeObserverMocker/types.ts new file mode 100644 index 0000000..84d3b5a --- /dev/null +++ b/src/tests/utils/ResizeObserverMocker/types.ts @@ -0,0 +1,19 @@ +export enum ResizeObserverMethodsNames { + observe = "observe", + unobserve = "unobserve", + disconnect = "disconnect", + listener = "listener", +} + +export type ConnectRect = { + contentRect: { + x: number; + y: number; + bottom: number; + height: number; + left: number; + right: number; + top: number; + width: number; + }; +}; From bb51247031b0296a3f46da858438acffd20dcbce Mon Sep 17 00:00:00 2001 From: Gavrilov Grigoriy Date: Mon, 4 Oct 2021 23:48:01 +0300 Subject: [PATCH 2/7] =?UTF-8?q?=D0=94=D0=BE=D0=B1=D0=B0=D0=B2=D0=BB=D0=B5?= =?UTF-8?q?=D0=BD=20=D1=82=D0=B5=D1=81=D1=82=20=D0=B2=D1=8B=D0=B7=D0=BE?= =?UTF-8?q?=D0=B2=D0=B0=20listener=20=D1=83=20ResizeObserverMocker=20?= =?UTF-8?q?=D0=BD=D0=B5=D1=81=D0=BA=D0=BE=D0=BB=D1=8C=D0=BA=D0=BE=20=D1=80?= =?UTF-8?q?=D0=B0=D0=B7?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../ResizeObserverMocker.test.ts | 35 +++++++++++++++++-- src/tests/utils/ResizeObserverMocker/index.ts | 6 ++-- src/tests/utils/ResizeObserverMocker/types.ts | 13 ------- 3 files changed, 35 insertions(+), 19 deletions(-) diff --git a/src/tests/utils/ResizeObserverMocker/ResizeObserverMocker.test.ts b/src/tests/utils/ResizeObserverMocker/ResizeObserverMocker.test.ts index a07d036..2f72737 100644 --- a/src/tests/utils/ResizeObserverMocker/ResizeObserverMocker.test.ts +++ b/src/tests/utils/ResizeObserverMocker/ResizeObserverMocker.test.ts @@ -1,20 +1,32 @@ import { ResizeObserverMocker } from "./index"; -import { ConnectRect } from "./types"; const globalState = { domRect: {}, }; +const mockRect: DOMRect = { + x: 1, + y: 2, + width: 200, + height: 200, + top: 100, + bottom: 0, + left: 100, + right: 0, +} as DOMRect; + +const newMockRect = { ...mockRect, width: 9999 }; + describe("ResizeObserverMocker", () => { test("ResizeObserverMocker should be defined", () => { expect(ResizeObserverMocker).toBeDefined(); }); - test("method in resizeObserverMocker should get default DOMRect", () => { + test("method in resizeObserverMocker should set default DOMRect", () => { const resizeObserverMocker = new ResizeObserverMocker(); resizeObserverMocker.setResizeObserverToWindow(); - const resizeObserverCallback: any = jest.fn((data: ConnectRect) => (globalState.domRect = data)); + const resizeObserverCallback: any = jest.fn((data: DOMRect) => (globalState.domRect = data)); new ResizeObserver(resizeObserverCallback); resizeObserverMocker.listener(ResizeObserverMocker.defaultDOMRect); @@ -22,6 +34,23 @@ describe("ResizeObserverMocker", () => { expect(globalState.domRect).toMatchObject(ResizeObserverMocker.defaultDOMRect); }); + test("multiple updates listener", () => { + const resizeObserverMocker = new ResizeObserverMocker(); + + resizeObserverMocker.setResizeObserverToWindow(); + const resizeObserverCallback: any = jest.fn((data: DOMRect) => (globalState.domRect = data)); + new ResizeObserver(resizeObserverCallback); + + resizeObserverMocker.listener(ResizeObserverMocker.defaultDOMRect); + expect(globalState.domRect).toMatchObject(ResizeObserverMocker.defaultDOMRect); + + resizeObserverMocker.listener(mockRect); + expect(globalState.domRect).toMatchObject(mockRect); + + resizeObserverMocker.listener(newMockRect); + expect(globalState.domRect).toMatchObject(newMockRect); + }); + test("methods in resizeObserverMocker should be called", () => { const resizeObserverMocker = new ResizeObserverMocker(); diff --git a/src/tests/utils/ResizeObserverMocker/index.ts b/src/tests/utils/ResizeObserverMocker/index.ts index 308f1bc..7815ebf 100644 --- a/src/tests/utils/ResizeObserverMocker/index.ts +++ b/src/tests/utils/ResizeObserverMocker/index.ts @@ -1,8 +1,8 @@ -import { ConnectRect, ResizeObserverMethodsNames } from "./types"; +import { ResizeObserverMethodsNames } from "./types"; const Global = window || global; export class ResizeObserverMocker { - static defaultDOMRect: ConnectRect = { + static defaultDOMRect: { contentRect: DOMRect } = { contentRect: { x: 0, y: 0, @@ -12,7 +12,7 @@ export class ResizeObserverMocker { right: 0, top: 0, width: 0, - }, + } as DOMRect, }; constructor() { diff --git a/src/tests/utils/ResizeObserverMocker/types.ts b/src/tests/utils/ResizeObserverMocker/types.ts index 84d3b5a..c8d29f7 100644 --- a/src/tests/utils/ResizeObserverMocker/types.ts +++ b/src/tests/utils/ResizeObserverMocker/types.ts @@ -4,16 +4,3 @@ export enum ResizeObserverMethodsNames { disconnect = "disconnect", listener = "listener", } - -export type ConnectRect = { - contentRect: { - x: number; - y: number; - bottom: number; - height: number; - left: number; - right: number; - top: number; - width: number; - }; -}; From ba4abba93c6879824326fbde5e88ddb269674720 Mon Sep 17 00:00:00 2001 From: Gavrilov Grigoriy Date: Tue, 5 Oct 2021 00:07:46 +0300 Subject: [PATCH 3/7] =?UTF-8?q?=D0=94=D0=BE=D0=B1=D0=B0=D0=B2=D0=BB=D0=B5?= =?UTF-8?q?=D0=BD=D0=BE=20=D0=BE=D1=82=D0=BA=D0=BB=D1=8E=D1=87=D0=B5=D0=BD?= =?UTF-8?q?=D0=B8=D0=B5=20resizeObserver=20=D0=B5=D1=81=D0=BB=D0=B8=20?= =?UTF-8?q?=D0=BA=D0=BE=D0=BC=D0=BF=D0=BE=D0=BD=D0=B5=D0=BD=D1=82=20=D1=83?= =?UTF-8?q?=D0=B4=D0=B0=D0=BB=D0=B8=D0=BB=D1=81=D1=8F?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/hooks/useChildrenMeasure.ts | 51 ++++++++++++++++++++------------- 1 file changed, 31 insertions(+), 20 deletions(-) diff --git a/src/hooks/useChildrenMeasure.ts b/src/hooks/useChildrenMeasure.ts index fcd1e01..226f3aa 100644 --- a/src/hooks/useChildrenMeasure.ts +++ b/src/hooks/useChildrenMeasure.ts @@ -1,35 +1,41 @@ -import React from "react"; +import React, { useEffect } from "react"; import { htmlCollectionToArray } from "@worksolutions/utils"; +export function computeRelativeMeasures(childrenRects: DOMRect[], parentRect: DOMRect) { + return childrenRects.map((childrenRect) => { + const x = childrenRect.x - parentRect.x; + const y = childrenRect.y - parentRect.y; + + return { + toJSON: () => "", + width: childrenRect.width, + height: childrenRect.height, + x, + y, + left: x, + top: y, + bottom: y + childrenRect.height, + right: x + childrenRect.width, + }; + }); +} + export function useChildrenMeasure(useResizeObserver = false) { + const elementRef = React.useRef(null); + const resizeObserverRef = React.useRef(null!); + const [measures, setMeasures] = React.useState(null); const [relativeMeasures, setRelativeMeasures] = React.useState(null); - const elementRef = React.useRef(null); const update = React.useCallback(() => { if (!elementRef.current) return; const childrenRects = htmlCollectionToArray(elementRef.current.children).map((element) => element.getBoundingClientRect(), ); + const parentRect = elementRef.current.getBoundingClientRect(); setMeasures(childrenRects); - setRelativeMeasures( - childrenRects.map((childrenRect) => { - const x = childrenRect.x - parentRect.x; - const y = childrenRect.y - parentRect.y; - return { - toJSON: () => "", - width: childrenRect.width, - height: childrenRect.height, - x, - y, - left: x, - top: y, - bottom: y + childrenRect.height, - right: x + childrenRect.width, - }; - }), - ); + setRelativeMeasures(computeRelativeMeasures(childrenRects, parentRect)); }, []); const initRef = React.useCallback( @@ -38,7 +44,7 @@ export function useChildrenMeasure(useResizeObserver = false) { if (!element) return; if (useResizeObserver) { - new ResizeObserver(update).observe(element); + resizeObserverRef.current = new ResizeObserver(update); return; } @@ -46,5 +52,10 @@ export function useChildrenMeasure(useResizeObserver = false) { }, [update, useResizeObserver], ); + + useEffect(() => { + return () => resizeObserverRef.current && resizeObserverRef.current.disconnect(); + }); + return { measures, relativeMeasures, initRef, update }; } From 313943076e0b82ed106e5f6eda2c16838215ead5 Mon Sep 17 00:00:00 2001 From: Gavrilov Grigoriy Date: Tue, 5 Oct 2021 00:09:45 +0300 Subject: [PATCH 4/7] =?UTF-8?q?=D1=80=D0=B5=D0=B0=D0=BB=D0=B8=D0=B7=D0=BE?= =?UTF-8?q?=D0=B2=D0=B0=D0=BD=D1=8B=20=D1=82=D0=B5=D1=81=D1=82=D1=8B=20?= =?UTF-8?q?=D0=B4=D0=BB=D1=8F=20=D1=85=D1=83=D0=BA=D0=B0=20useChildrenMeas?= =?UTF-8?q?ure?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/tests/useChildrenMeasure.test.tsx | 98 +++++++++++++++++++ .../ResizeObserverMocker.test.ts | 3 +- src/tests/utils/ResizeObserverMocker/index.ts | 3 +- 3 files changed, 102 insertions(+), 2 deletions(-) create mode 100644 src/tests/useChildrenMeasure.test.tsx diff --git a/src/tests/useChildrenMeasure.test.tsx b/src/tests/useChildrenMeasure.test.tsx new file mode 100644 index 0000000..ab82e36 --- /dev/null +++ b/src/tests/useChildrenMeasure.test.tsx @@ -0,0 +1,98 @@ +import React from "react"; +import { renderHook } from "@testing-library/react-hooks"; +import { act } from "react-dom/test-utils"; +import { htmlCollectionToArray } from "@worksolutions/utils"; + +import { ResizeObserverMocker } from "./utils/ResizeObserverMocker"; +import { useChildrenMeasure } from "../hooks"; + +const mockRect: DOMRect = { + x: 10, + y: 10, + width: 200, + height: 200, + top: 100, + bottom: 0, + left: 100, + right: 0, + toJSON: () => "", +}; + +const defaultEmptyArray = new Array(4).fill(undefined); + +const $rootTestElement = document.createElement("div"); +$rootTestElement.getBoundingClientRect = jest.fn(() => { + const newMockRect = { ...mockRect }; + newMockRect.x = 10; + newMockRect.y = 10; + + return newMockRect; +}); + +defaultEmptyArray.forEach(() => { + const $childElement = document.createElement("div"); + $rootTestElement.appendChild($childElement); +}); + +function rewriteChildrenRect(rect: DOMRect = ResizeObserverMocker.defaultDOMRect.contentRect) { + htmlCollectionToArray($rootTestElement.children).forEach(($childElement: HTMLElement) => { + $childElement.getBoundingClientRect = jest.fn(() => rect); + }); +} + +describe("useChildrenMeasure", () => { + test("useChildrenMeasure is defined", () => { + expect(useChildrenMeasure).toBeDefined(); + }); + + test("useChildrenMeasure should get default values", () => { + const { result } = renderHook(() => useChildrenMeasure()); + rewriteChildrenRect(); + + act(() => result.current.initRef($rootTestElement)); + expect(result.current.measures).toMatchObject( + defaultEmptyArray.map(() => ResizeObserverMocker.defaultDOMRect.contentRect), + ); + }); + + test("useChildrenMeasure should get children rect", () => { + const { result } = renderHook(() => useChildrenMeasure()); + rewriteChildrenRect(mockRect); + + act(() => result.current.initRef($rootTestElement)); + + expect(result.current.measures).toMatchObject(defaultEmptyArray.map(() => mockRect)); + }); + + test("useChildrenMeasure should track changes in childrens", () => { + const resizeObserverMocker = new ResizeObserverMocker(); + resizeObserverMocker.setResizeObserverToWindow(); + rewriteChildrenRect(); + + const { result } = renderHook(() => useChildrenMeasure(true)); + act(() => result.current.initRef($rootTestElement)); + act(() => result.current.update()); + + expect(result.current.measures).toMatchObject( + defaultEmptyArray.map(() => ResizeObserverMocker.defaultDOMRect.contentRect), + ); + + rewriteChildrenRect(mockRect); + act(() => resizeObserverMocker.listener()); + + expect(result.current.measures).toMatchObject(defaultEmptyArray.map(() => mockRect)); + }); + + test("disconnect should call when component unmount", () => { + const resizeObserverMocker = new ResizeObserverMocker(); + resizeObserverMocker.setResizeObserverToWindow(); + rewriteChildrenRect(); + + const { result, unmount } = renderHook(() => useChildrenMeasure(true)); + act(() => result.current.initRef($rootTestElement)); + + unmount(); + + expect(resizeObserverMocker.disconnect).toBeCalled(); + }); +}); diff --git a/src/tests/utils/ResizeObserverMocker/ResizeObserverMocker.test.ts b/src/tests/utils/ResizeObserverMocker/ResizeObserverMocker.test.ts index 2f72737..34d8010 100644 --- a/src/tests/utils/ResizeObserverMocker/ResizeObserverMocker.test.ts +++ b/src/tests/utils/ResizeObserverMocker/ResizeObserverMocker.test.ts @@ -13,7 +13,8 @@ const mockRect: DOMRect = { bottom: 0, left: 100, right: 0, -} as DOMRect; + toJSON: () => "", +}; const newMockRect = { ...mockRect, width: 9999 }; diff --git a/src/tests/utils/ResizeObserverMocker/index.ts b/src/tests/utils/ResizeObserverMocker/index.ts index 7815ebf..254998f 100644 --- a/src/tests/utils/ResizeObserverMocker/index.ts +++ b/src/tests/utils/ResizeObserverMocker/index.ts @@ -12,7 +12,8 @@ export class ResizeObserverMocker { right: 0, top: 0, width: 0, - } as DOMRect, + toJSON: () => "", + }, }; constructor() { From da388288e67fb159930ce09d933648cdfebc7eb3 Mon Sep 17 00:00:00 2001 From: Gavrilov Grigoriy Date: Tue, 5 Oct 2021 00:10:04 +0300 Subject: [PATCH 5/7] =?UTF-8?q?=D0=B2=D0=B5=D1=80=D1=81=D0=B8=D0=BE=D0=BD?= =?UTF-8?q?=D0=B8=D1=80=D0=BE=D0=B2=D0=B0=D0=BD=D0=B8=D0=B5?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/package.json b/package.json index 224e4b3..279a506 100644 --- a/package.json +++ b/package.json @@ -1,7 +1,7 @@ { "name": "@worksolutions/react-utils", "private": false, - "version": "1.2.63", + "version": "1.2.64", "description": "", "types": "dist/esm/index.d.ts", "main": "dist/cjs/index.js", From b7e1cd622908bee7cabec4dfe198cc72734229e1 Mon Sep 17 00:00:00 2001 From: Gavrilov Grigoriy Date: Tue, 2 Nov 2021 22:35:54 +0300 Subject: [PATCH 6/7] =?UTF-8?q?=D0=BF=D0=BE=D0=BF=D1=80=D0=B0=D0=B2=D0=BB?= =?UTF-8?q?=D0=B5=D0=BD=20=D1=84=D1=83=D0=BD=D0=BA=D1=86=D0=B8=D0=BE=D0=BD?= =?UTF-8?q?=D0=B0=D0=BB=20=D1=85=D1=83=D0=BA=D0=B0=20useChildrenMeasure?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/hooks/useChildrenMeasure.ts | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-) diff --git a/src/hooks/useChildrenMeasure.ts b/src/hooks/useChildrenMeasure.ts index 226f3aa..57facbb 100644 --- a/src/hooks/useChildrenMeasure.ts +++ b/src/hooks/useChildrenMeasure.ts @@ -45,6 +45,7 @@ export function useChildrenMeasure(useResizeObserver = false) { if (useResizeObserver) { resizeObserverRef.current = new ResizeObserver(update); + resizeObserverRef.current.observe(element); return; } @@ -53,9 +54,7 @@ export function useChildrenMeasure(useResizeObserver = false) { [update, useResizeObserver], ); - useEffect(() => { - return () => resizeObserverRef.current && resizeObserverRef.current.disconnect(); - }); + useEffect(() => () => resizeObserverRef.current?.disconnect(), []); return { measures, relativeMeasures, initRef, update }; } From fe42c4943a610fab741e47411bd8c47723b2252e Mon Sep 17 00:00:00 2001 From: Gavrilov Grigoriy Date: Tue, 2 Nov 2021 22:37:05 +0300 Subject: [PATCH 7/7] =?UTF-8?q?=D0=B8=D0=B7=D0=BC=D0=B5=D0=BD=D0=B5=D0=BD?= =?UTF-8?q?=D0=B0=20=D0=B2=D0=B5=D1=80=D1=81=D0=B8=D1=8F?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/package.json b/package.json index 8dc4dfc..b19246f 100644 --- a/package.json +++ b/package.json @@ -1,7 +1,7 @@ { "name": "@worksolutions/react-utils", "private": false, - "version": "1.2.65", + "version": "1.2.66", "description": "", "types": "dist/esm/index.d.ts", "main": "dist/cjs/index.js",