diff --git a/.github/workflows/cli_release.yml b/.github/workflows/cli_release.yml
new file mode 100644
index 000000000..c6c2b81e8
--- /dev/null
+++ b/.github/workflows/cli_release.yml
@@ -0,0 +1,54 @@
+name: Build CLI for Release
+
+# Will run automatically on every new release
+on:
+ release:
+ types: [published]
+
+jobs:
+ build-and-upload:
+ permissions:
+ contents: write
+ runs-on: ${{ matrix.platform.os }}
+ strategy:
+ matrix:
+ platform:
+ - {
+ target: x86_64-pc-windows-msvc,
+ os: windows-latest,
+ toolchain: "1.70.0",
+ }
+ - {
+ target: x86_64-apple-darwin,
+ os: macos-latest,
+ toolchain: "1.70.0",
+ }
+ - {
+ target: x86_64-unknown-linux-gnu,
+ os: ubuntu-latest,
+ toolchain: "1.70.0",
+ }
+ steps:
+ - uses: actions/checkout@v3
+ - name: Install stable
+ uses: dtolnay/rust-toolchain@master
+ with:
+ toolchain: ${{ matrix.platform.toolchain }}
+ targets: ${{ matrix.platform.target }}
+
+ # Setup the Github Actions Cache for the CLI package
+ - name: Setup cache
+ uses: Swatinem/rust-cache@v2
+ with:
+ workspaces: packages/cli -> ../../target
+
+ # This neat action can build and upload the binary in one go!
+ - name: Build and upload binary
+ uses: taiki-e/upload-rust-binary-action@v1
+ with:
+ token: ${{ secrets.GITHUB_TOKEN }}
+ target: ${{ matrix.platform.target }}
+ bin: dx
+ archive: dx-${{ matrix.platform.target }}
+ checksum: sha256
+ manifest_path: packages/cli/Cargo.toml
diff --git a/README.md b/README.md
index 52e4408d8..5b6a99ad3 100644
--- a/README.md
+++ b/README.md
@@ -40,7 +40,7 @@
| Examples |
- Guide
+ Guide | 中文 |
diff --git a/docs/guide/examples/readme_expanded.rs b/docs/guide/examples/readme_expanded.rs
index 896d365e5..1ec30e57b 100644
--- a/docs/guide/examples/readme_expanded.rs
+++ b/docs/guide/examples/readme_expanded.rs
@@ -89,7 +89,8 @@ fn app(cx: Scope) -> Element {
key: None,
// The static template this node will use. The template is stored in a Cell so it can be replaced with a new template when hot rsx reloading is enabled
template: std::cell::Cell::new(TEMPLATE),
- root_ids: Default::default(),
+ root_ids: dioxus::core::exports::bumpalo::collections::Vec::new_in(__cx.bump())
+ .into(),
dynamic_nodes: __cx.bump().alloc([
// The dynamic count text node (dynamic node id 0)
__cx.text_node(format_args!("High-Five counter: {0}", count)),
diff --git a/docs/guide/src/en/interactivity/event_handlers.md b/docs/guide/src/en/interactivity/event_handlers.md
index 4c77cef1e..4e332adf9 100644
--- a/docs/guide/src/en/interactivity/event_handlers.md
+++ b/docs/guide/src/en/interactivity/event_handlers.md
@@ -51,6 +51,8 @@ Any event handlers will still be called.
> Normally, in React or JavaScript, you'd call "preventDefault" on the event in the callback. Dioxus does _not_ currently support this behavior. Note: this means you cannot conditionally prevent default behavior based on the data in the event.
+> Note about forms: if an event handler is attached to the `onsubmit` event of a form, default behavior is to **not submit it**, meaning having `prevent_default: "onsubmit"` will submit it in this case.
+
## Handler Props
Sometimes, you might want to make a component that accepts an event handler. A simple example would be a `FancyButton` component, which accepts an `on_click` handler:
diff --git a/docs/guide/src/pt-br/interactivity/event_handlers.md b/docs/guide/src/pt-br/interactivity/event_handlers.md
index 12aad321e..8b3d757ef 100644
--- a/docs/guide/src/pt-br/interactivity/event_handlers.md
+++ b/docs/guide/src/pt-br/interactivity/event_handlers.md
@@ -64,3 +64,5 @@ Então, você pode usá-lo como qualquer outro manipulador:
> Nota: assim como qualquer outro atributo, você pode nomear os manipuladores como quiser! Embora eles devam começar com `on`, para que o prop seja automaticamente transformado em um `EventHandler` no local da chamada.
>
> Você também pode colocar dados personalizados no evento, em vez de, por exemplo, `MouseData`
+
+> Nota sobre formulários: se um manipulador de evento está anexado ao evento `onsubmit` em um formulário, o comportamento padrão é de **não submetê-lo**. Portanto, especificar `prevent_default: "onsubmit"` irá submetê-lo.
\ No newline at end of file
diff --git a/packages/cli/Cargo.toml b/packages/cli/Cargo.toml
index 892399a9d..a37798eee 100644
--- a/packages/cli/Cargo.toml
+++ b/packages/cli/Cargo.toml
@@ -100,3 +100,9 @@ name = "dx"
[dev-dependencies]
tempfile = "3.3"
+
+[package.metadata.binstall]
+pkg-url = "{ repo }/releases/download/v{ version }/dx-{ target }{ archive-suffix }"
+
+[package.metadata.binstall.overrides.x86_64-pc-windows-msvc]
+pkg-fmt = "zip"
diff --git a/packages/cli/src/builder.rs b/packages/cli/src/builder.rs
index 3fa8e7818..332490fda 100644
--- a/packages/cli/src/builder.rs
+++ b/packages/cli/src/builder.rs
@@ -93,18 +93,21 @@ pub fn build(config: &CrateConfig, quiet: bool) -> Result {
// [2] Establish the output directory structure
let bindgen_outdir = out_dir.join("assets").join("dioxus");
- let release_type = match config.release {
- true => "release",
- false => "debug",
+ let build_profile = if config.custom_profile.is_some() {
+ config.custom_profile.as_ref().unwrap()
+ } else if config.release {
+ "release"
+ } else {
+ "debug"
};
let input_path = match executable {
ExecutableType::Binary(name) | ExecutableType::Lib(name) => target_dir
- .join(format!("wasm32-unknown-unknown/{}", release_type))
+ .join(format!("wasm32-unknown-unknown/{}", build_profile))
.join(format!("{}.wasm", name)),
ExecutableType::Example(name) => target_dir
- .join(format!("wasm32-unknown-unknown/{}/examples", release_type))
+ .join(format!("wasm32-unknown-unknown/{}/examples", build_profile))
.join(format!("{}.wasm", name)),
};
diff --git a/packages/cli/src/server/web/mod.rs b/packages/cli/src/server/web/mod.rs
index e08d2297a..78eddb574 100644
--- a/packages/cli/src/server/web/mod.rs
+++ b/packages/cli/src/server/web/mod.rs
@@ -5,7 +5,7 @@ use crate::{
output::{print_console_info, PrettierOptions, WebServerInfo},
setup_file_watcher, setup_file_watcher_hot_reload,
},
- BuildResult, CrateConfig, Result,
+ BuildResult, CrateConfig, Result, WebHttpsConfig,
};
use axum::{
body::{Full, HttpBody},
@@ -218,67 +218,12 @@ async fn get_rustls(config: &CrateConfig) -> Result