openpencil/crates/op-host-web/Cargo.toml
Kayshen-X 65c2aa055a refactor(rust): rename openpencil-shell-web host to op-host-web
Phase 7.3 strangler reorg — rename the web widget host crate to the
op- prefix. The crate's openpencil-shell-core dependency is repointed
to op-editor-ui (the real source crate for the widget facade / theme
/ layout scene / scene vars / render-backend / gesture types).

- crate name: openpencil-shell-web -> op-host-web
- lib name: openpencil_shell_web -> op_host_web
- every openpencil_shell_core:: path -> op_editor_ui::
- native skia.rs include_bytes! path follows the moved assets dir
- smoke harness + lib doc-comment refs updated
2026-05-16 23:42:49 +08:00

108 lines
4.4 KiB
TOML

[package]
name = "op-host-web"
version.workspace = true
edition.workspace = true
rust-version.workspace = true
license.workspace = true
description = "OpenPencil web host — wasm32-unknown-unknown web bundle entry (Step 1b §1.2, C-hard pipeline)"
[lib]
name = "op_host_web"
path = "src/lib.rs"
crate-type = ["cdylib", "rlib"]
[dependencies]
# Phase 7.3 reorg: openpencil-shell-core dissolved — widget facade /
# theme / layout scene / scene vars / render-backend / gesture types
# all resolve through the op-editor-ui crate.
op-editor-ui = { path = "../op-editor-ui" }
# Reorg: the web host owns an `op_editor_core::EditorState` as its
# single source of truth; `op-pen-loader` bridges it into the
# read-only paint `Document` the shared widgets consume.
#
# Both are `optional` + behind the `skia` feature for the SAME reason
# `skia-safe` is: the host (`widget_host`) is `#[cfg(feature="skia")]`-
# gated, so the skia-free CI stub baseline
# (`--no-default-features --features web`) never needs them. This
# matters because `op-pen-loader` pulls `jian-skia` transitively
# (`pen_document_to_document` runs `SkiaMeasure` for text layout);
# keeping it optional preserves the wasm32-clean stub baseline.
op-editor-core = { path = "../op-editor-core", optional = true }
op-pen-loader = { path = "../op-pen-loader", optional = true }
# Step 1b §3.6: handwritten DOM mirror consumes accesskit::TreeUpdate (0.24).
accesskit = "0.24"
console_error_panic_hook = "0.1"
js-sys = "0.3"
# Phase C1 DOM event mappers build `jian_core::gesture::WheelEvent` etc
# whose position/delta fields use `jian_core::geometry::Point`. The
# `geometry` module is not re-exported by shell-core (which only
# re-exports `gesture::*`), so pull jian-core directly. Same path-with-
# version pattern as shell-core's own jian-core dep.
jian-core = { path = "../../vendor/jian/crates/jian-core", version = "0.0.1" }
# Pin to 0.2.117 — last wasm-bindgen-cli release compatible with the
# workspace's Rust 1.85 toolchain. Newer 0.2.120+ requires rustc 1.86.
# When the workspace bumps Rust, raise this bound.
wasm-bindgen = "=0.2.117"
# Step 1b §2.2 (post C-hard.2 lock-in 2026-05-09): wasm32-unknown-unknown
# via the vendor/skia-safe-op fork + crates/wasm-libc-shim. Optional dep
# behind the `skia` feature so `cargo check --target wasm32-unknown-
# unknown --no-default-features --features web` (the kickoff §1.2
# wasm32-clean CI baseline) still compile-checks without pulling skia
# — that path uses the stub mount entry. Phase A and onward opt in via
# `--features skia` to get the real WebBackend + raster paint loop.
[dependencies.skia-safe]
version = "0.97.0"
default-features = false
# Step 3 codex stop-hook fix: text rendering uses
# `Canvas::draw_str` + raw Font + Typeface (NOT skia paragraph
# builder), so the `textlayout` feature is unnecessary on web.
# Dropping it removes ICU + Harfbuzz from the bundle (~400 KB
# gzip) and avoids the env.* import explosion that came with
# textlayout's filesystem font lookups.
features = ["binary-cache"]
optional = true
# C-hard.2 libc/libcxx/libm shim — only linked when targeting
# wasm32-unknown-unknown with the `skia` feature on. The crate's lib.rs
# guards every symbol with `cfg(all(target_arch = "wasm32", target_os
# = "unknown"))` so native builds (where this would conflict with the
# host C runtime) link an empty crate.
[target.'cfg(all(target_arch = "wasm32", target_os = "unknown"))'.dependencies]
wasm-libc-shim = { path = "../wasm-libc-shim", optional = true }
[dependencies.web-sys]
version = "0.3"
features = [
"CanvasRenderingContext2d",
"CompositionEvent",
"console",
"Document",
"Element",
"Event",
"EventTarget",
"FocusEvent",
"HtmlCanvasElement",
"HtmlElement",
"ImageData",
"KeyboardEvent",
"MouseEvent",
"Performance",
"PointerEvent",
"WheelEvent",
"Window",
]
[features]
# `web` keeps the kickoff §1.2 wasm32-unknown-unknown CI baseline green —
# the crate compile-checks as a wasm32-clean stub without pulling skia.
default = ["web"]
web = []
# `skia` opts into the Phase A WebBackend (skia-safe + raster surface).
# When the cargo target is wasm32-unknown-unknown the build also links
# the libc/libcxx/libm shim crate so the bundle is runtime-loadable.
# Native targets resolve the target-conditional shim dep to nothing.
skia = ["dep:skia-safe", "dep:op-editor-core", "dep:op-pen-loader", "wasm-libc-shim"]
# Internal feature toggled on by `skia` to flip the cfg-target dep.
wasm-libc-shim = ["dep:wasm-libc-shim"]