+ {/* Search input */}
+
+
+ setQuery(e.target.value)}
+ placeholder="Type code or name…"
+ className="flex-1 text-sm outline-none placeholder:text-neutral-400"
+ />
+ {query && (
+
+ )}
+
+
+ {/* Options list */}
+
+ {filtered.length === 0 ? (
+
No codes match “{query}”
+ ) : (
+ filtered.map((group) => {
+ // Strip top-level breadcrumb — show only the sub-category part
+ const groupLabel = group.group.includes("›")
+ ? group.group.split("›").pop()!.trim()
+ : group.group;
+ return (
+
+
+ {groupLabel}
+
+ {group.items.map((item) => (
+
+ ))}
+
+ );
+ })
+ )}
+
+
+ );
+
return (
- {/* Hidden input for form submission */}
{required && !value && (
- /* Invisible trick to trigger native "required" validation on submit */
-
{}}
- className="absolute opacity-0 w-0 h-0 pointer-events-none"
- aria-hidden
- />
+
{}}
+ className="absolute opacity-0 w-0 h-0 pointer-events-none" aria-hidden />
)}
- {/* Trigger */}
+ {/* Trigger button — same appearance for both sizes */}
- {/* Dropdown panel
- default: full-width anchored left
- compact: fixed 380px anchored to right edge of trigger (won't overflow table) */}
+ {/* Dropdown: compact uses a portal (fixed) to escape overflow-x-auto containers */}
{open && (
-
- {/* Search input */}
-
-
- setQuery(e.target.value)}
- placeholder="Type code or name…"
- className="flex-1 text-sm outline-none placeholder:text-neutral-400"
- />
- {query && (
-
- )}
-
-
- {/* Options */}
-
- {filtered.length === 0 ? (
-
No codes match "{query}"
- ) : (
- filtered.map((group) => {
- // In compact mode show only the sub-category (after ›), not the full breadcrumb
- const groupLabel = isCompact && group.group.includes("›")
- ? group.group.split("›").pop()!.trim()
- : group.group;
- return (
-
- {/* Group header */}
-
- {groupLabel}
-
- {/* Items */}
- {group.items.map((item) => (
-
- ))}
-
- );
- })
- )}
-
-
+ isCompact && mounted
+ ? createPortal(dropdownPanel, document.body)
+ : dropdownPanel
)}
);