app

Local-first trade for farms and co-ops
git clone https://radroots.dev/git/app.git
Log | Files | Refs | README | LICENSE

commit f46395e2de98b6d24889fa6f31a8c060b6ae83c6
parent 7913826037fe1bac88f080c2a2d353aa1a4f1b82
Author: triesap <tyson@radroots.org>
Date:   Fri, 20 Mar 2026 03:08:12 +0000

build: align replica and ui primitive integrations

Diffstat:
MCargo.lock | 78+++++++++++++++++++++---------------------------------------------------------
MCargo.toml | 2+-
Mcrates/core/src/tangle/types.rs | 10+++++-----
Mcrates/core/src/tangle/web.rs | 12++++++------
Mcrates/ui-components/src/dialog.rs | 2+-
Mcrates/ui-primitives/src/lib.rs | 24++++++++++++------------
6 files changed, 46 insertions(+), 82 deletions(-)

diff --git a/Cargo.lock b/Cargo.lock @@ -1715,10 +1715,10 @@ dependencies = [ "getrandom 0.2.17", "hex", "js-sys", - "radroots-events", "radroots-nostr", "radroots-replica-db", "radroots-replica-db-schema", + "radroots-replica-sync", "radroots-sql-core", "rusqlite", "serde", @@ -1807,7 +1807,6 @@ dependencies = [ "rust_decimal", "rust_decimal_macros", "serde", - "typeshare", ] [[package]] @@ -1816,8 +1815,6 @@ version = "0.1.0-alpha.1" dependencies = [ "radroots-core", "serde", - "ts-rs", - "typeshare", ] [[package]] @@ -1826,6 +1823,8 @@ version = "0.1.0-alpha.1" dependencies = [ "radroots-core", "radroots-events", + "serde", + "serde_json", ] [[package]] @@ -1873,6 +1872,24 @@ dependencies = [ ] [[package]] +name = "radroots-replica-sync" +version = "0.1.0-alpha.1" +dependencies = [ + "base64", + "hex", + "radroots-events", + "radroots-events-codec", + "radroots-replica-db", + "radroots-replica-db-schema", + "radroots-sql-core", + "radroots-types", + "serde", + "serde_json", + "sha2", + "uuid", +] + +[[package]] name = "radroots-sql-core" version = "0.1.0-alpha.1" dependencies = [ @@ -2399,15 +2416,6 @@ dependencies = [ ] [[package]] -name = "termcolor" -version = "1.4.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "06794f8f6c5c898b3275aebefa6b8a1cb24cd2c6c79397ab15774837a0bc5755" -dependencies = [ - "winapi-util", -] - -[[package]] name = "thiserror" version = "1.0.69" source = "registry+https://github.com/rust-lang/crates.io-index" @@ -2637,28 +2645,6 @@ dependencies = [ ] [[package]] -name = "ts-rs" -version = "11.1.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4994acea2522cd2b3b85c1d9529a55991e3ad5e25cdcd3de9d505972c4379424" -dependencies = [ - "thiserror 2.0.18", - "ts-rs-macros", -] - -[[package]] -name = "ts-rs-macros" -version = "11.1.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ee6ff59666c9cbaec3533964505d39154dc4e0a56151fdea30a09ed0301f62e2" -dependencies = [ - "proc-macro2", - "quote", - "syn", - "termcolor", -] - -[[package]] name = "typed-builder" version = "0.23.2" source = "registry+https://github.com/rust-lang/crates.io-index" @@ -2685,28 +2671,6 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "562d481066bde0658276a35467c4af00bdc6ee726305698a55b86e61d7ad82bb" [[package]] -name = "typeshare" -version = "1.0.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "da1bf9fe204f358ffea7f8f779b53923a20278b3ab8e8d97962c5e1b3a54edb7" -dependencies = [ - "chrono", - "serde", - "serde_json", - "typeshare-annotation", -] - -[[package]] -name = "typeshare-annotation" -version = "1.0.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "621963e302416b389a1ec177397e9e62de849a78bd8205d428608553def75350" -dependencies = [ - "quote", - "syn", -] - -[[package]] name = "unicode-ident" version = "1.0.22" source = "registry+https://github.com/rust-lang/crates.io-index" diff --git a/Cargo.toml b/Cargo.toml @@ -109,7 +109,7 @@ radroots-types = { path = "../lib/crates/types" } radroots-sql-core = { path = "../lib/crates/sql-core" } radroots-tangle-db = { package = "radroots-replica-db", path = "../lib/crates/replica-db" } radroots-tangle-db-schema = { package = "radroots-replica-db-schema", path = "../lib/crates/replica-db-schema" } -radroots-tangle-events = { package = "radroots-events", path = "../lib/crates/events" } +radroots-tangle-events = { package = "radroots-replica-sync", path = "../lib/crates/replica-sync" } mf2-i18n-core = { path = "../../../../vendor/triesap/mf2-i18n/crates/mf2-i18n-core" } mf2-i18n-embedded = { path = "../../../../vendor/triesap/mf2-i18n/crates/mf2-i18n-embedded" } diff --git a/crates/core/src/tangle/types.rs b/crates/core/src/tangle/types.rs @@ -3,7 +3,7 @@ use serde::{Deserialize, Serialize}; use serde_json::Value; use radroots_tangle_db::backup::DatabaseBackup; -use radroots_tangle_db::TangleDbExportManifestRs; +use radroots_tangle_db::ReplicaDbExportManifestRs; pub use radroots_tangle_db_schema::{ farm::*, farm_gcs_location::*, @@ -24,7 +24,7 @@ pub use radroots_tangle_db_schema::{ trade_product_location::*, trade_product_media::*, }; -use radroots_tangle_events::{RadrootsTangleEventDraft, RadrootsTangleSyncBundle}; +use radroots_tangle_events::{RadrootsReplicaEventDraft, RadrootsReplicaSyncBundle}; use crate::idb::RadrootsClientIdbConfig; use crate::sql::{RadrootsClientSqlCipherConfig, RadrootsClientSqlMigrationState}; @@ -33,9 +33,9 @@ use super::RadrootsClientTangleError; pub type RadrootsClientTangleResult<T> = Result<T, RadrootsClientTangleError>; pub type RadrootsClientTangleDatabaseJsonExport = DatabaseBackup; -pub type RadrootsClientTangleDatabaseExportManifestRs = TangleDbExportManifestRs; -pub type RadrootsClientTangleNostrEventDraft = RadrootsTangleEventDraft; -pub type RadrootsClientTangleNostrSyncBundle = RadrootsTangleSyncBundle; +pub type RadrootsClientTangleDatabaseExportManifestRs = ReplicaDbExportManifestRs; +pub type RadrootsClientTangleNostrEventDraft = RadrootsReplicaEventDraft; +pub type RadrootsClientTangleNostrSyncBundle = RadrootsReplicaSyncBundle; #[derive(Debug, Clone, PartialEq, Serialize, Deserialize)] pub struct RadrootsClientTangleDatabaseExportManifestClient { diff --git a/crates/core/src/tangle/web.rs b/crates/core/src/tangle/web.rs @@ -15,13 +15,13 @@ use radroots_nostr::prelude::{ use radroots_sql_core::error::SqlError; use radroots_sql_core::{ExecOutcome, SqlExecutor}; use radroots_sql_core::sqlite_util; -use radroots_tangle_db::{export_manifest, TangleSql}; +use radroots_tangle_db::{export_manifest, ReplicaSql as TangleSql}; use radroots_tangle_events::{ - radroots_tangle_ingest_event, - radroots_tangle_sync_all, - RadrootsTangleEventDraft, - RadrootsTangleFarmSelector, - RadrootsTangleSyncRequest, + radroots_replica_ingest_event as radroots_tangle_ingest_event, + radroots_replica_sync_all as radroots_tangle_sync_all, + RadrootsReplicaEventDraft as RadrootsTangleEventDraft, + RadrootsReplicaFarmSelector as RadrootsTangleFarmSelector, + RadrootsReplicaSyncRequest as RadrootsTangleSyncRequest, }; use rusqlite::{params_from_iter, Connection}; use sha2::{Digest, Sha256}; diff --git a/crates/ui-components/src/dialog.rs b/crates/ui-components/src/dialog.rs @@ -253,7 +253,7 @@ pub fn RadrootsAppUiDialogContent( view! { <RadrootsAppUiDismissableLayer on_dismiss=on_dismiss - disable_outside_pointer_events=disable_outside_pointer_events + disable_pointer_down_outside_dismiss=disable_outside_pointer_events > <RadrootsAppUiFocusScope trapped=modal auto_focus=true return_focus=true> <div diff --git a/crates/ui-primitives/src/lib.rs b/crates/ui-primitives/src/lib.rs @@ -7,13 +7,13 @@ pub use ui_primitives_core::roving_focus::{ RovingFocusAction as RadrootsAppUiRovingFocusAction, RovingFocusOrientation as RadrootsAppUiRovingFocusOrientation, }; -pub use ui_primitives_leptos::builders::{ +pub use ui_primitives_leptos::attrs::{ dialog_content_attrs, dialog_trigger_attrs, }; pub use ui_primitives_leptos::{ - dismissable_is_escape as radroots_app_ui_dismissable_is_escape, - dismissable_is_outside as radroots_app_ui_dismissable_is_outside, + dismissible_is_escape as radroots_app_ui_dismissable_is_escape, + dismissible_is_outside as radroots_app_ui_dismissable_is_outside, focus_scope_next_index as radroots_app_ui_focus_scope_next_index, focus_scope_selector as radroots_app_ui_focus_scope_selector, modal_hide_siblings as radroots_app_ui_modal_hide_siblings, @@ -21,9 +21,15 @@ pub use ui_primitives_leptos::{ presence_state_next as radroots_app_ui_presence_state_next, scroll_lock_acquire as radroots_app_ui_scroll_lock_acquire, scroll_lock_release as radroots_app_ui_scroll_lock_release, - use_primitive, - DismissableLayer as RadrootsAppUiDismissableLayer, - DismissableReason as RadrootsAppUiDismissableReason, + use_dom_bindings as use_primitive, + BoundElement as PrimitiveElement, + DismissibleLayer as RadrootsAppUiDismissableLayer, + DismissibleReason as RadrootsAppUiDismissableReason, + DomAttribute as PrimitiveAttribute, + DomAttributeValue as PrimitiveAttributeValue, + DomBindingError as PrimitiveError, + DomBindingResult as PrimitiveResult, + DomEventBinding as PrimitiveEvent, FocusScope as RadrootsAppUiFocusScope, ModalError as RadrootsAppUiModalError, ModalGuard as RadrootsAppUiModalGuard, @@ -33,12 +39,6 @@ pub use ui_primitives_leptos::{ PortalMount as RadrootsAppUiPortalMount, Presence as RadrootsAppUiPresence, PresenceState as RadrootsAppUiPresenceState, - PrimitiveAttribute, - PrimitiveAttributeValue, - PrimitiveElement, - PrimitiveError, - PrimitiveEvent, - PrimitiveResult, ScrollLockError as RadrootsAppUiScrollLockError, ScrollLockGuard as RadrootsAppUiScrollLockGuard, ScrollLockResult as RadrootsAppUiScrollLockResult,