Files
zeekay 7bd5ad8007 refactor(ui): draw tabs with @hanzo/ui on @hanzo/gui, drop tailwind
118 tailwind sites become gui style props and @hanzo/ui components: 110
class attributes across four screens, plus the seven class names the DOT
map exported from lib/panes. Tailwind, its postcss plugin and the design
tailwind bridge leave with them; `<Hanzo>` carries the tokens instead.

Six pane covers were the same absolutely-positioned centred box written
six times, and eleven icons carried the same two classes — those fold to
Cover/Note/Dot/Chip and a `size` prop.

The `sm:` breakpoints go to `paging`, which the workspace already
measures. gui emits nothing for a breakpoint prop without its optimizing
compiler, measured on a background that never painted, so a breakpoint
written that way would have been absent rather than redundant.

react-native pins to 0.83: 0.84 renamed @react-native/assets-registry and
react-native-svg 15 still imports the old name.
2026-08-24 22:17:50 -07:00

49 lines
1.3 KiB
TypeScript

'use client';
/** Where hanzo.id returns to. It exchanges the code and leaves. */
import { useEffect, useState } from 'react';
import { Anchor, Paragraph, YStack } from '@hanzo/ui';
import { complete } from '@/lib/iam';
export default function Callback() {
const [error, setError] = useState<string | null>(null);
useEffect(() => {
complete()
.then((to) => window.location.replace(to))
.catch((e) => setError(e instanceof Error ? e.message : 'sign-in failed'));
}, []);
return (
<YStack
render="main"
minHeight="100dvh"
maxWidth={448}
width="100%"
marginHorizontal="auto"
justifyContent="center"
paddingHorizontal="$5"
>
{error ? (
<>
<Paragraph size="$2" textAlign="center" color="var(--text-secondary)">
{error}
</Paragraph>
<Anchor
href="/app"
size="$1"
textAlign="center"
marginTop="$3"
color="var(--text-tertiary)"
hoverStyle={{ color: 'var(--text-secondary)' }}
>
Try again
</Anchor>
</>
) : (
<Paragraph size="$2" textAlign="center" color="var(--text-tertiary)">
Signing you in…
</Paragraph>
)}
</YStack>
);
}