← back to Open Seo
src/client/features/domain/components/DomainFilterFields.tsx
73 lines
import type { ReactNode } from "react";
function FilterFieldLabel({ children }: { children: ReactNode }) {
return (
<span className="text-[11px] font-semibold uppercase tracking-wide text-base-content/60">
{children}
</span>
);
}
export function FilterTextInput({
label,
value,
onChange,
placeholder,
}: {
label: string;
value: string;
onChange: (value: string) => void;
placeholder: string;
}) {
return (
<label className="form-control gap-1.5">
<FilterFieldLabel>{label}</FilterFieldLabel>
<input
className="input input-bordered input-sm w-full bg-base-100"
placeholder={placeholder}
value={value}
onChange={(event) => onChange(event.target.value)}
/>
</label>
);
}
export function FilterNumberInput({
value,
onChange,
placeholder,
step,
}: {
value: string;
onChange: (value: string) => void;
placeholder: string;
step?: string;
}) {
return (
<input
className="input input-bordered input-xs bg-base-100"
type="text"
inputMode="decimal"
step={step}
value={value}
placeholder={placeholder}
onChange={(event) => onChange(event.target.value)}
/>
);
}
export function FilterRangeGroup({
title,
children,
}: {
title: string;
children: ReactNode;
}) {
return (
<div className="rounded-lg border border-base-300 bg-base-100 p-2.5 space-y-2">
<FilterFieldLabel>{title}</FilterFieldLabel>
<div className="grid grid-cols-2 gap-2">{children}</div>
</div>
);
}