mirror of
https://github.com/hanzoai/sign.git
synced 2026-10-21 01:21:51 +00:00
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.
36 lines
773 B
TypeScript
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" />}
|
|
</>
|
|
);
|
|
};
|