refactor!: rename slhx to hemx

Rename the tracked product identity, crate/package names, Rust paths/macros, generated artifacts, runtime files, public attributes, examples, docs, requirements, and tests from slhx to hemx without compatibility shims.

Verified with cargo run -p hemx-xtask -- test, cargo test -p hemx-derive --test compile_fail, cargo test -p hemx-js, cargo test -p hemx-axum, cargo test -p hemx-v0-examples, cargo check --workspace, redgate list, redgate refs, redgate health --strict, git diff --check, and git grep/ls-files legacy-name audits.

req: misc/001

req: codegen/001

req: component/004

req: runtime/001
This commit is contained in:
slhx agent
2026-06-05 06:52:37 +02:00
parent d4e865ef92
commit c33500440e
69 changed files with 1415 additions and 1415 deletions
+5 -5
View File
@@ -1,5 +1,5 @@
[package]
name = "slhx-kanban-example"
name = "hemx-kanban-example"
version.workspace = true
edition.workspace = true
publish = false
@@ -11,13 +11,13 @@ path = "src/lib.rs"
axum = "0.7"
futures-util = "0.3"
hemplate = { path = "../../../hemplate/hemplate" }
slhx = { path = "../../slhx" }
slhx-axum = { path = "../../slhx-axum" }
hemx = { path = "../../hemx" }
hemx-axum = { path = "../../hemx-axum" }
tokio = { version = "1", features = ["macros", "net", "rt-multi-thread", "time"] }
[dev-dependencies]
scraper = "0.23"
slhx-test = { path = "../../slhx-test" }
hemx-test = { path = "../../hemx-test" }
[build-dependencies]
slhx-build = { path = "../../slhx-build" }
hemx-build = { path = "../../hemx-build" }
+2 -2
View File
@@ -1,8 +1,8 @@
# slhx Kanban browser example
# hemx Kanban browser example
Run:
cargo run -p slhx-kanban-example
cargo run -p hemx-kanban-example
Open <http://127.0.0.1:3001>.
+1 -1
View File
@@ -1,3 +1,3 @@
fn main() {
slhx_build::app().run().unwrap();
hemx_build::app().run().unwrap();
}
+6 -6
View File
@@ -1,4 +1,4 @@
#[slhx::surface]
#[hemx::surface]
pub mod ui {}
#[cfg(test)]
@@ -6,8 +6,8 @@ mod tests {
use super::ui::{board, board_card};
use hemplate::Hemplate;
use scraper::{Html, Selector};
use slhx::IntoEffect;
use slhx_test::inspect;
use hemx::IntoEffect;
use hemx_test::inspect;
#[derive(Hemplate)]
#[hemplate = "partials"]
@@ -17,7 +17,7 @@ mod tests {
#[allow(dead_code)]
#[derive(Clone, Debug)]
#[slhx::form("create_card")]
#[hemx::form("create_card")]
struct CreateCard {
title: String,
column: String,
@@ -56,8 +56,8 @@ mod tests {
// req: examples/001 req: form/001 req: form/004 req: form/006 req: derive_handler/003
#[test]
fn kanban_form_handler_is_checked_against_hemplate_form() {
#[slhx::handler]
fn create_card(_form: slhx::Form<CreateCard>) -> impl IntoEffect {
#[hemx::handler]
fn create_card(_form: hemx::Form<CreateCard>) -> impl IntoEffect {
board::notice.text("queued")
}
+10 -10
View File
@@ -4,14 +4,14 @@ use axum::routing::get;
use axum::Router;
use futures_util::{stream, StreamExt};
use hemplate::Hemplate;
use slhx::{Html, IntoEffect};
use slhx_axum::{
use hemx::{Html, IntoEffect};
use hemx_axum::{
interactions, runtime_js, sse, DispatchRegistry, DispatchRejection, EffectResponse,
InteractionRequest, PageRequest,
};
use slhx_kanban_example::ui::board::{self as board};
use slhx_kanban_example::ui::board_card as card_board;
use slhx_kanban_example::ui::{self, board as board_ui};
use hemx_kanban_example::ui::board::{self as board};
use hemx_kanban_example::ui::board_card as card_board;
use hemx_kanban_example::ui::{self, board as board_ui};
use std::collections::BTreeMap;
use std::convert::Infallible;
use std::net::SocketAddr;
@@ -118,12 +118,12 @@ async fn main() {
let app = Router::new()
.route("/", get(home).post(interact))
.route("/events", get(events))
.route("/slhx.js", get(runtime))
.route("/hemx.js", get(runtime))
.with_state(state);
let addr = SocketAddr::from(([127, 0, 0, 1], 3001));
let listener = tokio::net::TcpListener::bind(addr).await.unwrap();
println!("slhx Kanban example: http://{addr}");
println!("hemx Kanban example: http://{addr}");
axum::serve(listener, app).await.unwrap();
}
@@ -132,7 +132,7 @@ async fn home(State(state): State<Arc<AppState>>, request: PageRequest) -> impl
let board = state.board.lock().unwrap().clone();
request
.page_html(page_html(&board), shell)
.title("slhx Kanban")
.title("hemx Kanban")
.fingerprint(ui::BUILD_FINGERPRINT)
}
@@ -288,7 +288,7 @@ fn page_html(board: &BoardState) -> Html {
fn shell(body: Html) -> Html {
// req: html_safety/001 req: html_safety/002 req: axum_integration/001
slhx::render(&AppShell { body })
hemx::render(&AppShell { body })
}
fn render_options() -> Html {
@@ -333,7 +333,7 @@ fn render_card(card: &Card) -> BoardCard {
mod tests {
use super::*;
use scraper::{Html, Selector};
use slhx_test::{
use hemx_test::{
class_child_selector, disabled_button_selector, element_class_selector,
escaped_markup_selector, form_selector, keyed_selector, root_element_selector,
select_options_selector, small_text_selector, strong_text_selector,
+2 -2
View File
@@ -3,8 +3,8 @@
<head>
<meta charset="utf-8">
<meta name="viewport" content="width=device-width, initial-scale=1">
<title>slhx Kanban</title>
<script src="/slhx.js" defer></script>
<title>hemx Kanban</title>
<script src="/hemx.js" defer></script>
<style>
body { font-family: system-ui, sans-serif; margin: 2rem; }
form { display: flex; gap: .5rem; flex-wrap: wrap; margin: 1rem 0; }
+6 -6
View File
@@ -1,15 +1,15 @@
<section data-slhx-root="kanban" data-slhx-sse="/events">
<section data-hemx-root="kanban" data-hemx-sse="/events">
<header>
<h1>slhx Kanban</h1>
<form data-slhx-handle="create_card" data-slhx-form="create_card" data-slhx-disable-while-pending>
<h1>hemx Kanban</h1>
<form data-hemx-handle="create_card" data-hemx-form="create_card" data-hemx-disable-while-pending>
<input name="title" type="text" required="required" placeholder="Card title">
<select name="column" required="required">{+= self.options =+}</select>
<button type="submit">Add card</button>
</form>
<p data-slhx-slot="notice">Ready</p>
<p data-hemx-slot="notice">Ready</p>
</header>
<div data-slhx-slot="board">{+= self.board =+}</div>
<aside data-slhx-slot="presence">Waiting for presence…</aside>
<div data-hemx-slot="board">{+= self.board =+}</div>
<aside data-hemx-slot="presence">Waiting for presence…</aside>
</section>
@@ -1,10 +1,10 @@
<article class="card" +data-key="self.id">
<strong>{+ self.title +}</strong>
<menu>
<button h-if="self.left_disabled" type="button" data-slhx-handle="move_left" +data-card-id="self.id" disabled="disabled">←</button>
<button h-else type="button" data-slhx-handle="move_left" +data-card-id="self.id">←</button>
<button h-if="self.right_disabled" type="button" data-slhx-handle="move_right" +data-card-id="self.id" disabled="disabled">→</button>
<button h-else type="button" data-slhx-handle="move_right" +data-card-id="self.id">→</button>
<button type="button" data-slhx-handle="delete_card" +data-card-id="self.id">Delete</button>
<button h-if="self.left_disabled" type="button" data-hemx-handle="move_left" +data-card-id="self.id" disabled="disabled">←</button>
<button h-else type="button" data-hemx-handle="move_left" +data-card-id="self.id">←</button>
<button h-if="self.right_disabled" type="button" data-hemx-handle="move_right" +data-card-id="self.id" disabled="disabled">→</button>
<button h-else type="button" data-hemx-handle="move_right" +data-card-id="self.id">→</button>
<button type="button" data-hemx-handle="delete_card" +data-card-id="self.id">Delete</button>
</menu>
</article>