diff --git a/.vscode/settings.json b/.vscode/settings.json new file mode 100644 index 0000000..b79eed9 --- /dev/null +++ b/.vscode/settings.json @@ -0,0 +1,14 @@ +{ + "rust-analyzer.rustfmt.overrideCommand": [ + "leptosfmt", + "--stdin", + "--rustfmt" + ], + "editor.formatOnSave": true, + "[rust]": { + "editor.defaultFormatter": "rust-lang.rust-analyzer", + }, + "files.associations": { + "*.rs": "rust" + }, +} \ No newline at end of file diff --git a/Cargo.toml b/Cargo.nightly.toml similarity index 100% rename from Cargo.toml rename to Cargo.nightly.toml diff --git a/Cargo.stable.toml b/Cargo.stable.toml new file mode 100644 index 0000000..1047f33 --- /dev/null +++ b/Cargo.stable.toml @@ -0,0 +1,32 @@ +[package] +name = "{{project-name}}" +version = "0.1.0" +edition = "2021" +authors = ["{{authors}}"] + +# See more keys and their definitions at https://doc.rust-lang.org/cargo/reference/manifest.html + +[dependencies] +leptos = { version = "0.6", features = ["csr"] } +leptos_meta = { version = "0.6", features = ["csr"] } +leptos_router = { version = "0.6", features = ["csr"] } +console_log = "1" +log = "0.4" +console_error_panic_hook = "0.1" + +# utils +# strum = { version = "0.25", features = ["derive", "strum_macros"] } +# strum_macros = "0.25" + + +[dev-dependencies] +wasm-bindgen = "0.2" +wasm-bindgen-test = "0.3" +web-sys = { version = "0.3", features = ["Document", "Window"] } + + +[profile.release] +opt-level = 'z' +lto = true +codegen-units = 1 +panic = "abort" diff --git a/README.md b/README.md index 3627801..ddd8909 100644 --- a/README.md +++ b/README.md @@ -9,10 +9,10 @@ This is a template for use with the [Leptos][Leptos] web framework using the [Tr ## Creating your repo from the template -This template requires you to have `cargo-generate` installed. You can install it with +This template requires you to have `cargo-generate` and `trunk` installed. [`leptosfmt`](https://github.com/bram209/leptosfmt) is optional but highly recommended. You can install them with ```sh -cargo install cargo-generate +cargo install cargo-generate trunk leptosfmt ``` diff --git a/Trunk.toml b/Trunk.toml new file mode 100644 index 0000000..a669c48 --- /dev/null +++ b/Trunk.toml @@ -0,0 +1,60 @@ +[build] +# The index HTML file to drive the bundling process. +target = "index.html" +# Build in release mode. +release = false +# Use a custom cargo profile. Overrides the default chosen by cargo. Ignored if the 'index.html' has one configured. +# cargo_profile = "" +# The output dir for all final assets. +dist = "dist" +# The public URL from which assets are to be served. +public_url = "/" +# Whether to include hash values in the output file names. +filehash = true +# Whether to inject scripts (and module preloads) into the finalized output. +inject_scripts = true +# Run without network access +# offline = false +# Require Cargo.lock and cache are up to date +# frozen = false +# Require Cargo.lock is up to date +# locked = false +# Control minification +# minify = "never" # can be one of: never, on_release, always +# Allow disabling sub-resource integrity (SRI) +# no_sri = false +# An optional cargo profile to use +# cargo_profile = "release-trunk" + +[watch] +# Paths to watch. The `build.target`'s parent folder is watched by default. +watch = [] +# Paths to ignore. +ignore = [] + +[serve] +# The address to serve on. +addresses = ["127.0.0.1"] +# The port to serve on. +port = 3000 +# Aliases to serve, typically found in an /etc/hosts file. +# aliases = ["http://localhost.mywebsite.com"] +# Disable the reverse DNS lookup during startup +# disable_address_lookup = false +# Open a browser tab once the initial build is complete. +open = false +# Whether to disable fallback to index.html for missing files. +# no_spa = false +# Disable auto-reload of the web app. +# no_autoreload = false +# Disable error reporting +# no_error_reporting = false +# Additional headers set for responses. +# headers = { "test-header" = "header value", "test-header2" = "header value 2" } +# Protocol used for autoreload WebSockets connection. +# ws_protocol = "ws" +# The certificate/private key pair to use for TLS, which is enabled if both are set. +# tls_key_path = "self_signed_certs/key.pem" +# tls_cert_path = "self_signed_certs/cert.pem" +# Additional headers to send. NOTE: header names must be valid HTTP headers. +# headers = { "X-Foo" = "bar" } diff --git a/cargo-generate.toml b/cargo-generate.toml new file mode 100644 index 0000000..bbeb7dc --- /dev/null +++ b/cargo-generate.toml @@ -0,0 +1,15 @@ +[template] +ignore = ["Cargo.lock", "switch_nightly_stable.rhai"] + +[placeholders] +default_channel = { prompt = "Use stable or nightly channel?", choices = [ + "stable", + "nightly", +], default = "stable", type = "string" } +vscode_settings = { prompt = "Generate default VS Code settings?", default = false, type = "bool" } + +[conditional.'vscode_settings == false'] +ignore = [".vscode"] + +[hooks] +pre = ["switch_nightly_stable.rhai"] diff --git a/index.html b/index.html index 8e7ef39..baec586 100644 --- a/index.html +++ b/index.html @@ -1,15 +1,18 @@ - - - - - - - - - - - - - + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/public/styles.css b/public/styles.scss similarity index 100% rename from public/styles.css rename to public/styles.scss diff --git a/rust-toolchain.toml b/rust-toolchain.toml index 5d56faf..7ec4bcc 100644 --- a/rust-toolchain.toml +++ b/rust-toolchain.toml @@ -1,2 +1,2 @@ [toolchain] -channel = "nightly" +channel = "{{default_channel}}" diff --git a/src/components/counter_btn.rs b/src/components/counter_btn.nightly.rs similarity index 68% rename from src/components/counter_btn.rs rename to src/components/counter_btn.nightly.rs index bfffc49..86cacd6 100644 --- a/src/components/counter_btn.rs +++ b/src/components/counter_btn.nightly.rs @@ -5,11 +5,10 @@ use leptos::*; pub fn Button(#[prop(default = 1)] increment: i32) -> impl IntoView { let (count, set_count) = create_signal(0); view! { - } diff --git a/src/components/counter_btn.stable.rs b/src/components/counter_btn.stable.rs new file mode 100644 index 0000000..d1dc157 --- /dev/null +++ b/src/components/counter_btn.stable.rs @@ -0,0 +1,15 @@ +use leptos::*; + +/// A parameterized incrementing button +#[component] +pub fn Button(#[prop(default = 1)] increment: i32) -> impl IntoView { + let (count, set_count) = create_signal(0); + view! { + + } +} diff --git a/switch_nightly_stable.rhai b/switch_nightly_stable.rhai new file mode 100644 index 0000000..e98e2d7 --- /dev/null +++ b/switch_nightly_stable.rhai @@ -0,0 +1,16 @@ +let default_channel = variable::get("default_channel").to_upper(); + +switch default_channel { + "STABLE" => { + file::delete("Cargo.nightly.toml"); + file::rename("Cargo.stable.toml", "Cargo.toml"); + file::delete("src/components/counter_btn.nightly.rs"); + file::rename("src/components/counter_btn.stable.rs", "src/components/counter_btn.rs"); + } + "NIGHTLY" => { + file::delete("Cargo.stable.toml"); + file::rename("Cargo.nightly.toml", "Cargo.toml"); + file::delete("src/components/counter_btn.stable.rs"); + file::rename("src/components/counter_btn.nightly.rs", "src/components/counter_btn.rs"); + } +} \ No newline at end of file