diff --git a/.pkgs/eslint-plugin-local/package.json b/.pkgs/eslint-plugin-local/package.json index 1e6e141405..566fcb961e 100644 --- a/.pkgs/eslint-plugin-local/package.json +++ b/.pkgs/eslint-plugin-local/package.json @@ -42,7 +42,7 @@ }, "devDependencies": { "@local/configs": "workspace:*", - "@types/react": "^19.1.11", + "@types/react": "^19.1.12", "@types/react-dom": "^19.1.8", "tsdown": "^0.14.2" }, diff --git a/apps/website/package.json b/apps/website/package.json index 301d92857c..d4ca0a4a09 100644 --- a/apps/website/package.json +++ b/apps/website/package.json @@ -50,7 +50,7 @@ "@types/hast": "^3.0.4", "@types/mdx": "^2.0.13", "@types/node": "^24.3.0", - "@types/react": "^19.1.11", + "@types/react": "^19.1.12", "@types/react-dom": "^19.1.8", "autoprefixer": "^10.4.21", "dedent": "^1.6.0", diff --git a/examples/lynx/package.json b/examples/lynx/package.json index 6ebd69f0fe..cf15fe24eb 100644 --- a/examples/lynx/package.json +++ b/examples/lynx/package.json @@ -26,7 +26,7 @@ "@lynx-js/types": "^3.3.0", "@rsbuild/plugin-sass": "^1.4.0", "@rsbuild/plugin-type-check": "^1.2.4", - "@types/react": "^19.1.11", + "@types/react": "^19.1.12", "eslint-plugin-react-hooks": "^5.2.0", "eslint-plugin-react-x": "workspace:*" } diff --git a/examples/next/package.json b/examples/next/package.json index a55a278ab5..533dee64ab 100644 --- a/examples/next/package.json +++ b/examples/next/package.json @@ -23,7 +23,7 @@ "@tsconfig/node22": "^22.0.2", "@tsconfig/strictest": "^2.0.5", "@types/node": "^24.3.0", - "@types/react": "^19.1.11", + "@types/react": "^19.1.12", "@types/react-dom": "^19.1.8", "eslint": "^9.34.0", "eslint-config-flat-gitignore": "^2.1.0", diff --git a/examples/react-dom-js/package.json b/examples/react-dom-js/package.json index 55e48c4f7a..72be47aeb5 100644 --- a/examples/react-dom-js/package.json +++ b/examples/react-dom-js/package.json @@ -18,7 +18,7 @@ "@eslint-react/eslint-plugin": "workspace:*", "@eslint/config-inspector": "^1.2.0", "@eslint/js": "^9.34.0", - "@types/react": "^19.1.11", + "@types/react": "^19.1.12", "@types/react-dom": "^19.1.8", "@vitejs/plugin-react": "^5.0.1", "eslint": "^9.34.0", diff --git a/examples/react-dom-v1/package.json b/examples/react-dom-v1/package.json index 70606bd5ce..4498e4d97a 100644 --- a/examples/react-dom-v1/package.json +++ b/examples/react-dom-v1/package.json @@ -21,7 +21,7 @@ "@tsconfig/node22": "^22.0.2", "@tsconfig/strictest": "^2.0.5", "@tsconfig/vite-react": "^7.0.0", - "@types/react": "^19.1.11", + "@types/react": "^19.1.12", "@types/react-dom": "^19.1.8", "@vitejs/plugin-react": "^5.0.1", "eslint": "^9.34.0", diff --git a/examples/react-dom/package.json b/examples/react-dom/package.json index ab6bdc75d7..7a4f6760c3 100644 --- a/examples/react-dom/package.json +++ b/examples/react-dom/package.json @@ -21,7 +21,7 @@ "@tsconfig/node22": "^22.0.2", "@tsconfig/strictest": "^2.0.5", "@tsconfig/vite-react": "^7.0.0", - "@types/react": "^19.1.11", + "@types/react": "^19.1.12", "@types/react-dom": "^19.1.8", "@vitejs/plugin-react": "^5.0.1", "eslint": "^9.34.0", diff --git a/examples/with-babel-eslint-parser/package.json b/examples/with-babel-eslint-parser/package.json index 78a3ac290e..9b40b60944 100644 --- a/examples/with-babel-eslint-parser/package.json +++ b/examples/with-babel-eslint-parser/package.json @@ -23,7 +23,7 @@ "@eslint/js": "^9.34.0", "@types/babel__core": "~7.20.5", "@types/babel__preset-env": "~7.10.0", - "@types/react": "^19.1.11", + "@types/react": "^19.1.12", "@types/react-dom": "^19.1.8", "@vitejs/plugin-react": "^5.0.1", "eslint": "^9.34.0", diff --git a/examples/with-ts-blank-eslint-parser/package.json b/examples/with-ts-blank-eslint-parser/package.json index 973b4f2c16..34566ede3d 100644 --- a/examples/with-ts-blank-eslint-parser/package.json +++ b/examples/with-ts-blank-eslint-parser/package.json @@ -23,7 +23,7 @@ "@tsconfig/node22": "^22.0.2", "@tsconfig/strictest": "^2.0.5", "@tsconfig/vite-react": "^7.0.0", - "@types/react": "^19.1.11", + "@types/react": "^19.1.12", "@types/react-dom": "^19.1.8", "@vitejs/plugin-react": "^5.0.1", "eslint": "^9.34.0", diff --git a/package.json b/package.json index 41f8ac9d17..4710e44888 100644 --- a/package.json +++ b/package.json @@ -64,7 +64,7 @@ "@tsconfig/node22": "^22.0.2", "@tsconfig/strictest": "^2.0.5", "@types/node": "^24.3.0", - "@types/react": "^19.1.11", + "@types/react": "^19.1.12", "@types/react-dom": "^19.1.8", "@typescript-eslint/parser": "^8.41.0", "@typescript-eslint/rule-tester": "^8.41.0", @@ -117,7 +117,7 @@ ], "overrides": { "@eslint/plugin-kit": ">=0.3.5", - "@types/react": "^19.1.11", + "@types/react": "^19.1.12", "@types/react-dom": "^19.1.8", "cross-spawn": "^7.0.6", "esbuild": "^0.25.9", diff --git a/packages/core/src/jsx/jsx-attribute.ts b/packages/core/src/jsx/jsx-attribute.ts index 9e73d7f59a..4daac7fb73 100644 --- a/packages/core/src/jsx/jsx-attribute.ts +++ b/packages/core/src/jsx/jsx-attribute.ts @@ -36,15 +36,15 @@ export function getAttribute( // Case 2: Spread from variable (e.g., {...props}) case T.Identifier: { const variable = VAR.findVariable(attr.argument.name, initialScope); - const variableNode = VAR.getVariableInitNode(variable, 0); + const variableNode = VAR.getVariableDefinitionNode(variable, 0); if (variableNode?.type === T.ObjectExpression) { - return VAR.findPropertyInProperties(name, variableNode.properties, initialScope) != null; + return VAR.findProperty(name, variableNode.properties, initialScope) != null; } return false; } // Case 3: Spread from object literal (e.g., {{...{prop: value}}}) case T.ObjectExpression: - return VAR.findPropertyInProperties(name, attr.argument.properties, initialScope) != null; + return VAR.findProperty(name, attr.argument.properties, initialScope) != null; } return false; }); diff --git a/packages/core/src/jsx/jsx-detection.ts b/packages/core/src/jsx/jsx-detection.ts index 3c355b4f0c..d8277ea72b 100644 --- a/packages/core/src/jsx/jsx-detection.ts +++ b/packages/core/src/jsx/jsx-detection.ts @@ -138,7 +138,7 @@ export function isJsxLike( // Resolve variables to their values and check if they're JSX-like const variable = VAR.findVariable(name, code.getScope(node)); const variableNode = variable - && VAR.getVariableInitNode(variable, 0); + && VAR.getVariableDefinitionNode(variable, 0); return !!variableNode && isJsxLike(code, variableNode, hint); } diff --git a/packages/plugins/eslint-plugin-react-debug/package.json b/packages/plugins/eslint-plugin-react-debug/package.json index 7ea32299b9..3adef1f7e8 100644 --- a/packages/plugins/eslint-plugin-react-debug/package.json +++ b/packages/plugins/eslint-plugin-react-debug/package.json @@ -56,7 +56,7 @@ }, "devDependencies": { "@local/configs": "workspace:*", - "@types/react": "^19.1.11", + "@types/react": "^19.1.12", "@types/react-dom": "^19.1.8", "tsdown": "^0.14.2" }, diff --git a/packages/plugins/eslint-plugin-react-dom/package.json b/packages/plugins/eslint-plugin-react-dom/package.json index ff6e5caf10..0ccb6f57dc 100644 --- a/packages/plugins/eslint-plugin-react-dom/package.json +++ b/packages/plugins/eslint-plugin-react-dom/package.json @@ -56,7 +56,7 @@ }, "devDependencies": { "@local/configs": "workspace:*", - "@types/react": "^19.1.11", + "@types/react": "^19.1.12", "@types/react-dom": "^19.1.8", "tsdown": "^0.14.2" }, diff --git a/packages/plugins/eslint-plugin-react-hooks-extra/package.json b/packages/plugins/eslint-plugin-react-hooks-extra/package.json index 42d9f0197c..6cf32be08a 100644 --- a/packages/plugins/eslint-plugin-react-hooks-extra/package.json +++ b/packages/plugins/eslint-plugin-react-hooks-extra/package.json @@ -57,7 +57,7 @@ }, "devDependencies": { "@local/configs": "workspace:*", - "@types/react": "^19.1.11", + "@types/react": "^19.1.12", "@types/react-dom": "^19.1.8", "tsdown": "^0.14.2" }, diff --git a/packages/plugins/eslint-plugin-react-hooks-extra/src/rules-hooks/use-no-direct-set-state-in-use-effect.ts b/packages/plugins/eslint-plugin-react-hooks-extra/src/rules-hooks/use-no-direct-set-state-in-use-effect.ts index 16d671956f..1cdec5ee42 100644 --- a/packages/plugins/eslint-plugin-react-hooks-extra/src/rules-hooks/use-no-direct-set-state-in-use-effect.ts +++ b/packages/plugins/eslint-plugin-react-hooks-extra/src/rules-hooks/use-no-direct-set-state-in-use-effect.ts @@ -108,7 +108,7 @@ export function useNoDirectSetStateInUseEffect( function isIdFromUseStateCall(topLevelId: TSESTree.Identifier, at?: number) { const variable = VAR.findVariable(topLevelId, context.sourceCode.getScope(topLevelId)); - const variableNode = VAR.getVariableInitNode(variable, 0); + const variableNode = VAR.getVariableDefinitionNode(variable, 0); if (variableNode == null) return false; if (variableNode.type !== T.CallExpression) return false; if (!ER.isReactHookCallWithNameAlias(context, "useState", hooks.useState)(variableNode)) return false; @@ -278,7 +278,7 @@ export function useNoDirectSetStateInUseEffect( id: string | TSESTree.Identifier, initialScope: Scope.Scope, ): TSESTree.CallExpression[] | TSESTree.Identifier[] => { - const node = VAR.getVariableInitNode(VAR.findVariable(id, initialScope), 0); + const node = VAR.getVariableDefinitionNode(VAR.findVariable(id, initialScope), 0); switch (node?.type) { case T.ArrowFunctionExpression: case T.FunctionDeclaration: diff --git a/packages/plugins/eslint-plugin-react-hooks-extra/src/rules-removed/no-unnecessary-use-callback.ts b/packages/plugins/eslint-plugin-react-hooks-extra/src/rules-removed/no-unnecessary-use-callback.ts index 01f2861ade..b0c4b42f26 100644 --- a/packages/plugins/eslint-plugin-react-hooks-extra/src/rules-removed/no-unnecessary-use-callback.ts +++ b/packages/plugins/eslint-plugin-react-hooks-extra/src/rules-removed/no-unnecessary-use-callback.ts @@ -91,7 +91,7 @@ export function create(context: RuleContext): RuleListener { .with({ type: T.ArrayExpression }, (n) => n.elements.length === 0) .with({ type: T.Identifier }, (n) => { const variable = VAR.findVariable(n.name, initialScope); - const variableNode = VAR.getVariableInitNode(variable, 0); + const variableNode = VAR.getVariableDefinitionNode(variable, 0); if (variableNode?.type !== T.ArrayExpression) { return false; } @@ -112,7 +112,7 @@ export function create(context: RuleContext): RuleListener { .with({ type: T.FunctionExpression }, identity) .with({ type: T.Identifier }, (n) => { const variable = VAR.findVariable(n.name, initialScope); - const variableNode = VAR.getVariableInitNode(variable, 0); + const variableNode = VAR.getVariableDefinitionNode(variable, 0); if (variableNode?.type !== T.ArrowFunctionExpression && variableNode?.type !== T.FunctionExpression) { return null; } diff --git a/packages/plugins/eslint-plugin-react-hooks-extra/src/rules-removed/no-unnecessary-use-memo.ts b/packages/plugins/eslint-plugin-react-hooks-extra/src/rules-removed/no-unnecessary-use-memo.ts index 50ab89a92d..ad7dd37938 100644 --- a/packages/plugins/eslint-plugin-react-hooks-extra/src/rules-removed/no-unnecessary-use-memo.ts +++ b/packages/plugins/eslint-plugin-react-hooks-extra/src/rules-removed/no-unnecessary-use-memo.ts @@ -96,7 +96,7 @@ export function create(context: RuleContext): RuleListener { .with({ type: T.ArrayExpression }, (n) => n.elements.length === 0) .with({ type: T.Identifier }, (n) => { const variable = VAR.findVariable(n.name, initialScope); - const variableNode = VAR.getVariableInitNode(variable, 0); + const variableNode = VAR.getVariableDefinitionNode(variable, 0); if (variableNode?.type !== T.ArrayExpression) { return false; } @@ -117,7 +117,7 @@ export function create(context: RuleContext): RuleListener { .with({ type: T.FunctionExpression }, identity) .with({ type: T.Identifier }, (n) => { const variable = VAR.findVariable(n.name, initialScope); - const variableNode = VAR.getVariableInitNode(variable, 0); + const variableNode = VAR.getVariableDefinitionNode(variable, 0); if (variableNode?.type !== T.ArrowFunctionExpression && variableNode?.type !== T.FunctionExpression) { return null; } diff --git a/packages/plugins/eslint-plugin-react-hooks-extra/src/rules-removed/no-unnecessary-use-prefix.ts b/packages/plugins/eslint-plugin-react-hooks-extra/src/rules-removed/no-unnecessary-use-prefix.ts index 4224f13a07..c7059e8b1f 100644 --- a/packages/plugins/eslint-plugin-react-hooks-extra/src/rules-removed/no-unnecessary-use-prefix.ts +++ b/packages/plugins/eslint-plugin-react-hooks-extra/src/rules-removed/no-unnecessary-use-prefix.ts @@ -80,7 +80,7 @@ export function create(context: RuleContext): RuleListener { continue; } // Skip empty functions - if (AST.isEmptyFunction(node)) { + if (AST.isFunctionEmpty(node)) { continue; } // Skip useful hooks diff --git a/packages/plugins/eslint-plugin-react-naming-convention/package.json b/packages/plugins/eslint-plugin-react-naming-convention/package.json index d929f06597..3d72c2a49d 100644 --- a/packages/plugins/eslint-plugin-react-naming-convention/package.json +++ b/packages/plugins/eslint-plugin-react-naming-convention/package.json @@ -56,7 +56,7 @@ }, "devDependencies": { "@local/configs": "workspace:*", - "@types/react": "^19.1.11", + "@types/react": "^19.1.12", "@types/react-dom": "^19.1.8", "tsdown": "^0.14.2" }, diff --git a/packages/plugins/eslint-plugin-react-web-api/package.json b/packages/plugins/eslint-plugin-react-web-api/package.json index eb5606436f..177e9b5027 100644 --- a/packages/plugins/eslint-plugin-react-web-api/package.json +++ b/packages/plugins/eslint-plugin-react-web-api/package.json @@ -55,7 +55,7 @@ }, "devDependencies": { "@local/configs": "workspace:*", - "@types/react": "^19.1.11", + "@types/react": "^19.1.12", "@types/react-dom": "^19.1.8", "tsdown": "^0.14.2" }, diff --git a/packages/plugins/eslint-plugin-react-web-api/src/rules/no-leaked-event-listener.ts b/packages/plugins/eslint-plugin-react-web-api/src/rules/no-leaked-event-listener.ts index 153fa8b3a0..57133f5f31 100644 --- a/packages/plugins/eslint-plugin-react-web-api/src/rules/no-leaked-event-listener.ts +++ b/packages/plugins/eslint-plugin-react-web-api/src/rules/no-leaked-event-listener.ts @@ -73,7 +73,10 @@ function getSignalValueExpression(node: TSESTree.Node | unit, initialScope: Scop if (node == null) return unit; switch (node.type) { case T.Identifier: { - return getSignalValueExpression(VAR.getVariableInitNode(VAR.findVariable(node, initialScope), 0), initialScope); + return getSignalValueExpression( + VAR.getVariableDefinitionNode(VAR.findVariable(node, initialScope), 0), + initialScope, + ); } case T.MemberExpression: return node; @@ -84,7 +87,7 @@ function getSignalValueExpression(node: TSESTree.Node | unit, initialScope: Scop function getOptions(node: TSESTree.CallExpressionArgument, initialScope: Scope): typeof defaultOptions { function findProp(properties: TSESTree.ObjectExpression["properties"], propName: string) { - return VAR.findPropertyInProperties(propName, properties, initialScope); + return VAR.findProperty(propName, properties, initialScope); } function getPropValue( prop: TSESTree.Property | TSESTree.RestElement | TSESTree.SpreadElement | unit, @@ -109,7 +112,7 @@ function getOptions(node: TSESTree.CallExpressionArgument, initialScope: Scope): switch (node.type) { case T.Identifier: { const variable = VAR.findVariable(node, initialScope); - const variableNode = VAR.getVariableInitNode(variable, 0); + const variableNode = VAR.getVariableDefinitionNode(variable, 0); if (variableNode?.type === T.ObjectExpression) { return getOpts(variableNode); } diff --git a/packages/plugins/eslint-plugin-react-web-api/src/rules/no-leaked-interval.ts b/packages/plugins/eslint-plugin-react-web-api/src/rules/no-leaked-interval.ts index e1bf130e85..a8e5fe5b90 100644 --- a/packages/plugins/eslint-plugin-react-web-api/src/rules/no-leaked-interval.ts +++ b/packages/plugins/eslint-plugin-react-web-api/src/rules/no-leaked-interval.ts @@ -102,7 +102,7 @@ export function create(context: RuleContext): RuleListener { if (!ER.ComponentPhaseRelevance.has(fEntry.kind)) { break; } - const intervalIdNode = VAR.getVariableDeclaratorId(node); + const intervalIdNode = VAR.findAssignmentTarget(node); if (intervalIdNode == null) { context.report({ messageId: "expectedIntervalId", diff --git a/packages/plugins/eslint-plugin-react-web-api/src/rules/no-leaked-resize-observer.ts b/packages/plugins/eslint-plugin-react-web-api/src/rules/no-leaked-resize-observer.ts index 8a4ff68a80..17a00f380c 100644 --- a/packages/plugins/eslint-plugin-react-web-api/src/rules/no-leaked-resize-observer.ts +++ b/packages/plugins/eslint-plugin-react-web-api/src/rules/no-leaked-resize-observer.ts @@ -49,7 +49,7 @@ function isFromObserver(context: RuleContext, node: TSESTree.Expression): boolea switch (true) { case node.type === T.Identifier: { const initialScope = context.sourceCode.getScope(node); - const object = VAR.getVariableInitNode(VAR.findVariable(node, initialScope), 0); + const object = VAR.getVariableDefinitionNode(VAR.findVariable(node, initialScope), 0); return isNewResizeObserver(object); } case node.type === T.MemberExpression: diff --git a/packages/plugins/eslint-plugin-react-web-api/src/rules/no-leaked-timeout.ts b/packages/plugins/eslint-plugin-react-web-api/src/rules/no-leaked-timeout.ts index 3a95a84089..b762386f9e 100644 --- a/packages/plugins/eslint-plugin-react-web-api/src/rules/no-leaked-timeout.ts +++ b/packages/plugins/eslint-plugin-react-web-api/src/rules/no-leaked-timeout.ts @@ -99,7 +99,7 @@ export function create(context: RuleContext): RuleListener { } switch (getCallKind(node)) { case "setTimeout": { - const timeoutIdNode = VAR.getVariableDeclaratorId(node); + const timeoutIdNode = VAR.findAssignmentTarget(node); if (timeoutIdNode == null) { context.report({ messageId: "expectedTimeoutId", diff --git a/packages/plugins/eslint-plugin-react-x/package.json b/packages/plugins/eslint-plugin-react-x/package.json index b582d0c3e1..f06caff98e 100644 --- a/packages/plugins/eslint-plugin-react-x/package.json +++ b/packages/plugins/eslint-plugin-react-x/package.json @@ -57,7 +57,7 @@ }, "devDependencies": { "@local/configs": "workspace:*", - "@types/react": "^19.1.11", + "@types/react": "^19.1.12", "@types/react-dom": "^19.1.8", "ts-api-utils": "^2.1.0", "tsdown": "^0.14.2" diff --git a/packages/plugins/eslint-plugin-react-x/src/rules/no-default-props.ts b/packages/plugins/eslint-plugin-react-x/src/rules/no-default-props.ts index 5e22c198db..4c58cbb57c 100644 --- a/packages/plugins/eslint-plugin-react-x/src/rules/no-default-props.ts +++ b/packages/plugins/eslint-plugin-react-x/src/rules/no-default-props.ts @@ -49,7 +49,7 @@ export function create(context: RuleContext): RuleListener { return; } const variable = VAR.findVariable(object.name, context.sourceCode.getScope(node)); - const variableNode = VAR.getVariableInitNode(variable, 0); + const variableNode = VAR.getVariableDefinitionNode(variable, 0); if (variableNode == null) return; if (!AST.isFunction(variableNode)) return; context.report({ messageId: "noDefaultProps", node: property }); diff --git a/packages/plugins/eslint-plugin-react-x/src/rules/no-duplicate-key.ts b/packages/plugins/eslint-plugin-react-x/src/rules/no-duplicate-key.ts index 9f4faa0215..dba5202ad7 100644 --- a/packages/plugins/eslint-plugin-react-x/src/rules/no-duplicate-key.ts +++ b/packages/plugins/eslint-plugin-react-x/src/rules/no-duplicate-key.ts @@ -74,7 +74,7 @@ export function create(context: RuleContext): RuleListener { if (!AST.isFunction(iter)) return; const arg0 = call?.arguments[0]; if (call == null || arg0 == null) return; - if (AST.getJSExpression(arg0) !== iter) { + if (AST.getUnderlyingExpression(arg0) !== iter) { return; } keyedEntries.set(call, { diff --git a/packages/plugins/eslint-plugin-react-x/src/rules/no-prop-types.ts b/packages/plugins/eslint-plugin-react-x/src/rules/no-prop-types.ts index afdf614ed1..7985db70ec 100644 --- a/packages/plugins/eslint-plugin-react-x/src/rules/no-prop-types.ts +++ b/packages/plugins/eslint-plugin-react-x/src/rules/no-prop-types.ts @@ -52,7 +52,7 @@ export function create(context: RuleContext): RuleListener { return; } const variable = VAR.findVariable(object.name, context.sourceCode.getScope(node)); - const variableNode = VAR.getVariableInitNode(variable, 0); + const variableNode = VAR.getVariableDefinitionNode(variable, 0); if (variableNode != null && (AST.isFunction(variableNode) || ER.isClassComponent(variableNode))) { context.report({ messageId: "noPropTypes", node: property }); } diff --git a/packages/plugins/eslint-plugin-react-x/src/rules/no-unnecessary-key.ts b/packages/plugins/eslint-plugin-react-x/src/rules/no-unnecessary-key.ts index 66890895ae..a0c90b634c 100644 --- a/packages/plugins/eslint-plugin-react-x/src/rules/no-unnecessary-key.ts +++ b/packages/plugins/eslint-plugin-react-x/src/rules/no-unnecessary-key.ts @@ -70,5 +70,5 @@ export function create(context: RuleContext): RuleListener { function isMapCallback(node: TSESTree.Node) { if (node.parent == null) return false; if (!AST.isArrayMapCall(node.parent)) return false; - return AST.isOneOf([T.ArrowFunctionExpression, T.FunctionExpression])(AST.getJSExpression(node)); + return AST.isOneOf([T.ArrowFunctionExpression, T.FunctionExpression])(AST.getUnderlyingExpression(node)); } diff --git a/packages/plugins/eslint-plugin-react-x/src/rules/no-unnecessary-use-callback.ts b/packages/plugins/eslint-plugin-react-x/src/rules/no-unnecessary-use-callback.ts index 44126d47fa..e710bb0eab 100644 --- a/packages/plugins/eslint-plugin-react-x/src/rules/no-unnecessary-use-callback.ts +++ b/packages/plugins/eslint-plugin-react-x/src/rules/no-unnecessary-use-callback.ts @@ -64,7 +64,7 @@ export function create(context: RuleContext): RuleListener { .with({ type: T.ArrayExpression }, (n) => n.elements.length === 0) .with({ type: T.Identifier }, (n) => { const variable = VAR.findVariable(n.name, initialScope); - const variableNode = VAR.getVariableInitNode(variable, 0); + const variableNode = VAR.getVariableDefinitionNode(variable, 0); if (variableNode?.type !== T.ArrayExpression) { return false; } @@ -85,7 +85,7 @@ export function create(context: RuleContext): RuleListener { .with({ type: T.FunctionExpression }, identity) .with({ type: T.Identifier }, (n) => { const variable = VAR.findVariable(n.name, initialScope); - const variableNode = VAR.getVariableInitNode(variable, 0); + const variableNode = VAR.getVariableDefinitionNode(variable, 0); if (variableNode?.type !== T.ArrowFunctionExpression && variableNode?.type !== T.FunctionExpression) { return null; } diff --git a/packages/plugins/eslint-plugin-react-x/src/rules/no-unnecessary-use-memo.ts b/packages/plugins/eslint-plugin-react-x/src/rules/no-unnecessary-use-memo.ts index 83b242a422..ae1f1b889d 100644 --- a/packages/plugins/eslint-plugin-react-x/src/rules/no-unnecessary-use-memo.ts +++ b/packages/plugins/eslint-plugin-react-x/src/rules/no-unnecessary-use-memo.ts @@ -69,7 +69,7 @@ export function create(context: RuleContext): RuleListener { .with({ type: T.ArrayExpression }, (n) => n.elements.length === 0) .with({ type: T.Identifier }, (n) => { const variable = VAR.findVariable(n.name, initialScope); - const variableNode = VAR.getVariableInitNode(variable, 0); + const variableNode = VAR.getVariableDefinitionNode(variable, 0); if (variableNode?.type !== T.ArrayExpression) { return false; } @@ -90,7 +90,7 @@ export function create(context: RuleContext): RuleListener { .with({ type: T.FunctionExpression }, identity) .with({ type: T.Identifier }, (n) => { const variable = VAR.findVariable(n.name, initialScope); - const variableNode = VAR.getVariableInitNode(variable, 0); + const variableNode = VAR.getVariableDefinitionNode(variable, 0); if (variableNode?.type !== T.ArrowFunctionExpression && variableNode?.type !== T.FunctionExpression) { return null; } diff --git a/packages/plugins/eslint-plugin-react-x/src/rules/no-unnecessary-use-prefix.ts b/packages/plugins/eslint-plugin-react-x/src/rules/no-unnecessary-use-prefix.ts index 363e4dfdf6..ef961305f9 100644 --- a/packages/plugins/eslint-plugin-react-x/src/rules/no-unnecessary-use-prefix.ts +++ b/packages/plugins/eslint-plugin-react-x/src/rules/no-unnecessary-use-prefix.ts @@ -53,7 +53,7 @@ export function create(context: RuleContext): RuleListener { continue; } // Skip empty functions - if (AST.isEmptyFunction(node)) { + if (AST.isFunctionEmpty(node)) { continue; } // Skip well-known hooks diff --git a/packages/plugins/eslint-plugin/README.md b/packages/plugins/eslint-plugin/README.md index 27065390db..10110db073 100644 --- a/packages/plugins/eslint-plugin/README.md +++ b/packages/plugins/eslint-plugin/README.md @@ -165,8 +165,8 @@ export default tseslint.config({ Contributions are welcome! -Please follow our [contributing guidelines](https://github.com/Rel1cx/eslint-react/tree/2.0.0/.github/CONTRIBUTING.md). +Please follow our [contributing guidelines](https://github.com/Rel1cx/eslint-react/tree/refactor/ast-utilities-reorganization/.github/CONTRIBUTING.md). ## License -This project is licensed under the MIT License - see the [LICENSE](https://github.com/Rel1cx/eslint-react/tree/2.0.0/LICENSE) file for details. +This project is licensed under the MIT License - see the [LICENSE](https://github.com/Rel1cx/eslint-react/tree/refactor/ast-utilities-reorganization/LICENSE) file for details. diff --git a/packages/utilities/ast/src/__tests__/ast-class-id.test.ts b/packages/utilities/ast/src/__tests__/class.test.ts similarity index 94% rename from packages/utilities/ast/src/__tests__/ast-class-id.test.ts rename to packages/utilities/ast/src/__tests__/class.test.ts index e9b88024ca..2566e59419 100644 --- a/packages/utilities/ast/src/__tests__/ast-class-id.test.ts +++ b/packages/utilities/ast/src/__tests__/class.test.ts @@ -1,13 +1,13 @@ -import type { TSESTreeClass } from "../ast-node-types"; - import { parseForESLint } from "@typescript-eslint/parser"; import { AST_NODE_TYPES as T } from "@typescript-eslint/types"; import { simpleTraverse } from "@typescript-eslint/typescript-estree"; import path from "node:path"; - import { describe, expect, it } from "vitest"; + import { getFixturesRootDir } from "../../../../../test"; -import { getClassId } from "../ast-class-id"; + +import { getClassId } from "../class-id"; +import type { TSESTreeClass } from "../node"; function parse(code: string) { return parseForESLint(code, { diff --git a/packages/utilities/ast/src/__tests__/ast-hierarchy.test.ts b/packages/utilities/ast/src/__tests__/expression.test.ts similarity index 94% rename from packages/utilities/ast/src/__tests__/ast-hierarchy.test.ts rename to packages/utilities/ast/src/__tests__/expression.test.ts index 7331fb40f4..2bb632a359 100644 --- a/packages/utilities/ast/src/__tests__/ast-hierarchy.test.ts +++ b/packages/utilities/ast/src/__tests__/expression.test.ts @@ -1,5 +1,3 @@ -import type { TSESTreeFunction } from "../ast-node-types"; - import { parseForESLint } from "@typescript-eslint/parser"; import { AST_NODE_TYPES as T } from "@typescript-eslint/types"; import { simpleTraverse } from "@typescript-eslint/typescript-estree"; @@ -7,9 +5,10 @@ import tsx from "dedent"; import path from "node:path"; import { describe, expect, it } from "vitest"; + import { getFixturesRootDir } from "../../../../../test"; -import { getNestedReturnStatements } from "../ast-hierarchy"; -import { isFunction } from "../ast-node-is"; +import { getNestedReturnStatements } from "../expression"; +import { isFunction, type TSESTreeFunction } from "../node"; function parse(code: string) { return parseForESLint(code, { diff --git a/packages/utilities/ast/src/__tests__/ast-function-id.test.ts b/packages/utilities/ast/src/__tests__/function.test.ts similarity index 94% rename from packages/utilities/ast/src/__tests__/ast-function-id.test.ts rename to packages/utilities/ast/src/__tests__/function.test.ts index 1d7488818a..3d8faffae8 100644 --- a/packages/utilities/ast/src/__tests__/ast-function-id.test.ts +++ b/packages/utilities/ast/src/__tests__/function.test.ts @@ -1,14 +1,13 @@ -import type { TSESTreeFunction } from "../ast-node-types"; - import { parseForESLint } from "@typescript-eslint/parser"; import { AST_NODE_TYPES as T } from "@typescript-eslint/types"; import { simpleTraverse } from "@typescript-eslint/typescript-estree"; import path from "node:path"; - import { describe, expect, it } from "vitest"; + import { getFixturesRootDir } from "../../../../../test"; -import { getFunctionId } from "../ast-function-id"; -import { isFunction } from "../ast-node-is"; + +import { getFunctionId } from "../function-id"; +import { isFunction, type TSESTreeFunction } from "../node"; function parse(code: string) { return parseForESLint(code, { diff --git a/packages/utilities/ast/src/ast-array-method-callback.ts b/packages/utilities/ast/src/array-index.ts similarity index 100% rename from packages/utilities/ast/src/ast-array-method-callback.ts rename to packages/utilities/ast/src/array-index.ts diff --git a/packages/utilities/ast/src/ast-array-method.ts b/packages/utilities/ast/src/array-method.ts similarity index 100% rename from packages/utilities/ast/src/ast-array-method.ts rename to packages/utilities/ast/src/array-method.ts diff --git a/packages/utilities/ast/src/array.ts b/packages/utilities/ast/src/array.ts new file mode 100644 index 0000000000..ef6f77d6b3 --- /dev/null +++ b/packages/utilities/ast/src/array.ts @@ -0,0 +1,2 @@ +export * from "./array-index"; +export * from "./array-method"; diff --git a/packages/utilities/ast/src/ast-expression.ts b/packages/utilities/ast/src/ast-expression.ts deleted file mode 100644 index 9658b8a51a..0000000000 --- a/packages/utilities/ast/src/ast-expression.ts +++ /dev/null @@ -1,24 +0,0 @@ -import type { TSESTree } from "@typescript-eslint/types"; -import type { TSESTreeTypeExpression } from "./ast-node-types"; - -import { AST_NODE_TYPES as T } from "@typescript-eslint/types"; -import { isTypeExpression } from "./ast-node-is"; - -/** - * Recursively get the inner expression until it's not a TypeExpression - * @param node - The node to get the expression from - * @returns The inner expression - */ -export function getJSExpression(node: TSESTree.Node): Exclude< - TSESTree.Node, - TSESTreeTypeExpression -> { - if (isTypeExpression(node)) { - return getJSExpression(node.expression); - } - return node; -} - -export function isThisExpression(node: TSESTree.Expression) { - return getJSExpression(node).type === T.ThisExpression; -} diff --git a/packages/utilities/ast/src/ast-class-id.ts b/packages/utilities/ast/src/class-id.ts similarity index 88% rename from packages/utilities/ast/src/ast-class-id.ts rename to packages/utilities/ast/src/class-id.ts index 646d8290e3..a6bedffd0a 100644 --- a/packages/utilities/ast/src/ast-class-id.ts +++ b/packages/utilities/ast/src/class-id.ts @@ -1,6 +1,6 @@ import { unit } from "@eslint-react/eff"; import type { TSESTree } from "@typescript-eslint/types"; -import type { TSESTreeClass } from "./ast-node-types"; +import type { TSESTreeClass } from "./node"; import { AST_NODE_TYPES as T } from "@typescript-eslint/types"; diff --git a/packages/utilities/ast/src/expression-base.ts b/packages/utilities/ast/src/expression-base.ts new file mode 100644 index 0000000000..beb316f909 --- /dev/null +++ b/packages/utilities/ast/src/expression-base.ts @@ -0,0 +1,19 @@ +import type { TSESTree } from "@typescript-eslint/types"; +import { isTypeExpression, type TSESTreeTypeExpression } from "./node"; + +/** + * Unwraps any type expressions to get the underlying JavaScript expression node. + * Recursively processes nodes until a non-type expression is found. + * + * @param node - The AST node to unwrap + * @returns The underlying JavaScript expression node + */ +export function getUnderlyingExpression(node: TSESTree.Node): Exclude< + TSESTree.Node, + TSESTreeTypeExpression +> { + if (isTypeExpression(node)) { + return getUnderlyingExpression(node.expression); + } + return node; +} diff --git a/packages/utilities/ast/src/expression-is.ts b/packages/utilities/ast/src/expression-is.ts new file mode 100644 index 0000000000..f9f7dd2552 --- /dev/null +++ b/packages/utilities/ast/src/expression-is.ts @@ -0,0 +1,15 @@ +import type { TSESTree } from "@typescript-eslint/types"; + +import { AST_NODE_TYPES as T } from "@typescript-eslint/types"; +import { getUnderlyingExpression } from "./expression-base"; + +/** + * Checks if the given expression is a 'this' expression. + * Unwraps any type expressions before checking. + * + * @param node - The expression node to check + * @returns true if the expression is a ThisExpression, false otherwise + */ +export function isThisExpression(node: TSESTree.Expression) { + return getUnderlyingExpression(node).type === T.ThisExpression; +} diff --git a/packages/utilities/ast/src/ast-hierarchy.ts b/packages/utilities/ast/src/expression-nested.ts similarity index 85% rename from packages/utilities/ast/src/ast-hierarchy.ts rename to packages/utilities/ast/src/expression-nested.ts index 2510766c83..6a374165ca 100644 --- a/packages/utilities/ast/src/ast-hierarchy.ts +++ b/packages/utilities/ast/src/expression-nested.ts @@ -1,41 +1,8 @@ -import { unit } from "@eslint-react/eff"; -import { AST_NODE_TYPES as T, type TSESTree } from "@typescript-eslint/types"; +import type { TSESTree } from "@typescript-eslint/types"; +import { AST_NODE_TYPES as T } from "@typescript-eslint/types"; import { simpleTraverse } from "@typescript-eslint/typescript-estree"; -import { is, isFunction } from "./ast-node-is"; - -/** - * Find the parent node that satisfies the test function - * @param node The AST node - * @param test The test function - * @returns The parent node that satisfies the test function or `_` if not found - */ -function findParentNode( - node: TSESTree.Node | unit, - test: (n: TSESTree.Node) => n is A, -): A | unit; -/** - * Find the parent node that satisfies the test function or `_` if not found - * @param node The AST node - * @param test The test function - * @returns The parent node that satisfies the test function - */ -function findParentNode(node: TSESTree.Node | unit, test: (node: TSESTree.Node) => boolean): TSESTree.Node | unit; -function findParentNode( - node: TSESTree.Node | unit, - test: ((node: TSESTree.Node) => boolean) | ((n: TSESTree.Node) => n is A), -): TSESTree.Node | A | unit { - if (node == null) return unit; - let parent = node.parent; - while (parent != null && parent.type !== T.Program) { - if (test(parent)) { - return parent; - } - parent = parent.parent; - } - return unit; -} - -export { findParentNode }; +import { is, isFunction } from "./node"; +import { findParentNode } from "./traverse"; /** * Get all nested identifiers in a expression like node diff --git a/packages/utilities/ast/src/expression.ts b/packages/utilities/ast/src/expression.ts new file mode 100644 index 0000000000..1a8e48dab2 --- /dev/null +++ b/packages/utilities/ast/src/expression.ts @@ -0,0 +1,3 @@ +export * from "./expression-base"; +export * from "./expression-is"; +export * from "./expression-nested"; diff --git a/packages/utilities/ast/src/ast-function-id.ts b/packages/utilities/ast/src/function-id.ts similarity index 95% rename from packages/utilities/ast/src/ast-function-id.ts rename to packages/utilities/ast/src/function-id.ts index 09e6e5b654..193149a0a5 100644 --- a/packages/utilities/ast/src/ast-function-id.ts +++ b/packages/utilities/ast/src/function-id.ts @@ -1,10 +1,10 @@ /* eslint-disable jsdoc/require-param */ import { unit } from "@eslint-react/eff"; import type { TSESTree } from "@typescript-eslint/types"; -import type { TSESTreeFunction } from "./ast-node-types"; - import { AST_NODE_TYPES as T } from "@typescript-eslint/types"; -import { isMethodOrProperty, isTypeAssertionExpression } from "./ast-node-is"; + +import type { TSESTreeFunction } from "./node"; +import { isMethodOrProperty, isTypeAssertionExpression } from "./node"; // Ported from https://github.com/eps1lon/react/blob/8b8d265bd9a4cab7bbd04a9a13950fdc946ea51c/packages/eslint-plugin-react-hooks/src/RulesOfHooks.js#L642 /** @@ -19,8 +19,8 @@ export function getFunctionId(node: TSESTree.Expression | TSESTreeFunction): TSE // function MaybeComponent() {} case "id" in node && node.id != null: + // const whatever = function MaybeComponent() {}; return node.id; - // const whatever = function MaybeComponent() {}; case node.parent.type === T.VariableDeclarator && node.parent.init === node && node.parent.id.type === T.Identifier: diff --git a/packages/utilities/ast/src/ast-function-init-path.ts b/packages/utilities/ast/src/function-init-path.ts similarity index 52% rename from packages/utilities/ast/src/ast-function-init-path.ts rename to packages/utilities/ast/src/function-init-path.ts index 478ecd2dcd..032ff4dc15 100644 --- a/packages/utilities/ast/src/ast-function-init-path.ts +++ b/packages/utilities/ast/src/function-init-path.ts @@ -1,36 +1,30 @@ import { unit } from "@eslint-react/eff"; import type { TSESTree } from "@typescript-eslint/types"; -import type { TSESTreeFunction } from "./ast-node-types"; - import { AST_NODE_TYPES as T } from "@typescript-eslint/types"; +import type { TSESTreeFunction } from "./node"; + +/** + * Represents various AST paths for React component function declarations. + * Each tuple type represents a specific component definition pattern. + */ export type FunctionInitPath = - /** - * function Comp() { return
; } - */ + // Standard function declaration: function Comp() { return
; } | readonly [TSESTree.FunctionDeclaration] - /** - * const Comp = () =>
; - * const Comp = function () { return
; }; - */ + // Variable declarations: const Comp = () =>
; or const Comp = function() { return
; } | readonly [ TSESTree.VariableDeclaration, TSESTree.VariableDeclarator, TSESTreeFunction, ] - /** - * const Comp = React.memo(() =>
); - * const Comp = React.forwardRef(() =>
); - */ + // Higher-order component patterns: const Comp = React.memo(() =>
); | readonly [ TSESTree.VariableDeclaration, TSESTree.VariableDeclarator, TSESTree.CallExpression, TSESTreeFunction, ] - /** - * const Comp = React.memo(React.forwardRef(() =>
)); - */ + // Nested higher-order components: const Comp = React.memo(React.forwardRef(() =>
)); | readonly [ TSESTree.VariableDeclaration, TSESTree.VariableDeclarator, @@ -38,12 +32,7 @@ export type FunctionInitPath = TSESTree.CallExpression, TSESTreeFunction, ] - /** - * const Comps = { - * TopNav() { return
; }, - * SidPanel: () =>
, - * } - */ + // Object property components: const Comps = { TopNav() {}, SidePanel: () =>
} | readonly [ TSESTree.VariableDeclaration, TSESTree.VariableDeclarator, @@ -51,12 +40,7 @@ export type FunctionInitPath = TSESTree.Property, TSESTreeFunction, ] - /** - * const Comps = { - * TopNav: React.memo(() =>
), - * SidPanel: React.forwardRef(() =>
), - * } - */ + // HOC inside object property: const Comps = { TopNav: React.memo(() =>
) } | readonly [ TSESTree.VariableDeclaration, TSESTree.VariableDeclarator, @@ -65,12 +49,7 @@ export type FunctionInitPath = TSESTree.CallExpression, TSESTreeFunction, ] - /** - * const Comps = { - * TopNav: React.memo(React.forwardRef(() =>
)), - * SidPanel: React.forwardRef(React.memo(() =>
)), - * } - */ + // Nested HOCs in object: const Comps = { TopNav: React.memo(React.forwardRef(() =>
)) } | readonly [ TSESTree.VariableDeclaration, TSESTree.VariableDeclarator, @@ -80,22 +59,14 @@ export type FunctionInitPath = TSESTree.CallExpression, TSESTreeFunction, ] - /** - * class Comp { - * TopNav() { return
; } - * } - */ + // Class method components: class Comp { TopNav() { return
; } } | readonly [ TSESTree.ClassDeclaration, TSESTree.ClassBody, TSESTree.MethodDefinition, TSESTreeFunction, ] - /** - * class Comp { - * TopNav = () =>
; - * } - */ + // Class property arrow functions: class Comp { TopNav = () =>
; } | readonly [ TSESTree.ClassDeclaration, TSESTree.ClassBody, @@ -103,48 +74,85 @@ export type FunctionInitPath = TSESTreeFunction, ]; +/** + * Identifies the initialization path of a function node in the AST. + * Determines what kind of component declaration pattern the function belongs to. + * + * @param node - The function node to analyze + * @returns The function initialization path or unit if not identifiable + */ export function getFunctionInitPath(node: TSESTreeFunction): unit | FunctionInitPath { + // Function declaration is the simplest case if (node.type === T.FunctionDeclaration) { return [node] as const; } + const { parent } = node; + + // Match against various component patterns switch (true) { + // Basic variable declaration: const Comp = () => {} case parent.type === T.VariableDeclarator: return [parent.parent, parent, node] as const; + + // HOC pattern: const Comp = React.memo(() => {}) case parent.type === T.CallExpression && parent.parent.type === T.VariableDeclarator: return [parent.parent.parent, parent.parent, parent, node] as const; + + // Nested HOC pattern: const Comp = React.memo(React.forwardRef(() => {})) case parent.type === T.CallExpression && parent.parent.type === T.CallExpression && parent.parent.parent.type === T.VariableDeclarator: return [parent.parent.parent.parent, parent.parent.parent, parent.parent, parent, node] as const; + + // Object property component: const Comps = { Nav: () => {} } case parent.type === T.Property && parent.parent.type === T.ObjectExpression && parent.parent.parent.type === T.VariableDeclarator: return [parent.parent.parent.parent, parent.parent.parent, parent.parent, parent, node] as const; + + // Class method component: class Comp { render() {} } case parent.type === T.MethodDefinition && parent.parent.parent.type === T.ClassDeclaration: return [parent.parent.parent, parent.parent, parent, node] as const; + + // Class property arrow function: class Comp { render = () => {} } case parent.type === T.PropertyDefinition && parent.parent.parent.type === T.ClassDeclaration: return [parent.parent.parent, parent.parent, parent, node] as const; } + + // Not a recognized function component initialization pattern return unit; } -export function hasCallInFunctionInitPath(callName: string, initPath: FunctionInitPath) { - return initPath - .some((n) => { - if (n.type !== T.CallExpression) { - return false; - } - switch (n.callee.type) { - case T.Identifier: - return n.callee.name === callName; - case T.MemberExpression: - return "name" in n.callee.property && n.callee.property.name === callName; - default: - return false; - } - }); +/** + * Checks if a specific function call exists in the function initialization path. + * Useful for detecting HOCs like React.memo, React.forwardRef, etc. + * + * @param callName - The name of the call to check for (e.g., "memo", "forwardRef") + * @param initPath - The function initialization path to search in + * @returns True if the call exists in the path, false otherwise + */ +export function hasCallInFunctionInitPath(callName: string, initPath: FunctionInitPath): boolean { + return initPath.some((node) => { + if (node.type !== T.CallExpression) { + return false; + } + + const { callee } = node; + + // Check direct function calls: memo(...) + if (callee.type === T.Identifier) { + return callee.name === callName; + } + + // Check member expressions: React.memo(...) + if (callee.type === T.MemberExpression && "name" in callee.property) { + return callee.property.name === callName; + } + + return false; + }); } diff --git a/packages/utilities/ast/src/ast-function-is.ts b/packages/utilities/ast/src/function-is.ts similarity index 61% rename from packages/utilities/ast/src/ast-function-is.ts rename to packages/utilities/ast/src/function-is.ts index ee49452997..5c20a778bb 100644 --- a/packages/utilities/ast/src/ast-function-is.ts +++ b/packages/utilities/ast/src/function-is.ts @@ -1,13 +1,13 @@ -import type { TSESTreeFunction } from "./ast-node-types"; - import { AST_NODE_TYPES as T } from "@typescript-eslint/types"; -export function isEmptyFunction(node: TSESTreeFunction) { +import type { TSESTreeFunction } from "./node"; + +export function isFunctionEmpty(node: TSESTreeFunction) { return node.body.type === T.BlockStatement && node.body.body.length === 0; } -export function isImmediatelyInvokedFunction(node: TSESTreeFunction) { +export function isFunctionImmediatelyInvoked(node: TSESTreeFunction) { return node.type !== T.FunctionDeclaration && node.parent.type === T.CallExpression && node.parent.callee === node; diff --git a/packages/utilities/ast/src/function.ts b/packages/utilities/ast/src/function.ts new file mode 100644 index 0000000000..af42b0053b --- /dev/null +++ b/packages/utilities/ast/src/function.ts @@ -0,0 +1,3 @@ +export * from "./function-id"; +export * from "./function-init-path"; +export * from "./function-is"; diff --git a/packages/utilities/ast/src/index.ts b/packages/utilities/ast/src/index.ts index ba811a40a6..d63814fefc 100644 --- a/packages/utilities/ast/src/index.ts +++ b/packages/utilities/ast/src/index.ts @@ -1,16 +1,10 @@ -export * from "./ast-array-method"; -export * from "./ast-array-method-callback"; -export * from "./ast-class-id"; -export * from "./ast-expression"; -export * from "./ast-function-id"; -export * from "./ast-function-init-path"; -export * from "./ast-function-is"; -export * from "./ast-hierarchy"; -export * from "./ast-line"; -export * from "./ast-literal-is"; -export * from "./ast-node-equal"; -export * from "./ast-node-format"; -export * from "./ast-node-is"; -export type * from "./ast-node-types"; -export * from "./ast-property-name"; -export * from "./ast-then"; +export * from "./array"; +export * from "./class-id"; +export * from "./expression"; +export * from "./function"; +export * from "./line"; +export * from "./literal"; +export * from "./node"; +export * from "./promise-then"; +export * from "./property-name"; +export * from "./traverse"; diff --git a/packages/utilities/ast/src/ast-line.ts b/packages/utilities/ast/src/line.ts similarity index 94% rename from packages/utilities/ast/src/ast-line.ts rename to packages/utilities/ast/src/line.ts index 6620cb7791..1f7c10d10b 100644 --- a/packages/utilities/ast/src/ast-line.ts +++ b/packages/utilities/ast/src/line.ts @@ -1,6 +1,7 @@ import type { TSESTree } from "@typescript-eslint/types"; import { AST_NODE_TYPES as T } from "@typescript-eslint/types"; -import { isOneOf } from "./ast-node-is"; + +import { isOneOf } from "./node"; /** * Check if a node is multiline diff --git a/packages/utilities/ast/src/ast-literal-is.ts b/packages/utilities/ast/src/literal.ts similarity index 100% rename from packages/utilities/ast/src/ast-literal-is.ts rename to packages/utilities/ast/src/literal.ts diff --git a/packages/utilities/ast/src/ast-node-equal.ts b/packages/utilities/ast/src/node-equal.ts similarity index 100% rename from packages/utilities/ast/src/ast-node-equal.ts rename to packages/utilities/ast/src/node-equal.ts diff --git a/packages/utilities/ast/src/ast-node-format.ts b/packages/utilities/ast/src/node-format.ts similarity index 97% rename from packages/utilities/ast/src/ast-node-format.ts rename to packages/utilities/ast/src/node-format.ts index fc01ddcc7c..b0e5b0fcf2 100644 --- a/packages/utilities/ast/src/ast-node-format.ts +++ b/packages/utilities/ast/src/node-format.ts @@ -3,7 +3,7 @@ import type { TSESTree } from "@typescript-eslint/types"; import { AST_NODE_TYPES as T } from "@typescript-eslint/types"; import { delimiterCase, replace, toLowerCase } from "string-ts"; -import { isJSX } from "./ast-node-is"; +import { isJSX } from "./node-is"; function getLiteralValueType(input: bigint | boolean | null | number | string | symbol) { // eslint-disable-next-line local/prefer-eqeq-nullish-comparison diff --git a/packages/utilities/ast/src/ast-node-is.ts b/packages/utilities/ast/src/node-is.ts similarity index 100% rename from packages/utilities/ast/src/ast-node-is.ts rename to packages/utilities/ast/src/node-is.ts diff --git a/packages/utilities/ast/src/ast-node-types.ts b/packages/utilities/ast/src/node-types.ts similarity index 100% rename from packages/utilities/ast/src/ast-node-types.ts rename to packages/utilities/ast/src/node-types.ts diff --git a/packages/utilities/ast/src/node.ts b/packages/utilities/ast/src/node.ts new file mode 100644 index 0000000000..0bc9676c9e --- /dev/null +++ b/packages/utilities/ast/src/node.ts @@ -0,0 +1,4 @@ +export * from "./node-equal"; +export * from "./node-format"; +export * from "./node-is"; +export type * from "./node-types"; diff --git a/packages/utilities/ast/src/ast-then.ts b/packages/utilities/ast/src/promise-then.ts similarity index 100% rename from packages/utilities/ast/src/ast-then.ts rename to packages/utilities/ast/src/promise-then.ts diff --git a/packages/utilities/ast/src/ast-property-name.ts b/packages/utilities/ast/src/property-name.ts similarity index 77% rename from packages/utilities/ast/src/ast-property-name.ts rename to packages/utilities/ast/src/property-name.ts index 8a872f87c3..f640d2e4bb 100644 --- a/packages/utilities/ast/src/ast-property-name.ts +++ b/packages/utilities/ast/src/property-name.ts @@ -1,12 +1,12 @@ import { unit } from "@eslint-react/eff"; import { AST_NODE_TYPES as T, type TSESTree } from "@typescript-eslint/types"; -import { getJSExpression } from "./ast-expression"; -import { isTypeExpression } from "./ast-node-is"; +import { getUnderlyingExpression } from "./expression"; +import { isTypeExpression } from "./node"; export function getPropertyName(node: TSESTree.Node): string | unit { if (isTypeExpression(node)) { - return getPropertyName(getJSExpression(node)); + return getPropertyName(getUnderlyingExpression(node)); } if (node.type === T.Identifier || node.type === T.PrivateIdentifier) { return node.name; diff --git a/packages/utilities/ast/src/traverse-down.ts b/packages/utilities/ast/src/traverse-down.ts new file mode 100644 index 0000000000..e69de29bb2 diff --git a/packages/utilities/ast/src/traverse-up.ts b/packages/utilities/ast/src/traverse-up.ts new file mode 100644 index 0000000000..32da0302d2 --- /dev/null +++ b/packages/utilities/ast/src/traverse-up.ts @@ -0,0 +1,36 @@ +import { unit } from "@eslint-react/eff"; +import { AST_NODE_TYPES as T, type TSESTree } from "@typescript-eslint/types"; + +/** + * Find the parent node that satisfies the test function + * @param node The AST node + * @param test The test function + * @returns The parent node that satisfies the test function or `_` if not found + */ +function findParentNode( + node: TSESTree.Node | unit, + test: (n: TSESTree.Node) => n is A, +): A | unit; +/** + * Find the parent node that satisfies the test function or `_` if not found + * @param node The AST node + * @param test The test function + * @returns The parent node that satisfies the test function + */ +function findParentNode(node: TSESTree.Node | unit, test: (node: TSESTree.Node) => boolean): TSESTree.Node | unit; +function findParentNode( + node: TSESTree.Node | unit, + test: ((node: TSESTree.Node) => boolean) | ((n: TSESTree.Node) => n is A), +): TSESTree.Node | A | unit { + if (node == null) return unit; + let parent = node.parent; + while (parent != null && parent.type !== T.Program) { + if (test(parent)) { + return parent; + } + parent = parent.parent; + } + return unit; +} + +export { findParentNode }; diff --git a/packages/utilities/ast/src/traverse.ts b/packages/utilities/ast/src/traverse.ts new file mode 100644 index 0000000000..ad7a9f766e --- /dev/null +++ b/packages/utilities/ast/src/traverse.ts @@ -0,0 +1,2 @@ +export type * from "./traverse-down"; +export * from "./traverse-up"; diff --git a/packages/utilities/var/src/index.ts b/packages/utilities/var/src/index.ts index 1761e41da8..a257c7c002 100644 --- a/packages/utilities/var/src/index.ts +++ b/packages/utilities/var/src/index.ts @@ -1,7 +1,8 @@ -export * from "./var-collect"; -export * from "./var-construction"; -export * from "./var-declarator-id"; -export * from "./var-init-node"; -export * from "./var-scope"; -export * from "./var-value"; -export * from "./var-value-equal"; +export * from "./misc"; +export * from "./value-construction"; +export * from "./value-equal"; +export * from "./value-helper"; +export * from "./variable-assignment"; +export type * from "./variable-declaration"; +export * from "./variable-extractor"; +export * from "./variable-resolver"; diff --git a/packages/utilities/var/src/misc.ts b/packages/utilities/var/src/misc.ts new file mode 100644 index 0000000000..8e5f7413d0 --- /dev/null +++ b/packages/utilities/var/src/misc.ts @@ -0,0 +1,58 @@ +import type { unit } from "@eslint-react/eff"; +import type { Scope } from "@typescript-eslint/scope-manager"; +import type { TSESTree } from "@typescript-eslint/types"; +import { AST_NODE_TYPES as T } from "@typescript-eslint/types"; +import { findVariable } from "./variable-extractor"; +import { getVariableDefinitionNode } from "./variable-resolver"; + +export function getChildScopes(scope: Scope): readonly Scope[] { + const scopes = [scope]; + for (const childScope of scope.childScopes) { + scopes.push(...getChildScopes(childScope)); + } + return scopes; +} + +export function findProperty( + name: string, + properties: (TSESTree.Property | TSESTree.RestElement | TSESTree.SpreadElement)[], + initialScope: Scope, + seen = new Set(), +): (typeof properties)[number] | unit { + return properties.findLast((prop) => { + if (prop.type === T.Property) { + return "name" in prop.key + && prop.key.name === name; + } + if (prop.type === T.SpreadElement) { + switch (prop.argument.type) { + case T.Identifier: { + if (seen.has(prop.argument.name)) return false; + const variable = findVariable(prop.argument.name, initialScope); + const variableNode = getVariableDefinitionNode(variable, 0); + if (variableNode?.type === T.ObjectExpression) { + seen.add(prop.argument.name); + return findProperty( + name, + variableNode.properties, + initialScope, + seen, + ) != null; + } + return false; + } + case T.ObjectExpression: { + return findProperty( + name, + prop.argument.properties, + initialScope, + seen, + ) != null; + } + default: + return false; + } + } + return false; + }); +} diff --git a/packages/utilities/var/src/var-construction.ts b/packages/utilities/var/src/value-construction.ts similarity index 96% rename from packages/utilities/var/src/var-construction.ts rename to packages/utilities/var/src/value-construction.ts index d4486efd8b..3bd3628c1c 100644 --- a/packages/utilities/var/src/var-construction.ts +++ b/packages/utilities/var/src/value-construction.ts @@ -3,7 +3,7 @@ import type { Scope } from "@typescript-eslint/scope-manager"; import type { TSESTree } from "@typescript-eslint/types"; import { AST_NODE_TYPES as T } from "@typescript-eslint/types"; -import { getVariableInitNode } from "./var-init-node"; +import { getVariableDefinitionNode } from "./variable-resolver"; export const ConstructionDetectionHint = { None: 0n, @@ -79,7 +79,7 @@ export function getConstruction( return unit; } const variable = initialScope.set.get(node.name); - const variableNode = getVariableInitNode(variable, -1); + const variableNode = getVariableDefinitionNode(variable, -1); return getConstruction(variableNode, initialScope, hint); } case T.Literal: { diff --git a/packages/utilities/var/src/var-value-equal.ts b/packages/utilities/var/src/value-equal.ts similarity index 88% rename from packages/utilities/var/src/var-value-equal.ts rename to packages/utilities/var/src/value-equal.ts index 438fd45f01..a95d56f0d8 100644 --- a/packages/utilities/var/src/var-value-equal.ts +++ b/packages/utilities/var/src/value-equal.ts @@ -3,9 +3,9 @@ import { unit } from "@eslint-react/eff"; import { DefinitionType, type Scope, type Variable } from "@typescript-eslint/scope-manager"; import type { TSESTree } from "@typescript-eslint/types"; import { AST_NODE_TYPES as T } from "@typescript-eslint/types"; -import { findVariable } from "./var-collect"; -import { getVariableInitNode } from "./var-init-node"; -import { toStaticValue } from "./var-value"; +import { toStaticValue } from "./value-helper"; +import { findVariable } from "./variable-extractor"; +import { getVariableDefinitionNode } from "./variable-resolver"; const thisBlockTypes = [ T.FunctionDeclaration, @@ -46,8 +46,8 @@ export function isNodeValueEqual( && b.type === T.Identifier: { const aVar = findVariable(a, aScope); const bVar = findVariable(b, bScope); - const aVarNode = getVariableInitNodeLoose(aVar, 0); - const bVarNode = getVariableInitNodeLoose(bVar, 0); + const aVarNode = getVariableDefinitionNodeLoose(aVar, 0); + const bVarNode = getVariableDefinitionNodeLoose(bVar, 0); const aVarNodeParent = aVarNode?.parent; const bVarNodeParent = bVarNode?.parent; const aDef = aVar?.defs.at(0); @@ -106,9 +106,12 @@ export function isNodeValueEqual( } } -function getVariableInitNodeLoose(variable: Variable | unit, at: number): ReturnType { +function getVariableDefinitionNodeLoose( + variable: Variable | unit, + at: number, +): ReturnType { if (variable == null) return unit; - const node = getVariableInitNode(variable, at); + const node = getVariableDefinitionNode(variable, at); if (node != null) return node; const def = variable.defs.at(at); if (def?.type === DefinitionType.Parameter && AST.isFunction(def.node)) return def.node; diff --git a/packages/utilities/var/src/var-value.ts b/packages/utilities/var/src/value-helper.ts similarity index 100% rename from packages/utilities/var/src/var-value.ts rename to packages/utilities/var/src/value-helper.ts diff --git a/packages/utilities/var/src/var-collect.ts b/packages/utilities/var/src/var-collect.ts deleted file mode 100644 index ee18f6ef48..0000000000 --- a/packages/utilities/var/src/var-collect.ts +++ /dev/null @@ -1,74 +0,0 @@ -import { dual, unit } from "@eslint-react/eff"; -import type { Scope, Variable } from "@typescript-eslint/scope-manager"; -import { ScopeType } from "@typescript-eslint/scope-manager"; -import type { TSESTree } from "@typescript-eslint/types"; -import { AST_NODE_TYPES as T } from "@typescript-eslint/types"; -import * as ASTUtils from "@typescript-eslint/utils/ast-utils"; -import { getVariableInitNode } from "./var-init-node"; - -/** - * Get all variables from the given scope up to the global scope - * @param initialScope The scope to start from - * @returns All variables from the given scope up to the global scope - */ -export function getVariables(initialScope: Scope): Variable[] { - let scope = initialScope; - const variables = [...scope.variables]; - while (scope.type !== ScopeType.global) { - scope = scope.upper; - variables.push(...scope.variables); - } - return variables.reverse(); -} - -export const findVariable: { - (initialScope: Scope): (nameOrNode: string | TSESTree.Identifier | unit) => Variable | unit; - (nameOrNode: string | TSESTree.Identifier | unit, initialScope: Scope): Variable | unit; -} = dual(2, (nameOrNode: string | TSESTree.Identifier | unit, initialScope: Scope) => { - if (nameOrNode == null) return unit; - return ASTUtils.findVariable(initialScope, nameOrNode) ?? unit; -}); - -export function findPropertyInProperties( - name: string, - properties: (TSESTree.Property | TSESTree.RestElement | TSESTree.SpreadElement)[], - initialScope: Scope, - seen = new Set(), -): (typeof properties)[number] | unit { - return properties.findLast((prop) => { - if (prop.type === T.Property) { - return "name" in prop.key - && prop.key.name === name; - } - if (prop.type === T.SpreadElement) { - switch (prop.argument.type) { - case T.Identifier: { - if (seen.has(prop.argument.name)) return false; - const variable = findVariable(prop.argument.name, initialScope); - const variableNode = getVariableInitNode(variable, 0); - if (variableNode?.type === T.ObjectExpression) { - seen.add(prop.argument.name); - return findPropertyInProperties( - name, - variableNode.properties, - initialScope, - seen, - ) != null; - } - return false; - } - case T.ObjectExpression: { - return findPropertyInProperties( - name, - prop.argument.properties, - initialScope, - seen, - ) != null; - } - default: - return false; - } - } - return false; - }); -} diff --git a/packages/utilities/var/src/var-scope.ts b/packages/utilities/var/src/var-scope.ts deleted file mode 100644 index 3a6d89c2e5..0000000000 --- a/packages/utilities/var/src/var-scope.ts +++ /dev/null @@ -1,9 +0,0 @@ -import type { Scope } from "@typescript-eslint/scope-manager"; - -export function getChidScopes(scope: Scope): readonly Scope[] { - const scopes = [scope]; - for (const childScope of scope.childScopes) { - scopes.push(...getChidScopes(childScope)); - } - return scopes; -} diff --git a/packages/utilities/var/src/var-declarator-id.ts b/packages/utilities/var/src/variable-assignment.ts similarity index 87% rename from packages/utilities/var/src/var-declarator-id.ts rename to packages/utilities/var/src/variable-assignment.ts index 87c0168f90..1a904f86be 100644 --- a/packages/utilities/var/src/var-declarator-id.ts +++ b/packages/utilities/var/src/variable-assignment.ts @@ -2,7 +2,7 @@ import { unit } from "@eslint-react/eff"; import type { TSESTree } from "@typescript-eslint/types"; import { AST_NODE_TYPES as T } from "@typescript-eslint/types"; -export function getVariableDeclaratorId( +export function findAssignmentTarget( node: TSESTree.Node | unit, prev?: TSESTree.Node, ): TSESTree.BindingName | TSESTree.Expression | unit { @@ -19,6 +19,6 @@ export function getVariableDeclaratorId( || node.parent === node: return unit; default: - return getVariableDeclaratorId(node.parent, node); + return findAssignmentTarget(node.parent, node); } } diff --git a/packages/utilities/var/src/variable-declaration.ts b/packages/utilities/var/src/variable-declaration.ts new file mode 100644 index 0000000000..e69de29bb2 diff --git a/packages/utilities/var/src/variable-extractor.ts b/packages/utilities/var/src/variable-extractor.ts new file mode 100644 index 0000000000..4169bdedbd --- /dev/null +++ b/packages/utilities/var/src/variable-extractor.ts @@ -0,0 +1,28 @@ +import { dual, unit } from "@eslint-react/eff"; +import type { Scope, Variable } from "@typescript-eslint/scope-manager"; +import { ScopeType } from "@typescript-eslint/scope-manager"; +import type { TSESTree } from "@typescript-eslint/types"; +import * as ASTUtils from "@typescript-eslint/utils/ast-utils"; + +/** + * Get all variables from the given scope up to the global scope + * @param initialScope The scope to start from + * @returns All variables from the given scope up to the global scope + */ +export function getVariables(initialScope: Scope): Variable[] { + let scope = initialScope; + const variables = [...scope.variables]; + while (scope.type !== ScopeType.global) { + scope = scope.upper; + variables.push(...scope.variables); + } + return variables.reverse(); +} + +export const findVariable: { + (initialScope: Scope): (nameOrNode: string | TSESTree.Identifier | unit) => Variable | unit; + (nameOrNode: string | TSESTree.Identifier | unit, initialScope: Scope): Variable | unit; +} = dual(2, (nameOrNode: string | TSESTree.Identifier | unit, initialScope: Scope) => { + if (nameOrNode == null) return unit; + return ASTUtils.findVariable(initialScope, nameOrNode) ?? unit; +}); diff --git a/packages/utilities/var/src/var-init-node.ts b/packages/utilities/var/src/variable-resolver.ts similarity index 93% rename from packages/utilities/var/src/var-init-node.ts rename to packages/utilities/var/src/variable-resolver.ts index 607d5ba645..103146cb8e 100644 --- a/packages/utilities/var/src/var-init-node.ts +++ b/packages/utilities/var/src/variable-resolver.ts @@ -4,7 +4,7 @@ import { DefinitionType } from "@typescript-eslint/scope-manager"; import type { TSESTree } from "@typescript-eslint/types"; import { AST_NODE_TYPES as T } from "@typescript-eslint/types"; -export function getVariableInitNode(variable: Variable | unit, at: number): +export function getVariableDefinitionNode(variable: Variable | unit, at: number): | unit | TSESTree.ClassDeclaration | TSESTree.ClassDeclarationWithName diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 12b8d5ac8b..6a6a7d24d3 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -6,7 +6,7 @@ settings: overrides: '@eslint/plugin-kit': '>=0.3.5' - '@types/react': ^19.1.11 + '@types/react': ^19.1.12 '@types/react-dom': ^19.1.8 cross-spawn: ^7.0.6 esbuild: ^0.25.9 @@ -45,7 +45,7 @@ importers: version: link:.pkgs/eslint-plugin-local '@radix-ui/react-toast': specifier: ^1.2.15 - version: 1.2.15(@types/react-dom@19.1.8(@types/react@19.1.11))(@types/react@19.1.11)(react-dom@19.1.1(react@19.1.1))(react@19.1.1) + version: 1.2.15(@types/react-dom@19.1.8(@types/react@19.1.12))(@types/react@19.1.12)(react-dom@19.1.1(react@19.1.1))(react@19.1.1) '@swc/core': specifier: ^1.13.5 version: 1.13.5(@swc/helpers@0.5.17) @@ -59,11 +59,11 @@ importers: specifier: ^24.3.0 version: 24.3.0 '@types/react': - specifier: ^19.1.11 - version: 19.1.11 + specifier: ^19.1.12 + version: 19.1.12 '@types/react-dom': specifier: ^19.1.8 - version: 19.1.8(@types/react@19.1.11) + version: 19.1.8(@types/react@19.1.12) '@typescript-eslint/parser': specifier: ^8.41.0 version: 8.41.0(eslint@9.34.0(jiti@2.5.1))(typescript@5.9.2) @@ -264,11 +264,11 @@ importers: specifier: workspace:* version: link:../configs '@types/react': - specifier: ^19.1.11 - version: 19.1.11 + specifier: ^19.1.12 + version: 19.1.12 '@types/react-dom': specifier: ^19.1.8 - version: 19.1.8(@types/react@19.1.11) + version: 19.1.8(@types/react@19.1.12) tsdown: specifier: ^0.14.2 version: 0.14.2(publint@0.3.12)(typescript@5.9.2) @@ -301,22 +301,22 @@ importers: version: 3.17.9 fumadocs-core: specifier: 15.7.3 - version: 15.7.3(@types/react@19.1.11)(next@15.5.2(react-dom@19.1.1(react@19.1.1))(react@19.1.1)(sass@1.90.0))(react-dom@19.1.1(react@19.1.1))(react@19.1.1) + version: 15.7.3(@types/react@19.1.12)(next@15.5.2(react-dom@19.1.1(react@19.1.1))(react@19.1.1)(sass@1.90.0))(react-dom@19.1.1(react@19.1.1))(react@19.1.1) fumadocs-docgen: specifier: 3.0.0 - version: 3.0.0(fumadocs-core@15.7.3(@types/react@19.1.11)(next@15.5.2(react-dom@19.1.1(react@19.1.1))(react@19.1.1)(sass@1.90.0))(react-dom@19.1.1(react@19.1.1))(react@19.1.1)) + version: 3.0.0(fumadocs-core@15.7.3(@types/react@19.1.12)(next@15.5.2(react-dom@19.1.1(react@19.1.1))(react@19.1.1)(sass@1.90.0))(react-dom@19.1.1(react@19.1.1))(react@19.1.1)) fumadocs-mdx: specifier: 11.8.1 - version: 11.8.1(acorn@8.15.0)(fumadocs-core@15.7.3(@types/react@19.1.11)(next@15.5.2(react-dom@19.1.1(react@19.1.1))(react@19.1.1)(sass@1.90.0))(react-dom@19.1.1(react@19.1.1))(react@19.1.1))(next@15.5.2(react-dom@19.1.1(react@19.1.1))(react@19.1.1)(sass@1.90.0))(react@19.1.1)(vite@7.1.3(@types/node@24.3.0)(jiti@2.5.1)(lightningcss@1.30.1)(sass-embedded@1.90.0)(sass@1.90.0)(terser@5.43.1)(tsx@4.20.5)(yaml@2.8.1)) + version: 11.8.1(acorn@8.15.0)(fumadocs-core@15.7.3(@types/react@19.1.12)(next@15.5.2(react-dom@19.1.1(react@19.1.1))(react@19.1.1)(sass@1.90.0))(react-dom@19.1.1(react@19.1.1))(react@19.1.1))(next@15.5.2(react-dom@19.1.1(react@19.1.1))(react@19.1.1)(sass@1.90.0))(react@19.1.1)(vite@7.1.3(@types/node@24.3.0)(jiti@2.5.1)(lightningcss@1.30.1)(sass-embedded@1.90.0)(sass@1.90.0)(terser@5.43.1)(tsx@4.20.5)(yaml@2.8.1)) fumadocs-twoslash: specifier: 3.1.6 - version: 3.1.6(@types/react-dom@19.1.8(@types/react@19.1.11))(@types/react@19.1.11)(fumadocs-ui@15.7.3(@types/react-dom@19.1.8(@types/react@19.1.11))(@types/react@19.1.11)(next@15.5.2(react-dom@19.1.1(react@19.1.1))(react@19.1.1)(sass@1.90.0))(react-dom@19.1.1(react@19.1.1))(react@19.1.1)(tailwindcss@4.1.12))(react-dom@19.1.1(react@19.1.1))(react@19.1.1)(typescript@5.9.2) + version: 3.1.6(@types/react-dom@19.1.8(@types/react@19.1.12))(@types/react@19.1.12)(fumadocs-ui@15.7.3(@types/react-dom@19.1.8(@types/react@19.1.12))(@types/react@19.1.12)(next@15.5.2(react-dom@19.1.1(react@19.1.1))(react@19.1.1)(sass@1.90.0))(react-dom@19.1.1(react@19.1.1))(react@19.1.1)(tailwindcss@4.1.12))(react-dom@19.1.1(react@19.1.1))(react@19.1.1)(typescript@5.9.2) fumadocs-typescript: specifier: 4.0.6 - version: 4.0.6(@types/react@19.1.11)(typescript@5.9.2) + version: 4.0.6(@types/react@19.1.12)(typescript@5.9.2) fumadocs-ui: specifier: 15.7.3 - version: 15.7.3(@types/react-dom@19.1.8(@types/react@19.1.11))(@types/react@19.1.11)(next@15.5.2(react-dom@19.1.1(react@19.1.1))(react@19.1.1)(sass@1.90.0))(react-dom@19.1.1(react@19.1.1))(react@19.1.1)(tailwindcss@4.1.12) + version: 15.7.3(@types/react-dom@19.1.8(@types/react@19.1.12))(@types/react@19.1.12)(next@15.5.2(react-dom@19.1.1(react@19.1.1))(react@19.1.1)(sass@1.90.0))(react-dom@19.1.1(react@19.1.1))(react@19.1.1)(tailwindcss@4.1.12) lucide-react: specifier: ^0.542.0 version: 0.542.0(react@19.1.1) @@ -391,11 +391,11 @@ importers: specifier: ^24.3.0 version: 24.3.0 '@types/react': - specifier: ^19.1.11 - version: 19.1.11 + specifier: ^19.1.12 + version: 19.1.12 '@types/react-dom': specifier: ^19.1.8 - version: 19.1.8(@types/react@19.1.11) + version: 19.1.8(@types/react@19.1.12) autoprefixer: specifier: ^10.4.21 version: 10.4.21(postcss@8.5.6) @@ -446,7 +446,7 @@ importers: dependencies: '@lynx-js/react': specifier: ^0.112.4 - version: 0.112.4(@lynx-js/types@3.3.0)(@types/react@19.1.11) + version: 0.112.4(@lynx-js/types@3.3.0)(@types/react@19.1.12) devDependencies: '@eslint/config-inspector': specifier: ^1.2.0 @@ -459,7 +459,7 @@ importers: version: 0.4.1 '@lynx-js/react-rsbuild-plugin': specifier: ^0.10.13 - version: 0.10.13(@lynx-js/react@0.112.4(@lynx-js/types@3.3.0)(@types/react@19.1.11))(webpack@5.101.3(@swc/core@1.13.5(@swc/helpers@0.5.17))(esbuild@0.25.9)) + version: 0.10.13(@lynx-js/react@0.112.4(@lynx-js/types@3.3.0)(@types/react@19.1.12))(webpack@5.101.3(@swc/core@1.13.5(@swc/helpers@0.5.17))(esbuild@0.25.9)) '@lynx-js/rspeedy': specifier: ^0.10.8 version: 0.10.8(@rspack/core@1.4.11(@swc/helpers@0.5.17))(esbuild@0.25.9)(lightningcss@1.30.1)(typescript@5.9.2)(webpack@5.101.3(@swc/core@1.13.5(@swc/helpers@0.5.17))(esbuild@0.25.9)) @@ -473,8 +473,8 @@ importers: specifier: ^1.2.4 version: 1.2.4(@rsbuild/core@1.4.15)(@rspack/core@1.4.11(@swc/helpers@0.5.17))(typescript@5.9.2) '@types/react': - specifier: ^19.1.11 - version: 19.1.11 + specifier: ^19.1.12 + version: 19.1.12 eslint-plugin-react-hooks: specifier: ^5.2.0 version: 5.2.0(eslint@9.34.0(jiti@2.5.1)) @@ -519,11 +519,11 @@ importers: specifier: ^24.3.0 version: 24.3.0 '@types/react': - specifier: ^19.1.11 - version: 19.1.11 + specifier: ^19.1.12 + version: 19.1.12 '@types/react-dom': specifier: ^19.1.8 - version: 19.1.8(@types/react@19.1.11) + version: 19.1.8(@types/react@19.1.12) eslint: specifier: ^9.34.0 version: 9.34.0(jiti@2.5.1) @@ -571,11 +571,11 @@ importers: specifier: ^7.0.0 version: 7.0.0 '@types/react': - specifier: ^19.1.11 - version: 19.1.11 + specifier: ^19.1.12 + version: 19.1.12 '@types/react-dom': specifier: ^19.1.8 - version: 19.1.8(@types/react@19.1.11) + version: 19.1.8(@types/react@19.1.12) '@vitejs/plugin-react': specifier: ^5.0.1 version: 5.0.1(vite@7.1.3(@types/node@24.3.0)(jiti@2.5.1)(lightningcss@1.30.1)(sass-embedded@1.90.0)(sass@1.90.0)(terser@5.43.1)(tsx@4.20.5)(yaml@2.8.1)) @@ -617,11 +617,11 @@ importers: specifier: ^9.34.0 version: 9.34.0 '@types/react': - specifier: ^19.1.11 - version: 19.1.11 + specifier: ^19.1.12 + version: 19.1.12 '@types/react-dom': specifier: ^19.1.8 - version: 19.1.8(@types/react@19.1.11) + version: 19.1.8(@types/react@19.1.12) '@vitejs/plugin-react': specifier: ^5.0.1 version: 5.0.1(vite@7.1.3(@types/node@24.3.0)(jiti@2.5.1)(lightningcss@1.30.1)(sass-embedded@1.90.0)(sass@1.90.0)(terser@5.43.1)(tsx@4.20.5)(yaml@2.8.1)) @@ -669,11 +669,11 @@ importers: specifier: ^7.0.0 version: 7.0.0 '@types/react': - specifier: ^19.1.11 - version: 19.1.11 + specifier: ^19.1.12 + version: 19.1.12 '@types/react-dom': specifier: ^19.1.8 - version: 19.1.8(@types/react@19.1.11) + version: 19.1.8(@types/react@19.1.12) '@vitejs/plugin-react': specifier: ^5.0.1 version: 5.0.1(vite@7.1.3(@types/node@24.3.0)(jiti@2.5.1)(lightningcss@1.30.1)(sass-embedded@1.90.0)(sass@1.90.0)(terser@5.43.1)(tsx@4.20.5)(yaml@2.8.1)) @@ -730,11 +730,11 @@ importers: specifier: ~7.10.0 version: 7.10.0 '@types/react': - specifier: ^19.1.11 - version: 19.1.11 + specifier: ^19.1.12 + version: 19.1.12 '@types/react-dom': specifier: ^19.1.8 - version: 19.1.8(@types/react@19.1.11) + version: 19.1.8(@types/react@19.1.12) '@vitejs/plugin-react': specifier: ^5.0.1 version: 5.0.1(vite@7.1.3(@types/node@24.3.0)(jiti@2.5.1)(lightningcss@1.30.1)(sass-embedded@1.90.0)(sass@1.90.0)(terser@5.43.1)(tsx@4.20.5)(yaml@2.8.1)) @@ -803,11 +803,11 @@ importers: specifier: ^7.0.0 version: 7.0.0 '@types/react': - specifier: ^19.1.11 - version: 19.1.11 + specifier: ^19.1.12 + version: 19.1.12 '@types/react-dom': specifier: ^19.1.8 - version: 19.1.8(@types/react@19.1.11) + version: 19.1.8(@types/react@19.1.12) '@vitejs/plugin-react': specifier: ^5.0.1 version: 5.0.1(vite@7.1.3(@types/node@24.3.0)(jiti@2.5.1)(lightningcss@1.30.1)(sass-embedded@1.90.0)(sass@1.90.0)(terser@5.43.1)(tsx@4.20.5)(yaml@2.8.1)) @@ -986,11 +986,11 @@ importers: specifier: workspace:* version: link:../../../.pkgs/configs '@types/react': - specifier: ^19.1.11 - version: 19.1.11 + specifier: ^19.1.12 + version: 19.1.12 '@types/react-dom': specifier: ^19.1.8 - version: 19.1.8(@types/react@19.1.11) + version: 19.1.8(@types/react@19.1.12) tsdown: specifier: ^0.14.2 version: 0.14.2(publint@0.3.12)(typescript@5.9.2) @@ -1044,11 +1044,11 @@ importers: specifier: workspace:* version: link:../../../.pkgs/configs '@types/react': - specifier: ^19.1.11 - version: 19.1.11 + specifier: ^19.1.12 + version: 19.1.12 '@types/react-dom': specifier: ^19.1.8 - version: 19.1.8(@types/react@19.1.11) + version: 19.1.8(@types/react@19.1.12) tsdown: specifier: ^0.14.2 version: 0.14.2(publint@0.3.12)(typescript@5.9.2) @@ -1102,11 +1102,11 @@ importers: specifier: workspace:* version: link:../../../.pkgs/configs '@types/react': - specifier: ^19.1.11 - version: 19.1.11 + specifier: ^19.1.12 + version: 19.1.12 '@types/react-dom': specifier: ^19.1.8 - version: 19.1.8(@types/react@19.1.11) + version: 19.1.8(@types/react@19.1.12) tsdown: specifier: ^0.14.2 version: 0.14.2(publint@0.3.12)(typescript@5.9.2) @@ -1160,11 +1160,11 @@ importers: specifier: workspace:* version: link:../../../.pkgs/configs '@types/react': - specifier: ^19.1.11 - version: 19.1.11 + specifier: ^19.1.12 + version: 19.1.12 '@types/react-dom': specifier: ^19.1.8 - version: 19.1.8(@types/react@19.1.11) + version: 19.1.8(@types/react@19.1.12) tsdown: specifier: ^0.14.2 version: 0.14.2(publint@0.3.12)(typescript@5.9.2) @@ -1215,11 +1215,11 @@ importers: specifier: workspace:* version: link:../../../.pkgs/configs '@types/react': - specifier: ^19.1.11 - version: 19.1.11 + specifier: ^19.1.12 + version: 19.1.12 '@types/react-dom': specifier: ^19.1.8 - version: 19.1.8(@types/react@19.1.11) + version: 19.1.8(@types/react@19.1.12) tsdown: specifier: ^0.14.2 version: 0.14.2(publint@0.3.12)(typescript@5.9.2) @@ -1279,11 +1279,11 @@ importers: specifier: workspace:* version: link:../../../.pkgs/configs '@types/react': - specifier: ^19.1.11 - version: 19.1.11 + specifier: ^19.1.12 + version: 19.1.12 '@types/react-dom': specifier: ^19.1.8 - version: 19.1.8(@types/react@19.1.11) + version: 19.1.8(@types/react@19.1.12) ts-api-utils: specifier: ^2.1.0 version: 2.1.0(typescript@5.9.2) @@ -2912,7 +2912,7 @@ packages: resolution: {integrity: sha512-4LcaKnH0Fb5LsGl0wzRLeCINEKwk/328qlzIEYavhAvcTyvVJl8dCBx7Ux1Zl4N7a9D/KeLyEl7NuJdqYt3Vmw==} peerDependencies: '@lynx-js/types': '*' - '@types/react': ^19.1.11 + '@types/react': ^19.1.12 peerDependenciesMeta: '@lynx-js/types': optional: true @@ -3423,7 +3423,7 @@ packages: '@radix-ui/react-accordion@1.2.12': resolution: {integrity: sha512-T4nygeh9YE9dLRPhAHSeOZi7HBXo+0kYIPJXayZfvWOWA0+n3dESrZbjfDPUABkUNym6Hd+f2IR113To8D2GPA==} peerDependencies: - '@types/react': ^19.1.11 + '@types/react': ^19.1.12 '@types/react-dom': ^19.1.8 react: ^19.1.1 react-dom: ^19.1.1 @@ -3436,7 +3436,7 @@ packages: '@radix-ui/react-arrow@1.1.7': resolution: {integrity: sha512-F+M1tLhO+mlQaOWspE8Wstg+z6PwxwRd8oQ8IXceWz92kfAmalTRf0EjrouQeo7QssEPfCn05B4Ihs1K9WQ/7w==} peerDependencies: - '@types/react': ^19.1.11 + '@types/react': ^19.1.12 '@types/react-dom': ^19.1.8 react: ^19.1.1 react-dom: ^19.1.1 @@ -3449,7 +3449,7 @@ packages: '@radix-ui/react-collapsible@1.1.12': resolution: {integrity: sha512-Uu+mSh4agx2ib1uIGPP4/CKNULyajb3p92LsVXmH2EHVMTfZWpll88XJ0j4W0z3f8NK1eYl1+Mf/szHPmcHzyA==} peerDependencies: - '@types/react': ^19.1.11 + '@types/react': ^19.1.12 '@types/react-dom': ^19.1.8 react: ^19.1.1 react-dom: ^19.1.1 @@ -3462,7 +3462,7 @@ packages: '@radix-ui/react-collection@1.1.7': resolution: {integrity: sha512-Fh9rGN0MoI4ZFUNyfFVNU4y9LUz93u9/0K+yLgA2bwRojxM8JU1DyvvMBabnZPBgMWREAJvU2jjVzq+LrFUglw==} peerDependencies: - '@types/react': ^19.1.11 + '@types/react': ^19.1.12 '@types/react-dom': ^19.1.8 react: ^19.1.1 react-dom: ^19.1.1 @@ -3475,7 +3475,7 @@ packages: '@radix-ui/react-compose-refs@1.1.2': resolution: {integrity: sha512-z4eqJvfiNnFMHIIvXP3CY57y2WJs5g2v3X0zm9mEJkrkNv4rDxu+sg9Jh8EkXyeqBkB7SOcboo9dMVqhyrACIg==} peerDependencies: - '@types/react': ^19.1.11 + '@types/react': ^19.1.12 react: ^19.1.1 peerDependenciesMeta: '@types/react': @@ -3484,7 +3484,7 @@ packages: '@radix-ui/react-context@1.1.2': resolution: {integrity: sha512-jCi/QKUM2r1Ju5a3J64TH2A5SpKAgh0LpknyqdQ4m6DCV0xJ2HG1xARRwNGPQfi1SLdLWZ1OJz6F4OMBBNiGJA==} peerDependencies: - '@types/react': ^19.1.11 + '@types/react': ^19.1.12 react: ^19.1.1 peerDependenciesMeta: '@types/react': @@ -3493,7 +3493,7 @@ packages: '@radix-ui/react-dialog@1.1.15': resolution: {integrity: sha512-TCglVRtzlffRNxRMEyR36DGBLJpeusFcgMVD9PZEzAKnUs1lKCgX5u9BmC2Yg+LL9MgZDugFFs1Vl+Jp4t/PGw==} peerDependencies: - '@types/react': ^19.1.11 + '@types/react': ^19.1.12 '@types/react-dom': ^19.1.8 react: ^19.1.1 react-dom: ^19.1.1 @@ -3506,7 +3506,7 @@ packages: '@radix-ui/react-direction@1.1.1': resolution: {integrity: sha512-1UEWRX6jnOA2y4H5WczZ44gOOjTEmlqv1uNW4GAJEO5+bauCBhv8snY65Iw5/VOS/ghKN9gr2KjnLKxrsvoMVw==} peerDependencies: - '@types/react': ^19.1.11 + '@types/react': ^19.1.12 react: ^19.1.1 peerDependenciesMeta: '@types/react': @@ -3515,7 +3515,7 @@ packages: '@radix-ui/react-dismissable-layer@1.1.11': resolution: {integrity: sha512-Nqcp+t5cTB8BinFkZgXiMJniQH0PsUt2k51FUhbdfeKvc4ACcG2uQniY/8+h1Yv6Kza4Q7lD7PQV0z0oicE0Mg==} peerDependencies: - '@types/react': ^19.1.11 + '@types/react': ^19.1.12 '@types/react-dom': ^19.1.8 react: ^19.1.1 react-dom: ^19.1.1 @@ -3528,7 +3528,7 @@ packages: '@radix-ui/react-focus-guards@1.1.3': resolution: {integrity: sha512-0rFg/Rj2Q62NCm62jZw0QX7a3sz6QCQU0LpZdNrJX8byRGaGVTqbrW9jAoIAHyMQqsNpeZ81YgSizOt5WXq0Pw==} peerDependencies: - '@types/react': ^19.1.11 + '@types/react': ^19.1.12 react: ^19.1.1 peerDependenciesMeta: '@types/react': @@ -3537,7 +3537,7 @@ packages: '@radix-ui/react-focus-scope@1.1.7': resolution: {integrity: sha512-t2ODlkXBQyn7jkl6TNaw/MtVEVvIGelJDCG41Okq/KwUsJBwQ4XVZsHAVUkK4mBv3ewiAS3PGuUWuY2BoK4ZUw==} peerDependencies: - '@types/react': ^19.1.11 + '@types/react': ^19.1.12 '@types/react-dom': ^19.1.8 react: ^19.1.1 react-dom: ^19.1.1 @@ -3555,7 +3555,7 @@ packages: '@radix-ui/react-id@1.1.1': resolution: {integrity: sha512-kGkGegYIdQsOb4XjsfM97rXsiHaBwco+hFI66oO4s9LU+PLAC5oJ7khdOVFxkhsmlbpUqDAvXw11CluXP+jkHg==} peerDependencies: - '@types/react': ^19.1.11 + '@types/react': ^19.1.12 react: ^19.1.1 peerDependenciesMeta: '@types/react': @@ -3564,7 +3564,7 @@ packages: '@radix-ui/react-navigation-menu@1.2.14': resolution: {integrity: sha512-YB9mTFQvCOAQMHU+C/jVl96WmuWeltyUEpRJJky51huhds5W2FQr1J8D/16sQlf0ozxkPK8uF3niQMdUwZPv5w==} peerDependencies: - '@types/react': ^19.1.11 + '@types/react': ^19.1.12 '@types/react-dom': ^19.1.8 react: ^19.1.1 react-dom: ^19.1.1 @@ -3577,7 +3577,7 @@ packages: '@radix-ui/react-popover@1.1.15': resolution: {integrity: sha512-kr0X2+6Yy/vJzLYJUPCZEc8SfQcf+1COFoAqauJm74umQhta9M7lNJHP7QQS3vkvcGLQUbWpMzwrXYwrYztHKA==} peerDependencies: - '@types/react': ^19.1.11 + '@types/react': ^19.1.12 '@types/react-dom': ^19.1.8 react: ^19.1.1 react-dom: ^19.1.1 @@ -3590,7 +3590,7 @@ packages: '@radix-ui/react-popper@1.2.8': resolution: {integrity: sha512-0NJQ4LFFUuWkE7Oxf0htBKS6zLkkjBH+hM1uk7Ng705ReR8m/uelduy1DBo0PyBXPKVnBA6YBlU94MBGXrSBCw==} peerDependencies: - '@types/react': ^19.1.11 + '@types/react': ^19.1.12 '@types/react-dom': ^19.1.8 react: ^19.1.1 react-dom: ^19.1.1 @@ -3603,7 +3603,7 @@ packages: '@radix-ui/react-portal@1.1.9': resolution: {integrity: sha512-bpIxvq03if6UNwXZ+HTK71JLh4APvnXntDc6XOX8UVq4XQOVl7lwok0AvIl+b8zgCw3fSaVTZMpAPPagXbKmHQ==} peerDependencies: - '@types/react': ^19.1.11 + '@types/react': ^19.1.12 '@types/react-dom': ^19.1.8 react: ^19.1.1 react-dom: ^19.1.1 @@ -3616,7 +3616,7 @@ packages: '@radix-ui/react-presence@1.1.5': resolution: {integrity: sha512-/jfEwNDdQVBCNvjkGit4h6pMOzq8bHkopq458dPt2lMjx+eBQUohZNG9A7DtO/O5ukSbxuaNGXMjHicgwy6rQQ==} peerDependencies: - '@types/react': ^19.1.11 + '@types/react': ^19.1.12 '@types/react-dom': ^19.1.8 react: ^19.1.1 react-dom: ^19.1.1 @@ -3629,7 +3629,7 @@ packages: '@radix-ui/react-primitive@2.1.3': resolution: {integrity: sha512-m9gTwRkhy2lvCPe6QJp4d3G1TYEUHn/FzJUtq9MjH46an1wJU+GdoGC5VLof8RX8Ft/DlpshApkhswDLZzHIcQ==} peerDependencies: - '@types/react': ^19.1.11 + '@types/react': ^19.1.12 '@types/react-dom': ^19.1.8 react: ^19.1.1 react-dom: ^19.1.1 @@ -3642,7 +3642,7 @@ packages: '@radix-ui/react-roving-focus@1.1.11': resolution: {integrity: sha512-7A6S9jSgm/S+7MdtNDSb+IU859vQqJ/QAtcYQcfFC6W8RS4IxIZDldLR0xqCFZ6DCyrQLjLPsxtTNch5jVA4lA==} peerDependencies: - '@types/react': ^19.1.11 + '@types/react': ^19.1.12 '@types/react-dom': ^19.1.8 react: ^19.1.1 react-dom: ^19.1.1 @@ -3655,7 +3655,7 @@ packages: '@radix-ui/react-scroll-area@1.2.10': resolution: {integrity: sha512-tAXIa1g3sM5CGpVT0uIbUx/U3Gs5N8T52IICuCtObaos1S8fzsrPXG5WObkQN3S6NVl6wKgPhAIiBGbWnvc97A==} peerDependencies: - '@types/react': ^19.1.11 + '@types/react': ^19.1.12 '@types/react-dom': ^19.1.8 react: ^19.1.1 react-dom: ^19.1.1 @@ -3668,7 +3668,7 @@ packages: '@radix-ui/react-slot@1.2.3': resolution: {integrity: sha512-aeNmHnBxbi2St0au6VBVC7JXFlhLlOnvIIlePNniyUNAClzmtAUEY8/pBiK3iHjufOlwA+c20/8jngo7xcrg8A==} peerDependencies: - '@types/react': ^19.1.11 + '@types/react': ^19.1.12 react: ^19.1.1 peerDependenciesMeta: '@types/react': @@ -3677,7 +3677,7 @@ packages: '@radix-ui/react-tabs@1.1.13': resolution: {integrity: sha512-7xdcatg7/U+7+Udyoj2zodtI9H/IIopqo+YOIcZOq1nJwXWBZ9p8xiu5llXlekDbZkca79a/fozEYQXIA4sW6A==} peerDependencies: - '@types/react': ^19.1.11 + '@types/react': ^19.1.12 '@types/react-dom': ^19.1.8 react: ^19.1.1 react-dom: ^19.1.1 @@ -3690,7 +3690,7 @@ packages: '@radix-ui/react-toast@1.2.15': resolution: {integrity: sha512-3OSz3TacUWy4WtOXV38DggwxoqJK4+eDkNMl5Z/MJZaoUPaP4/9lf81xXMe1I2ReTAptverZUpbPY4wWwWyL5g==} peerDependencies: - '@types/react': ^19.1.11 + '@types/react': ^19.1.12 '@types/react-dom': ^19.1.8 react: ^19.1.1 react-dom: ^19.1.1 @@ -3703,7 +3703,7 @@ packages: '@radix-ui/react-use-callback-ref@1.1.1': resolution: {integrity: sha512-FkBMwD+qbGQeMu1cOHnuGB6x4yzPjho8ap5WtbEJ26umhgqVXbhekKUQO+hZEL1vU92a3wHwdp0HAcqAUF5iDg==} peerDependencies: - '@types/react': ^19.1.11 + '@types/react': ^19.1.12 react: ^19.1.1 peerDependenciesMeta: '@types/react': @@ -3712,7 +3712,7 @@ packages: '@radix-ui/react-use-controllable-state@1.2.2': resolution: {integrity: sha512-BjasUjixPFdS+NKkypcyyN5Pmg83Olst0+c6vGov0diwTEo6mgdqVR6hxcEgFuh4QrAs7Rc+9KuGJ9TVCj0Zzg==} peerDependencies: - '@types/react': ^19.1.11 + '@types/react': ^19.1.12 react: ^19.1.1 peerDependenciesMeta: '@types/react': @@ -3721,7 +3721,7 @@ packages: '@radix-ui/react-use-effect-event@0.0.2': resolution: {integrity: sha512-Qp8WbZOBe+blgpuUT+lw2xheLP8q0oatc9UpmiemEICxGvFLYmHm9QowVZGHtJlGbS6A6yJ3iViad/2cVjnOiA==} peerDependencies: - '@types/react': ^19.1.11 + '@types/react': ^19.1.12 react: ^19.1.1 peerDependenciesMeta: '@types/react': @@ -3730,7 +3730,7 @@ packages: '@radix-ui/react-use-escape-keydown@1.1.1': resolution: {integrity: sha512-Il0+boE7w/XebUHyBjroE+DbByORGR9KKmITzbR7MyQ4akpORYP/ZmbhAr0DG7RmmBqoOnZdy2QlvajJ2QA59g==} peerDependencies: - '@types/react': ^19.1.11 + '@types/react': ^19.1.12 react: ^19.1.1 peerDependenciesMeta: '@types/react': @@ -3739,7 +3739,7 @@ packages: '@radix-ui/react-use-layout-effect@1.1.1': resolution: {integrity: sha512-RbJRS4UWQFkzHTTwVymMTUv8EqYhOp8dOOviLj2ugtTiXRaRQS7GLGxZTLL1jWhMeoSCf5zmcZkqTl9IiYfXcQ==} peerDependencies: - '@types/react': ^19.1.11 + '@types/react': ^19.1.12 react: ^19.1.1 peerDependenciesMeta: '@types/react': @@ -3748,7 +3748,7 @@ packages: '@radix-ui/react-use-previous@1.1.1': resolution: {integrity: sha512-2dHfToCj/pzca2Ck724OZ5L0EVrr3eHRNsG/b3xQJLA2hZpVCS99bLAX+hm1IHXDEnzU6by5z/5MIY794/a8NQ==} peerDependencies: - '@types/react': ^19.1.11 + '@types/react': ^19.1.12 react: ^19.1.1 peerDependenciesMeta: '@types/react': @@ -3757,7 +3757,7 @@ packages: '@radix-ui/react-use-rect@1.1.1': resolution: {integrity: sha512-QTYuDesS0VtuHNNvMh+CjlKJ4LJickCMUAqjlE3+j8w+RlRpwyX3apEQKGFzbZGdo7XNG1tXa+bQqIE7HIXT2w==} peerDependencies: - '@types/react': ^19.1.11 + '@types/react': ^19.1.12 react: ^19.1.1 peerDependenciesMeta: '@types/react': @@ -3766,7 +3766,7 @@ packages: '@radix-ui/react-use-size@1.1.1': resolution: {integrity: sha512-ewrXRDTAqAXlkl6t/fkXWNAhFX9I+CkKlw6zjEwk86RSPKwZr3xpBRso655aqYafwtnbpHLj6toFzmd6xdVptQ==} peerDependencies: - '@types/react': ^19.1.11 + '@types/react': ^19.1.12 react: ^19.1.1 peerDependenciesMeta: '@types/react': @@ -3775,7 +3775,7 @@ packages: '@radix-ui/react-visually-hidden@1.2.3': resolution: {integrity: sha512-pzJq12tEaaIhqjbzpCuv/OypJY/BPavOofm+dbab+MHLajy277+1lLm6JFcGgF5eskJ6mquGirhXY2GD/8u8Ug==} peerDependencies: - '@types/react': ^19.1.11 + '@types/react': ^19.1.12 '@types/react-dom': ^19.1.8 react: ^19.1.1 react-dom: ^19.1.1 @@ -4556,10 +4556,10 @@ packages: '@types/react-dom@19.1.8': resolution: {integrity: sha512-xG7xaBMJCpcK0RpN8jDbAACQo54ycO6h4dSSmgv8+fu6ZIAdANkx/WsawASUjVXYfy+J9AbUpRMNNEsXCDfDBQ==} peerDependencies: - '@types/react': ^19.1.11 + '@types/react': ^19.1.12 - '@types/react@19.1.11': - resolution: {integrity: sha512-lr3jdBw/BGj49Eps7EvqlUaoeA0xpj3pc0RoJkHpYaCHkVK7i28dKyImLQb3JVlqs3aYSXf7qYuWOW/fgZnTXQ==} + '@types/react@19.1.12': + resolution: {integrity: sha512-cMoR+FoAf/Jyq6+Df2/Z41jISvGZZ2eTlnsaJRptmZ76Caldwy1odD4xTr/gNV9VLj0AWgg/nmkevIyUfIIq5w==} '@types/supports-color@8.1.3': resolution: {integrity: sha512-Hy6UMpxhE3j1tLpl27exp1XqHD7n8chAiNPzWfz16LPZoMMoSc4dzLl6w9qijkEb/r5O1ozdu1CWGA2L83ZeZg==} @@ -6344,7 +6344,7 @@ packages: peerDependencies: '@mixedbread/sdk': ^0.19.0 '@oramacloud/client': 1.x.x || 2.x.x - '@types/react': ^19.1.11 + '@types/react': ^19.1.12 algoliasearch: 5.x.x next: ^15.5.2 react: ^19.1.1 @@ -6395,7 +6395,7 @@ packages: fumadocs-twoslash@3.1.6: resolution: {integrity: sha512-OwuVRP2olx6qGNINUvu3A4q/XFAGLzkUw51MaNQ9hHEwea6KmxkffCRN6G9cAEkqyWbdxLKf5pQ7NwsbGxe83g==} peerDependencies: - '@types/react': ^19.1.11 + '@types/react': ^19.1.12 fumadocs-ui: ^15.0.0 react: ^19.1.1 peerDependenciesMeta: @@ -6405,7 +6405,7 @@ packages: fumadocs-typescript@4.0.6: resolution: {integrity: sha512-cr2GPMH1TSHQJXRBDbxWGMXpOd7F5uLU8Y2xMOXMc6kQqEpvM2KYlq+QJ/lHTfXmhNgJBr/iKZJtQ2xHSWxaaQ==} peerDependencies: - '@types/react': ^19.1.11 + '@types/react': ^19.1.12 typescript: ^5.9.2 peerDependenciesMeta: '@types/react': @@ -6414,7 +6414,7 @@ packages: fumadocs-ui@15.7.3: resolution: {integrity: sha512-J8sFB17XVv4Ueo2HfEn8Vs4FhQxx44RlHCXUYqfIxmilPKOih0Y3CFljPN/3E19rPG+VVi3vsIpiuIFtQRj4Mg==} peerDependencies: - '@types/react': ^19.1.11 + '@types/react': ^19.1.12 next: ^15.5.2 react: ^19.1.1 react-dom: ^19.1.1 @@ -8140,7 +8140,7 @@ packages: resolution: {integrity: sha512-9r+yi9+mgU33AKcj6IbT9oRCO78WriSj6t/cF8DWBZJ9aOGPOTEDvdUDz1FwKim7QXWwmHqtdHnRJfhAxEG46Q==} engines: {node: '>=10'} peerDependencies: - '@types/react': ^19.1.11 + '@types/react': ^19.1.12 react: ^19.1.1 peerDependenciesMeta: '@types/react': @@ -8150,7 +8150,7 @@ packages: resolution: {integrity: sha512-HpMh8+oahmIdOuS5aFKKY6Pyog+FNaZV/XyJOq7b4YFwsFHe5yYfdbIalI4k3vU2nSDql7YskmUseHsRrJqIPA==} engines: {node: '>=10'} peerDependencies: - '@types/react': ^19.1.11 + '@types/react': ^19.1.12 react: ^19.1.1 peerDependenciesMeta: '@types/react': @@ -8160,7 +8160,7 @@ packages: resolution: {integrity: sha512-b6jSvxvVnyptAiLjbkWLE/lOnR4lfTtDAl+eUC7RZy+QQWc6wRzIV2CE6xBuMmDxc2qIihtDCZD5NPOFl7fRBQ==} engines: {node: '>=10'} peerDependencies: - '@types/react': ^19.1.11 + '@types/react': ^19.1.12 react: ^19.1.1 peerDependenciesMeta: '@types/react': @@ -9162,7 +9162,7 @@ packages: resolution: {integrity: sha512-jQL3lRnocaFtu3V00JToYz/4QkNWswxijDaCVNZRiRTO3HQDLsdu1ZtmIUvV4yPp+rvWm5j0y0TG/S61cuijTg==} engines: {node: '>=10'} peerDependencies: - '@types/react': ^19.1.11 + '@types/react': ^19.1.12 react: ^19.1.1 peerDependenciesMeta: '@types/react': @@ -9172,7 +9172,7 @@ packages: resolution: {integrity: sha512-Fedw0aZvkhynoPYlA5WXrMCAMm+nSWdZt6lzJQ7Ok8S6Q+VsHmHpRWndVRJ8Be0ZbkfPc5LRYH+5XrzXcEeLRQ==} engines: {node: '>=10'} peerDependencies: - '@types/react': ^19.1.11 + '@types/react': ^19.1.12 react: ^19.1.1 peerDependenciesMeta: '@types/react': @@ -11072,36 +11072,36 @@ snapshots: dependencies: unrs-resolver: 1.11.1 - '@lynx-js/react-refresh-webpack-plugin@0.3.4(@lynx-js/react-webpack-plugin@0.6.20(@lynx-js/react@0.112.4(@lynx-js/types@3.3.0)(@types/react@19.1.11))(@lynx-js/template-webpack-plugin@0.8.5))': + '@lynx-js/react-refresh-webpack-plugin@0.3.4(@lynx-js/react-webpack-plugin@0.6.20(@lynx-js/react@0.112.4(@lynx-js/types@3.3.0)(@types/react@19.1.12))(@lynx-js/template-webpack-plugin@0.8.5))': dependencies: - '@lynx-js/react-webpack-plugin': 0.6.20(@lynx-js/react@0.112.4(@lynx-js/types@3.3.0)(@types/react@19.1.11))(@lynx-js/template-webpack-plugin@0.8.5) + '@lynx-js/react-webpack-plugin': 0.6.20(@lynx-js/react@0.112.4(@lynx-js/types@3.3.0)(@types/react@19.1.12))(@lynx-js/template-webpack-plugin@0.8.5) - '@lynx-js/react-rsbuild-plugin@0.10.13(@lynx-js/react@0.112.4(@lynx-js/types@3.3.0)(@types/react@19.1.11))(webpack@5.101.3(@swc/core@1.13.5(@swc/helpers@0.5.17))(esbuild@0.25.9))': + '@lynx-js/react-rsbuild-plugin@0.10.13(@lynx-js/react@0.112.4(@lynx-js/types@3.3.0)(@types/react@19.1.12))(webpack@5.101.3(@swc/core@1.13.5(@swc/helpers@0.5.17))(esbuild@0.25.9))': dependencies: '@lynx-js/css-extract-webpack-plugin': 0.6.2(@lynx-js/template-webpack-plugin@0.8.5)(webpack@5.101.3(@swc/core@1.13.5(@swc/helpers@0.5.17))(esbuild@0.25.9)) '@lynx-js/react-alias-rsbuild-plugin': 0.10.13 - '@lynx-js/react-refresh-webpack-plugin': 0.3.4(@lynx-js/react-webpack-plugin@0.6.20(@lynx-js/react@0.112.4(@lynx-js/types@3.3.0)(@types/react@19.1.11))(@lynx-js/template-webpack-plugin@0.8.5)) - '@lynx-js/react-webpack-plugin': 0.6.20(@lynx-js/react@0.112.4(@lynx-js/types@3.3.0)(@types/react@19.1.11))(@lynx-js/template-webpack-plugin@0.8.5) + '@lynx-js/react-refresh-webpack-plugin': 0.3.4(@lynx-js/react-webpack-plugin@0.6.20(@lynx-js/react@0.112.4(@lynx-js/types@3.3.0)(@types/react@19.1.12))(@lynx-js/template-webpack-plugin@0.8.5)) + '@lynx-js/react-webpack-plugin': 0.6.20(@lynx-js/react@0.112.4(@lynx-js/types@3.3.0)(@types/react@19.1.12))(@lynx-js/template-webpack-plugin@0.8.5) '@lynx-js/runtime-wrapper-webpack-plugin': 0.1.3 '@lynx-js/template-webpack-plugin': 0.8.5 - '@lynx-js/use-sync-external-store': 1.5.0(@lynx-js/react@0.112.4(@lynx-js/types@3.3.0)(@types/react@19.1.11)) + '@lynx-js/use-sync-external-store': 1.5.0(@lynx-js/react@0.112.4(@lynx-js/types@3.3.0)(@types/react@19.1.12)) background-only: 0.0.1 optionalDependencies: - '@lynx-js/react': 0.112.4(@lynx-js/types@3.3.0)(@types/react@19.1.11) + '@lynx-js/react': 0.112.4(@lynx-js/types@3.3.0)(@types/react@19.1.12) transitivePeerDependencies: - webpack - '@lynx-js/react-webpack-plugin@0.6.20(@lynx-js/react@0.112.4(@lynx-js/types@3.3.0)(@types/react@19.1.11))(@lynx-js/template-webpack-plugin@0.8.5)': + '@lynx-js/react-webpack-plugin@0.6.20(@lynx-js/react@0.112.4(@lynx-js/types@3.3.0)(@types/react@19.1.12))(@lynx-js/template-webpack-plugin@0.8.5)': dependencies: '@lynx-js/template-webpack-plugin': 0.8.5 '@lynx-js/webpack-runtime-globals': 0.0.6 tiny-invariant: 1.3.3 optionalDependencies: - '@lynx-js/react': 0.112.4(@lynx-js/types@3.3.0)(@types/react@19.1.11) + '@lynx-js/react': 0.112.4(@lynx-js/types@3.3.0)(@types/react@19.1.12) - '@lynx-js/react@0.112.4(@lynx-js/types@3.3.0)(@types/react@19.1.11)': + '@lynx-js/react@0.112.4(@lynx-js/types@3.3.0)(@types/react@19.1.12)': dependencies: - '@types/react': 19.1.11 + '@types/react': 19.1.12 preact: '@hongzhiyuan/preact@10.24.0-00213bad' optionalDependencies: '@lynx-js/types': 3.3.0 @@ -11150,9 +11150,9 @@ snapshots: dependencies: csstype: 3.1.3 - '@lynx-js/use-sync-external-store@1.5.0(@lynx-js/react@0.112.4(@lynx-js/types@3.3.0)(@types/react@19.1.11))': + '@lynx-js/use-sync-external-store@1.5.0(@lynx-js/react@0.112.4(@lynx-js/types@3.3.0)(@types/react@19.1.12))': dependencies: - '@lynx-js/react': 0.112.4(@lynx-js/types@3.3.0)(@types/react@19.1.11) + '@lynx-js/react': 0.112.4(@lynx-js/types@3.3.0)(@types/react@19.1.12) '@lynx-js/webpack-dev-transport@0.2.0': {} @@ -11542,372 +11542,372 @@ snapshots: '@radix-ui/primitive@1.1.3': {} - '@radix-ui/react-accordion@1.2.12(@types/react-dom@19.1.8(@types/react@19.1.11))(@types/react@19.1.11)(react-dom@19.1.1(react@19.1.1))(react@19.1.1)': + '@radix-ui/react-accordion@1.2.12(@types/react-dom@19.1.8(@types/react@19.1.12))(@types/react@19.1.12)(react-dom@19.1.1(react@19.1.1))(react@19.1.1)': dependencies: '@radix-ui/primitive': 1.1.3 - '@radix-ui/react-collapsible': 1.1.12(@types/react-dom@19.1.8(@types/react@19.1.11))(@types/react@19.1.11)(react-dom@19.1.1(react@19.1.1))(react@19.1.1) - '@radix-ui/react-collection': 1.1.7(@types/react-dom@19.1.8(@types/react@19.1.11))(@types/react@19.1.11)(react-dom@19.1.1(react@19.1.1))(react@19.1.1) - '@radix-ui/react-compose-refs': 1.1.2(@types/react@19.1.11)(react@19.1.1) - '@radix-ui/react-context': 1.1.2(@types/react@19.1.11)(react@19.1.1) - '@radix-ui/react-direction': 1.1.1(@types/react@19.1.11)(react@19.1.1) - '@radix-ui/react-id': 1.1.1(@types/react@19.1.11)(react@19.1.1) - '@radix-ui/react-primitive': 2.1.3(@types/react-dom@19.1.8(@types/react@19.1.11))(@types/react@19.1.11)(react-dom@19.1.1(react@19.1.1))(react@19.1.1) - '@radix-ui/react-use-controllable-state': 1.2.2(@types/react@19.1.11)(react@19.1.1) + '@radix-ui/react-collapsible': 1.1.12(@types/react-dom@19.1.8(@types/react@19.1.12))(@types/react@19.1.12)(react-dom@19.1.1(react@19.1.1))(react@19.1.1) + '@radix-ui/react-collection': 1.1.7(@types/react-dom@19.1.8(@types/react@19.1.12))(@types/react@19.1.12)(react-dom@19.1.1(react@19.1.1))(react@19.1.1) + '@radix-ui/react-compose-refs': 1.1.2(@types/react@19.1.12)(react@19.1.1) + '@radix-ui/react-context': 1.1.2(@types/react@19.1.12)(react@19.1.1) + '@radix-ui/react-direction': 1.1.1(@types/react@19.1.12)(react@19.1.1) + '@radix-ui/react-id': 1.1.1(@types/react@19.1.12)(react@19.1.1) + '@radix-ui/react-primitive': 2.1.3(@types/react-dom@19.1.8(@types/react@19.1.12))(@types/react@19.1.12)(react-dom@19.1.1(react@19.1.1))(react@19.1.1) + '@radix-ui/react-use-controllable-state': 1.2.2(@types/react@19.1.12)(react@19.1.1) react: 19.1.1 react-dom: 19.1.1(react@19.1.1) optionalDependencies: - '@types/react': 19.1.11 - '@types/react-dom': 19.1.8(@types/react@19.1.11) + '@types/react': 19.1.12 + '@types/react-dom': 19.1.8(@types/react@19.1.12) - '@radix-ui/react-arrow@1.1.7(@types/react-dom@19.1.8(@types/react@19.1.11))(@types/react@19.1.11)(react-dom@19.1.1(react@19.1.1))(react@19.1.1)': + '@radix-ui/react-arrow@1.1.7(@types/react-dom@19.1.8(@types/react@19.1.12))(@types/react@19.1.12)(react-dom@19.1.1(react@19.1.1))(react@19.1.1)': dependencies: - '@radix-ui/react-primitive': 2.1.3(@types/react-dom@19.1.8(@types/react@19.1.11))(@types/react@19.1.11)(react-dom@19.1.1(react@19.1.1))(react@19.1.1) + '@radix-ui/react-primitive': 2.1.3(@types/react-dom@19.1.8(@types/react@19.1.12))(@types/react@19.1.12)(react-dom@19.1.1(react@19.1.1))(react@19.1.1) react: 19.1.1 react-dom: 19.1.1(react@19.1.1) optionalDependencies: - '@types/react': 19.1.11 - '@types/react-dom': 19.1.8(@types/react@19.1.11) + '@types/react': 19.1.12 + '@types/react-dom': 19.1.8(@types/react@19.1.12) - '@radix-ui/react-collapsible@1.1.12(@types/react-dom@19.1.8(@types/react@19.1.11))(@types/react@19.1.11)(react-dom@19.1.1(react@19.1.1))(react@19.1.1)': + '@radix-ui/react-collapsible@1.1.12(@types/react-dom@19.1.8(@types/react@19.1.12))(@types/react@19.1.12)(react-dom@19.1.1(react@19.1.1))(react@19.1.1)': dependencies: '@radix-ui/primitive': 1.1.3 - '@radix-ui/react-compose-refs': 1.1.2(@types/react@19.1.11)(react@19.1.1) - '@radix-ui/react-context': 1.1.2(@types/react@19.1.11)(react@19.1.1) - '@radix-ui/react-id': 1.1.1(@types/react@19.1.11)(react@19.1.1) - '@radix-ui/react-presence': 1.1.5(@types/react-dom@19.1.8(@types/react@19.1.11))(@types/react@19.1.11)(react-dom@19.1.1(react@19.1.1))(react@19.1.1) - '@radix-ui/react-primitive': 2.1.3(@types/react-dom@19.1.8(@types/react@19.1.11))(@types/react@19.1.11)(react-dom@19.1.1(react@19.1.1))(react@19.1.1) - '@radix-ui/react-use-controllable-state': 1.2.2(@types/react@19.1.11)(react@19.1.1) - '@radix-ui/react-use-layout-effect': 1.1.1(@types/react@19.1.11)(react@19.1.1) + '@radix-ui/react-compose-refs': 1.1.2(@types/react@19.1.12)(react@19.1.1) + '@radix-ui/react-context': 1.1.2(@types/react@19.1.12)(react@19.1.1) + '@radix-ui/react-id': 1.1.1(@types/react@19.1.12)(react@19.1.1) + '@radix-ui/react-presence': 1.1.5(@types/react-dom@19.1.8(@types/react@19.1.12))(@types/react@19.1.12)(react-dom@19.1.1(react@19.1.1))(react@19.1.1) + '@radix-ui/react-primitive': 2.1.3(@types/react-dom@19.1.8(@types/react@19.1.12))(@types/react@19.1.12)(react-dom@19.1.1(react@19.1.1))(react@19.1.1) + '@radix-ui/react-use-controllable-state': 1.2.2(@types/react@19.1.12)(react@19.1.1) + '@radix-ui/react-use-layout-effect': 1.1.1(@types/react@19.1.12)(react@19.1.1) react: 19.1.1 react-dom: 19.1.1(react@19.1.1) optionalDependencies: - '@types/react': 19.1.11 - '@types/react-dom': 19.1.8(@types/react@19.1.11) + '@types/react': 19.1.12 + '@types/react-dom': 19.1.8(@types/react@19.1.12) - '@radix-ui/react-collection@1.1.7(@types/react-dom@19.1.8(@types/react@19.1.11))(@types/react@19.1.11)(react-dom@19.1.1(react@19.1.1))(react@19.1.1)': + '@radix-ui/react-collection@1.1.7(@types/react-dom@19.1.8(@types/react@19.1.12))(@types/react@19.1.12)(react-dom@19.1.1(react@19.1.1))(react@19.1.1)': dependencies: - '@radix-ui/react-compose-refs': 1.1.2(@types/react@19.1.11)(react@19.1.1) - '@radix-ui/react-context': 1.1.2(@types/react@19.1.11)(react@19.1.1) - '@radix-ui/react-primitive': 2.1.3(@types/react-dom@19.1.8(@types/react@19.1.11))(@types/react@19.1.11)(react-dom@19.1.1(react@19.1.1))(react@19.1.1) - '@radix-ui/react-slot': 1.2.3(@types/react@19.1.11)(react@19.1.1) + '@radix-ui/react-compose-refs': 1.1.2(@types/react@19.1.12)(react@19.1.1) + '@radix-ui/react-context': 1.1.2(@types/react@19.1.12)(react@19.1.1) + '@radix-ui/react-primitive': 2.1.3(@types/react-dom@19.1.8(@types/react@19.1.12))(@types/react@19.1.12)(react-dom@19.1.1(react@19.1.1))(react@19.1.1) + '@radix-ui/react-slot': 1.2.3(@types/react@19.1.12)(react@19.1.1) react: 19.1.1 react-dom: 19.1.1(react@19.1.1) optionalDependencies: - '@types/react': 19.1.11 - '@types/react-dom': 19.1.8(@types/react@19.1.11) + '@types/react': 19.1.12 + '@types/react-dom': 19.1.8(@types/react@19.1.12) - '@radix-ui/react-compose-refs@1.1.2(@types/react@19.1.11)(react@19.1.1)': + '@radix-ui/react-compose-refs@1.1.2(@types/react@19.1.12)(react@19.1.1)': dependencies: react: 19.1.1 optionalDependencies: - '@types/react': 19.1.11 + '@types/react': 19.1.12 - '@radix-ui/react-context@1.1.2(@types/react@19.1.11)(react@19.1.1)': + '@radix-ui/react-context@1.1.2(@types/react@19.1.12)(react@19.1.1)': dependencies: react: 19.1.1 optionalDependencies: - '@types/react': 19.1.11 + '@types/react': 19.1.12 - '@radix-ui/react-dialog@1.1.15(@types/react-dom@19.1.8(@types/react@19.1.11))(@types/react@19.1.11)(react-dom@19.1.1(react@19.1.1))(react@19.1.1)': + '@radix-ui/react-dialog@1.1.15(@types/react-dom@19.1.8(@types/react@19.1.12))(@types/react@19.1.12)(react-dom@19.1.1(react@19.1.1))(react@19.1.1)': dependencies: '@radix-ui/primitive': 1.1.3 - '@radix-ui/react-compose-refs': 1.1.2(@types/react@19.1.11)(react@19.1.1) - '@radix-ui/react-context': 1.1.2(@types/react@19.1.11)(react@19.1.1) - '@radix-ui/react-dismissable-layer': 1.1.11(@types/react-dom@19.1.8(@types/react@19.1.11))(@types/react@19.1.11)(react-dom@19.1.1(react@19.1.1))(react@19.1.1) - '@radix-ui/react-focus-guards': 1.1.3(@types/react@19.1.11)(react@19.1.1) - '@radix-ui/react-focus-scope': 1.1.7(@types/react-dom@19.1.8(@types/react@19.1.11))(@types/react@19.1.11)(react-dom@19.1.1(react@19.1.1))(react@19.1.1) - '@radix-ui/react-id': 1.1.1(@types/react@19.1.11)(react@19.1.1) - '@radix-ui/react-portal': 1.1.9(@types/react-dom@19.1.8(@types/react@19.1.11))(@types/react@19.1.11)(react-dom@19.1.1(react@19.1.1))(react@19.1.1) - '@radix-ui/react-presence': 1.1.5(@types/react-dom@19.1.8(@types/react@19.1.11))(@types/react@19.1.11)(react-dom@19.1.1(react@19.1.1))(react@19.1.1) - '@radix-ui/react-primitive': 2.1.3(@types/react-dom@19.1.8(@types/react@19.1.11))(@types/react@19.1.11)(react-dom@19.1.1(react@19.1.1))(react@19.1.1) - '@radix-ui/react-slot': 1.2.3(@types/react@19.1.11)(react@19.1.1) - '@radix-ui/react-use-controllable-state': 1.2.2(@types/react@19.1.11)(react@19.1.1) + '@radix-ui/react-compose-refs': 1.1.2(@types/react@19.1.12)(react@19.1.1) + '@radix-ui/react-context': 1.1.2(@types/react@19.1.12)(react@19.1.1) + '@radix-ui/react-dismissable-layer': 1.1.11(@types/react-dom@19.1.8(@types/react@19.1.12))(@types/react@19.1.12)(react-dom@19.1.1(react@19.1.1))(react@19.1.1) + '@radix-ui/react-focus-guards': 1.1.3(@types/react@19.1.12)(react@19.1.1) + '@radix-ui/react-focus-scope': 1.1.7(@types/react-dom@19.1.8(@types/react@19.1.12))(@types/react@19.1.12)(react-dom@19.1.1(react@19.1.1))(react@19.1.1) + '@radix-ui/react-id': 1.1.1(@types/react@19.1.12)(react@19.1.1) + '@radix-ui/react-portal': 1.1.9(@types/react-dom@19.1.8(@types/react@19.1.12))(@types/react@19.1.12)(react-dom@19.1.1(react@19.1.1))(react@19.1.1) + '@radix-ui/react-presence': 1.1.5(@types/react-dom@19.1.8(@types/react@19.1.12))(@types/react@19.1.12)(react-dom@19.1.1(react@19.1.1))(react@19.1.1) + '@radix-ui/react-primitive': 2.1.3(@types/react-dom@19.1.8(@types/react@19.1.12))(@types/react@19.1.12)(react-dom@19.1.1(react@19.1.1))(react@19.1.1) + '@radix-ui/react-slot': 1.2.3(@types/react@19.1.12)(react@19.1.1) + '@radix-ui/react-use-controllable-state': 1.2.2(@types/react@19.1.12)(react@19.1.1) aria-hidden: 1.2.4 react: 19.1.1 react-dom: 19.1.1(react@19.1.1) - react-remove-scroll: 2.7.1(@types/react@19.1.11)(react@19.1.1) + react-remove-scroll: 2.7.1(@types/react@19.1.12)(react@19.1.1) optionalDependencies: - '@types/react': 19.1.11 - '@types/react-dom': 19.1.8(@types/react@19.1.11) + '@types/react': 19.1.12 + '@types/react-dom': 19.1.8(@types/react@19.1.12) - '@radix-ui/react-direction@1.1.1(@types/react@19.1.11)(react@19.1.1)': + '@radix-ui/react-direction@1.1.1(@types/react@19.1.12)(react@19.1.1)': dependencies: react: 19.1.1 optionalDependencies: - '@types/react': 19.1.11 + '@types/react': 19.1.12 - '@radix-ui/react-dismissable-layer@1.1.11(@types/react-dom@19.1.8(@types/react@19.1.11))(@types/react@19.1.11)(react-dom@19.1.1(react@19.1.1))(react@19.1.1)': + '@radix-ui/react-dismissable-layer@1.1.11(@types/react-dom@19.1.8(@types/react@19.1.12))(@types/react@19.1.12)(react-dom@19.1.1(react@19.1.1))(react@19.1.1)': dependencies: '@radix-ui/primitive': 1.1.3 - '@radix-ui/react-compose-refs': 1.1.2(@types/react@19.1.11)(react@19.1.1) - '@radix-ui/react-primitive': 2.1.3(@types/react-dom@19.1.8(@types/react@19.1.11))(@types/react@19.1.11)(react-dom@19.1.1(react@19.1.1))(react@19.1.1) - '@radix-ui/react-use-callback-ref': 1.1.1(@types/react@19.1.11)(react@19.1.1) - '@radix-ui/react-use-escape-keydown': 1.1.1(@types/react@19.1.11)(react@19.1.1) + '@radix-ui/react-compose-refs': 1.1.2(@types/react@19.1.12)(react@19.1.1) + '@radix-ui/react-primitive': 2.1.3(@types/react-dom@19.1.8(@types/react@19.1.12))(@types/react@19.1.12)(react-dom@19.1.1(react@19.1.1))(react@19.1.1) + '@radix-ui/react-use-callback-ref': 1.1.1(@types/react@19.1.12)(react@19.1.1) + '@radix-ui/react-use-escape-keydown': 1.1.1(@types/react@19.1.12)(react@19.1.1) react: 19.1.1 react-dom: 19.1.1(react@19.1.1) optionalDependencies: - '@types/react': 19.1.11 - '@types/react-dom': 19.1.8(@types/react@19.1.11) + '@types/react': 19.1.12 + '@types/react-dom': 19.1.8(@types/react@19.1.12) - '@radix-ui/react-focus-guards@1.1.3(@types/react@19.1.11)(react@19.1.1)': + '@radix-ui/react-focus-guards@1.1.3(@types/react@19.1.12)(react@19.1.1)': dependencies: react: 19.1.1 optionalDependencies: - '@types/react': 19.1.11 + '@types/react': 19.1.12 - '@radix-ui/react-focus-scope@1.1.7(@types/react-dom@19.1.8(@types/react@19.1.11))(@types/react@19.1.11)(react-dom@19.1.1(react@19.1.1))(react@19.1.1)': + '@radix-ui/react-focus-scope@1.1.7(@types/react-dom@19.1.8(@types/react@19.1.12))(@types/react@19.1.12)(react-dom@19.1.1(react@19.1.1))(react@19.1.1)': dependencies: - '@radix-ui/react-compose-refs': 1.1.2(@types/react@19.1.11)(react@19.1.1) - '@radix-ui/react-primitive': 2.1.3(@types/react-dom@19.1.8(@types/react@19.1.11))(@types/react@19.1.11)(react-dom@19.1.1(react@19.1.1))(react@19.1.1) - '@radix-ui/react-use-callback-ref': 1.1.1(@types/react@19.1.11)(react@19.1.1) + '@radix-ui/react-compose-refs': 1.1.2(@types/react@19.1.12)(react@19.1.1) + '@radix-ui/react-primitive': 2.1.3(@types/react-dom@19.1.8(@types/react@19.1.12))(@types/react@19.1.12)(react-dom@19.1.1(react@19.1.1))(react@19.1.1) + '@radix-ui/react-use-callback-ref': 1.1.1(@types/react@19.1.12)(react@19.1.1) react: 19.1.1 react-dom: 19.1.1(react@19.1.1) optionalDependencies: - '@types/react': 19.1.11 - '@types/react-dom': 19.1.8(@types/react@19.1.11) + '@types/react': 19.1.12 + '@types/react-dom': 19.1.8(@types/react@19.1.12) '@radix-ui/react-icons@1.3.2(react@19.1.1)': dependencies: react: 19.1.1 - '@radix-ui/react-id@1.1.1(@types/react@19.1.11)(react@19.1.1)': + '@radix-ui/react-id@1.1.1(@types/react@19.1.12)(react@19.1.1)': dependencies: - '@radix-ui/react-use-layout-effect': 1.1.1(@types/react@19.1.11)(react@19.1.1) + '@radix-ui/react-use-layout-effect': 1.1.1(@types/react@19.1.12)(react@19.1.1) react: 19.1.1 optionalDependencies: - '@types/react': 19.1.11 + '@types/react': 19.1.12 - '@radix-ui/react-navigation-menu@1.2.14(@types/react-dom@19.1.8(@types/react@19.1.11))(@types/react@19.1.11)(react-dom@19.1.1(react@19.1.1))(react@19.1.1)': + '@radix-ui/react-navigation-menu@1.2.14(@types/react-dom@19.1.8(@types/react@19.1.12))(@types/react@19.1.12)(react-dom@19.1.1(react@19.1.1))(react@19.1.1)': dependencies: '@radix-ui/primitive': 1.1.3 - '@radix-ui/react-collection': 1.1.7(@types/react-dom@19.1.8(@types/react@19.1.11))(@types/react@19.1.11)(react-dom@19.1.1(react@19.1.1))(react@19.1.1) - '@radix-ui/react-compose-refs': 1.1.2(@types/react@19.1.11)(react@19.1.1) - '@radix-ui/react-context': 1.1.2(@types/react@19.1.11)(react@19.1.1) - '@radix-ui/react-direction': 1.1.1(@types/react@19.1.11)(react@19.1.1) - '@radix-ui/react-dismissable-layer': 1.1.11(@types/react-dom@19.1.8(@types/react@19.1.11))(@types/react@19.1.11)(react-dom@19.1.1(react@19.1.1))(react@19.1.1) - '@radix-ui/react-id': 1.1.1(@types/react@19.1.11)(react@19.1.1) - '@radix-ui/react-presence': 1.1.5(@types/react-dom@19.1.8(@types/react@19.1.11))(@types/react@19.1.11)(react-dom@19.1.1(react@19.1.1))(react@19.1.1) - '@radix-ui/react-primitive': 2.1.3(@types/react-dom@19.1.8(@types/react@19.1.11))(@types/react@19.1.11)(react-dom@19.1.1(react@19.1.1))(react@19.1.1) - '@radix-ui/react-use-callback-ref': 1.1.1(@types/react@19.1.11)(react@19.1.1) - '@radix-ui/react-use-controllable-state': 1.2.2(@types/react@19.1.11)(react@19.1.1) - '@radix-ui/react-use-layout-effect': 1.1.1(@types/react@19.1.11)(react@19.1.1) - '@radix-ui/react-use-previous': 1.1.1(@types/react@19.1.11)(react@19.1.1) - '@radix-ui/react-visually-hidden': 1.2.3(@types/react-dom@19.1.8(@types/react@19.1.11))(@types/react@19.1.11)(react-dom@19.1.1(react@19.1.1))(react@19.1.1) + '@radix-ui/react-collection': 1.1.7(@types/react-dom@19.1.8(@types/react@19.1.12))(@types/react@19.1.12)(react-dom@19.1.1(react@19.1.1))(react@19.1.1) + '@radix-ui/react-compose-refs': 1.1.2(@types/react@19.1.12)(react@19.1.1) + '@radix-ui/react-context': 1.1.2(@types/react@19.1.12)(react@19.1.1) + '@radix-ui/react-direction': 1.1.1(@types/react@19.1.12)(react@19.1.1) + '@radix-ui/react-dismissable-layer': 1.1.11(@types/react-dom@19.1.8(@types/react@19.1.12))(@types/react@19.1.12)(react-dom@19.1.1(react@19.1.1))(react@19.1.1) + '@radix-ui/react-id': 1.1.1(@types/react@19.1.12)(react@19.1.1) + '@radix-ui/react-presence': 1.1.5(@types/react-dom@19.1.8(@types/react@19.1.12))(@types/react@19.1.12)(react-dom@19.1.1(react@19.1.1))(react@19.1.1) + '@radix-ui/react-primitive': 2.1.3(@types/react-dom@19.1.8(@types/react@19.1.12))(@types/react@19.1.12)(react-dom@19.1.1(react@19.1.1))(react@19.1.1) + '@radix-ui/react-use-callback-ref': 1.1.1(@types/react@19.1.12)(react@19.1.1) + '@radix-ui/react-use-controllable-state': 1.2.2(@types/react@19.1.12)(react@19.1.1) + '@radix-ui/react-use-layout-effect': 1.1.1(@types/react@19.1.12)(react@19.1.1) + '@radix-ui/react-use-previous': 1.1.1(@types/react@19.1.12)(react@19.1.1) + '@radix-ui/react-visually-hidden': 1.2.3(@types/react-dom@19.1.8(@types/react@19.1.12))(@types/react@19.1.12)(react-dom@19.1.1(react@19.1.1))(react@19.1.1) react: 19.1.1 react-dom: 19.1.1(react@19.1.1) optionalDependencies: - '@types/react': 19.1.11 - '@types/react-dom': 19.1.8(@types/react@19.1.11) + '@types/react': 19.1.12 + '@types/react-dom': 19.1.8(@types/react@19.1.12) - '@radix-ui/react-popover@1.1.15(@types/react-dom@19.1.8(@types/react@19.1.11))(@types/react@19.1.11)(react-dom@19.1.1(react@19.1.1))(react@19.1.1)': + '@radix-ui/react-popover@1.1.15(@types/react-dom@19.1.8(@types/react@19.1.12))(@types/react@19.1.12)(react-dom@19.1.1(react@19.1.1))(react@19.1.1)': dependencies: '@radix-ui/primitive': 1.1.3 - '@radix-ui/react-compose-refs': 1.1.2(@types/react@19.1.11)(react@19.1.1) - '@radix-ui/react-context': 1.1.2(@types/react@19.1.11)(react@19.1.1) - '@radix-ui/react-dismissable-layer': 1.1.11(@types/react-dom@19.1.8(@types/react@19.1.11))(@types/react@19.1.11)(react-dom@19.1.1(react@19.1.1))(react@19.1.1) - '@radix-ui/react-focus-guards': 1.1.3(@types/react@19.1.11)(react@19.1.1) - '@radix-ui/react-focus-scope': 1.1.7(@types/react-dom@19.1.8(@types/react@19.1.11))(@types/react@19.1.11)(react-dom@19.1.1(react@19.1.1))(react@19.1.1) - '@radix-ui/react-id': 1.1.1(@types/react@19.1.11)(react@19.1.1) - '@radix-ui/react-popper': 1.2.8(@types/react-dom@19.1.8(@types/react@19.1.11))(@types/react@19.1.11)(react-dom@19.1.1(react@19.1.1))(react@19.1.1) - '@radix-ui/react-portal': 1.1.9(@types/react-dom@19.1.8(@types/react@19.1.11))(@types/react@19.1.11)(react-dom@19.1.1(react@19.1.1))(react@19.1.1) - '@radix-ui/react-presence': 1.1.5(@types/react-dom@19.1.8(@types/react@19.1.11))(@types/react@19.1.11)(react-dom@19.1.1(react@19.1.1))(react@19.1.1) - '@radix-ui/react-primitive': 2.1.3(@types/react-dom@19.1.8(@types/react@19.1.11))(@types/react@19.1.11)(react-dom@19.1.1(react@19.1.1))(react@19.1.1) - '@radix-ui/react-slot': 1.2.3(@types/react@19.1.11)(react@19.1.1) - '@radix-ui/react-use-controllable-state': 1.2.2(@types/react@19.1.11)(react@19.1.1) + '@radix-ui/react-compose-refs': 1.1.2(@types/react@19.1.12)(react@19.1.1) + '@radix-ui/react-context': 1.1.2(@types/react@19.1.12)(react@19.1.1) + '@radix-ui/react-dismissable-layer': 1.1.11(@types/react-dom@19.1.8(@types/react@19.1.12))(@types/react@19.1.12)(react-dom@19.1.1(react@19.1.1))(react@19.1.1) + '@radix-ui/react-focus-guards': 1.1.3(@types/react@19.1.12)(react@19.1.1) + '@radix-ui/react-focus-scope': 1.1.7(@types/react-dom@19.1.8(@types/react@19.1.12))(@types/react@19.1.12)(react-dom@19.1.1(react@19.1.1))(react@19.1.1) + '@radix-ui/react-id': 1.1.1(@types/react@19.1.12)(react@19.1.1) + '@radix-ui/react-popper': 1.2.8(@types/react-dom@19.1.8(@types/react@19.1.12))(@types/react@19.1.12)(react-dom@19.1.1(react@19.1.1))(react@19.1.1) + '@radix-ui/react-portal': 1.1.9(@types/react-dom@19.1.8(@types/react@19.1.12))(@types/react@19.1.12)(react-dom@19.1.1(react@19.1.1))(react@19.1.1) + '@radix-ui/react-presence': 1.1.5(@types/react-dom@19.1.8(@types/react@19.1.12))(@types/react@19.1.12)(react-dom@19.1.1(react@19.1.1))(react@19.1.1) + '@radix-ui/react-primitive': 2.1.3(@types/react-dom@19.1.8(@types/react@19.1.12))(@types/react@19.1.12)(react-dom@19.1.1(react@19.1.1))(react@19.1.1) + '@radix-ui/react-slot': 1.2.3(@types/react@19.1.12)(react@19.1.1) + '@radix-ui/react-use-controllable-state': 1.2.2(@types/react@19.1.12)(react@19.1.1) aria-hidden: 1.2.4 react: 19.1.1 react-dom: 19.1.1(react@19.1.1) - react-remove-scroll: 2.7.1(@types/react@19.1.11)(react@19.1.1) + react-remove-scroll: 2.7.1(@types/react@19.1.12)(react@19.1.1) optionalDependencies: - '@types/react': 19.1.11 - '@types/react-dom': 19.1.8(@types/react@19.1.11) + '@types/react': 19.1.12 + '@types/react-dom': 19.1.8(@types/react@19.1.12) - '@radix-ui/react-popper@1.2.8(@types/react-dom@19.1.8(@types/react@19.1.11))(@types/react@19.1.11)(react-dom@19.1.1(react@19.1.1))(react@19.1.1)': + '@radix-ui/react-popper@1.2.8(@types/react-dom@19.1.8(@types/react@19.1.12))(@types/react@19.1.12)(react-dom@19.1.1(react@19.1.1))(react@19.1.1)': dependencies: '@floating-ui/react-dom': 2.1.2(react-dom@19.1.1(react@19.1.1))(react@19.1.1) - '@radix-ui/react-arrow': 1.1.7(@types/react-dom@19.1.8(@types/react@19.1.11))(@types/react@19.1.11)(react-dom@19.1.1(react@19.1.1))(react@19.1.1) - '@radix-ui/react-compose-refs': 1.1.2(@types/react@19.1.11)(react@19.1.1) - '@radix-ui/react-context': 1.1.2(@types/react@19.1.11)(react@19.1.1) - '@radix-ui/react-primitive': 2.1.3(@types/react-dom@19.1.8(@types/react@19.1.11))(@types/react@19.1.11)(react-dom@19.1.1(react@19.1.1))(react@19.1.1) - '@radix-ui/react-use-callback-ref': 1.1.1(@types/react@19.1.11)(react@19.1.1) - '@radix-ui/react-use-layout-effect': 1.1.1(@types/react@19.1.11)(react@19.1.1) - '@radix-ui/react-use-rect': 1.1.1(@types/react@19.1.11)(react@19.1.1) - '@radix-ui/react-use-size': 1.1.1(@types/react@19.1.11)(react@19.1.1) + '@radix-ui/react-arrow': 1.1.7(@types/react-dom@19.1.8(@types/react@19.1.12))(@types/react@19.1.12)(react-dom@19.1.1(react@19.1.1))(react@19.1.1) + '@radix-ui/react-compose-refs': 1.1.2(@types/react@19.1.12)(react@19.1.1) + '@radix-ui/react-context': 1.1.2(@types/react@19.1.12)(react@19.1.1) + '@radix-ui/react-primitive': 2.1.3(@types/react-dom@19.1.8(@types/react@19.1.12))(@types/react@19.1.12)(react-dom@19.1.1(react@19.1.1))(react@19.1.1) + '@radix-ui/react-use-callback-ref': 1.1.1(@types/react@19.1.12)(react@19.1.1) + '@radix-ui/react-use-layout-effect': 1.1.1(@types/react@19.1.12)(react@19.1.1) + '@radix-ui/react-use-rect': 1.1.1(@types/react@19.1.12)(react@19.1.1) + '@radix-ui/react-use-size': 1.1.1(@types/react@19.1.12)(react@19.1.1) '@radix-ui/rect': 1.1.1 react: 19.1.1 react-dom: 19.1.1(react@19.1.1) optionalDependencies: - '@types/react': 19.1.11 - '@types/react-dom': 19.1.8(@types/react@19.1.11) + '@types/react': 19.1.12 + '@types/react-dom': 19.1.8(@types/react@19.1.12) - '@radix-ui/react-portal@1.1.9(@types/react-dom@19.1.8(@types/react@19.1.11))(@types/react@19.1.11)(react-dom@19.1.1(react@19.1.1))(react@19.1.1)': + '@radix-ui/react-portal@1.1.9(@types/react-dom@19.1.8(@types/react@19.1.12))(@types/react@19.1.12)(react-dom@19.1.1(react@19.1.1))(react@19.1.1)': dependencies: - '@radix-ui/react-primitive': 2.1.3(@types/react-dom@19.1.8(@types/react@19.1.11))(@types/react@19.1.11)(react-dom@19.1.1(react@19.1.1))(react@19.1.1) - '@radix-ui/react-use-layout-effect': 1.1.1(@types/react@19.1.11)(react@19.1.1) + '@radix-ui/react-primitive': 2.1.3(@types/react-dom@19.1.8(@types/react@19.1.12))(@types/react@19.1.12)(react-dom@19.1.1(react@19.1.1))(react@19.1.1) + '@radix-ui/react-use-layout-effect': 1.1.1(@types/react@19.1.12)(react@19.1.1) react: 19.1.1 react-dom: 19.1.1(react@19.1.1) optionalDependencies: - '@types/react': 19.1.11 - '@types/react-dom': 19.1.8(@types/react@19.1.11) + '@types/react': 19.1.12 + '@types/react-dom': 19.1.8(@types/react@19.1.12) - '@radix-ui/react-presence@1.1.5(@types/react-dom@19.1.8(@types/react@19.1.11))(@types/react@19.1.11)(react-dom@19.1.1(react@19.1.1))(react@19.1.1)': + '@radix-ui/react-presence@1.1.5(@types/react-dom@19.1.8(@types/react@19.1.12))(@types/react@19.1.12)(react-dom@19.1.1(react@19.1.1))(react@19.1.1)': dependencies: - '@radix-ui/react-compose-refs': 1.1.2(@types/react@19.1.11)(react@19.1.1) - '@radix-ui/react-use-layout-effect': 1.1.1(@types/react@19.1.11)(react@19.1.1) + '@radix-ui/react-compose-refs': 1.1.2(@types/react@19.1.12)(react@19.1.1) + '@radix-ui/react-use-layout-effect': 1.1.1(@types/react@19.1.12)(react@19.1.1) react: 19.1.1 react-dom: 19.1.1(react@19.1.1) optionalDependencies: - '@types/react': 19.1.11 - '@types/react-dom': 19.1.8(@types/react@19.1.11) + '@types/react': 19.1.12 + '@types/react-dom': 19.1.8(@types/react@19.1.12) - '@radix-ui/react-primitive@2.1.3(@types/react-dom@19.1.8(@types/react@19.1.11))(@types/react@19.1.11)(react-dom@19.1.1(react@19.1.1))(react@19.1.1)': + '@radix-ui/react-primitive@2.1.3(@types/react-dom@19.1.8(@types/react@19.1.12))(@types/react@19.1.12)(react-dom@19.1.1(react@19.1.1))(react@19.1.1)': dependencies: - '@radix-ui/react-slot': 1.2.3(@types/react@19.1.11)(react@19.1.1) + '@radix-ui/react-slot': 1.2.3(@types/react@19.1.12)(react@19.1.1) react: 19.1.1 react-dom: 19.1.1(react@19.1.1) optionalDependencies: - '@types/react': 19.1.11 - '@types/react-dom': 19.1.8(@types/react@19.1.11) + '@types/react': 19.1.12 + '@types/react-dom': 19.1.8(@types/react@19.1.12) - '@radix-ui/react-roving-focus@1.1.11(@types/react-dom@19.1.8(@types/react@19.1.11))(@types/react@19.1.11)(react-dom@19.1.1(react@19.1.1))(react@19.1.1)': + '@radix-ui/react-roving-focus@1.1.11(@types/react-dom@19.1.8(@types/react@19.1.12))(@types/react@19.1.12)(react-dom@19.1.1(react@19.1.1))(react@19.1.1)': dependencies: '@radix-ui/primitive': 1.1.3 - '@radix-ui/react-collection': 1.1.7(@types/react-dom@19.1.8(@types/react@19.1.11))(@types/react@19.1.11)(react-dom@19.1.1(react@19.1.1))(react@19.1.1) - '@radix-ui/react-compose-refs': 1.1.2(@types/react@19.1.11)(react@19.1.1) - '@radix-ui/react-context': 1.1.2(@types/react@19.1.11)(react@19.1.1) - '@radix-ui/react-direction': 1.1.1(@types/react@19.1.11)(react@19.1.1) - '@radix-ui/react-id': 1.1.1(@types/react@19.1.11)(react@19.1.1) - '@radix-ui/react-primitive': 2.1.3(@types/react-dom@19.1.8(@types/react@19.1.11))(@types/react@19.1.11)(react-dom@19.1.1(react@19.1.1))(react@19.1.1) - '@radix-ui/react-use-callback-ref': 1.1.1(@types/react@19.1.11)(react@19.1.1) - '@radix-ui/react-use-controllable-state': 1.2.2(@types/react@19.1.11)(react@19.1.1) + '@radix-ui/react-collection': 1.1.7(@types/react-dom@19.1.8(@types/react@19.1.12))(@types/react@19.1.12)(react-dom@19.1.1(react@19.1.1))(react@19.1.1) + '@radix-ui/react-compose-refs': 1.1.2(@types/react@19.1.12)(react@19.1.1) + '@radix-ui/react-context': 1.1.2(@types/react@19.1.12)(react@19.1.1) + '@radix-ui/react-direction': 1.1.1(@types/react@19.1.12)(react@19.1.1) + '@radix-ui/react-id': 1.1.1(@types/react@19.1.12)(react@19.1.1) + '@radix-ui/react-primitive': 2.1.3(@types/react-dom@19.1.8(@types/react@19.1.12))(@types/react@19.1.12)(react-dom@19.1.1(react@19.1.1))(react@19.1.1) + '@radix-ui/react-use-callback-ref': 1.1.1(@types/react@19.1.12)(react@19.1.1) + '@radix-ui/react-use-controllable-state': 1.2.2(@types/react@19.1.12)(react@19.1.1) react: 19.1.1 react-dom: 19.1.1(react@19.1.1) optionalDependencies: - '@types/react': 19.1.11 - '@types/react-dom': 19.1.8(@types/react@19.1.11) + '@types/react': 19.1.12 + '@types/react-dom': 19.1.8(@types/react@19.1.12) - '@radix-ui/react-scroll-area@1.2.10(@types/react-dom@19.1.8(@types/react@19.1.11))(@types/react@19.1.11)(react-dom@19.1.1(react@19.1.1))(react@19.1.1)': + '@radix-ui/react-scroll-area@1.2.10(@types/react-dom@19.1.8(@types/react@19.1.12))(@types/react@19.1.12)(react-dom@19.1.1(react@19.1.1))(react@19.1.1)': dependencies: '@radix-ui/number': 1.1.1 '@radix-ui/primitive': 1.1.3 - '@radix-ui/react-compose-refs': 1.1.2(@types/react@19.1.11)(react@19.1.1) - '@radix-ui/react-context': 1.1.2(@types/react@19.1.11)(react@19.1.1) - '@radix-ui/react-direction': 1.1.1(@types/react@19.1.11)(react@19.1.1) - '@radix-ui/react-presence': 1.1.5(@types/react-dom@19.1.8(@types/react@19.1.11))(@types/react@19.1.11)(react-dom@19.1.1(react@19.1.1))(react@19.1.1) - '@radix-ui/react-primitive': 2.1.3(@types/react-dom@19.1.8(@types/react@19.1.11))(@types/react@19.1.11)(react-dom@19.1.1(react@19.1.1))(react@19.1.1) - '@radix-ui/react-use-callback-ref': 1.1.1(@types/react@19.1.11)(react@19.1.1) - '@radix-ui/react-use-layout-effect': 1.1.1(@types/react@19.1.11)(react@19.1.1) + '@radix-ui/react-compose-refs': 1.1.2(@types/react@19.1.12)(react@19.1.1) + '@radix-ui/react-context': 1.1.2(@types/react@19.1.12)(react@19.1.1) + '@radix-ui/react-direction': 1.1.1(@types/react@19.1.12)(react@19.1.1) + '@radix-ui/react-presence': 1.1.5(@types/react-dom@19.1.8(@types/react@19.1.12))(@types/react@19.1.12)(react-dom@19.1.1(react@19.1.1))(react@19.1.1) + '@radix-ui/react-primitive': 2.1.3(@types/react-dom@19.1.8(@types/react@19.1.12))(@types/react@19.1.12)(react-dom@19.1.1(react@19.1.1))(react@19.1.1) + '@radix-ui/react-use-callback-ref': 1.1.1(@types/react@19.1.12)(react@19.1.1) + '@radix-ui/react-use-layout-effect': 1.1.1(@types/react@19.1.12)(react@19.1.1) react: 19.1.1 react-dom: 19.1.1(react@19.1.1) optionalDependencies: - '@types/react': 19.1.11 - '@types/react-dom': 19.1.8(@types/react@19.1.11) + '@types/react': 19.1.12 + '@types/react-dom': 19.1.8(@types/react@19.1.12) - '@radix-ui/react-slot@1.2.3(@types/react@19.1.11)(react@19.1.1)': + '@radix-ui/react-slot@1.2.3(@types/react@19.1.12)(react@19.1.1)': dependencies: - '@radix-ui/react-compose-refs': 1.1.2(@types/react@19.1.11)(react@19.1.1) + '@radix-ui/react-compose-refs': 1.1.2(@types/react@19.1.12)(react@19.1.1) react: 19.1.1 optionalDependencies: - '@types/react': 19.1.11 + '@types/react': 19.1.12 - '@radix-ui/react-tabs@1.1.13(@types/react-dom@19.1.8(@types/react@19.1.11))(@types/react@19.1.11)(react-dom@19.1.1(react@19.1.1))(react@19.1.1)': + '@radix-ui/react-tabs@1.1.13(@types/react-dom@19.1.8(@types/react@19.1.12))(@types/react@19.1.12)(react-dom@19.1.1(react@19.1.1))(react@19.1.1)': dependencies: '@radix-ui/primitive': 1.1.3 - '@radix-ui/react-context': 1.1.2(@types/react@19.1.11)(react@19.1.1) - '@radix-ui/react-direction': 1.1.1(@types/react@19.1.11)(react@19.1.1) - '@radix-ui/react-id': 1.1.1(@types/react@19.1.11)(react@19.1.1) - '@radix-ui/react-presence': 1.1.5(@types/react-dom@19.1.8(@types/react@19.1.11))(@types/react@19.1.11)(react-dom@19.1.1(react@19.1.1))(react@19.1.1) - '@radix-ui/react-primitive': 2.1.3(@types/react-dom@19.1.8(@types/react@19.1.11))(@types/react@19.1.11)(react-dom@19.1.1(react@19.1.1))(react@19.1.1) - '@radix-ui/react-roving-focus': 1.1.11(@types/react-dom@19.1.8(@types/react@19.1.11))(@types/react@19.1.11)(react-dom@19.1.1(react@19.1.1))(react@19.1.1) - '@radix-ui/react-use-controllable-state': 1.2.2(@types/react@19.1.11)(react@19.1.1) + '@radix-ui/react-context': 1.1.2(@types/react@19.1.12)(react@19.1.1) + '@radix-ui/react-direction': 1.1.1(@types/react@19.1.12)(react@19.1.1) + '@radix-ui/react-id': 1.1.1(@types/react@19.1.12)(react@19.1.1) + '@radix-ui/react-presence': 1.1.5(@types/react-dom@19.1.8(@types/react@19.1.12))(@types/react@19.1.12)(react-dom@19.1.1(react@19.1.1))(react@19.1.1) + '@radix-ui/react-primitive': 2.1.3(@types/react-dom@19.1.8(@types/react@19.1.12))(@types/react@19.1.12)(react-dom@19.1.1(react@19.1.1))(react@19.1.1) + '@radix-ui/react-roving-focus': 1.1.11(@types/react-dom@19.1.8(@types/react@19.1.12))(@types/react@19.1.12)(react-dom@19.1.1(react@19.1.1))(react@19.1.1) + '@radix-ui/react-use-controllable-state': 1.2.2(@types/react@19.1.12)(react@19.1.1) react: 19.1.1 react-dom: 19.1.1(react@19.1.1) optionalDependencies: - '@types/react': 19.1.11 - '@types/react-dom': 19.1.8(@types/react@19.1.11) + '@types/react': 19.1.12 + '@types/react-dom': 19.1.8(@types/react@19.1.12) - '@radix-ui/react-toast@1.2.15(@types/react-dom@19.1.8(@types/react@19.1.11))(@types/react@19.1.11)(react-dom@19.1.1(react@19.1.1))(react@19.1.1)': + '@radix-ui/react-toast@1.2.15(@types/react-dom@19.1.8(@types/react@19.1.12))(@types/react@19.1.12)(react-dom@19.1.1(react@19.1.1))(react@19.1.1)': dependencies: '@radix-ui/primitive': 1.1.3 - '@radix-ui/react-collection': 1.1.7(@types/react-dom@19.1.8(@types/react@19.1.11))(@types/react@19.1.11)(react-dom@19.1.1(react@19.1.1))(react@19.1.1) - '@radix-ui/react-compose-refs': 1.1.2(@types/react@19.1.11)(react@19.1.1) - '@radix-ui/react-context': 1.1.2(@types/react@19.1.11)(react@19.1.1) - '@radix-ui/react-dismissable-layer': 1.1.11(@types/react-dom@19.1.8(@types/react@19.1.11))(@types/react@19.1.11)(react-dom@19.1.1(react@19.1.1))(react@19.1.1) - '@radix-ui/react-portal': 1.1.9(@types/react-dom@19.1.8(@types/react@19.1.11))(@types/react@19.1.11)(react-dom@19.1.1(react@19.1.1))(react@19.1.1) - '@radix-ui/react-presence': 1.1.5(@types/react-dom@19.1.8(@types/react@19.1.11))(@types/react@19.1.11)(react-dom@19.1.1(react@19.1.1))(react@19.1.1) - '@radix-ui/react-primitive': 2.1.3(@types/react-dom@19.1.8(@types/react@19.1.11))(@types/react@19.1.11)(react-dom@19.1.1(react@19.1.1))(react@19.1.1) - '@radix-ui/react-use-callback-ref': 1.1.1(@types/react@19.1.11)(react@19.1.1) - '@radix-ui/react-use-controllable-state': 1.2.2(@types/react@19.1.11)(react@19.1.1) - '@radix-ui/react-use-layout-effect': 1.1.1(@types/react@19.1.11)(react@19.1.1) - '@radix-ui/react-visually-hidden': 1.2.3(@types/react-dom@19.1.8(@types/react@19.1.11))(@types/react@19.1.11)(react-dom@19.1.1(react@19.1.1))(react@19.1.1) + '@radix-ui/react-collection': 1.1.7(@types/react-dom@19.1.8(@types/react@19.1.12))(@types/react@19.1.12)(react-dom@19.1.1(react@19.1.1))(react@19.1.1) + '@radix-ui/react-compose-refs': 1.1.2(@types/react@19.1.12)(react@19.1.1) + '@radix-ui/react-context': 1.1.2(@types/react@19.1.12)(react@19.1.1) + '@radix-ui/react-dismissable-layer': 1.1.11(@types/react-dom@19.1.8(@types/react@19.1.12))(@types/react@19.1.12)(react-dom@19.1.1(react@19.1.1))(react@19.1.1) + '@radix-ui/react-portal': 1.1.9(@types/react-dom@19.1.8(@types/react@19.1.12))(@types/react@19.1.12)(react-dom@19.1.1(react@19.1.1))(react@19.1.1) + '@radix-ui/react-presence': 1.1.5(@types/react-dom@19.1.8(@types/react@19.1.12))(@types/react@19.1.12)(react-dom@19.1.1(react@19.1.1))(react@19.1.1) + '@radix-ui/react-primitive': 2.1.3(@types/react-dom@19.1.8(@types/react@19.1.12))(@types/react@19.1.12)(react-dom@19.1.1(react@19.1.1))(react@19.1.1) + '@radix-ui/react-use-callback-ref': 1.1.1(@types/react@19.1.12)(react@19.1.1) + '@radix-ui/react-use-controllable-state': 1.2.2(@types/react@19.1.12)(react@19.1.1) + '@radix-ui/react-use-layout-effect': 1.1.1(@types/react@19.1.12)(react@19.1.1) + '@radix-ui/react-visually-hidden': 1.2.3(@types/react-dom@19.1.8(@types/react@19.1.12))(@types/react@19.1.12)(react-dom@19.1.1(react@19.1.1))(react@19.1.1) react: 19.1.1 react-dom: 19.1.1(react@19.1.1) optionalDependencies: - '@types/react': 19.1.11 - '@types/react-dom': 19.1.8(@types/react@19.1.11) + '@types/react': 19.1.12 + '@types/react-dom': 19.1.8(@types/react@19.1.12) - '@radix-ui/react-use-callback-ref@1.1.1(@types/react@19.1.11)(react@19.1.1)': + '@radix-ui/react-use-callback-ref@1.1.1(@types/react@19.1.12)(react@19.1.1)': dependencies: react: 19.1.1 optionalDependencies: - '@types/react': 19.1.11 + '@types/react': 19.1.12 - '@radix-ui/react-use-controllable-state@1.2.2(@types/react@19.1.11)(react@19.1.1)': + '@radix-ui/react-use-controllable-state@1.2.2(@types/react@19.1.12)(react@19.1.1)': dependencies: - '@radix-ui/react-use-effect-event': 0.0.2(@types/react@19.1.11)(react@19.1.1) - '@radix-ui/react-use-layout-effect': 1.1.1(@types/react@19.1.11)(react@19.1.1) + '@radix-ui/react-use-effect-event': 0.0.2(@types/react@19.1.12)(react@19.1.1) + '@radix-ui/react-use-layout-effect': 1.1.1(@types/react@19.1.12)(react@19.1.1) react: 19.1.1 optionalDependencies: - '@types/react': 19.1.11 + '@types/react': 19.1.12 - '@radix-ui/react-use-effect-event@0.0.2(@types/react@19.1.11)(react@19.1.1)': + '@radix-ui/react-use-effect-event@0.0.2(@types/react@19.1.12)(react@19.1.1)': dependencies: - '@radix-ui/react-use-layout-effect': 1.1.1(@types/react@19.1.11)(react@19.1.1) + '@radix-ui/react-use-layout-effect': 1.1.1(@types/react@19.1.12)(react@19.1.1) react: 19.1.1 optionalDependencies: - '@types/react': 19.1.11 + '@types/react': 19.1.12 - '@radix-ui/react-use-escape-keydown@1.1.1(@types/react@19.1.11)(react@19.1.1)': + '@radix-ui/react-use-escape-keydown@1.1.1(@types/react@19.1.12)(react@19.1.1)': dependencies: - '@radix-ui/react-use-callback-ref': 1.1.1(@types/react@19.1.11)(react@19.1.1) + '@radix-ui/react-use-callback-ref': 1.1.1(@types/react@19.1.12)(react@19.1.1) react: 19.1.1 optionalDependencies: - '@types/react': 19.1.11 + '@types/react': 19.1.12 - '@radix-ui/react-use-layout-effect@1.1.1(@types/react@19.1.11)(react@19.1.1)': + '@radix-ui/react-use-layout-effect@1.1.1(@types/react@19.1.12)(react@19.1.1)': dependencies: react: 19.1.1 optionalDependencies: - '@types/react': 19.1.11 + '@types/react': 19.1.12 - '@radix-ui/react-use-previous@1.1.1(@types/react@19.1.11)(react@19.1.1)': + '@radix-ui/react-use-previous@1.1.1(@types/react@19.1.12)(react@19.1.1)': dependencies: react: 19.1.1 optionalDependencies: - '@types/react': 19.1.11 + '@types/react': 19.1.12 - '@radix-ui/react-use-rect@1.1.1(@types/react@19.1.11)(react@19.1.1)': + '@radix-ui/react-use-rect@1.1.1(@types/react@19.1.12)(react@19.1.1)': dependencies: '@radix-ui/rect': 1.1.1 react: 19.1.1 optionalDependencies: - '@types/react': 19.1.11 + '@types/react': 19.1.12 - '@radix-ui/react-use-size@1.1.1(@types/react@19.1.11)(react@19.1.1)': + '@radix-ui/react-use-size@1.1.1(@types/react@19.1.12)(react@19.1.1)': dependencies: - '@radix-ui/react-use-layout-effect': 1.1.1(@types/react@19.1.11)(react@19.1.1) + '@radix-ui/react-use-layout-effect': 1.1.1(@types/react@19.1.12)(react@19.1.1) react: 19.1.1 optionalDependencies: - '@types/react': 19.1.11 + '@types/react': 19.1.12 - '@radix-ui/react-visually-hidden@1.2.3(@types/react-dom@19.1.8(@types/react@19.1.11))(@types/react@19.1.11)(react-dom@19.1.1(react@19.1.1))(react@19.1.1)': + '@radix-ui/react-visually-hidden@1.2.3(@types/react-dom@19.1.8(@types/react@19.1.12))(@types/react@19.1.12)(react-dom@19.1.1(react@19.1.1))(react@19.1.1)': dependencies: - '@radix-ui/react-primitive': 2.1.3(@types/react-dom@19.1.8(@types/react@19.1.11))(@types/react@19.1.11)(react-dom@19.1.1(react@19.1.1))(react@19.1.1) + '@radix-ui/react-primitive': 2.1.3(@types/react-dom@19.1.8(@types/react@19.1.12))(@types/react@19.1.12)(react-dom@19.1.1(react@19.1.1))(react@19.1.1) react: 19.1.1 react-dom: 19.1.1(react@19.1.1) optionalDependencies: - '@types/react': 19.1.11 - '@types/react-dom': 19.1.8(@types/react@19.1.11) + '@types/react': 19.1.12 + '@types/react-dom': 19.1.8(@types/react@19.1.12) '@radix-ui/rect@1.1.1': {} @@ -12740,11 +12740,11 @@ snapshots: '@types/picomatch@4.0.2': {} - '@types/react-dom@19.1.8(@types/react@19.1.11)': + '@types/react-dom@19.1.8(@types/react@19.1.12)': dependencies: - '@types/react': 19.1.11 + '@types/react': 19.1.12 - '@types/react@19.1.11': + '@types/react@19.1.12': dependencies: csstype: 3.1.3 @@ -14843,7 +14843,7 @@ snapshots: fsevents@2.3.3: optional: true - fumadocs-core@15.7.3(@types/react@19.1.11)(next@15.5.2(react-dom@19.1.1(react@19.1.1))(react@19.1.1)(sass@1.90.0))(react-dom@19.1.1(react@19.1.1))(react@19.1.1): + fumadocs-core@15.7.3(@types/react@19.1.12)(next@15.5.2(react-dom@19.1.1(react@19.1.1))(react@19.1.1)(sass@1.90.0))(react-dom@19.1.1(react@19.1.1))(react@19.1.1): dependencies: '@formatjs/intl-localematcher': 0.6.1 '@orama/orama': 3.1.11 @@ -14855,7 +14855,7 @@ snapshots: image-size: 2.0.2 negotiator: 1.0.0 npm-to-yarn: 3.0.1 - react-remove-scroll: 2.7.1(@types/react@19.1.11)(react@19.1.1) + react-remove-scroll: 2.7.1(@types/react@19.1.12)(react@19.1.1) remark: 15.0.1 remark-gfm: 4.0.1 remark-rehype: 11.1.2 @@ -14863,31 +14863,31 @@ snapshots: shiki: 3.12.0 unist-util-visit: 5.0.0 optionalDependencies: - '@types/react': 19.1.11 + '@types/react': 19.1.12 next: 15.5.2(react-dom@19.1.1(react@19.1.1))(react@19.1.1)(sass@1.90.0) react: 19.1.1 react-dom: 19.1.1(react@19.1.1) transitivePeerDependencies: - supports-color - fumadocs-docgen@3.0.0(fumadocs-core@15.7.3(@types/react@19.1.11)(next@15.5.2(react-dom@19.1.1(react@19.1.1))(react@19.1.1)(sass@1.90.0))(react-dom@19.1.1(react@19.1.1))(react@19.1.1)): + fumadocs-docgen@3.0.0(fumadocs-core@15.7.3(@types/react@19.1.12)(next@15.5.2(react-dom@19.1.1(react@19.1.1))(react@19.1.1)(sass@1.90.0))(react-dom@19.1.1(react@19.1.1))(react@19.1.1)): dependencies: estree-util-to-js: 2.0.0 estree-util-value-to-estree: 3.4.0 - fumadocs-core: 15.7.3(@types/react@19.1.11)(next@15.5.2(react-dom@19.1.1(react@19.1.1))(react@19.1.1)(sass@1.90.0))(react-dom@19.1.1(react@19.1.1))(react@19.1.1) + fumadocs-core: 15.7.3(@types/react@19.1.12)(next@15.5.2(react-dom@19.1.1(react@19.1.1))(react@19.1.1)(sass@1.90.0))(react-dom@19.1.1(react@19.1.1))(react@19.1.1) npm-to-yarn: 3.0.1 oxc-transform: 0.82.3 unist-util-visit: 5.0.0 zod: 4.1.3 - fumadocs-mdx@11.8.1(acorn@8.15.0)(fumadocs-core@15.7.3(@types/react@19.1.11)(next@15.5.2(react-dom@19.1.1(react@19.1.1))(react@19.1.1)(sass@1.90.0))(react-dom@19.1.1(react@19.1.1))(react@19.1.1))(next@15.5.2(react-dom@19.1.1(react@19.1.1))(react@19.1.1)(sass@1.90.0))(react@19.1.1)(vite@7.1.3(@types/node@24.3.0)(jiti@2.5.1)(lightningcss@1.30.1)(sass-embedded@1.90.0)(sass@1.90.0)(terser@5.43.1)(tsx@4.20.5)(yaml@2.8.1)): + fumadocs-mdx@11.8.1(acorn@8.15.0)(fumadocs-core@15.7.3(@types/react@19.1.12)(next@15.5.2(react-dom@19.1.1(react@19.1.1))(react@19.1.1)(sass@1.90.0))(react-dom@19.1.1(react@19.1.1))(react@19.1.1))(next@15.5.2(react-dom@19.1.1(react@19.1.1))(react@19.1.1)(sass@1.90.0))(react@19.1.1)(vite@7.1.3(@types/node@24.3.0)(jiti@2.5.1)(lightningcss@1.30.1)(sass-embedded@1.90.0)(sass@1.90.0)(terser@5.43.1)(tsx@4.20.5)(yaml@2.8.1)): dependencies: '@mdx-js/mdx': 3.1.0(acorn@8.15.0) '@standard-schema/spec': 1.0.0 chokidar: 4.0.3 esbuild: 0.25.9 estree-util-value-to-estree: 3.4.0 - fumadocs-core: 15.7.3(@types/react@19.1.11)(next@15.5.2(react-dom@19.1.1(react@19.1.1))(react@19.1.1)(sass@1.90.0))(react-dom@19.1.1(react@19.1.1))(react@19.1.1) + fumadocs-core: 15.7.3(@types/react@19.1.12)(next@15.5.2(react-dom@19.1.1(react@19.1.1))(react@19.1.1)(sass@1.90.0))(react-dom@19.1.1(react@19.1.1))(react@19.1.1) js-yaml: 4.1.0 lru-cache: 11.1.0 picocolors: 1.1.1 @@ -14903,11 +14903,11 @@ snapshots: - acorn - supports-color - fumadocs-twoslash@3.1.6(@types/react-dom@19.1.8(@types/react@19.1.11))(@types/react@19.1.11)(fumadocs-ui@15.7.3(@types/react-dom@19.1.8(@types/react@19.1.11))(@types/react@19.1.11)(next@15.5.2(react-dom@19.1.1(react@19.1.1))(react@19.1.1)(sass@1.90.0))(react-dom@19.1.1(react@19.1.1))(react@19.1.1)(tailwindcss@4.1.12))(react-dom@19.1.1(react@19.1.1))(react@19.1.1)(typescript@5.9.2): + fumadocs-twoslash@3.1.6(@types/react-dom@19.1.8(@types/react@19.1.12))(@types/react@19.1.12)(fumadocs-ui@15.7.3(@types/react-dom@19.1.8(@types/react@19.1.12))(@types/react@19.1.12)(next@15.5.2(react-dom@19.1.1(react@19.1.1))(react@19.1.1)(sass@1.90.0))(react-dom@19.1.1(react@19.1.1))(react@19.1.1)(tailwindcss@4.1.12))(react-dom@19.1.1(react@19.1.1))(react@19.1.1)(typescript@5.9.2): dependencies: - '@radix-ui/react-popover': 1.1.15(@types/react-dom@19.1.8(@types/react@19.1.11))(@types/react@19.1.11)(react-dom@19.1.1(react@19.1.1))(react@19.1.1) + '@radix-ui/react-popover': 1.1.15(@types/react-dom@19.1.8(@types/react@19.1.12))(@types/react@19.1.12)(react-dom@19.1.1(react@19.1.1))(react@19.1.1) '@shikijs/twoslash': 3.11.0(typescript@5.9.2) - fumadocs-ui: 15.7.3(@types/react-dom@19.1.8(@types/react@19.1.11))(@types/react@19.1.11)(next@15.5.2(react-dom@19.1.1(react@19.1.1))(react@19.1.1)(sass@1.90.0))(react-dom@19.1.1(react@19.1.1))(react@19.1.1)(tailwindcss@4.1.12) + fumadocs-ui: 15.7.3(@types/react-dom@19.1.8(@types/react@19.1.12))(@types/react@19.1.12)(next@15.5.2(react-dom@19.1.1(react@19.1.1))(react@19.1.1)(sass@1.90.0))(react-dom@19.1.1(react@19.1.1))(react@19.1.1)(tailwindcss@4.1.12) mdast-util-from-markdown: 2.0.2 mdast-util-gfm: 3.1.0 mdast-util-to-hast: 13.2.0 @@ -14916,14 +14916,14 @@ snapshots: tailwind-merge: 3.3.1 twoslash: 0.3.4(typescript@5.9.2) optionalDependencies: - '@types/react': 19.1.11 + '@types/react': 19.1.12 transitivePeerDependencies: - '@types/react-dom' - react-dom - supports-color - typescript - fumadocs-typescript@4.0.6(@types/react@19.1.11)(typescript@5.9.2): + fumadocs-typescript@4.0.6(@types/react@19.1.12)(typescript@5.9.2): dependencies: estree-util-value-to-estree: 3.4.0 hast-util-to-estree: 3.1.3 @@ -14936,24 +14936,24 @@ snapshots: typescript: 5.9.2 unist-util-visit: 5.0.0 optionalDependencies: - '@types/react': 19.1.11 + '@types/react': 19.1.12 transitivePeerDependencies: - supports-color - fumadocs-ui@15.7.3(@types/react-dom@19.1.8(@types/react@19.1.11))(@types/react@19.1.11)(next@15.5.2(react-dom@19.1.1(react@19.1.1))(react@19.1.1)(sass@1.90.0))(react-dom@19.1.1(react@19.1.1))(react@19.1.1)(tailwindcss@4.1.12): - dependencies: - '@radix-ui/react-accordion': 1.2.12(@types/react-dom@19.1.8(@types/react@19.1.11))(@types/react@19.1.11)(react-dom@19.1.1(react@19.1.1))(react@19.1.1) - '@radix-ui/react-collapsible': 1.1.12(@types/react-dom@19.1.8(@types/react@19.1.11))(@types/react@19.1.11)(react-dom@19.1.1(react@19.1.1))(react@19.1.1) - '@radix-ui/react-dialog': 1.1.15(@types/react-dom@19.1.8(@types/react@19.1.11))(@types/react@19.1.11)(react-dom@19.1.1(react@19.1.1))(react@19.1.1) - '@radix-ui/react-direction': 1.1.1(@types/react@19.1.11)(react@19.1.1) - '@radix-ui/react-navigation-menu': 1.2.14(@types/react-dom@19.1.8(@types/react@19.1.11))(@types/react@19.1.11)(react-dom@19.1.1(react@19.1.1))(react@19.1.1) - '@radix-ui/react-popover': 1.1.15(@types/react-dom@19.1.8(@types/react@19.1.11))(@types/react@19.1.11)(react-dom@19.1.1(react@19.1.1))(react@19.1.1) - '@radix-ui/react-presence': 1.1.5(@types/react-dom@19.1.8(@types/react@19.1.11))(@types/react@19.1.11)(react-dom@19.1.1(react@19.1.1))(react@19.1.1) - '@radix-ui/react-scroll-area': 1.2.10(@types/react-dom@19.1.8(@types/react@19.1.11))(@types/react@19.1.11)(react-dom@19.1.1(react@19.1.1))(react@19.1.1) - '@radix-ui/react-slot': 1.2.3(@types/react@19.1.11)(react@19.1.1) - '@radix-ui/react-tabs': 1.1.13(@types/react-dom@19.1.8(@types/react@19.1.11))(@types/react@19.1.11)(react-dom@19.1.1(react@19.1.1))(react@19.1.1) + fumadocs-ui@15.7.3(@types/react-dom@19.1.8(@types/react@19.1.12))(@types/react@19.1.12)(next@15.5.2(react-dom@19.1.1(react@19.1.1))(react@19.1.1)(sass@1.90.0))(react-dom@19.1.1(react@19.1.1))(react@19.1.1)(tailwindcss@4.1.12): + dependencies: + '@radix-ui/react-accordion': 1.2.12(@types/react-dom@19.1.8(@types/react@19.1.12))(@types/react@19.1.12)(react-dom@19.1.1(react@19.1.1))(react@19.1.1) + '@radix-ui/react-collapsible': 1.1.12(@types/react-dom@19.1.8(@types/react@19.1.12))(@types/react@19.1.12)(react-dom@19.1.1(react@19.1.1))(react@19.1.1) + '@radix-ui/react-dialog': 1.1.15(@types/react-dom@19.1.8(@types/react@19.1.12))(@types/react@19.1.12)(react-dom@19.1.1(react@19.1.1))(react@19.1.1) + '@radix-ui/react-direction': 1.1.1(@types/react@19.1.12)(react@19.1.1) + '@radix-ui/react-navigation-menu': 1.2.14(@types/react-dom@19.1.8(@types/react@19.1.12))(@types/react@19.1.12)(react-dom@19.1.1(react@19.1.1))(react@19.1.1) + '@radix-ui/react-popover': 1.1.15(@types/react-dom@19.1.8(@types/react@19.1.12))(@types/react@19.1.12)(react-dom@19.1.1(react@19.1.1))(react@19.1.1) + '@radix-ui/react-presence': 1.1.5(@types/react-dom@19.1.8(@types/react@19.1.12))(@types/react@19.1.12)(react-dom@19.1.1(react@19.1.1))(react@19.1.1) + '@radix-ui/react-scroll-area': 1.2.10(@types/react-dom@19.1.8(@types/react@19.1.12))(@types/react@19.1.12)(react-dom@19.1.1(react@19.1.1))(react@19.1.1) + '@radix-ui/react-slot': 1.2.3(@types/react@19.1.12)(react@19.1.1) + '@radix-ui/react-tabs': 1.1.13(@types/react-dom@19.1.8(@types/react@19.1.12))(@types/react@19.1.12)(react-dom@19.1.1(react@19.1.1))(react@19.1.1) class-variance-authority: 0.7.1 - fumadocs-core: 15.7.3(@types/react@19.1.11)(next@15.5.2(react-dom@19.1.1(react@19.1.1))(react@19.1.1)(sass@1.90.0))(react-dom@19.1.1(react@19.1.1))(react@19.1.1) + fumadocs-core: 15.7.3(@types/react@19.1.12)(next@15.5.2(react-dom@19.1.1(react@19.1.1))(react@19.1.1)(sass@1.90.0))(react-dom@19.1.1(react@19.1.1))(react@19.1.1) lodash.merge: 4.6.2 next-themes: 0.4.6(react-dom@19.1.1(react@19.1.1))(react@19.1.1) postcss-selector-parser: 7.1.0 @@ -14963,7 +14963,7 @@ snapshots: scroll-into-view-if-needed: 3.1.0 tailwind-merge: 3.3.1 optionalDependencies: - '@types/react': 19.1.11 + '@types/react': 19.1.12 next: 15.5.2(react-dom@19.1.1(react@19.1.1))(react@19.1.1)(sass@1.90.0) tailwindcss: 4.1.12 transitivePeerDependencies: @@ -16988,32 +16988,32 @@ snapshots: react-refresh@0.17.0: {} - react-remove-scroll-bar@2.3.8(@types/react@19.1.11)(react@19.1.1): + react-remove-scroll-bar@2.3.8(@types/react@19.1.12)(react@19.1.1): dependencies: react: 19.1.1 - react-style-singleton: 2.2.3(@types/react@19.1.11)(react@19.1.1) + react-style-singleton: 2.2.3(@types/react@19.1.12)(react@19.1.1) tslib: 2.8.1 optionalDependencies: - '@types/react': 19.1.11 + '@types/react': 19.1.12 - react-remove-scroll@2.7.1(@types/react@19.1.11)(react@19.1.1): + react-remove-scroll@2.7.1(@types/react@19.1.12)(react@19.1.1): dependencies: react: 19.1.1 - react-remove-scroll-bar: 2.3.8(@types/react@19.1.11)(react@19.1.1) - react-style-singleton: 2.2.3(@types/react@19.1.11)(react@19.1.1) + react-remove-scroll-bar: 2.3.8(@types/react@19.1.12)(react@19.1.1) + react-style-singleton: 2.2.3(@types/react@19.1.12)(react@19.1.1) tslib: 2.8.1 - use-callback-ref: 1.3.3(@types/react@19.1.11)(react@19.1.1) - use-sidecar: 1.1.3(@types/react@19.1.11)(react@19.1.1) + use-callback-ref: 1.3.3(@types/react@19.1.12)(react@19.1.1) + use-sidecar: 1.1.3(@types/react@19.1.12)(react@19.1.1) optionalDependencies: - '@types/react': 19.1.11 + '@types/react': 19.1.12 - react-style-singleton@2.2.3(@types/react@19.1.11)(react@19.1.1): + react-style-singleton@2.2.3(@types/react@19.1.12)(react@19.1.1): dependencies: get-nonce: 1.0.1 react: 19.1.1 tslib: 2.8.1 optionalDependencies: - '@types/react': 19.1.11 + '@types/react': 19.1.12 react@19.1.1: {} @@ -18264,20 +18264,20 @@ snapshots: dependencies: punycode: 2.3.1 - use-callback-ref@1.3.3(@types/react@19.1.11)(react@19.1.1): + use-callback-ref@1.3.3(@types/react@19.1.12)(react@19.1.1): dependencies: react: 19.1.1 tslib: 2.8.1 optionalDependencies: - '@types/react': 19.1.11 + '@types/react': 19.1.12 - use-sidecar@1.1.3(@types/react@19.1.11)(react@19.1.1): + use-sidecar@1.1.3(@types/react@19.1.12)(react@19.1.1): dependencies: detect-node-es: 1.1.0 react: 19.1.1 tslib: 2.8.1 optionalDependencies: - '@types/react': 19.1.11 + '@types/react': 19.1.12 use-sync-external-store@1.5.0(react@19.1.1): dependencies: