"use client"; import { useState, useRef, useEffect, useMemo, useLayoutEffect } from "react"; import { createPortal } from "react-dom"; import { useRouter } from "next/navigation"; import { Loader2, AlertCircle, ChevronDown, Check, Search, X } from "lucide-react"; type Machine = { id: string; code: string; name: string; category: string }; // A searchable replacement for the native setOpen(true)} onChange={(e) => { setQuery(e.target.value); setOpen(true); setHighlight(0); }} onKeyDown={onKeyDown} className={`min-h-[44px] w-full pl-8 pr-8 rounded-lg border text-sm transition focus:outline-none focus:border-[#30638E] ${ selected ? "border-[#00798C]/30 bg-[#00798C]/5 text-[#003D5B] dark:text-white font-medium" : "border-[#D1495B]/40 bg-[#D1495B]/5 text-[#D1495B]" }`} /> {busy ? ( ) : ( )} {selected && !busy && ( )} {open && anchor && createPortal(
{groups.flat.length} of {machines.length} machines {!selected && " · search a code, name or the invoice description"}
{value && (
)} {groups.flat.length === 0 ? (

No machine matches “{query}”.

) : (
    {groups.list.map((g) => (
  • {g.category}
      {g.items.map((m) => { const idx = groups.flat.indexOf(m); const isSel = m.id === value; return (
    • ); })}
  • ))}
)}
, document.body, )} {error && (

{error}

)} ); }