Opening another file collapsed every folder that didn't contain it,
which made browsing several folders tedious. Folders now stay open
until they're collapsed by hand.
- Add an UntrustedWarning banner
- Warn on the Others releases list
- Warn on a release by a non-delegate
- Warn on artifacts by non-delegates on a delegate release
- Warn in the download popover for a non-delegate artifact
- Add E2E tests for both release cases
Co-authored-by: Rūdolfs Ošiņš <rudolfs@osins.org>
- Route release and release list links to their views
- Offer releases for a pasted ID or link
- List delegate releases in # search
- Show release references as chips
- Cache release lookups for mentions
- Record release mentions in ADR 0003
- 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>
Clicking a relative link in a README reloaded the whole app, and links
starting with `/` dropped you in the inbox. Links to files in the repo
now open in the source view, at the linked section if there is one, and
links the app can't follow explain why instead of navigating the window
away.
This also fixes a missing linked file showing the previous file's
content instead of an error, and section links disabling the back
button.
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>
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>
Assigning someone meant finding and pasting their DID. Now the input
searches aliases and lists you, the repo's delegates and other known
peers, so a DID is only needed for someone the node has never seen.
Uses @asciidoctor/core, lazily imported so the main bundle is
unchanged, with its own DOMPurify instance because the markdown
allowlist is pinned globally via setConfig.
Include directives resolve through a registered HttpCache that maps
Asciidoctor's URI reads onto repo_blob, so tag, line-range and
nesting handling stay upstream. A per-conversion token in base_dir
scopes each read to one repository and commit.
Embeds went over IPC as JSON number arrays, so a 9MB image turned into
~36MB of JSON. On upload Tauri parses that on the main thread, which
beachballed the app while dropping a large screenshot.
macOS saves Retina screenshots at 144 DPI and we rendered them at twice
the size they had on screen. We now scale PNGs with a 2x or 3x density
down; everything else, including 300 DPI print exports, stays 1:1.
Following a link to a repo we don't have only led to the explorer, but
the reason it's missing is usually that we haven't seeded it yet.
A deep link that can't be opened now says so instead of doing nothing.
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>
Issues, patches, commits and the peer selector each had their own
debounce, and issues and patches the same search index. Vitest now
resolves Svelte's browser build, as effects never run in the server one.
Resetting only forgot the key, so the pending timeout still fired and
rescheduled itself: the sidebar kept reloading repos every 5 seconds
after nothing was left to replicate, and after it unmounted.