|
import classNames from "classnames"; |
|
import { Code, XCircle } from "lucide-react"; |
|
|
|
import { Collapsible, CollapsibleTrigger } from "@/components/ui/collapsible"; |
|
import { htmlTagToText } from "@/lib/html-tag-to-text"; |
|
|
|
export const SelectedHtmlElement = ({ |
|
element, |
|
isAiWorking = false, |
|
onDelete, |
|
}: { |
|
element: HTMLElement | null; |
|
isAiWorking: boolean; |
|
onDelete?: () => void; |
|
}) => { |
|
if (!element) return null; |
|
|
|
const tagName = element.tagName.toLowerCase(); |
|
return ( |
|
<Collapsible |
|
className={classNames( |
|
"border border-neutral-700 rounded-xl p-1.5 pr-3 max-w-max hover:brightness-110 transition-all duration-200 ease-in-out !cursor-pointer", |
|
{ |
|
"!cursor-pointer": !isAiWorking, |
|
"opacity-50 !cursor-not-allowed": isAiWorking, |
|
} |
|
)} |
|
disabled={isAiWorking} |
|
onClick={() => { |
|
if (!isAiWorking && onDelete) { |
|
onDelete(); |
|
} |
|
}} |
|
> |
|
<CollapsibleTrigger className="flex items-center justify-start gap-2 cursor-pointer"> |
|
<div className="rounded-lg bg-neutral-700 size-6 flex items-center justify-center"> |
|
<Code className="text-neutral-300 size-3.5" /> |
|
</div> |
|
<p className="text-sm font-semibold text-neutral-300"> |
|
{element.textContent?.trim().split(/\s+/)[0]} {htmlTagToText(tagName)} |
|
</p> |
|
<XCircle className="text-neutral-300 size-4" /> |
|
</CollapsibleTrigger> |
|
{/* <CollapsibleContent className="border-t border-neutral-700 pt-2 mt-2"> |
|
<div className="text-xs text-neutral-400"> |
|
<p> |
|
<span className="font-semibold">ID:</span> {element.id || "No ID"} |
|
</p> |
|
<p> |
|
<span className="font-semibold">Classes:</span>{" "} |
|
{element.className || "No classes"} |
|
</p> |
|
</div> |
|
</CollapsibleContent> */} |
|
</Collapsible> |
|
); |
|
}; |
|
|