))}
diff --git a/apps/ui-components/components/ui/table.tsx b/apps/ui-components/components/ui/table.tsx
index 4b3c98ea4..09600ab37 100644
--- a/apps/ui-components/components/ui/table.tsx
+++ b/apps/ui-components/components/ui/table.tsx
@@ -70,7 +70,7 @@ function TableHead({ className, ...props }: React.ComponentProps<"th">) {
| [role=checkbox]]:translate-y-[2px]",
+ "text-foreground h-10 whitespace-nowrap px-2 text-left align-middle font-medium [&:has([role=checkbox])]:pr-0 [&>[role=checkbox]]:translate-y-[2px]",
className,
)}
{...props}
@@ -83,7 +83,7 @@ function TableCell({ className, ...props }: React.ComponentProps<"td">) {
| [role=checkbox]]:translate-y-[2px]",
+ "whitespace-nowrap p-2 align-middle [&:has([role=checkbox])]:pr-0 [&>[role=checkbox]]:translate-y-[2px]",
className,
)}
{...props}
diff --git a/apps/ui-components/components/ui/toggle-group.tsx b/apps/ui-components/components/ui/toggle-group.tsx
index 27ec9aaea..61e94a05e 100644
--- a/apps/ui-components/components/ui/toggle-group.tsx
+++ b/apps/ui-components/components/ui/toggle-group.tsx
@@ -36,7 +36,7 @@ function ToggleGroup({
data-spacing={spacing}
style={{ "--gap": spacing } as React.CSSProperties}
className={cn(
- "group/toggle-group flex w-fit items-center gap-[--spacing(var(--gap))] rounded-md data-[spacing=default]:data-[variant=outline]:shadow-xs",
+ "group/toggle-group data-[spacing=default]:data-[variant=outline]:shadow-xs flex w-fit items-center gap-[--spacing(var(--gap))] rounded-md",
className,
)}
{...props}
@@ -70,7 +70,7 @@ function ToggleGroupItem({
size: context.size || size,
}),
"w-auto min-w-0 shrink-0 px-3 focus:z-10 focus-visible:z-10",
- "data-[spacing=0]:rounded-none data-[spacing=0]:shadow-none data-[spacing=0]:first:rounded-l-md data-[spacing=0]:last:rounded-r-md data-[spacing=0]:data-[variant=outline]:border-l-0 data-[spacing=0]:data-[variant=outline]:first:border-l",
+ "data-[spacing=0]:rounded-none data-[spacing=0]:data-[variant=outline]:border-l-0 data-[spacing=0]:shadow-none data-[spacing=0]:first:rounded-l-md data-[spacing=0]:data-[variant=outline]:first:border-l data-[spacing=0]:last:rounded-r-md",
className,
)}
{...props}
diff --git a/apps/ui-components/eslint.config.mjs b/apps/ui-components/eslint.config.mjs
index 081f83e10..6f39a2991 100644
--- a/apps/ui-components/eslint.config.mjs
+++ b/apps/ui-components/eslint.config.mjs
@@ -1,4 +1,4 @@
import { nextJsConfig } from "eslint-config-xyflow/next-js";
/** @type {import("eslint").Linter.Config} */
-export default nextJsConfig;
+export default [...nextJsConfig, { ignores: ["scripts/"] }];
diff --git a/apps/ui-components/lib/utils.ts b/apps/ui-components/lib/utils.ts
index bd0c391dd..a5ef19350 100644
--- a/apps/ui-components/lib/utils.ts
+++ b/apps/ui-components/lib/utils.ts
@@ -1,6 +1,6 @@
-import { clsx, type ClassValue } from "clsx"
-import { twMerge } from "tailwind-merge"
+import { clsx, type ClassValue } from "clsx";
+import { twMerge } from "tailwind-merge";
export function cn(...inputs: ClassValue[]) {
- return twMerge(clsx(inputs))
+ return twMerge(clsx(inputs));
}
diff --git a/apps/ui-components/package.json b/apps/ui-components/package.json
index 16ae688c7..8da3b46a4 100644
--- a/apps/ui-components/package.json
+++ b/apps/ui-components/package.json
@@ -8,7 +8,8 @@
"dev": "pnpm run generate-registry && next dev --port 3004",
"build": "pnpm run generate-registry && next build",
"start": "next start",
- "lint": "next lint",
+ "lint": "eslint . --max-warnings 0",
+ "check-types": "tsc --noEmit",
"add-component": "node ./scripts/init-new-component.cjs",
"generate-registry": "node ./scripts/generate-registry.cjs"
},
@@ -21,31 +22,29 @@
"@radix-ui/react-toggle": "^1.1.10",
"@radix-ui/react-toggle-group": "^1.1.11",
"@vercel/analytics": "^1.5.0",
- "@xyflow/react": "^12.10.0",
+ "@xyflow/react": "catalog:",
"class-variance-authority": "^0.7.1",
"clsx": "^2.1.1",
"cmdk": "^1.1.1",
- "date-fns": "^4.1.0",
"lucide-react": "^0.503.0",
- "next": "15.5.7",
- "react": "^19.2.0",
+ "next": "catalog:",
+ "react": "catalog:",
+ "react-dom": "catalog:",
"react-day-picker": "^9.6.7",
- "react-dom": "^19.2.0",
"tailwind-merge": "^3.3.1",
"tailwindcss-animate": "^1.0.7"
},
"devDependencies": {
- "@tailwindcss/postcss": "^4.1.13",
- "@types/node": "^22",
- "@types/react": "^19.2.0",
- "@types/react-dom": "^19.2.0",
- "eslint": "^9.25.1",
- "eslint-config-next": "15.3.1",
+ "@types/node": "catalog:",
+ "@types/react": "catalog:",
+ "@types/react-dom": "catalog:",
+ "eslint": "catalog:",
"postcss": "^8",
- "prettier": "^3.5.3",
+ "prettier": "catalog:",
"prettier-plugin-tailwindcss": "^0.6.14",
"tailwindcss": "^4.1.13",
+ "@tailwindcss/postcss": "^4.1.13",
"tw-animate-css": "^1.4.0",
- "typescript": "^5.8.3"
+ "typescript": "catalog:"
}
}
diff --git a/apps/ui-components/registry/components/base-handle/component-example.tsx b/apps/ui-components/registry/components/base-handle/component-example.tsx
index a6cd5691b..c4745eae6 100644
--- a/apps/ui-components/registry/components/base-handle/component-example.tsx
+++ b/apps/ui-components/registry/components/base-handle/component-example.tsx
@@ -1,5 +1,5 @@
import React, { memo } from "react";
-import { NodeProps, Position } from "@xyflow/react";
+import { Position } from "@xyflow/react";
import { BaseHandle } from "@/registry/components/base-handle";
import { BaseNode, BaseNodeContent } from "@/registry/components/base-node";
@@ -16,4 +16,5 @@ const BaseHandleDemo = memo(() => {
);
});
+BaseHandleDemo.displayName = "BaseHandleDemo";
export default BaseHandleDemo;
diff --git a/apps/ui-components/registry/components/base-node/examples/action-bar-node/component-example.tsx b/apps/ui-components/registry/components/base-node/examples/action-bar-node/component-example.tsx
index 618260f54..cb2a2110a 100644
--- a/apps/ui-components/registry/components/base-node/examples/action-bar-node/component-example.tsx
+++ b/apps/ui-components/registry/components/base-node/examples/action-bar-node/component-example.tsx
@@ -71,3 +71,5 @@ export const ActionBarNodeDemo = memo(() => {
);
});
+
+ActionBarNodeDemo.displayName = "ActionBarNodeDemo";
diff --git a/apps/ui-components/registry/components/base-node/examples/annotation-node/component-example.tsx b/apps/ui-components/registry/components/base-node/examples/annotation-node/component-example.tsx
index bebedd7e6..5793387d9 100644
--- a/apps/ui-components/registry/components/base-node/examples/annotation-node/component-example.tsx
+++ b/apps/ui-components/registry/components/base-node/examples/annotation-node/component-example.tsx
@@ -9,11 +9,11 @@ import { ArrowDownRight } from "lucide-react";
export const AnnotationNodeDemo = memo(() => {
return (
-
+
{/* Annotation Node Number */}
1.
- Annotate your flows any way you'd like.
+ Annotate your flows any way you'd like.
@@ -22,6 +22,8 @@ export const AnnotationNodeDemo = memo(() => {
);
});
+AnnotationNodeDemo.displayName = "AnnotationNodeDemo";
+
export const BaseNodeDemo = memo(() => {
return (
@@ -31,3 +33,5 @@ export const BaseNodeDemo = memo(() => {
);
});
+
+BaseNodeDemo.displayName = "BaseNodeDemo";
diff --git a/apps/ui-components/registry/components/base-node/index.tsx b/apps/ui-components/registry/components/base-node/index.tsx
index 10240b384..17f532628 100644
--- a/apps/ui-components/registry/components/base-node/index.tsx
+++ b/apps/ui-components/registry/components/base-node/index.tsx
@@ -79,7 +79,7 @@ export function BaseNodeFooter({ className, ...props }: ComponentProps<"div">) {
{
);
});
+ButtonEdgeDemo.displayName = "ButtonEdgeDemo";
+
export default ButtonEdgeDemo;
diff --git a/apps/ui-components/registry/components/data-edge/component-example.tsx b/apps/ui-components/registry/components/data-edge/component-example.tsx
index 51b831f43..c9b8f1372 100644
--- a/apps/ui-components/registry/components/data-edge/component-example.tsx
+++ b/apps/ui-components/registry/components/data-edge/component-example.tsx
@@ -30,3 +30,5 @@ export const CounterNode = memo(({ id, data }: NodeProps ) => {
);
});
+
+CounterNode.displayName = "CounterNode";
diff --git a/apps/ui-components/registry/components/data-edge/index.tsx b/apps/ui-components/registry/components/data-edge/index.tsx
index 8299f6876..fc60dbcdb 100644
--- a/apps/ui-components/registry/components/data-edge/index.tsx
+++ b/apps/ui-components/registry/components/data-edge/index.tsx
@@ -81,7 +81,7 @@ export function DataEdge({
{data.key && (
{label}
diff --git a/apps/ui-components/registry/components/database-schema-node/component-example.tsx b/apps/ui-components/registry/components/database-schema-node/component-example.tsx
index 1db007d13..6d5b6ad49 100644
--- a/apps/ui-components/registry/components/database-schema-node/component-example.tsx
+++ b/apps/ui-components/registry/components/database-schema-node/component-example.tsx
@@ -49,4 +49,6 @@ const DatabaseSchemaDemo = memo(({ data }: DatabaseSchemaNodeData) => {
);
});
+DatabaseSchemaDemo.displayName = "DatabaseSchemaDemo";
+
export default DatabaseSchemaDemo;
diff --git a/apps/ui-components/registry/components/database-schema-node/index.tsx b/apps/ui-components/registry/components/database-schema-node/index.tsx
index 5a7bffa01..21fe29d6b 100644
--- a/apps/ui-components/registry/components/database-schema-node/index.tsx
+++ b/apps/ui-components/registry/components/database-schema-node/index.tsx
@@ -19,7 +19,7 @@ export const DatabaseSchemaNodeHeader = ({
children,
}: DatabaseSchemaNodeHeaderProps) => {
return (
-
+
{children}
);
diff --git a/apps/ui-components/registry/components/devtools/index.tsx b/apps/ui-components/registry/components/devtools/index.tsx
index ec495f9f3..d772474cc 100644
--- a/apps/ui-components/registry/components/devtools/index.tsx
+++ b/apps/ui-components/registry/components/devtools/index.tsx
@@ -63,6 +63,10 @@ const ChangeInfo = ({ change }: ChangeInfoProps) => {
);
};
+function NoChanges() {
+ return No Changes Triggered ;
+}
+
export const ChangeLogger = ({ limit = 20 }: ChangeLoggerProps) => {
const [changes, setChanges] = useState([]);
const store = useStoreApi();
@@ -83,8 +87,6 @@ export const ChangeLogger = ({ limit = 20 }: ChangeLoggerProps) => {
return () => store.setState({ onNodesChange: undefined });
}, [handleNodeChanges, store]);
- const NoChanges = () => No Changes Triggered ;
-
return (
<>
{changes.length === 0 ? (
@@ -140,7 +142,7 @@ type NodeInfoProps = {
absPosition: XYPosition;
width?: number;
height?: number;
- data: any;
+ data: object;
};
const NodeInfo = ({
@@ -193,7 +195,7 @@ type DevToolsToggleProps = {
const DevToolsToggle = ({ tools, position }: DevToolsToggleProps) => {
return (
-
+
{tools.map(({ active, setActive, label, value }) => (
);
+LabeledGroupNodeDemo.displayName = "LabeledGroupNodeDemo";
+
export default LabeledGroupNodeDemo;
diff --git a/apps/ui-components/registry/components/labeled-group-node/index.tsx b/apps/ui-components/registry/components/labeled-group-node/index.tsx
index a5870063e..5d04b29b4 100644
--- a/apps/ui-components/registry/components/labeled-group-node/index.tsx
+++ b/apps/ui-components/registry/components/labeled-group-node/index.tsx
@@ -56,7 +56,7 @@ export function GroupNode({ label, position, ...props }: GroupNodeProps) {
return (
diff --git a/apps/ui-components/registry/components/labeled-handle/component-example.tsx b/apps/ui-components/registry/components/labeled-handle/component-example.tsx
index 61cc7b22b..4dc2d1a5f 100644
--- a/apps/ui-components/registry/components/labeled-handle/component-example.tsx
+++ b/apps/ui-components/registry/components/labeled-handle/component-example.tsx
@@ -1,5 +1,5 @@
import React, { memo } from "react";
-import { NodeProps, Position } from "@xyflow/react";
+import { Position } from "@xyflow/react";
import { LabeledHandle } from "@/registry/components/labeled-handle";
import { BaseNode } from "@/registry/components/base-node";
@@ -23,4 +23,6 @@ const LabeledHandleDemo = memo(() => {
);
});
+LabeledHandleDemo.displayName = "LabeledHandleDemo";
+
export default LabeledHandleDemo;
diff --git a/apps/ui-components/registry/components/node-appendix/examples/badge/component-example.tsx b/apps/ui-components/registry/components/node-appendix/examples/badge/component-example.tsx
index bef81829e..79d7a58ed 100644
--- a/apps/ui-components/registry/components/node-appendix/examples/badge/component-example.tsx
+++ b/apps/ui-components/registry/components/node-appendix/examples/badge/component-example.tsx
@@ -8,11 +8,11 @@ export const NodeBadgeDemo = () => {
- I'm a node badge!
+ I'm a node badge!
@@ -22,3 +22,5 @@ export const NodeBadgeDemo = () => {
);
};
+
+NodeBadgeDemo.displayName = "NodeBadgeDemo";
diff --git a/apps/ui-components/registry/components/node-appendix/index.tsx b/apps/ui-components/registry/components/node-appendix/index.tsx
index fcbb9c0ae..14b5bb63e 100644
--- a/apps/ui-components/registry/components/node-appendix/index.tsx
+++ b/apps/ui-components/registry/components/node-appendix/index.tsx
@@ -21,8 +21,7 @@ const appendixVariants = cva(
);
export interface NodeAppendixProps
- extends ComponentProps<"div">,
- VariantProps {
+ extends ComponentProps<"div">, VariantProps {
className?: string;
position?: "top" | "bottom" | "left" | "right";
}
diff --git a/apps/ui-components/registry/components/node-search/app-example.tsx b/apps/ui-components/registry/components/node-search/app-example.tsx
index d01643cee..35d5904ea 100644
--- a/apps/ui-components/registry/components/node-search/app-example.tsx
+++ b/apps/ui-components/registry/components/node-search/app-example.tsx
@@ -12,7 +12,7 @@ const initNodes: Node[] = Array.from(
(_, index) => {
// Calculate grid dimensions (aim for roughly square grid)
const cols = Math.ceil(Math.sqrt(graphSize));
- const rows = Math.ceil(graphSize / cols);
+ // const rows = Math.ceil(graphSize / cols);
// Calculate position in grid
const col = index % cols;
@@ -40,7 +40,7 @@ export default function App() {
diff --git a/apps/ui-components/registry/components/node-search/examples/dialog/index.tsx b/apps/ui-components/registry/components/node-search/examples/dialog/index.tsx
index b5b6ec622..07abcb4ca 100644
--- a/apps/ui-components/registry/components/node-search/examples/dialog/index.tsx
+++ b/apps/ui-components/registry/components/node-search/examples/dialog/index.tsx
@@ -12,7 +12,7 @@ const initNodes: Node[] = Array.from(
(_, index) => {
// Calculate grid dimensions (aim for roughly square grid)
const cols = Math.ceil(Math.sqrt(graphSize));
- const rows = Math.ceil(graphSize / cols);
+ // const rows = Math.ceil(graphSize / cols);
// Calculate position in grid
const col = index % cols;
diff --git a/apps/ui-components/registry/components/node-search/index.tsx b/apps/ui-components/registry/components/node-search/index.tsx
index 78f24f0ec..07bd05a25 100644
--- a/apps/ui-components/registry/components/node-search/index.tsx
+++ b/apps/ui-components/registry/components/node-search/index.tsx
@@ -29,12 +29,10 @@ export interface NodeSearchProps extends Omit {
}
export function NodeSearchInternal({
- className,
onSearch,
onSelectNode,
open,
onOpenChange,
- ...props
}: NodeSearchProps) {
const [searchResults, setSearchResults] = useState([]);
const [searchString, setSearchString] = useState("");
@@ -61,7 +59,7 @@ export function NodeSearchInternal({
setSearchResults(results);
}
},
- [onSearch, onOpenChange],
+ [defaultOnSearch, onOpenChange, onSearch],
);
const defaultOnSelectNode = useCallback(
@@ -147,7 +145,6 @@ export function NodeSearchDialog({
onSelectNode,
open,
onOpenChange,
- title = "Node Search",
...props
}: NodeSearchDialogProps) {
return (
diff --git a/apps/ui-components/registry/components/node-status-indicator/index.tsx b/apps/ui-components/registry/components/node-status-indicator/index.tsx
index df139197d..55eeed723 100644
--- a/apps/ui-components/registry/components/node-status-indicator/index.tsx
+++ b/apps/ui-components/registry/components/node-status-indicator/index.tsx
@@ -22,11 +22,11 @@ export const SpinnerLoadingIndicator = ({
);
@@ -39,7 +39,7 @@ export const BorderLoadingIndicator = ({
}) => {
return (
<>
-
+
+
+
+
+
+
+ |
+
+ |
+
+
+
+
+
+
+
+
+
+ |
+
+ Hi there,
+
+
+ you have requested to change your login email for React Flow
+ Pro. Please use this link to confirm your new email:
+
+
+ |
+
+
+ |
+
+
+
+
+
+
+
+
+
+
+ |
+
+
+ |
+
+
+
+ |