From 3dcf404b267f5d645717391060e3e9a13fa6c572 Mon Sep 17 00:00:00 2001 From: Austin Schaefer Date: Tue, 15 Sep 2026 11:31:27 +0200 Subject: [PATCH] Extract vendored dioxus-primitives components into their own crate MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit crates/web/src/components/ was a byte-for-byte copy of the DioxusLabs/components "preview" registry (a shadcn-style copy-into- your-project source, not something published as a dependency). Move it wholesale into a new feedsignal-dioxus-components crate so it reads as vendored code we depend on rather than application source, and future app-specific styling should layer on via the class/attributes props each component already accepts instead of editing the vendored files. No component logic changed — this is a pure move plus import-path updates in the four app files that consumed it. Co-Authored-By: Claude Sonnet 5 --- Cargo.lock | 11 ++++++++++- Cargo.toml | 2 ++ crates/dioxus-components/Cargo.toml | 10 ++++++++++ .../src/components/badge/component.rs | 0 .../src/components/badge/mod.rs | 0 .../src/components/badge/style.css | 0 .../src/components/button/component.rs | 0 .../src/components/button/mod.rs | 0 .../src/components/button/style.css | 0 .../src/components/input/component.rs | 0 .../src/components/input/mod.rs | 0 .../src/components/input/style.css | 0 .../{web => dioxus-components}/src/components/mod.rs | 0 .../src/components/scroll_area/component.rs | 0 .../src/components/scroll_area/mod.rs | 0 .../src/components/scroll_area/style.css | 0 .../src/components/separator/component.rs | 0 .../src/components/separator/mod.rs | 0 .../src/components/separator/style.css | 0 .../src/components/sheet/component.rs | 0 .../src/components/sheet/mod.rs | 0 .../src/components/sheet/style.css | 0 .../src/components/sidebar/component.rs | 0 .../src/components/sidebar/mod.rs | 0 .../src/components/sidebar/style.css | 0 .../src/components/skeleton/component.rs | 0 .../src/components/skeleton/mod.rs | 0 .../src/components/skeleton/style.css | 0 .../src/components/tooltip/component.rs | 0 .../src/components/tooltip/mod.rs | 0 .../src/components/tooltip/style.css | 0 crates/dioxus-components/src/lib.rs | 9 +++++++++ crates/web/Cargo.toml | 2 +- crates/web/src/app/article_row/component.rs | 4 ++-- crates/web/src/app/mod.rs | 8 ++++---- crates/web/src/app/subscribe_form/component.rs | 4 ++-- crates/web/src/main.rs | 1 - 37 files changed, 40 insertions(+), 11 deletions(-) create mode 100644 crates/dioxus-components/Cargo.toml rename crates/{web => dioxus-components}/src/components/badge/component.rs (100%) rename crates/{web => dioxus-components}/src/components/badge/mod.rs (100%) rename crates/{web => dioxus-components}/src/components/badge/style.css (100%) rename crates/{web => dioxus-components}/src/components/button/component.rs (100%) rename crates/{web => dioxus-components}/src/components/button/mod.rs (100%) rename crates/{web => dioxus-components}/src/components/button/style.css (100%) rename crates/{web => dioxus-components}/src/components/input/component.rs (100%) rename crates/{web => dioxus-components}/src/components/input/mod.rs (100%) rename crates/{web => dioxus-components}/src/components/input/style.css (100%) rename crates/{web => dioxus-components}/src/components/mod.rs (100%) rename crates/{web => dioxus-components}/src/components/scroll_area/component.rs (100%) rename crates/{web => dioxus-components}/src/components/scroll_area/mod.rs (100%) rename crates/{web => dioxus-components}/src/components/scroll_area/style.css (100%) rename crates/{web => dioxus-components}/src/components/separator/component.rs (100%) rename crates/{web => dioxus-components}/src/components/separator/mod.rs (100%) rename crates/{web => dioxus-components}/src/components/separator/style.css (100%) rename crates/{web => dioxus-components}/src/components/sheet/component.rs (100%) rename crates/{web => dioxus-components}/src/components/sheet/mod.rs (100%) rename crates/{web => dioxus-components}/src/components/sheet/style.css (100%) rename crates/{web => dioxus-components}/src/components/sidebar/component.rs (100%) rename crates/{web => dioxus-components}/src/components/sidebar/mod.rs (100%) rename crates/{web => dioxus-components}/src/components/sidebar/style.css (100%) rename crates/{web => dioxus-components}/src/components/skeleton/component.rs (100%) rename crates/{web => dioxus-components}/src/components/skeleton/mod.rs (100%) rename crates/{web => dioxus-components}/src/components/skeleton/style.css (100%) rename crates/{web => dioxus-components}/src/components/tooltip/component.rs (100%) rename crates/{web => dioxus-components}/src/components/tooltip/mod.rs (100%) rename crates/{web => dioxus-components}/src/components/tooltip/style.css (100%) create mode 100644 crates/dioxus-components/src/lib.rs diff --git a/Cargo.lock b/Cargo.lock index ae17750..f3a88f3 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -1603,6 +1603,15 @@ dependencies = [ "uuid", ] +[[package]] +name = "feedsignal-dioxus-components" +version = "0.1.0" +dependencies = [ + "dioxus", + "dioxus-icons", + "dioxus-primitives", +] + [[package]] name = "feedsignal-feeds" version = "0.1.0" @@ -1633,10 +1642,10 @@ dependencies = [ "anyhow", "chrono", "dioxus", - "dioxus-icons", "dioxus-primitives", "feedsignal-core", "feedsignal-db", + "feedsignal-dioxus-components", "feedsignal-feeds", "feedsignal-llm", "serde", diff --git a/Cargo.toml b/Cargo.toml index 1dc5e8d..a05cdc6 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -3,6 +3,7 @@ resolver = "2" members = [ "crates/core", "crates/db", + "crates/dioxus-components", "crates/feeds", "crates/llm", "crates/web", @@ -31,5 +32,6 @@ libsqlite3-sys = { version = "0.30", features = ["bundled"] } feedsignal-core = { path = "crates/core" } feedsignal-db = { path = "crates/db" } +feedsignal-dioxus-components = { path = "crates/dioxus-components" } feedsignal-feeds = { path = "crates/feeds" } feedsignal-llm = { path = "crates/llm" } diff --git a/crates/dioxus-components/Cargo.toml b/crates/dioxus-components/Cargo.toml new file mode 100644 index 0000000..21e1755 --- /dev/null +++ b/crates/dioxus-components/Cargo.toml @@ -0,0 +1,10 @@ +[package] +name = "feedsignal-dioxus-components" +version.workspace = true +edition.workspace = true +license.workspace = true + +[dependencies] +dioxus = "0.7" +dioxus-primitives = { git = "https://github.com/DioxusLabs/components", version = "0.0.1", default-features = false } +dioxus-icons = { version = "0.1.0", default-features = false } diff --git a/crates/web/src/components/badge/component.rs b/crates/dioxus-components/src/components/badge/component.rs similarity index 100% rename from crates/web/src/components/badge/component.rs rename to crates/dioxus-components/src/components/badge/component.rs diff --git a/crates/web/src/components/badge/mod.rs b/crates/dioxus-components/src/components/badge/mod.rs similarity index 100% rename from crates/web/src/components/badge/mod.rs rename to crates/dioxus-components/src/components/badge/mod.rs diff --git a/crates/web/src/components/badge/style.css b/crates/dioxus-components/src/components/badge/style.css similarity index 100% rename from crates/web/src/components/badge/style.css rename to crates/dioxus-components/src/components/badge/style.css diff --git a/crates/web/src/components/button/component.rs b/crates/dioxus-components/src/components/button/component.rs similarity index 100% rename from crates/web/src/components/button/component.rs rename to crates/dioxus-components/src/components/button/component.rs diff --git a/crates/web/src/components/button/mod.rs b/crates/dioxus-components/src/components/button/mod.rs similarity index 100% rename from crates/web/src/components/button/mod.rs rename to crates/dioxus-components/src/components/button/mod.rs diff --git a/crates/web/src/components/button/style.css b/crates/dioxus-components/src/components/button/style.css similarity index 100% rename from crates/web/src/components/button/style.css rename to crates/dioxus-components/src/components/button/style.css diff --git a/crates/web/src/components/input/component.rs b/crates/dioxus-components/src/components/input/component.rs similarity index 100% rename from crates/web/src/components/input/component.rs rename to crates/dioxus-components/src/components/input/component.rs diff --git a/crates/web/src/components/input/mod.rs b/crates/dioxus-components/src/components/input/mod.rs similarity index 100% rename from crates/web/src/components/input/mod.rs rename to crates/dioxus-components/src/components/input/mod.rs diff --git a/crates/web/src/components/input/style.css b/crates/dioxus-components/src/components/input/style.css similarity index 100% rename from crates/web/src/components/input/style.css rename to crates/dioxus-components/src/components/input/style.css diff --git a/crates/web/src/components/mod.rs b/crates/dioxus-components/src/components/mod.rs similarity index 100% rename from crates/web/src/components/mod.rs rename to crates/dioxus-components/src/components/mod.rs diff --git a/crates/web/src/components/scroll_area/component.rs b/crates/dioxus-components/src/components/scroll_area/component.rs similarity index 100% rename from crates/web/src/components/scroll_area/component.rs rename to crates/dioxus-components/src/components/scroll_area/component.rs diff --git a/crates/web/src/components/scroll_area/mod.rs b/crates/dioxus-components/src/components/scroll_area/mod.rs similarity index 100% rename from crates/web/src/components/scroll_area/mod.rs rename to crates/dioxus-components/src/components/scroll_area/mod.rs diff --git a/crates/web/src/components/scroll_area/style.css b/crates/dioxus-components/src/components/scroll_area/style.css similarity index 100% rename from crates/web/src/components/scroll_area/style.css rename to crates/dioxus-components/src/components/scroll_area/style.css diff --git a/crates/web/src/components/separator/component.rs b/crates/dioxus-components/src/components/separator/component.rs similarity index 100% rename from crates/web/src/components/separator/component.rs rename to crates/dioxus-components/src/components/separator/component.rs diff --git a/crates/web/src/components/separator/mod.rs b/crates/dioxus-components/src/components/separator/mod.rs similarity index 100% rename from crates/web/src/components/separator/mod.rs rename to crates/dioxus-components/src/components/separator/mod.rs diff --git a/crates/web/src/components/separator/style.css b/crates/dioxus-components/src/components/separator/style.css similarity index 100% rename from crates/web/src/components/separator/style.css rename to crates/dioxus-components/src/components/separator/style.css diff --git a/crates/web/src/components/sheet/component.rs b/crates/dioxus-components/src/components/sheet/component.rs similarity index 100% rename from crates/web/src/components/sheet/component.rs rename to crates/dioxus-components/src/components/sheet/component.rs diff --git a/crates/web/src/components/sheet/mod.rs b/crates/dioxus-components/src/components/sheet/mod.rs similarity index 100% rename from crates/web/src/components/sheet/mod.rs rename to crates/dioxus-components/src/components/sheet/mod.rs diff --git a/crates/web/src/components/sheet/style.css b/crates/dioxus-components/src/components/sheet/style.css similarity index 100% rename from crates/web/src/components/sheet/style.css rename to crates/dioxus-components/src/components/sheet/style.css diff --git a/crates/web/src/components/sidebar/component.rs b/crates/dioxus-components/src/components/sidebar/component.rs similarity index 100% rename from crates/web/src/components/sidebar/component.rs rename to crates/dioxus-components/src/components/sidebar/component.rs diff --git a/crates/web/src/components/sidebar/mod.rs b/crates/dioxus-components/src/components/sidebar/mod.rs similarity index 100% rename from crates/web/src/components/sidebar/mod.rs rename to crates/dioxus-components/src/components/sidebar/mod.rs diff --git a/crates/web/src/components/sidebar/style.css b/crates/dioxus-components/src/components/sidebar/style.css similarity index 100% rename from crates/web/src/components/sidebar/style.css rename to crates/dioxus-components/src/components/sidebar/style.css diff --git a/crates/web/src/components/skeleton/component.rs b/crates/dioxus-components/src/components/skeleton/component.rs similarity index 100% rename from crates/web/src/components/skeleton/component.rs rename to crates/dioxus-components/src/components/skeleton/component.rs diff --git a/crates/web/src/components/skeleton/mod.rs b/crates/dioxus-components/src/components/skeleton/mod.rs similarity index 100% rename from crates/web/src/components/skeleton/mod.rs rename to crates/dioxus-components/src/components/skeleton/mod.rs diff --git a/crates/web/src/components/skeleton/style.css b/crates/dioxus-components/src/components/skeleton/style.css similarity index 100% rename from crates/web/src/components/skeleton/style.css rename to crates/dioxus-components/src/components/skeleton/style.css diff --git a/crates/web/src/components/tooltip/component.rs b/crates/dioxus-components/src/components/tooltip/component.rs similarity index 100% rename from crates/web/src/components/tooltip/component.rs rename to crates/dioxus-components/src/components/tooltip/component.rs diff --git a/crates/web/src/components/tooltip/mod.rs b/crates/dioxus-components/src/components/tooltip/mod.rs similarity index 100% rename from crates/web/src/components/tooltip/mod.rs rename to crates/dioxus-components/src/components/tooltip/mod.rs diff --git a/crates/web/src/components/tooltip/style.css b/crates/dioxus-components/src/components/tooltip/style.css similarity index 100% rename from crates/web/src/components/tooltip/style.css rename to crates/dioxus-components/src/components/tooltip/style.css diff --git a/crates/dioxus-components/src/lib.rs b/crates/dioxus-components/src/lib.rs new file mode 100644 index 0000000..de5d630 --- /dev/null +++ b/crates/dioxus-components/src/lib.rs @@ -0,0 +1,9 @@ +// Vendored copies of the dioxus-primitives component registry +// (https://github.com/DioxusLabs/components, preview/src/components). +// That registry is a "copy this source into your project" style +// collection, not a published crate — so these files are pulled in +// verbatim rather than depended on directly. Don't edit component +// internals for app-specific needs; layer overrides on via the `class`/ +// `attributes` props each component already accepts. +mod components; +pub use components::*; diff --git a/crates/web/Cargo.toml b/crates/web/Cargo.toml index b6102e0..5787df3 100644 --- a/crates/web/Cargo.toml +++ b/crates/web/Cargo.toml @@ -24,7 +24,7 @@ chrono = { workspace = true, optional = true } serde_json = { workspace = true, optional = true } tokio-cron-scheduler = { version = "0.13", optional = true } dioxus-primitives = { git = "https://github.com/DioxusLabs/components", version = "0.0.1", default-features = false } -dioxus-icons = { version = "0.1.0", default-features = false } +feedsignal-dioxus-components.workspace = true [features] default = ["web"] diff --git a/crates/web/src/app/article_row/component.rs b/crates/web/src/app/article_row/component.rs index df9fa34..1a1c1b0 100644 --- a/crates/web/src/app/article_row/component.rs +++ b/crates/web/src/app/article_row/component.rs @@ -1,9 +1,9 @@ use super::handlers::score_percent; use crate::api; use crate::api::ArticleView; -use crate::components::badge::{Badge, BadgeVariant}; -use crate::components::button::{Button, ButtonSize, ButtonVariant}; use dioxus::prelude::*; +use feedsignal_dioxus_components::badge::{Badge, BadgeVariant}; +use feedsignal_dioxus_components::button::{Button, ButtonSize, ButtonVariant}; #[component] pub fn ArticleRow(article: ArticleView) -> Element { diff --git a/crates/web/src/app/mod.rs b/crates/web/src/app/mod.rs index c65b138..22e1db5 100644 --- a/crates/web/src/app/mod.rs +++ b/crates/web/src/app/mod.rs @@ -3,13 +3,13 @@ mod handlers; mod subscribe_form; use crate::api; -use crate::components::scroll_area::ScrollArea; -use crate::components::sidebar::{ +use article_row::ArticleRow; +use dioxus::prelude::*; +use feedsignal_dioxus_components::scroll_area::ScrollArea; +use feedsignal_dioxus_components::sidebar::{ Sidebar, SidebarContent, SidebarGroup, SidebarGroupContent, SidebarGroupLabel, SidebarHeader, SidebarInset, SidebarMenu, SidebarMenuButton, SidebarMenuItem, SidebarProvider, SidebarTrigger, }; -use article_row::ArticleRow; -use dioxus::prelude::*; use subscribe_form::SubscribeForm; #[component] diff --git a/crates/web/src/app/subscribe_form/component.rs b/crates/web/src/app/subscribe_form/component.rs index c589038..ab23868 100644 --- a/crates/web/src/app/subscribe_form/component.rs +++ b/crates/web/src/app/subscribe_form/component.rs @@ -1,8 +1,8 @@ use super::handlers::{normalize_feed_url, resolve_submit_outcome, SubmitOutcome}; use crate::api; -use crate::components::button::{Button, ButtonVariant}; -use crate::components::input::Input; use dioxus::prelude::*; +use feedsignal_dioxus_components::button::{Button, ButtonVariant}; +use feedsignal_dioxus_components::input::Input; /// Form for manually subscribing to a feed by URL. Fetches the feed /// immediately on submit (rather than waiting for the next scheduled poll) diff --git a/crates/web/src/main.rs b/crates/web/src/main.rs index f85fa63..b47f5d5 100644 --- a/crates/web/src/main.rs +++ b/crates/web/src/main.rs @@ -1,6 +1,5 @@ mod api; mod app; -mod components; #[cfg(feature = "server")] mod server; -- 2.45.2