Commit Graph
611 Commits
Author SHA1 Message Date
Brandon Oxendine 02dfecf66d Use new UI kit icons in empty states 2026-10-19 18:14:10 +02:00
Brandon Oxendine 095b4f2fc0 Add copy link and highlight to comments
Opening a comment link expands the revision the comment is in, even if
the link is opened while already on the page, and scrolls to it.

This also fixes scrolling to URL fragments that aren't valid CSS
selectors, such as comment ids starting with a digit.
2026-10-19 18:02:19 +02:00
Brandon Oxendine 44c4c37fc7 Match toggle button colors to Raw button 2026-10-19 15:13:09 +02:00
Brandon Oxendine 967f7a99b8 Use title case in repo page titles 2026-10-19 15:00:35 +02:00
Brandon Oxendine 53b616e028 Title the commits page "Commits"
The commits page set its browser tab title to "history", while the
breadcrumb and page content call it "Commits". Use "Commits" in the
title too.
2026-10-19 14:58:39 +02:00
Brandon Oxendine f22d3b5502 Use arrow icon for seed node view links 2026-10-19 14:54:26 +02:00
Rūdolfs Ošiņš 23b2f4645e Remove {@html} from error messages 2026-10-05 10:46:23 +02:00
Rūdolfs Ošiņš 1369a2ebd0 Harden peer branch selector 2026-10-05 10:46:08 +02:00
Daniel Norman 00f079d0d9 Make the node breadcrumb a seed picker
- replace the node breadcrumb link with a SeedPicker in the repo, user
  and node views, so the node serving a page can be switched where it
  is named
- remove current node picker from settings panel
- reach the node view through the picker's "Open node view" action
- cover the new breadcrumb picker in the e2e tests
- list the active seed in the seed picker
- the seed serving the page is also rendered in the list with a bookmark
  action instead of a remove one.
2026-09-25 10:23:40 +02:00
Daniel Norman d36b064dd1 Separate the search seed from the viewed node
Picking a seed only set the stored preference and left the page on
whatever node the URL named, so the node could not be changed from
the UI at all. The two are now independent: you can browse a repo
on one node while searching a larger index on another.
2026-09-22 11:53:17 +02:00
Daniel Norman 8c3e25d800 Hide filters if all releases/artifacts by delegates
- Show delegate badge for releases
- Hide filters if all artifacts are non-delegate
- Decide release filter visibility once per route to avoid layout shift
  when loading more
- Say "No releases by delegates" when all holds some
2026-09-11 12:01:20 +02:00
Daniel Norman fb11e4d9c2 Remove warning icon from redacted filter 2026-09-03 18:33:28 +02:00
Rūdolfs Ošiņš ea10146b42 Show target branch on merge marker 2026-09-03 17:20:01 +02:00
Rūdolfs OšiņšandBrandon Oxendine 8e78634a23 Show the branch a patch is opened against
Resolve the merge target from `target` and the project payload, and name
it in the byline next to the patch ID.

Co-Authored-By: Brandon Oxendine <brandon.oxendine@gmail.com>
2026-09-03 12:03:16 +02:00
Daniel NormanandRūdolfs Ošiņš b1acb3eb4d Integrate radicle-artifact into explorer
- Add release read API to httpd as cargo feature enabled by default
- Add Releases and Release views to the UI
- Filter out redacted artifacts and mark delegate authors
- Degrade releases UI gracefully with older radicle-httpd versions
- Hide fully redacted releases
- Skip releases in the list endpoint when every artifact was redacted by
  its author or a delegate, so no empty release entries are shown
- Keep them reachable with showRedacted=true and by release id
- Add e2e tests for the release routes

Co-Authored-By: Rūdolfs Ošiņš <rudolfs@osins.org>
2026-08-28 16:33:14 +02:00
Rūdolfs Ošiņš f3138ae30a Show branch names decoded in the branch selector
Closes c639643a8e
2026-08-25 15:38:10 +02:00
Rūdolfs OšiņšandGuillaume 8cfcf11a88 Decode percent-encoded identifiers in URLs
Cloudflare's single-page-application fallback percent-encodes the
path on a fresh load or reload, so `rad:z4V1...` arrives as
`rad%3Az4V1...` and leaks into links and the seed command.

Only identifiers are decoded: revision and path segments stay
encoded, because branch and tag lookups are keyed on the encoded
name.

The seed command needs a second fix: the repo path segment is an
alias when one was used, and `rad seed <alias>` is not valid, the
`rad seed` command only supports RIDs and not aliases.

Co-Authored-By: Guillaume <guillaume.alabre@gmail.com>
2026-08-25 14:52:32 +02:00
Rūdolfs Ošiņš 048f4a831b Load the peer selector after render
Listing remotes verifies signed refs for every peer and took seconds
on large repositories, blocking navigation.

Resolve revisions from the canonical refs already on the repo object,
fetching a single remote when the route names a peer, and load the
full listing after render. Tags living only on a remote no longer
resolve as bare revisions.
2026-07-29 16:21:23 +02:00
Rūdolfs Ošiņš 256b060770 Resolve repo aliases in JSON and raw API 2026-07-29 14:05:06 +02:00
Rūdolfs Ošiņš 8d8339165c Show git-clone alias in clone button 2026-07-29 13:10:05 +02:00
Rūdolfs Ošiņš aaffb991ac Use the diff-stats endpoint for patch badges
So the badges stop fetching the full diff just for insertions and
deletions; the patch view did it on every load. Falls back to the
full diff when the backend doesn't serve the new endpoint.
2026-07-29 09:36:31 +02:00
Rūdolfs Ošiņš faa21f4504 Use the dedicated commit-count endpoint
So the header and history stop fetching full tree stats just for the
commit count. Falls back to the previous behaviour when the backend
doesn't serve the new endpoint.
2026-07-29 09:36:31 +02:00
Rūdolfs Ošiņš 3c2935704f Upgrade npm dependencies
This also upgrades dompurify to the latest version, outside our cooldown
window, for a security fix (verified safe with extra security checks).

Newer dompurify versions expose a bug where happy-dom renders one of our
custom elements incorrectly in tests, unlike real browsers. Switch the unit
test environment from happy-dom to jsdom to fix the failing tests.
2026-07-16 11:34:41 +02:00
Rūdolfs Ošiņš f5675e6268 Rename [iris|rosa].radicle.xyz -> [iris|rosa].radicle.network 2026-07-15 15:42:22 +02:00
025e7254f9 Add explore homepage and Radicle marketing site
Co-authored-by: Julien Donck <donckjulien@gmail.com>
Co-authored-by: Brandon Oxendine <brandon.oxendine@gmail.com>
2026-07-15 15:41:35 +02:00
Rūdolfs Ošiņš 8e2148599e Probe archive download support on demand
The source and commit views hit the /raw archive endpoint with a
HEAD request on every page load to decide whether to show the
download UI. That endpoint runs `git archive` server-side.

Move detection to user interaction: the clone popover probes when
the Download tab is opened, and the commit view checks on click,
navigating on success or showing a message on failure.

Cache only successful results per URL so transient or moving-ref 404s
aren't latched for the session.
2026-06-11 13:38:49 +02:00
Rūdolfs Ošiņš 74b3c079ad Show a commit message placeholder when there is no message
This way we can still navigate to the single commit view.
2026-05-28 10:25:40 +02:00
Rūdolfs Ošiņš 18953e9b08 Redesign JobCob popover 2026-05-21 15:47:18 +02:00
Rūdolfs Ošiņš 915d309e14 Tolerate null agent in /node response
Public seeds return `"agent": null` because their deployed httpd
binaries can't parse i2p/onion rows that newer nodes write to the
address table — `AddressStore::get` fails and the handler falls back
to `None`. Allow null in the zod schema and hide the user-agent row
in the UI when it's missing.

Workaround until heartwood ships `StoreExt::agent_of` (reads only
the `agent` column, no address hydration) and httpd adopts it.
2026-05-21 12:33:15 +02:00
Rūdolfs Ošiņš 9e268d9ac0 Scope DOMPurify config to call sites
Replace global setConfig with an exported sanitizeConfig passed
inline. The global config leaked into mermaid's internal
strict-mode sanitization, stripping valid SVG diagrams.
2026-05-07 18:31:28 +02:00
Brandon Oxendine a4c6f04028 Link issue and patch breadcrumbs to their status filter 2026-05-06 12:47:25 +02:00
Rūdolfs Ošiņš 3f798744bb Use linkify-it for commit description URLs
Replace the hand-rolled URL regex with `linkify-it` (already a
transitive dep via `marked-linkify-it`). Add unit tests.
2026-05-06 09:54:04 +02:00
Yumin Chen 20be88e5da Allow radicle-external-link components in commit descriptions
To allow some very basic hyperlinking in commit descriptions we can
replace fully specified urls with a valid scheme into
`radicle-external-link` components within patches and git history.
2026-05-05 16:45:14 +02:00
Rūdolfs Ošiņš 613e5e1810 Fix node/user avatar generated wrongly from hostname
It should always be generated from the Node Id.
2026-05-05 16:01:01 +02:00
Defelo 2e19c93a9c Don't show node avatar in user view 2026-05-01 15:46:01 +02:00
Rūdolfs Ošiņš dbe0ed7f77 Add a link to radicle.dev to the node sidebar footer 2026-04-29 15:55:18 +02:00
Rūdolfs Ošiņš f472fe892b Add "Sort by activity" toggle to UserReposView 2026-04-29 12:12:35 +02:00
Rūdolfs Ošiņš e64aee34ca Cancel in-flight activity fetches on navigation 2026-04-29 12:12:12 +02:00
Rūdolfs Ošiņš 4ddca81f16 Add "Sort by activity" toggle to repo list 2026-04-29 12:12:03 +02:00
Rūdolfs Ošiņš 269c6e52ea Rename [iris,rosa].radicle.dev -> [iris,rosa].radicle.network 2026-04-23 11:16:56 +02:00
Rūdolfs Ošiņš b21faa104a Rename radicle.xyz -> radicle.dev where possible 2026-04-23 10:21:39 +02:00
Rūdolfs Ošiņš b2f74ebd15 Upgrade all Javascript dependencies
Changes which were needed after the upgrade:

- Replace vite-plugin-virtual (vite 8 incompatible) with vite's
  built-in `define` for the buildTimeConfig injection

- tsconfig: drop deprecated `baseUrl` (TS 5+ resolves `paths`
  relative to tsconfig)

- Vitest 4: import `defineConfig` from `vitest/config` so `test`
  is valid in vite configs

- Zod 4: rename `.errors` to `.issues`, make `ZodSchema` a
  type-only import, drop the removed `SafeParseReturnType`

- Tighten/loosen generic casts in localStore to match stricter
  zod 4 inference

- ESLint 9 `no-useless-assignment`: remove redundant initializers
  and dead reassignments; disable the rule where Svelte's reactive
  blocks confuse the analyser

- Svelte/eslint `prefer-svelte-reactivity`: disable for legacy
  Svelte usages of URL / Set

- Misc naming-convention and prefer-const fixes
2026-04-22 17:48:45 +02:00
Rūdolfs Ošiņš ecbea99f56 Show canonical branches and tags in peer selector 2026-04-22 09:45:00 +02:00
Rūdolfs Ošiņš 64f91fa41d Show job cobs on repo source and patches 2026-04-21 17:29:39 +02:00
Rūdolfs Ošiņš afb0f903ee Replace last deprecated Avatar with UserAvatar
We missed this one spot in the grand UI redesign.
2026-03-26 17:43:47 -06:00
Julien Donck 7d5dd7e8a2 Fix intermittent TypeError during route transitions
Svelte 5's signal system can evaluate derived signals in child
components before parent {#if} blocks destroy them. When the
route store changes (e.g. from repo.commit to repo.patch), the
spread props update before the old component is unmounted, causing
commit to become undefined and Changeset to throw accessing
undefined.files.

Use optional chaining on Commit prop expressions so getters
return undefined instead of throwing, and guard Changeset
template with {#if diff} plus optional chaining on files
lookups.
2026-03-17 12:45:36 -06:00
Julien Donck c6c3cc2807 Replace repo sidebar with horizontal tab bar
Convert the vertical sidebar navigation (Source, Issues, Patches) into
a horizontal tab bar above the content area. The ContextRepo info moves
into a popover behind an info button in the tab bar.

Mobile footer navigation is preserved for small screens, with the tab
bar hidden on mobile.
2026-03-17 12:38:43 -06:00
Brandon Oxendine af74f2b84d Fix colors 2026-03-12 17:13:00 +01:00
Brandon c38e04ac7c Fix user ID tooltip overflow 2026-03-11 09:25:41 -06:00
Rūdolfs Ošiņš c8f3ea4131 Align icon component with UI kit 2026-03-10 12:31:55 -06:00