+
+ {showLegend && nodeTypes.length > 0 && (
+
+ {nodeTypes.map((nt) => (
+
+
+ {nt.label}
+
+ ))}
+
+ )}
+
+ )
+}
+
+export { GraphContainer }
diff --git a/frontend/functions/ui/index.ts b/frontend/functions/ui/index.ts
index e31dcd5c..9f674c01 100644
--- a/frontend/functions/ui/index.ts
+++ b/frontend/functions/ui/index.ts
@@ -114,6 +114,10 @@ export type { TextareaProps } from './textarea'
export { Toast, ToastProvider, ToastViewport, toastVariants, useToast } from './toast'
export type { ToastEntry, ToastProps, ToastViewportProps } from './toast'
+// Search
+export { SearchBar } from './search_bar'
+export type { SearchBarProps } from './search_bar'
+
// Hooks — Canvas
export { useAnimatedCanvas } from './use_animated_canvas'
diff --git a/frontend/functions/ui/search_bar.md b/frontend/functions/ui/search_bar.md
new file mode 100644
index 00000000..8f14571a
--- /dev/null
+++ b/frontend/functions/ui/search_bar.md
@@ -0,0 +1,64 @@
+---
+name: search_bar
+kind: component
+lang: ts
+domain: ui
+version: "1.0.0"
+purity: impure
+signature: "SearchBar(props: SearchBarProps): JSX.Element"
+description: "Search input with debounce, search icon, and clear button"
+tags: [component, ui, search, input, debounce]
+uses_functions: [cn_ts_core]
+uses_types: []
+returns: []
+returns_optional: false
+error_type: ""
+imports: ["lucide-react"]
+tested: false
+tests: []
+test_file_path: ""
+file_path: "frontend/functions/ui/search_bar.tsx"
+props:
+ - name: onSearch
+ type: "(query: string) => void"
+ required: true
+ description: "Called with the debounced search query"
+ - name: placeholder
+ type: "string"
+ required: false
+ description: "Placeholder text (default: Search...)"
+ - name: debounceMs
+ type: "number"
+ required: false
+ description: "Debounce delay in ms (default: 300)"
+ - name: className
+ type: "string"
+ required: false
+ description: "Additional CSS classes"
+emits: []
+has_state: true
+framework: react
+variant: []
+---
+
+## Ejemplo
+
+```tsx
+import { SearchBar } from '@fn_library'
+
+function MyPage() {
+ return (
+