Files
yaak-mountain-loop/src-web/components/core/Label.tsx
Gregory Schier b4a1c418bb Run oxfmt across repo, add format script and docs
Add .oxfmtignore to skip generated bindings and wasm-pack output.
Add npm format script, update DEVELOPMENT.md for Vite+ toolchain,
and format all non-generated files with oxfmt.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-13 10:15:49 -07:00

50 lines
1.2 KiB
TypeScript

import classNames from "classnames";
import type { HTMLAttributes, ReactNode } from "react";
import { IconTooltip } from "./IconTooltip";
export function Label({
htmlFor,
className,
children,
visuallyHidden,
tags = [],
required,
rightSlot,
help,
...props
}: HTMLAttributes<HTMLLabelElement> & {
htmlFor: string | null;
required?: boolean;
tags?: string[];
visuallyHidden?: boolean;
rightSlot?: ReactNode;
children: ReactNode;
help?: ReactNode;
}) {
return (
<label
htmlFor={htmlFor ?? undefined}
className={classNames(
className,
visuallyHidden && "sr-only",
"flex-shrink-0 text-sm",
"text-text-subtle whitespace-nowrap flex items-center gap-1 mb-0.5",
)}
{...props}
>
<span>
{children}
{required === true && <span className="text-text-subtlest">*</span>}
</span>
{tags.map((tag, i) => (
// oxlint-disable-next-line react/no-array-index-key
<span key={i} className="text-xs text-text-subtlest">
({tag})
</span>
))}
{help && <IconTooltip tabIndex={-1} content={help} />}
{rightSlot && <div className="ml-auto">{rightSlot}</div>}
</label>
);
}