feat(desktop): Send feedback modal + profile presence chip (#1756)

Signed-off-by: npub13fn4ahfnvaa2qwylvegdgeajqs0mph6v4qsw4jcqnw4mjh3hzh2quuucm5 <8a675edd33677aa0389f6650d467b2041fb0df4ca820eacb009babb95e3715d4@sprout-oss.stage.blox.sqprod.co>
Signed-off-by: Wes <wesbillman@users.noreply.github.com>
Co-authored-by: npub13fn4ahfnvaa2qwylvegdgeajqs0mph6v4qsw4jcqnw4mjh3hzh2quuucm5 <8a675edd33677aa0389f6650d467b2041fb0df4ca820eacb009babb95e3715d4@sprout-oss.stage.blox.sqprod.co>
Co-authored-by: Wes <wesbillman@users.noreply.github.com>
Co-authored-by: Pinky <44b8e82baa6e0e254e0208d68f335c283c94e7b78dd1fa10d5a49d3f13dd0435@sprout-oss.stage.blox.sqprod.co>
This commit is contained in:
klopez4212
2026-07-15 15:57:18 +01:00
committed by GitHub
parent 406cf7911e
commit f5c33d3335
15 changed files with 845 additions and 94 deletions

View File

@@ -1,4 +1,14 @@
import { invokeTauri } from "./tauri";
import { type BlobDescriptor, invokeTauri } from "./tauri";
/**
* Open a native single-file picker constrained to images and upload the
* chosen file. Non-image files are rejected in Rust (via MIME sniffing)
* before the bytes leave the client, so discarded/non-image selections never
* reach the relay. Resolves to `null` when the user cancels the dialog.
*/
export async function pickAndUploadImage(): Promise<BlobDescriptor | null> {
return invokeTauri<BlobDescriptor | null>("pick_and_upload_image", {});
}
/**
* Fetch relay media bytes over IPC (Rust reqwest, WARP-tunneled).