Commit Graph
434 Commits
Author SHA1 Message Date
Jonathan Kelley 0aa7351473 datatransfer object, drag_and_drop example, fix drag-and-drop (#4789)
* wip: implement datatransfer

* Editable kanban contents

* desktop sorta works without crashing

* lint
2025-10-15 01:06:13 -07:00
Jonathan Kelley 7102bc3b6a more fullstack cleanups: loaders serialize, ServeConfig only (#4785)
* some opinionated cleanups in dioxus-server

* add serialize to loader

* add `result` to Resource

* clippy

* fix

* writable memos, resources, `onmount`, `.pending`, and `.value()` on actions

* fix compile issues

* fix typo
2025-10-14 17:34:52 -07:00
Jonathan Kelley 92792aded9 More fullstack fixes (#4737)
* allow `--server` only builds!

* rollback example

* capture `/:route` routes

* fix: properly implement file uploads in forms

* implement desktop form uploads

* Performant serialization of form bytes

* finish up file stuff

* cleanups

* add request headers to streaming context

* remove some unwraps
2025-10-07 23:07:43 -07:00
Timur GainullinandJonathan Kelley f48aec7eff fix: use floats for pointer events (#4708)
* fix: use f64 for PointerInteraction

* make clippy happy on beta

---------

Co-authored-by: Jonathan Kelley <jkelleyrtp@gmail.com>
2025-10-03 19:39:00 -07:00
Jonathan Kelley f2b1c6d97f codify "platform" into resolution logic, server-fn/fullstack overhaul (#4596)
overhaul dioxus fullstack using a new implementation of server_fn

This PR is a complete rewrite of dioxus fullstack designed to improve compatibility with axum and to fix a number of compilation errors based on feature flag unification plumbing through macros.
2025-10-03 18:26:19 -07:00
Damien CORLERandJonathan Kelley 8d617080b1 Add cancel event (#4476)
* feat: add cancel event

* feat: provide cancel event

* feat: insert cancel event in web

* fix: typo

* feat: propagate implementation of cancel event

* fix merge conflicts / tests

---------

Co-authored-by: Jonathan Kelley <jkelleyrtp@gmail.com>
2025-08-20 11:09:24 -07:00
Evan Almloff d8d11db403 Boxed and mapped signals preparing for stores (#4413)
This PR contains just the breaking changes required for the upcoming store implementation. It adds two new primitives:

Mutable mapped signals (without a different subscriber list). This lets you scope a writable value and pass it to a child component. It requires two closures to map the immutable and mutable references to the inner signal. With stores, these closures will be derived
Boxed readable and writable values (ReadSignal, and WriteSignal). Any readable or writable types can be converted to a read signal or write signal with the boxed method or built in types are automatically converted into the boxed variants when passing into props


* map signals mutably

* boxed signals

* remove mutable borrow type from boxed writable

* improve map mut example

* restore boxed_mut helper

* make boxed readable/writable types copy

* Move away from the ReadOnlySignal alias in examples

* automatically convert Write

* Fix some tests

* ReadSignal and WriteSignal

* move read only signal alias

* make maps copy

* store prototype

* implement derive macro

* Handle generics in the derive macro

* Make Selector boxable

* derive boxed conversion

* Get rid of store type

* Remove hardcoded type from derive macro

* selector -> store

* Refactor store implementation

* more vec methods

* todo mvc store example

* Implement Storable for HashMap

* fix write

* restore sorting logic in todomvc

* derive readable and writable

* improve todomvc store example

* Result store

* Option store

* collect dead subscribers

* fix clippy and formatting

* recognize some common foreign types automatically

* fix foreign stores in props

* slice and array selectors

* clean up store example

* remove stores

* writable is child owned

* fix typo

* fix clippy

* fix doc tests
2025-07-31 13:19:55 -07:00
Jonathan Kelley 4f1d039bad clean up prelude (#4416)
* clear away prelude on dioxus

* clippy

* wip - drop prelude from dioxus-html

* docs clippy

* wip

* more fixe

* delete all preludes

* doc...

* better export

* merge some imports

* fewer global imports

* global incremental renderer

* fix cargo doc
2025-07-16 16:04:13 -07:00
c5b33924ae updated the dependencies - maintaining compatibility and tests (#4363)
* Update dependencies in Cargo.lock

* added in the missing bevy example which was included in recent merge

* undo unneccessary library installation in gh actions

* cleaned up further

* Update dependencies in Cargo.toml and Cargo.lock askana_escape to 0.13

* updated code to make tests work

* updated the wgpu texture example

* replaced all direct reference with use

* fixed wgpu and jsframework errors in benches and examples

* Fix: Import black_box from std::hint

* grand finale upgrade

* updated cargo.lock

* Bump hyper-util to 0.1.15 and plist to 1.7.4

* remove some unused swc dependencies and add a command to update them in the future

---------

Co-authored-by: Evan Almloff <evanalmloff@gmail.com>
Co-authored-by: Jonathan Kelley <jkelleyrtp@gmail.com>
2025-07-14 13:03:40 -07:00
navyansh007andJonathan Kelley 097bc1d1c8 Remove invalid global data attribute (#4270)
* Remove invalid global data attribute

Removes the non-existent global 'data' attribute from HTML global
attributes that was referencing broken MDN documentation. HTML
specification only supports data-* custom attributes and the
<data> element, not a global 'data' attribute.

Fixes #4241

* fix other attributes using datas

---------

Co-authored-by: Jonathan Kelley <jkelleyrtp@gmail.com>
2025-06-20 11:24:41 -07:00
Evan AlmloffandJonathan Kelley af6fc3a542 Switch to owned listener type (#4289)
* Switch to owned listener type

* remove html event workaround

* fix event conversion

* keep track of the origin scope

* fix clippy

* fix docs

* Use "ListenerCallback" instead of "ListenerCb"

* Add a small example

---------

Co-authored-by: Jonathan Kelley <jkelleyrtp@gmail.com>
2025-06-18 16:06:52 -07:00
Evan Almloff 77d10a40e3 Fix the toggle event (#4206) 2025-05-27 10:27:05 +02:00
Evan Almloff ee3b45af49 Restore docs CI checks and fix all doc lints (#4204) 2025-05-26 19:50:51 +01:00
Gerald E ButlerandJonathan Kelley f9d89b0ac1 adhoc: Fix Clippy lints in const-serialize etc. (#3880)
* adhox: Fix Clippy lints in const-serialize etc.

Fix the clippy lints that were preventing building:

   * const-serialize/src/lib.rs
   * core/src/nodes.rs
   * fullstack/src/serve_config.rs

* adhoc: Change the way to satisfy the lint for 1.85

The lint for pointer comparison is only in 1.85. The solution
uses a mechanism that was only stabilized with 1.85. Instead
of using that solution, will just allow the lint on this
function for now. Once the MSRV of Dioxus is updated to 1.85
or above, this can be changed to use the recommeneded solution.

* adhoc: Fix the 'cargo make test' tests

There were a number of tests failing to compile and/or run.
Fixed those that could be meaningfully fixed. Those that were
incomplete examples that could not be fixed are marked as
'ignore'.

* adhoc: GitIgnore test results in playwright tests

* fix wry rollback

---------

Co-authored-by: Jonathan Kelley <jkelleyrtp@gmail.com>
2025-05-07 13:58:37 -07:00
Otger RoglaandJonathan Kelley 28d38307a2 Support scrollIntoView alignment options (#3952)
Co-authored-by: Jonathan Kelley <jkelleyrtp@gmail.com>
2025-05-07 13:09:17 -07:00
Youn MéloisandJonathan Kelley 85b373deff feat(html): add scroll method to MountedData (#3722)
* feat(html): add `scroll` method to MountedData

* feat(desktop): implement `scroll` method for DesktopElement

* feat(liveview): implement `scroll` method for LiveviewElement

* feat(web): implement `scroll` method for web_sys::Element

* docs(examples): add new example for `scroll` method

* fix(web): remove unncecessary f64 cast (clippy)

* fix(interpreter): return missing boolean from js

* docs(example): unwrap result instead of discarding its error

* docs(examples): create scroll restoring example on routing

* fix clippy

---------

Co-authored-by: Jonathan Kelley <jkelleyrtp@gmail.com>
2025-05-07 12:45:47 -07:00
Mahmoud cefb9ec640 fix: add missing img attrs (#4073) 2025-05-07 11:58:16 -07:00
Henry c9ca9f32ad Add Missing Fields From Scroll Event (#4022)
* Add onscroll field data

* Add bun 1.2.10 generated file changes

* Improve error messaging when bun is not installed
2025-05-07 11:57:32 -07:00
Clouds 6733e43cc2 fix FormData::valid (#4027) 2025-04-22 18:01:23 -07:00
Steve SchoettlerandJonathan Kelley a1107de0c0 Update axum and many dependencies (#3825)
* Update many dependencies; includes prs 3820 (axum 0.8.1), 3810 (wry 0.50.1), 3801 (tauri)

---------

Co-authored-by: Jonathan Kelley <jkelleyrtp@gmail.com>
2025-04-15 14:19:47 -07:00
Jonathan Kelleyotgerrogla 2356820+otgerrogla@users.noreply.github.comNico BurnskokoDavid HusičkaluoxiaozeroEvan Almloff
12c6938346 feat: inline dioxus-native from blitz (#3675)
* Rename dioxus-blitz to dioxus-native

* Add CSS import support (#139)

* Remove data dependencie from NetProvider + global provider.

* Feat CSS import

* Move net handler code out of util

* Fixing test...

* Use the better suited OnceLock instead of LazyLock

* Removing static and move resource callback back out of the document.

Signed-off-by: koko <kokos.kekse@gmail.com>

* Make things work

Signed-off-by: koko <kokos.kekse@gmail.com>

* Fix the servo example

Signed-off-by: koko <kokos.kekse@gmail.com>

* Replace servo image with a more compact version

Signed-off-by: koko <kokos.kekse@gmail.com>

* revert: 8467b271

Signed-off-by: koko <kokos.kekse@gmail.com>

---------

Signed-off-by: koko <kokos.kekse@gmail.com>

* Create readme app

* WPT: reuse FontContext to avoid reloading system fonts

Takes runtime for css-flexbox from 12s -> 8s

* Move Devtools to traits crate

* Suppress unused variable warning

* Implement net for DioxusDocument

Signed-off-by: Nico Burns <nico@nicoburns.com>

* Eliminate BlitzWindowEvent type

Signed-off-by: Nico Burns <nico@nicoburns.com>

* Make net crate use document id instead of window id

Signed-off-by: Nico Burns <nico@nicoburns.com>

* Rename and document net traits

Signed-off-by: Nico Burns <nico@nicoburns.com>

* Split `dioxus-native` crate into `dioxus-native` and `blitz-shell` crates (#163)

* Rename waker module to event

Signed-off-by: Nico Burns <nico@nicoburns.com>

* Create seperate DioxusNativeApplication

Signed-off-by: Nico Burns <nico@nicoburns.com>

* Rename dioxus-native crate to blitz-shell

Signed-off-by: Nico Burns <nico@nicoburns.com>

* Split blitz-shell out of dioxus-native crate

Signed-off-by: Nico Burns <nico@nicoburns.com>

* Remove need for dioxus-native to depend directly on stylo

---------

Signed-off-by: Nico Burns <nico@nicoburns.com>

* Unnest dioxus-native modules

Signed-off-by: Nico Burns <nico@nicoburns.com>

* Split MutationWriter into it's own module

Signed-off-by: Nico Burns <nico@nicoburns.com>

* Split HtmlDocument into it's own crate

Signed-off-by: Nico Burns <nico@nicoburns.com>

* Rename dom field of Window to doc

Signed-off-by: Nico Burns <nico@nicoburns.com>

* Support prefers-color-scheme (dark mode)

* Remove use of the `todo` macro in event handling and add a comment about it being a todo (#168)

Using the `todo` macro causes a panic when this event is encountered. Noop is preferable in this case as it does not crash the application. This is especially annoying on platforms where `Ime::Enabled` event is sent upon application start even when the user is using a keyboard layout that does not need an IME support. There was added a "TODO" comment that informs about this feature being missing. Most IDEs and code editors have support/plugins/extensions to work with this type of comments and this type of comment is already used widely across the codebase. As such, the information about this feature not being implemented is not lost.

* Upgrade to dioxus 0.6-rc.0

Signed-off-by: Nico Burns <nico@nicoburns.com>

* Fix text input in dioxus-native

Signed-off-by: Nico Burns <nico@nicoburns.com>

* Make dioxus-native depend dioxus-core and dioxus-html rather than dioxus

* Remove "full" feature from tokio

* Move Viewport to blitz_traits

Signed-off-by: Nico Burns <nico@nicoburns.com>

* Make tokio optional in dioxus-native and blitz-shell

Signed-off-by: Nico Burns <nico@nicoburns.com>

* Make SVG support optional

* Abstract renderer behind a trait

blitz-shell no longer depends on blitz-renderer-vello

Signed-off-by: Nico Burns <nico@nicoburns.com>

* Split HTML launch functions out in `blitz` crate

* feat: Add mousedown and mouseup event (#172)

* feat: Add mousedown and mouseup event

* feat: Triggering :active pseudo-class

* fix: Triggering :active pseudo-class

* Rename RendererEvent to DomEvent

Signed-off-by: Nico Burns <nico@nicoburns.com>

* Rename Document to BaseDocument. DocumentLike to Document

Signed-off-by: Nico Burns <nico@nicoburns.com>

* Move event and document abstractions to blitz-traits

Signed-off-by: Nico Burns <nico@nicoburns.com>

* Rename BlitzEvent to BlitzShellEvent

Signed-off-by: Nico Burns <nico@nicoburns.com>

* Restyle when style attribute is mutated

* feat: Support text box mouse selection (#182)

* Rename raw_dom_data to data

Signed-off-by: Nico Burns <nico@nicoburns.com>

* Rename dioxus-native to native

* Add to workspace

* simplify launch module, integrate native

* Fix it up again

* Update cargo lock

* FIx: propagate accessibility feature fla

* implement asset resolver

* add native to feature match in cli

* Implement document and history for native

* use no-op eval

* clippy

* typos

* typo

* Convert logs to trace

* Bump blitz to alpha releases

* unset image data

* fix style integration with blitz

* fix a few lints

* wire up ids

* implement a few more events

* add more helpful todo note

* bump ci to allow edition 2024, use newer nightly

* make clippy happy

* also update matrix tests to rust 2024

* Add autofocus

Co-authored-by: otgerrogla 2356820+otgerrogla@users.noreply.github.com

* Wait for the suspense boundary above the router to resolve before sending the first streaming chunk (#3891)

* Change the suspense streaming context after suspense is resolved in the router

* Wait for the suspense context before streaming the first chunk in ssr

* forward more response parts

* warn

* extract the hydration format into a crate

* Fix hydration when no data is sent

* forward web and server features

* Fix suspense that starts on the client

* fix use_server_future on the client

* Add documentation for fullstack hooks and protocol

* downgrade rust edition

* fix clippy

* fix tests

* fix clippy

* Fix pure web compile

* undo changes to the fullstack router example

* fix formatting

* hoist a bunch of deps

---------

Signed-off-by: koko <kokos.kekse@gmail.com>
Signed-off-by: Nico Burns <nico@nicoburns.com>
Co-authored-by: Nico Burns <nico@nicoburns.com>
Co-authored-by: koko <72217393+kokoISnoTarget@users.noreply.github.com>
Co-authored-by: David Husička <25853767+DavidHusicka@users.noreply.github.com>
Co-authored-by: luoxiaozero <48741584+luoxiaozero@users.noreply.github.com>
Co-authored-by: Evan Almloff <evanalmloff@gmail.com>
2025-04-08 17:30:49 -07:00
Casey Kneale 9e09bcf3f7 trivial fix for documentation example for onclick handler of buttons (#3882) 2025-03-16 16:25:17 -07:00
Youn Mélois ab91965cc0 fix onload and onerror parsing error (#3707)
regression error induced by 299b123 where serde default got removed from `load_error` attribute of `ImageData`.

```diff
pub struct ImageData {
-     #[cfg_attr(feature = "serialize", derive(serde::Serialize, serde::Deserialize))]
-     pub load_error: bool,
+     inner: Box<dyn HasImageData>,
}

// ...

+ struct SerializedImageData {
+     load_error: bool,
+ }
```
2025-02-07 16:08:00 -08:00
Jonas Pleyer 4e955d0e3b remove html! macro mentioning (#3654) 2025-01-28 10:40:16 -08:00
Jonathan Kelley 343c48f5ad fix: viewBox translation by not accidentally stringifying literals (#3527)
* fix: don't double stringify lits

* also split off namespaces in translation
2025-01-08 16:12:48 -08:00
Evan Almloff 19ca7075d6 Fix the event handler memory leak (#3508)
* Fix the event handler memory leak

* Add a regression test for memory leaks

* add a component to the memory leak test
2025-01-07 11:44:54 -08:00
Evan Almloff aab1258f0e remove the file engine feature in the html crate (#3392) 2024-12-20 12:00:03 -08:00
Jonathan Kelley 66a50240bc Update all docs links to 0.6, release 0.6 (#3225)
* update doc links to 0.6
* add new splash pages for crates
* update keyword features
* remove some unnecessary links
2024-12-06 19:15:15 -08:00
79a2f023e7 Add the onvisible event handler to Element (#2911)
* Add the `onvisible` event using the IntersectionObserver

* Add a visible example

This example is based on https://codepen.io/ryanfinni/pen/VwZeGxN

* Remove web-sys CustomEvent feature for html package

* update js bindings and hash

* Use dioxus doc instead of lorem ipsum

* Fix clippy warning

* Add get_target method to the event data

* Make `get_time` return an Instant instead of a f64

* fix merge conflicts, compilinga

* remove target

* small nits

* serialzie as time_ms

* fix timing, works on desktop

* remove latent nits, fix hash

* box size clippy

* fix browserlist cargo.lock

---------

Co-authored-by: Evan Almloff <evanalmloff@gmail.com>
Co-authored-by: Jonathan Kelley <jkelleyrtp@gmail.com>
2024-12-02 13:51:27 -08:00
Evan AlmloffandJonathan Kelley 519ec9d294 Move the document trait into a separate crate (#3035)
* add a default head method through eval
* remove the old document trait
* implement document for each platform
* pull out document into a dedicated crate to cut down on shared dependencies
---------

Co-authored-by: Jonathan Kelley <jkelleyrtp@gmail.com>
2024-10-14 10:33:37 -07:00
Evan AlmloffandJonathan Kelley baf5a95cae Fix cloned rsx double drop (#2839)
* Implement Rc generational pointers

* Clean up error handling a bit

* start adding tests

* Simplify a few types

* Separate Rc and normal generational boxes

* Add tests for rc drop and read

* Move over the pointer instead of the data in ReadOnlySignal props

* Fix panic on ref drop and release mode builds

* final rc signal cleanup

* use rc generational boxes for event handlers as well

* add a regression test for read only signal cloning

* merge main

---------

Co-authored-by: Jonathan Kelley <jkelleyrtp@gmail.com>
2024-10-14 09:23:09 -07:00
Evan Almloff cda8bb24f1 Remove native and web features from dioxus-html (#3006)
* remove native and web features from dioxus-html

* Fix downcasting web events

* Fix desktop with tokio disabled
2024-10-10 13:35:59 -07:00
Evan Almloff 1053943073 Fix special characters in head elements (#3031) 2024-10-09 13:48:58 -05:00
Evan Almloff 95976d9a17 Extend head components with global attributes (#2888)
* Fix hot reloading components with keys

* include component formatted segment keys, but not dynamic component value

* extend each head component with the corresponding element

* Allow spreading custom attributes into components

* Fix component_literal_dyn_idx index

* add a new test for hot reloading components with keys

* FIx script without body warning and rendering styles with a href set

* fix clippy
2024-10-01 10:24:22 -05:00
Jonathan Kelley fd9229a768 Change file-engine to be file_engine for consistency 2024-09-17 17:49:06 -07:00
Jonathan Kelley 463e67cd12 Improve compile times by splitting out rsx-hotreload from rsx (#2971)
* fix imports, migrate over rsx-hotreload
2024-09-16 17:35:05 -07:00
Jonathan Kelley 143ad749ea Split out isrg from ssr and reorient build graph to make interpreter build 2x faster (#2969)
* split out isrg and core-types to speed up interpreter build
2024-09-16 16:49:06 -07:00
Chung b20db13e84 add disabled, form and name attributes to fieldset (#2947) 2024-09-10 15:21:58 -05:00
ASR-ASU ffb5c98449 Add aspect-ratio property (#2916) 2024-09-03 08:38:01 -05:00
Evan Almloff e5696cd72f Fix script component src attribute (#2887) 2024-08-28 18:52:36 -05:00
ASR-ASUandEvan Almloff 2f49a89638 Add the onresize event handler to Element (#2479)
* Add the capability to handle resize event for web target

* Add the capability to handle resize event for desktop target

* Return all the sizes, not just the first one

* Fix conversion from platform to generic ResizedData for liveview

* Update the generated interpreter js code base

* Fix clippy warnings

* Fix inconsistent use of block_size and inline_size

* Rename `onresized` event to `onresize`

* Remove the the special-casing logic from the binding logic

* Propagating the resize events using CustomEvent

* Fix case convention in core ts

* revert changes to unified bindings

* Cleanup as suggested

* add a resize example

* Fix desktop resize events

* remove tracing from resize example

* use the raw resize entry so we can downcast on web

* remove unused ResizeEventDetail

---------

Co-authored-by: Evan Almloff <evanalmloff@gmail.com>
2024-08-15 01:23:49 +00:00
Evan Almloff 959ab67624 Fix templates merging in debug mode in macros (#2828)
* Fix templates merging in debug mode in macros

* Fix clippy

* Fix web-sys scroll to deprecated warning
2024-08-13 20:18:54 +00:00
Evan Almloff cab573eefd Synchronous prevent default (#2792)
* add prevent default methods to the event

* sync prevent default almost working

* sync prevent default working

* Move event handling into the runtime

* update core tests

* restore desktop file dialog

* implement prevent default on web

* add a hint about the new prevent default method

* fix web prevent default

* Fix CTRL+click on links

* fix values memorize in place test

* Fix a few more tests

* Add a playwright test for sync prevent default

* Fix core doc tests

* create a deprecated VirtualDom::handle_event

* fix macos imports in desktop

* Fix onmounted event

* Fix liveview support

* switch to RefCell for metadata

* Remove println

* remove prevent default attribute

* remove web specific link behavior

* Fix liveview links

* more liveview fixes for link

* Fix merge conflicts

* Fix clippy

* use the new prevent default in the file upload example
2024-08-13 11:57:54 -07:00
Miles Murgaw 3003362b52 remove: changelog.md (#2776) 2024-08-02 23:29:28 +00:00
Miles Murgaw 0acfe37398 revision: make EvalError impl Error (#2768) 2024-08-02 10:46:43 -07:00
Miles Murgaw f42ca65931 Fix Links & Add Link Checker (#2769)
* feat: link checker
2024-08-02 10:46:18 -07:00
Matt Hunzinger 4bf71111c8 Refactor WebEventExt (#2707)
* Create WebEventExt::try_as_web_event and refactor
* Inline and adjust error message
* Inline downcast methods
2024-07-31 13:01:25 -07:00
Evan Almloff 34bdcd15cf Switch to a pool of dynamic values for hot reloading (#2705)
* create the dynamic value pool

* assign ids to dynamic formatted segments

* separate the rendering and literal pools

* rsx output compiles again

* more examples compiling with new rsx expansion

* update template body explanation

* all workspace examples compile

* fix formatted segments in keys

* start hot reload diffing

* fix component literal hot reloading

* start integrate new hot reloading with the CLI

* simple hot reloads working

* Fix hot reloading blocks with components

* implement hot reloading for if chains

* Fix hot reloading after a template requires a full rebuild

* Fix hot reloading any attribute values

* remove unsafe from hot reload utils

* Fix hot reloading empty rsx

* add more hot reloading tests

* reorganize hot reload module

* fix web hydration

* fix empty rsx nodes in autoformatting

* fix tests

* remove path sorting logic from core

* make template names more consistent in debug mode

* fix quote_as_hot_reload_literal for explicitly typed literals

* fix can_be_shorthand for string literals

* fix formatted single dynamic expression

* Fix usize component properties and playwright tests

* remove default implementation for TemplateBody

* add a bunch more comments for diffing, scoring and why this scoring system is optimal
2024-07-30 17:16:27 +00:00
Jonathan Kelley 0e84d00d9c Fix #2309: rfd doesn't need async-std (#2712)
* Fix #2309: rfd doesn't need to be async
* just use tokio instead of async std
2024-07-29 15:24:31 -05:00
Adam Kundrát 4e338accad implement HasMouseData for WheelEvent (#2728) 2024-07-29 12:28:06 -07:00