Commit Graph
1559 Commits
Author SHA1 Message Date
Daniel Norman b6743c63fc Fix inline emphasis tags in markdown output
- Without strong, **bold** rendered as plain text since marked
  emits <strong> and DOMPurify stripped the unknown tag
- Add strong, b, i, del, s to DOMPurify allow-list
- Cover the other inline emphasis tags authors may write as raw
  HTML or that GFM strikethrough emits (<del>)
2026-04-22 17:53:23 +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
Rūdolfs Ošiņš 175f5b701c Fix regression where loading bar isn't shown anymore 2026-03-11 14:41:56 -06: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
Rūdolfs Ošiņš 73408cd826 Improve UX when a node is unreachable
When a saved node (e.g. localhost) is down, the app previously showed a
dead-end "Node not found" page with no way to navigate away.

Now the not-found page displays the seed selector inline with the error
title, showing which node failed and letting users switch to a different
one directly. The same treatment applies when navigating to a repo on an
unreachable node.
2026-03-06 15:38:00 -06:00
Rūdolfs OšiņšandJulien Donck fa85596ba1 Backport new UI kit design system from garden
Co-authored-by: Julien Donck <donckjulien@gmail.com>
2026-03-06 11:38:43 -06:00
Rūdolfs Ošiņš 5c12ab3f92 Fix repo and router specs
They were not run by the test suite at all, because they lacked the
.spec.ts suffix. This change makes sure they're run again and fixes a
all failing specs.
2026-02-26 12:47:14 -06:00
Defelo d4eeccb90f Show parents on commit page 2026-02-25 10:08:01 -06:00
Defelo 29b952a3ff Show all repos if there are no pinned repos 2026-02-05 16:28:46 -06:00
Rūdolfs Ošiņš ebe4e426e8 Improve localhost detection 2026-01-17 09:35:54 -06:00
Rūdolfs Ošiņš 8f52b2bdfb Support *.localhost subdomains
In the new always-on-node service we'll want to test things locally with
domains that look like this: rudolfs.localhost:3080
2026-01-13 12:49:18 -06:00
Rūdolfs Ošiņš c72494f620 Enable localhost connections in radicle-explorer
Allow radicle-explorer to connect to a locally running radicle-httpd via
https://app.radicle.xyz/nodes/localhost. This was previously disabled to
encourage use of Radicle Desktop, but is now useful for testing the new
always-on node in local development environments.

Remove support for /nodes/radicle.local, an undocumented and unused convention.

Fix remote node loading when Cloudflare URL-encodes port separator (: → %3A).
2026-01-12 14:38:50 -06:00
Rūdolfs Ošiņš eec96f5121 Fix linter warnings
Fixes svelte/no-reactive-reassign errors when running scripts/check.

It slipped through code review, regression from:
https://app.radicle.xyz/nodes/seed.radicle.garden/rad:z4V1sjrXqjvFdnCUbxPFqd5p4DtH5/patches/d77e0646b32cac18187a72bd5f36b501a08040ba
https://github.com/radicle-dev/radicle-explorer/actions/runs/17741958964/job/50417893170
2026-01-09 14:57:19 -06:00
Cameron Eldridge 97dac7e28f Add rudimentary "Browse all repos on node" view
Seemed to me there was no way to browse all the repositories being seeded on a node.
On the massive public nodes this is not that useful a feature since there are too many
and too jumbled an assortment, but for a smaller personal node, this feature might be
valuable to make the explorer's contents a bit easier to explore.

Went with the most unintrusive implementation of this idea for now; just enough
that it "does the job" (you can access this view, and paginate the results)
but does not have any of the bells and whistles it should have (search/filtering,
sorting, page query parameters support).

As part of this work, since the repos section gets much more complex, I extracted
the repos part of the page into its own component. Otherwise, it is just very simply
allowing the parameters to the `fetchRepoInfos` call to be manipulated from the page.
2025-09-15 16:02:35 +02:00
Cameron Eldridge e4ec27c06b Fix CSS for task lists in rendered Markdown
The previous CSS was setting the task-list element to be `display: flex`, but this
does not play well with a task list item that contains further nodes. Commonly,
a sub-list, but even a bolded bit of text is rendered with a bit of unpleasant
extra spacing.

Example:

- [ ] Task 1
    - Step 1: Do *thing*
    - Step 2: Do __another__ thing

Or since I'm not sure if that's going to be rendered via this interface,
just find such a file on the hosted version. [This](https://app.radicle.xyz/nodes/seed.radicle.garden/rad%3Az28AWjUMmH9kFFCw7W9GMSCHoA9zZ)
repository of mine is particularly offensive in this category.

To solve the issue, I have removed the flex, and additional turned the icon component
itself into an inline flex element, as it being a block element was likely part of
the reason the list became a flex container to begin with.
2025-09-15 13:28:18 +02:00
Defelo ed41e5529a Add width and height to allowed attributes 2025-09-13 22:37:03 +02:00
Rūdolfs Ošiņš 781045b254 Run user did through decodeURIComponent before validating
We recently moved app.radicle.xyz to Cloudflare, which by default
normalizes all URLs to be encoded on redirect. The redirects happen
because we run in SPA mode.
2025-07-24 12:50:29 +02:00
Sebastian Martinez 18afaa1251 Add file path and line for comments with code locations
Instead of only displaying a comment, we need to make sure users know
that this has been a line comment.

Linking to changes for the display of the comment is a bit trickier,
will do so in a follow up
2025-06-27 11:28:23 +02:00
Sebastian Martinez 33b8ecde59 Add review comments and replies 2025-06-26 08:41:01 +02:00
Sebastian Martinez 9cd9673152 Use new naming of preferred seed nodes 2025-06-19 08:28:23 +02:00
Sebastian Martinez 66a7c98210 Fix hidden overflow for rid copy tooltip in RepoCard 2025-06-16 10:45:01 +02:00
Sebastian Martinez c607fd7177 Hide overflow in RepoCard 2025-06-16 10:09:26 +02:00
Sebastian Martinez 2c362adffb Update dependencies 2025-05-21 13:40:52 +02:00
Sebastian Martinez 14f3c6f63b Further improve on handling disabled localStorage
Based on the work done in commit
`a73c5490b160435a0ef5408b54185c9f698cb73f` there are a few places that
make the app not load in case dom storage aka localStorage is disabled.
2025-05-05 09:54:08 +02:00
Sebastian Martinez 2270e61865 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.
2025-04-28 09:44:43 +02:00
Sebastian Martinez c0b913f392 Add Download button to commit view 2025-04-25 13:06:35 +02:00
Sebastian Martinez 8d1624e0da Add Download radio button to Clone popover 2025-04-25 13:06:35 +02:00
Rūdolfs Ošiņš 775cbd1c37 Allow overriding configuration at run-time 2025-04-25 08:55:09 +02:00
Sebastian Martinez f2c7bb71c7 Handle json! panick trying to serialize non utf8 lines
Instead of panicking when trying to handle non utf8 lines we should
return `null` as line output.

This way we can on the frontend detect if a file has any lines the api
wasn't able to parse and fallback to show a file as a `Binary File`
2025-03-19 11:12:04 -06:00
Rūdolfs Ošiņš 46d1c2177d Make RID on repo cards copyable 2025-02-14 09:05:29 +01:00
Konstantinos Maninakis e9c783f04a Use monospaced font for repo id on repo card 2025-02-12 14:38:52 -06:00
Sebastian Martinez 50318285f8 Update svelte to v5.0
Only do the minimal changes possible to be able to keep updating
dependencies.
2025-02-04 11:42:02 -06:00
Sebastian Martinez 4e7507a9be Fix embeds in Markdown component
Changes the display of embeds from being markdown images to markdown
links.
Mimics the way embeds work on the desktop app and allows other embeds to
work too like pdfs, videos, etc.
2025-02-04 11:32:28 -06:00
Sebastian Martinez 4c31a8134d Restrict DOM sanitization to limited whitelist 2024-12-18 14:47:21 +01:00
Matthew O'Gorman 2075c320f3 Add markdown support to node descriptions
Instead of escaping all html by svelte, we should pass the node
description through the markdown parser and sanitize the parsed content.
2024-11-28 16:43:11 +01:00
Sebastian Martinez b21b2bae5e Add overscroll-behavior: contain to PeerBranchSelector
Avoids the entire window to scroll when only scrolling inside the
`PeerBranchSelector`
2024-11-27 15:12:44 +01:00
Sebastian Martinez 723d188e9e Fix copying wrong ids when switching cob listing state
We don't really need the `clipboard` prop.
By switching between stats in patches and issue listings the clipboard
props aren't been recomputed.

Wrote a test that should make sure this doesn't break in the future.
2024-11-27 11:00:17 +01:00
Sebastian Martinez f19ecf09ed Detect changes to system theme on first load 2024-11-26 09:22:13 +01:00
Sebastian Martinez 691e0255fb Improve handling of localStorage and svelte stores
Also moving the svelte-stored-writable package into the repo.
So we have it closer for maintenance, we can eventually rewrite it in
svelte 5 runes later.

Reference: https://github.com/efstajas/svelte-stored-writable/pull/5
2024-11-25 17:06:26 +01:00
Jappie3 032b269cb9 add event listener to hot reload theme 2024-11-25 16:49:50 +01:00
Jappie3 b050924caa add follow system theme button & functionality 2024-11-25 14:26:32 +01:00
Sebastian Martinez 870f0733fe fix(web): Fix padding between avatar and alias 2024-11-18 09:39:33 +01:00
Samuel Shuert 5ccce437ab feat(web): Display assignees as nodes
Previously assignees were displayed using a chip, which while it looked
nice had the following issues:
- It only showed the node ID rather than the alias (and actually the
  node ID was cut off)
- It wasn't clickable to go to the user's profile
- It was not a consistent experience with the rest of the users
  displayed around the application (e.g. in reviews, uploader, branches
  view).
2024-11-18 09:05:12 +01:00