From abcb29c758c18104ecff15c6cf5d4f98cea2be6e Mon Sep 17 00:00:00 2001 From: An Phi Date: Wed, 18 Dec 2024 01:02:36 -0500 Subject: [PATCH] infra: remove react-resize-detector --- .changeset/fair-experts-cross.md | 45 +++++ packages/eslint-plugin/package.json | 4 +- .../package.json | 2 +- .../legend-application-data-cube/package.json | 2 +- .../package.json | 2 +- .../package.json | 2 +- .../package.json | 2 +- packages/legend-art/package.json | 3 +- packages/legend-art/src/Interaction.ts | 23 --- packages/legend-art/src/index.ts | 2 - .../src/layout/BlankPanelContent.tsx | 2 +- .../src/layout/BlankPanelPlaceholder.tsx | 2 +- .../legend-art/src/utils/ComponentUtils.ts | 147 ++++++++++++++- .../legend-dev-utils/WebpackConfigUtils.js | 5 - .../__tests__/QueryBuilderResultPanel.test.ts | 2 +- .../package.json | 2 +- scripts/test/jest.config.base.js | 3 - yarn.lock | 170 ++++++++---------- 18 files changed, 277 insertions(+), 143 deletions(-) create mode 100644 .changeset/fair-experts-cross.md delete mode 100644 packages/legend-art/src/Interaction.ts diff --git a/.changeset/fair-experts-cross.md b/.changeset/fair-experts-cross.md new file mode 100644 index 00000000000..dd67ebfcd89 --- /dev/null +++ b/.changeset/fair-experts-cross.md @@ -0,0 +1,45 @@ +--- +'@finos/legend-application-data-cube-deployment': patch +'@finos/legend-application-data-cube-bootstrap': patch +'@finos/legend-application-pure-ide-deployment': patch +'@finos/legend-extension-dsl-data-space-studio': patch +'@finos/legend-application-studio-deployment': patch +'@finos/legend-extension-store-service-store': patch +'@finos/legend-vscode-extension-dependencies': patch +'@finos/legend-application-query-deployment': patch +'@finos/legend-application-studio-bootstrap': patch +'@finos/legend-application-query-bootstrap': patch +'@finos/legend-application-repl-deployment': patch +'@finos/legend-extension-dsl-data-quality': patch +'@finos/legend-extension-store-relational': patch +'@finos/legend-server-showcase-deployment': patch +'@finos/legend-extension-dsl-persistence': patch +'@finos/legend-extension-store-flat-data': patch +'@finos/legend-extension-dsl-data-space': patch +'@finos/legend-extension-tracer-zipkin': patch +'@finos/legend-application-data-cube': patch +'@finos/legend-extension-dsl-diagram': patch +'@finos/legend-extension-dsl-service': patch +'@finos/legend-application-pure-ide': patch +'@finos/legend-extension-assortment': patch +'@finos/legend-application-studio': patch +'@finos/legend-extension-dsl-text': patch +'@finos/legend-application-query': patch +'@finos/legend-application-repl': patch +'@finos/legend-server-showcase': patch +'@finos/legend-query-builder': patch +'@finos/legend-server-depot': patch +'@finos/legend-application': patch +'@finos/legend-code-editor': patch +'@finos/legend-server-sdlc': patch +'@finos/legend-data-cube': patch +'@finos/legend-dev-utils': patch +'@finos/stylelint-config-legend-studio': patch +'@finos/legend-storage': patch +'@finos/eslint-plugin-legend-studio': patch +'@finos/legend-shared': patch +'@finos/babel-preset-legend-studio': patch +'@finos/legend-graph': patch +'@finos/legend-lego': patch +'@finos/legend-art': patch +--- diff --git a/packages/eslint-plugin/package.json b/packages/eslint-plugin/package.json index c66420eecdb..b38f3f53420 100644 --- a/packages/eslint-plugin/package.json +++ b/packages/eslint-plugin/package.json @@ -33,8 +33,8 @@ "@babel/core": "7.26.0", "@babel/eslint-parser": "7.25.9", "@eslint/js": "9.17.0", - "@typescript-eslint/eslint-plugin": "8.18.0", - "@typescript-eslint/parser": "8.18.0", + "@typescript-eslint/eslint-plugin": "8.18.1", + "@typescript-eslint/parser": "8.18.1", "eslint": "9.17.0", "eslint-config-prettier": "9.1.0", "eslint-plugin-import": "2.31.0", diff --git a/packages/legend-application-data-cube-deployment/package.json b/packages/legend-application-data-cube-deployment/package.json index 1dafe7ce69c..83cb8acfe3e 100644 --- a/packages/legend-application-data-cube-deployment/package.json +++ b/packages/legend-application-data-cube-deployment/package.json @@ -45,7 +45,7 @@ "eslint": "9.17.0", "npm-run-all": "4.1.5", "rimraf": "6.0.1", - "tailwindcss": "3.4.16", + "tailwindcss": "3.4.17", "typescript": "5.7.2", "webpack": "5.97.1", "webpack-bundle-analyzer": "4.10.2", diff --git a/packages/legend-application-data-cube/package.json b/packages/legend-application-data-cube/package.json index 8ce9f95616c..4dbbd1ab3ac 100644 --- a/packages/legend-application-data-cube/package.json +++ b/packages/legend-application-data-cube/package.json @@ -70,7 +70,7 @@ "typescript": "5.7.2" }, "peerDependencies": { - "react": "^18.0.0" + "react": "^19.0.0" }, "publishConfig": { "directory": "build/publishContent" diff --git a/packages/legend-application-query-deployment/package.json b/packages/legend-application-query-deployment/package.json index 07933b3d025..2960c1eefd0 100644 --- a/packages/legend-application-query-deployment/package.json +++ b/packages/legend-application-query-deployment/package.json @@ -45,7 +45,7 @@ "eslint": "9.17.0", "npm-run-all": "4.1.5", "rimraf": "6.0.1", - "tailwindcss": "3.4.16", + "tailwindcss": "3.4.17", "typescript": "5.7.2", "webpack": "5.97.1", "webpack-bundle-analyzer": "4.10.2", diff --git a/packages/legend-application-repl-deployment/package.json b/packages/legend-application-repl-deployment/package.json index 236b6c1c675..0f5455533ff 100644 --- a/packages/legend-application-repl-deployment/package.json +++ b/packages/legend-application-repl-deployment/package.json @@ -51,7 +51,7 @@ "eslint": "9.17.0", "npm-run-all": "4.1.5", "rimraf": "6.0.1", - "tailwindcss": "3.4.16", + "tailwindcss": "3.4.17", "typescript": "5.7.2", "webpack": "5.97.1", "webpack-bundle-analyzer": "4.10.2", diff --git a/packages/legend-application-studio-deployment/package.json b/packages/legend-application-studio-deployment/package.json index a2277a5c80c..4f2a759ff0f 100644 --- a/packages/legend-application-studio-deployment/package.json +++ b/packages/legend-application-studio-deployment/package.json @@ -45,7 +45,7 @@ "eslint": "9.17.0", "npm-run-all": "4.1.5", "rimraf": "6.0.1", - "tailwindcss": "3.4.16", + "tailwindcss": "3.4.17", "typescript": "5.7.2", "webpack": "5.97.1", "webpack-bundle-analyzer": "4.10.2", diff --git a/packages/legend-art/package.json b/packages/legend-art/package.json index d0414857410..26c87e07435 100644 --- a/packages/legend-art/package.json +++ b/packages/legend-art/package.json @@ -76,9 +76,8 @@ "react-draggable": "4.4.6", "react-icons": "5.4.0", "react-markdown": "9.0.1", - "react-reflex": "4.2.6", + "react-reflex": "4.2.7", "react-resizable": "3.0.5", - "react-resize-detector": "12.0.1", "react-rnd": "10.4.13", "react-select": "5.9.0", "react-window": "1.8.11", diff --git a/packages/legend-art/src/Interaction.ts b/packages/legend-art/src/Interaction.ts deleted file mode 100644 index 33b2a642555..00000000000 --- a/packages/legend-art/src/Interaction.ts +++ /dev/null @@ -1,23 +0,0 @@ -/** - * Copyright (c) 2020-present, Goldman Sachs - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -import Draggable from 'react-draggable'; -import { Resizable, ResizableBox } from 'react-resizable'; -import { Rnd } from 'react-rnd'; - -export { Draggable }; -export { Resizable, ResizableBox }; -export { Rnd as ResizableAndDraggableBox }; diff --git a/packages/legend-art/src/index.ts b/packages/legend-art/src/index.ts index e0f394a581e..01de0b64db1 100644 --- a/packages/legend-art/src/index.ts +++ b/packages/legend-art/src/index.ts @@ -78,7 +78,5 @@ export * from './utils/ComponentUtils.js'; export * from './markdown/MarkdownTextViewer.js'; -export * from './Interaction.js'; - export * from './color/TailwindCSSPalette.js'; export * from './color/ColorPicker.js'; diff --git a/packages/legend-art/src/layout/BlankPanelContent.tsx b/packages/legend-art/src/layout/BlankPanelContent.tsx index 640d296326d..771f6d86f2c 100644 --- a/packages/legend-art/src/layout/BlankPanelContent.tsx +++ b/packages/legend-art/src/layout/BlankPanelContent.tsx @@ -15,7 +15,7 @@ */ import { useEffect, useState } from 'react'; -import { useResizeDetector } from 'react-resize-detector'; +import { useResizeDetector } from '../utils/ComponentUtils.js'; import { clsx } from 'clsx'; const DEFAULT_CONTENT_PADDING = 20; diff --git a/packages/legend-art/src/layout/BlankPanelPlaceholder.tsx b/packages/legend-art/src/layout/BlankPanelPlaceholder.tsx index 242c774d967..74a3722aff8 100644 --- a/packages/legend-art/src/layout/BlankPanelPlaceholder.tsx +++ b/packages/legend-art/src/layout/BlankPanelPlaceholder.tsx @@ -16,7 +16,7 @@ import { useEffect, useState } from 'react'; import { VerticalAlignBottomIcon, AddIcon, EditIcon } from '../icon/Icon.js'; -import { useResizeDetector } from 'react-resize-detector'; +import { useResizeDetector } from '../utils/ComponentUtils.js'; import { BlankPanelContent } from './BlankPanelContent.js'; import { clsx } from 'clsx'; diff --git a/packages/legend-art/src/utils/ComponentUtils.ts b/packages/legend-art/src/utils/ComponentUtils.ts index e29b34c97c3..f07cc93d928 100644 --- a/packages/legend-art/src/utils/ComponentUtils.ts +++ b/packages/legend-art/src/utils/ComponentUtils.ts @@ -14,20 +14,28 @@ * limitations under the License. */ -import { useState, useEffect } from 'react'; +import { useState, useEffect, useRef, useCallback, useMemo } from 'react'; import { clsx, type ClassValue } from 'clsx'; import { twMerge } from 'tailwind-merge'; +import Draggable from 'react-draggable'; +import { Resizable, ResizableBox } from 'react-resizable'; +import { Rnd } from 'react-rnd'; +import { debounce, throttle, type DebouncedFunc } from '@finos/legend-shared'; export { clsx, type ClassValue }; export { Portal, useForkRef } from '@mui/material'; export function cn(...inputs: ClassValue[]) { return twMerge(clsx(inputs)); } +export { Global, css } from '@emotion/react'; +export { Draggable }; +export { Resizable, ResizableBox }; +export { Rnd as ResizableAndDraggableBox }; -export { useResizeDetector } from 'react-resize-detector'; - -// React `setState` used to come with a callback that runs after the state is updated -// See https://www.robinwieruch.de/react-usestate-callback +/** + * React `setState` used to come with a callback that runs after the state is updated + * See https://www.robinwieruch.de/react-usestate-callback + */ export const useStateWithCallback = ( initialState: T, callback: (newState: T) => void, @@ -37,4 +45,131 @@ export const useStateWithCallback = ( return [state, setState]; }; -export { Global, css } from '@emotion/react'; +/** + * Use ResizeObserver to detect size of an element + * Adapted from `react-resize-detector` + * + * See https://github.com/maslianok/react-resize-detector + * See https://developer.mozilla.org/en-US/docs/Web/API/ResizeObserver + */ +export function useResizeDetector< + T extends HTMLElement = HTMLElement, +>(options?: { + /** + * Do not trigger update when a component mounts. + */ + skipOnMount?: boolean; + refreshMode?: 'throttle' | 'debounce'; + refreshRate?: number; + refreshOptions?: { leading?: boolean; trailing?: boolean } | undefined; + /** + * NOTE: Make sure to wrap this with `useCallback` to avoid unnecessary re-renders. + */ + onResize?: + | (( + payload: + | { width: number; height: number; entry: ResizeObserverEntry } + | { width: undefined; height: undefined; entry: undefined }, + ) => void) + | undefined; + targetRef?: React.RefObject | undefined; +}): { + ref: React.RefObject; + width?: number | undefined; + height?: number | undefined; +} { + // If `skipOnMount` is enabled, skip the first resize event + const skipResize = useRef(options?.skipOnMount); + const refreshMode = options?.refreshMode; + const refreshRate = options?.refreshRate ?? 1000; + const refreshOptions = useMemo( + () => ({ + leading: options?.refreshOptions?.leading, + trailing: options?.refreshOptions?.trailing, + }), + [options?.refreshOptions?.leading, options?.refreshOptions?.trailing], + ); + + const [size, setSize] = useState<{ + width: number | undefined; + height: number | undefined; + }>({ + width: undefined, + height: undefined, + }); + const _ref = useRef(null); + const ref = useMemo(() => options?.targetRef ?? _ref, [options?.targetRef]); + + const onResize = options?.onResize; + const resizeCallback = useCallback( + (entries: ResizeObserverEntry[]) => { + if (skipResize.current) { + skipResize.current = false; + return; + } + + entries.forEach((entry) => { + const nextSize = { + width: entry.contentRect.width, + height: entry.contentRect.height, + }; + setSize((prevSize) => { + if ( + prevSize.width === nextSize.width && + prevSize.height === nextSize.height + ) { + return prevSize; + } + onResize?.({ + width: nextSize.width, + height: nextSize.height, + entry, + }); + return nextSize; + }); + }); + }, + [skipResize, onResize], + ); + + // customize refresh behavior + const resizeHandler = useMemo(() => { + switch (refreshMode) { + case 'debounce': + return debounce(resizeCallback, refreshRate, refreshOptions); + case 'throttle': + return throttle(resizeCallback, refreshRate, refreshOptions); + default: + return resizeCallback; + } + }, [resizeCallback, refreshMode, refreshRate, refreshOptions]); + + // attach ResizeObserver to the element + useEffect(() => { + let resizeObserver: ResizeObserver | undefined; + + if (ref.current) { + resizeObserver = new window.ResizeObserver(resizeHandler); + resizeObserver.observe(ref.current); + } else { + // if ref element is not registered, reset the size + onResize?.({ + width: undefined, + height: undefined, + entry: undefined, + }); + setSize({ width: undefined, height: undefined }); + } + + return () => { + resizeObserver?.disconnect(); + if ('cancel' in resizeHandler) { + ( + resizeHandler as unknown as DebouncedFunc + ).cancel(); + } + }; + }, [resizeHandler, onResize, ref]); + + return { ref, ...size }; +} diff --git a/packages/legend-dev-utils/WebpackConfigUtils.js b/packages/legend-dev-utils/WebpackConfigUtils.js index 3a84f97bdd6..62b5c24e853 100644 --- a/packages/legend-dev-utils/WebpackConfigUtils.js +++ b/packages/legend-dev-utils/WebpackConfigUtils.js @@ -296,11 +296,6 @@ export const getWebAppBaseWebpackConfig = ( // Reduce `monaco-editor` bundle size by using ESM bundle which enables tree-shaking // See https://github.com/microsoft/monaco-editor-webpack-plugin/issues/97 'monaco-editor': 'monaco-editor/esm/vs/editor/editor.api.js', - // This is added to handle `react-resize-detector` importing lodash/debounce despite being an ESM module - // (it's probably should be updated to use lodash-es instead) - // TODO: check if this is still needed later - 'lodash/debounce': 'lodash-es/debounce.js', - 'lodash/throttle': 'lodash-es/throttle.js', }, }, devServer: { diff --git a/packages/legend-query-builder/src/components/__tests__/QueryBuilderResultPanel.test.ts b/packages/legend-query-builder/src/components/__tests__/QueryBuilderResultPanel.test.ts index 8abe2e3f862..25bf5204ed3 100644 --- a/packages/legend-query-builder/src/components/__tests__/QueryBuilderResultPanel.test.ts +++ b/packages/legend-query-builder/src/components/__tests__/QueryBuilderResultPanel.test.ts @@ -287,7 +287,7 @@ const testQueryBuilderStateSetup = async (): Promise<{ return { renderResult, queryBuilderState }; }; -test( +test.only( integrationTest('Query Builder Execution Data Incompleteness Warning'), async () => { const { renderResult, queryBuilderState } = diff --git a/packages/legend-vscode-extension-dependencies/package.json b/packages/legend-vscode-extension-dependencies/package.json index 3aa2cdec988..b0da40f458d 100644 --- a/packages/legend-vscode-extension-dependencies/package.json +++ b/packages/legend-vscode-extension-dependencies/package.json @@ -70,7 +70,7 @@ "rollup-plugin-flow": "1.1.1", "rollup-plugin-import-css": "3.5.8", "rollup-plugin-postcss": "4.0.2", - "tailwindcss": "3.4.16", + "tailwindcss": "3.4.17", "typescript": "5.7.2" }, "publishConfig": { diff --git a/scripts/test/jest.config.base.js b/scripts/test/jest.config.base.js index 95287dcb618..e0dbdfe21ee 100644 --- a/scripts/test/jest.config.base.js +++ b/scripts/test/jest.config.base.js @@ -88,9 +88,6 @@ export const getBaseJestConfig = (isGlobal) => { 'ag-grid-community', 'ag-grid-enterprise', - // react-resize-detector - 'react-resize-detector', - // color-parse 'color-parse', 'color-name', diff --git a/yarn.lock b/yarn.lock index b890ef152e2..57050beea28 100644 --- a/yarn.lock +++ b/yarn.lock @@ -2122,8 +2122,8 @@ __metadata: "@babel/core": "npm:7.26.0" "@babel/eslint-parser": "npm:7.25.9" "@eslint/js": "npm:9.17.0" - "@typescript-eslint/eslint-plugin": "npm:8.18.0" - "@typescript-eslint/parser": "npm:8.18.0" + "@typescript-eslint/eslint-plugin": "npm:8.18.1" + "@typescript-eslint/parser": "npm:8.18.1" cross-env: "npm:7.0.3" eslint: "npm:9.17.0" eslint-config-prettier: "npm:9.1.0" @@ -2173,7 +2173,7 @@ __metadata: eslint: "npm:9.17.0" npm-run-all: "npm:4.1.5" rimraf: "npm:6.0.1" - tailwindcss: "npm:3.4.16" + tailwindcss: "npm:3.4.17" typescript: "npm:5.7.2" webpack: "npm:5.97.1" webpack-bundle-analyzer: "npm:4.10.2" @@ -2211,7 +2211,7 @@ __metadata: sass: "npm:1.83.0" typescript: "npm:5.7.2" peerDependencies: - react: ^18.0.0 + react: ^19.0.0 languageName: unknown linkType: soft @@ -2314,7 +2314,7 @@ __metadata: eslint: "npm:9.17.0" npm-run-all: "npm:4.1.5" rimraf: "npm:6.0.1" - tailwindcss: "npm:3.4.16" + tailwindcss: "npm:3.4.17" typescript: "npm:5.7.2" webpack: "npm:5.97.1" webpack-bundle-analyzer: "npm:4.10.2" @@ -2375,7 +2375,7 @@ __metadata: npm-run-all: "npm:4.1.5" react: "npm:19.0.0" rimraf: "npm:6.0.1" - tailwindcss: "npm:3.4.16" + tailwindcss: "npm:3.4.17" typescript: "npm:5.7.2" webpack: "npm:5.97.1" webpack-bundle-analyzer: "npm:4.10.2" @@ -2456,7 +2456,7 @@ __metadata: eslint: "npm:9.17.0" npm-run-all: "npm:4.1.5" rimraf: "npm:6.0.1" - tailwindcss: "npm:3.4.16" + tailwindcss: "npm:3.4.17" typescript: "npm:5.7.2" webpack: "npm:5.97.1" webpack-bundle-analyzer: "npm:4.10.2" @@ -2585,9 +2585,8 @@ __metadata: react-draggable: "npm:4.4.6" react-icons: "npm:5.4.0" react-markdown: "npm:9.0.1" - react-reflex: "npm:4.2.6" + react-reflex: "npm:4.2.7" react-resizable: "npm:3.0.5" - react-resize-detector: "npm:12.0.1" react-rnd: "npm:10.4.13" react-select: "npm:5.9.0" react-window: "npm:1.8.11" @@ -3403,7 +3402,7 @@ __metadata: rollup-plugin-flow: "npm:1.1.1" rollup-plugin-import-css: "npm:3.5.8" rollup-plugin-postcss: "npm:4.0.2" - tailwindcss: "npm:3.4.16" + tailwindcss: "npm:3.4.17" typescript: "npm:5.7.2" languageName: unknown linkType: soft @@ -6035,15 +6034,15 @@ __metadata: languageName: node linkType: hard -"@typescript-eslint/eslint-plugin@npm:8.18.0": - version: 8.18.0 - resolution: "@typescript-eslint/eslint-plugin@npm:8.18.0" +"@typescript-eslint/eslint-plugin@npm:8.18.1": + version: 8.18.1 + resolution: "@typescript-eslint/eslint-plugin@npm:8.18.1" dependencies: "@eslint-community/regexpp": "npm:^4.10.0" - "@typescript-eslint/scope-manager": "npm:8.18.0" - "@typescript-eslint/type-utils": "npm:8.18.0" - "@typescript-eslint/utils": "npm:8.18.0" - "@typescript-eslint/visitor-keys": "npm:8.18.0" + "@typescript-eslint/scope-manager": "npm:8.18.1" + "@typescript-eslint/type-utils": "npm:8.18.1" + "@typescript-eslint/utils": "npm:8.18.1" + "@typescript-eslint/visitor-keys": "npm:8.18.1" graphemer: "npm:^1.4.0" ignore: "npm:^5.3.1" natural-compare: "npm:^1.4.0" @@ -6052,64 +6051,64 @@ __metadata: "@typescript-eslint/parser": ^8.0.0 || ^8.0.0-alpha.0 eslint: ^8.57.0 || ^9.0.0 typescript: ">=4.8.4 <5.8.0" - checksum: 10/fc163212ab626b8880bcc6c166da6e1c907c1e9eac720a217e58bec64af3866dc18e990a15a7dcd9593643f390d921625a89fb235a7e126fbb0a2f52e4abf0f5 + checksum: 10/ec061a9c64477260d1ef0fc6283d8754838181e17aa90b3b8b9a70936a2ca4bae11607070917a7701e13f5301ced2b6da4b4b6e5cf525c484f97481e540b5111 languageName: node linkType: hard -"@typescript-eslint/parser@npm:8.18.0": - version: 8.18.0 - resolution: "@typescript-eslint/parser@npm:8.18.0" +"@typescript-eslint/parser@npm:8.18.1": + version: 8.18.1 + resolution: "@typescript-eslint/parser@npm:8.18.1" dependencies: - "@typescript-eslint/scope-manager": "npm:8.18.0" - "@typescript-eslint/types": "npm:8.18.0" - "@typescript-eslint/typescript-estree": "npm:8.18.0" - "@typescript-eslint/visitor-keys": "npm:8.18.0" + "@typescript-eslint/scope-manager": "npm:8.18.1" + "@typescript-eslint/types": "npm:8.18.1" + "@typescript-eslint/typescript-estree": "npm:8.18.1" + "@typescript-eslint/visitor-keys": "npm:8.18.1" debug: "npm:^4.3.4" peerDependencies: eslint: ^8.57.0 || ^9.0.0 typescript: ">=4.8.4 <5.8.0" - checksum: 10/5f4a1c431868ee677a6a1f55197c26c5c6e528a07fd8d8dee3648697c3617343693709c9f77cba86f8bdc1738c5727f5badfd3a9745f0e0719edb77fd0c01ba3 + checksum: 10/09a601ef8b837962e5bb2687358520f337f9d0bbac5c6d5e159654faa5caaffb24d990e8d6bc4dc51ff5008dd9e182315c35bc5e9e3789090ccef8b8040e7659 languageName: node linkType: hard -"@typescript-eslint/scope-manager@npm:8.18.0": - version: 8.18.0 - resolution: "@typescript-eslint/scope-manager@npm:8.18.0" +"@typescript-eslint/scope-manager@npm:8.18.1": + version: 8.18.1 + resolution: "@typescript-eslint/scope-manager@npm:8.18.1" dependencies: - "@typescript-eslint/types": "npm:8.18.0" - "@typescript-eslint/visitor-keys": "npm:8.18.0" - checksum: 10/869fd569a1f98cd284001062cca501e25ef7079c761242926d3b35454da64e398391ddb9d686adb34bf7bee6446491617b52c54ba54db07ee637ad4ef024d262 + "@typescript-eslint/types": "npm:8.18.1" + "@typescript-eslint/visitor-keys": "npm:8.18.1" + checksum: 10/14f7c09924c3a006b20752e5204b33c2b6974fc00bea16c23f471e65f2fb089fcbd3fb5296bcfd6727ac95c32ba24ebb15ba84fbf1deadc17b4cc5ca7f41c72a languageName: node linkType: hard -"@typescript-eslint/type-utils@npm:8.18.0": - version: 8.18.0 - resolution: "@typescript-eslint/type-utils@npm:8.18.0" +"@typescript-eslint/type-utils@npm:8.18.1": + version: 8.18.1 + resolution: "@typescript-eslint/type-utils@npm:8.18.1" dependencies: - "@typescript-eslint/typescript-estree": "npm:8.18.0" - "@typescript-eslint/utils": "npm:8.18.0" + "@typescript-eslint/typescript-estree": "npm:8.18.1" + "@typescript-eslint/utils": "npm:8.18.1" debug: "npm:^4.3.4" ts-api-utils: "npm:^1.3.0" peerDependencies: eslint: ^8.57.0 || ^9.0.0 typescript: ">=4.8.4 <5.8.0" - checksum: 10/d857a0b6a52aad10dfd51465b8fc667f579c4a590e7fedd372f834abd2fb438186e2ebc25b61f8a5e4a90d40ebdf614367088d73ec7fe5ac0e8c9dc47ae02258 + checksum: 10/cde53d05f4ca6e172239918cba2b560b9f837aa1fc7d5220784b1a6af9c8c525db020a5160822087e320305492fe359b7fb191420789b5f1e47a01e0cda21ac9 languageName: node linkType: hard -"@typescript-eslint/types@npm:8.18.0": - version: 8.18.0 - resolution: "@typescript-eslint/types@npm:8.18.0" - checksum: 10/6c6473c169671ca946df7c1e0e424e5296dd44d89833d5c82a0ec0fdb2c668c62f8de31c85b18754d332198f18340cf2b6f13d3b13d02770ee9d1a93a099f069 +"@typescript-eslint/types@npm:8.18.1": + version: 8.18.1 + resolution: "@typescript-eslint/types@npm:8.18.1" + checksum: 10/57a6141ba17be929291a644991f3a76f94fce330376f6a079decb20fb53378d636ad6878f8f9b6fcb8244cf1ca8b118f9e8901ae04cf3de2aa9f9ff57791d97a languageName: node linkType: hard -"@typescript-eslint/typescript-estree@npm:8.18.0": - version: 8.18.0 - resolution: "@typescript-eslint/typescript-estree@npm:8.18.0" +"@typescript-eslint/typescript-estree@npm:8.18.1": + version: 8.18.1 + resolution: "@typescript-eslint/typescript-estree@npm:8.18.1" dependencies: - "@typescript-eslint/types": "npm:8.18.0" - "@typescript-eslint/visitor-keys": "npm:8.18.0" + "@typescript-eslint/types": "npm:8.18.1" + "@typescript-eslint/visitor-keys": "npm:8.18.1" debug: "npm:^4.3.4" fast-glob: "npm:^3.3.2" is-glob: "npm:^4.0.3" @@ -6118,32 +6117,32 @@ __metadata: ts-api-utils: "npm:^1.3.0" peerDependencies: typescript: ">=4.8.4 <5.8.0" - checksum: 10/8ffd54a58dcc2c1b33f55c29193656fde772946d9dea87e06084a242dad3098049ecff9758e215c9f27ed358c5c7dabcae96cf19bc824098e075500725faf2e1 + checksum: 10/8ecc1b50b9fc32116eee1b3b00f3fb29cf18026c0bbb50ab5f6e01db58ef62b8ac01824f2950f132479be6e1b82466a2bfd1e2cb4525aa8dbce4c27fc2494cfc languageName: node linkType: hard -"@typescript-eslint/utils@npm:8.18.0": - version: 8.18.0 - resolution: "@typescript-eslint/utils@npm:8.18.0" +"@typescript-eslint/utils@npm:8.18.1": + version: 8.18.1 + resolution: "@typescript-eslint/utils@npm:8.18.1" dependencies: "@eslint-community/eslint-utils": "npm:^4.4.0" - "@typescript-eslint/scope-manager": "npm:8.18.0" - "@typescript-eslint/types": "npm:8.18.0" - "@typescript-eslint/typescript-estree": "npm:8.18.0" + "@typescript-eslint/scope-manager": "npm:8.18.1" + "@typescript-eslint/types": "npm:8.18.1" + "@typescript-eslint/typescript-estree": "npm:8.18.1" peerDependencies: eslint: ^8.57.0 || ^9.0.0 typescript: ">=4.8.4 <5.8.0" - checksum: 10/ced2775200a4d88f9c1808f2f9a4dc43505939c4bcd5b60ca2e74bf291d6f6993789ce9d56f373c39476080a9f430e969258ee8111d0a7a9ea85da399151d27e + checksum: 10/7b33d2ac273ad606a3dcb776bcf02c901812952550cdc93d4ece272b3b0e5d2a4e05fa92f9bd466f4a296ddd5992902d3b6623aa1c29d09e8e392897103e42a8 languageName: node linkType: hard -"@typescript-eslint/visitor-keys@npm:8.18.0": - version: 8.18.0 - resolution: "@typescript-eslint/visitor-keys@npm:8.18.0" +"@typescript-eslint/visitor-keys@npm:8.18.1": + version: 8.18.1 + resolution: "@typescript-eslint/visitor-keys@npm:8.18.1" dependencies: - "@typescript-eslint/types": "npm:8.18.0" + "@typescript-eslint/types": "npm:8.18.1" eslint-visitor-keys: "npm:^4.2.0" - checksum: 10/6b2e1e471097ddd903dcb125ba8ff42bf4262fc4f408ca3afacf4161cff6f06b7ab4a6a7dd273e34b61a676f89a00535de7497c77d9001a10512ba3fe7d91971 + checksum: 10/00e88b1640a68c3afea08731395eb09a8216892248fee819cb7526e99093256743239d6b9e880a499f1c0ddfe2ffa4d1ad895d9e778b5d42e702d5880db1a594 languageName: node linkType: hard @@ -11931,7 +11930,7 @@ __metadata: languageName: node linkType: hard -"is-typed-array@npm:^1.1.13": +"is-typed-array@npm:^1.1.13, is-typed-array@npm:^1.1.14": version: 1.1.14 resolution: "is-typed-array@npm:1.1.14" dependencies: @@ -12646,11 +12645,11 @@ __metadata: linkType: hard "jiti@npm:^1.20.0, jiti@npm:^1.21.6": - version: 1.21.6 - resolution: "jiti@npm:1.21.6" + version: 1.21.7 + resolution: "jiti@npm:1.21.7" bin: jiti: bin/jiti.js - checksum: 10/289b124cea411c130a14ffe88e3d38376ab44b6695616dfa0a1f32176a8f20ec90cdd6d2b9d81450fc6467cfa4d865f04f49b98452bff0f812bc400fd0ae78d6 + checksum: 10/6a182521532126e4b7b5ad64b64fb2e162718fc03bc6019c21aa2222aacde6c6dfce4fc3bce9f69561a73b24ab5f79750ad353c37c3487a220d5869a39eae3a2 languageName: node linkType: hard @@ -16828,17 +16827,17 @@ __metadata: languageName: node linkType: hard -"react-reflex@npm:4.2.6": - version: 4.2.6 - resolution: "react-reflex@npm:4.2.6" +"react-reflex@npm:4.2.7": + version: 4.2.7 + resolution: "react-reflex@npm:4.2.7" dependencies: "@babel/runtime": "npm:^7.0.0" lodash.throttle: "npm:^4.1.1" prop-types: "npm:^15.5.8" react-measure: "npm:^2.0.2" peerDependencies: - react: ^16.0.0 || ^17.0.0 || ^18.0.0 - checksum: 10/df82fada8d4dd5c158e7766e614aeb91ebcbb16b4f716f51d17bafc9491bd9c32fc7d2257b91daa7a41c46929b21e88c51f930bc9f1f75099f040e8526b0ee51 + react: ^16.0.0 || ^17.0.0 || ^18.0.0 || ^19.0.0 + checksum: 10/0b7aa12482ad10ed7d99e71837a9f6eac308b5405103bd1195f2567715a27be5ce6404711ad9de5bca8ae1fe6d78f44b7f5711584aad4fb82087664d2146d5ee languageName: node linkType: hard @@ -16861,17 +16860,6 @@ __metadata: languageName: node linkType: hard -"react-resize-detector@npm:12.0.1": - version: 12.0.1 - resolution: "react-resize-detector@npm:12.0.1" - dependencies: - lodash: "npm:^4.17.21" - peerDependencies: - react: ^18.0.0 || ^19.0.0 - checksum: 10/9421fc0b58f9e009e9ed05cb2f8e41c33c7e0024cd173d2a00e769b48e831a7e287e17047475baa3ba75c660e5c657e73abfa5e592c1fb3b38afa173e7b0456a - languageName: node - linkType: hard - "react-rnd@npm:10.4.13": version: 10.4.13 resolution: "react-rnd@npm:10.4.13" @@ -18904,9 +18892,9 @@ __metadata: languageName: node linkType: hard -"tailwindcss@npm:3.4.16": - version: 3.4.16 - resolution: "tailwindcss@npm:3.4.16" +"tailwindcss@npm:3.4.17": + version: 3.4.17 + resolution: "tailwindcss@npm:3.4.17" dependencies: "@alloc/quick-lru": "npm:^5.2.0" arg: "npm:^5.0.2" @@ -18933,7 +18921,7 @@ __metadata: bin: tailwind: lib/cli.js tailwindcss: lib/cli.js - checksum: 10/d84b3d9bd8f3d53021b6754e3d7efa704cf32f72714dea2036d955fe46ea4154180d2c47593881a9c524229f9efc13fa924fa6347fc8969427036329ee8a9338 + checksum: 10/b0e00533ae3800223b5b71af9cb1dd9bfea5ef5ffa01300f1ced99de9511487aa41e03106173e4168c56c8f6600ee21c98c1d75a5def23cddf9b39b4ad71210d languageName: node linkType: hard @@ -19286,15 +19274,15 @@ __metadata: linkType: hard "typed-array-byte-length@npm:^1.0.1": - version: 1.0.1 - resolution: "typed-array-byte-length@npm:1.0.1" + version: 1.0.3 + resolution: "typed-array-byte-length@npm:1.0.3" dependencies: - call-bind: "npm:^1.0.7" + call-bind: "npm:^1.0.8" for-each: "npm:^0.3.3" - gopd: "npm:^1.0.1" - has-proto: "npm:^1.0.3" - is-typed-array: "npm:^1.1.13" - checksum: 10/e4a38329736fe6a73b52a09222d4a9e8de14caaa4ff6ad8e55217f6705b017d9815b7284c85065b3b8a7704e226ccff1372a72b78c2a5b6b71b7bf662308c903 + gopd: "npm:^1.2.0" + has-proto: "npm:^1.2.0" + is-typed-array: "npm:^1.1.14" + checksum: 10/269dad101dda73e3110117a9b84db86f0b5c07dad3a9418116fd38d580cab7fc628a4fc167e29b6d7c39da2f53374b78e7cb578b3c5ec7a556689d985d193519 languageName: node linkType: hard