Files
zooqueen bdda53d52e fix(rpc): carry uploaded files over the socket
SuperJSON carries typed values, not bytes: a FormData serialised to `{}`, so
an upload route received no payload. The transport now reads a File into
bytes on the way out and rebuilds it on the way in, so a route parses the
same FormData it received over HTTP — one encoding for all six upload
callsites, none of their own.

The editor's add-items failure now reports itself instead of only marking
the file card.

One PageHeader owns the page title and the single gap to its description,
replacing the hand-rolled title blocks; SettingsHeader takes the same gap,
which was zero on mobile.
2026-08-14 00:07:22 -07:00

36 lines
773 B
TypeScript

import React from 'react';
import { cn } from '@hanzo/esign-ui/lib/utils';
export type SettingsHeaderProps = {
title: string | React.ReactNode;
subtitle: string | React.ReactNode;
hideDivider?: boolean;
children?: React.ReactNode;
className?: string;
};
export const SettingsHeader = ({
children,
title,
subtitle,
className,
hideDivider,
}: SettingsHeaderProps) => {
return (
<>
<div className={cn('flex flex-row items-center justify-between', className)}>
<div className="space-y-1.5">
<h3 className="text-lg font-medium">{title}</h3>
<p className="text-sm text-muted-foreground">{subtitle}</p>
</div>
{children}
</div>
{!hideDivider && <hr className="my-4" />}
</>
);
};