import type { ReactNode } from "react" import type { ButtonProps } from "../Button/Button.tsx" import { Button } from "../Button/Button.tsx" export type IconButtonProps = Omit< ButtonProps, | "aria-label" | "children" | "iconEnd" | "iconStart" | "sizing" > & { /** * Required, and this single line is most of the component's * reason to exist. `label` cannot be defaulted, cannot be * omitted, and is not a `ReactNode` — it becomes `aria-label`, * which is a string by specification. */ label: string /** The glyph. Anything — lucide, an inline SVG, a character. */ children: ReactNode } /** * Three repos, three strategies, and **none of them names the * button**: mux-magic hand-writes five SVG components, castkit * keeps an `ICON_PATHS` map, and plex-channels renders raw glyphs * (`↶`, `↷`, `▶`, `⚙`, `≡`) straight into a ` )