diff --git a/.changeset/early-oranges-hammer.md b/.changeset/early-oranges-hammer.md new file mode 100644 index 00000000..0420cc5b --- /dev/null +++ b/.changeset/early-oranges-hammer.md @@ -0,0 +1,5 @@ +--- +"@chart-io/react": minor +--- + +Docs update diff --git a/.github/workflows/pr.yml b/.github/workflows/pr.yml index 446e16be..fea06b8c 100644 --- a/.github/workflows/pr.yml +++ b/.github/workflows/pr.yml @@ -6,7 +6,7 @@ on: branches: - master -concurrency: +concurrency: group: ${{ github.head_ref }} cancel-in-progress: true @@ -19,7 +19,7 @@ jobs: - uses: actions/setup-node@v3 with: node-version: 18 - - uses: pnpm/action-setup@v2.2.2 + - uses: pnpm/action-setup with: run_install: false - name: Get pnpm store directory @@ -47,7 +47,7 @@ jobs: # - uses: actions/setup-node@v3 # with: # node-version: 16 - # - uses: pnpm/action-setup@v2.2.2 + # - uses: pnpm/action-setup # with: # run_install: false # - name: Get pnpm store directory @@ -74,7 +74,7 @@ jobs: - uses: actions/setup-node@v3 with: node-version: 18 - - uses: pnpm/action-setup@v2.2.2 + - uses: pnpm/action-setup with: run_install: false - name: Get pnpm store directory @@ -104,7 +104,7 @@ jobs: - uses: actions/setup-node@v3 with: node-version: 18 - - uses: pnpm/action-setup@v2.2.2 + - uses: pnpm/action-setup with: run_install: false - name: Get pnpm store directory @@ -121,9 +121,13 @@ jobs: - name: pnpm Install run: pnpm install - name: Chromatic - run: | - cd packages/react - npx chromatic --project-token ${{ secrets.CHROMATIC_PROJECT_TOKEN }} --exit-zero-on-changes --only-changed + uses: chromaui/action@v1 + with: + projectToken: ${{ secrets.CHROMATIC_PROJECT_TOKEN }} + workingDir: packages/react + onlyChanged: true + exitZeroOnChanges: true + exitOnceUploaded: true merge: runs-on: ubuntu-latest diff --git a/.github/workflows/push-to-master.yml b/.github/workflows/push-to-master.yml index 923a2ef2..a59fd9cd 100644 --- a/.github/workflows/push-to-master.yml +++ b/.github/workflows/push-to-master.yml @@ -15,7 +15,7 @@ jobs: - uses: actions/setup-node@v3 with: node-version: 18 - - uses: pnpm/action-setup@v2.2.2 + - uses: pnpm/action-setup with: run_install: false - name: Get pnpm store directory @@ -47,7 +47,7 @@ jobs: - uses: actions/setup-node@v3 with: node-version: 18 - - uses: pnpm/action-setup@v2.2.2 + - uses: pnpm/action-setup with: run_install: false - name: Get pnpm store directory @@ -88,7 +88,7 @@ jobs: - uses: actions/setup-node@v3 with: node-version: 18 - - uses: pnpm/action-setup@v2.2.2 + - uses: pnpm/action-setup with: run_install: false - name: Get pnpm store directory @@ -121,7 +121,7 @@ jobs: - uses: actions/setup-node@v3 with: node-version: 18 - - uses: pnpm/action-setup@v2.2.2 + - uses: pnpm/action-setup with: run_install: false - name: Get pnpm store directory @@ -138,6 +138,11 @@ jobs: - name: pnpm Install run: pnpm install - name: Chromatic - run: | - cd packages/react - npx chromatic --project-token ${{ secrets.CHROMATIC_PROJECT_TOKEN }} --exit-zero-on-changes --auto-accept-changes --only-changed + uses: chromaui/action@v1 + with: + projectToken: ${{ secrets.CHROMATIC_PROJECT_TOKEN }} + workingDir: packages/react + onlyChanged: true + exitZeroOnChanges: true + exitOnceUploaded: true + autoAcceptChanges: true diff --git a/packages/react/package.json b/packages/react/package.json index a5d7a788..fd33d0de 100644 --- a/packages/react/package.json +++ b/packages/react/package.json @@ -60,6 +60,7 @@ "@swc/jest": "^0.2.24", "@testing-library/jest-dom": "^5.16.4", "@testing-library/react": "^13.3.0", + "@testing-library/react-hooks": "^8.0.1", "@testing-library/user-event": "^13.5.0", "@types/d3-scale": "^4.0.3", "@types/d3-selection": "^3.0.4", diff --git a/packages/react/src/lib/hoc/canvas/progressiveCanvasRenderLoop.unit.ts b/packages/react/src/lib/hoc/canvas/progressiveCanvasRenderLoop.unit.ts new file mode 100644 index 00000000..759f319f --- /dev/null +++ b/packages/react/src/lib/hoc/canvas/progressiveCanvasRenderLoop.unit.ts @@ -0,0 +1,95 @@ +import * as d3 from "@chart-io/d3"; + +import { progressiveCanvasRenderLoop } from "./progressiveCanvasRenderLoop"; +import { renderElements } from "./renderElements"; + +jest.mock("./renderElements", () => ({ + renderElements: jest.fn(), +})); + +describe("progressiveCanvasRenderLoop", () => { + // eslint-disable-next-line + const getNodes = (count) => Array.apply(null, Array(count)).map((x, i) => i); + + afterEach(() => { + jest.clearAllMocks(); + }); + + it("should do nothing when canvas is null", async () => { + const canvas = null; + const width = 500; + const height = 300; + const exit = {} as any; + const update = { end: jest.fn() } as any; + + await progressiveCanvasRenderLoop(canvas, width, height, exit, update); + + expect(update.end).not.toHaveBeenCalled(); + }); + + it("should clear canvas and call renderLoop when canvas is valid", async () => { + const clearRect = jest.fn(); + const getContext = jest.fn(() => ({ clearRect })); + const canvas = { getContext } as any; + + const width = 500; + const height = 300; + const exit = {} as any; // Replace with actual Transition mock + const update = { + nodes: jest.fn(() => getNodes(100)), + end: jest.fn(() => Promise.resolve()), + } as any; // Replace with actual Transition mock + + await progressiveCanvasRenderLoop(canvas, width, height, exit, update); + d3.timerFlush(); + + expect(update.end).toHaveBeenCalled(); + expect(getContext).toHaveBeenCalledWith("2d"); + expect(clearRect).toHaveBeenCalledWith(0, 0, width, height); + expect(update.nodes).toHaveBeenCalled(); + expect(renderElements).toHaveBeenCalled(); + }); + + it("should stop renderLoop when nodes length is 0", async () => { + const canvas = { + getContext: jest.fn(() => ({ + clearRect: jest.fn(), + })), + } as any; + const width = 500; + const height = 300; + const exit = {} as any; // Replace with actual Transition mock + const update = { + nodes: jest.fn(() => getNodes(0)), + end: jest.fn(() => Promise.resolve()), + } as any; // Replace with actual Transition mock + + await progressiveCanvasRenderLoop(canvas, width, height, exit, update); + d3.timerFlush(); + + expect(renderElements).not.toHaveBeenCalled(); + }); + + it("should render elements in batches", async () => { + const canvas = { + getContext: jest.fn(() => ({ + clearRect: jest.fn(), + })), + } as any; + const width = 500; + const height = 300; + + const exit = {} as any; // Replace with actual Transition mock + const update = { + nodes: jest.fn(() => getNodes(2000)), + end: jest.fn(() => Promise.resolve()), + } as any; // Replace with actual Transition mock + + await progressiveCanvasRenderLoop(canvas, width, height, exit, update); + + d3.timerFlush(); + d3.timerFlush(); + + expect(renderElements).toHaveBeenCalledTimes(2); // Make sure renderElements was called + }); +}); diff --git a/packages/react/src/lib/hooks/useArray.unit.ts b/packages/react/src/lib/hooks/useArray.unit.ts new file mode 100644 index 00000000..604c600d --- /dev/null +++ b/packages/react/src/lib/hooks/useArray.unit.ts @@ -0,0 +1,40 @@ +import { renderHook } from "@testing-library/react-hooks"; +import { useArray } from "./useArray"; // Replace 'your-module' with the actual path to the module containing the useArray hook. + +describe("useArray", () => { + test("should return an empty array when input is null", () => { + const { result } = renderHook(() => useArray(null)); + expect(result.current).toEqual([]); + }); + + test("should return an empty array when input is undefined", () => { + const { result } = renderHook(() => useArray(undefined)); + expect(result.current).toEqual([]); + }); + + test("should return an array with a single string when input is a string", () => { + const { result } = renderHook(() => useArray("test")); + expect(result.current).toEqual(["test"]); + }); + + test("should return the same array when input is already an array", () => { + const input = ["test1", "test2"]; + const { result, rerender } = renderHook(() => useArray(input)); + + // Re-render with the same input should return the same array reference + rerender(); + expect(result.current).toBe(input); + }); + + test("should return a new array reference when input changes", () => { + const input = ["test1", "test2"]; + const { result, rerender } = renderHook((props) => useArray(props), { + initialProps: input, + }); + + // Re-render with a different input should return a new array reference + rerender(["test3", "test4"]); + expect(result.current).toEqual(["test3", "test4"]); + expect(result.current).not.toBe(input); + }); +}); diff --git a/packages/react/src/lib/store/chart/chartActions.ts b/packages/react/src/lib/store/chart/chartActions.ts index 0e26ec32..6936e3b8 100644 --- a/packages/react/src/lib/store/chart/chartActions.ts +++ b/packages/react/src/lib/store/chart/chartActions.ts @@ -115,17 +115,6 @@ const setBrushRange = (field: string, range: number[]): SetBrushRangeAction => ( payload: { field, range }, }); -/** - * Reserves some space for the brush to be rendered on the chart - * @param width The amount of space that needs reserving in the width for the brush - * @param height The amount of space that needs reserving in the height for the brush - * @return A redux action object - */ -const setBrushReservedDimensions = (width: number, height: number): SetBrushReservedDimensionsAction => ({ - type: "CHART.SET_BRUSH_RESERVED_DIMENSIONS", - payload: { width, height }, -}); - /** * Zooms a particular scale to the given domain * @param field The names of the field to zoom the scale for @@ -235,7 +224,6 @@ const chartActions = { setBrushRange, setScaleZoom, setChartID, - setBrushReservedDimensions, }; export { chartActions }; diff --git a/packages/react/src/lib/store/chart/tests/__snapshots__/chartActions.unit.ts.snap b/packages/react/src/lib/store/chart/tests/__snapshots__/chartActions.unit.ts.snap index 99ca4086..ce859d1e 100644 --- a/packages/react/src/lib/store/chart/tests/__snapshots__/chartActions.unit.ts.snap +++ b/packages/react/src/lib/store/chart/tests/__snapshots__/chartActions.unit.ts.snap @@ -1,5 +1,7 @@ // Jest Snapshot v1, https://goo.gl/fbAQLP +exports[`chartActions setBrushDimensions warns with invalid margin 1`] = `"@chart-io/react encountered an warning. W005: The top of the margin was not specified and is required. You can read more about this https://ipwright83.github.io/chart-io/?path=/docs/errors-warnings-warnings-W005."`; + exports[`chartActions setDimensions warns with invalid margin 1`] = `"@chart-io/react encountered an warning. W005: The top of the margin was not specified and is required. You can read more about this https://ipwright83.github.io/chart-io/?path=/docs/errors-warnings-warnings-W005."`; exports[`chartActions setDimensions warns with no margin 1`] = `"@chart-io/react encountered an warning. W004: A margin was not provided but is required. You can read more about this https://ipwright83.github.io/chart-io/?path=/docs/errors-warnings-warnings-W004."`; diff --git a/packages/react/src/lib/store/chart/tests/chartActions.unit.ts b/packages/react/src/lib/store/chart/tests/chartActions.unit.ts index 03683e21..58611861 100644 --- a/packages/react/src/lib/store/chart/tests/chartActions.unit.ts +++ b/packages/react/src/lib/store/chart/tests/chartActions.unit.ts @@ -79,13 +79,29 @@ describe("chartActions", () => { }); }); - it("setBrushReservedDimensions", () => { - expect(chartActions.setBrushReservedDimensions(25, 75)).toEqual({ - type: "CHART.SET_BRUSH_RESERVED_DIMENSIONS", - payload: { - width: 25, - height: 75, - }, + describe("setBrushDimensions", () => { + it("returns correct action", () => { + const width = 1000; + const height = 500; + const margin = { top: 10, left: 10, right: 10, bottom: 10 }; + + expect(chartActions.setBrushDimensions(width, height, margin)).toEqual({ + type: "CHART.SET_BRUSH_DIMENSIONS", + payload: { width, height, margin }, + }); + }); + + it("warns with invalid margin", () => { + const width = 1000; + const height = 500; + const margin = { left: 10, right: 10, bottom: 10 }; + + const spy = jest.spyOn(console, "warn").mockImplementation(); + + // @ts-expect-error: Checking runtime validation + expect(chartActions.setBrushDimensions(width, height, margin)).toBeUndefined(); + + expect(spy.mock.calls[0][0]).toMatchSnapshot(); }); }); diff --git a/packages/react/src/lib/utils/utils.unit.ts b/packages/react/src/lib/utils/utils.unit.ts index e5d4353a..34f78af6 100644 --- a/packages/react/src/lib/utils/utils.unit.ts +++ b/packages/react/src/lib/utils/utils.unit.ts @@ -43,6 +43,16 @@ describe("utils", () => { offset: 23, }); }); + + it("should return no bandwidth and offset if there aren't enough data points to calculate", () => { + const scale = d3.scaleLinear().domain([0, 100]).range([0, 100]); + const data = [{ x: 0 }]; + + expect(getBandwidthAndOffset(scale, "x", data)).toEqual({ + bandwidth: 0, + offset: 0, + }); + }); }); describe("isNullOrUndefined", () => { diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 74a14f5f..49cfeec5 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -277,6 +277,9 @@ importers: '@testing-library/react': specifier: ^13.3.0 version: 13.4.0(react-dom@18.2.0)(react@18.2.0) + '@testing-library/react-hooks': + specifier: ^8.0.1 + version: 8.0.1(react-dom@18.2.0)(react-test-renderer@18.2.0)(react@18.2.0) '@testing-library/user-event': specifier: ^13.5.0 version: 13.5.0(@testing-library/dom@9.0.0) @@ -3927,7 +3930,7 @@ packages: dependencies: '@storybook/client-logger': 7.0.0-beta.54 '@storybook/core-events': 7.0.0-beta.54 - '@storybook/csf': 0.0.2-next.11 + '@storybook/csf': 0.1.1-next.0 '@storybook/global': 5.0.0 '@storybook/manager-api': 7.0.0-beta.54(react-dom@18.2.0)(react@18.2.0) '@storybook/preview-api': 7.0.0-beta.54 @@ -4048,7 +4051,7 @@ packages: '@storybook/client-logger': 7.0.0-beta.54 '@storybook/components': 7.0.0-beta.54(react-dom@18.2.0)(react@18.2.0) '@storybook/core-events': 7.0.0-beta.54 - '@storybook/csf': 0.0.2-next.11 + '@storybook/csf': 0.1.1-next.0 '@storybook/docs-tools': 7.0.0-beta.54 '@storybook/global': 5.0.0 '@storybook/manager-api': 7.0.0-beta.54(react-dom@18.2.0)(react@18.2.0) @@ -4150,16 +4153,11 @@ packages: telejson: 7.0.4 dev: true - /@storybook/channel-postmessage@7.1.0-alpha.24: - resolution: {integrity: sha512-Mb9ZJkmuNbmkE/16L0HWfTAlv0qmehMpDoPPTiykJMh7U0S5ks/4n7H1RWoN8zrUthi7Fhw2nKsFleroQ1k+Sw==} + /@storybook/channel-postmessage@7.1.0-rc.2: + resolution: {integrity: sha512-XQQFN9xYdUwAdWcQopBaNPkj65bSwyBsGEDKFQd1zvwvEv4QKiMWqQVnx84yXfEUu9b4jVolyyB5tQGLS4/6Fw==} dependencies: - '@storybook/channels': 7.1.0-alpha.24 - '@storybook/client-logger': 7.1.0-alpha.24 - '@storybook/core-events': 7.1.0-alpha.24 - '@storybook/global': 5.0.0 - qs: 6.11.0 - telejson: 7.0.4 - tiny-invariant: 1.3.1 + '@storybook/channels': 7.1.0-rc.2 + '@storybook/client-logger': 7.1.0-rc.2 dev: true /@storybook/channel-websocket@7.0.0-beta.54: @@ -4175,8 +4173,15 @@ packages: resolution: {integrity: sha512-CXV3koGjshDZvRrQ4Ck44vBbarMVtiFW9MeBrXaCW7/dElKTYEH8WBiGkqHuna9Pio5ZlVDGVzxn9JqN5J6bKA==} dev: true - /@storybook/channels@7.1.0-alpha.24: - resolution: {integrity: sha512-r5yG9IIdwbJgNwEV8n/yRDtA/227Vy6KIC4TkXt3m/hPlSo2qtyat3RivWL4JKUJRqKnujSRJRPtA4Y9xHV3VA==} + /@storybook/channels@7.1.0-rc.2: + resolution: {integrity: sha512-P9u0l5T0N2zMo387f0+eRBZ29Jg2+mfalBcsvTs2TYR9Kb/plQlEXhvIRxJm3W/OeEvS2vxixN2YOFeZGWlUYg==} + dependencies: + '@storybook/client-logger': 7.1.0-rc.2 + '@storybook/core-events': 7.1.0-rc.2 + '@storybook/global': 5.0.0 + qs: 6.11.0 + telejson: 7.0.4 + tiny-invariant: 1.3.1 dev: true /@storybook/cli@7.0.0-beta.54: @@ -4234,8 +4239,8 @@ packages: '@storybook/global': 5.0.0 dev: true - /@storybook/client-logger@7.1.0-alpha.24: - resolution: {integrity: sha512-KkLNarpchvRDeIceChxWzdaS3gl0WRERVZVn5G9i9DjlPisC09/l26xA2MAJ73NC3ZoaiXfIBHjvgIoNUVYSog==} + /@storybook/client-logger@7.1.0-rc.2: + resolution: {integrity: sha512-O0JLRCFrL7YLMd8sBHdLCqbJBLxW8nCrj7cOwkxt1HY73vy4u/VRujmVZbElaG5QJIoZNUZERyL+oSChthKWlg==} dependencies: '@storybook/global': 5.0.0 dev: true @@ -4246,7 +4251,7 @@ packages: '@babel/core': 7.21.0 '@babel/preset-env': 7.20.2(@babel/core@7.21.0) '@babel/types': 7.21.2 - '@storybook/csf': 0.0.2-next.11 + '@storybook/csf': 0.1.1-next.0 '@storybook/csf-tools': 7.0.0-beta.54 '@storybook/node-logger': 7.0.0-beta.54 '@storybook/types': 7.0.0-beta.54 @@ -4268,7 +4273,7 @@ packages: react-dom: ^16.8.0 || ^17.0.0 || ^18.0.0 dependencies: '@storybook/client-logger': 7.0.0-beta.54 - '@storybook/csf': 0.0.2-next.11 + '@storybook/csf': 0.1.1-next.0 '@storybook/global': 5.0.0 '@storybook/theming': 7.0.0-beta.54(react-dom@18.2.0)(react@18.2.0) '@storybook/types': 7.0.0-beta.54 @@ -4317,8 +4322,8 @@ packages: resolution: {integrity: sha512-/YDjgPHKqdkbB9+jTv3zKjNDRy0gZnVeFfXyS9jCXj4D0K1pYwzkttHAT/xEu6qFeCI8A8wwEgIh6+0t3xfL9g==} dev: true - /@storybook/core-events@7.1.0-alpha.24: - resolution: {integrity: sha512-UgXeEKIcSGKDvebn7lhMbhiakKOSlZuNSaou4zsWM88gTJR2VpEe3CqARGdApPnlzanekLAvEAdwBIAFu1MP0w==} + /@storybook/core-events@7.1.0-rc.2: + resolution: {integrity: sha512-qoYLet2G2vNxpVKPTqLovGNoNSNjID7V2vk9hdUis51osOiVHlgJwXxkz33fUOI18y1JbYoVRM8LZaFaMHGF2g==} dev: true /@storybook/core-server@7.0.0-beta.54: @@ -4329,7 +4334,7 @@ packages: '@storybook/builder-manager': 7.0.0-beta.54 '@storybook/core-common': 7.0.0-beta.54 '@storybook/core-events': 7.0.0-beta.54 - '@storybook/csf': 0.0.2-next.11 + '@storybook/csf': 0.1.1-next.0 '@storybook/csf-tools': 7.0.0-beta.54 '@storybook/docs-mdx': 0.0.1-next.7 '@storybook/global': 5.0.0 @@ -4385,7 +4390,7 @@ packages: resolution: {integrity: sha512-3HynJ04Rav9h6uopE5RzOv8q6WMbu+HpK/NpwY4Dc+cGKsV6theunOEV89jD8SmplTn0kNeLIM439V7fwwrmkQ==} dependencies: '@babel/types': 7.21.2 - '@storybook/csf': 0.0.2-next.11 + '@storybook/csf': 0.1.1-next.0 '@storybook/types': 7.0.0-beta.54 fs-extra: 11.1.0 recast: 0.23.1 @@ -4398,14 +4403,14 @@ packages: lodash: 4.17.21 dev: true - /@storybook/csf@0.0.2-next.11: - resolution: {integrity: sha512-xGt0YSVxZb43sKmEf1GIQD8xEbo+c+S6khDEL7Qu/pYA0gh5z3WUuhOlovnelYj/YJod+XRsfVvk23AaRfUJ4Q==} + /@storybook/csf@0.1.0: + resolution: {integrity: sha512-uk+jMXCZ8t38jSTHk2o5btI+aV2Ksbvl6DoOv3r6VaCM1KZqeuMwtwywIQdflkA8/6q/dKT8z8L+g8hC4GC3VQ==} dependencies: type-fest: 2.19.0 dev: true - /@storybook/csf@0.1.0: - resolution: {integrity: sha512-uk+jMXCZ8t38jSTHk2o5btI+aV2Ksbvl6DoOv3r6VaCM1KZqeuMwtwywIQdflkA8/6q/dKT8z8L+g8hC4GC3VQ==} + /@storybook/csf@0.1.1-next.0: + resolution: {integrity: sha512-2M8E4CZOVW77P9lrgZZc2rcwxhNKVVykpzbcAauc3bots7xvDJMG60EasMRB/Y+cfqnSu6aaSUEVmKHTKsVJ3A==} dependencies: type-fest: 2.19.0 dev: true @@ -4442,14 +4447,14 @@ packages: '@storybook/preview-api': 7.0.0-beta.54 dev: true - /@storybook/instrumenter@7.1.0-alpha.24: - resolution: {integrity: sha512-IpmICGj31bcvw07x4uyBwb2Jp4YL9bj2X97LVTaT81d95G+SAIU3ILy6Cce9yUfcw8UwQNKuyFubs4eBd/WtjQ==} + /@storybook/instrumenter@7.1.0-rc.2: + resolution: {integrity: sha512-xmtSNDfSWRkaMIcAlm3ga6ZjHoZgs0xBR3wEgDBtcygaWewvTtuBK4MxgT5NpJjPxGpjVakzjxGoITLQgrk0Kw==} dependencies: - '@storybook/channels': 7.1.0-alpha.24 - '@storybook/client-logger': 7.1.0-alpha.24 - '@storybook/core-events': 7.1.0-alpha.24 + '@storybook/channels': 7.1.0-rc.2 + '@storybook/client-logger': 7.1.0-rc.2 + '@storybook/core-events': 7.1.0-rc.2 '@storybook/global': 5.0.0 - '@storybook/preview-api': 7.1.0-alpha.24 + '@storybook/preview-api': 7.1.0-rc.2 dev: true /@storybook/manager-api@7.0.0-beta.54(react-dom@18.2.0)(react@18.2.0): @@ -4461,7 +4466,7 @@ packages: '@storybook/channels': 7.0.0-beta.54 '@storybook/client-logger': 7.0.0-beta.54 '@storybook/core-events': 7.0.0-beta.54 - '@storybook/csf': 0.0.2-next.11 + '@storybook/csf': 0.1.1-next.0 '@storybook/global': 5.0.0 '@storybook/router': 7.0.0-beta.54(react-dom@18.2.0)(react@18.2.0) '@storybook/theming': 7.0.0-beta.54(react-dom@18.2.0)(react@18.2.0) @@ -4514,7 +4519,7 @@ packages: '@storybook/channels': 7.0.0-beta.54 '@storybook/client-logger': 7.0.0-beta.54 '@storybook/core-events': 7.0.0-beta.54 - '@storybook/csf': 0.0.2-next.11 + '@storybook/csf': 0.1.1-next.0 '@storybook/global': 5.0.0 '@storybook/types': 7.0.0-beta.54 '@types/qs': 6.9.7 @@ -4528,16 +4533,16 @@ packages: util-deprecate: 1.0.2 dev: true - /@storybook/preview-api@7.1.0-alpha.24: - resolution: {integrity: sha512-CP4QSg5Mh/9NvV01jLdAWR97YJuojyImOWIXNuCVh76K3PJz0e1NT8Y7LdeP9xFF84JRLEVBZfF/Eq04k+ZZoQ==} + /@storybook/preview-api@7.1.0-rc.2: + resolution: {integrity: sha512-E+X5I1BzFF5aTmclkmoVBYQB+JMx1SUCdkzl+GGX9Wxh5JmyTQDI90ynv0k1aJNvPmC5mS2EMmeqcYoz+AuYZA==} dependencies: - '@storybook/channel-postmessage': 7.1.0-alpha.24 - '@storybook/channels': 7.1.0-alpha.24 - '@storybook/client-logger': 7.1.0-alpha.24 - '@storybook/core-events': 7.1.0-alpha.24 + '@storybook/channel-postmessage': 7.1.0-rc.2 + '@storybook/channels': 7.1.0-rc.2 + '@storybook/client-logger': 7.1.0-rc.2 + '@storybook/core-events': 7.1.0-rc.2 '@storybook/csf': 0.1.0 '@storybook/global': 5.0.0 - '@storybook/types': 7.1.0-alpha.24 + '@storybook/types': 7.1.0-rc.2 '@types/qs': 6.9.7 dequal: 2.0.3 lodash: 4.17.21 @@ -4661,8 +4666,8 @@ packages: /@storybook/testing-library@0.0.14-next.1: resolution: {integrity: sha512-1CAl40IKIhcPaCC4pYCG0b9IiYNymktfV/jTrX7ctquRY3akaN7f4A1SippVHosksft0M+rQTFE0ccfWW581fw==} dependencies: - '@storybook/client-logger': 7.1.0-alpha.24 - '@storybook/instrumenter': 7.1.0-alpha.24 + '@storybook/client-logger': 7.1.0-rc.2 + '@storybook/instrumenter': 7.1.0-rc.2 '@testing-library/dom': 8.19.0 '@testing-library/user-event': 13.5.0(@testing-library/dom@8.19.0) ts-dedent: 2.2.0 @@ -4691,13 +4696,13 @@ packages: file-system-cache: 2.0.2 dev: true - /@storybook/types@7.1.0-alpha.24: - resolution: {integrity: sha512-nk0iQV3Zo6KglWeVQVyxg11OkSDaNzR86O93oQfGFS9gpdWt3x5E8ZtWKc0ZDv8VkUlVH9uaCmo2xHbC9dJjUA==} + /@storybook/types@7.1.0-rc.2: + resolution: {integrity: sha512-pd19JdNEE+yuqBNlvk61423ZWQHrbsVafEmiJLD0wL4oWBZts7dijZPYiyrw+Fhw/EuXWsLg0edizBk2Id+JmA==} dependencies: - '@storybook/channels': 7.1.0-alpha.24 + '@storybook/channels': 7.1.0-rc.2 '@types/babel__core': 7.20.0 '@types/express': 4.17.17 - file-system-cache: 2.0.2 + file-system-cache: 2.3.0 dev: true /@surma/rollup-plugin-off-main-thread@2.2.3: @@ -4936,7 +4941,7 @@ packages: engines: {node: '>=12'} dependencies: '@babel/code-frame': 7.18.6 - '@babel/runtime': 7.20.13 + '@babel/runtime': 7.21.0 '@types/aria-query': 4.2.2 aria-query: 5.1.3 chalk: 4.1.2 @@ -4971,6 +4976,29 @@ packages: lodash: 4.17.21 redent: 3.0.0 + /@testing-library/react-hooks@8.0.1(react-dom@18.2.0)(react-test-renderer@18.2.0)(react@18.2.0): + resolution: {integrity: sha512-Aqhl2IVmLt8IovEVarNDFuJDVWVvhnr9/GCU6UUnrYXwgDFF9h2L2o2P9KBni1AST5sT6riAyoukFLyjQUgD/g==} + engines: {node: '>=12'} + peerDependencies: + '@types/react': ^16.9.0 || ^17.0.0 + react: ^16.9.0 || ^17.0.0 + react-dom: ^16.9.0 || ^17.0.0 + react-test-renderer: ^16.9.0 || ^17.0.0 + peerDependenciesMeta: + '@types/react': + optional: true + react-dom: + optional: true + react-test-renderer: + optional: true + dependencies: + '@babel/runtime': 7.21.0 + react: 18.2.0 + react-dom: 18.2.0(react@18.2.0) + react-error-boundary: 3.1.4(react@18.2.0) + react-test-renderer: 18.2.0(react@18.2.0) + dev: true + /@testing-library/react@13.4.0(react-dom@18.2.0)(react@18.2.0): resolution: {integrity: sha512-sXOGON+WNTh3MLE9rve97ftaZukN3oNf2KjDy7YTx6hcTO2uuLHuCGynMDhFwGw/jYf4OJ2Qk0i4i79qMNNkyw==} engines: {node: '>=12'} @@ -9430,6 +9458,13 @@ packages: ramda: 0.28.0 dev: true + /file-system-cache@2.3.0: + resolution: {integrity: sha512-l4DMNdsIPsVnKrgEXbJwDJsA5mB8rGwHYERMgqQx/xAUtChPJMre1bXBzDEqqVbWv9AIbFezXMxeEkZDSrXUOQ==} + dependencies: + fs-extra: 11.1.1 + ramda: 0.29.0 + dev: true + /filelist@1.0.4: resolution: {integrity: sha512-w1cEuf3S+DrLCQL7ET6kz+gmlJdbq9J7yXCSjK/OZCPA+qEN1WyF4ZAf0YYJa4/shHJra2t/d/r8SV4Ji+x+8Q==} dependencies: @@ -9632,6 +9667,15 @@ packages: universalify: 2.0.0 dev: true + /fs-extra@11.1.1: + resolution: {integrity: sha512-MGIE4HOvQCeUCzmlHs0vXpih4ysz4wg9qiSAu6cd42lVwPbTM1TjV7RusoyQqMmk/95gdQZX72u+YW+c3eEpFQ==} + engines: {node: '>=14.14'} + dependencies: + graceful-fs: 4.2.10 + jsonfile: 6.1.0 + universalify: 2.0.0 + dev: true + /fs-extra@7.0.1: resolution: {integrity: sha512-YJDaCJZEnBmcbw13fvdAM9AwNOJwOzrE4pqMqBq5nFiEqXUqHwlK4B+3pUw6JNvfSPtX05xFHtYy/1ni01eGCw==} engines: {node: '>=6 <7 || >=8'} @@ -14995,6 +15039,10 @@ packages: resolution: {integrity: sha512-9QnLuG/kPVgWvMQ4aODhsBUFKOUmnbUnsSXACv+NCQZcHbeb+v8Lodp8OVxtRULN1/xOyYLLaL6npE6dMq5QTA==} dev: true + /ramda@0.29.0: + resolution: {integrity: sha512-BBea6L67bYLtdbOqfp8f58fPMqEwx0doL+pAi8TZyp2YWz8R9G8z9x75CZI8W+ftqhFHCpEX2cRnUUXK130iKA==} + dev: true + /randombytes@2.1.0: resolution: {integrity: sha512-vYl3iOX+4CKUWuxGi9Ukhie6fsqXqS9FE2Zaic4tNFD2N2QQaXOMFbuKK4QmDHC0JO6B1Zp41J0LpT0oR68amQ==} dependencies: @@ -15127,6 +15175,16 @@ packages: react-is: 18.1.0 dev: true + /react-error-boundary@3.1.4(react@18.2.0): + resolution: {integrity: sha512-uM9uPzZJTF6wRQORmSrvOIgt4lJ9MC1sNgEOj2XGsDTRE4kmpWxg7ENK9EWNKJRMAOY9z0MuF4yIfl6gp4sotA==} + engines: {node: '>=10', npm: '>=6'} + peerDependencies: + react: '>=16.13.1' + dependencies: + '@babel/runtime': 7.21.0 + react: 18.2.0 + dev: true + /react-error-overlay@6.0.11: resolution: {integrity: sha512-/6UZ2qgEyH2aqzYZgQPxEnz33NJ2gNsnHA2o5+o4wW9bLM/JYQitNP9xPhsXwC08hMMovfGe/8retsdDsczPRg==} dev: false