Commits
Signed-off-by: eti <eti@eti.tf>
Signed-off-by: dawn <dawn@tangled.org>
Signed-off-by: dawn <dawn@tangled.org>
Signed-off-by: dawn <dawn@tangled.org>
Signed-off-by: dawn <dawn@tangled.org>
Signed-off-by: dawn <dawn@tangled.org>
Signed-off-by: dawn <dawn@tangled.org>
Signed-off-by: dawn <dawn@tangled.org>
- inset breadcrums
- uniform height for BlobHeader and TreeHeader
- also use catpuccin syntax hl
Signed-off-by: oppiliappan <me@oppi.li>
Signed-off-by: dawn <dawn@tangled.org>
Signed-off-by: dawn <dawn@tangled.org>
Signed-off-by: dawn <dawn@tangled.org>
Signed-off-by: dawn <dawn@tangled.org>
Signed-off-by: dawn <dawn@tangled.org>
Signed-off-by: dawn <dawn@tangled.org>
Signed-off-by: dawn <dawn@tangled.org>
Signed-off-by: eti <eti@eti.tf>
Signed-off-by: eti <eti@eti.tf>
Signed-off-by: dawn <dawn@tangled.org>
Signed-off-by: eti <eti@eti.tf>
Signed-off-by: eti <eti@eti.tf>
Signed-off-by: eti <eti@eti.tf>
Adds an authenticated appview xrpc client (mints an atproto service-auth jwt per
call) and wires the notifications and sites settings tabs to the org.tangled.temp.*
methods, replacing their mocked data. Input gains an optional suffix for the
<subdomain>.<sites-domain> claim field.
Runs the appview with TANGLED_XRPC_ENABLED and points the web frontend at the
browser-reachable appview (TANGLED_API_URL) whose host matches the service-auth
aud; SITES_DOMAIN feeds the sites claim UI suffix.
The getDomainClaim handler returned 500 for the common no-claim case because
scanClaim yields sql.ErrNoRows; treat that as an empty claim. Also sentence-case
the user-facing error messages across the temp handlers (upper case, full stops).
mechanical sweep of everything the new lint rule can fix on its own:
rounded -> rounded-sm, flex-grow -> grow, px-2 py-2 -> p-2, arbitrary px
values onto the spacing scale (size-[26px] -> size-6.5), and v4 variant
forms ([&>*]: -> *:).
left alone: max-w-screen-* keeps its breakpoint linkage, and the
text-*/leading-* pairs that collapse into typography-* utilities are a
design-system call, not a rename.
Signed-off-by: eti <eti@eti.tf>
the tailwind language server's suggestCanonicalClasses diagnostic only
runs inside an editor, so nothing catches these in CI.
eslint-plugin-better-tailwindcss exposes the same canonicalization as a
lint rule.
rootFontSize matters: without it the rule silently skips every px-based
rewrite, which is most of them.
Signed-off-by: eti <eti@eti.tf>
figma lays every one of these cards out as [row, separator, row] with an 8px
auto-layout gap, so there is only ever one value to express: py-2 on each row,
which is the spacing unit that resolves to 8px on the default scale. that
leaves the card py-1, the rest of the 12px figma puts between its edge and the
first row.
with a single value the gap variant has nothing left to vary, so it folds into
the base and SettingsSection loses the rowGap prop it only forwarded. the repo
pages drop gap="3", which was 6px either side of the hairline, and the lists
reached through SettingsSection drop 4px either side — both now 8.
figma still draws 16px on the keys, emails, knots and spindles cards and 12px
on hooks; those follow the new single value here.
Signed-off-by: eti <eti@eti.tf>
the three gap variants each repeated their own border-t and border colour on
an [&>*+*] selector; divide-y divide-border-default says it once in the base,
so a variant only has to carry spacing.
the spacing had to move with it. divide-y draws on the bottom of every row but
the last, where the old rule drew on the top of every row but the first, and
the rows carry min-h-8 — being border-box, that swallowed the old border and
top padding whole, so the hairline actually sat 12px under one row and 8px over
the next with an uneven 45/41px text pitch. giving each row half the gap as its
own padding, and leaving the card the rest of its 12px, puts the line where the
comment always claimed it was: 8/8 with an even 41px pitch. cards come out
8-11px shorter for it.
Signed-off-by: eti <eti@eti.tf>
below md the sidebar collapses into a native select and the panel goes
full-bleed, keeping only its top and bottom hairlines, matching the Mobile
section of the settings redesign.
below sm the rows drop their trailing controls onto a second line: list
entries keep theirs left-aligned under the meta, while SettingsRow and the
SettingsBlock header align theirs right, as the user and repository frames
respectively do. SettingsRow takes an opt-in `stack` since the design keeps
short label/toggle pairs on one line either way.
Signed-off-by: eti <eti@eti.tf>
The thumb was painted with foreground/on-emphasis, which resolves to
white in both colour modes, so on the white checked track in dark mode
it disappeared. The design system binds it to background/default
(#ffffff light, #1f2937 dark) in every Toggle variant.
Signed-off-by: eti <eti@eti.tf>
the star button renders both in the repo header, where it is a raised
default button, and inside repo cards, where the card already carries
the elevation — so the caller decides via a prop instead of the
component hardcoding it. the profile rss link is flat for the same
reason.
the repo header fork group follows the design system segmented control:
the leading segment is default + inset shadow, the fork count segment is
ghost.
Signed-off-by: eti <eti@eti.tf>
The size variants' min-h values are the Figma button heights (32/36/40),
but line-height plus py-1.5 and the 1px border already exceeded them, so
the floor only ever applied to icon-only buttons. A labelled button came
out 2-5px taller than an icon-only one beside it. Dropping to py-1 keeps
content under the min-h at every size; the padding still acts as the
floor if a label wraps.
Signed-off-by: eti <eti@eti.tf>
mechanical sweep of everything the new lint rule can fix on its own:
rounded -> rounded-sm, flex-grow -> grow, px-2 py-2 -> p-2, arbitrary px
values onto the spacing scale (size-[26px] -> size-6.5), and v4 variant
forms ([&>*]: -> *:).
left alone: max-w-screen-* keeps its breakpoint linkage, and the
text-*/leading-* pairs that collapse into typography-* utilities are a
design-system call, not a rename.
Signed-off-by: eti <eti@eti.tf>
the tailwind language server's suggestCanonicalClasses diagnostic only
runs inside an editor, so nothing catches these in CI.
eslint-plugin-better-tailwindcss exposes the same canonicalization as a
lint rule.
rootFontSize matters: without it the rule silently skips every px-based
rewrite, which is most of them.
Signed-off-by: eti <eti@eti.tf>
figma lays every one of these cards out as [row, separator, row] with an 8px
auto-layout gap, so there is only ever one value to express: py-2 on each row,
which is the spacing unit that resolves to 8px on the default scale. that
leaves the card py-1, the rest of the 12px figma puts between its edge and the
first row.
with a single value the gap variant has nothing left to vary, so it folds into
the base and SettingsSection loses the rowGap prop it only forwarded. the repo
pages drop gap="3", which was 6px either side of the hairline, and the lists
reached through SettingsSection drop 4px either side — both now 8.
figma still draws 16px on the keys, emails, knots and spindles cards and 12px
on hooks; those follow the new single value here.
Signed-off-by: eti <eti@eti.tf>
the three gap variants each repeated their own border-t and border colour on
an [&>*+*] selector; divide-y divide-border-default says it once in the base,
so a variant only has to carry spacing.
the spacing had to move with it. divide-y draws on the bottom of every row but
the last, where the old rule drew on the top of every row but the first, and
the rows carry min-h-8 — being border-box, that swallowed the old border and
top padding whole, so the hairline actually sat 12px under one row and 8px over
the next with an uneven 45/41px text pitch. giving each row half the gap as its
own padding, and leaving the card the rest of its 12px, puts the line where the
comment always claimed it was: 8/8 with an even 41px pitch. cards come out
8-11px shorter for it.
Signed-off-by: eti <eti@eti.tf>
below md the sidebar collapses into a native select and the panel goes
full-bleed, keeping only its top and bottom hairlines, matching the Mobile
section of the settings redesign.
below sm the rows drop their trailing controls onto a second line: list
entries keep theirs left-aligned under the meta, while SettingsRow and the
SettingsBlock header align theirs right, as the user and repository frames
respectively do. SettingsRow takes an opt-in `stack` since the design keeps
short label/toggle pairs on one line either way.
Signed-off-by: eti <eti@eti.tf>
the star button renders both in the repo header, where it is a raised
default button, and inside repo cards, where the card already carries
the elevation — so the caller decides via a prop instead of the
component hardcoding it. the profile rss link is flat for the same
reason.
the repo header fork group follows the design system segmented control:
the leading segment is default + inset shadow, the fork count segment is
ghost.
Signed-off-by: eti <eti@eti.tf>
The size variants' min-h values are the Figma button heights (32/36/40),
but line-height plus py-1.5 and the 1px border already exceeded them, so
the floor only ever applied to icon-only buttons. A labelled button came
out 2-5px taller than an icon-only one beside it. Dropping to py-1 keeps
content under the min-h at every size; the padding still acts as the
floor if a label wraps.
Signed-off-by: eti <eti@eti.tf>