69 Commits
Author SHA1 Message Date
Brandon Oxendine d2d24a6ecc Update Mastodon link in footer
The footer linked to an old account. Point it at the current one,
@radicle@toot.radicle.dev.
2026-10-12 22:36:41 +02:00
595a81150b Add Releases and Release views
- Add the Releases list and Release page
- Add modals to create, delete and redact releases
- Register artifacts and add or remove their locations
- Download, seed and unseed artifacts from the release page
- Share one artifact node state and show its status
- Pick the release commit from a list
- Rename Stop seeding to Unseed

Co-authored-by: Daniel Norman <daniel@norman.life>
Co-authored-by: Rūdolfs Ošiņš <rudolfs@osins.org>
2026-10-08 18:21:48 +02:00
Brandon OxendineandRūdolfs Ošiņš dc1a067396 Render mermaid diagrams
Mermaid code blocks showed up as code. Mermaid is loaded lazily, and
diagrams are redrawn when the app theme changes. DOMPurify's config
moves from a global `setConfig` to each call site, because the global
one stripped mermaid's SVG output.

Co-authored-by: Rūdolfs Ošiņš <rudolfs@osins.org>
2026-10-07 16:56:58 +02:00
Brandon OxendineandRūdolfs Ošiņš ab8300e09a Show repository images in READMEs
Relative images in markdown and AsciiDoc files were broken, nothing
resolved them against the repository. They're read through a new
`repo_blob_bytes` command, which skips the text encoding and last
commit lookup of `repo_blob`. Images now also keep their alt text.

Co-authored-by: Rūdolfs Ošiņš <rudolfs@osins.org>
2026-10-07 16:56:16 +02:00
Brandon OxendineandRūdolfs Ošiņš 70046d0c74 Render GitHub style alerts
A blockquote starting with `[!NOTE]` or one of its siblings showed up
as a plain quote, while GitHub and the web explorer render it as a
titled callout.

Co-authored-by: Rūdolfs Ošiņš <rudolfs@osins.org>
2026-10-07 16:54:00 +02:00
Brandon Oxendine 950f83b2e9 Move issue metadata buttons into action row
In the new issue modal, "Add labels" and "Add assignees" sat on their
own row between the description and the action buttons. They now sit at
the left of the action row, opposite Attach, Preview and Save.
2026-10-06 17:18:20 +02:00
Brandon OxendineandRūdolfs Ošiņš 8175823ab8 Fix pasted images not rendering
Pasting a single image went through save_embed_by_clipboard, which
stored the clipboard's raw RGBA pixels instead of an encoded image.
The result could not be decoded, so the embed showed as a broken image.
Always store the pasted file's own bytes instead. Nothing else uses
save_embed_by_clipboard, so it's removed.

Co-Authored-By: Rūdolfs Ošiņš <rudolfs@osins.org>
2026-10-06 15:04:57 +02:00
Brandon Oxendine d6145300c1 Make task list items clickable in markdown 2026-10-06 14:33:08 +02:00
Brandon OxendineandRūdolfs Ošiņš 91ab693b4b Link Radicle entities from comments
References are picked or pasted in the composer, stored as `rad:` URIs
with a readable label, and shown as chips or links that open in-app when
the entity is here.

Co-Authored-By: Rūdolfs Ošiņš <rudolfs@osins.org>
2026-10-05 17:29:02 +02:00
Brandon OxendineandRūdolfs Ošiņš bee84e9d40 Search node aliases for mentions
Mentioning someone starts from their alias, but aliases are
self-declared and unrelated nodes often share one. Results say who is
followed or is you, so the composer can tell them apart.

Co-Authored-By: Rūdolfs Ošiņš <rudolfs@osins.org>
2026-10-05 17:29:02 +02:00
Brandon Oxendine ca80f13631 Disable Back and Forward when they lead nowhere
Fixes f18b808b76f9528e406f53f70221e1a39b4664c8
2026-09-29 16:34:31 +02:00
Brandon Oxendine 407a8d0c6e Add markdown shortcuts to textareas
Closes: 7bdaa5ad647da241830ff463f03f730dce3bba67
2026-09-29 15:24:55 +02:00
Brandon OxendineandRūdolfs Ošiņš 1f38339c9f Add keyboard shortcuts
Add a shortcuts modal `?` and app-wide shortcuts:

- Cmd+F: sidebar repo filter, pressed again: list search
- Cmd+N: new issue, anywhere in a repo
- Cmd+1…9: jump to the nth sidebar repo; holding Cmd shows
  the numbers on the repo avatars
- Cmd+[ / Cmd+] (Alt+Left / Alt+Right elsewhere): back and forward
- Cmd+R: reload, skipped while typing or in a modal with a text field

Global shortcuts are ignored while typing in an input and, except
for `?`, while a modal is open.

Co-Authored-By: Rūdolfs Ošiņš <rudolfs@osins.org>
2026-09-25 13:02:38 +02:00
Brandon Oxendine 1d2cdaf033 Align issue page design with patch page
Rebuild the issue page as a single column matching the patch page:
the state dropdown sits next to the title, with author, issue ID,
labels and assignees in a row beneath it.

Let issue authors change the state, not only delegates. Add a
delete_issue command so authors can delete their own issues.

Share the delete confirmation and ID chip with the patch page.
2026-09-25 12:48:35 +02:00
Brandon OxendineandRūdolfs Ošiņš 54835363a9 Add a repository identity document view
Adds a read-only page for a repository's identity document. It shows the
current document together with its full revision history. The data and
wording follow heartwood and the rad id / rad inspect CLI.

Co-Authored-By: Rūdolfs Ošiņš <rudolfs@osins.org>
2026-09-24 17:04:54 +02:00
Brandon Oxendine 2e907e1309 Cross the sidebar's two views instead of morphing 2026-09-21 18:15:27 +02:00
Brandon Oxendine 8aa54c065d Spin the sidebar section header's icon on hover 2026-09-21 18:14:24 +02:00
Brandon Oxendine 892869637f Animate the repo list and filter button 2026-09-21 18:13:52 +02:00
Brandon Oxendine 9816d74205 Add tooltips to items in collapsed sidebar 2026-09-21 18:13:52 +02:00
Brandon Oxendine 20a92c95ce Badge the private lock onto the avatar in collapsed sidebar 2026-09-21 18:13:51 +02:00
Brandon Oxendine 6177515e92 Put sidebar spacing on a 16/32 scale 2026-09-21 18:08:45 +02:00
Brandon Oxendine 39b63b4d88 Use the radicle logotype on the loading screen 2026-09-21 11:23:30 +02:00
Brandon Oxendine c83777e6a9 Fix muddy diff colors in light mode 2026-09-21 11:01:19 +02:00
Brandon Oxendine e97af99286 Submit the issue modal with Cmd+Return from title
Closes c4c2391d309ccff1cd745d5e98faf5b4e9bb7d9d
2026-09-14 10:20:21 +02:00
Brandon Oxendine ba5e571337 Keep the view steady when reacting or commenting
Bind each cached loader to a `{@const}` so the `{#await}` blocks keep
the same promise across patch reloads instead of re-running and
flashing their pending branch.
2026-09-14 10:00:13 +02:00
Brandon Oxendine cae5ed5a8d Unify top bar button treatment
The patch page already sets the pattern: one filled primary action and
naked buttons for everything else. The issue page and the repo header
used the grey ghost fill instead, so their secondary actions competed
with the primary one.
2026-09-09 15:06:11 +02:00
Brandon Oxendine 6e29b80371 Use a globe icon for public repositories 2026-09-09 14:31:53 +02:00
Brandon OxendineandRūdolfs Ošiņš 039c0d49d5 Stop layout shifts when clicking on commits in patch
scrollToFilesTop scrolled the port down to hide the patch chrome, with a
smooth animation. Clicking a commit while already at the top of the diff
pulled the header off screen for no reason.

Co-authored-by: Rūdolfs Ošiņš <rudolfs@osins.org>
2026-09-09 14:21:43 +02:00
Brandon OxendineandRūdolfs Ošiņš 7dc1d4d94d Stop one duplicate path losing the whole diff
A type change, a symlink replaced by a regular file, reaches the frontend
as two entries for one path. CodeView throws on the duplicate id, the
parse promise rejects, and the Changes tab is left with no files at all:
on heartwood's patch 327be3c one such file emptied all 84.

Co-authored-by: Rūdolfs Ošiņš <rudolfs@osins.org>
2026-09-09 14:21:43 +02:00
Brandon Oxendine 8fbb408c58 Disable save button instead of hiding it 2026-09-09 12:37:11 +02:00
Brandon OxendineandRūdolfs Ošiņš 55e18a45f0 Keep the window draggable while a modal is open
Co-Authored-By: Rūdolfs Ošiņš <rudolfs@osins.org>
2026-09-09 12:23:16 +02:00
Brandon Oxendine ba3316c246 Add a collapsible, resizable sidebar
The sidebar collapses to a narrow rail of icons. Its collapsed state
and its width both persist across launches.
2026-09-08 17:38:18 +02:00
Brandon OxendineandRūdolfs Ošiņš fe37d6a85c Add Stop seeding to the sidebar context menu
`rad unseed` only drops the seeding policy and leaves the repository in
storage, so while `list_repos_summary` listed everything on disk an
unseeded repository never left the sidebar and unseeding looked like it
had done nothing. That call now filters by seeding policy.

The confirmation dialog also offers to delete the files, running the
equivalent of `rad clean` after the unseed.

Co-authored-by: Rūdolfs Ošiņš <rudolfs@osins.org>
2026-09-03 19:21:16 +02:00
Brandon Oxendine f4ab2544ae Keep the patch description open while editing
The description collapses past 300px behind a show more toggle, which
also applied to the editor that replaces it. Half of what was being
written could be cut off, with a control offering to hide more of it.

Editing state moves from the revision component to a bindable prop, so
the patch view that owns the collapse can see it.
2026-09-03 18:40:26 +02:00
Brandon Oxendine 25b7ba86c4 Fix inline node ID in the guide 2026-09-03 18:30:50 +02:00
Brandon Oxendine 9bf912da3d Confirm before hiding the Guide button 2026-09-03 18:26:11 +02:00
Brandon Oxendine 073720a7a6 Reveal Guide dismiss only when it has focus 2026-09-03 18:26:11 +02:00
Brandon Oxendine 3ac4249651 Match the reaction and edit button sizes
The reaction trigger sits in a block wrapper, so its icon formed a line
box and took the leading with it, leaving the button taller than the
edit one beside it. It also carried its own padding, colour and hover
fill, on top of the ones the action around it already provides.

The action is now a fixed square with its content centred, so its size
no longer depends on the shape of whatever it wraps.
2026-08-27 17:48:32 +02:00
Brandon Oxendine 66d849faaa Let the Guide sidebar button be hidden 2026-08-27 14:38:03 +02:00
Brandon Oxendine 880db5e538 Add Cmd+, shortcut to open Settings
Handle Cmd+, (Ctrl+, on Linux/Windows) in the global keydown handler
to toggle the Settings modal, matching the existing font-size and
Escape shortcuts.
2026-08-25 17:46:21 +02:00
Brandon Oxendine d19d1f21f1 Add patch deletion 2026-08-10 12:54:39 +02:00
Brandon Oxendine 62e150c29a Rebuild the patch page, review UI, and activity timeline 2026-08-10 12:54:39 +02:00
Brandon Oxendine 030b5fe1f1 Show absolute timestamps on hover 2026-08-10 08:35:49 +02:00
Brandon OxendineandRūdolfs Ošiņš 20f5aa1f1e Add dismissible hints
Co-authored-by: Rūdolfs Ošiņš <rudolfs@osins.org>
2026-08-10 08:35:44 +02:00
Brandon Oxendine a03c413343 Add an author hover card 2026-08-10 08:35:41 +02:00
Brandon Oxendine 2afde78941 Stagger section entrance on marketing pages 2026-07-21 18:01:28 +02:00
Brandon Oxendine fa1af21819 Clean up marketing copy
Copy:

- Sentence case for headlines, guide titles, and doc headings (proper
  nouns kept capitalized).
- Removed em dashes from the home page.
- Tightened the "Programmable repos" line, clarified the explore CTA
  ("Explore the network"), rewrote the Claude skill card, simplified the
  Install headline, and fixed the Garden nav description to describe
  what Radicle Garden actually is (a hosted, always-on node).

Layout:

- Aligned the Garden promo on the Learn and landing pages (same copy and
  dimensions).
- Balanced the page-header and hero headlines so they don't leave a
  hanging word or widow.
- Line-break the Garden promo copy on desktop only.
- Animate the arrow on marketing buttons on hover, and drop the white
  button's opacity hover.
2026-07-21 17:58:59 +02:00
Brandon Oxendine 1abb50f5d4 Redesign the How it works page
Rework the /principles page from a vertical slide presentation into a
 two-column layout.
2026-07-21 17:47:16 +02:00
Brandon Oxendine b7806bd934 Animate sidebar sub-nav unfurl
Add sidebar sub-nav expand/collapse unfurl, now driven by the CSS View
Transitions API instead of JS tweening. Each nav section is a
view-transition group that clips into a top-to-bottom reveal as it opens
or closes, with a masked gradient soft edge.

A small JS flag (`sidebar-unfurling` on the document element) gates the
gradient to actual open/close, since CSS can't tell a within-section
navigation from a section toggle.
2026-07-21 17:05:44 +02:00
Brandon Oxendine 3ee2ca9d58 Format All Repos count as a counter badge 2026-07-21 13:43:57 +02:00
Brandon Oxendine c9a641da13 Use status-specific label for issue and patch breadcrumbs 2026-05-06 12:50:14 +02:00
Brandon Oxendine 62752f6357 Link patch breadcrumb to its current status filter 2026-05-06 12:49:51 +02:00
Brandon Oxendine a4c6f04028 Link issue and patch breadcrumbs to their status filter 2026-05-06 12:47:25 +02:00
Brandon OxendineandRūdolfs Ošiņš ec49ecbd36 Start review from code-comment on revision diff
Co-authored-by: Rūdolfs Ošiņš <rudolfs@osins.org>
2026-04-30 16:49:41 +02:00
Brandon Oxendine 0e9f99c04f Indent replies into individual boxes 2026-04-30 12:10:52 +02:00
Brandon Oxendine 783ac6bf74 Polish comment form footer 2026-04-30 12:10:51 +02:00
Brandon Oxendine 8ef7b34612 Reveal comment actions only on hover 2026-04-30 12:10:51 +02:00
Brandon Oxendine fbae6e22ed Restyle reactions and highlight own reactions 2026-04-30 11:11:56 +02:00
Brandon Oxendine 56db0a0dcb Show first revision description on patch 2026-04-28 14:19:46 +02:00
Brandon Oxendine 2556786a9e Update favicon and app icons 2026-04-24 10:26:38 +02:00
Brandon Oxendine 89b8e9a17b Always show discussion comment form 2026-04-15 15:49:21 +02:00
Brandon Oxendine c74b8e014e Truncate repo header text 2026-04-15 15:04:39 +02:00
Brandon Oxendine 7fa9c42c2b Fix README ordered list clipping 2026-04-14 09:24:45 +02:00
Brandon Oxendine ee001e96fa Use brand styling for save actions 2026-04-14 09:08:30 +02:00
Brandon Oxendine 0e38df1e2f Update app icon 2026-03-20 09:34:53 -06:00
Brandon Oxendine af74f2b84d Fix colors 2026-03-12 17:13:00 +01:00
Brandon Oxendine b14d35ced0 Improve contrast in light mode
Signed-off-by: Brandon Oxendine <brandon.oxendine@gmail.com>
Signed-off-by: Rūdolfs Ošiņš <rudolfs@osins.org>
2023-02-01 12:36:09 +01:00
Brandon Oxendine 6edbd37c4c Unify border-radius
Signed-off-by: Brandon Oxendine <brandon.oxendine@gmail.com>
Signed-off-by: Alexis Sellier <self@cloudhead.io>
2022-08-08 18:31:49 +02:00
Brandon Oxendine b687d37b03 Unify button heights
Signed-off-by: Brandon Oxendine <brandon.oxendine@gmail.com>
2022-07-13 13:51:32 +02:00