Full Code of DioxusLabs/dioxus for AI

main be7296f4f037 cached
1335 files
6.4 MB
1.7M tokens
8492 symbols
1 requests
Download .txt
Showing preview only (6,952K chars total). Download the full file or copy to clipboard to get everything.
Repository: DioxusLabs/dioxus
Branch: main
Commit: be7296f4f037
Files: 1335
Total size: 6.4 MB

Directory structure:
gitextract_gubgus_p/

├── .devcontainer/
│   ├── Dockerfile
│   ├── README.md
│   └── devcontainer.json
├── .github/
│   ├── CODEOWNERS
│   ├── FUNDING.yml
│   ├── ISSUE_TEMPLATE/
│   │   ├── bug_report.md
│   │   └── feature_requst.md
│   ├── actions/
│   │   └── free-disk-space/
│   │       └── action.yml
│   ├── dependabot.yml
│   ├── install.ps1
│   ├── install.sh
│   └── workflows/
│       ├── main.yml
│       ├── merge.yml
│       ├── promote.yml
│       ├── publish.yml
│       ├── setup-dev-drive.ps1
│       └── typos.yml
├── .gitignore
├── .vscode/
│   └── settings.json
├── AGENTS.md
├── Cargo.toml
├── LICENSE-APACHE
├── LICENSE-MIT
├── README.md
├── _typos.toml
├── codecov.yml
├── examples/
│   ├── 01-app-demos/
│   │   ├── bluetooth-scanner/
│   │   │   ├── .gitignore
│   │   │   ├── Cargo.toml
│   │   │   ├── README.md
│   │   │   ├── assets/
│   │   │   │   └── tailwind.css
│   │   │   ├── src/
│   │   │   │   └── main.rs
│   │   │   └── tailwind.css
│   │   ├── calculator.rs
│   │   ├── calculator_mutable.rs
│   │   ├── counters.rs
│   │   ├── crm.rs
│   │   ├── dog_app.rs
│   │   ├── ecommerce-site/
│   │   │   ├── .gitignore
│   │   │   ├── Cargo.toml
│   │   │   ├── README.md
│   │   │   ├── public/
│   │   │   │   ├── loading.css
│   │   │   │   └── tailwind.css
│   │   │   ├── src/
│   │   │   │   ├── api.rs
│   │   │   │   ├── components/
│   │   │   │   │   ├── error.rs
│   │   │   │   │   ├── home.rs
│   │   │   │   │   ├── loading.rs
│   │   │   │   │   ├── nav.rs
│   │   │   │   │   ├── product_item.rs
│   │   │   │   │   └── product_page.rs
│   │   │   │   └── main.rs
│   │   │   └── tailwind.css
│   │   ├── file-explorer/
│   │   │   ├── .gitignore
│   │   │   ├── Cargo.toml
│   │   │   ├── Dioxus.toml
│   │   │   ├── README.md
│   │   │   ├── assets/
│   │   │   │   └── fileexplorer.css
│   │   │   └── src/
│   │   │       └── main.rs
│   │   ├── geolocation-native-plugin/
│   │   │   ├── Cargo.toml
│   │   │   ├── Dioxus.toml
│   │   │   ├── README.md
│   │   │   ├── assets/
│   │   │   │   └── main.css
│   │   │   └── src/
│   │   │       ├── android/
│   │   │       │   ├── build.gradle.kts
│   │   │       │   ├── consumer-rules.pro
│   │   │       │   └── src/
│   │   │       │       └── main/
│   │   │       │           ├── AndroidManifest.xml
│   │   │       │           └── kotlin/
│   │   │       │               └── com/
│   │   │       │                   └── dioxus/
│   │   │       │                       └── geolocation/
│   │   │       │                           ├── Geolocation.kt
│   │   │       │                           └── GeolocationPlugin.kt
│   │   │       ├── ios/
│   │   │       │   ├── .gitignore
│   │   │       │   ├── plugin/
│   │   │       │   │   ├── Package.swift
│   │   │       │   │   ├── Sources/
│   │   │       │   │   │   ├── GeolocationPlugin.swift
│   │   │       │   │   │   └── LocationActivityAttributes.swift
│   │   │       │   │   └── Tests/
│   │   │       │   │       └── PluginTests/
│   │   │       │   │           └── PluginTests.swift
│   │   │       │   └── widget/
│   │   │       │       ├── Package.swift
│   │   │       │       └── Sources/
│   │   │       │           ├── LocationActivityAttributes.swift
│   │   │       │           └── LocationWidget.swift
│   │   │       ├── main.rs
│   │   │       └── plugin/
│   │   │           ├── error.rs
│   │   │           ├── mod.rs
│   │   │           └── models.rs
│   │   ├── hackernews/
│   │   │   ├── .gitignore
│   │   │   ├── Cargo.toml
│   │   │   ├── assets/
│   │   │   │   └── hackernews.css
│   │   │   └── src/
│   │   │       └── main.rs
│   │   ├── hello_world.rs
│   │   ├── hotdog/
│   │   │   ├── .gitignore
│   │   │   ├── Cargo.toml
│   │   │   ├── Dioxus.toml
│   │   │   ├── Dockerfile
│   │   │   ├── README.md
│   │   │   ├── assets/
│   │   │   │   └── main.css
│   │   │   ├── fly.toml
│   │   │   └── src/
│   │   │       ├── backend.rs
│   │   │       ├── frontend.rs
│   │   │       └── main.rs
│   │   ├── image_generator_openai.rs
│   │   ├── repo_readme.rs
│   │   ├── todomvc.rs
│   │   ├── todomvc_store.rs
│   │   ├── weather_app.rs
│   │   └── websocket_chat.rs
│   ├── 02-building-ui/
│   │   ├── disabled.rs
│   │   ├── nested_listeners.rs
│   │   └── svg.rs
│   ├── 03-assets-styling/
│   │   ├── css_modules.rs
│   │   ├── custom_assets.rs
│   │   ├── dynamic_assets.rs
│   │   ├── meta.rs
│   │   └── meta_elements.rs
│   ├── 04-managing-state/
│   │   ├── context_api.rs
│   │   ├── error_handling.rs
│   │   ├── global.rs
│   │   ├── memo_chain.rs
│   │   ├── reducer.rs
│   │   └── signals.rs
│   ├── 05-using-async/
│   │   ├── backgrounded_futures.rs
│   │   ├── clock.rs
│   │   ├── future.rs
│   │   ├── streams.rs
│   │   └── suspense.rs
│   ├── 06-routing/
│   │   ├── flat_router.rs
│   │   ├── hash_fragment_state.rs
│   │   ├── link.rs
│   │   ├── query_segment_search.rs
│   │   ├── router.rs
│   │   ├── router_resource.rs
│   │   ├── router_restore_scroll.rs
│   │   └── simple_router.rs
│   ├── 07-fullstack/
│   │   ├── auth/
│   │   │   ├── Cargo.toml
│   │   │   └── src/
│   │   │       ├── auth.rs
│   │   │       └── main.rs
│   │   ├── custom_axum_serve.rs
│   │   ├── custom_error_page.rs
│   │   ├── desktop/
│   │   │   ├── Cargo.toml
│   │   │   └── src/
│   │   │       └── main.rs
│   │   ├── dog_app_self_hosted.rs
│   │   ├── full_request_access.rs
│   │   ├── fullstack_hello_world.rs
│   │   ├── handling_errors.rs
│   │   ├── header_map.rs
│   │   ├── hello-world/
│   │   │   ├── Cargo.toml
│   │   │   ├── assets/
│   │   │   │   └── hello.css
│   │   │   └── src/
│   │   │       └── main.rs
│   │   ├── login_form.rs
│   │   ├── middleware.rs
│   │   ├── multipart_form.rs
│   │   ├── query_params.rs
│   │   ├── redirect.rs
│   │   ├── router/
│   │   │   ├── Cargo.toml
│   │   │   └── src/
│   │   │       └── main.rs
│   │   ├── server_functions.rs
│   │   ├── server_sent_events.rs
│   │   ├── server_state.rs
│   │   ├── ssr-only/
│   │   │   ├── Cargo.toml
│   │   │   └── src/
│   │   │       └── main.rs
│   │   ├── streaming.rs
│   │   ├── streaming_file_upload.rs
│   │   ├── through_reqwest.rs
│   │   └── websocket.rs
│   ├── 08-apis/
│   │   ├── control_focus.rs
│   │   ├── custom_html.rs
│   │   ├── custom_menu.rs
│   │   ├── drag_and_drop.rs
│   │   ├── eval.rs
│   │   ├── file_upload.rs
│   │   ├── form.rs
│   │   ├── logging.rs
│   │   ├── multiwindow.rs
│   │   ├── multiwindow_with_tray_icon.rs
│   │   ├── on_resize.rs
│   │   ├── on_visible.rs
│   │   ├── overlay.rs
│   │   ├── read_size.rs
│   │   ├── scroll_to_offset.rs
│   │   ├── scroll_to_top.rs
│   │   ├── shortcut.rs
│   │   ├── ssr.rs
│   │   ├── title.rs
│   │   ├── video_stream.rs
│   │   ├── wgpu_child_window.rs
│   │   ├── window_event.rs
│   │   ├── window_focus.rs
│   │   ├── window_popup.rs
│   │   └── window_zoom.rs
│   ├── 09-reference/
│   │   ├── all_events.rs
│   │   ├── generic_component.rs
│   │   ├── optional_props.rs
│   │   ├── rsx_usage.rs
│   │   ├── shorthand.rs
│   │   ├── simple_list.rs
│   │   ├── spread.rs
│   │   ├── web_component.rs
│   │   └── xss_safety.rs
│   ├── 10-integrations/
│   │   ├── bevy/
│   │   │   ├── Cargo.toml
│   │   │   └── src/
│   │   │       ├── bevy_renderer.rs
│   │   │       ├── bevy_scene_plugin.rs
│   │   │       ├── demo_renderer.rs
│   │   │       ├── main.rs
│   │   │       └── styles.css
│   │   ├── native-headless/
│   │   │   ├── Cargo.toml
│   │   │   └── src/
│   │   │       └── main.rs
│   │   ├── native-headless-in-bevy/
│   │   │   ├── Cargo.toml
│   │   │   ├── README.md
│   │   │   └── src/
│   │   │       ├── bevy_scene_plugin.rs
│   │   │       ├── dioxus_in_bevy_plugin.rs
│   │   │       ├── main.rs
│   │   │       ├── ui.css
│   │   │       └── ui.rs
│   │   ├── pwa/
│   │   │   ├── Cargo.toml
│   │   │   ├── Dioxus.toml
│   │   │   ├── LICENSE
│   │   │   ├── README.md
│   │   │   ├── index.html
│   │   │   ├── public/
│   │   │   │   ├── manifest.json
│   │   │   │   └── sw.js
│   │   │   └── src/
│   │   │       └── main.rs
│   │   ├── tailwind/
│   │   │   ├── .gitignore
│   │   │   ├── Cargo.toml
│   │   │   ├── README.md
│   │   │   ├── assets/
│   │   │   │   └── tailwind.css
│   │   │   ├── src/
│   │   │   │   └── main.rs
│   │   │   └── tailwind.css
│   │   └── wgpu-texture/
│   │       ├── Cargo.toml
│   │       └── src/
│   │           ├── demo_renderer.rs
│   │           ├── main.rs
│   │           ├── shader.wgsl
│   │           └── styles.css
│   ├── assets/
│   │   ├── calculator.css
│   │   ├── clock.css
│   │   ├── context_api.css
│   │   ├── counter.css
│   │   ├── crm.css
│   │   ├── css_module1.css
│   │   ├── css_module2.css
│   │   ├── custom_assets.css
│   │   ├── events.css
│   │   ├── file_upload.css
│   │   ├── flat_router.css
│   │   ├── links.css
│   │   ├── overlay.css
│   │   ├── radio.css
│   │   ├── read_size.css
│   │   ├── roulette.css
│   │   ├── router.css
│   │   ├── todomvc.css
│   │   ├── visible.css
│   │   └── weatherapp.css
│   └── scripts/
│       └── scrape_examples.rs
├── flake.nix
├── lychee.toml
├── notes/
│   ├── CONTRIBUTING.md
│   ├── FAQ.md
│   ├── RELEASING.md
│   ├── SECURITY.md
│   ├── android_and_ios2.avif
│   ├── architecture/
│   │   ├── 00-OVERVIEW.md
│   │   ├── 01-CORE.md
│   │   ├── 02-CLI.md
│   │   ├── 03-RSX.md
│   │   ├── 04-SIGNALS.md
│   │   ├── 05-FULLSTACK.md
│   │   ├── 06-RENDERERS.md
│   │   ├── 07-HOTRELOAD.md
│   │   ├── 08-ASSETS.md
│   │   ├── 09-ROUTER.md
│   │   ├── 10-WASM-SPLIT.md
│   │   ├── 11-NATIVE-PLUGIN-FFI.md
│   │   └── 12-MANIFEST-SYSTEM.md
│   ├── dioxus-community.avif
│   ├── dioxus_splash_8.avif
│   ├── docs.avif
│   ├── ebou2.avif
│   ├── flat-splash.avif
│   ├── fullstack-websockets.avif
│   ├── image-splash.avif
│   ├── primitive-components.avif
│   ├── releases/
│   │   └── 0.7.0-alpha.0.md
│   └── translations/
│       ├── fa-ir/
│       │   └── README.md
│       ├── ja-jp/
│       │   └── README.md
│       ├── ko-kr/
│       │   └── README.md
│       ├── pt-br/
│       │   └── README.md
│       ├── tr-tr/
│       │   └── README.md
│       └── zh-cn/
│           └── README.md
└── packages/
    ├── asset-resolver/
    │   ├── Cargo.toml
    │   ├── assets/
    │   │   └── data.json
    │   └── src/
    │       ├── lib.rs
    │       ├── native.rs
    │       └── web.rs
    ├── autofmt/
    │   ├── .vscode/
    │   │   └── settings.json
    │   ├── Cargo.toml
    │   ├── README.md
    │   ├── src/
    │   │   ├── buffer.rs
    │   │   ├── collect_macros.rs
    │   │   ├── indent.rs
    │   │   ├── lib.rs
    │   │   ├── prettier_please.rs
    │   │   └── writer.rs
    │   └── tests/
    │       ├── error_handling.rs
    │       ├── partials/
    │       │   ├── no_parse.rsx
    │       │   ├── okay.rsx
    │       │   └── wrong.rsx
    │       ├── samples/
    │       │   ├── asset.rsx
    │       │   ├── attributes.rsx
    │       │   ├── basic_expr.rsx
    │       │   ├── blank_lines.rsx
    │       │   ├── blank_lines_preserved.rsx
    │       │   ├── collapse.rsx
    │       │   ├── collapse_expr.rsx
    │       │   ├── comments.rsx
    │       │   ├── commentshard.rsx
    │       │   ├── complex.rsx
    │       │   ├── docsite.rsx
    │       │   ├── emoji.rsx
    │       │   ├── expr_on_conditional.rsx
    │       │   ├── fat_exprs.rsx
    │       │   ├── ifchain_forloop.rsx
    │       │   ├── immediate_expr.rsx
    │       │   ├── key.rsx
    │       │   ├── letsome.rsx
    │       │   ├── long.rsx
    │       │   ├── long_exprs.rsx
    │       │   ├── manual_props.rsx
    │       │   ├── many_exprs.rsx
    │       │   ├── messy_indent.rsx
    │       │   ├── misplaced.rsx
    │       │   ├── multirsx.rsx
    │       │   ├── nested.rsx
    │       │   ├── oneline.rsx
    │       │   ├── prop_rsx.rsx
    │       │   ├── raw_strings.rsx
    │       │   ├── reallylong.rsx
    │       │   ├── shorthand.rsx
    │       │   ├── simple.rsx
    │       │   ├── skip.rsx
    │       │   ├── spaces.rsx
    │       │   ├── staged.rsx
    │       │   ├── t2.rsx
    │       │   ├── tiny.rsx
    │       │   ├── tinynoopt.rsx
    │       │   └── trailing_expr.rsx
    │       ├── samples.rs
    │       ├── srcless/
    │       │   ├── asset.rsx
    │       │   └── basic_expr.rsx
    │       ├── srcless.rs
    │       ├── wrong/
    │       │   ├── comments-4sp.rsx
    │       │   ├── comments-4sp.wrong.rsx
    │       │   ├── comments-attributes-4sp.rsx
    │       │   ├── comments-attributes-4sp.wrong.rsx
    │       │   ├── comments-big.rsx
    │       │   ├── comments-big.wrong.rsx
    │       │   ├── comments-inline-4sp.rsx
    │       │   ├── comments-inline-4sp.wrong.rsx
    │       │   ├── comments-tab.rsx
    │       │   ├── comments-tab.wrong.rsx
    │       │   ├── multi-4sp.rsx
    │       │   ├── multi-4sp.wrong.rsx
    │       │   ├── multi-tab.rsx
    │       │   ├── multi-tab.wrong.rsx
    │       │   ├── multiexpr-4sp.rsx
    │       │   ├── multiexpr-4sp.wrong.rsx
    │       │   ├── multiexpr-many.rsx
    │       │   ├── multiexpr-many.wrong.rsx
    │       │   ├── multiexpr-tab.rsx
    │       │   ├── multiexpr-tab.wrong.rsx
    │       │   ├── oneline-expand.rsx
    │       │   ├── oneline-expand.wrong.rsx
    │       │   ├── shortened.rsx
    │       │   ├── shortened.wrong.rsx
    │       │   ├── simple-combo-expr.rsx
    │       │   ├── simple-combo-expr.wrong.rsx
    │       │   ├── skipfail.rsx
    │       │   ├── skipfail.wrong.rsx
    │       │   ├── syntax_error.rsx
    │       │   └── syntax_error.wrong.rsx
    │       └── wrong.rs
    ├── check/
    │   ├── Cargo.toml
    │   ├── README.md
    │   └── src/
    │       ├── check.rs
    │       ├── issues.rs
    │       ├── lib.rs
    │       └── metadata.rs
    ├── cli/
    │   ├── .gitignore
    │   ├── Cargo.toml
    │   ├── Dioxus.toml
    │   ├── README.md
    │   ├── assets/
    │   │   ├── android/
    │   │   │   ├── MainActivity.kt.hbs
    │   │   │   ├── gen/
    │   │   │   │   ├── .gitignore
    │   │   │   │   ├── app/
    │   │   │   │   │   ├── build.gradle.kts.hbs
    │   │   │   │   │   ├── proguard-rules.pro
    │   │   │   │   │   └── src/
    │   │   │   │   │       └── main/
    │   │   │   │   │           ├── AndroidManifest.xml.hbs
    │   │   │   │   │           ├── assets/
    │   │   │   │   │           │   └── .gitignore
    │   │   │   │   │           ├── kotlin/
    │   │   │   │   │           │   └── .gitignore
    │   │   │   │   │           └── res/
    │   │   │   │   │               ├── drawable/
    │   │   │   │   │               │   └── ic_launcher_background.xml
    │   │   │   │   │               ├── drawable-v24/
    │   │   │   │   │               │   └── ic_launcher_foreground.xml
    │   │   │   │   │               ├── mipmap-anydpi-v26/
    │   │   │   │   │               │   └── ic_launcher.xml
    │   │   │   │   │               ├── values/
    │   │   │   │   │               │   ├── colors.xml
    │   │   │   │   │               │   ├── strings.xml.hbs
    │   │   │   │   │               │   └── styles.xml
    │   │   │   │   │               └── xml/
    │   │   │   │   │                   └── network_security_config.xml
    │   │   │   │   ├── build.gradle.kts
    │   │   │   │   ├── gradle/
    │   │   │   │   │   └── wrapper/
    │   │   │   │   │       ├── gradle-wrapper.jar
    │   │   │   │   │       └── gradle-wrapper.properties
    │   │   │   │   ├── gradle.properties
    │   │   │   │   ├── gradlew
    │   │   │   │   ├── gradlew.bat
    │   │   │   │   └── settings.gradle
    │   │   │   └── prebuilt/
    │   │   │       └── README.md
    │   │   ├── dioxus.toml
    │   │   ├── ios/
    │   │   │   └── ios.plist.hbs
    │   │   ├── macos/
    │   │   │   └── mac.plist.hbs
    │   │   └── web/
    │   │       ├── dev.index.html
    │   │       ├── dev.loading.html
    │   │       └── prod.index.html
    │   ├── build.rs
    │   ├── schema.json
    │   └── src/
    │       ├── build/
    │       │   ├── assets.rs
    │       │   ├── builder.rs
    │       │   ├── cache.rs
    │       │   ├── context.rs
    │       │   ├── ios_swift.rs
    │       │   ├── manifest.rs
    │       │   ├── manifest_mapper.rs
    │       │   ├── mod.rs
    │       │   ├── patch.rs
    │       │   ├── pre_render.rs
    │       │   ├── request.rs
    │       │   └── tools.rs
    │       ├── bundle_utils.rs
    │       ├── cargo_toml.rs
    │       ├── cli/
    │       │   ├── autoformat.rs
    │       │   ├── build.rs
    │       │   ├── build_assets.rs
    │       │   ├── bundle.rs
    │       │   ├── check.rs
    │       │   ├── component.rs
    │       │   ├── config.rs
    │       │   ├── create.rs
    │       │   ├── doctor.rs
    │       │   ├── hotpatch.rs
    │       │   ├── init.rs
    │       │   ├── link.rs
    │       │   ├── mod.rs
    │       │   ├── platform_override.rs
    │       │   ├── print.rs
    │       │   ├── run.rs
    │       │   ├── serve.rs
    │       │   ├── target.rs
    │       │   ├── translate.rs
    │       │   ├── update.rs
    │       │   └── verbosity.rs
    │       ├── config/
    │       │   ├── app.rs
    │       │   ├── bundle.rs
    │       │   ├── component.rs
    │       │   ├── dioxus_config.rs
    │       │   ├── inline_config.rs
    │       │   ├── manifest.rs
    │       │   ├── mod.rs
    │       │   ├── serve.rs
    │       │   └── web.rs
    │       ├── devcfg.rs
    │       ├── dx_build_info.rs
    │       ├── error.rs
    │       ├── fastfs.rs
    │       ├── logging.rs
    │       ├── main.rs
    │       ├── platform.rs
    │       ├── rustcwrapper.rs
    │       ├── serve/
    │       │   ├── ansi_buffer.rs
    │       │   ├── mod.rs
    │       │   ├── output.rs
    │       │   ├── proxy.rs
    │       │   ├── proxy_ws.rs
    │       │   ├── runner.rs
    │       │   ├── server.rs
    │       │   └── update.rs
    │       ├── settings.rs
    │       ├── tailwind.rs
    │       ├── test_harnesses.rs
    │       ├── wasm_bindgen.rs
    │       ├── wasm_opt.rs
    │       └── workspace.rs
    ├── cli-config/
    │   ├── .gitignore
    │   ├── Cargo.toml
    │   ├── README.md
    │   └── src/
    │       └── lib.rs
    ├── cli-harnesses/
    │   ├── .gitignore
    │   ├── README.md
    │   ├── harness-default-to-non-default/
    │   │   ├── Cargo.toml
    │   │   └── src/
    │   │       └── main.rs
    │   ├── harness-fullstack-desktop/
    │   │   ├── Cargo.toml
    │   │   └── src/
    │   │       └── main.rs
    │   ├── harness-fullstack-desktop-with-default/
    │   │   ├── Cargo.toml
    │   │   └── src/
    │   │       └── main.rs
    │   ├── harness-fullstack-desktop-with-features/
    │   │   ├── Cargo.toml
    │   │   └── src/
    │   │       └── main.rs
    │   ├── harness-fullstack-multi-target/
    │   │   ├── Cargo.toml
    │   │   └── src/
    │   │       └── main.rs
    │   ├── harness-fullstack-multi-target-no-default/
    │   │   ├── Cargo.toml
    │   │   └── src/
    │   │       └── main.rs
    │   ├── harness-fullstack-with-optional-tokio/
    │   │   ├── Cargo.toml
    │   │   └── src/
    │   │       └── main.rs
    │   ├── harness-no-dioxus/
    │   │   ├── Cargo.toml
    │   │   └── src/
    │   │       └── main.rs
    │   ├── harness-renderer-swap/
    │   │   ├── Cargo.toml
    │   │   └── src/
    │   │       └── main.rs
    │   ├── harness-simple-dedicated-client/
    │   │   ├── Cargo.toml
    │   │   └── src/
    │   │       └── main.rs
    │   ├── harness-simple-dedicated-server/
    │   │   ├── Cargo.toml
    │   │   └── src/
    │   │       └── main.rs
    │   ├── harness-simple-desktop/
    │   │   ├── Cargo.toml
    │   │   └── src/
    │   │       └── main.rs
    │   ├── harness-simple-fullstack/
    │   │   ├── Cargo.toml
    │   │   └── src/
    │   │       └── main.rs
    │   ├── harness-simple-fullstack-native-with-default/
    │   │   ├── Cargo.toml
    │   │   └── src/
    │   │       └── main.rs
    │   ├── harness-simple-fullstack-with-default/
    │   │   ├── Cargo.toml
    │   │   └── src/
    │   │       └── main.rs
    │   ├── harness-simple-mobile/
    │   │   ├── Cargo.toml
    │   │   └── src/
    │   │       └── main.rs
    │   ├── harness-simple-web/
    │   │   ├── Cargo.toml
    │   │   └── src/
    │   │       └── main.rs
    │   ├── harness-web-with-default-features/
    │   │   ├── Cargo.toml
    │   │   └── src/
    │   │       └── main.rs
    │   └── harness-web-with-no-default-features/
    │       ├── Cargo.toml
    │       └── src/
    │           └── main.rs
    ├── cli-opt/
    │   ├── Cargo.toml
    │   ├── build.rs
    │   └── src/
    │       ├── build_info.rs
    │       ├── css.rs
    │       ├── file.rs
    │       ├── folder.rs
    │       ├── hash.rs
    │       ├── image/
    │       │   ├── jpg.rs
    │       │   ├── mod.rs
    │       │   └── png.rs
    │       ├── js.rs
    │       ├── json.rs
    │       └── lib.rs
    ├── cli-telemetry/
    │   ├── Cargo.toml
    │   └── src/
    │       └── lib.rs
    ├── component-manifest/
    │   ├── Cargo.toml
    │   └── src/
    │       └── lib.rs
    ├── config-macro/
    │   ├── Cargo.toml
    │   ├── README.md
    │   └── src/
    │       └── lib.rs
    ├── config-macros/
    │   ├── Cargo.toml
    │   ├── README.md
    │   └── src/
    │       └── lib.rs
    ├── const-serialize/
    │   ├── .gitignore
    │   ├── Cargo.toml
    │   ├── README.md
    │   ├── src/
    │   │   ├── array.rs
    │   │   ├── cbor.rs
    │   │   ├── const_buffers.rs
    │   │   ├── const_vec.rs
    │   │   ├── enum.rs
    │   │   ├── lib.rs
    │   │   ├── list.rs
    │   │   ├── primitive.rs
    │   │   ├── str.rs
    │   │   └── struct.rs
    │   └── tests/
    │       ├── enum.rs
    │       ├── eq.rs
    │       ├── lists.rs
    │       ├── primitive.rs
    │       ├── str.rs
    │       ├── structs.rs
    │       └── tuples.rs
    ├── const-serialize-macro/
    │   ├── Cargo.toml
    │   └── src/
    │       └── lib.rs
    ├── core/
    │   ├── .vscode/
    │   │   ├── settings.json
    │   │   └── spellright.dict
    │   ├── Cargo.toml
    │   ├── README.md
    │   ├── docs/
    │   │   ├── common_spawn_errors.md
    │   │   └── reactivity.md
    │   ├── src/
    │   │   ├── any_props.rs
    │   │   ├── arena.rs
    │   │   ├── diff/
    │   │   │   ├── component.rs
    │   │   │   ├── iterator.rs
    │   │   │   ├── mod.rs
    │   │   │   └── node.rs
    │   │   ├── effect.rs
    │   │   ├── error_boundary.rs
    │   │   ├── events.rs
    │   │   ├── fragment.rs
    │   │   ├── generational_box.rs
    │   │   ├── global_context.rs
    │   │   ├── hotreload_utils.rs
    │   │   ├── launch.rs
    │   │   ├── lib.rs
    │   │   ├── mutations.rs
    │   │   ├── nodes.rs
    │   │   ├── properties.rs
    │   │   ├── reactive_context.rs
    │   │   ├── render_error.rs
    │   │   ├── root_wrapper.rs
    │   │   ├── runtime.rs
    │   │   ├── scheduler.rs
    │   │   ├── scope_arena.rs
    │   │   ├── scope_context.rs
    │   │   ├── scopes.rs
    │   │   ├── suspense/
    │   │   │   ├── component.rs
    │   │   │   └── mod.rs
    │   │   ├── tasks.rs
    │   │   └── virtual_dom.rs
    │   └── tests/
    │       ├── .rustfmt.toml
    │       ├── README.md
    │       ├── attr_cleanup.rs
    │       ├── attributes_pass.rs
    │       ├── boolattrs.rs
    │       ├── bubble_error.rs
    │       ├── children_drop_futures.rs
    │       ├── conditional_formatted_attributes.rs
    │       ├── context_api.rs
    │       ├── create_dom.rs
    │       ├── create_fragments.rs
    │       ├── create_lists.rs
    │       ├── create_passthru.rs
    │       ├── cycle.rs
    │       ├── diff_component.rs
    │       ├── diff_dynamic_node.rs
    │       ├── diff_element.rs
    │       ├── diff_keyed_list.rs
    │       ├── diff_unkeyed_list.rs
    │       ├── error_boundary.rs
    │       ├── event_propagation.rs
    │       ├── fuzzing.rs
    │       ├── hotreloading.rs
    │       ├── kitchen_sink.rs
    │       ├── lifecycle.rs
    │       ├── many_roots.rs
    │       ├── memory_leak.rs
    │       ├── miri_full_app.rs
    │       ├── miri_simple.rs
    │       ├── miri_stress.rs
    │       ├── safety.rs
    │       ├── suspense.rs
    │       ├── task.rs
    │       ├── tracing.rs
    │       └── use_drop.rs
    ├── core-macro/
    │   ├── .vscode/
    │   │   └── settings.json
    │   ├── Cargo.toml
    │   ├── README.md
    │   ├── docs/
    │   │   ├── component.md
    │   │   ├── props.md
    │   │   └── rsx.md
    │   ├── src/
    │   │   ├── component.rs
    │   │   ├── lib.rs
    │   │   ├── props/
    │   │   │   └── mod.rs
    │   │   └── utils.rs
    │   └── tests/
    │       ├── event_handler.rs
    │       ├── generics.rs
    │       ├── rsx/
    │       │   ├── trailing-comma-0.rs
    │       │   └── trailing-comma-0.stderr
    │       ├── rsx.rs
    │       └── values_memoize_in_place.rs
    ├── core-types/
    │   ├── Cargo.toml
    │   └── src/
    │       ├── attributes.rs
    │       ├── bubbles.rs
    │       ├── bundled.rs
    │       ├── formatter.rs
    │       ├── hr_context.rs
    │       └── lib.rs
    ├── depinfo/
    │   ├── Cargo.toml
    │   ├── README.md
    │   └── src/
    │       ├── dx.d
    │       └── lib.rs
    ├── desktop/
    │   ├── .vscode/
    │   │   └── settings.json
    │   ├── Cargo.toml
    │   ├── README.md
    │   ├── build.rs
    │   ├── headless_tests/
    │   │   ├── eval.rs
    │   │   ├── events.rs
    │   │   ├── forms.rs
    │   │   ├── rendering.rs
    │   │   └── utils.rs
    │   ├── src/
    │   │   ├── android_sync_lock.rs
    │   │   ├── app.rs
    │   │   ├── assets/
    │   │   │   ├── dev.index.html
    │   │   │   └── prod.index.html
    │   │   ├── assets.rs
    │   │   ├── config.rs
    │   │   ├── desktop_context.rs
    │   │   ├── document.rs
    │   │   ├── edits.rs
    │   │   ├── element.rs
    │   │   ├── event_handlers.rs
    │   │   ├── events.rs
    │   │   ├── file_upload.rs
    │   │   ├── hooks.rs
    │   │   ├── ipc.rs
    │   │   ├── js/
    │   │   │   ├── hash.txt
    │   │   │   └── native_eval.js
    │   │   ├── launch.rs
    │   │   ├── lib.rs
    │   │   ├── menubar.rs
    │   │   ├── mobile.rs
    │   │   ├── mobile_shortcut.rs
    │   │   ├── protocol.rs
    │   │   ├── query.rs
    │   │   ├── readme.md
    │   │   ├── shortcut.rs
    │   │   ├── trayicon.rs
    │   │   ├── ts/
    │   │   │   └── native_eval.ts
    │   │   ├── waker.rs
    │   │   └── webview.rs
    │   └── tsconfig.json
    ├── devtools/
    │   ├── Cargo.toml
    │   └── src/
    │       └── lib.rs
    ├── devtools-types/
    │   ├── Cargo.toml
    │   └── src/
    │       └── lib.rs
    ├── dioxus/
    │   ├── Cargo.toml
    │   ├── README.md
    │   ├── benches/
    │   │   └── jsframework.rs
    │   └── src/
    │       ├── launch.rs
    │       └── lib.rs
    ├── document/
    │   ├── Cargo.toml
    │   ├── assets/
    │   │   ├── script.js
    │   │   └── style.css
    │   ├── build.rs
    │   ├── docs/
    │   │   ├── eval.md
    │   │   └── head.md
    │   ├── src/
    │   │   ├── document.rs
    │   │   ├── elements/
    │   │   │   ├── link.rs
    │   │   │   ├── meta.rs
    │   │   │   ├── mod.rs
    │   │   │   ├── script.rs
    │   │   │   ├── style.rs
    │   │   │   ├── stylesheet.rs
    │   │   │   └── title.rs
    │   │   ├── error.rs
    │   │   ├── eval.rs
    │   │   ├── js/
    │   │   │   ├── hash.txt
    │   │   │   └── head.js
    │   │   ├── lib.rs
    │   │   └── ts/
    │   │       ├── .gitignore
    │   │       ├── eval.ts
    │   │       └── head.ts
    │   └── tsconfig.json
    ├── dx-wire-format/
    │   ├── Cargo.toml
    │   └── src/
    │       └── lib.rs
    ├── extension/
    │   ├── .eslintrc.js
    │   ├── .gitignore
    │   ├── .vscode/
    │   │   ├── launch.json
    │   │   └── tasks.json
    │   ├── Cargo.toml
    │   ├── DEV.md
    │   ├── LICENSE.txt
    │   ├── README.md
    │   ├── package.json
    │   ├── src/
    │   │   ├── lib.rs
    │   │   └── main.ts
    │   ├── tsconfig.json
    │   └── webpack.config.js
    ├── fullstack/
    │   ├── .vscode/
    │   │   └── settings.json
    │   ├── Cargo.toml
    │   ├── README.md
    │   ├── src/
    │   │   ├── client.rs
    │   │   ├── encoding.rs
    │   │   ├── lazy.rs
    │   │   ├── lib.rs
    │   │   ├── magic.rs
    │   │   ├── payloads/
    │   │   │   ├── axum_types.rs
    │   │   │   ├── cbor.rs
    │   │   │   ├── files.rs
    │   │   │   ├── form.rs
    │   │   │   ├── header.rs
    │   │   │   ├── msgpack.rs
    │   │   │   ├── multipart.rs
    │   │   │   ├── postcard.rs
    │   │   │   ├── query.rs
    │   │   │   ├── redirect.rs
    │   │   │   ├── sse.rs
    │   │   │   ├── stream.rs
    │   │   │   ├── text.rs
    │   │   │   └── websocket.rs
    │   │   ├── request.rs
    │   │   └── spawn.rs
    │   └── tests/
    │       └── compile-test.rs
    ├── fullstack-core/
    │   ├── Cargo.toml
    │   ├── README.md
    │   └── src/
    │       ├── document.rs
    │       ├── error.rs
    │       ├── errors.rs
    │       ├── history.rs
    │       ├── httperror.rs
    │       ├── lib.rs
    │       ├── loader.rs
    │       ├── server_cached.rs
    │       ├── server_future.rs
    │       ├── streaming.rs
    │       └── transport.rs
    ├── fullstack-macro/
    │   ├── Cargo.toml
    │   └── src/
    │       └── lib.rs
    ├── fullstack-server/
    │   ├── .gitignore
    │   ├── Cargo.toml
    │   ├── README.md
    │   └── src/
    │       ├── config.rs
    │       ├── document.rs
    │       ├── index_html.rs
    │       ├── isrg/
    │       │   ├── config.rs
    │       │   ├── freshness.rs
    │       │   ├── fs_cache.rs
    │       │   ├── memory_cache.rs
    │       │   └── mod.rs
    │       ├── launch.rs
    │       ├── lib.rs
    │       ├── redirect.rs
    │       ├── server.rs
    │       ├── serverfn.rs
    │       ├── ssr.rs
    │       └── streaming.rs
    ├── generational-box/
    │   ├── Cargo.toml
    │   ├── README.md
    │   ├── benches/
    │   │   └── lock.rs
    │   ├── src/
    │   │   ├── entry.rs
    │   │   ├── error.rs
    │   │   ├── lib.rs
    │   │   ├── references.rs
    │   │   ├── sync.rs
    │   │   └── unsync.rs
    │   └── tests/
    │       ├── basic.rs
    │       ├── errors.rs
    │       ├── reference_counting.rs
    │       ├── reused.rs
    │       └── sync.rs
    ├── history/
    │   ├── Cargo.toml
    │   └── src/
    │       ├── lib.rs
    │       └── memory.rs
    ├── hooks/
    │   ├── Cargo.toml
    │   ├── README.md
    │   ├── docs/
    │   │   ├── derived_state.md
    │   │   ├── moving_state_around.md
    │   │   ├── rules_of_hooks.md
    │   │   ├── side_effects.md
    │   │   └── use_resource.md
    │   ├── src/
    │   │   ├── lib.rs
    │   │   ├── use_action.rs
    │   │   ├── use_after_suspense_resolved.rs
    │   │   ├── use_callback.rs
    │   │   ├── use_collection.rs
    │   │   ├── use_context.rs
    │   │   ├── use_coroutine.rs
    │   │   ├── use_effect.rs
    │   │   ├── use_future.rs
    │   │   ├── use_hook_did_run.rs
    │   │   ├── use_memo.rs
    │   │   ├── use_on_destroy.rs
    │   │   ├── use_reactive.rs
    │   │   ├── use_resource.rs
    │   │   ├── use_root_context.rs
    │   │   ├── use_set_compare.rs
    │   │   ├── use_signal.rs
    │   │   ├── use_sorted.rs
    │   │   └── use_waker.rs
    │   └── tests/
    │       ├── effect.rs
    │       └── memo.rs
    ├── html/
    │   ├── Cargo.toml
    │   ├── README.md
    │   ├── docs/
    │   │   ├── common_event_handler_errors.md
    │   │   └── event_handlers.md
    │   ├── src/
    │   │   ├── attribute_groups.rs
    │   │   ├── data_transfer.rs
    │   │   ├── elements.rs
    │   │   ├── events/
    │   │   │   ├── animation.rs
    │   │   │   ├── cancel.rs
    │   │   │   ├── clipboard.rs
    │   │   │   ├── composition.rs
    │   │   │   ├── drag.rs
    │   │   │   ├── focus.rs
    │   │   │   ├── form.rs
    │   │   │   ├── image.rs
    │   │   │   ├── keyboard.rs
    │   │   │   ├── media.rs
    │   │   │   ├── mod.rs
    │   │   │   ├── mounted.rs
    │   │   │   ├── mouse.rs
    │   │   │   ├── pointer.rs
    │   │   │   ├── resize.rs
    │   │   │   ├── scroll.rs
    │   │   │   ├── selection.rs
    │   │   │   ├── toggle.rs
    │   │   │   ├── touch.rs
    │   │   │   ├── transition.rs
    │   │   │   ├── visible.rs
    │   │   │   └── wheel.rs
    │   │   ├── file_data.rs
    │   │   ├── geometry.rs
    │   │   ├── input_data.rs
    │   │   ├── lib.rs
    │   │   ├── point_interaction.rs
    │   │   ├── render_template.rs
    │   │   └── transit.rs
    │   └── tsconfig.json
    ├── html-internal-macro/
    │   ├── Cargo.toml
    │   ├── src/
    │   │   └── lib.rs
    │   └── tests/
    │       ├── 01-simple.rs
    │       └── progress.rs
    ├── interpreter/
    │   ├── .gitignore
    │   ├── Cargo.toml
    │   ├── NOTES.md
    │   ├── README.md
    │   ├── build.rs
    │   ├── src/
    │   │   ├── js/
    │   │   │   ├── common.js
    │   │   │   ├── core.js
    │   │   │   ├── hash.txt
    │   │   │   ├── hydrate.js
    │   │   │   ├── initialize_streaming.js
    │   │   │   ├── native.js
    │   │   │   ├── patch_console.js
    │   │   │   └── set_attribute.js
    │   │   ├── lib.rs
    │   │   ├── ts/
    │   │   │   ├── .gitignore
    │   │   │   ├── core.ts
    │   │   │   ├── hydrate.ts
    │   │   │   ├── hydrate_types.ts
    │   │   │   ├── initialize_streaming.ts
    │   │   │   ├── native.ts
    │   │   │   ├── patch_console.ts
    │   │   │   ├── serialize.ts
    │   │   │   └── set_attribute.ts
    │   │   ├── unified_bindings.rs
    │   │   └── write_native_mutations.rs
    │   ├── tests/
    │   │   ├── e2e.rs
    │   │   └── serialize.rs
    │   └── tsconfig.json
    ├── lazy-js-bundle/
    │   ├── Cargo.toml
    │   └── src/
    │       └── lib.rs
    ├── liveview/
    │   ├── Cargo.toml
    │   ├── README.md
    │   ├── examples/
    │   │   ├── axum.rs
    │   │   └── axum_stress.rs
    │   └── src/
    │       ├── adapters/
    │       │   ├── axum_adapter.rs
    │       │   └── mod.rs
    │       ├── config.rs
    │       ├── document.rs
    │       ├── element.rs
    │       ├── events.rs
    │       ├── history.rs
    │       ├── index.html
    │       ├── launch.rs
    │       ├── lib.rs
    │       ├── main.js
    │       ├── pool.rs
    │       └── query.rs
    ├── logger/
    │   ├── Cargo.toml
    │   ├── README.md
    │   └── src/
    │       └── lib.rs
    ├── manganis/
    │   ├── manganis/
    │   │   ├── Cargo.toml
    │   │   ├── README.md
    │   │   ├── assets/
    │   │   │   ├── script.js
    │   │   │   └── style.css
    │   │   └── src/
    │   │       ├── android/
    │   │       │   ├── activity.rs
    │   │       │   ├── callback.rs
    │   │       │   ├── java.rs
    │   │       │   ├── metadata.rs
    │   │       │   └── mod.rs
    │   │       ├── darwin/
    │   │       │   └── mod.rs
    │   │       ├── lib.rs
    │   │       └── macro_helpers.rs
    │   ├── manganis-07/
    │   │   ├── Cargo.toml
    │   │   └── src/
    │   │       ├── asset.rs
    │   │       ├── css.rs
    │   │       ├── css_module.rs
    │   │       ├── folder.rs
    │   │       ├── images.rs
    │   │       ├── js.rs
    │   │       ├── lib.rs
    │   │       └── options.rs
    │   ├── manganis-core/
    │   │   ├── Cargo.toml
    │   │   ├── assets/
    │   │   │   ├── script.js
    │   │   │   └── style.css
    │   │   └── src/
    │   │       ├── asset.rs
    │   │       ├── css.rs
    │   │       ├── css_module.rs
    │   │       ├── css_module_parser.rs
    │   │       ├── ffi.rs
    │   │       ├── folder.rs
    │   │       ├── images.rs
    │   │       ├── js.rs
    │   │       ├── lib.rs
    │   │       └── options.rs
    │   └── manganis-macro/
    │       ├── Cargo.toml
    │       ├── README.md
    │       ├── assets/
    │       │   ├── asset.txt
    │       │   ├── script.js
    │       │   └── style.css
    │       ├── src/
    │       │   ├── asset.rs
    │       │   ├── css_module.rs
    │       │   ├── ffi.rs
    │       │   ├── lib.rs
    │       │   └── linker.rs
    │       └── tests/
    │           └── option_asset.rs
    ├── native/
    │   ├── Cargo.toml
    │   └── src/
    │       ├── assets.rs
    │       ├── config.rs
    │       ├── contexts.rs
    │       ├── dioxus_application.rs
    │       ├── dioxus_renderer.rs
    │       ├── lib.rs
    │       ├── link_handler.rs
    │       └── prelude.rs
    ├── native-dom/
    │   ├── Cargo.toml
    │   └── src/
    │       ├── dioxus_document.rs
    │       ├── events.rs
    │       ├── lib.rs
    │       └── mutation_writer.rs
    ├── playwright-tests/
    │   ├── .gitignore
    │   ├── barebones-template/
    │   │   ├── .gitignore
    │   │   ├── Cargo.toml
    │   │   ├── Dioxus.toml
    │   │   ├── README.md
    │   │   ├── assets/
    │   │   │   └── main.css
    │   │   └── src/
    │   │       └── main.rs
    │   ├── cli-optimization/
    │   │   ├── .gitignore
    │   │   ├── Cargo.toml
    │   │   ├── assets/
    │   │   │   └── data.json
    │   │   ├── build.rs
    │   │   └── src/
    │   │       ├── lib.rs
    │   │       ├── main.rs
    │   │       └── old_cli.rs
    │   ├── cli-optimization.spec.js
    │   ├── default-features-disabled/
    │   │   ├── .gitignore
    │   │   ├── Cargo.toml
    │   │   └── src/
    │   │       └── main.rs
    │   ├── default-features-disabled.spec.js
    │   ├── fullstack/
    │   │   ├── .gitignore
    │   │   ├── Cargo.toml
    │   │   ├── Dioxus.toml
    │   │   └── src/
    │   │       └── main.rs
    │   ├── fullstack-error-codes/
    │   │   ├── .gitignore
    │   │   ├── Cargo.toml
    │   │   └── src/
    │   │       └── main.rs
    │   ├── fullstack-error-codes.spec.js
    │   ├── fullstack-errors/
    │   │   ├── .gitignore
    │   │   ├── Cargo.toml
    │   │   └── src/
    │   │       └── main.rs
    │   ├── fullstack-errors.spec.js
    │   ├── fullstack-hydration-order/
    │   │   ├── Cargo.toml
    │   │   └── src/
    │   │       └── main.rs
    │   ├── fullstack-hydration-order.spec.js
    │   ├── fullstack-mounted/
    │   │   ├── Cargo.toml
    │   │   └── src/
    │   │       └── main.rs
    │   ├── fullstack-mounted.spec.js
    │   ├── fullstack-routing/
    │   │   ├── .gitignore
    │   │   ├── Cargo.toml
    │   │   └── src/
    │   │       └── main.rs
    │   ├── fullstack-routing.spec.js
    │   ├── fullstack-spread/
    │   │   ├── Cargo.toml
    │   │   └── src/
    │   │       └── main.rs
    │   ├── fullstack-spread.spec.js
    │   ├── fullstack.spec.js
    │   ├── liveview/
    │   │   ├── Cargo.toml
    │   │   └── src/
    │   │       └── main.rs
    │   ├── liveview.spec.js
    │   ├── nested-suspense/
    │   │   ├── .gitignore
    │   │   ├── Cargo.toml
    │   │   ├── assets/
    │   │   │   └── style.css
    │   │   └── src/
    │   │       ├── lib.rs
    │   │       ├── main.rs
    │   │       └── ssg.rs
    │   ├── nested-suspense-no-js.spec.js
    │   ├── nested-suspense-ssg.spec.js
    │   ├── nested-suspense.spec.js
    │   ├── package.json
    │   ├── playwright.config.js
    │   ├── suspense-carousel/
    │   │   ├── .gitignore
    │   │   ├── Cargo.toml
    │   │   └── src/
    │   │       └── main.rs
    │   ├── suspense-carousel.spec.js
    │   ├── wasm-split-harness/
    │   │   ├── .cargo/
    │   │   │   └── config.toml
    │   │   ├── Cargo.toml
    │   │   ├── data/
    │   │   │   ├── .gitignore
    │   │   │   └── index.html
    │   │   ├── docsite.sh
    │   │   ├── run.sh
    │   │   └── src/
    │   │       ├── main.rs
    │   │       └── stars.js
    │   ├── wasm-split.spec.js
    │   ├── web/
    │   │   ├── .gitignore
    │   │   ├── Cargo.toml
    │   │   └── src/
    │   │       └── main.rs
    │   ├── web-hash-routing/
    │   │   ├── Cargo.toml
    │   │   └── src/
    │   │       └── main.rs
    │   ├── web-hash-routing.spec.js
    │   ├── web-hot-patch/
    │   │   ├── .gitignore
    │   │   ├── Cargo.toml
    │   │   ├── assets/
    │   │   │   ├── alternative-style.css
    │   │   │   └── style.css
    │   │   └── src/
    │   │       └── main.rs
    │   ├── web-hot-patch-fullstack/
    │   │   ├── .gitignore
    │   │   ├── Cargo.toml
    │   │   ├── assets/
    │   │   │   ├── alternative-style.css
    │   │   │   └── style.css
    │   │   └── src/
    │   │       └── main.rs
    │   ├── web-patch-fullstack.spec.js
    │   ├── web-patch.spec.js
    │   ├── web-routing/
    │   │   ├── .gitignore
    │   │   ├── Cargo.toml
    │   │   └── src/
    │   │       └── main.rs
    │   ├── web-routing.spec.js
    │   ├── web.spec.js
    │   ├── windows-headless/
    │   │   ├── Cargo.toml
    │   │   └── src/
    │   │       └── main.rs
    │   └── windows.spec.js
    ├── router/
    │   ├── .gitignore
    │   ├── Cargo.toml
    │   ├── README.md
    │   ├── src/
    │   │   ├── components/
    │   │   │   ├── child_router.rs
    │   │   │   ├── default_errors.rs
    │   │   │   ├── history_buttons.rs
    │   │   │   ├── history_provider.rs
    │   │   │   ├── link.rs
    │   │   │   ├── outlet.rs
    │   │   │   └── router.rs
    │   │   ├── contexts/
    │   │   │   ├── navigator.rs
    │   │   │   ├── outlet.rs
    │   │   │   └── router.rs
    │   │   ├── hooks/
    │   │   │   ├── use_navigator.rs
    │   │   │   ├── use_route.rs
    │   │   │   └── use_router.rs
    │   │   ├── lib.rs
    │   │   ├── navigation.rs
    │   │   ├── routable.rs
    │   │   ├── router_cfg.rs
    │   │   └── utils/
    │   │       └── use_router_internal.rs
    │   └── tests/
    │       ├── parent.rs
    │       ├── parsing.rs
    │       ├── site_map.rs
    │       └── via_ssr/
    │           ├── child_outlet.rs
    │           ├── link.rs
    │           ├── main.rs
    │           ├── navigation.rs
    │           ├── outlet.rs
    │           ├── redirect.rs
    │           └── without_index.rs
    ├── router-macro/
    │   ├── Cargo.toml
    │   └── src/
    │       ├── hash.rs
    │       ├── layout.rs
    │       ├── lib.rs
    │       ├── nest.rs
    │       ├── query.rs
    │       ├── redirect.rs
    │       ├── route.rs
    │       ├── route_tree.rs
    │       └── segment.rs
    ├── rsx/
    │   ├── .vscode/
    │   │   └── settings.json
    │   ├── Cargo.toml
    │   ├── README.md
    │   ├── src/
    │   │   ├── assign_dyn_ids.rs
    │   │   ├── attribute.rs
    │   │   ├── component.rs
    │   │   ├── diagnostics.rs
    │   │   ├── element.rs
    │   │   ├── expr_node.rs
    │   │   ├── forloop.rs
    │   │   ├── ifchain.rs
    │   │   ├── ifmt.rs
    │   │   ├── lib.rs
    │   │   ├── literal.rs
    │   │   ├── location.rs
    │   │   ├── node.rs
    │   │   ├── partial_closure.rs
    │   │   ├── raw_expr.rs
    │   │   ├── rsx_block.rs
    │   │   ├── rsx_call.rs
    │   │   ├── template_body.rs
    │   │   ├── text_node.rs
    │   │   └── util.rs
    │   └── tests/
    │       └── parsing.rs
    ├── rsx-hotreload/
    │   ├── Cargo.toml
    │   ├── src/
    │   │   ├── collect.rs
    │   │   ├── diff.rs
    │   │   ├── extensions.rs
    │   │   ├── last_build_state.rs
    │   │   └── lib.rs
    │   └── tests/
    │       ├── hotreload_pattern.rs
    │       ├── hotreloads.rs
    │       └── valid/
    │           ├── combo.new.rsx
    │           ├── combo.old.rsx
    │           ├── expr.new.rsx
    │           ├── expr.old.rsx
    │           ├── for_.new.rsx
    │           ├── for_.old.rsx
    │           ├── if_.new.rsx
    │           ├── if_.old.rsx
    │           ├── let_.new.rsx
    │           ├── let_.old.rsx
    │           ├── nested.new.rsx
    │           └── nested.old.rsx
    ├── rsx-rosetta/
    │   ├── Cargo.toml
    │   ├── README.md
    │   ├── examples/
    │   │   └── html.rs
    │   ├── src/
    │   │   └── lib.rs
    │   └── tests/
    │       ├── escape.rs
    │       ├── h-tags.rs
    │       ├── raw.rs
    │       ├── simple.rs
    │       ├── svgs.rs
    │       └── web-component.rs
    ├── signals/
    │   ├── Cargo.toml
    │   ├── README.md
    │   ├── docs/
    │   │   ├── hoist/
    │   │   │   ├── error.rs
    │   │   │   └── fixed_list.rs
    │   │   ├── memo.md
    │   │   └── signals.md
    │   ├── examples/
    │   │   ├── context.rs
    │   │   ├── dependencies.rs
    │   │   ├── map_signal.rs
    │   │   ├── read_only_degrade.rs
    │   │   ├── selector.rs
    │   │   ├── send.rs
    │   │   ├── send_store.rs
    │   │   └── split_subscriptions.rs
    │   ├── src/
    │   │   ├── boxed.rs
    │   │   ├── copy_value.rs
    │   │   ├── global/
    │   │   │   ├── memo.rs
    │   │   │   ├── mod.rs
    │   │   │   └── signal.rs
    │   │   ├── impls.rs
    │   │   ├── lib.rs
    │   │   ├── map.rs
    │   │   ├── map_mut.rs
    │   │   ├── memo.rs
    │   │   ├── props.rs
    │   │   ├── read.rs
    │   │   ├── set_compare.rs
    │   │   ├── signal.rs
    │   │   ├── warnings.rs
    │   │   └── write.rs
    │   └── tests/
    │       ├── create.rs
    │       ├── memo.rs
    │       └── subscribe.rs
    ├── ssr/
    │   ├── Cargo.toml
    │   ├── README.md
    │   ├── src/
    │   │   ├── cache.rs
    │   │   ├── config.rs
    │   │   ├── lib.rs
    │   │   ├── renderer.rs
    │   │   └── template.rs
    │   └── tests/
    │       ├── bool_attr.rs
    │       ├── escape.rs
    │       ├── forward_spreads.rs
    │       ├── hydration.rs
    │       ├── inner_html.rs
    │       ├── simple.rs
    │       ├── spread.rs
    │       └── styles.rs
    ├── stores/
    │   ├── Cargo.toml
    │   ├── README.md
    │   ├── src/
    │   │   ├── impls/
    │   │   │   ├── btreemap.rs
    │   │   │   ├── deref.rs
    │   │   │   ├── hashmap.rs
    │   │   │   ├── index.rs
    │   │   │   ├── mod.rs
    │   │   │   ├── option.rs
    │   │   │   ├── result.rs
    │   │   │   ├── slice.rs
    │   │   │   └── vec.rs
    │   │   ├── lib.rs
    │   │   ├── scope.rs
    │   │   ├── store.rs
    │   │   └── subscriptions.rs
    │   └── tests/
    │       ├── coercions.rs
    │       └── marco.rs
    ├── stores-macro/
    │   ├── Cargo.toml
    │   └── src/
    │       ├── derive.rs
    │       ├── extend.rs
    │       └── lib.rs
    ├── subsecond/
    │   ├── README.md
    │   ├── subsecond/
    │   │   ├── Cargo.toml
    │   │   └── src/
    │   │       └── lib.rs
    │   ├── subsecond-tests/
    │   │   ├── cross-tls-crate/
    │   │   │   ├── Cargo.toml
    │   │   │   └── src/
    │   │   │       └── lib.rs
    │   │   ├── cross-tls-crate-dylib/
    │   │   │   ├── Cargo.toml
    │   │   │   └── src/
    │   │   │       └── lib.rs
    │   │   └── cross-tls-test/
    │   │       ├── Cargo.toml
    │   │       ├── README.md
    │   │       └── src/
    │   │           └── main.rs
    │   └── subsecond-types/
    │       ├── Cargo.toml
    │       └── src/
    │           └── lib.rs
    ├── wasm-split/
    │   ├── README.md
    │   ├── wasm-split/
    │   │   ├── Cargo.toml
    │   │   └── src/
    │   │       └── lib.rs
    │   ├── wasm-split-cli/
    │   │   ├── Cargo.toml
    │   │   ├── data/
    │   │   │   └── .gitignore
    │   │   └── src/
    │   │       ├── __wasm_split.js
    │   │       ├── lib.rs
    │   │       └── main.rs
    │   ├── wasm-split-macro/
    │   │   ├── Cargo.toml
    │   │   └── src/
    │   │       └── lib.rs
    │   └── wasm-used/
    │       ├── Cargo.toml
    │       └── src/
    │           └── lib.rs
    └── web/
        ├── .gitignore
        ├── .vscode/
        │   └── settings.json
        ├── Cargo.toml
        ├── README.md
        ├── build.rs
        └── src/
            ├── cfg.rs
            ├── data_transfer.rs
            ├── devtools.rs
            ├── document.rs
            ├── dom.rs
            ├── events/
            │   ├── animation.rs
            │   ├── cancel.rs
            │   ├── clipboard.rs
            │   ├── composition.rs
            │   ├── drag.rs
            │   ├── file.rs
            │   ├── focus.rs
            │   ├── form.rs
            │   ├── keyboard.rs
            │   ├── load.rs
            │   ├── media.rs
            │   ├── mod.rs
            │   ├── mounted.rs
            │   ├── mouse.rs
            │   ├── pointer.rs
            │   ├── resize.rs
            │   ├── scroll.rs
            │   ├── selection.rs
            │   ├── toggle.rs
            │   ├── touch.rs
            │   ├── transition.rs
            │   ├── visible.rs
            │   └── wheel.rs
            ├── files.rs
            ├── history.rs
            ├── hydration/
            │   ├── hydrate.rs
            │   └── mod.rs
            ├── js/
            │   ├── eval.js
            │   └── hash.txt
            ├── launch.rs
            ├── lib.rs
            ├── mutations.rs
            └── ts/
                └── eval.ts

================================================
FILE CONTENTS
================================================

================================================
FILE: .devcontainer/Dockerfile
================================================
ARG VARIANT="nightly-bookworm-slim"
FROM rustlang/rust:${VARIANT}

ENV DEBIAN_FRONTEND=noninteractive

# Install required system libraries and NPM
# Reference: https://dioxuslabs.com/learn/0.7/beyond/contributing#before-you-contribute
RUN apt-get update -qq \
    && apt-get install -y -qq \
    libgdk3.0-cil \
    libatk1.0-dev \
    libcairo2-dev \
    libpango1.0-dev \
    libgdk-pixbuf2.0-dev \
    libsoup-3.0-dev \
    libjavascriptcoregtk-4.1-dev \
    libwebkit2gtk-4.1-dev \
    npm \
    && rm -rf /var/lib/apt/lists/*

# Set a shared folder for pre-installed browsers
ENV PLAYWRIGHT_BROWSERS_PATH=/ms-playwright

# Temporarily install Playwright globally to install the browsers and their dependencies
RUN npm install -g @playwright/test && \
    npx playwright install --with-deps && \
    npm uninstall -g @playwright/test


================================================
FILE: .devcontainer/README.md
================================================
# Dev Container

A dev container in the most simple context allows one to create a consistent development environment within a docker container that can easily be opened locally or remotely via codespaces such that contributors don't need to install anything to contribute.

## Useful Links

- <https://code.visualstudio.com/docs/devcontainers/containers>
- <https://containers.dev/>
- <https://github.com/devcontainers>
- <https://marketplace.visualstudio.com/items?itemName=ms-vscode-remote.remote-containers>

## Using A Dev Container

### Locally

To use this dev container locally, make sure Docker is installed and in VSCode install the `ms-vscode-remote.remote-containers` extension. Then from the root of Dioxus you can type `Ctrl + Shift + P`, then choose `Dev Containers: Rebuild and Reopen in Devcontainer`.

### Codespaces

[Codespaces Setup](https://docs.github.com/en/codespaces/developing-in-codespaces/creating-a-codespace-for-a-repository#creating-a-codespace-for-a-repository)

### Playwright Tests
The dev container comes with Playwright dependencies pre-installed.
You can run the tests located in `packages/playwright-tests` by using the VSCode extension or by executing commands such as:

```bash
# Run all tests
npx playwright test

# Run tests using the UI mode
npx playwright test --ui-host=0.0.0.0
```

## Troubleshooting

If having difficulty commiting with github, and you use ssh or gpg keys, you may need to ensure that the keys are being shared properly between your host and VSCode.

Though VSCode does a pretty good job sharing credentials between host and devcontainer, to save some time you can always just reopen the container locally to commit with `Ctrl + Shift + P`, then choose `Dev Containers: Reopen Folder Locally`


================================================
FILE: .devcontainer/devcontainer.json
================================================
{
    "name": "dioxus",
    "remoteUser": "vscode",
    "build": {
        "dockerfile": "./Dockerfile",
        "context": "."
    },
    "features": {
        "ghcr.io/devcontainers/features/common-utils:2": {
            "installZsh": "true",
            "username": "vscode",
            "uid": "1000",
            "gid": "1000",
            "upgradePackages": "true"
        }
    },
    "containerEnv": {
        "RUST_LOG": "INFO"
    },
    "customizations": {
        "vscode": {
            "settings": {
                "files.watcherExclude": {
                    "**/target/**": true
                },
                "[rust]": {
                    "editor.formatOnSave": true
                }
            },
            "extensions": [
                "rust-lang.rust-analyzer",
                "tamasfe.even-better-toml",
                "fill-labs.dependi",
                "ms-playwright.playwright"
            ]
        }
    }
}

================================================
FILE: .github/CODEOWNERS
================================================
# borrowed from tauri - only allow core maintainers to approve PRs

* @DioxusLabs/core

.github @DioxusLabs/core


================================================
FILE: .github/FUNDING.yml
================================================
# These are supported funding model platforms

github: DioxusLabs # Replace with up to 4 GitHub Sponsors-enabled usernames e.g., [user1, user2]
open_collective: dioxus-labs # Replace with a single Open Collective username


================================================
FILE: .github/ISSUE_TEMPLATE/bug_report.md
================================================
---
name: Bug report
about: Create a report to help us improve Dioxus
labels: bug
---

**Problem**

<!-- A clear and concise description of what the bug is. -->

**Steps To Reproduce**

Steps to reproduce the behavior:

- 
- 
- 

**Expected behavior**

<!-- A clear and concise description of what you expected to happen. -->

**Screenshots**

<!-- If applicable, add screenshots to help explain your problem. -->

**Environment:**

- Dioxus version:  <!-- e.g. v0.17, main -->
- Rust version:    <!-- e.g. 1.123.0, nightly -->
- OS info:         <!-- e.g. macOS, NixOS 25.05 -->
- App platform:    <!-- e.g. web, desktop -->

**Questionnaire**

<!-- If you feel up to the challenge, please uncomment applicable lines below: -->

<!-- I'm interested in fixing this myself but don't know where to start. -->
<!-- I would like to fix and I have a solution. -->
<!-- I don't have time to fix this right now, but maybe later. -->


================================================
FILE: .github/ISSUE_TEMPLATE/feature_requst.md
================================================
---
name: Feature Request
about: If you have any interesting advice, you can tell us.
labels: enhancement
---

## Feature Request

<!--
Describe the issue in detail and why we should add it. To help us out,
please poke through our issue tracker and make sure it's not a duplicate issue.
-->

## Implement Suggestion

<!--
If you have any suggestions on how to design this feature or any prior art,
list them here.
-->


================================================
FILE: .github/actions/free-disk-space/action.yml
================================================
name: Free Disk Space
description: Free up disk space on the runner
runs:
  using: composite
  steps:
  - name: Free Disk Space (Ubuntu)
    if: runner.os == 'Linux'
    shell: bash
    run: |
      echo "Freeing up disk space..."
      sudo rm -rf /opt/ghc
      sudo rm -rf /usr/share/dotnet
      sudo rm -rf /usr/local/lib/android
      sudo rm -rf /usr/share/swift
      sudo docker image prune --all --force || true




================================================
FILE: .github/dependabot.yml
================================================
version: 2
updates:

  # Maintain dependencies for GitHub Actions
  - package-ecosystem: "github-actions"
    directory: "/"
    schedule:
      interval: "weekly"


================================================
FILE: .github/install.ps1
================================================
#!/usr/bin/env pwsh

$ErrorActionPreference = 'Stop'

if ($v) {
  $Version = "v${v}"
}
if ($Args.Length -eq 1) {
  $Version = $Args.Get(0)
}

$DxInstall = $env:DX_INSTALL
$BinDir = if ($DxInstall) {
  "${DxInstall}\bin"
} else {
  "${Home}\.dx\bin"
}

$DxZip = "$BinDir\dx.zip"
$DxExe = "$BinDir\dx.exe"
$Target = 'x86_64-pc-windows-msvc'

$DownloadUrl = if (!$Version) {
    "https://github.com/dioxuslabs/dioxus/releases/latest/download/dx-${target}.zip"
} else {
    "https://github.com/dioxuslabs/dioxus/releases/download/${Version}/dx-${target}.zip"
}


if (!(Test-Path $BinDir)) {
  New-Item $BinDir -ItemType Directory | Out-Null
}

curl.exe --ssl-revoke-best-effort -Lo $DxZip $DownloadUrl

tar.exe xf $DxZip -C $BinDir

Remove-Item $DxZip

$CargoBin = "${Home}\.cargo\bin"

if (!(Test-Path $CargoBin)) {
    New-Item $CargoBin -ItemType Directory | Out-Null
}

Copy-Item $DxExe "$CargoBin\dx.exe" -Force

# $User = [System.EnvironmentVariableTarget]::User
# $Path = [System.Environment]::GetEnvironmentVariable('Path', $User)
# if (!(";${Path};".ToLower() -like "*;${BinDir};*".ToLower())) {
#   [System.Environment]::SetEnvironmentVariable('Path', "${Path};${BinDir}", $User)
#   $Env:Path += ";${BinDir}"
# }

Write-Output "dx was installed successfully! 💫"
Write-Output "Run 'dx --help' to get started"


================================================
FILE: .github/install.sh
================================================
#!/bin/sh
set -eo pipefail

# Reset
Color_Off=''

# Regular Colors
Red=''
Green=''
Dim='' # White

# Bold
Bold_White=''
Bold_Green=''

if [ -t 1 ]; then
    # Reset
    Color_Off='\033[0m' # Text Reset

    # Regular Colors
    Red='\033[0;31m'   # Red
    Green='\033[0;32m' # Green
    Dim='\033[0;2m'    # White

    # Bold
    Bold_Green='\033[1;32m' # Bold Green
    Bold_White='\033[1m'    # Bold White
fi

error() {
    printf "${Red}error${Color_Off}: %s\n" "$*" >&2
    exit 1
}

info() {
    printf "${Dim}%s ${Color_Off}\n" "$*"
}

info_bold() {
    printf "${Bold_White}%s ${Color_Off}\n" "$*"
}

success() {
    printf "${Green}%s ${Color_Off}\n" "$*"
}

command -v unzip >/dev/null ||
    error 'unzip is required to install dx'

if [ $# -gt 2 ]; then
    error 'Too many arguments, only 2 are allowed. The first can be a specific tag of dx to install. (e.g. "dx-v0.7.1") or `nightly` or `pr <PR_NUMBER>` to install the latest nightly or PR build.'
fi

if [ "$OS" = "Windows_NT" ]; then
    target="x86_64-pc-windows-msvc"
else
    case $(uname -sm) in
    "Darwin x86_64") target="x86_64-apple-darwin" ;;
    "Darwin arm64") target="aarch64-apple-darwin" ;;
    "Linux aarch64")
        if [ -f /etc/alpine-release ]; then
            target="aarch64-unknown-linux-musl"
        else
            target="aarch64-unknown-linux-gnu"
        fi
        ;;
    *)
        if [ -f /etc/alpine-release ]; then
            target="x86_64-unknown-linux-musl"
        else
            target="x86_64-unknown-linux-gnu"
        fi
        ;;
    esac
fi

GITHUB=${GITHUB-"https://github.com"}
github_repo="$GITHUB/dioxuslabs/dioxus"
exe_name=dx

if [ $# = 0 ]; then
    dx_uri=$github_repo/releases/latest/download/dx-$target.zip
else
    dx_uri=$github_repo/releases/download/$1/dx-$target.zip
fi

if [ -n "$DX_INSTALL" ]; then
    dx_install="$DX_INSTALL"
elif [ -n "$XDG_DATA_HOME" ]; then
    dx_install="$XDG_DATA_HOME/dx"
else
    dx_install="$HOME/.dx"
fi
bin_dir="$dx_install/bin"
exe="$bin_dir/dx"
cargo_bin_dir="${CARGO_HOME:-$HOME/.cargo}/bin"
cargo_bin_exe="$cargo_bin_dir/dx"

if [ ! -d "$bin_dir" ]; then
	mkdir -p "$bin_dir"
fi

curl --fail --location --progress-bar --output "$exe.zip" "$dx_uri"
if command -v unzip >/dev/null; then
	unzip -d "$bin_dir" -o "$exe.zip"
else
	7z x -o"$bin_dir" -y "$exe.zip"
fi
chmod +x "$exe"
cp "$exe" "$cargo_bin_exe" || error "Failed to copy dx to $cargo_bin_dir"
rm "$exe.zip"
echo "  installed: $cargo_bin_exe"

echo
echo "dx was installed successfully! 💫"
echo

if command -v dx >/dev/null; then
	echo "Run 'dx --help' to get started"
else
	echo "Run '$exe --help' to get started"
fi


================================================
FILE: .github/workflows/main.yml
================================================
# Whenever an open PR is updated, the workflow will be triggered
#
# This can get expensive, so we do a lot of caching and checks to prevent unnecessary runs

name: Rust CI

on:
  push:
    branches:
      - main
    paths:
      - packages/**
      - examples/**
      - docs/guide/**
      - src/**
      - .github/**
      - lib.rs
      - Cargo.toml
      - Makefile.toml

  pull_request:
    types: [opened, synchronize, reopened, ready_for_review]
    branches:
      - main
    paths:
      - packages/**
      - examples/**
      - src/**
      - .github/**
      - lib.rs
      - Cargo.toml

# workflow_dispatch:
concurrency:
  group: ${{ github.workflow }}-${{ github.event.pull_request.number || github.ref }}
  cancel-in-progress: true

env:
  CARGO_TERM_COLOR: always
  CARGO_INCREMENTAL: 0 # todo(jon): cargo-cache wipes incremental artifacts, but we eventually want to cache them
  RUST_BACKTRACE: 1
  rust_nightly: nightly-2025-10-05

jobs:
  check-msrv:
    if: github.event.pull_request.draft == false
    name: Check MSRV
    runs-on: blacksmith-4vcpu-ubuntu-2404
    steps:
      - uses: actions/checkout@v5
      - uses: dtolnay/rust-toolchain@1.88.0
      - uses: Swatinem/rust-cache@v2
        with:
          cache-all-crates: "true"
      # https://github.com/foresterre/cargo-msrv/blob/4345edfe3f4fc91cc8ae6c7d6804c0748fae92ae/.github/workflows/msrv.yml
      - name: install_cargo_msrv
        run: cargo install cargo-msrv --all-features --version 0.16.3 --locked
      - name: version_of_cargo_msrv
        run: cargo msrv --version
      - name: run_cargo_msrv
        run: cargo msrv --output-format json verify -- cargo check
      - name: run_cargo_msrv_on_verify_failure
        if: ${{ failure() }}
        run: cargo msrv --output-format json -- cargo check

  test:
    if: github.event.pull_request.draft == false
    name: Test Suite
    runs-on: blacksmith-4vcpu-ubuntu-2404
    steps:
      - uses: actions/checkout@v5
      - name: Free Disk Space
        uses: ./.github/actions/free-disk-space
      - uses: awalsh128/cache-apt-pkgs-action@latest
        with:
          packages: libwebkit2gtk-4.1-dev libgtk-3-dev libasound2-dev libudev-dev libayatana-appindicator3-dev libxdo-dev libglib2.0-dev
          version: 1.0
      - uses: dtolnay/rust-toolchain@1.88.0
        with:
          components: rustfmt, clippy
      - uses: Swatinem/rust-cache@v2
        with:
          cache-all-crates: "true"
      - uses: browser-actions/setup-firefox@latest
      - run: cargo test --lib --bins --tests --examples --workspace --exclude dioxus-desktop

  release-test:
    if: github.event.pull_request.draft == false
    name: Test Suite with Optimizations
    runs-on: blacksmith-4vcpu-ubuntu-2404
    steps:
      - uses: actions/checkout@v5
      - name: Free Disk Space
        uses: ./.github/actions/free-disk-space
      - uses: awalsh128/cache-apt-pkgs-action@latest
        with:
          packages: libwebkit2gtk-4.1-dev libgtk-3-dev libasound2-dev libudev-dev libayatana-appindicator3-dev libxdo-dev libglib2.0-dev
          version: 1.0
      - uses: dtolnay/rust-toolchain@1.88.0
        with:
          components: rustfmt, clippy
      - uses: Swatinem/rust-cache@v2
        with:
          cache-all-crates: "true"
      - uses: browser-actions/setup-firefox@latest
      - run: cargo test --lib --bins --tests --examples --workspace --exclude dioxus-desktop --profile release-unoptimized

  fmt:
    if: github.event.pull_request.draft == false
    name: Rustfmt
    runs-on: blacksmith-4vcpu-ubuntu-2404
    steps:
      - uses: actions/checkout@v5
      - uses: dtolnay/rust-toolchain@1.88.0
        with:
          components: rustfmt
      - uses: Swatinem/rust-cache@v2
        with:
          cache-all-crates: "true"
      - run: cargo fmt --all -- --check

  schema:
    if: github.event.pull_request.draft == false
    name: Check Schema
    runs-on: blacksmith-4vcpu-ubuntu-2404
    steps:
      - uses: actions/checkout@v5
      - uses: dtolnay/rust-toolchain@1.88.0
      - uses: Swatinem/rust-cache@v2
        with:
          cache-all-crates: "true"
      - name: Generate schema
        run: cargo run -p dioxus-cli -- config schema --out packages/cli/schema.json
      - name: Check for uncommitted changes
        run: |
          if ! git diff --exit-code packages/cli/schema.json; then
            echo "::error::Schema is out of date. Run 'dx config schema --out packages/cli/schema.json' and commit the changes."
            exit 1
          fi

  docs:
    if: github.event.pull_request.draft == false
    name: Docs
    runs-on: blacksmith-4vcpu-ubuntu-2404
    steps:
      - uses: actions/checkout@v5
      - uses: awalsh128/cache-apt-pkgs-action@latest
        with:
          packages: libwebkit2gtk-4.1-dev libgtk-3-dev libasound2-dev libudev-dev libayatana-appindicator3-dev libxdo-dev libglib2.0-dev
          version: 1.0
      - name: Install Rust ${{ env.rust_nightly }}
        uses: dtolnay/rust-toolchain@nightly
        with:
          toolchain: ${{ env.rust_nightly }}
      - uses: Swatinem/rust-cache@v2
        with:
          cache-all-crates: "true"
      - name: "doc --lib --all-features"
        run: |
          cargo doc --workspace --no-deps --all-features --document-private-items
        env:
          RUSTDOCFLAGS: -Dwarnings --document-private-items

  test-docs:
    if: github.event.pull_request.draft == false
    name: Test Docs
    runs-on: blacksmith-4vcpu-ubuntu-2404
    steps:
      - uses: actions/checkout@v5
      - uses: awalsh128/cache-apt-pkgs-action@latest
        with:
          packages: libwebkit2gtk-4.1-dev libgtk-3-dev libasound2-dev libudev-dev libayatana-appindicator3-dev libxdo-dev libglib2.0-dev
          version: 1.0
      - name: Install Rust ${{ env.rust_nightly }}
        uses: dtolnay/rust-toolchain@nightly
        with:
          toolchain: ${{ env.rust_nightly }}
      - uses: Swatinem/rust-cache@v2
        with:
          cache-all-crates: "true"
      - name: "doc --lib --all-features"
        run: |
          cargo test --doc --workspace --all-features

  check:
    if: github.event.pull_request.draft == false
    name: Check
    runs-on: blacksmith-4vcpu-ubuntu-2404
    steps:
      - uses: actions/checkout@v5
      - uses: awalsh128/cache-apt-pkgs-action@latest
        with:
          packages: libwebkit2gtk-4.1-dev libgtk-3-dev libasound2-dev libudev-dev libayatana-appindicator3-dev libxdo-dev libglib2.0-dev
          version: 1.0
      - uses: dtolnay/rust-toolchain@1.88.0
      - uses: Swatinem/rust-cache@v2
        with:
          cache-all-crates: "true"
      - run: cargo check --workspace --all-features --all-targets

  clippy:
    if: github.event.pull_request.draft == false
    name: Clippy
    runs-on: blacksmith-4vcpu-ubuntu-2404
    steps:
      - uses: actions/checkout@v5
      - uses: awalsh128/cache-apt-pkgs-action@latest
        with:
          packages: libwebkit2gtk-4.1-dev libgtk-3-dev libasound2-dev libudev-dev libayatana-appindicator3-dev libxdo-dev libglib2.0-dev
          version: 1.0
      - uses: dtolnay/rust-toolchain@1.90.0
        with:
          components: rustfmt, clippy
      - uses: Swatinem/rust-cache@v2
        with:
          cache-all-crates: "true"
      - run: cargo clippy --workspace --examples --tests --all-features --all-targets -- -D warnings

  nix:
    if: github.event.pull_request.draft == false
    runs-on: ${{ matrix.os }}
    strategy:
      matrix:
        os: [blacksmith-4vcpu-ubuntu-2404, macos-latest]
    steps:
      - uses: actions/checkout@v5
      - uses: nixbuild/nix-quick-install-action@master
      - uses: nix-community/cache-nix-action@main
        with:
          primary-key: nix-${{ runner.os }}-${{ runner.arch }}-${{ hashFiles('**/*.nix', '**/flake.lock') }}
          restore-prefixes-first-match: nix-${{ runner.os }}-${{ runner.arch }}
      - name: Install omnix
        run: nix --accept-flake-config profile install "github:juspay/omnix"
      - name: Build all flake outputs
        run: om ci
      - name: Ensure devShell has all build deps
        run: nix develop -c cargo build -p dioxus-cli --features no-downloads

  playwright:
    if: github.event.pull_request.draft == false
    name: Playwright Tests
    runs-on: ${{ matrix.os }}
    timeout-minutes: 45
    strategy:
      matrix:
        os: [blacksmith-4vcpu-windows-2025, blacksmith-8vcpu-ubuntu-2404]
        platform:
          - { toolchain: beta }
          # - { toolchain: 1.86.0 }
    steps:
      # Do our best to cache the toolchain and node install steps
      - uses: actions/checkout@v5
      - name: Free Disk Space
        if: ${{ matrix.os == 'ubuntu-24.04' || matrix.os == 'ubuntu-24.04-arm' || matrix.os == 'blacksmith-4vcpu-ubuntu-2404' || matrix.os == 'blacksmith-4vcpu-ubuntu-2404-arm' || matrix.os == 'blacksmith-8vcpu-ubuntu-2404' }}
        uses: ./.github/actions/free-disk-space
      - uses: awalsh128/cache-apt-pkgs-action@latest
        if: ${{ matrix.os == 'ubuntu-24.04' || matrix.os == 'ubuntu-24.04-arm' || matrix.os == 'blacksmith-4vcpu-ubuntu-2404' || matrix.os == 'blacksmith-4vcpu-ubuntu-2404-arm' || matrix.os == 'blacksmith-8vcpu-ubuntu-2404' }}
        with:
          packages: glib-networking glib-networking-common glib-networking-services libaa1 libabsl20220623t64 libass9 libasyncns0 libavc1394-0 libavcodec60 libavfilter9 libavformat60 libavtp0 libavutil58 libblas3 libbluray2 libbs2b0 libcaca0 libcairo-script-interpreter2 libcdparanoia0 libchromaprint1 libcjson1 libcodec2-1.2 libdav1d7 libdc1394-25 libdca0 libdecor-0-0 libdirectfb-1.7-7t64 libdv4t64 libdvdnav4 libdvdread8t64 libfaad2 libflac12t64 libfluidsynth3 libfreeaptx0 libgav1-1 libgme0 libgraphene-1.0-0 libgsm1 libgssdp-1.6-0 libgstreamer-plugins-good1.0-0 libgtk-4-common libgupnp-1.6-0 libgupnp-igd-1.6-0 libhwy1t64 libiec61883-0 libimath-3-1-29t64 libinstpatch-1.0-2 libjack-jackd2-0 libjxl0.7 liblapack3 liblc3-1 libldacbt-enc2 liblilv-0-0 liblrdf0 libltc11 libmbedcrypto7t64 libmfx1 libmjpegutils-2.1-0t64 libmodplug1 libmp3lame0 libmpcdec6 libmpeg2encpp-2.1-0t64 libmpg123-0t64 libmplex2-2.1-0t64 libmysofa1 libneon27t64 libnice10 libogg0 libopenal-data libopenal1 libopenexr-3-1-30 libopenh264-7 libopenmpt0t64 libopenni2-0 liborc-0.4-0t64 libpipewire-0.3-0t64 libplacebo338 libpocketsphinx3 libpostproc57 libproxy1v5 libpulse0 libqrencode4 libraptor2-0 librav1e0 libraw1394-11 librist4 librubberband2 libsamplerate0 libsbc1 libsdl2-2.0-0 libsecret-common libserd-0-0 libshine3 libshout3 libsndfile1 libsndio7.0 libsord-0-0 libsoundtouch1 libsoup-3.0-0 libsoup-3.0-common libsoxr0 libspa-0.2-modules libspandsp2t64 libspeex1 libsphinxbase3t64 libsratom-0-0 libsrt1.5-gnutls libsrtp2-1 libssh-gcrypt-4 libsvtav1enc1d1 libswresample4 libswscale7 libtag1v5 libtag1v5-vanilla libtheora0 libtwolame0 libudfread0 libunibreak5 libv4l-0t64 libv4lconvert0t64 libva-drm2 libva-x11-2 libva2 libvdpau1 libvidstab1.1 libvisual-0.4-0 libvo-aacenc0 libvo-amrwbenc0 libvorbis0a libvorbisenc2 libvorbisfile3 libvpl2 libwavpack1 libwebrtc-audio-processing1 libwildmidi2 libx265-199 libxcb-xkb1 libxkbcommon-x11-0 libcups2t64 libxml2 libxml2-dev libxvidcore4 libyuv0 libzbar0t64 libzimg2 libzix-0-0 libzvbi-common libzvbi0t64 libzxing3 ocl-icd-libopencl1 timgm6mb-soundfont xfonts-encodings xfonts-utils binutils lld binutils-devel binutils-gold fonts-freefont-ttf fonts-ipafont-gothic fonts-tlwg-loma-otf fonts-unifont fonts-wqy-zenhei gstreamer1.0-libav gstreamer1.0-plugins-bad gstreamer1.0-plugins-good libavif16 libevent-2.1-7t64 libgstreamer-plugins-bad1.0-0 libharfbuzz-icu0 libhyphen0 libmanette-0.2-0 libsecret-1-0 libwoff1 xfonts-cyrillic xfonts-scalable fonts-ipafont-mincho fonts-tlwg-loma gstreamer1.0-x
          version: 1.0
      - uses: actions/setup-node@v4
        with:
          node-version: 24
      - name: Install Rust
        uses: dtolnay/rust-toolchain@master
        with:
          toolchain: ${{ matrix.platform.toolchain }}
          targets: x86_64-unknown-linux-gnu,wasm32-unknown-unknown
      - uses: Swatinem/rust-cache@v2
        with:
          key: "playwright-${{ matrix.platform.toolchain }}-${{ runner.os }}"
          cache-all-crates: "true"
          cache-on-failure: "true"
      - name: Wipe dx cache
        if: ${{ matrix.os == 'ubuntu-24.04' || matrix.os == 'ubuntu-24.04-arm' || matrix.os == 'blacksmith-4vcpu-ubuntu-2404' || matrix.os == 'blacksmith-4vcpu-ubuntu-2404-arm' || matrix.os == 'blacksmith-8vcpu-ubuntu-2404' }}
        run: |
          rm -rf ./target/dx
      - name: Playwright
        working-directory: ./packages/playwright-tests
        env:
          # The hot patch test requires incremental compilation
          CARGO_INCREMENTAL: 1
        run: |
          npm ci
          npm install -D @playwright/test
          npx playwright install
          npx playwright test
      - uses: actions/upload-artifact@v6
        if: always()
        with:
          name: playwright-report-${{ matrix.platform.toolchain }}-${{ runner.os }}
          path: ./packages/playwright-tests/playwright-report/
          retention-days: 30

  matrix_test:
    runs-on: ${{ matrix.platform.os }}
    if: github.event.pull_request.draft == false
    env:
      RUST_CARGO_COMMAND: ${{ matrix.platform.cross == true && 'cross' || 'cargo' }}
    strategy:
      matrix:
        platform:
          - {
              target: aarch64-apple-darwin,
              os: macos-latest,
              toolchain: "1.88.0",
              cross: false,
              command: "test",
              args: "--all --tests",
              platform: "desktop",
            }
          - {
              target: aarch64-apple-ios,
              os: macos-latest,
              toolchain: "1.88.0",
              cross: false,
              command: "build",
              args: "--package dioxus-desktop",
              platform: "ios",
            }
          - {
              target: aarch64-unknown-linux-gnu,
              os: ubuntu-24.04-arm,
              toolchain: "1.88.0",
              cross: false,
              command: "build",
              args: "--all --tests",
              platform: "desktop",
            }
          - {
              target: aarch64-linux-android,
              os: blacksmith-4vcpu-ubuntu-2404,
              toolchain: "1.88.0",
              cross: true,
              command: "build",
              args: "--package dioxus-desktop",
              platform: "android",
            }
            # commented out because it's having issues with space on the device, but we already test it above
          # - {
          #     target: x86_64-unknown-linux-gnu,
          #     os: ubuntu-24.04,
          #     toolchain: "1.88.0",
          #     cross: false,
          #     command: "build",
          #     args: "--all --tests",
          #     platform: "desktop",
          #   }

    steps:
      - uses: actions/checkout@v5
      - name: Free Disk Space
        if: ${{ matrix.platform.os == 'ubuntu-24.04' || matrix.platform.os == 'ubuntu-24.04-arm' || matrix.platform.os == 'blacksmith-4vcpu-ubuntu-2404' || matrix.platform.os == 'blacksmith-4vcpu-ubuntu-2404-arm' }}
        uses: ./.github/actions/free-disk-space

      - uses: awalsh128/cache-apt-pkgs-action@latest
        if: ${{ matrix.platform.os == 'ubuntu-24.04' || matrix.platform.os == 'ubuntu-24.04-arm' || matrix.platform.os == 'blacksmith-4vcpu-ubuntu-2404' || matrix.platform.os == 'blacksmith-4vcpu-ubuntu-2404-arm' }}
        with:
          packages: libwebkit2gtk-4.1-dev libgtk-3-dev libasound2-dev libudev-dev libayatana-appindicator3-dev libxdo-dev libglib2.0-dev
          version: ${{ matrix.platform.target }}-${{ matrix.platform.os }} # disambiguate since we're in a matrix and this caching action doesn't factor in these variables

      - name: install stable
        uses: dtolnay/rust-toolchain@master
        with:
          toolchain: ${{ matrix.platform.toolchain }}
          targets: ${{ matrix.platform.target }}
          components: rustfmt

      - name: Install nasm for windows (tls)
        if: ${{ matrix.platform.target == 'x86_64-pc-windows-msvc' }}
        uses: ilammy/setup-nasm@v1

      - name: Install cross
        if: ${{ matrix.platform.cross == true }}
        uses: taiki-e/install-action@cross

      - uses: Swatinem/rust-cache@v2
        with:
          key: "matrix-${{ matrix.platform.target }}"
          cache-all-crates: "true"

      - name: test
        run: |
          ${{ env.RUST_CARGO_COMMAND }} ${{ matrix.platform.command }} ${{ matrix.platform.args }} --target ${{ matrix.platform.target }}

  # borrowed from uv
  # https://raw.githubusercontent.com/astral-sh/uv/refs/heads/main/.github/workflows/ci.yml
  cargo-test-windows:
    if: github.event.pull_request.draft == false
    runs-on:
      labels: "blacksmith-4vcpu-windows-2025"
    name: "cargo test | windows"
    steps:
      - uses: actions/checkout@v5
      - uses: dtolnay/rust-toolchain@1.88.0
        with:
          components: rustfmt, clippy
      - uses: Swatinem/rust-cache@v2
        with:
          workspaces: ${{ env.UV_WORKSPACE }}
          cache-all-crates: "true"

      - name: "Install Rust toolchain"
        working-directory: ${{ env.UV_WORKSPACE }}
        run: rustup show

      - name: "Cargo test"
        working-directory: ${{ env.UV_WORKSPACE }}
        run: |
          cargo test --workspace --tests


================================================
FILE: .github/workflows/merge.yml
================================================
# Runs whenever a PR is merged:
# - attempt to backports fixes
# - upload nightly docs
#
# Future:
# - upload nightly CLI builds
# - upload nightly vscode extension
# - upload benchmarks
# - compute coverge
#
# Note that direct commits to master circumvent this workflow!

name: Backport merged pull request
on:
  pull_request_target:
    types: [closed]

permissions:
  contents: write # so it can comment
  pull-requests: write # so it can create pull requests

jobs:
  # Attempt to backport a merged pull request to the latest stable release
  backport:
    name: Backport pull request
    runs-on: blacksmith-4vcpu-ubuntu-2404

    # Don't run on closed unmerged pull requests, or pull requests with the "breaking" label
    if: github.event.pull_request.merged && !contains(github.event.pull_request.labels.*.name, 'breaking')
    steps:
      - uses: actions/checkout@v5
      - name: Create backport pull requests
        uses: korthout/backport-action@v3

  # Upload nightly docs to the website
  docs:
    runs-on: blacksmith-4vcpu-ubuntu-2404
    permissions:
      contents: write
    steps:
      - uses: actions/checkout@v5
      - run: sudo apt-get update
      - run: sudo apt install libwebkit2gtk-4.1-dev libgtk-3-dev libayatana-appindicator3-dev libxdo-dev libglib2.0-dev
      - uses: dtolnay/rust-toolchain@nightly
        with:
          toolchain: nightly-2024-02-01
      - uses: Swatinem/rust-cache@v2
        with:
          cache-all-crates: "true"
          save-if: ${{ github.ref == 'refs/heads/main' }}

      - name: cargo doc
        run: cargo doc --no-deps --workspace --all-features

      - name: Deploy
        uses: JamesIves/github-pages-deploy-action@v4.7.3
        with:
          branch: gh-pages
          folder: target/doc
          target-folder: api-docs/nightly
          repository-name: dioxuslabs/docsite
          clean: false
          token: ${{ secrets.DEPLOY_KEY }}
# Attempt to backport a merged pull request to the latest stable release
#
# If the backported PR is succesfully merged
# Any PR without the "breaking" label will be attempted to be backported to the latest stable release

# Coverage is disabled until we can fix it
# coverage:
#   name: Coverage
#   runs-on: ubuntu-latest
#   container:
#     image: xd009642/tarpaulin:develop-nightly
#     options: --security-opt seccomp=unconfined
#   steps:
#     - name: Checkout repository
#       uses: actions/checkout@v5
#     - name: Generate code coverage
#       run: |
#         apt-get update &&\
#         apt-get install build-essential &&\
#         apt install libwebkit2gtk-4.0-dev libgtk-3-dev libayatana-appindicator3-dev -y &&\
#         cargo +nightly tarpaulin --verbose --all-features --workspace --timeout 120 --out Xml
#     - name: Upload to codecov.io
#       uses: codecov/codecov-action@v2
#       with:
#         fail_ci_if_error: false


================================================
FILE: .github/workflows/promote.yml
================================================
# Promote the current main branch to a stable release.
# This will not actually release anything, so you need to run the release workflow after this.
#
# IE if the current master version is 0.4.0-rc.7, this will create a PR to promote it to 0.4.0
#
# - update the version in the Cargo.toml to v0.4.0
# - generate a v0.4 branch
# - push the branch to the repository
# - then bump 0.4.0-rc.1 to 0.5.0-rc.0
#
# This means main will never be a "stable" release, and we can always merge breaking changes to main
# and backport them to the latest stable release
#
# This is configured to be ran manually, but could honestly just be a release workflow

name: Promote main to stable branch
on:
  workflow_dispatch:

permissions:
  actions: write

jobs:
  promote:
    runs-on: blacksmith-4vcpu-ubuntu-2404
    steps:
      - uses: actions/checkout@v5
      - name: Publish the next pre-release
        run: |
          git config --global user.email "github-actions[bot]@users.noreply.github.com"
          git config --global user.name "github-actions[bot]"

          # go from eg 0.4.0-rc.7 to 0.4.0, committing the change
          cargo workspaces version -y minor

          # create a new branch for the release
          RELEASE_BRANCH=$(cargo metadata --no-deps --format-version 1 | jq -r '.packages[0].version')
          RELEASE_BRANCH=v$(echo $RELEASE_BRANCH | sed 's/\.[0-9]*$//')
          git branch $RELEASE_BRANCH

          # go from 0.4.0 to 0.5.0-rc.0
          cargo workspaces version -y preminor --pre-id rc

          # push the new branch to the repository
          git push origin $RELEASE_BRANCH

          # push the new version to the repository
          git push origin main


================================================
FILE: .github/workflows/publish.yml
================================================
# Release workflow
#
# We parallelize builds, dump all the artifacts into a release, and then publish the release
# This guarantees everything is properly built and cached in case anything goes wrong
#
# The artifacts also need to get pushed to the various places
# - the CLI goes to the releases page for binstall
# - the extension goes to the marketplace
# - the docs go to the website
#
# We need to be aware of the channel we're releasing
# - prerelease is master
# - stable is whatever the latest stable release is (ie 0.4 or 0.5 or 0.6 etc)
#
# It's intended that this workflow is run manually, and only when we're ready to release

name: Publish CLI
on:
  workflow_dispatch:
    inputs:
      post:
        name: "Release Post"
        required: true
        description: Choose the release post to publish with. Must be a tag (eg v0.4.0)
        type: string
      channel:
        name: "CLI Binary Version"
        required: true
        description: Choose the version number to publish with. Must be a tag (ie v0.4.0)
        type: string

env:
  # make sure we have the right version
  # main is always a prepatch until we hit 1.0, and then this script needs to be updated
  # note that we need to promote the prepatch to a minor bump when we actually do a release
  # this means the version in git will always be one minor bump ahead of the actual release - basically meaning once
  # we release a version, it's fair game to merge breaking changes to main since all semver-compatible changes will be
  # backported automatically
  # SEMVER: ${{ github.event.inputs.channel == 'main' && 'prerelease' || 'patch' }}
  # PRERELEASE_TAG: ${{ github.event.inputs.channel == 'main' && '-pre' || '' }}
  RELEASE_TAG: ${{ github.event.inputs.channel }}
  RELEASE_POST: ${{ github.event.inputs.post }}

jobs:
  release-cli:
    permissions:
      contents: write
    runs-on: ${{ matrix.platform.os }}
    strategy:
      matrix:
        platform:
          - target: x86_64-pc-windows-msvc
            os: windows-latest
          - target: aarch64-pc-windows-msvc
            os: windows-latest
          - target: x86_64-apple-darwin
            os: macos-15-intel
          - target: aarch64-apple-darwin
            os: macos-latest
          - target: x86_64-unknown-linux-gnu
            os: ubuntu-24.04
          - target: aarch64-unknown-linux-gnu
            os: ubuntu-24.04-arm
          # os: blacksmith-4vcpu-ubuntu-2404
          # os: blacksmith-4vcpu-ubuntu-2404
          # - target: x86_64-unknown-linux-musl
          #   os: ubuntu-24.04
          # - target: aarch64-unknown-linux-musl
          #   os: ubuntu-24.04-arm
    steps:
      - name: Checkout
        uses: actions/checkout@v5

      - name: Install openssl on macos
        if: matrix.platform.os == 'macos-latest'
        run: brew install openssl

      - name: Install nasm for windows (tls)
        if: ${{ matrix.platform.target == 'x86_64-pc-windows-msvc' }}
        uses: ilammy/setup-nasm@v1

      - name: Free Disk Space
        if: ${{ matrix.platform.os == 'ubuntu-24.04' || matrix.platform.os == 'ubuntu-24.04-arm' }}
        uses: ./.github/actions/free-disk-space

      - uses: awalsh128/cache-apt-pkgs-action@latest
        if: ${{ matrix.platform.os == 'ubuntu-24.04' || matrix.platform.os == 'ubuntu-24.04-arm' }}
        with:
          packages: libwebkit2gtk-4.1-dev libgtk-3-dev libayatana-appindicator3-dev libxdo-dev libglib2.0-dev musl-tools
          version: 1.0

      - name: Install stable
        uses: dtolnay/rust-toolchain@master
        with:
          toolchain: "1.88.0"
          targets: ${{ matrix.platform.target }}

      - uses: Swatinem/rust-cache@v2
        with:
          cache-all-crates: "true"
          save-if: ${{ github.ref == 'refs/heads/main' }}

      - name: Free Disk Space
        uses: jlumbroso/free-disk-space@v1.3.1
        with: # speed things up a bit
          large-packages: false
          docker-images: false
          swap-storage: false

      # Todo: we want `cargo install dx` to actually just use a prebuilt binary instead of building it
      - name: Build and upload CLI binaries
        uses: taiki-e/upload-rust-binary-action@v1
        with:
          bin: dx
          token: ${{ secrets.GITHUB_TOKEN }}
          target: ${{ matrix.platform.target }}
          archive: $bin-$target
          checksum: sha256
          manifest_path: packages/cli/Cargo.toml
          ref: refs/tags/${{ env.RELEASE_POST }}
          zip: "all"

  # todo: these things
  # Run benchmarks, which we'll use to display on the website
  # release-benchmarks:
  # Build the vscode extension, uploading the artifact to the marketplace
  # release-extension:

  # First, run checks (clippy, tests, etc) and then publish the crates to crates.io
  # release-crates:
  #   steps:
  #     # Checkout the right branch, and the nightly stuff
  #     - uses: actions/checkout@v5
  #       ref: ${{ github.event.inputs.channel }}
  #     - run: sudo apt-get update
  #     - run: sudo apt install libwebkit2gtk-4.1-dev libgtk-3-dev libayatana-appindicator3-dev libxdo-dev libglib2.0-dev
  #     - uses: dtolnay/rust-toolchain@nightly
  #       with:
  #         toolchain: nightly-2024-02-01
  #     - uses: Swatinem/rust-cache@v2
  #       with:
  #         cache-all-crates: "true"

  #     - name: Free Disk Space (Ubuntu)
  #       uses: jlumbroso/free-disk-space@v1.3.1
  #       with: # speed things up a bit
  #         large-packages: false
  #         docker-images: false
  #         swap-storage: false

  #     # Just make sure clippy is happy before doing anything else
  #     # Don't publish versions with clippy errors!
  #     - name: Clippy
  #       run: cargo clippy --workspace --all --examples --tests --all-features --all-targets -- -D warnings

  #     # Build the docs here too before publishing, to ensure they're up to date
  #     - name: cargo doc
  #       run: cargo doc --no-deps --workspace --all-features

  #     - name: Publish to crates.io
  #       run: |
  #         git config --global user.email "github-actions[bot]@users.noreply.github.com"
  #         git config --global user.name "github-actions[bot]"
  #         cargo workspaces version -y ${{ env.SEMVER }} --pre-id rc --no-git-commit

  #         # todo: actually just publish!
  #         # cargo workspaces publish -y ${{ github.event.inputs.semver }}

  # this will be more useful when we publish the website with updated docs
  # Build the docs.rs docs and publish them to the website under the right folder
  # v0.4.x -> docs/0.4
  # v0.5.x -> docs/0.5 etc
  # main -> docs/nightly
  # strip the v from the channel, and the .x from the end, and replace main with nightly
  # - name: determine docs folder by channel
  #   id: determine_docs_folder
  #   run: echo "::set-output name=folder::$(echo ${{ github.event.inputs.channel }} | sed 's/v//g' | sed 's/\.x//g' | sed 's/main/nightly/g')"


================================================
FILE: .github/workflows/setup-dev-drive.ps1
================================================
# This creates a 20GB dev drive, and exports all required environment
# variables so that rustup, uv and others all use the dev drive as much
# as possible.
$Volume = New-VHD -Path C:/uv_dev_drive.vhdx -SizeBytes 20GB |
					Mount-VHD -Passthru |
					Initialize-Disk -Passthru |
					New-Partition -AssignDriveLetter -UseMaximumSize |
					Format-Volume -FileSystem ReFS -Confirm:$false -Force

Write-Output $Volume

$Drive = "$($Volume.DriveLetter):"
$Tmp = "$($Drive)/uv-tmp"

# Create the directory ahead of time in an attempt to avoid race-conditions
New-Item $Tmp -ItemType Directory

Write-Output `
	"DEV_DRIVE=$($Drive)" `
	"TMP=$($Tmp)" `
	"TEMP=$($Tmp)" `
	"RUSTUP_HOME=$($Drive)/.rustup" `
	"CARGO_HOME=$($Drive)/.cargo" `
	"UV_WORKSPACE=$($Drive)/uv" `
	"PATH=$($Drive)/.cargo/bin;$env:PATH" `
	>> $env:GITHUB_ENV

================================================
FILE: .github/workflows/typos.yml
================================================
# Whenever an open PR is updated, the workflow will be triggered

name: Language Linting

on:
  push:
    branches:
      - main

  pull_request:
    types: [opened, synchronize, reopened, ready_for_review]
    branches:
      - main

jobs:
  typos:
    if: github.event.pull_request.draft == false
    name: Check for typos
    runs-on: blacksmith-4vcpu-ubuntu-2404
    steps:
      - uses: actions/checkout@v5
      - name: Check for typos
        uses: crate-ci/typos@master

  # Check for invalid links in the repository
  link-check:
    if: github.event.pull_request.draft == false
    name: Check For Invalid Links
    runs-on: blacksmith-4vcpu-ubuntu-2404
    steps:
      - uses: actions/checkout@v5
      - name: Restore lychee cache
        uses: actions/cache@v5
        with:
          path: .lycheecache
          key: cache-lychee-${{ github.sha }}
          restore-keys: cache-lychee-
      - name: Run lychee
        uses: lycheeverse/lychee-action@v2
        with:
          args: --config ./lychee.toml './**/*.md'
          fail: true


================================================
FILE: .gitignore
================================================
.dioxus
/target
/packages/playwright-tests/cli-optimization/monaco-editor-0.52.2
/packages/playwright-tests/web/dist
/packages/playwright-tests/fullstack/dist
/packages/playwright-tests/test-results
/packages/playwright-tests/web-hot-patch-temp
/packages/playwright-tests/web-hot-patch-fullstack-temp
/packages/playwright-tests/web-hot-patch/Cargo.lock
/packages/playwright-tests/web-hot-patch-fullstack/Cargo.lock
/dist
.DS_Store
/examples/assets/test_video.mp4
/examples/_assets/test_video.mp4
static

# new recommendation to keep the lockfile in for CI and reproducible builds
# Cargo.lock

.vscode/*
!.vscode/settings.json
!.vscode/tasks.json
!.vscode/launch.json
!.vscode/extensions.json
tarpaulin-report.html

# Jetbrain
.idea/
node_modules/
/test-results/
/packages/playwright-report/
/packages/playwright/.cache/
# Allow geolocation plugin sources to be tracked
/packages/geolocation/android/build/
/packages/geolocation/android/.gradle/
# Zed
.zed/

# ignore the output of tmps
tmp/
bundle/

# in debugging we frequently dump wasm to wat with `wasm-tools print`
*.wat


================================================
FILE: .vscode/settings.json
================================================
{
  "editor.formatOnSave": true,
  "[toml]": {
    "editor.formatOnSave": false
  },
  "[handlebars]": {
    "editor.formatOnSave": false
  },
  "[javascript]": {
    "editor.formatOnSave": false
  },
  "[html]": {
    "editor.formatOnSave": false
  },
  "dioxus.formatOnSave": "disabled",
  // "rust-analyzer.check.workspace": true,
  // "rust-analyzer.check.workspace": false,
  // "rust-analyzer.check.features": "all",
  // "rust-analyzer.cargo.buildScripts.rebuildOnSave": false,
  // "rust-analyzer.check.workspace": false,
  // "rust-analyzer.check.allTargets": true,
  "rust-analyzer.cargo.features": "all",
  "rust-analyzer.check.features": "all",
  "rust-analyzer.cargo.extraArgs": [
    "--tests"
  ],
}

================================================
FILE: AGENTS.md
================================================
# Dioxus Agent Guide

Dioxus is a cross-platform UI framework for Rust, similar to React. It compiles to web (WASM), desktop (webview), mobile (iOS/Android), and native (GPU-rendered).

## Quick Overview

- **Language**: Rust (stable toolchain)
- **UI Model**: React-like with VirtualDOM, components, hooks, signals
- **Syntax**: JSX-like `rsx!` macro for declaring UI
- **Platforms**: Web, Desktop (Windows/macOS/Linux), Mobile, Native, LiveView (server-rendered)

## Workspace Structure

```
packages/
├── dioxus/           # Main re-export crate users depend on
├── core/             # VirtualDOM, components, diffing, scheduling
├── rsx/              # RSX macro parsing and code generation
├── rsx-hotreload/    # Template diffing for hot-reload
├── signals/          # Reactive state (Signal, Memo, Store)
├── hooks/            # Built-in hooks (use_signal, use_effect, etc.)
├── router/           # Type-safe routing with #[derive(Routable)]
├── fullstack/        # SSR, hydration, #[server] functions
├── cli/              # `dx` build tool, dev server, bundling
├── web/              # WASM renderer
├── desktop/          # Wry/Tao webview renderer
├── native/           # Blitz/Vello GPU renderer
├── liveview/         # WebSocket streaming renderer
├── manganis/         # asset!() macro for compile-time assets
├── subsecond/        # Hot-patching system (jump table indirection)
├── devtools/         # Dev server communication protocol
├── interpreter/      # Sledgehammer JS for DOM mutations
└── wasm-split/       # WASM code splitting
```

## Architecture Documentation

For deeper understanding, see `notes/architecture/`:

| When working on...                         | Read...            |
| ------------------------------------------ | ------------------ |
| VirtualDOM, components, diffing, events    | `01-CORE.md`       |
| CLI, build system, bundling, dev server    | `02-CLI.md`        |
| RSX macro, parsing, formatting             | `03-RSX.md`        |
| Signals, state management, reactivity      | `04-SIGNALS.md`    |
| Server functions, SSR, hydration           | `05-FULLSTACK.md`  |
| Web/desktop/native/liveview renderers      | `06-RENDERERS.md`  |
| Hot-reload, hot-patching, devtools         | `07-HOTRELOAD.md`  |
| Asset macro, manganis, const serialization | `08-ASSETS.md`     |
| Router, navigation, nested routes          | `09-ROUTER.md`     |
| WASM code splitting                        | `10-WASM-SPLIT.md` |

## Key Concepts

- **VirtualDOM**: Tree of `VNode` with templates, dynamic nodes, and attributes
- **Signals**: Copy-able reactive primitives via generational-box (generation-based validity)
- **WriteMutations**: Trait that renderers implement to apply DOM changes
- **RSX**: Proc macro that compiles JSX-like syntax to `VNode` construction
- **Server Functions**: `#[server]` macro generates client RPC stubs and server handlers
- **Subsecond**: Hot-patches Rust code via jump table indirection (no memory modification)
- **Manganis**: `asset!("/main.css")` macro for including assets by embedding data via linker symbols

## Common Patterns

**Component definition**:
```rust
#[component]
fn MyComponent(name: String) -> Element {
    let mut count = use_signal(|| 0);
    rsx! {
        button { onclick: move |_| count += 1, "{name}: {count}" }
    }
}
```

## Notes for Agents

1. The `dioxus` crate re-exports from other crates - most implementation is in `packages/core`, `packages/signals`, etc.
2. RSX macro expansion happens in `packages/rsx` - look there for syntax questions
3. Each renderer implements `WriteMutations` differently - see `06-RENDERERS.md`
4. Hot-reload has two systems: RSX template diffing (fast) and Subsecond code patching (full Rust)
5. Assets use link sections and binary patching - the `asset!()` macro creates symbols the CLI processes


================================================
FILE: Cargo.toml
================================================
[workspace]
resolver = "2"
members = [
    "packages/dioxus",
    "packages/core",
    "packages/core-types",
    "packages/cli",
    "packages/cli-opt",
    "packages/cli-config",
    "packages/cli-telemetry",
    "packages/core-macro",
    "packages/config-macro",
    "packages/router-macro",
    "packages/extension",
    "packages/router",
    "packages/html",
    "packages/html-internal-macro",
    "packages/hooks",
    "packages/web",
    "packages/ssr",
    "packages/desktop",
    "packages/interpreter",
    "packages/liveview",
    "packages/autofmt",
    "packages/check",
    "packages/devtools-types",
    "packages/devtools",
    "packages/document",
    "packages/fullstack",
    "packages/fullstack-core",
    "packages/fullstack-macro",
    "packages/fullstack-server",
    "packages/generational-box",
    "packages/history",
    "packages/lazy-js-bundle",
    "packages/rsx-hotreload",
    "packages/rsx-rosetta",
    "packages/rsx",
    "packages/signals",
    "packages/stores",
    "packages/stores-macro",
    "packages/const-serialize",
    "packages/const-serialize-macro",
    "packages/dx-wire-format",
    "packages/logger",
    "packages/config-macros",
    "packages/native",
    "packages/native-dom",
    "packages/asset-resolver",
    "packages/depinfo",
    "packages/component-manifest",

    # CLI harnesses, all included
    "packages/cli-harnesses/*",

    # Playwright tests
    "packages/playwright-tests/liveview",
    "packages/playwright-tests/web",
    "packages/playwright-tests/web-routing",
    "packages/playwright-tests/web-hash-routing",
    "packages/playwright-tests/barebones-template",
    "packages/playwright-tests/fullstack",
    "packages/playwright-tests/fullstack-errors",
    "packages/playwright-tests/fullstack-mounted",
    "packages/playwright-tests/fullstack-spread",
    "packages/playwright-tests/fullstack-routing",
    "packages/playwright-tests/fullstack-hydration-order",
    "packages/playwright-tests/suspense-carousel",
    "packages/playwright-tests/nested-suspense",
    "packages/playwright-tests/cli-optimization",
    "packages/playwright-tests/wasm-split-harness",
    "packages/playwright-tests/default-features-disabled",
    "packages/playwright-tests/fullstack-error-codes",
    "packages/playwright-tests/windows-headless",

    # manganis
    "packages/manganis/manganis",
    "packages/manganis/manganis-core",
    "packages/manganis/manganis-macro",
    "packages/manganis/manganis-07",

    # wasm-split
    "packages/wasm-split/wasm-split",
    "packages/wasm-split/wasm-split-macro",
    "packages/wasm-split/wasm-split-cli",
    "packages/wasm-split/wasm-used",

    # subsecond
    "packages/subsecond/subsecond",
    "packages/subsecond/subsecond-types",
    "packages/subsecond/subsecond-tests/cross-tls-crate",
    "packages/subsecond/subsecond-tests/cross-tls-crate-dylib",
    "packages/subsecond/subsecond-tests/cross-tls-test",

    # Full project examples
    "examples/01-app-demos/hackernews",
    "examples/01-app-demos/ecommerce-site",
    "examples/01-app-demos/bluetooth-scanner",
    "examples/01-app-demos/file-explorer",
    "examples/01-app-demos/hotdog",
    "examples/01-app-demos/geolocation-native-plugin",

    # Fullstack examples
    "examples/07-fullstack/hello-world",
    "examples/07-fullstack/router",
    "examples/07-fullstack/desktop",
    "examples/07-fullstack/auth",
    "examples/07-fullstack/ssr-only",

    # Integrations
    "examples/10-integrations/tailwind",
    "examples/10-integrations/pwa",
    "examples/10-integrations/wgpu-texture",
    "examples/10-integrations/native-headless",
    "examples/10-integrations/native-headless-in-bevy",
    "examples/10-integrations/bevy",
]


[workspace.package]
version = "0.7.3"

# dependencies that are shared across packages
[workspace.dependencies]
dioxus = { path = "packages/dioxus", version = "0.7.3" }
dioxus-core = { path = "packages/core", version = "0.7.3" }
dioxus-core-types = { path = "packages/core-types", version = "0.7.3" }
dioxus-core-macro = { path = "packages/core-macro", version = "0.7.3" }
dioxus-config-macro = { path = "packages/config-macro", version = "0.7.3" }
dioxus-router = { path = "packages/router", version = "0.7.3" }
dioxus-router-macro = { path = "packages/router-macro", version = "0.7.3" }
dioxus-document = { path = "packages/document", version = "0.7.3", default-features = false }
dioxus-history = { path = "packages/history", version = "0.7.3", default-features = false }
dioxus-html = { path = "packages/html", version = "0.7.3", default-features = false }
dioxus-html-internal-macro = { path = "packages/html-internal-macro", version = "0.7.3" }
dioxus-hooks = { path = "packages/hooks", version = "0.7.3" }
dioxus-web = { path = "packages/web", version = "0.7.3", default-features = false }
dioxus-ssr = { path = "packages/ssr", version = "0.7.3", default-features = false }
dioxus-desktop = { path = "packages/desktop", version = "0.7.3", default-features = false }
dioxus-interpreter-js = { path = "packages/interpreter", version = "0.7.3" }
dioxus-liveview = { path = "packages/liveview", version = "0.7.3" }
dioxus-autofmt = { path = "packages/autofmt", version = "0.7.3" }
dioxus-check = { path = "packages/check", version = "0.7.3" }
dioxus-rsx = { path = "packages/rsx", version = "0.7.3" }
dioxus-rsx-hotreload = { path = "packages/rsx-hotreload", version = "0.7.3" }
dioxus-rsx-rosetta = { path = "packages/rsx-rosetta", version = "0.7.3" }
dioxus-signals = { path = "packages/signals", version = "0.7.3" }
dioxus-stores = { path = "packages/stores", version = "0.7.3" }
dioxus-stores-macro = { path = "packages/stores-macro", version = "0.7.3" }
dioxus-devtools = { path = "packages/devtools", version = "0.7.3" }
dioxus-devtools-types = { path = "packages/devtools-types", version = "0.7.3" }
dioxus-fullstack = { path = "packages/fullstack", version = "0.7.3", default-features = false }
dioxus-fullstack-core = { path = "packages/fullstack-core", version = "0.7.3", default-features = false }
dioxus-fullstack-macro = { path = "packages/fullstack-macro", version = "0.7.3", default-features = false }
dioxus-server = { path = "packages/fullstack-server", version = "0.7.3" }
dioxus-dx-wire-format = { path = "packages/dx-wire-format", version = "0.7.3" }
dioxus-logger = { path = "packages/logger", version = "0.7.3" }
dioxus-native = { path = "packages/native", version = "0.7.3" }
dioxus-native-dom = { path = "packages/native-dom", version = "0.7.3" }
dioxus-asset-resolver = { path = "packages/asset-resolver", version = "0.7.3" }
dioxus-config-macros = { path = "packages/config-macros", version = "0.7.3" }
dioxus-component-manifest = { path = "packages/component-manifest", version = "0.7.3" }
generational-box = { path = "packages/generational-box", version = "0.7.3" }
lazy-js-bundle = { path = "packages/lazy-js-bundle", version = "0.7.3" }

# cli
dioxus-cli-opt = { path = "packages/cli-opt", version = "0.7.3" }
dioxus-cli-telemetry = { path = "packages/cli-telemetry", version = "0.7.3" }
dioxus-cli-config = { path = "packages/cli-config", version = "0.7.3" }

# subsecond
subsecond-types = { path = "packages/subsecond/subsecond-types", version = "0.7.3" }
subsecond = { path = "packages/subsecond/subsecond", version = "0.7.3" }

# wasm-split
wasm-splitter = { path = "packages/wasm-split/wasm-split", version = "0.7.3" }
wasm-split-macro = { path = "packages/wasm-split/wasm-split-macro", version = "0.7.3" }
wasm-split-cli = { path = "packages/wasm-split/wasm-split-cli", version = "0.7.3" }
wasm-used = { path = "packages/wasm-split/wasm-used", version = "0.7.3" }

# our dep-info parsing crate
depinfo = { path = "packages/depinfo", version = "0.7.3" }

# manganis
manganis = { path = "packages/manganis/manganis", version = "0.7.3" }
manganis-core = { path = "packages/manganis/manganis-core", version = "0.7.3" }
manganis-macro = { path = "packages/manganis/manganis-macro", version = "0.7.3" }
manganis-core-07 = { path = "packages/manganis/manganis-07", version = "0.7.2" }

# const-serialize.
# these are on "alpha" versions, but really, we are prepping for 0.8 but not committing to it yet
# once the workspace moves onto 0.8, we can clean this up, moving the const-serialize stuff back to normal versions
const-serialize = { path = "packages/const-serialize", version = "0.8.0-alpha.0" }
const-serialize-macro = { path = "packages/const-serialize-macro", version = "0.8.0-alpha.0" }

warnings = { version = "0.2.1" }

# blitz
blitz-dom = { version = "0.2.4", default-features = false }
blitz-net = { version = "0.2" }
blitz-html = { version = "0.2" }
blitz-paint = { version = "0.2" }
blitz-traits = { version = "0.2" }
blitz-shell = { version = "0.2", default-features = false }
anyrender = { version = "0.6.2", default-features = false }
anyrender_vello = { version = "0.6", default-features = false }
anyrender_vello_cpu = { version = "0.8", default-features = false }
wgpu_context = { version = "0.1", default-features = false }
wgpu = { version = "26.0" }
vello = "0.6"
bevy = "0.17"


# a fork of pretty please for tests - let's get off of this if we can!
prettier-please = { version = "0.3.0", features = ["verbatim"] }
anyhow = "1.0.98"
clap = { version = "4.5.40" }
askama_escape = "0.13.0"
tracing = "0.1.41"
tracing-futures = "0.2.5"
tracing-subscriber = { version = "0.3.19", default-features = false }
toml = "0.8"
tokio = "1.48"
tokio-util = { version = "0.7.15" }
tokio-stream = { version = "0.1.17" }
slab = "0.4.10"
slotmap = { version = "1.0.7", features = ["serde"] }
futures = "0.3.31"
futures-channel = "0.3.31"
futures-util = { version = "0.3", default-features = false }
rustc-hash = "2.1.1"
wasm-bindgen = "0.2.105"
wasm-bindgen-futures = "0.4.50"
js-sys = "0.3"
web-sys = { version = "0.3.77", default-features = false }
html_parser = "0.7.0"
thiserror = "2.0.12"
prettyplease = { version = "0.2.35", features = ["verbatim"] }
const_format = "0.2.34"
cargo_toml = { version = "0.22.1" }
tauri-utils = { version = "=2.5.0" }
tauri-macos-sign = { version = "=2.2.0" }
tauri-bundler = { version = "=2.5.0" }
lru = "0.16.0"
async-trait = "0.1.88"
axum = { version = "0.8.4", default-features = false }
axum-server = { version = "0.7.3", default-features = false }
http-body = { version = "1.0" }
tower = "0.5.2"
http = "1.3.1"
notify = { version = "8.1.0" }
tower-http = "0.6.6"
hyper = "1.6.0"
hyper-rustls = { version = "0.27.7", default-features = false, features = [
    "native-tokio",
    "http1",
    "http2",
    "tls12",
    "logging",
    "ring",
] }
rustls = { version = "0.23.28", default-features = false, features = [
    "logging",
    "std",
    "tls12",
    "ring",
] }
serde_json = "1.0.140"
serde = "1.0.219"
schemars = "1.0"
syn = "2.0"
quote = "1.0"
axum-core = "0.5"
proc-macro2 = "1.0.101"
axum_session = "0.16.0"
axum_session_auth = "0.16.0"
axum_session_sqlx = "0.5.0"
axum-extra = "0.10.1"
reqwest = { version = "0.12.23", default-features = false }
owo-colors = "4.2.2"
ciborium = "0.2.2"
base64 = "0.22.1"
uuid = "1.17.0"
convert_case = "0.8.0"
tungstenite = { version = "0.27.0" }
tokio-tungstenite = { version = "0.27.0" }
gloo-timers = "0.3.0"
internment = { version = "0.8.6" }
proc-macro2-diagnostics = { version = "0.10", default-features = false }
env_logger = "0.11.8"
chrono = { version = "0.4.39" }
rustversion = "1.0.21"
rand = "0.9"
longest-increasing-subsequence = "0.1.0"
trybuild = "1.0"
dirs = "6.0.0"
cargo-config2 = "0.1.34"
criterion = { version = "0.6" }
cargo_metadata = "0.19.2"
parking_lot = "0.12.4"
tracing-wasm = "0.2.1"
base16 = "0.2.1"
digest = "0.10.7"
sha2 = "0.10.9"
walrus = { version = "0.23.3", features = ["parallel"] }
id-arena = "2.2.1"
async-compression = { version = "0.4", features = [
    "futures-io",
    "gzip",
    "brotli",
] }
getrandom = { version = "0.3.3" }
async-once-cell = { version = "0.5.4" }
rayon = "1.10.0"
wasmparser = "0.235.0"
itertools = "0.14.0"
object = { version = "0.37.1" }
inventory = { version = "0.3" }
macro-string = "0.1.4"
walkdir = "2.5.0"
url = "2"
data-url = "0.3.2"
separator = "0.4.1"
pretty_assertions = "1"
serde_repr = "0.1"
hyper-util = "0.1"
krates = { version = "0.17.5" }
libloading = "0.8.8"
libc = "0.2.174"
memmap2 = "0.9.5"
memfd = "0.6.4"
xxhash-rust = { version = "0.8.15", default-features = false }
serde_qs = "0.15.0"
multer = "3.1.0"
const-str = "0.7.0"
bytes = "1.10"
send_wrapper = "0.6.0"
pin-project = { version = "1.1.10" }
postcard = { version = "1.1.3", default-features = false }
serde_urlencoded = "0.7"
form_urlencoded = "1.2.1"
winnow = "0.7.14"

# desktop
wry = { version = "0.53.5", default-features = false }
tao = { version = "0.34.0", features = ["rwh_05"] }
infer = "0.19.0"
dunce = "1.0.5"
percent-encoding = "2.3.1"
muda = "0.17.0"
tray-icon = "0.21.0"
open = "5.3.2"
webbrowser = "1.0"

# web
gloo-dialogs = "0.2.0"

# tui stuff
ansi-to-tui = "7.0"
ansi-to-html = "0.2.2"
path-absolutize = "3.1"
crossterm = { version = "0.29.0" }
ratatui = { version = "0.29.0" }
shell-words = "1.1.0"

# native
keyboard-types = { version = "0.7", default-features = false }
winit = { version = "0.30.11", features = ["rwh_06"] }

# our release profile should be fast to compile and fast to run
# when we ship our CI builds, we turn on LTO which improves perf leftover by turning on incremental
[profile.release]
incremental = true

# crank up the opt level for wasm-split-cli in dev mode
# important here that lto is on and the debug symbols are present (since they're used by wasm-opt)
[profile.wasm-split-release]
inherits = "release"
opt-level = 'z'
lto = true
debug = true

# a profile for running the CLI that's also incremental
[profile.cli-release-dev]
inherits = "release"
opt-level = 3
incremental = true

# crank up walrus since it's quite slow in dev mode
[profile.dev.package.walrus]
opt-level = 3

# ensure we have adversarial setup for tls
[profile.dev.package.cross-tls-crate]
opt-level = 2

[profile.dev.package.cross-tls-crate-dylib]
opt-level = 2

[profile.release-max-opt]
inherits = "release"
lto = true
codegen-units = 1

# Disable debug assertions to check the released path of core and other packages, but build without optimizations to keep build times quick
[profile.release-unoptimized]
inherits = "dev"
debug-assertions = false
incremental = true

[profile.wasm-dev]
inherits = "dev"
opt-level = 1

[profile.server-dev]
inherits = "dev"

[profile.android-dev]
inherits = "dev"

# This is a "virtual package"
# It is not meant to be published, but is used so "cargo run --example XYZ" works properly
[package]
name = "dioxus-examples"
authors = ["Jonathan Kelley"]
edition = "2024"
description = "Top level crate for the Dioxus repository"
license = "MIT OR Apache-2.0"
repository = "https://github.com/DioxusLabs/dioxus/"
homepage = "https://dioxuslabs.com"
documentation = "https://dioxuslabs.com"
keywords = ["dom", "ui", "gui", "react", "wasm"]
rust-version = "1.85.0"
publish = false
version = "0.7.0"

[dependencies]
reqwest = { workspace = true, features = ["json"] }
ciborium = { workspace = true, optional = true }
base64 = { workspace = true, optional = true }
http-range = { version = "0.1.5" }
wgpu = { workspace = true, optional = true }
winit = { workspace = true, optional = true }
ouroboros = { version = "*", optional = true }
wasm-splitter = { workspace = true }

sqlx = { version = "0.8.6", features = [
    "macros",
    "migrate",
    "postgres",
    "sqlite",
    "_unstable-all-types",
    "tls-native-tls",
    "runtime-tokio",
], optional = true }
wasm-streams = "0.4.2"

[dev-dependencies]
dioxus = { workspace = true, features = ["router", "fullstack"] }
dioxus-html = { workspace = true, features = ["serialize"] }
dioxus-stores = { workspace = true }
dioxus-ssr = { workspace = true }
futures-util = { workspace = true }
separator = { workspace = true }
serde = { workspace = true, features = ["derive"] }
serde_json = { workspace = true }
rand = { workspace = true, features = ["small_rng"] }
form_urlencoded = "1.2.1"
async-std = "1.13.1"
web-time = "1.1.0"
anyhow = { workspace = true }
thiserror = { workspace = true }
bytes = { workspace = true }
futures = { workspace = true }
axum-core = { workspace = true }
uuid = { workspace = true, features = ["v4", "serde"] }
tower-http = { workspace = true, features = ["timeout"] }
pollster = "0.4.0"

[target.'cfg(target_arch = "wasm32")'.dev-dependencies]
getrandom = { workspace = true, features = ["wasm_js"] }
tokio = { version = "1.48", default-features = false, features = [
    "sync",
    "macros",
    "io-util",
    "rt",
    "time",
] }
uuid = { workspace = true, features = ["v4", "serde", "js"] }

[target.'cfg(not(target_arch = "wasm32"))'.dev-dependencies]
tokio = { version = "1.48", features = ["full"] }

# To make most examples faster to compile, we split out assets and http-related stuff
# This trims off like 270 dependencies, leading to a significant speedup in compilation time
[features]
default = ["desktop"]
desktop = ["dioxus/desktop"]
native = ["dioxus/native", "winit"]
liveview = ["dioxus/liveview"]
server = ["dioxus/server"]
mobile = ["dioxus/mobile"]
web = ["dioxus/web"]
gpu = ["dep:ouroboros", "dep:wgpu"]

[[example]]
name = "websocket_chat"
path = "examples/01-app-demos/websocket_chat.rs"
doc-scrape-examples = true

[[example]]
name = "weather_app"
path = "examples/01-app-demos/weather_app.rs"
doc-scrape-examples = true

[[example]]
name = "crm"
path = "examples/01-app-demos/crm.rs"
doc-scrape-examples = true

[[example]]
name = "image_generator_openai"
path = "examples/01-app-demos/image_generator_openai.rs"
doc-scrape-examples = true

[[example]]
name = "todomvc"
path = "examples/01-app-demos/todomvc.rs"
doc-scrape-examples = true

[[example]]
name = "calculator_mutable"
path = "examples/01-app-demos/calculator_mutable.rs"
doc-scrape-examples = true

[[example]]
name = "hello_world"
path = "examples/01-app-demos/hello_world.rs"
doc-scrape-examples = true

[[example]]
name = "counters"
path = "examples/01-app-demos/counters.rs"
doc-scrape-examples = true

[[example]]
name = "todomvc_store"
path = "examples/01-app-demos/todomvc_store.rs"
doc-scrape-examples = true

[[example]]
name = "dog_app"
path = "examples/01-app-demos/dog_app.rs"
doc-scrape-examples = true

[[example]]
name = "calculator"
path = "examples/01-app-demos/calculator.rs"
doc-scrape-examples = true

[[example]]
name = "repo_readme"
path = "examples/01-app-demos/repo_readme.rs"
doc-scrape-examples = true

[[example]]
name = "nested_listeners"
path = "examples/02-building-ui/nested_listeners.rs"
doc-scrape-examples = true

[[example]]
name = "disabled"
path = "examples/02-building-ui/disabled.rs"
doc-scrape-examples = true

[[example]]
name = "svg"
path = "examples/02-building-ui/svg.rs"
doc-scrape-examples = true

[[example]]
name = "css_modules"
path = "examples/03-assets-styling/css_modules.rs"
doc-scrape-examples = true

[[example]]
name = "custom_assets"
path = "examples/03-assets-styling/custom_assets.rs"
doc-scrape-examples = true

[[example]]
name = "dynamic_assets"
path = "examples/03-assets-styling/dynamic_assets.rs"
doc-scrape-examples = true

[[example]]
name = "meta"
path = "examples/03-assets-styling/meta.rs"
doc-scrape-examples = true

[[example]]
name = "meta_elements"
path = "examples/03-assets-styling/meta_elements.rs"
doc-scrape-examples = true

[[example]]
name = "reducer"
path = "examples/04-managing-state/reducer.rs"
doc-scrape-examples = true

[[example]]
name = "memo_chain"
path = "examples/04-managing-state/memo_chain.rs"
doc-scrape-examples = true

[[example]]
name = "global"
path = "examples/04-managing-state/global.rs"
doc-scrape-examples = true

[[example]]
name = "context_api"
path = "examples/04-managing-state/context_api.rs"
doc-scrape-examples = true

[[example]]
name = "signals"
path = "examples/04-managing-state/signals.rs"
doc-scrape-examples = true

[[example]]
name = "errors"
path = "examples/04-managing-state/error_handling.rs"
doc-scrape-examples = true

[[example]]
name = "backgrounded_futures"
path = "examples/05-using-async/backgrounded_futures.rs"
doc-scrape-examples = true

[[example]]
name = "clock"
path = "examples/05-using-async/clock.rs"
doc-scrape-examples = true

[[example]]
name = "streams"
path = "examples/05-using-async/streams.rs"
doc-scrape-examples = true

[[example]]
name = "suspense"
path = "examples/05-using-async/suspense.rs"
doc-scrape-examples = true

[[example]]
name = "future"
path = "examples/05-using-async/future.rs"
doc-scrape-examples = true


[[example]]
name = "simple_router"
path = "examples/06-routing/simple_router.rs"
doc-scrape-examples = true

[[example]]
name = "router_restore_scroll"
path = "examples/06-routing/router_restore_scroll.rs"
doc-scrape-examples = true

[[example]]
name = "link"
path = "examples/06-routing/link.rs"
doc-scrape-examples = true

[[example]]
name = "hash_fragment_state"
required-features = ["ciborium", "base64"]
path = "examples/06-routing/hash_fragment_state.rs"
doc-scrape-examples = true

[[example]]
name = "router"
path = "examples/06-routing/router.rs"
doc-scrape-examples = true

[[example]]
name = "router_resource"
path = "examples/06-routing/router_resource.rs"
doc-scrape-examples = true

[[example]]
name = "query_segment_search"
path = "examples/06-routing/query_segment_search.rs"
doc-scrape-examples = true

[[example]]
name = "flat_router"
path = "examples/06-routing/flat_router.rs"
doc-scrape-examples = true

[[example]]
name = "query_params"
path = "examples/07-fullstack/query_params.rs"
doc-scrape-examples = true

[[example]]
name = "server_functions"
path = "examples/07-fullstack/server_functions.rs"
doc-scrape-examples = true

[[example]]
name = "middleware"
path = "examples/07-fullstack/middleware.rs"
doc-scrape-examples = true

[[example]]
name = "custom_error_page"
path = "examples/07-fullstack/custom_error_page.rs"
doc-scrape-examples = true

[[example]]
name = "redirect"
path = "examples/07-fullstack/redirect.rs"
doc-scrape-examples = true

[[example]]
name = "header_map"
path = "examples/07-fullstack/header_map.rs"
doc-scrape-examples = true

[[example]]
name = "login_form"
path = "examples/07-fullstack/login_form.rs"
doc-scrape-examples = true

[[example]]
name = "handling_errors"
path = "examples/07-fullstack/handling_errors.rs"
doc-scrape-examples = true

[[example]]
name = "dog_app_self_hosted"
path = "examples/07-fullstack/dog_app_self_hosted.rs"
doc-scrape-examples = true

[[example]]
name = "through_reqwest"
path = "examples/07-fullstack/through_reqwest.rs"
doc-scrape-examples = true

[[example]]
name = "streaming_file_upload"
path = "examples/07-fullstack/streaming_file_upload.rs"
doc-scrape-examples = true

[[example]]
name = "multipart_form"
path = "examples/07-fullstack/multipart_form.rs"
doc-scrape-examples = true

[[example]]
name = "full_request_access"
path = "examples/07-fullstack/full_request_access.rs"
doc-scrape-examples = true

[[example]]
name = "fullstack_hello_world"
path = "examples/07-fullstack/fullstack_hello_world.rs"
doc-scrape-examples = true

[[example]]
name = "server_sent_events"
path = "examples/07-fullstack/server_sent_events.rs"
doc-scrape-examples = true

[[example]]
name = "server_state"
path = "examples/07-fullstack/server_state.rs"
doc-scrape-examples = true
required-features = ["sqlx"]

[[example]]
name = "streaming"
path = "examples/07-fullstack/streaming.rs"
doc-scrape-examples = true

[[example]]
name = "custom_axum_serve"
path = "examples/07-fullstack/custom_axum_serve.rs"
doc-scrape-examples = true

[[example]]
name = "websocket"
path = "examples/07-fullstack/websocket.rs"
doc-scrape-examples = true

[[example]]
name = "drag_and_drop"
path = "examples/08-apis/drag_and_drop.rs"
doc-scrape-examples = true

[[example]]
name = "control_focus"
path = "examples/08-apis/control_focus.rs"
doc-scrape-examples = true

[[example]]
name = "window_popup"
required-features = ["desktop"]
path = "examples/08-apis/window_popup.rs"
doc-scrape-examples = true

[[example]]
name = "custom_html"
required-features = ["desktop"]
path = "examples/08-apis/custom_html.rs"
doc-scrape-examples = true

[[example]]
name = "multiwindow_with_tray_icon"
required-features = ["desktop"]
path = "examples/08-apis/multiwindow_with_tray_icon.rs"
doc-scrape-examples = true

[[example]]
name = "window_event"
required-features = ["desktop"]
path = "examples/08-apis/window_event.rs"
doc-scrape-examples = true

[[example]]
name = "read_size"
path = "examples/08-apis/read_size.rs"
doc-scrape-examples = true

[[example]]
name = "logging"
path = "examples/08-apis/logging.rs"
doc-scrape-examples = true

[[example]]
name = "overlay"
required-features = ["desktop"]
path = "examples/08-apis/overlay.rs"
doc-scrape-examples = true

[[example]]
name = "ssr"
path = "examples/08-apis/ssr.rs"
doc-scrape-examples = true

[[example]]
name = "video_stream"
required-features = ["desktop"]
path = "examples/08-apis/video_stream.rs"
doc-scrape-examples = true

[[example]]
name = "title"
path = "examples/08-apis/title.rs"
doc-scrape-examples = true

[[example]]
name = "file_upload"
path = "examples/08-apis/file_upload.rs"
doc-scrape-examples = true

[[example]]
name = "window_focus"
required-features = ["desktop"]
path = "examples/08-apis/window_focus.rs"
doc-scrape-examples = true

[[example]]
name = "eval"
path = "examples/08-apis/eval.rs"
doc-scrape-examples = true

[[example]]
name = "shortcut"
required-features = ["desktop"]
path = "examples/08-apis/shortcut.rs"
doc-scrape-examples = true

[[example]]
name = "scroll_to_offset"
path = "examples/08-apis/scroll_to_offset.rs"
doc-scrape-examples = true

[[example]]
name = "scroll_to_top"
path = "examples/08-apis/scroll_to_top.rs"
doc-scrape-examples = true

[[example]]
name = "wgpu_child_window"
path = "examples/08-apis/wgpu_child_window.rs"
required-features = ["gpu", "desktop"]
doc-scrape-examples = true

[[example]]
name = "multiwindow"
required-features = ["desktop"]
path = "examples/08-apis/multiwindow.rs"
doc-scrape-examples = true

[[example]]
name = "window_zoom"
required-features = ["desktop"]
path = "examples/08-apis/window_zoom.rs"
doc-scrape-examples = true

[[example]]
name = "custom_menu"
required-features = ["desktop"]
path = "examples/08-apis/custom_menu.rs"
doc-scrape-examples = true

[[example]]
name = "on_resize"
path = "examples/08-apis/on_resize.rs"
doc-scrape-examples = true

[[example]]
name = "form"
path = "examples/08-apis/form.rs"
doc-scrape-examples = true

[[example]]
name = "on_visible"
path = "examples/08-apis/on_visible.rs"
doc-scrape-examples = true

[[example]]
name = "all_events"
path = "examples/09-reference/all_events.rs"
doc-scrape-examples = true

[[example]]
name = "xss_safety"
path = "examples/09-reference/xss_safety.rs"
doc-scrape-examples = true

[[example]]
name = "web_component"
path = "examples/09-reference/web_component.rs"
doc-scrape-examples = true

[[example]]
name = "generic_component"
path = "examples/09-reference/generic_component.rs"
doc-scrape-examples = true

[[example]]
name = "shorthand"
path = "examples/09-reference/shorthand.rs"
doc-scrape-examples = true

[[example]]
name = "simple_list"
path = "examples/09-reference/simple_list.rs"
doc-scrape-examples = true

[[example]]
name = "optional_props"
path = "examples/09-reference/optional_props.rs"
doc-scrape-examples = true

[[example]]
name = "rsx_usage"
path = "examples/09-reference/rsx_usage.rs"
doc-scrape-examples = true

[[example]]
name = "spread"
path = "examples/09-reference/spread.rs"
doc-scrape-examples = true

[[example]]
name = "__scrape_example_list"
path = "examples/scripts/scrape_examples.rs"


================================================
FILE: LICENSE-APACHE
================================================
                              Apache License
                        Version 2.0, January 2004
                     http://www.apache.org/licenses/

TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION

1. Definitions.

   "License" shall mean the terms and conditions for use, reproduction,
   and distribution as defined by Sections 1 through 9 of this document.

   "Licensor" shall mean the copyright owner or entity authorized by
   the copyright owner that is granting the License.

   "Legal Entity" shall mean the union of the acting entity and all
   other entities that control, are controlled by, or are under common
   control with that entity. For the purposes of this definition,
   "control" means (i) the power, direct or indirect, to cause the
   direction or management of such entity, whether by contract or
   otherwise, or (ii) ownership of fifty percent (50%) or more of the
   outstanding shares, or (iii) beneficial ownership of such entity.

   "You" (or "Your") shall mean an individual or Legal Entity
   exercising permissions granted by this License.

   "Source" form shall mean the preferred form for making modifications,
   including but not limited to software source code, documentation
   source, and configuration files.

   "Object" form shall mean any form resulting from mechanical
   transformation or translation of a Source form, including but
   not limited to compiled object code, generated documentation,
   and conversions to other media types.

   "Work" shall mean the work of authorship, whether in Source or
   Object form, made available under the License, as indicated by a
   copyright notice that is included in or attached to the work
   (an example is provided in the Appendix below).

   "Derivative Works" shall mean any work, whether in Source or Object
   form, that is based on (or derived from) the Work and for which the
   editorial revisions, annotations, elaborations, or other modifications
   represent, as a whole, an original work of authorship. For the purposes
   of this License, Derivative Works shall not include works that remain
   separable from, or merely link (or bind by name) to the interfaces of,
   the Work and Derivative Works thereof.

   "Contribution" shall mean any work of authorship, including
   the original version of the Work and any modifications or additions
   to that Work or Derivative Works thereof, that is intentionally
   submitted to Licensor for inclusion in the Work by the copyright owner
   or by an individual or Legal Entity authorized to submit on behalf of
   the copyright owner. For the purposes of this definition, "submitted"
   means any form of electronic, verbal, or written communication sent
   to the Licensor or its representatives, including but not limited to
   communication on electronic mailing lists, source code control systems,
   and issue tracking systems that are managed by, or on behalf of, the
   Licensor for the purpose of discussing and improving the Work, but
   excluding communication that is conspicuously marked or otherwise
   designated in writing by the copyright owner as "Not a Contribution."

   "Contributor" shall mean Licensor and any individual or Legal Entity
   on behalf of whom a Contribution has been received by Licensor and
   subsequently incorporated within the Work.

2. Grant of Copyright License. Subject to the terms and conditions of
   this License, each Contributor hereby grants to You a perpetual,
   worldwide, non-exclusive, no-charge, royalty-free, irrevocable
   copyright license to reproduce, prepare Derivative Works of,
   publicly display, publicly perform, sublicense, and distribute the
   Work and such Derivative Works in Source or Object form.

3. Grant of Patent License. Subject to the terms and conditions of
   this License, each Contributor hereby grants to You a perpetual,
   worldwide, non-exclusive, no-charge, royalty-free, irrevocable
   (except as stated in this section) patent license to make, have made,
   use, offer to sell, sell, import, and otherwise transfer the Work,
   where such license applies only to those patent claims licensable
   by such Contributor that are necessarily infringed by their
   Contribution(s) alone or by combination of their Contribution(s)
   with the Work to which such Contribution(s) was submitted. If You
   institute patent litigation against any entity (including a
   cross-claim or counterclaim in a lawsuit) alleging that the Work
   or a Contribution incorporated within the Work constitutes direct
   or contributory patent infringement, then any patent licenses
   granted to You under this License for that Work shall terminate
   as of the date such litigation is filed.

4. Redistribution. You may reproduce and distribute copies of the
   Work or Derivative Works thereof in any medium, with or without
   modifications, and in Source or Object form, provided that You
   meet the following conditions:

   (a) You must give any other recipients of the Work or
       Derivative Works a copy of this License; and

   (b) You must cause any modified files to carry prominent notices
       stating that You changed the files; and

   (c) You must retain, in the Source form of any Derivative Works
       that You distribute, all copyright, patent, trademark, and
       attribution notices from the Source form of the Work,
       excluding those notices that do not pertain to any part of
       the Derivative Works; and

   (d) If the Work includes a "NOTICE" text file as part of its
       distribution, then any Derivative Works that You distribute must
       include a readable copy of the attribution notices contained
       within such NOTICE file, excluding those notices that do not
       pertain to any part of the Derivative Works, in at least one
       of the following places: within a NOTICE text file distributed
       as part of the Derivative Works; within the Source form or
       documentation, if provided along with the Derivative Works; or,
       within a display generated by the Derivative Works, if and
       wherever such third-party notices normally appear. The contents
       of the NOTICE file are for informational purposes only and
       do not modify the License. You may add Your own attribution
       notices within Derivative Works that You distribute, alongside
       or as an addendum to the NOTICE text from the Work, provided
       that such additional attribution notices cannot be construed
       as modifying the License.

   You may add Your own copyright statement to Your modifications and
   may provide additional or different license terms and conditions
   for use, reproduction, or distribution of Your modifications, or
   for any such Derivative Works as a whole, provided Your use,
   reproduction, and distribution of the Work otherwise complies with
   the conditions stated in this License.

5. Submission of Contributions. Unless You explicitly state otherwise,
   any Contribution intentionally submitted for inclusion in the Work
   by You to the Licensor shall be under the terms and conditions of
   this License, without any additional terms or conditions.
   Notwithstanding the above, nothing herein shall supersede or modify
   the terms of any separate license agreement you may have executed
   with Licensor regarding such Contributions.

6. Trademarks. This License does not grant permission to use the trade
   names, trademarks, service marks, or product names of the Licensor,
   except as required for reasonable and customary use in describing the
   origin of the Work and reproducing the content of the NOTICE file.

7. Disclaimer of Warranty. Unless required by applicable law or
   agreed to in writing, Licensor provides the Work (and each
   Contributor provides its Contributions) on an "AS IS" BASIS,
   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
   implied, including, without limitation, any warranties or conditions
   of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A
   PARTICULAR PURPOSE. You are solely responsible for determining the
   appropriateness of using or redistributing the Work and assume any
   risks associated with Your exercise of permissions under this License.

8. Limitation of Liability. In no event and under no legal theory,
   whether in tort (including negligence), contract, or otherwise,
   unless required by applicable law (such as deliberate and grossly
   negligent acts) or agreed to in writing, shall any Contributor be
   liable to You for damages, including any direct, indirect, special,
   incidental, or consequential damages of any character arising as a
   result of this License or out of the use or inability to use the
   Work (including but not limited to damages for loss of goodwill,
   work stoppage, computer failure or malfunction, or any and all
   other commercial damages or losses), even if such Contributor
   has been advised of the possibility of such damages.

9. Accepting Warranty or Additional Liability. While redistributing
   the Work or Derivative Works thereof, You may choose to offer,
   and charge a fee for, acceptance of support, warranty, indemnity,
   or other liability obligations and/or rights consistent with this
   License. However, in accepting such obligations, You may act only
   on Your own behalf and on Your sole responsibility, not on behalf
   of any other Contributor, and only if You agree to indemnify,
   defend, and hold each Contributor harmless for any liability
   incurred by, or claims asserted against, such Contributor by reason
   of your accepting any such warranty or additional liability.

END OF TERMS AND CONDITIONS


================================================
FILE: LICENSE-MIT
================================================
Permission is hereby granted, free of charge, to any
person obtaining a copy of this software and associated
documentation files (the "Software"), to deal in the
Software without restriction, including without
limitation the rights to use, copy, modify, merge,
publish, distribute, sublicense, and/or sell copies of
the Software, and to permit persons to whom the Software
is furnished to do so, subject to the following
conditions:

The above copyright notice and this permission notice
shall be included in all copies or substantial portions
of the Software.

THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF
ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED
TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A
PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT
SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY
CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR
IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
DEALINGS IN THE SOFTWARE.


================================================
FILE: README.md
================================================
<p>
    <p align="center" >
      <!-- <img src="./notes/header-light-updated.svg#gh-light-mode-only" >
      <img src="./notes/header-dark-updated.svg#gh-dark-mode-only" > -->
      <!-- <a href="https://dioxuslabs.com">
          <img src="./notes/flat-splash.avif">
      </a> -->
      <img src="./notes/splash-header-darkmode.svg#gh-dark-mode-only" style="width: 80%; height: auto;">
      <img src="./notes/splash-header.svg#gh-light-mode-only" style="width: 80%; height: auto;">
      <img src="./notes/image-splash.avif">
      <br>
    </p>
</p>
<div align="center">
  <!-- Crates version -->
  <a href="https://crates.io/crates/dioxus">
    <img src="https://img.shields.io/crates/v/dioxus.svg?style=flat-square"
    alt="Crates.io version" />
  </a>
  <!-- Downloads -->
  <a href="https://crates.io/crates/dioxus">
    <img src="https://img.shields.io/crates/d/dioxus.svg?style=flat-square"
      alt="Download" />
  </a>
  <!-- docs -->
  <a href="https://docs.rs/dioxus">
    <img src="https://img.shields.io/badge/docs-latest-blue.svg?style=flat-square"
      alt="docs.rs docs" />
  </a>
  <!-- CI -->
  <a href="https://github.com/jkelleyrtp/dioxus/actions">
    <img src="https://github.com/dioxuslabs/dioxus/actions/workflows/main.yml/badge.svg"
      alt="CI status" />
  </a>

  <!--Awesome -->
  <a href="https://dioxuslabs.com/awesome">
    <img src="https://cdn.rawgit.com/sindresorhus/awesome/d7305f38d29fed78fa85652e3a63e154dd8e8829/media/badge.svg" alt="Awesome Page" />
  </a>
  <!-- Discord -->
  <a href="https://discord.gg/XgGxMSkvUM">
    <img src="https://img.shields.io/discord/899851952891002890.svg?logo=discord&style=flat-square" alt="Discord Link" />
  </a>
</div>

<div align="center">
  <h3>
    <a href="https://dioxuslabs.com"> Website </a>
    <span> | </span>
    <a href="https://github.com/DioxusLabs/dioxus/tree/main/examples"> Examples </a>
    <span> | </span>
    <a href="https://dioxuslabs.com/learn/0.7/tutorial"> Tutorial </a>
    <span> | </span>
    <a href="https://github.com/DioxusLabs/dioxus/blob/main/notes/translations/zh-cn/README.md"> 中文 </a>
    <span> | </span>
    <a href="https://github.com/DioxusLabs/dioxus/blob/main/notes/translations/pt-br/README.md"> PT-BR </a>
    <span> | </span>
    <a href="https://github.com/DioxusLabs/dioxus/blob/main/notes/translations/ja-jp/README.md"> 日本語 </a>
    <span> | </span>
    <a href="https://github.com/DioxusLabs/dioxus/blob/main/notes/translations/tr-tr"> Türkçe </a>
    <span> | </span>
    <a href="https://github.com/DioxusLabs/dioxus/blob/main/notes/translations/ko-kr"> 한국어 </a>
  </h3>
</div>
<br>
<p align="center">
  <a href="https://github.com/DioxusLabs/dioxus/releases/tag/v0.7.0">✨ Dioxus 0.7 is out!!! ✨</a>
</p>
<br>

Build for web, desktop, and mobile, and more with a single codebase. Zero-config setup, integrated hot-reloading, and signals-based state management. Add backend functionality with Server Functions and bundle with our CLI.

```rust
fn app() -> Element {
    let mut count = use_signal(|| 0);

    rsx! {
        h1 { "High-Five counter: {count}" }
        button { onclick: move |_| count += 1, "Up high!" }
        button { onclick: move |_| count -= 1, "Down low!" }
    }
}
```

## ⭐️ Unique features:

- Cross-platform apps in three lines of code (web, desktop, mobile, server, and more)
- [Ergonomic state management](https://dioxuslabs.com/blog/release-050) combines the best of React, Solid, and Svelte
- Built-in featureful, type-safe, fullstack web framework
- Integrated bundler for deploying to the web, macOS, Linux, and Windows
- Subsecond Rust hot-patching and asset hot-reloading
- And more! [Take a tour of Dioxus](https://dioxuslabs.com/learn/0.7/).

## Instant hot-reloading

With one command, `dx serve` and your app is running. Edit your markup, styles, and see changes in milliseconds. Use our experimental `dx serve --hotpatch` to update Rust code in real time.

<div align="center">
  <img src="https://raw.githubusercontent.com/DioxusLabs/screenshots/refs/heads/main/blitz/hotreload-video.webp">
  <!-- <video src="https://private-user-images.githubusercontent.com/10237910/386919031-6da371d5-3340-46da-84ff-628216851ba6.mov" width="500"></video> -->
  <!-- <video src="https://private-user-images.githubusercontent.com/10237910/386919031-6da371d5-3340-46da-84ff-628216851ba6.mov" width="500"></video> -->
</div>

## Build Beautiful Apps

Dioxus apps are styled with HTML and CSS. Use the built-in TailwindCSS support or load your favorite CSS library. Easily call into native code (objective-c, JNI, Web-Sys) for a perfect native touch.

<div align="center">
  <img src="./notes/ebou2.avif">
</div>



## Truly fullstack applications

Dioxus deeply integrates with [axum](https://github.com/tokio-rs/axum) to provide powerful fullstack capabilities for both clients and servers. Pick from a wide array of built-in batteries like WebSockets, SSE, Streaming, File Upload/Download, Server-Side-Rendering, Forms, Middleware, and Hot-Reload, or go fully custom and integrate your existing axum backend.

<div align="center">
  <img src="./notes/fullstack-websockets.avif" width="700">
</div>

## Experimental Native Renderer

Render using web-sys, webview, server-side-rendering, liveview, or even with our experimental WGPU-based renderer. Embed Dioxus in Bevy, WGPU, or even run on embedded Linux!

<div align="center">
  <img src="https://raw.githubusercontent.com/DioxusLabs/screenshots/refs/heads/main/blitz/native-blitz-wgpu.webp">
</div>


## First-party primitive components

Get started quickly with a complete set of primitives modeled after shadcn/ui and Radix-Primitives.

<div align="center">
  <img src="./notes/primitive-components.avif" width="700">
</div>

## First-class Android and iOS support

Dioxus is the fastest way to build native mobile apps with Rust. Simply run `dx serve --platform android` and your app is running in an emulator or on device in seconds. Call directly into JNI and Native APIs.

<div align="center">
  <img src="./notes/android_and_ios2.avif" width="500">
</div>



## Bundle for web, desktop, and mobile

Simply run `dx bundle` and your app will be built and bundled with maximization optimizations. On the web, take advantage of [`.avif` generation, `.wasm` compression, minification](https://dioxuslabs.com/learn/0.7/tutorial/assets), and more. Build WebApps weighing [less than 50kb](https://github.com/ealmloff/tiny-dioxus/) and desktop/mobile apps less than 5mb.

<div align="center">
  <img src="./notes/bundle.gif">
</div>


## Fantastic documentation

We've put a ton of effort into building clean, readable, and comprehensive documentation. All html elements and listeners are documented with MDN docs, and our Docs runs continuous integration with Dioxus itself to ensure that the docs are always up to date. Check out the [Dioxus website](https://dioxuslabs.com/learn/0.7/) for guides, references, recipes, and more. Fun fact: we use the Dioxus website as a testbed for new Dioxus features - [check it out!](https://github.com/dioxusLabs/docsite)

<div align="center">
  <img src="./notes/docs.avif">
</div>


## Modular and Customizable

Build your own renderer. Use our modular components like RSX, VirtualDom, Blitz, Taffy, and Subsecond.

## Community

Dioxus is a community-driven project, with a very active [Discord](https://discord.gg/XgGxMSkvUM) and [GitHub](https://github.com/DioxusLabs/dioxus/issues) community. We're always looking for help, and we're happy to answer questions and help you get started. [Our SDK](https://github.com/DioxusLabs/dioxus-std) is community-run and we even have a [GitHub organization](https://github.com/dioxus-community/) for the best Dioxus crates that receive free upgrades and support.

<div align="center">
  <img src="./notes/dioxus-community.avif">
</div>

## Full-time core team

Dioxus has grown from a side project to a small team of fulltime engineers. Thanks to the generous support of FutureWei, Satellite.im, the GitHub Accelerator program, we're able to work on Dioxus full-time. Our long term goal is for Dioxus to become self-sustaining by providing paid high-quality enterprise tools. If your company is interested in adopting Dioxus and would like to work with us, please reach out!

## Supported Platforms

<div align="center">
  <table style="width:100%">
    <tr>
      <td>
      <b>Web</b>
      </td>
      <td>
        <ul>
          <li>Render directly to the DOM using WebAssembly</li>
          <li>Pre-render with SSR and rehydrate on the client</li>
          <li>Simple "hello world" at about 50kb, comparable to React</li>
          <li>Built-in dev server and hot reloading for quick iteration</li>
        </ul>
      </td>
    </tr>
    <tr>
      <td>
      <b>Desktop</b>
      </td>
      <td>
        <ul>
          <li>Render using Webview or - experimentally - with WGPU or <a href="https://freyaui.dev">Freya</a> (Skia) </li>
          <li>Zero-config setup. Simply `cargo run` or `dx serve` to build your app </li>
          <li>Full support for native system access without IPC </li>
          <li>Supports macOS, Linux, and Windows. Portable <3mb binaries </li>
        </ul>
      </td>
    </tr>
    <tr>
      <td>
      <b>Mobile</b>
      </td>
      <td>
        <ul>
          <li>Render using Webview or - experimentally - with WGPU or Skia </li>
          <li>Build .ipa and .apk files for iOS and Android </li>
          <li>Call directly into Java and Objective-C with minimal overhead</li>
          <li>From "hello world" to running on device in seconds</li>
        </ul>
      </td>
    </tr>
    <tr>
      <td>
      <b>Server-side Rendering</b>
      </td>
      <td>
        <ul>
          <li>Suspense, hydration, and server-side rendering</li>
          <li>Quickly drop in backend functionality with server functions</li>
          <li>Extractors, middleware, and routing integrations</li>
          <li>Static-site generation and incremental regeneration</li>
        </ul>
      </td>
    </tr>
  </table>
</div>

## Running the examples

> The examples in the main branch of this repository target the git version of dioxus and the CLI. If you are looking for examples that work with the latest stable release of dioxus, check out the [0.6 branch](https://github.com/DioxusLabs/dioxus/tree/v0.6/examples).

The examples in the top level of this repository can be run with:

```sh
cargo run --example <example>
```

However, we encourage you to download the dioxus-cli to test out features like hot-reloading. To install the most recent binary CLI, you can use cargo binstall.

```sh
cargo binstall dioxus-cli@0.7.0 --force
```

If this CLI is out-of-date, you can install it directly from git

```sh
cargo install --git https://github.com/DioxusLabs/dioxus dioxus-cli --locked
```

With the CLI, you can also run examples with the web platform. You will need to disable the default desktop feature and enable the web feature with this command:

```sh
dx serve --example <example> --platform web -- --no-default-features
```

## Contributing

- Check out the website [section on contributing](https://dioxuslabs.com/learn/0.7/beyond/contributing).
- Report issues on our [issue tracker](https://github.com/dioxuslabs/dioxus/issues).
- [Join](https://discord.gg/XgGxMSkvUM) the discord and ask questions!

<a href="https://github.com/dioxuslabs/dioxus/graphs/contributors">
  <img src="https://contrib.rocks/image?repo=dioxuslabs/dioxus&max=30&columns=10" />
</a>

## License

This project is licensed under either the [MIT license] or the [Apache-2 License].

[apache-2 license]: https://github.com/DioxusLabs/dioxus/blob/master/LICENSE-APACHE
[mit license]: https://github.com/DioxusLabs/dioxus/blob/master/LICENSE-MIT

Unless you explicitly state otherwise, any contribution intentionally submitted
for inclusion in Dioxus by you, shall be licensed as MIT or Apache-2, without any additional
terms or conditions.


================================================
FILE: _typos.toml
================================================
[default.extend-words]
# https://ratatui.rs/
ratatui = "ratatui"
# lits is short for literals
lits = "lits"
# https://developer.mozilla.org/en-US/docs/Web/API/HTMLMediaElement/seeked_event
seeked = "seeked"
# https://developer.apple.com/forums/thread/108953
# udid = unique device identifier
udid = "udid"
# Part of Blitz's API
unparented = "unparented"

[files]
extend-exclude = ["notes/translations/*", "CHANGELOG.md", "*.js"]


================================================
FILE: codecov.yml
================================================
comment: false
fail_ci_if_error: false


================================================
FILE: examples/01-app-demos/bluetooth-scanner/.gitignore
================================================
/target


================================================
FILE: examples/01-app-demos/bluetooth-scanner/Cargo.toml
================================================
[package]
name = "bluetooth-scanner"
version = "0.1.1"
edition = "2021"
publish = false

# See more keys and their definitions at https://doc.rust-lang.org/cargo/reference/manifest.html

[dependencies]
tokio = { workspace = true, features = ["full"] }
dioxus = { workspace = true }
futures-channel = { workspace = true }
futures = { workspace = true }
btleplug = "0.11.8"

[features]
default = ["desktop"]
desktop = ["dioxus/desktop"]
native = ["dioxus/native"]


================================================
FILE: examples/01-app-demos/bluetooth-scanner/README.md
================================================
# Bluetooth scanner app

This desktop app showcases the use of background threads.

![Demo of app](./demo_small.png)


================================================
FILE: examples/01-app-demos/bluetooth-scanner/assets/tailwind.css
================================================
/*! tailwindcss v4.1.5 | MIT License | https://tailwindcss.com */
@layer properties;
@layer theme, base, components, utilities;
@layer theme {
  :root, :host {
    --font-sans: ui-sans-serif, system-ui, sans-serif, 'Apple Color Emoji', 'Segoe UI Emoji', 'Segoe UI Symbol',
    'Noto Color Emoji';
    --font-mono: ui-monospace, SFMono-Regular, Menlo, Monaco, Consolas, 'Liberation Mono', 'Courier New',
    monospace;
    --color-green-500: oklch(72.3% 0.219 149.579);
    --color-indigo-500: oklch(58.5% 0.233 277.117);
    --color-indigo-600: oklch(51.1% 0.262 276.966);
    --color-purple-50: oklch(97.7% 0.014 308.299);
    --color-purple-500: oklch(62.7% 0.265 303.9);
    --color-gray-50: oklch(98.5% 0.002 247.839);
    --color-gray-500: oklch(55.1% 0.027 264.364);
    --color-white: #fff;
    --spacing: 0.25rem;
    --text-xs: 0.75rem;
    --text-xs--line-height: calc(1 / 0.75);
    --text-2xl: 1.5rem;
    --text-2xl--line-height: calc(2 / 1.5);
    --font-weight-medium: 500;
    --font-weight-bold: 700;
    --default-transition-duration: 150ms;
    --default-transition-timing-function: cubic-bezier(0.4, 0, 0.2, 1);
    --default-font-family: var(--font-sans);
    --default-mono-font-family: var(--font-mono);
  }
}
@layer base {
  *, ::after, ::before, ::backdrop, ::file-selector-button {
    box-sizing: border-box;
    margin: 0;
    padding: 0;
    border: 0 solid;
  }
  html, :host {
    line-height: 1.5;
    -webkit-text-size-adjust: 100%;
    tab-size: 4;
    font-family: var(--default-font-family, ui-sans-serif, system-ui, sans-serif, 'Apple Color Emoji', 'Segoe UI Emoji', 'Segoe UI Symbol', 'Noto Color Emoji');
    font-feature-settings: var(--default-font-feature-settings, normal);
    font-variation-settings: var(--default-font-variation-settings, normal);
    -webkit-tap-highlight-color: transparent;
  }
  hr {
    height: 0;
    color: inherit;
    border-top-width: 1px;
  }
  abbr:where([title]) {
    -webkit-text-decoration: underline dotted;
    text-decoration: underline dotted;
  }
  h1, h2, h3, h4, h5, h6 {
    font-size: inherit;
    font-weight: inherit;
  }
  a {
    color: inherit;
    -webkit-text-decoration: inherit;
    text-decoration: inherit;
  }
  b, strong {
    font-weight: bolder;
  }
  code, kbd, samp, pre {
    font-family: var(--default-mono-font-family, ui-monospace, SFMono-Regular, Menlo, Monaco, Consolas, 'Liberation Mono', 'Courier New', monospace);
    font-feature-settings: var(--default-mono-font-feature-settings, normal);
    font-variation-settings: var(--default-mono-font-variation-settings, normal);
    font-size: 1em;
  }
  small {
    font-size: 80%;
  }
  sub, sup {
    font-size: 75%;
    line-height: 0;
    position: relative;
    vertical-align: baseline;
  }
  sub {
    bottom: -0.25em;
  }
  sup {
    top: -0.5em;
  }
  table {
    text-indent: 0;
    border-color: inherit;
    border-collapse: collapse;
  }
  :-moz-focusring {
    outline: auto;
  }
  progress {
    vertical-align: baseline;
  }
  summary {
    display: list-item;
  }
  ol, ul, menu {
    list-style: none;
  }
  img, svg, video, canvas, audio, iframe, embed, object {
    display: block;
    vertical-align: middle;
  }
  img, video {
    max-width: 100%;
    height: auto;
  }
  button, input, select, optgroup, textarea, ::file-selector-button {
    font: inherit;
    font-feature-settings: inherit;
    font-variation-settings: inherit;
    letter-spacing: inherit;
    color: inherit;
    border-radius: 0;
    background-color: transparent;
    opacity: 1;
  }
  :where(select:is([multiple], [size])) optgroup {
    font-weight: bolder;
  }
  :where(select:is([multiple], [size])) optgroup option {
    padding-inline-start: 20px;
  }
  ::file-selector-button {
    margin-inline-end: 4px;
  }
  ::placeholder {
    opacity: 1;
  }
  @supports (not (-webkit-appearance: -apple-pay-button))  or (contain-intrinsic-size: 1px) {
    ::placeholder {
      color: currentcolor;
      @supports (color: color-mix(in lab, red, red)) {
        color: color-mix(in oklab, currentcolor 50%, transparent);
      }
    }
  }
  textarea {
    resize: vertical;
  }
  ::-webkit-search-decoration {
    -webkit-appearance: none;
  }
  ::-webkit-date-and-time-value {
    min-height: 1lh;
    text-align: inherit;
  }
  ::-webkit-datetime-edit {
    display: inline-flex;
  }
  ::-webkit-datetime-edit-fields-wrapper {
    padding: 0;
  }
  ::-webkit-datetime-edit, ::-webkit-datetime-edit-year-field, ::-webkit-datetime-edit-month-field, ::-webkit-datetime-edit-day-field, ::-webkit-datetime-edit-hour-field, ::-webkit-datetime-edit-minute-field, ::-webkit-datetime-edit-second-field, ::-webkit-datetime-edit-millisecond-field, ::-webkit-datetime-edit-meridiem-field {
    padding-block: 0;
  }
  :-moz-ui-invalid {
    box-shadow: none;
  }
  button, input:where([type='button'], [type='reset'], [type='submit']), ::file-selector-button {
    appearance: button;
  }
  ::-webkit-inner-spin-button, ::-webkit-outer-spin-button {
    height: auto;
  }
  [hidden]:where(:not([hidden='until-found'])) {
    display: none !important;
  }
}
@layer utilities {
  .container {
    width: 100%;
    @media (width >= 40rem) {
      max-width: 40rem;
    }
    @media (width >= 48rem) {
      max-width: 48rem;
    }
    @media (width >= 64rem) {
      max-width: 64rem;
    }
    @media (width >= 80rem) {
      max-width: 80rem;
    }
    @media (width >= 96rem) {
      max-width: 96rem;
    }
  }
  .mx-auto {
    margin-inline: auto;
  }
  .mb-6 {
    margin-bottom: calc(var(--spacing) * 6);
  }
  .flex {
    display: flex;
  }
  .inline-block {
    display: inline-block;
  }
  .table {
    display: table;
  }
  .w-full {
    width: 100%;
  }
  .table-auto {
    table-layout: auto;
  }
  .overflow-x-auto {
    overflow-x: auto;
  }
  .rounded {
    border-radius: 0.25rem;
  }
  .rounded-full {
    border-radius: calc(infinity * 1px);
  }
  .bg-gray-50 {
    background-color: var(--color-gray-50);
  }
  .bg-green-500 {
    background-color: var(--color-green-500);
  }
  .bg-indigo-500 {
    background-color: var(--color-indigo-500);
  }
  .bg-purple-50 {
    background-color: var(--color-purple-50);
  }
  .bg-white {
    background-color: var(--color-white);
  }
  .p-4 {
    padding: calc(var(--spacing) * 4);
  }
  .px-2 {
    padding-inline: calc(var(--spacing) * 2);
  }
  .px-4 {
    padding-inline: calc(var(--spacing) * 4);
  }
  .px-6 {
    padding-inline: calc(var(--spacing) * 6);
  }
  .py-1 {
    padding-block: calc(var(--spacing) * 1);
  }
  .py-3 {
    padding-block: calc(var(--spacing) * 3);
  }
  .py-5 {
    padding-block: calc(var(--spacing) * 5);
  }
  .py-8 {
    padding-block: calc(var(--spacing) * 8);
  }
  .pb-3 {
    padding-bottom: calc(var(--spacing) * 3);
  }
  .pl-6 {
    padding-left: calc(var(--spacing) * 6);
  }
  .text-left {
    text-align: left;
  }
  .text-2xl {
    font-size: var(--text-2xl);
    line-height: var(--tw-leading, var(--text-2xl--line-height));
  }
  .text-xs {
    font-size: var(--text-xs);
    line-height: var(--tw-leading, var(--text-xs--line-height));
  }
  .font-bold {
    --tw-font-weight: var(--font-weight-bold);
    font-weight: var(--font-weight-bold);
  }
  .font-medium {
    --tw-font-weight: var(--font-weight-medium);
    font-weight: var(--font-weight-medium);
  }
  .text-gray-500 {
    color: var(--color-gray-500);
  }
  .text-purple-500 {
    color: var(--color-purple-500);
  }
  .text-white {
    color: var(--color-white);
  }
  .shadow {
    --tw-shadow: 0 1px 3px 0 var(--tw-shadow-color, rgb(0 0 0 / 0.1)), 0 1px 2px -1px var(--tw-shadow-color, rgb(0 0 0 / 0.1));
    box-shadow: var(--tw-inset-shadow), var(--tw-inset-ring-shadow), var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow);
  }
  .transition {
    transition-property: color, background-color, border-color, outline-color, text-decoration-color, fill, stroke, --tw-gradient-from, --tw-gradient-via, --tw-gradient-to, opacity, box-shadow, transform, translate, scale, rotate, filter, -webkit-backdrop-filter, backdrop-filter, display, visibility, content-visibility, overlay, pointer-events;
    transition-timing-function: var(--tw-ease, var(--default-transition-timing-function));
    transition-duration: var(--tw-duration, var(--default-transition-duration));
  }
  .duration-200 {
    --tw-duration: 200ms;
    transition-duration: 200ms;
  }
  .hover\:bg-indigo-600 {
    &:hover {
      @media (hover: hover) {
        background-color: var(--color-indigo-600);
      }
    }
  }
  .md\:w-auto {
    @media (width >= 48rem) {
      width: auto;
    }
  }
}
@property --tw-font-weight {
  syntax: "*";
  inherits: false;
}
@property --tw-shadow {
  syntax: "*";
  inherits: false;
  initial-value: 0 0 #0000;
}
@property --tw-shadow-color {
  syntax: "*";
  inherits: false;
}
@property --tw-shadow-alpha {
  syntax: "<percentage>";
  inherits: false;
  initial-value: 100%;
}
@property --tw-inset-shadow {
  syntax: "*";
  inherits: false;
  initial-value: 0 0 #0000;
}
@property --tw-inset-shadow-color {
  syntax: "*";
  inherits: false;
}
@property --tw-inset-shadow-alpha {
  syntax: "<percentage>";
  inherits: false;
  initial-value: 100%;
}
@property --tw-ring-color {
  syntax: "*";
  inherits: false;
}
@property --tw-ring-shadow {
  syntax: "*";
  inherits: false;
  initial-value: 0 0 #0000;
}
@property --tw-inset-ring-color {
  syntax: "*";
  inherits: false;
}
@property --tw-inset-ring-shadow {
  syntax: "*";
  inherits: false;
  initial-value: 0 0 #0000;
}
@property --tw-ring-inset {
  syntax: "*";
  inherits: false;
}
@property --tw-ring-offset-width {
  syntax: "<length>";
  inherits: false;
  initial-value: 0px;
}
@property --tw-ring-offset-color {
  syntax: "*";
  inherits: false;
  initial-value: #fff;
}
@property --tw-ring-offset-shadow {
  syntax: "*";
  inherits: false;
  initial-value: 0 0 #0000;
}
@property --tw-duration {
  syntax: "*";
  inherits: false;
}
@layer properties {
  @supports ((-webkit-hyphens: none) and (not (margin-trim: inline))) or ((-moz-orient: inline) and (not (color:rgb(from red r g b)))) {
    *, ::before, ::after, ::backdrop {
      --tw-font-weight: initial;
      --tw-shadow: 0 0 #0000;
      --tw-shadow-color: initial;
      --tw-shadow-alpha: 100%;
      --tw-inset-shadow: 0 0 #0000;
      --tw-inset-shadow-color: initial;
      --tw-inset-shadow-alpha: 100%;
      --tw-ring-color: initial;
      --tw-ring-shadow: 0 0 #0000;
      --tw-inset-ring-color: initial;
      --tw-inset-ring-shadow: 0 0 #0000;
      --tw-ring-inset: initial;
      --tw-ring-offset-width: 0px;
      --tw-ring-offset-color: #fff;
      --tw-ring-offset-shadow: 0 0 #0000;
      --tw-duration: initial;
    }
  }
}


================================================
FILE: examples/01-app-demos/bluetooth-scanner/src/main.rs
================================================
use dioxus::prelude::*;

fn main() {
    dioxus::launch(app)
}

fn app() -> Element {
    let mut scan = use_action(|| async {
        use btleplug::api::{Central, Manager as _, Peripheral, ScanFilter};

        let manager = btleplug::platform::Manager::new().await?;

        // get the first bluetooth adapter
        let adapters = manager.adapters().await?;
        let central = adapters
            .into_iter()
            .next()
            .context("No Bluetooth adapter found")?;

        // start scanning for devices
        central.start_scan(ScanFilter::default()).await?;
        tokio::time::sleep(std::time::Duration::from_secs(2)).await;

        // Return the list of peripherals after scanning
        let mut devices = vec![];
        for p in central.peripherals().await? {
            if let Some(p) = p.properties().await? {
                devices.push(p);
            }
        }

        // Sort them by RSSI (signal strength)
        devices.sort_by_key(|p| p.rssi.unwrap_or(-100));

        dioxus::Ok(devices)
    });

    rsx! {
        Stylesheet { href: asset!("/assets/tailwind.css") }
        div {
            div { class: "py-8 px-6",
                div { class: "container px-4 mx-auto",
                    h2 { class: "text-2xl font-bold", "Scan for Bluetooth Devices" }
                    button {
                        class: "inline-block w-full md:w-auto px-6 py-3 font-medium text-white bg-indigo-500 hover:bg-indigo-600 rounded transition duration-200",
                        disabled: scan.pending(),
                        onclick: move |_| {
                            scan.call();
                        },
                        if scan.pending() { "Scanning" } else { "Scan" }
                    }
                }
            }

            section { class: "py-8",
                div { class: "container px-4 mx-auto",
                    div { class: "p-4 mb-6 bg-white shadow rounded overflow-x-auto",
                        table { class: "table-auto w-full",
                            thead {
                                tr { class: "text-xs text-gray-500 text-left",
                                    th { class: "pl-6 pb-3 font-medium", "Strength" }
                                    th { class: "pb-3 font-medium", "Network" }
                                    th { class: "pb-3 font-medium", "Channel" }
                                    th { class: "pb-3 px-2 font-medium", "Security" }
                                }
                            }
                            match scan.value() {
                                None if scan.pending() => rsx! { "Scanning..." },
                                None => rsx! { "Press Scan to start scanning" },
                                Some(Err(_err)) => rsx! { "Failed to scan" },
                                Some(Ok(peripherals)) => rsx! {
                                    tbody {
                                        for peripheral in peripherals.read().iter().rev() {
                                            tr { class: "text-xs bg-gray-50",
                                                td { class: "py-5 px-6 font-medium", "{peripheral.rssi.unwrap_or(-100)}" }
                                                td { class: "flex py-3 font-medium", "{peripheral.local_name.clone().unwrap_or_default()}" }
                                                td { span { class: "inline-block py-1 px-2 text-white bg-green-500 rounded-full", "{peripheral.address}" } }
                                                td {  span { class: "inline-block py-1 px-2 text-purple-500 bg-purple-50 rounded-full", "{peripheral.tx_power_level.unwrap_or_default()}" } }
                                            }
                                        }
                                    }
                                }
                            }
                        }
                    }
                }
            }
        }
    }
}


================================================
FILE: examples/01-app-demos/bluetooth-scanner/tailwind.css
================================================
@import "tailwindcss";
@source "./src/**/*.{rs,html,css}";


================================================
FILE: examples/01-app-demos/calculator.rs
================================================
//! Calculator
//!
//! This example is a simple iOS-style calculator. Instead of wrapping the state in a single struct like the
//! `calculate_mutable` example, this example uses several closures to manage actions with the state. Most
//! components will start like this since it's the quickest way to start adding state to your app. The `Signal` type
//! in Dioxus is `Copy` - meaning you don't need to clone it to use it in a closure.
//!
//! Notice how our logic is consolidated into just a few callbacks instead of a single struct. This is a rather organic
//! way to start building state management in Dioxus, and it's a great way to start.

use dioxus::events::*;
use dioxus::html::input_data::keyboard_types::Key;
use dioxus::prelude::*;

const TITLE: &str = "Calculator";
const STYLE: Asset = asset!("/examples/assets/calculator.css");

fn main() {
    dioxus::LaunchBuilder::new()
        .with_cfg(desktop!({
            use dioxus::desktop::{Config, LogicalSize, WindowBuilder};
            Config::new().with_window(
                WindowBuilder::default()
                    .with_title(TITLE)
                    .with_inner_size(LogicalSize::new(300.0, 525.0)),
            )
        }))
        .with_cfg(native!({
            use dioxus::native::{Config, LogicalSize, WindowAttributes};
            Config::new().with_window_attributes(
                WindowAttributes::default()
                    .with_title(TITLE)
                    .with_inner_size(LogicalSize::new(300.0, 525.0)),
            )
        }))
        .launch(app);
}

fn app() -> Element {
    let mut val = use_signal(|| String::from("0"));

    let mut input_digit = move |num: String| {
        if val() == "0" {
            val.set(String::new());
        }
        val.push_str(num.as_str());
    };

    let mut input_operator = move |key: &str| val.push_str(key);

    let handle_key_down_event = move |evt: KeyboardEvent| match evt.key() {
        Key::Backspace => {
            if !val().is_empty() {
                val.pop();
            }
        }
        Key::Character(character) => match character.as_str() {
            "+" | "-" | "/" | "*" => input_operator(&character),
            "0" | "1" | "2" | "3" | "4" | "5" | "6" | "7" | "8" | "9" => input_digit(character),
            _ => {}
        },
        _ => {}
    };

    rsx! {
        Stylesheet { href: STYLE }
        div { id: "wrapper",
            div { class: "app",
                div { class: "calculator", tabindex: "0", onkeydown: handle_key_down_event,
                    div { class: "calculator-display",
                        if val().is_empty() {
                            "0"
                        } else {
                            "{val}"
                        }
                    }
                    div { class: "calculator-keypad",
                        div { class: "input-keys",
                            div { class: "function-keys",
                                button {
                                    class: "calculator-key key-clear",
                                    onclick: move |_| {
                                        val.set(String::new());
                                        if !val.cloned().is_empty() {
                                            val.set("0".into());
                                        }
                                    },
                                    if val.cloned().is_empty() { "C" } else { "AC" }
                                }
                                button {
                                    class: "calculator-key key-sign",
                                    onclick: move |_| {
                                        let new_val = calc_val(val.cloned().as_str());
                                        if new_val > 0.0 {
                                            val.set(format!("-{new_val}"));
                                        } else {
                                            val.set(format!("{}", new_val.abs()));
                                        }
                                    },
                                    "±"
                                }
                                button {
                                    class: "calculator-key key-percent",
                                    onclick: move |_| val.set(format!("{}", calc_val(val.cloned().as_str()) / 100.0)),
                                    "%"
                                }
                            }
                            div { class: "digit-keys",
                                button {
                                    class: "calculator-key key-0",
                                    onclick: move |_| input_digit(0.to_string()),
                                    "0"
                                }
                                button {
                                    class: "calculator-key key-dot",
                                    onclick: move |_| val.push('.'),
                                    "●"
                                }
                                for k in 1..10 {
                                    button {
                                        class: "calculator-key {k}",
                                        name: "key-{k}",
                                        onclick: move |_| input_digit(k.to_string()),
                                        "{k}"
                                    }
                                }
                            }
                        }
                        div { class: "operator-keys",
                            for (key, class) in [("/", "key-divide"), ("*", "key-multiply"), ("-", "key-subtract"), ("+", "key-add")] {
                                button {
                                    class: "calculator-key {class}",
                                    onclick: move |_| input_operator(key),
                                    "{key}"
                                }
                            }
                            button {
                                class: "calculator-key key-equals",
                                onclick: move |_| val.set(format!("{}", calc_val(val.cloned().as_str()))),
                                "="
                            }
                        }
                    }
                }
            }
        }
    }
}

fn calc_val(val: &str) -> f64 {
    if val.is_empty() {
        return 0.0;
    }

    let mut temp = String::new();
    let mut operation = "+".to_string();

    let mut start_index = 0;
    let mut temp_value;
    let mut fin_index = 0;

    if val.len() > 1 && &val[0..1] == "-" {
        temp_value = String::from("-");
        fin_index = 1;
        start_index += 1;
    } else {
        temp_value = String::from("");
    }

    for c in val[fin_index..].chars() {
        if c == '+' || c == '-' || c == '*' || c == '/' {
            break;
        }
        temp_value.push(c);
        start_index += 1;
    }

    let mut result = temp_value.parse::<f64>().unwrap();

    if start_index + 1 >= val.len() {
        return result;
    }

    for c in val[start_index..].chars() {
        if c == '+' || c == '-' || c == '*' || c == '/' {
            if !temp.is_empty() {
                match &operation as &str {
                    "+" => result += temp.parse::<f64>().unwrap(),
                    "-" => result -= temp.parse::<f64>().unwrap(),
                    "*" => result *= temp.parse::<f64>().unwrap(),
                    "/" => result /= temp.parse::<f64>().unwrap(),
                    _ => unreachable!(),
                };
            }
            operation = c.to_string();
            temp = String::new();
        } else {
            temp.push(c);
        }
    }

    if !temp.is_empty() {
        match &operation as &str {
            "+" => result += temp.parse::<f64>().unwrap(),
            "-" => result -= temp.parse::<f64>().unwrap(),
            "*" => result *= temp.parse::<f64>().unwrap(),
            "/" => result /= temp.parse::<f64>().unwrap(),
            _ => unreachable!(),
        };
    }

    result
}


================================================
FILE: examples/01-app-demos/calculator_mutable.rs
================================================
//! This example showcases a simple calculator using an approach to state management where the state is composed of only
//! a single signal. Since Dioxus implements traditional React diffing, state can be consolidated into a typical Rust struct
//! with methods that take `&mut self`. For many use cases, this is a simple way to manage complex state without wrapping
//! everything in a signal.
//!
//! Generally, you'll want to split your state into several signals if you have a large application, but for small
//! applications, or focused components, this is a great way to manage state.

use dioxus::html::MouseEvent;
use dioxus::html::input_data::keyboard_types::Key;
use dioxus::prelude::*;

fn main() {
    dioxus::LaunchBuilder::new()
        .with_cfg(desktop! {{
            use dioxus::desktop::{Config, LogicalSize, WindowBuilder};
            Config::new().with_window(
                WindowBuilder::new()
                    .with_title("Calculator Demo")
                    .with_resizable(false)
                    .with_inner_size(LogicalSize::new(320.0, 530.0)),
            )
        }})
        .with_cfg(native! {{
            use dioxus::native::{Config, LogicalSize, WindowAttributes};
            Config::new().with_window_attributes(
                WindowAttributes::default()
                    .with_title("Calculator Demo")
                    .with_inner_size(LogicalSize::new(300.0, 525.0)),
            )
        }})
        .launch(app);
}

fn app() -> Element {
    let mut state = use_signal(Calculator::new);

    rsx! {
        Stylesheet { href: asset!("/examples/assets/calculator.css") }
        div { id: "wrapper",
            div { class: "app",
                div {
                    class: "calculator",
                    onkeypress: move |evt| state.write().handle_keydown(evt),
                    div { class: "calculator-display", {state.read().formatted_display()} }
                    div { class: "calculator-keypad",
                        div { class: "input-keys",
                            div { class: "function-keys",
                                CalculatorKey {
                                    name: "key-clear",
                                    onclick: move |_| state.write().clear_display(),
                                    if state.read().display_value == "0" {
                                        "C"
                                    } else {
                                        "AC"
                                    }
                                }
                                CalculatorKey {
                                    name: "key-sign",
                                    onclick: move |_| state.write().toggle_sign(),
                                    "±"
                                }
                                CalculatorKey {
                                    name: "key-percent",
                                    onclick: move |_| state.write().toggle_percent(),
                                    "%"
                                }
                            }
                            div { class: "digit-keys",
                                CalculatorKey {
                                    name: "key-0",
                                    onclick: move |_| state.write().input_digit(0),
                                    "0"
                                }
                                CalculatorKey {
                                    name: "key-dot",
                                    onclick: move |_| state.write().input_dot(),
                                    "●"
                                }
                                for k in 1..10 {
                                    CalculatorKey {
                                        key: "{k}",
                                        name: "key-{k}",
                                        onclick: move |_| state.write().input_digit(k),
                                        "{k}"
                                    }
                                }
                            }
                        }
                        div { class: "operator-keys",
                            CalculatorKey {
                                name: "key-divide",
                                onclick: move |_| state.write().set_operator(Operator::Div),
                                "÷"
                            }
                            CalculatorKey {
                                name: "key-multiply",
                                onclick: move |_| state.write().set_operator(Operator::Mul),
                                "×"
                            }
                            CalculatorKey {
                                name: "key-subtract",
                                onclick: move |_| state.write().set_operator(Operator::Sub),
                                "−"
                            }
                            CalculatorKey {
                                name: "key-add",
                                onclick: move |_| state.write().set_operator(Operator::Add),
                                "+"
                            }
                            CalculatorKey {
                                name: "key-equals",
                                onclick: move |_| state.write().perform_operation(),
                                "="
                            }
                        }
                    }
                }
            }
        }
    }
}

#[component]
fn CalculatorKey(name: String, onclick: EventHandler<MouseEvent>, children: Element) -> Element {
    rsx! {
        button { class: "calculator-key {name}", onclick, {children} }
    }
}

struct Calculator {
    display_value: String,
    operator: Option<Operator>,
    waiting_for_operand: bool,
    cur_val: f64,
}

#[derive(Clone)]
enum Operator {
    Add,
    Sub,
    Mul,
    Div,
}

impl Calculator {
    fn new() -> Self {
        Calculator {
            display_value: "0".to_string(),
            operator: None,
            waiting_for_operand: false,
            cur_val: 0.0,
        }
    }
    fn formatted_display(&self) -> String {
        use separator::Separatable;
        self.display_value
            .parse::<f64>()
            .unwrap()
            .separated_string()
    }
    fn clear_display(&mut self) {
        self.display_value = "0".to_string();
    }
    fn input_digit(&mut self, digit: u8) {
        let content = digit.to_string();
        if self.waiting_for_operand || self.display_value == "0" {
            self.waiting_for_operand = false;
            self.display_value = content;
        } else {
            self.display_value.push_str(content.as_str());
        }
    }
    fn input_dot(&mut self) {
        if !self.display_value.contains('.') {
            self.display_value.push('.');
        }
    }
    fn perform_operation(&mut self) {
        if let Some(op) = &self.operator {
            let rhs = self.display_value.parse::<f64>().unwrap();
            let new_val = match op {
                Operator::Add => self.cur_val + rhs,
                Operator::Sub => self.cur_val - rhs,
                Operator::Mul => self.cur_val * rhs,
                Operator::Div => self.cur_val / rhs,
            };
            self.cur_val = new_val;
            self.display_value = new_val.to_string();
            self.operator = None;
        }
    }
    fn toggle_sign(&mut self) {
        if self.display_value.starts_with('-') {
            self.display_value = self.display_value.trim_start_matches('-').to_string();
        } else {
            self.display_value = format!("-{}", self.display_value);
        }
    }
    fn toggle_percent(&mut self) {
        self.display_value = (self.display_value.parse::<f64>().unwrap() / 100.0).to_string();
    }
    fn backspace(&mut self) {
        if !self.display_value.as_str().eq("0") {
            self.display_value.pop();
        }
    }
    fn set_operator(&mut self, operator: Operator) {
        self.operator = Some(operator);
        self.cur_val = self.display_value.parse::<f64>().unwrap();
        self.waiting_for_operand = true;
    }
    fn handle_keydown(&mut self, evt: KeyboardEvent) {
        match evt.key() {
            Key::Backspace => self.backspace(),
            Key::Character(c) => match c.as_str() {
                "0" => self.input_digit(0),
                "1" => self.input_digit(1),
                "2" => self.input_digit(2),
                "3" => self.input_digit(3),
                "4" => self.input_digit(4),
                "5" => self.input_digit(5),
                "6" => self.input_digit(6),
                "7" => self.input_digit(7),
                "8" => self.input_digit(8),
                "9" => self.input_digit(9),
                "+" => self.operator = Some(Operator::Add),
                "-" => self.operator = Some(Operator::Sub),
                "/" => self.operator = Some(Operator::Div),
                "*" => self.operator = Some(Operator::Mul),
                _ => {}
            },

            _ => {}
        }
    }
}


================================================
FILE: examples/01-app-demos/counters.rs
================================================
//! A simple counters example that stores a list of items in a vec and then iterates over them.

use dioxus::prelude::*;

const STYLE: Asset = asset!("/examples/assets/counter.css");

fn main() {
    dioxus::launch(app);
}

fn app() -> Element {
    // Store the counters in a signal
    let mut counters = use_signal(|| vec![0, 0, 0]);

    // Whenever the counters change, sum them up
    let sum = use_memo(move || counters.read().iter().copied().sum::<i32>());

    rsx! {
        Stylesheet { href: STYLE }

        div { id: "controls",
            button { onclick: move |_| counters.push(0), "Add counter" }
            button { onclick: move |_| { counters.pop(); }, "Remove counter" }
        }

        h3 { "Total: {sum}" }

        // Calling `iter` on a Signal<Vec<>> gives you a GenerationalRef to each entry in the vec
        // We enumerate to get the idx of each counter, which we use later to modify the vec
        for (i, counter) in counters.iter().enumerate() {
            // We need a key to uniquely identify each counter. You really shouldn't be using the index, so we're using
            // the counter value itself.
            //
            // If we used the index, and a counter is removed, dioxus would need to re-write the contents of all following
            // counters instead of simply removing the one that was removed
            //
            // You should use a stable identifier for the key, like a unique id or the value of the counter itself
            li { key: "{i}",
                button { onclick: move |_| counters.write()[i] -= 1, "-1" }
                input {
                    r#type: "number",
                    value: "{counter}",
                    oninput: move |e| {
                        if let Ok(value) = e.parsed() {
                            counters.write()[i] = value;
                        }
                    }
                }
                button { onclick: move |_| counters.write()[i] += 1, "+1" }
                button { onclick: move |_| { counters.remove(i); }, "x" }
            }
        }
    }
}


================================================
FILE: examples/01-app-demos/crm.rs
================================================
//! Tiny CRM - A simple CRM app using the Router component and global signals
//!
//! This shows how to use the `Router` component to manage different views in your app. It also shows how to use global
//! signals to manage state across the entire app.
//!
//! We could simply pass the state as a prop to each component, but this is a good example of how to use global state
//! in a way that works across pages.
//!
//! We implement a number of important details here too, like focusing inputs, handling form submits, navigating the router,
//! platform-specific configuration, and importing 3rd party CSS libraries.

use dioxus::prelude::*;

fn main() {
    dioxus::LaunchBuilder::new()
        .with_cfg(desktop!({
            use dioxus::desktop::{LogicalSize, WindowBuilder};
            dioxus::desktop::Config::default()
                .with_window(WindowBuilder::new().with_inner_size(LogicalSize::new(800, 600)))
        }))
        .launch(|| {
            rsx! {
                Stylesheet {
                    href: "https://unpkg.com/purecss@2.0.6/build/pure-min.css",
                    integrity: "sha384-Uu6IeWbM+gzNVXJcM9XV3SohHtmWE+3VGi496jvgX1jyvDTXfdK+rfZc8C1Aehk5",
                    crossorigin: "anonymous",
                }
                Stylesheet { href: asset!("/examples/assets/crm.css") }
                h1 { "Dioxus CRM Example" }
                Router::<Route> {}
            }
        });
}

/// We only have one list of clients for the whole app, so we can use a global signal.
static CLIENTS: GlobalSignal<Vec<Client>> = Signal::global(Vec::new);

struct Client {
    first_name: String,
    last_name: String,
    description: String,
}

/// The pages of the app, each with a route
#[derive(Routable, Clone)]
enum Route {
    #[route("/")]
    List,

    #[route("/new")]
    New,

    #[route("/settings")]
    Settings,
}

#[component]
fn List() -> Element {
    rsx! {
        h2 { "List of Clients" }
        Link { to: Route::New, class: "pure-button pure-button-primary", "Add Client" }
        Link { to: Route::Settings, class: "pure-button", "Settings" }
        for client in CLIENTS.read().iter() {
            div { class: "client", style: "margin-bottom: 50px",
                p { "Name: {client.first_name} {client.last_name}" }
                p { "Description: {client.description}" }
            }
        }
    }
}

#[component]
fn New() -> Element {
    let mut first_name = use_signal(String::new);
    let mut last_name = use_signal(String::new);
    let mut description = use_signal(String::new);

    let submit_client = move |_| {
        // Write the client
        CLIENTS.write().push(Client {
            first_name: first_name(),
            last_name: last_name(),
            description: description(),
        });

        // And then navigate back to the client list
        router().push(Route::List);
    };

    rsx! {
        h2 { "Add new Client" }
        form { class: "pure-form pure-form-aligned", onsubmit: submit_client,
            fieldset {
                div { class: "pure-control-group",
                    label { r#for: "first_name", "First Name" }
                    input {
                        id: "first_name",
                        r#type: "text",
                        placeholder: "First Name…",
                        required: true,
                        value: "{first_name}",
                        oninput: move |e| first_name.set(e.value()),

                        // when the form mounts, focus the first name input
                        onmounted: move |e| async move {
                            _ = e.set_focus(true).await;
                        },
                    }
                }

                div { class: "pure-control-group",
                    label { r#for: "last_name", "Last Name" }
                    input {
                        id: "last_name",
                        r#type: "text",
                        placeholder: "Last Name…",
                        required: true,
                        value: "{last_name}",
                        oninput: move |e| last_name.set(e.value()),
                    }
                }

                div { class: "pure-control-group",
                    label { r#for: "description", "Description" }
                    textarea {
                        id: "description",
                        placeholder: "Description…",
                        value: "{description}",
                        oninput: move |e| description.set(e.value()),
                    }
                }

                div { class: "pure-controls",
                    button {
                        r#type: "submit",
                        class: "pure-button pure-button-primary",
                        "Save"
                    }
                    Link {
                        to: Route::List,
                        class: "pure-button pure-button-primary red",
                        "Cancel"
                    }
                }
            }
        }
    }
}

#[component]
fn Settings() -> Element {
    rsx! {
        h2 { "Settings" }
        button {
            class: "pure-button pure-button-primary red",
            onclick: move |_| {
                CLIENTS.write().clear();
                dioxus::router::router().push(Route::List);
            },
            "Remove all Clients"
        }
        Link { to: Route::List, class: "pure-button", "Go back" }
    }
}


================================================
FILE: examples/01-app-demos/dog_app.rs
================================================
//! This example demonstrates a simple app that fetches a list of dog breeds and displays a random dog.
//!
//! This app combines `use_loader` and `use_action` to fetch data from the Dog API.
//! - `use_loader` automatically fetches the list of dog breeds when the component mounts.
//! - `use_action` fetches a random dog image whenever the `.dispatch` method is called.

use dioxus::prelude::*;
use serde::{Deserialize, Serialize};
use std::collections::HashMap;

fn main() {
    dioxus::launch(app);
}

fn app() -> Element {
    // Fetch the list of breeds from the Dog API, using the `?` syntax to suspend or throw errors
    let breed_list = use_loader(move || async move {
        #[derive(Deserialize, Serialize, Debug, PartialEq, Clone)]
        struct ListBreeds {
            message: HashMap<String, Vec<String>>,
        }

        reqwest::get("https://dog.ceo/api/breeds/list/all")
            .await?
            .json::<ListBreeds>()
            .await
    })?;

    // Whenever this action is called, it will re-run the future and return the result.
    let mut breed = use_action(move |breed| async move {
        #[derive(Deserialize, Serialize, Debug, PartialEq)]
        struct DogApi {
            message: String,
        }

        reqwest::get(format!("https://dog.ceo/api/breed/{breed}/images/random"))
            .await
            .unwrap()
            .json::<DogApi>()
            .await
    });

    rsx! {
        h1 { "Doggo selector" }
        div { width: "400px",
            for cur_breed in breed_list.read().message.keys().take(20).cloned() {
                button {
                    onclick: move |_| {
                        breed.call(cur_breed.clone());
                    },
                    "{cur_breed}"
                }
            }
        }
        div {
            match breed.value() {
                None => rsx! { div { "Click the button to fetch a dog!" } },
                Some(Err(_e)) => rsx! { div { "Failed to fetch a dog, please try again." } },
                Some(Ok(res)) => rsx! {
                    img {
                        max_width: "500px",
                        max_height: "500px",
                        src: "{res.read().message}"
                    }
                },
            }
        }

    }
}


================================================
FILE: examples/01-app-demos/ecommerce-site/.gitignore
================================================
/target


================================================
FILE: examples/01-app-demos/ecommerce-site/Cargo.toml
================================================
[package]
name = "ecommerce-site"
version = "0.1.1"
edition = "2021"
publish = false
# See more keys and their definitions at https://doc.rust-lang.org/cargo/reference/manifest.html

[dependencies]
dioxus = { workspace = true, features = ["fullstack", "router"] }
reqwest = { workspace = true, features = ["json"] }
serde = { workspace = true }

[target.'cfg(target_family = "wasm")'.dependencies]
chrono = { workspace = true, features = ["serde", "wasmbind"] }

[target.'cfg(not(target_family = "wasm"))'.dependencies]
chrono = { workspace = true, features = ["serde"] }

[features]
web = ["dioxus/web"]
server = ["dioxus/server"]


================================================
FILE: examples/01-app-demos/ecommerce-site/README.md
================================================
# Dioxus Example: An e-commerce site using the FakeStoreAPI

This example app is a fullstack web application leveraging the FakeStoreAPI and [Tailwind CSS](https://tailwindcss.com/).

![Demo Image](demo.png)

# Development

1. Run the following commands to serve the application:

```bash
dx serve
```

Note that in Dioxus 0.7, the Tailwind watcher is initialized automatically if a `tailwind.css` file is find in your app's root.

# Status

This is a work in progress. The following features are currently implemented:

- [x] A homepage with a list of products dynamically fetched from the FakeStoreAPI (rendered using SSR)
- [x] A product detail page with details about a product (rendered using LiveView)
- [ ] A cart page
- [ ] A checkout page
- [ ] A login page


================================================
FILE: examples/01-app-demos/ecommerce-site/public/loading.css
================================================
@keyframes spin {
    0% {
        transform: rotate(0deg);
    }

    100% {
        transform: rotate(360deg);
    }
}
.spinner {
    width: 10px;
    height: 10px;
    border: 4px solid #f3f3f3;
    border-top: 4px solid #3498db;
    border-radius: 50%;
    animation: spin 2s linear infinite;
}

================================================
FILE: examples/01-app-demos/ecommerce-site/public/tailwind.css
================================================
/*! tailwindcss v4.1.0 | MIT License | https://tailwindcss.com */
@supports ((-webkit-hyphens: none) and (not (margin-trim: inline))) or ((-moz-orient: inline) and (not (color:rgb(from red r g b)))) {
  @layer base {
    *, ::before, ::after, ::backdrop {
      --tw-translate-x: 0;
      --tw-translate-y: 0;
      --tw-translate-z: 0;
      --tw-rotate-x: rotateX(0);
      --tw-rotate-y: rotateY(0);
      --tw-rotate-z: rotateZ(0);
      --tw-skew-x: skewX(0);
      --tw-skew-y: skewY(0);
      --tw-border-style: solid;
      --tw-font-weight: initial;
      --tw-shadow: 0 0 #0000;
      --tw-shadow-color: initial;
      --tw-shadow-alpha: 100%;
      --tw-inset-shadow: 0 0 #0000;
      --tw-inset-shadow-color: initial;
      --tw-inset-shadow-alpha: 100%;
      --tw-ring-color: initial;
      --tw-ring-shadow: 0 0 #0000;
      --tw-inset-ring-color: initial;
      --tw-inset-ring-shadow: 0 0 #0000;
      --tw-ring-inset: initial;
      --tw-ring-offset-width: 0px;
      --tw-ring-offset-color: #fff;
      --tw-ring-offset-shadow: 0 0 #0000;
      --tw-duration: initial;
    }
  }
}
@layer theme, base, components, utilities;
@layer theme {
  :root, :host {
    --font-sans: ui-sans-serif, system-ui, sans-serif, "Apple Color Emoji",
      "Segoe UI Emoji", "Segoe UI Symbol", "Noto Color Emoji";
    --font-mono: ui-monospace, SFMono-Regular, Menlo, Monaco, Consolas, "Liberation Mono",
      "Courier New", monospace;
    --color-orange-300: oklch(83.7% 0.128 66.29);
    --color-orange-400: oklch(75% 0.183 55.934);
    --color-blue-300: oklch(80.9% 0.105 251.813);
    --color-gray-50: oklch(98.5% 0.002 247.839);
    --color-gray-100: oklch(96.7% 0.003 264.542);
    --color-gray-200: oklch(92.8% 0.006 264.531);
    --color-gray-400: oklch(70.7% 0.022 261.325);
    --color-gray-500: oklch(55.1% 0.027 264.364);
    --color-gray-600: oklch(44.6% 0.03 256.802);
    --color-gray-700: oklch(37.3% 0.034 259.733);
    --color-gray-800: oklch(27.8% 0.033 256.848);
    --color-white: #fff;
    --spacing: 0.25rem;
    --container-sm: 24rem;
    --container-md: 28rem;
    --container-xl: 36rem;
    --container-2xl: 42rem;
    --text-xs: 0.75rem;
    --text-xs--line-height: calc(1 / 0.75);
    --text-2xl: 1.5rem;
    --text-2xl--line-height: calc(2 / 1.5);
    --text-3xl: 1.875rem;
    --text-3xl--line-height: calc(2.25 / 1.875);
    --text-5xl: 3rem;
    --text-5xl--line-height: 1;
    --text-6xl: 3.75rem;
    --text-6xl--line-height: 1;
    --font-weight-semibold: 600;
    --font-weight-bold: 700;
    --radius-md: 0.375rem;
    --radius-lg: 0.5rem;
    --default-transition-duration: 150ms;
    --default-transition-timing-function: cubic-bezier(0.4, 0, 0.2, 1);
    --default-font-family: var(--font-sans);
    --default-mono-font-family: var(--font-mono);
  }
}
@layer base {
  *, ::after, ::before, ::backdrop, ::file-selector-button {
    box-sizing: border-box;
    margin: 0;
    padding: 0;
    border: 0 solid;
  }
  html, :host {
    line-height: 1.5;
    -webkit-text-size-adjust: 100%;
    tab-size: 4;
    font-family: var(--default-font-family, ui-sans-serif, system-ui, sans-serif, "Apple Color Emoji", "Segoe UI Emoji", "Segoe UI Symbol", "Noto Color Emoji");
    font-feature-settings: var(--default-font-feature-settings, normal);
    font-variation-settings: var(--default-font-variation-settings, normal);
    -webkit-tap-highlight-color: transparent;
  }
  hr {
    height: 0;
    color: inherit;
    border-top-width: 1px;
  }
  abbr:where([title]) {
    -webkit-text-decoration: underline dotted;
    text-decoration: underline dotted;
  }
  h1, h2, h3, h4, h5, h6 {
    font-size: inherit;
    font-weight: inherit;
  }
  a {
    color: inherit;
    -webkit-text-decoration: inherit;
    text-decoration: inherit;
  }
  b, strong {
    font-weight: bolder;
  }
  code, kbd, samp, pre {
    font-family: var(--default-mono-font-family, ui-monospace, SFMono-Regular, Menlo, Monaco, Consolas, "Liberation Mono", "Courier New", monospace);
    font-feature-settings: var(--default-mono-font-feature-settings, normal);
    font-variation-settings: var(--default-mono-font-variation-settings, normal);
    font-size: 1em;
  }
  small {
    font-size: 80%;
  }
  sub, sup {
    font-size: 75%;
    line-height: 0;
    position: relative;
    vertical-align: baseline;
  }
  sub {
    bottom: -0.25em;
  }
  sup {
    top: -0.5em;
  }
  table {
    text-indent: 0;
    border-color: inherit;
    border-collapse: collapse;
  }
  :-moz-focusring {
    outline: auto;
  }
  progress {
    vertical-align: baseline;
  }
  summary {
    display: list-item;
  }
  ol, ul, menu {
    list-style: none;
  }
  img, svg, video, canvas, audio, iframe, embed, object {
    display: block;
    vertical-align: middle;
  }
  img, video {
    max-width: 100%;
    height: auto;
  }
  button, input, select, optgroup, textarea, ::file-selector-button {
    font: inherit;
    font-feature-settings: inherit;
    font-variation-settings: inherit;
    letter-spacing: inherit;
    color: inherit;
    border-radius: 0;
    background-color: transparent;
    opacity: 1;
  }
  :where(select:is([multiple], [size])) optgroup {
    font-weight: bolder;
  }
  :where(select:is([multiple], [size])) optgroup option {
    padding-inline-start: 20px;
  }
  ::file-selector-button {
    margin-inline-end: 4px;
  }
  ::placeholder {
    opacity: 1;
  }
  @supports (not (-webkit-appearance: -apple-pay-button))  or (contain-intrinsic-size: 1px) {
    ::placeholder {
      color: color-mix(in oklab, currentColor 50%, transparent);
    }
  }
  textarea {
    resize: vertical;
  }
  ::-webkit-search-decoration {
    -webkit-appearance: none;
  }
  ::-webkit-date-and-time-value {
    min-height: 1lh;
    text-align: inherit;
  }
  ::-webkit-datetime-edit {
    display: inline-flex;
  }
  ::-webkit-datetime-edit-fields-wrapper {
    padding: 0;
  }
  ::-webkit-datetime-edit, ::-webkit-datetime-edit-year-field, ::-webkit-datetime-edit-month-field, ::-webkit-datetime-edit-day-field, ::-webkit-datetime-edit-hour-field, ::-webkit-datetime-edit-minute-field, ::-webkit-datetime-edit-second-field, ::-webkit-datetime-edit-millisecond-field, ::-webkit-datetime-edit-meridiem-field {
    padding-block: 0;
  }
  :-moz-ui-invalid {
    box-shadow: none;
  }
  button, input:where([type="button"], [type="reset"], [type="submit"]), ::file-selector-button {
    appearance: button;
  }
  ::-webkit-inner-spin-button, ::-webkit-outer-spin-button {
    height: auto;
  }
  [hidden]:where(:not([hidden="until-found"])) {
    display: none !important;
  }
}
@layer utilities {
  .absolute {
    position: absolute;
  }
  .fixed {
    position: fixed;
  }
  .relative {
    position: relative;
  }
  .inset-0 {
    inset: calc(var(--spacing) * 0);
  }
  .top-0 {
    top: calc(var(--spacing) * 0);
  }
  .top-1\/2 {
    top: calc(1/2 * 100%);
  }
  .right-0 {
    right: calc(var(--spacing) * 0);
  }
  .bottom-0 {
    bottom: calc(var(--spacing) * 0);
  }
  .left-0 {
    left: calc(var(--spacing) * 0);
  }
  .z-50 {
    z-index: 50;
  }
  .container {
    width: 100%;
    @media (width >= 40rem) {
      max-width: 40rem;
    }
    @media (width >= 48rem) {
      max-width: 48rem;
    }
    @media (width >= 64rem) {
      max-width: 64rem;
    }
    @media (width >= 80rem) {
      max-width: 80rem;
    }
    @media (width >= 96rem) {
      max-width: 96rem;
    }
  }
  .m-0 {
    margin: calc(var(--spacing) * 0);
  }
  .m-2 {
    margin: calc(var(--spacing) * 2);
  }
  .-mx-4 {
    margin-inline: calc(var(--spacing) * -4);
  }
  .mx-auto {
    margin-inline: auto;
  }
  .mt-2 {
    margin-top: calc(var(--spacing) * 2);
  }
  .mr-1 {
    margin-right: calc(var(--spacing) * 1);
  }
  .mr-2 {
    margin-right: calc(var(--spacing) * 2);
  }
  .mr-3 {
    margin-right: calc(var(--spacing) * 3);
  }
  .mr-6 {
    margin-right: calc(var(--spacing) * 6);
  }
  .mr-8 {
    margin-right: calc(var(--spacing) * 8);
  }
  .mr-10 {
    margin-right: calc(var(--spacing) * 10);
  }
  .mr-12 {
    margin-right: calc(var(--spacing) * 12);
  }
  .mr-14 {
    margin-right: calc(var(--spacing) * 14);
  }
  .mr-16 {
    margin-right: calc(var(--spacing) * 16);
  }
  .mr-auto {
    margin-right: auto;
  }
  .mb-4 {
    margin-bottom: calc(var(--spacing) * 4);
  }
  .mb-6 {
    margin-bottom: calc(var(--spacing) * 6);
  }
  .mb-8 {
    margin-bottom: calc(var(--spacing) * 8);
  }
  .mb-10 {
    margin-bottom: calc(var(--spacing) * 10);
  }
  .mb-12 {
    margin-bottom: calc(var(--spacing) * 12);
  }
  .mb-14 {
    margin-bottom: calc(var(--spacing) * 14);
  }
  .mb-16 {
    margin-bottom: calc(var(--spacing) * 16);
  }
  .mb-24 {
    margin-bottom: calc(var(--spacing) * 24);
  }
  .ml-8 {
    margin-left: calc(var(--spacing) * 8);
  }
  .block {
    display: block;
  }
  .flex {
    display: flex;
  }
  .hidden {
    display: none;
  }
  .inline-block {
    display: inline-block;
  }
  .inline-flex {
    display: inline-flex;
  }
  .h-2 {
    height: calc(var(--spacing) * 2);
  }
  .h-6 {
    height: calc(var(--spacing) * 6);
  }
  .h-8 {
    height: calc(var(--spacing) * 8);
  }
  .h-9 {
    height: calc(var(--spacing) * 9);
  }
  .h-40 {
    height: calc(var(--spacing) * 40);
  }
  .h-full {
    height: 100%;
  }
  .w-1\/2 {
    width: calc(1/2 * 100%);
  }
  .w-1\/4 {
    width: calc(1/4 * 100%);
  }
  .w-1\/6 {
    width: calc(1/6 * 100%);
  }
  .w-2 {
    width: calc(var(--spacing) * 2);
  }
  .w-5\/6 {
    width: calc(5/6 * 100%);
  }
  .w-6 {
    width: calc(var(--spacing) * 6);
  }
  .w-8 {
    width: calc(var(--spacing) * 8);
  }
  .w-12 {
    width: calc(var(--spacing) * 12);
  }
  .w-full {
    width: 100%;
  }
  .max-w-2xl {
    max-width: var(--container-2xl);
  }
  .max-w-md {
    max-width: var(--container-md);
  }
  .max-w-sm {
    max-width: var(--container-sm);
  }
  .max-w-xl {
    max-width: var(--container-xl);
  }
  .shrink-0 {
    flex-shrink: 0;
  }
  .translate-1\/2 {
    --tw-translate-x: calc(1/2 * 100%);
    --tw-translate-y: calc(1/2 * 100%);
    translate: var(--tw-translate-x) var(--tw-translate-y);
  }
  .transform {
    transform: var(--tw-rotate-x) var(--tw-rotate-y) var(--tw-rotate-z) var(--tw-skew-x) var(--tw-skew-y);
  }
  .cursor-pointer {
    cursor: pointer;
  }
  .flex-col {
    flex-direction: column;
  }
  .flex-row {
    flex-direction: row;
  }
  .flex-wrap {
    flex-wrap: wrap;
  }
  .place-items-center {
    place-items: center;
  }
  .items-center {
    align-items: center;
  }
  .justify-between {
    justify-content: space-between;
  }
  .self-center {
    align-self: center;
  }
  .overflow-y-auto {
    overflow-y: auto;
  }
  .rounded {
    border-radius: 0.25rem;
  }
  .rounded-full {
    border-radius: calc(infinity * 1px);
  }
  .rounded-lg {
    border-radius: var(--radius-lg);
  }
  .rounded-md {
    border-radius: var(--radius-md);
  }
  .border {
    border-style: var(--tw-border-style);
    border-width: 1px;
  }
  .border-0 {
    border-style: var(--tw-border-style);
    border-width: 0px;
  }
  .border-r {
    border-right-style: var(--tw-border-style);
    border-right-width: 1px;
  }
  .border-b {
    border-bottom-style: var(--tw-border-style);
    border-bottom-width: 1px;
  }
  .border-b-2 {
    border-bottom-style: var(--tw-border-style);
    border-bottom-width: 2px;
  }
  .border-l {
    border-left-style: var(--tw-border-style);
    border-left-width: 1px;
  }
  .border-gray-200 {
    border-color: var(--color-gray-200);
  }
  .border-transparent {
    border-color: transparent;
  }
  .bg-gray-50 {
    background-color: var(--color-gray-50);
  }
  .bg-gray-100 {
    background-color: var(--color-gray-100);
  }
  .bg-gray-800 {
    background-color: var(--color-gray-800);
  }
  .bg-orange-300 {
    background-color: var(--color-orange-300);
  }
  .bg-white {
    background-color: var(--color-white);
  }
  .object-cover {
    object-fit: cover;
  }
  .object-scale-down {
    object-fit: scale-down;
  }
  .p-2 {
    padding: calc(var(--spacing) * 2);
  }
  .p-10 {
    padding: calc(var(--spacing) * 10);
  }
  .px-2 {
    padding-inline: calc(var(--spacing) * 2);
  }
  .px-4 {
    padding-inline: calc(var(--spacing) * 4);
  }
  .px-6 {
    padding-inline: calc(var(--spacing) * 6);
  }
  .px-8 {
    padding-inline: calc(var(--spacing) * 8);
  }
  .px-10 {
    padding-inline: calc(var(--spacing) * 10);
  }
  .px-12 {
    padding-inline: calc(var(--spacing) * 12);
  }
  .py-2 {
    padding-block: calc(var(--spacing) * 2);
  }
  .py-4 {
    padding-block: calc(var(--spacing) * 4);
  }
  .py-5 {
    padding-block: calc(var(--spacing) * 5);
  }
  .py-6 {
    padding-block: calc(var(--spacing) * 6);
  }
  .py-8 {
    padding-block: calc(var(--spacing) * 8);
  }
  .py-20 {
    padding-block: calc(var(--spacing) * 20);
  }
  .pr-10 {
    padding-right: calc(var(--spacing) * 10);
  }
  .pb-10 {
    padding-bottom: calc(var(--spacing) * 10);
  }
  .pl-4 {
    padding-left: calc(var(--spacing) * 4);
  }
  .pl-6 {
    padding-left: calc(var(--spacing) * 6);
  }
  .text-center {
    text-align: center;
  }
  .text-left {
    text-align: left;
  }
  .text-2xl {
    font-size: var(--text-2xl);
    line-height: var(--tw-leading, var(--text-2xl--line-height));
  }
  .text-3xl {
    font-size: var(--text-3xl);
    line-height: var(--tw-leading, var(--text-3xl--line-height));
  }
  .text-5xl {
    font-size: var(--text-5xl);
    line-height: var(--tw-leading, var(--text-5xl--line-height));
  }
  .text-xs {
    font-size: var(--text-xs);
    line-height: var(--tw-leading, var(--text-xs--line-height));
  }
  .font-bold {
    --tw-font-weight: var(--font-weight-bold);
    font-weight: var(--font-weight-bold);
  }
  .font-semibold {
    --tw-font-weight: var(--font-weight-semibold);
    font-weight: var(--font-weight-semibold);
  }
  .text-ellipsis {
    text-overflow: ellipsis;
  }
  .text-blue-300 {
    color: var(--color-blue-300);
  }
  .text-gray-400 {
    color: var(--color-gray-400);
  }
  .text-gray-500 {
    color: var(--color-gray-500);
  }
  .text-gray-600 {
    color: var(--color-gray-600);
  }
  .text-white {
    color: var(--color-white);
  }
  .uppercase {
    text-transform: uppercase;
  }
  .placeholder-gray-400 {
    &::placeholder {
      color: var(--color-gray-400);
    }
  }
  .opacity-25 {
    opacity: 25%;
  }
  .shadow-2xl {
    --tw-shadow: 0 25px 50px -12px var(--tw-shadow-color, rgb(0 0 0 / 0.25));
    box-shadow: var(--tw-inset-shadow), var(--tw-inset-ring-shadow), var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow);
  }
  .shadow-lg {
    --tw-shadow: 0 10px 15px -3px var(--tw-shadow-color, rgb(0 0 0 / 0.1)), 0 4px 6px -4px var(--tw-shadow-color, rgb(0 0 0 / 0.1));
    box-shadow: var(--tw-inset-shadow), var(--tw-inset-ring-shadow), var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow);
  }
  .ring-1 {
    --tw-ring-shadow: var(--tw-ring-inset,) 0 0 0 calc(1px + var(--tw-ring-offset-width)) var(--tw-ring-color, currentColor);
    box-shadow: var(--tw-inset-shadow), var(--tw-inset-ring-shadow), var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow);
  }
  .transition {
    transition-property: color, background-color, border-color, outline-color, text-decoration-color, fill, stroke, --tw-gradient-from, --tw-gradient-via, --tw-gradient-to, opacity, box-shadow, transform, translate, scale, rotate, filter, -webkit-backdrop-filter, backdrop-filter;
    transition-timing-function: var(--tw-ease, var(--default-transition-timing-function));
    transition-duration: var(--tw-duration, var(--default-transition-duration));
  }
  .transition-all {
    transition-property: all;
    transition-timing-function: var(--tw-ease, var(--default-transition-timing-function));
    transition-duration: var(--tw-duration, var(--default-transition-duration));
  }
  .duration-200 {
    --tw-duration: 200ms;
    transition-duration: 200ms;
  }
  .hover\:bg-orange-400 {
    &:hover {
      @media (hover: hover) {
        background-color: var(--color-orange-400);
      }
    }
  }
  .hover\:text-gray-600 {
    &:hover {
      @media (hover: hover) {
        color: var(--color-gray-600);
      }
    }
  }
  .hover\:text-gray-700 {
    &:hover {
      @media (hover: hover) {
        color: var(--color-gray-700);
      }
    }
  }
  .hover\:shadow-2xl {
    &:hover {
      @media (hover: hover) {
        --tw-shadow: 0 25px 50px -12px var(--tw-shadow-color, rgb(0 0 0 / 0.25));
        box-shadow: var(--tw-inset-shadow), var(--tw-inset-ring-shadow), var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow);
      }
    }
  }
  .hover\:ring-4 {
    &:hover {
      @media (hover: hover) {
        --tw-ring-shadow: var(--tw-ring-inset,) 0 0 0 calc(4px + var(--tw-ring-offset-width)) var(--tw-ring-color, currentColor);
        box-shadow: var(--tw-inset-shadow), var(--tw-inset-ring-shadow), var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow);
      }
    }
  }
  .focus\:border-blue-300 {
    &:focus {
      border-color: var(--color-blue-300);
    }
  }
  .focus\:ring-blue-300 {
    &:focus {
      --tw-ring-color: var(--color-blue-300);
    }
  }
  .focus\:ring-transparent {
    &:focus {
      --tw-ring-color: transparent;
    }
  }
  .focus\:outline-hidden {
    &:focus {
      --tw-outline-style: none;
      outline-style: none;
      @media (forced-colors: active) {
        outline: 2px solid transparent;
        outline-offset: 2px;
      }
    }
  }
  .md\:mb-0 {
    @media (width >= 48rem) {
      margin-bottom: calc(var(--spacing) * 0);
    }
  }
  .md\:w-1\/2 {
    @media (width >= 48rem) {
      width: calc(1/2 * 100%);
    }
  }
  .md\:w-auto {
    @media (width >= 48rem) {
      width: auto;
    }
  }
  .md\:text-right {
    @media (width >= 48rem) {
      text-align: right;
    }
  }
  .md\:text-6xl {
    @media (width >= 48rem) {
      font-size: var(--text-6xl);
      line-height: var(--tw-leading, var(--text-6xl--line-height));
    }
  }
  .lg\:pl-20 {
    @media (width >= 64rem) {
      padding-left: calc(var(--spacing) * 20);
    }
  }
  .xl\:mx-auto {
    @media (width >= 80rem) {
      margin-inline: auto;
    }
  }
  .xl\:mb-0 {
    @media (width >= 80rem) {
      margin-bottom: calc(var(--spacing) * 0);
    }
  }
  .xl\:block {
    @media (width >= 80rem) {
      display: block;
    }
  }
  .xl\:flex {
    @media (width >= 80rem) {
      display: flex;
    }
  }
  .xl\:hidden {
    @media (width >= 80rem) {
      display: none;
    }
  }
  .xl\:inline-block {
    @media (width >= 80rem) {
      display: inline-block;
    }
  }
  .xl\:w-2\/3 {
    @media (width >= 80rem) {
      width: calc(2/3 * 100%);
    }
  }
}
@property --tw-translate-x {
  syntax: "*";
  inherits: false;
  initial-value: 0;
}
@property --tw-translate-y {
  syntax: "*";
  inherits: false;
  initial-value: 0;
}
@property --tw-translate-z {
  syntax: "*";
  inherits: false;
  initial-value: 0;
}
@property --tw-rotate-x {
  syntax: "*";
  inherits: false;
  initial-value: rotateX(0);
}
@property --tw-rotate-y {
  syntax: "*";
  inherits: false;
  initial-value: rotateY(0);
}
@property --tw-rotate-z {
  syntax: "*";
  inherits: false;
  initial-value: rotateZ(0);
}
@property --tw-skew-x {
  syntax: "*";
  inherits: false;
  initial-value: skewX(0);
}
@property --tw-skew-y {
  syntax: "*";
  inherits: false;
  initial-value: skewY(0);
}
@property --tw-border-style {
  syntax: "*";
  inherits: false;
  initial-value: solid;
}
@property --tw-font-weight {
  syntax: "*";
  inherits: false;
}
@property --tw-shadow {
  syntax: "*";
  inherits: false;
  initial-value: 0 0 #0000;
}
@property --tw-shadow-color {
  syntax: "*";
  inherits: false;
}
@property --tw-shadow-alpha {
  syntax: "<percentage>";
  inherits: false;
  initial-value: 100%;
}
@property --tw-inset-shadow {
  syntax: "*";
  inherits: false;
  initial-value: 0 0 #0000;
}
@property --tw-inset-shadow-color {
  syntax: "*";
  inherits: false;
}
@property --tw-inset-shadow-alpha {
  syntax: "<percentage>";
  inherits: false;
  initial-value: 100%;
}
@property --tw-ring-color {
  syntax: "*";
  inherits: false;
}
@property --tw-ring-shadow {
  syntax: "*";
  inherits: false;
  initial-value: 0 0 #0000;
}
@property --tw-inset-ring-color {
  syntax: "*";
  inherits: false;
}
@property --tw-inset-ring-shadow {
  syntax: "*";
  inherits: false;
  initial-value: 0 0 #0000;
}
@property --tw-ring-inset {
  syntax: "*";
  inherits: false;
}
@property --tw-ring-offset-width {
  syntax: "<length>";
  inherits: false;
  initial-value: 0px;
}
@property --tw-ring-offset-color {
  syntax: "*";
  inherits: false;
  initial-value: #fff;
}
@property --tw-ring-offset-shadow {
  syntax: "*";
  inherits: false;
  initial-value: 0 0 #0000;
}
@property --tw-duration {
  syntax: "*";
  inherits: false;
}


================================================
FILE: examples/01-app-demos/ecommerce-site/src/api.rs
================================================
use dioxus::prelude::Result;
use serde::{Deserialize, Serialize};
use std::fmt::Display;

// Cache up to 100 requests, invalidating them after 60 seconds
pub(crate) async fn fetch_product(product_id: usize) -> Result<Product> {
    Ok(
        reqwest::get(format!("https://fakestoreapi.com/products/{product_id}"))
            .await?
            .json()
            .await?,
    )
}

// Cache up to 100 requests, invalidating them after 60 seconds
pub(crate) async fn fetch_products(count: usize, sort: Sort) -> Result<Vec<Product>> {
    Ok(reqwest::get(format!(
        "https://fakestoreapi.com/products/?sort={sort}&limit={count}"
    ))
    .await?
    .json()
    .await?)
}

#[derive(Serialize, Deserialize, PartialEq, Clone, Debug, Default)]
pub(crate) struct Product {
    pub(crate) id: u32,
    pub(crate) title: String,
    pub(crate) price: f32,
    pub(crate) description: String,
    pub(crate) category: String,
    pub(crate) image: String,
    pub(crate) rating: Rating,
}

#[derive(Serialize, Deserialize, PartialEq, Clone, Debug, Default)]
pub(crate) struct Rating {
    pub(crate) rate: f32,
    pub(crate) count: u32,
}

impl Display for Rating {
    fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
        let rounded = self.rate.round() as usize;
        for _ in 0..rounded {
            "★".fmt(f)?;
        }
        for _ in 0..(5 - rounded) {
            "☆".fmt(f)?;
        }

        write!(f, " ({:01}) ({} ratings)", self.rate, self.count)?;

        Ok(())
    }
}

#[allow(unused)]
#[derive(Clone, Copy, Hash, PartialEq, Eq, PartialOrd)]
pub(crate) enum Sort {
    Descending,
    Ascending,
}

impl Display for Sort {
    fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
        match self {
            Sort::Descending => write!(f, "desc"),
            Sort::Ascending => write!(f, "asc"),
        }
    }
}


================================================
FILE: examples/01-app-demos/ecommerce-site/src/components/error.rs
================================================
use dioxus::prelude::*;

#[component]
pub fn error_page() -> Element {
    rsx! {
        section { class: "py-20",
            div { class: "container mx-auto px-4",
                div { class: "flex flex-wrap -mx-4 mb-24 text-center",
                    "An internal error has occurred"
                }
            }
        }
    }
}


================================================
FILE: examples/01-app-demos/ecommerce-site/src/components/home.rs
================================================
// The homepage is statically rendered, so we don't need to a persistent websocket connection.

use crate::{
    api::{fetch_products, Sort},
    components::nav::Nav,
    components::product_item::ProductItem,
};
use dioxus::prelude::*;

pub(crate) fn Home() -> Element {
    let products = use_loader(|| fetch_products(10, Sort::Ascending))?;

    rsx! {
        Nav {}
        section { class: "p-10",
            for product in products.iter() {
                ProductItem {
                    product: product.clone()
                }
            }
        }
    }
}


================================================
FILE: examples/01-app-demos/ecommerce-site/src/components/loading.rs
================================================
use dioxus::prelude::*;

#[component]
pub(crate) fn ChildrenOrLoading(children: Element) -> Element {
    rsx! {
        Stylesheet { href: asset!("/public/loading.css") }
        SuspenseBoundary {
            fallback: |_| rsx! { div { class: "spinner", } },
            {children}
        }
    }
}


================================================
FILE: examples/01-app-demos/ecommerce-site/src/components/nav.rs
================================================
use dioxus::prelude::*;

#[component]
pub fn Nav() -> Element {
    rsx! {
        section { class: "relative",
            nav { class: "flex justify-between border-b",
                div { class: "px-12 py-8 flex w-full items-center",
                    a { class: "hidden xl:block mr-16",
                        href: "/",
                        icons::cart_icon {}
                    }
                    ul { class: "hidden xl:flex font-semibold font-heading",
                        li { class: "mr-12",
                            a { class: "hover:text-gray-600",
                                href: "/",
                                "Category"
                            }
                        }
                        li { class: "mr-12",
                            a { class: "hover:text-gray-600",
                                href: "/",
                                "Collection"
                            }
                        }
                        li { class: "mr-12",
                            a { class: "hover:text-gray-600",
                                href: "/",
                                "Story"
                            }
                        }
                        li {
                            a { class: "hover:text-gray-600",
                                href: "/",
                                "Brand"
                            }
                        }
                    }
                    a { class: "shrink-0 xl:mx-auto text-3xl font-bold font-heading",
                        href: "/",
                        img { class: "h-9",
                            width: "auto",
                            alt: "",
                            src: "https://shuffle.dev/yofte-assets/logos/yofte-logo.svg",
                        }
                    }
                    div { class: "hidden xl:inline-block mr-14",
                        input { class: "py-5 px-8 w-full placeholder-gray-400 text-xs uppercase font-semibold font-heading bg-gray-50 border border-gray-200 focus:ring-blue-300 focus:border-blue-300 rounded-md",
                            placeholder: "Search",
                            r#type: "text",
                        }
                    }
                    div { class: "hidden xl:flex items-center",
                        a { class: "mr-10 hover:text-gray-600",
                            href: "",
                            icons::icon_1 {}
                        }
                        a { class: "flex items-center hover:text-gray-600",
                            href: "/",
                            icons::icon_2 {}
                            span { class: "inline-block w-6 h-6 text-center bg-gray-50 rounded-full font-semibold font-heading",
                                "3"
                            }
                        }
                    }
                }
                a { class: "hidden xl:flex items-center px-12 border-l font-semibold font-heading hover:text-gray-600",
                    href: "/",
                    icons::icon_3 {}
                    span {
                        "Sign In"
                    }
                }
                a { class: "xl:hidden flex mr-6 items-center text-gray-600",
                    href: "/",
                    icons::icon_4 {}
                    span { class: "inline-block w-6 h-6 text-center bg-gray-50 rounded-full font-semibold font-heading",
                        "3"
                    }
                }
                a { class: "navbar-burger self-center mr-12 xl:hidden",
                    href: "/",
                    icons::icon_5 {}
                }
            }
            div { class: "hidden navbar-menu fixed top-0 left-0 bottom-0 w-5/6 max-w-sm z-50",
                div { class: "navbar-backdrop fixed inset-0 bg-gray-800 opacity-25",
                }
                nav { class: "relative flex flex-col py-6 px-6 w-full h-full bg-white border-r overflow-y-auto",
                    div { class: "flex items-center mb-8",
                        a { class: "mr-auto text-3xl font-bold font-heading",
                            href: "/",
                            img { class: "h-9",
                                src: "https://shuffle.dev/yofte-assets/logos/yofte-logo.svg",
                                width: "auto",
                                alt: "",
                            }
                        }
                        button { class: "navbar-close",
                            icons::icon_6 {}
                        }
                    }
                    div { class: "flex mb-8 justify-between",
                        a { class: "inline-flex items-center font-semibold font-heading",
                            href: "/",
                            icons::icon_7 {}
                            span {
                                "Sign In"
                            }
                        }
                        div { class: "flex items-center",
                            a { class: "mr-10",
                                href: "/",
                                icons::icon_8 {}
                            }
                            a { class: "flex items-center",
                                href: "/",
                                icons::icon_9 {}
                                span { class: "inline-block w-6 h-6 text-center bg-gray-100 rounded-full font-semibold font-heading",
                                    "3"
                                }
                            }
                        }
                    }
                    input { class: "block mb-10 py-5 px-8 bg-gray-100 rounded-md border-transparent focus:ring-blue-300 focus:border-blue-300 focus:outline-hidden",
                        r#type: "search",
                        placeholder: "Search",
                    }
                    ul { class: "text-3xl font-bold font-heading",
                        li { class: "mb-8",
                            a {
                                href: "/",
                                "Category"
                            }
                        }
                        li { class: "mb-8",
                            a {
                                href: "/",
                                "Collection"
                            }
                        }
                        li { class: "mb-8",
                            a {
                                href: "/",
                                "Story"
                            }
                        }
                        li {
                            a {
                                href: "/",
                                "Brand"
                            }
                        }
                    }
                }
            }
        }
    }
}

mod icons {
    use super::*;

    pub(super) fn cart_icon() -> Element {
        rsx! {
            svg { class: "mr-3",
                fill: "none",
                xmlns: "http://www.w3.org/2000/svg",
                view_box: "0 0 23 23",
                width: "23",
                height: "23",
                path {
                    stroke_linejoin: "round",
                    d: "M18.1159 8.72461H2.50427C1.99709 8.72461 1.58594 9.12704 1.58594 9.62346V21.3085C1.58594 21.8049 1.99709 22.2074 2.50427 22.2074H18.1159C18.6231 22.2074 19.0342 21.8049 19.0342 21.3085V9.62346C19.0342 9.12704 18.6231 8.72461 18.1159 8.72461Z",
                    stroke: "currentColor",
                    stroke_linecap: "round",
                    stroke_width: "1.5",
                }
                path {
                    stroke: "currentColor",
                    stroke_linecap: "round",
                    d: "M6.34473 6.34469V4.95676C6.34473 3.85246 6.76252 2.79338 7.5062 2.01252C8.24988 1.23165 9.25852 0.792969 10.3102 0.792969C11.362 0.792969 12.3706 1.23165 13.1143 2.01252C13.858 2.79338 14.2758 3.85246 14.2758 4.95676V6.34469",
                    stroke_width: "1.5",
                    stroke_linejoin: "round",
                }
            }
        }
    }

    pub(super) fn icon_1() -> Element {
        rsx! {
            svg {
                xmlns: "http://www.w3.org/2000/svg",
                height: "20",
                view_box: "0 0 23 20",
                width: "23",
                fill: "none",
                path {
                    d: "M11.4998 19.2061L2.70115 9.92527C1.92859 9.14433 1.41864 8.1374 1.24355 7.04712C1.06847 5.95684 1.23713 4.8385 1.72563 3.85053V3.85053C2.09464 3.10462 2.63366 2.45803 3.29828 1.96406C3.9629 1.47008 4.73408 1.14284 5.5483 1.00931C6.36252 0.875782 7.19647 0.939779 7.98144 1.19603C8.7664 1.45228 9.47991 1.89345 10.0632 2.48319L11.4998 3.93577L12.9364 2.48319C13.5197 1.89345 14.2332 1.45228 15.0182 1.19603C15.8031 0.939779 16.6371 0.875782 17.4513 1.00931C18.2655 1.14284 19.0367 1.47008 19.7013 1.96406C20.3659 2.45803 20.905 3.10462 21.274 3.85053V3.85053C21.7625 4.8385 21.9311 5.95684 21.756 7.04712C21.581 8.1374 21.071 9.14433 20.2984 9.92527L11.4998 19.2061Z",
                    stroke: "currentColor",
                    stroke_width: "1.5",
                    stroke_linejoin: "round",
                    stroke_linecap: "round",
                }
            }
        }
    }

    pub(super) fn icon_2() -> Element {
        rsx! {
            svg { class: "mr-3",
                fill: "none",
                height: "31",
                xmlns: "http://www.w3.org/2000/svg",
                width: "32",
                view_box: "0 0 32 31",
                path {
                    stroke_linejoin: "round",
                    stroke_width: "1.5",
                    d: "M16.0006 16.3154C19.1303 16.3154 21.6673 13.799 21.6673 10.6948C21.6673 7.59064 19.1303 5.07422 16.0006 5.07422C12.871 5.07422 10.334 7.59064 10.334 10.6948C10.334 13.799 12.871 16.3154 16.0006 16.3154Z",
                    stroke_linecap: "round",
                    stroke: "currentColor",
                }
                path {
                    stroke_width: "1.5",
                    d: "M24.4225 23.8963C23.6678 22.3507 22.4756 21.0445 20.9845 20.1298C19.4934 19.2151 17.7647 18.7295 15.9998 18.7295C14.2349 18.7295 12.5063 19.2151 11.0152 20.1298C9.52406 21.0445 8.33179 22.3507 7.57715 23.8963",
                    stroke: "currentColor",
                    stroke_linecap: "round",
                    stroke_linejoin: "round",
                }
            }
        }
    }

    pub(super) fn icon_3() -> Element {
        rsx! {
            svg { class: "h-2 w-2 text-gray-500 cursor-pointer",
                height: "10",
                width: "10",
                xmlns: "http://www.w3.org/2000/svg",
                fill: "none",
                view_box: "0 0 10 10",
                path {
                    stroke_width: "1.5",
                    stroke_linejoin: "round",
                    d: "M9.00002 1L1 9.00002M1.00003 1L9.00005 9.00002",
                    stroke: "black",
                    stroke_linecap: "round",
                }
            }
        }
    }

    pub(super) fn icon_4() -> Element {
        rsx! {
            svg {
                view_box: "0 0 20 12",
                fill: "none",
                width: "20",
                xmlns: "http://www.w3.org/2000/svg",
                height: "12",
                path {
                    d: "M1 2H19C19.2652 2 19.5196 1.89464 19.7071 1.70711C19.8946 1.51957 20 1.26522 20 1C20 0.734784 19.8946 0.48043 19.7071 0.292893C19.5196 0.105357 19.2652 0 19 0H1C0.734784 0 0.48043 0.105357 0.292893 0.292893C0.105357 0.48043 0 0.734784 0 1C0 1.26522 0.105357 1.51957 0.292893 1.70711C0.48043 1.89464 0.734784 2 1 2ZM19 10H1C0.734784 10 0.48043 10.1054 0.292893 10.2929C0.105357 10.4804 0 10.7348 0 11C0 11.2652 0.105357 11.5196 0.292893 11.7071C0.48043 11.8946 0.734784 12 1 12H19C19.2652 12 19.5196 11.8946 19.7071 11.7071C19.8946 11.5196 20 11.2652 20 11C20 10.7348 19.8946 10.4804 19.7071 10.2929C19.5196 10.1054 19.2652 10 19 10ZM19 5H1C0.734784 5 0.48043 5.10536 0.292893 5.29289C0.105357 5.48043 0 5.73478 0 6C0 6.26522 0.105357 6.51957 0.292893 6.70711C0.48043 6.89464 0.734784 7 1 7H19C19.2652 7 19.5196 6.89464 19.7071 6.70711C19.8946 6.51957 20 6.26522 20 6C20 5.73478 19.8946 5.48043 19.7071 5.29289C19.5196 5.10536 19.2652 5 19 5Z",
                    fill: "#8594A5",
                }
            }
        }
    }

    pub(super) fn icon_5() -> Element {
        rsx! {
            svg { class: "mr-2",
                fill: "none",
                xmlns: "http://www.w3.org/2000/svg",
                width: "23",
                height: "23",
                view_box: "0 0 23 23",
                path {
                    stroke_width: "1.5",
                    stroke_linecap: "round",
                    stroke_linejoin: "round",
                    d: "M18.1159 8.72461H2.50427C1.99709 8.72461 1.58594 9.12704 1.58594 9.62346V21.3085C1.58594 21.8049 1.99709 22.2074 2.50427 22.2074H18.1159C18.6231 22.2074 19.0342 21.8049 19.0342 21.3085V9.62346C19.0342 9.12704 18.6231 8.72461 18.1159 8.72461Z",
                    stroke: "currentColor",
                }
                path {
                    d: "M6.34473 6.34469V4.95676C6.34473 3.85246 6.76252 2.79338 7.5062 2.01252C8.24988 1.23165 9.25852 0.792969 10.3102 0.792969C11.362 0.792969 12.3706 1.23165 13.1143 2.01252C13.858 2.79338 14.2758 3.85246 14.2758 4.95676V6.34469",
                    stroke_linejoin: "round",
                    stroke_width: "1.5",
                    stroke_linecap: "round",
                    stroke: "currentColor",
                }
            }
        }
    }

    pub(super) fn icon_6() -> Element {
        rsx! {
            svg { class: "mr-3",
                height: "31",
                xmlns: "http://www.w3.org/2000/svg",
                view_box: "0 0 32 31",
                width: "32",
                fill: "none",
                path {
                    stroke: "currentColor",
                    stroke_width: "1.5",
                    d: "M16.0006 16.3154C19.1303 16.3154 21.6673 13.799 21.6673 10.6948C21.6673 7.59064 19.1303 5.07422 16.0006 5.07422C12.871 5.07422 10.334 7.59064 10.334 10.6948C10.334 13.799 12.871 16.3154 16.0006 16.3154Z",
                    stroke_linecap: "round",
                    stroke_linejoin: "round",
                }
                path {
                    stroke_linecap: "round",
                    stroke_width: "1.5",
                    stroke: "currentColor",
                    stroke_linejoin: "round",
                    d: "M24.4225 23.8963C23.6678 22.3507 22.4756 21.0445 20.9845 20.1298C19.4934 19.2151 17.7647 18.7295 15.9998 18.7295C14.2349 18.7295 12.5063 19.2151 11.0152 20.1298C9.52406 21.0445 8.33179 22.3507 7.57715 23.8963",
                }
            }
        }
    }

    pub(super) fn icon_7() -> Element {
        rsx! {
            svg { class: "mr-3",
                view_box: "0 0 23 23",
                fill: "none",
                height: "23",
                width: "23",
                xmlns: "http://www.w3.org/2000/svg",
                path {
                    stroke_linecap: "round",
                    stroke: "currentColor",
                    stroke_width: "1.5",
                    stroke_linejoin: "round",
                    d: "M18.1159 8.72461H2.50427C1.99709 8.72461 1.58594 9.12704 1.58594 9.62346V21.3085C1.58594 21.8049 1.99709 22.2074 2.50427 22.2074H18.1159C18.6231 22.2074 19.0342 21.8049 19.0342 21.3085V9.62346C19.0342 9.12704 18.6231 8.72461 18.1159 8.72461Z",
                }
                path {
                    d: "M6.34473 6.34469V4.95676C6.34473 3.85246 6.76252 2.79338 7.5062 2.01252C8.24988 1.23165 9.25852 0.792969 10.3102 0.792969C11.362 0.792969 12.3706 1.23165 13.1143 2.01252C13.858 2.79338 14.2758 3.85246 14.2758 4.95676V6.34469",
                    stroke_width: "1.5",
                    stroke_linecap: "round",
                    stroke: "currentColor",
                    stroke_linejoin: "round",
                }
            }
        }
    }

    pub(super) fn icon_8() -> Element {
        rsx! {
            svg {
                height: "20",
                width: "23",
                fill: "none",
                view_box: "0 0 23 20",
                xmlns: "http://www.w3.org/2000/svg",
                path {
                    d: "M11.4998 19.2061L2.70115 9.92527C1.92859 9.14433 1.41864 8.1374 1.24355 7.04712C1.06847 5.95684 1.23713 4.8385 1.72563 3.85053V3.85053C2.09464 3.10462 2.63366 2.45803 3.29828 1.96406C3.9629 1.47008 4.73408 1.14284 5.5483 1.00931C6.36252 0.875782 7.19647 0.939779 7.98144 1.19603C8.7664 1.45228 9.47991 1.89345 10.0632 2.48319L11.4998 3.93577L12.9364 2.48319C13.5197 1.89345 14.2332 1.45228 15.0182 1.19603C15.8031 0.939779 16.6371 0.875782 17.4513 1.00931C18.2655 1.14284 19.0367 1.47008 19.7013 1.96406C20.3659 2.45803 20.905 3.10462 21.274 3.85053V3.85053C21.7625 4.8385 21.9311 5.95684 21.756 7.04712C21.581 8.1374 21.071 9.14433 20.2984 9.92527L11.4998 19.2061Z",
                    stroke_linejoin: "round",
                    stroke: "currentColor",
                    stroke_width: "1.5",
                    stroke_linecap: "round",
                }
            }
        }
    }

    pub(super) fn icon_9() -> Element {
        rsx! {
            svg {
                view_box: "0 0 18 18",
                xmlns: "http://www.w3.org/2000/svg",
                width: "18",
                height: "18",
                fill: "none",
                path {
                    fill: "black",
                    d: "M18 15.4688H0V17.7207H18V15.4688Z",
                }
                path {
                    fill: "black",
                    d: "M11.0226 7.87402H0V10.126H11.0226V7.87402Z",
                }
                path {
                    fill: "black",
                    d: "M18 0.279297H0V2.53127H18V0.279297Z",
                }
            }
        }
    }
}


================================================
FILE: examples/01-app-demos/ecommerce-site/src/components/product_item.rs
================================================
use dioxus::prelude::*;

use crate::api::Product;

#[component]
pub(crate) fn ProductItem(product: Product) -> Element {
    let Product {
        id,
        title,
        price,
        category,
        image,
        rating,
        ..
    } = product;

    rsx! {
        section { class: "h-40 p-2 m-2 shadow-lg ring-1 rounded-lg flex flex-row place-items-center hover:ring-4 hover:shadow-2xl transition-all duration-200",
            img {
                class: "object-scale-down w-1/6 h-full",
                src: "{image}",
            }
            div { class: "pl-4 text-left text-ellipsis",
                a {
                    href: "/details/{id}",
                    class: "w-full text-center",
                    "{title}"
                }
                p {
                    class: "w-full",
                    "{rating}"
                }
                p {
                    class: "w-full",
                    "{category}"
                }
                p {
                    class: "w-1/4",
                    "${price}"
                }
            }
        }
    }
}


================================================
FILE: examples/01-app-demos/ecommerce-site/src/components/product_page.rs
================================================
use std::{fmt::Display, str::FromStr};

use crate::api::{fetch_product, Product};
use dioxus::prelude::*;

#[component]
pub fn ProductPage(product_id: ReadSignal<usize>) -> Element {
    let mut quantity = use_signal(|| 1);
    let mut size = use_signal(Size::default);
    let product = use_loader(move || fetch_product(product_id()))?;

    let Product {
        title,
        price,
        description,
        category,
        image,
        rating,
        ..
    } = product();

    rsx! {
        section { class: "py-20",
            div { class: "container mx-auto px-4",
                div { class: "flex flex-wrap -mx-4 mb-24",
                    div { class: "w-full md:w-1/2 px-4 mb-8 md:mb-0",
                        div { class: "relative mb-10",
                            style: "height: 564px;",
                            a { class: "absolute top-1/2 left-0 ml-8 transform translate-1/2",
                                href: "#",
                                icons::icon_0 {}
                            }
                            img { class: "object-cover w-full h-full",
                                alt: "",
                                src: "{image}",
                            }
                            a { class: "absolute top-1/2 right-0 mr-8 transform translate-1/2",
                                href: "#",
                                icons::icon_1 {}
                            }
                        }
                    }
                    div { class: "w-full md:w-1/2 px-4",
                        div { class: "lg:pl-20",
                            div { class: "mb-10 pb-10 border-b",
                                h2 { class: "mt-2 mb-6 max-w-xl text-5xl md:text-6xl font-bold font-heading",
                                    "{title}"
                                }
                                div { class: "mb-8",
                                    "{rating}"
                                }
                                p { class: "inline-block mb-8 text-2xl font-bold font-heading text-blue-300",
                                    span {
                                        "${price}"
                                    }
                                }
                                p { class: "max-w-md text-gray-500",
                                    "{description}"
                                }
                            }
                            div { class: "flex mb-12",
                                div { class: "mr-6",
                                    span { class: "block mb-4 font-bold font-heading text-gray-400 uppercase",
                                        "QTY"
                                    }
                                    div { class: "inline-flex items-center px-4 font-semibold font-heading text-gray-500 border border-gray-200 focus:ring-blue-300 focus:border-blue-300 rounded-md",
                                        button { class: "py-2 hover:text-gray-700",
                                            onclick: move |_| quantity += 1,
                                            icons::icon_2 {}
                                        }
                                        input { class: "w-12 m-0 px-2 py-4 text-center md:text-right border-0 focus:ring-transparent focus:outline-hidden rounded-md",
                                            placeholder: "1",
                                            r#type: "number",
                                            value: "{quantity}",
                                            oninput: move |evt| if let Ok(as_number) = evt.value().parse() { quantity.set(as_number) },
                                        }
                                        button { class: "py-2 hover:text-gray-700",
                                            onclick: move |_| quantity -= 1,
                                            icons::icon_3 {}
                                        }
                                    }
                                }
                                div {
                                    span { class: "block mb-4 font-bold font-heading text-gray-400 uppercase",
                                        "Size"
                                    }
                                    select { class: "pl-6 pr-10 py-4 font-semibold font-heading text-gray-500 border border-gray-200 focus:ring-blue-300 focus:border-blue-300 rounded-md",
                                        id: "",
                                        name: "",
                                        onchange: move |evt| {
                                            if let Ok(new_size) = evt.value().parse() {
                                                size.set(new_size);
                                            }
                                        },
                                        option {
                                            value: "1",
                                            "Medium"
                                        }
                                        option {
                                            value: "2",
                                            "Small"
                                        }
                                        option {
                                            value: "3",
                                            "Large"
                                        }
                                    }
                                }
                            }
                            div { class: "flex flex-wrap -mx-4 mb-14 items-center",
                                div { class: "w-full xl:w-2/3 px-4 mb-4 xl:mb-0",
                                    a { class: "block bg-orange-300 hover:bg-orange-400 text-center text-white font-bold font-heading py-5 px-8 rounded-md uppercase transition duration-200",
                                        href: "#",
                                        "Add to cart"
                                    }
                                }
                            }
                            div { class: "flex items-center",
                                span { class: "mr-8 text-gray-500 font-bold font-heading uppercase",
                                    "SHARE IT"
                                }
                                a { class: "mr-1 w-8 h-8",
                                    href: "#",
                                    img {
                                        alt: "",
                                        src: "https://shuffle.dev/yofte-assets/buttons/facebook-circle.svg",
                                    }
                                }
                                a { class: "mr-1 w-8 h-8",
                                    href: "#",
                                    img {
                                        alt: "",
                                        src: "https://shuffle.dev/yofte-assets/buttons/instagram-circle.svg",
                                    }
                                }
                                a { class: "w-8 h-8",
                                    href: "#",
                                    img {
                                        src: "https://shuffle.dev/yofte-assets/buttons/twitter-circle.svg",
                                        alt: "",
                                    }
                                }
                            }
                        }
                    }
                }
                div {
                    ul { class: "flex flex-wrap mb-16 border-b-2",
                        li { class: "w-1/2 md:w-auto",
                            a { class: "inline-block py-6 px-10 bg-white text-gray-500 font-bold font-heading shadow-2xl",
                                href: "#",
                                "Description"
                            }
                        }
                        li { class: "w-1/2 md:w-auto",
                            a { class: "inline-block py-6 px-10 text-gray-500 font-bold font-heading",
                                href: "#",
                                "Customer reviews"
                            }
                        }
                        li { class: "w-1/2 md:w-auto",
                            a { class: "inline-block py-6 px-10 text-gray-500 fo
Download .txt
gitextract_gubgus_p/

├── .devcontainer/
│   ├── Dockerfile
│   ├── README.md
│   └── devcontainer.json
├── .github/
│   ├── CODEOWNERS
│   ├── FUNDING.yml
│   ├── ISSUE_TEMPLATE/
│   │   ├── bug_report.md
│   │   └── feature_requst.md
│   ├── actions/
│   │   └── free-disk-space/
│   │       └── action.yml
│   ├── dependabot.yml
│   ├── install.ps1
│   ├── install.sh
│   └── workflows/
│       ├── main.yml
│       ├── merge.yml
│       ├── promote.yml
│       ├── publish.yml
│       ├── setup-dev-drive.ps1
│       └── typos.yml
├── .gitignore
├── .vscode/
│   └── settings.json
├── AGENTS.md
├── Cargo.toml
├── LICENSE-APACHE
├── LICENSE-MIT
├── README.md
├── _typos.toml
├── codecov.yml
├── examples/
│   ├── 01-app-demos/
│   │   ├── bluetooth-scanner/
│   │   │   ├── .gitignore
│   │   │   ├── Cargo.toml
│   │   │   ├── README.md
│   │   │   ├── assets/
│   │   │   │   └── tailwind.css
│   │   │   ├── src/
│   │   │   │   └── main.rs
│   │   │   └── tailwind.css
│   │   ├── calculator.rs
│   │   ├── calculator_mutable.rs
│   │   ├── counters.rs
│   │   ├── crm.rs
│   │   ├── dog_app.rs
│   │   ├── ecommerce-site/
│   │   │   ├── .gitignore
│   │   │   ├── Cargo.toml
│   │   │   ├── README.md
│   │   │   ├── public/
│   │   │   │   ├── loading.css
│   │   │   │   └── tailwind.css
│   │   │   ├── src/
│   │   │   │   ├── api.rs
│   │   │   │   ├── components/
│   │   │   │   │   ├── error.rs
│   │   │   │   │   ├── home.rs
│   │   │   │   │   ├── loading.rs
│   │   │   │   │   ├── nav.rs
│   │   │   │   │   ├── product_item.rs
│   │   │   │   │   └── product_page.rs
│   │   │   │   └── main.rs
│   │   │   └── tailwind.css
│   │   ├── file-explorer/
│   │   │   ├── .gitignore
│   │   │   ├── Cargo.toml
│   │   │   ├── Dioxus.toml
│   │   │   ├── README.md
│   │   │   ├── assets/
│   │   │   │   └── fileexplorer.css
│   │   │   └── src/
│   │   │       └── main.rs
│   │   ├── geolocation-native-plugin/
│   │   │   ├── Cargo.toml
│   │   │   ├── Dioxus.toml
│   │   │   ├── README.md
│   │   │   ├── assets/
│   │   │   │   └── main.css
│   │   │   └── src/
│   │   │       ├── android/
│   │   │       │   ├── build.gradle.kts
│   │   │       │   ├── consumer-rules.pro
│   │   │       │   └── src/
│   │   │       │       └── main/
│   │   │       │           ├── AndroidManifest.xml
│   │   │       │           └── kotlin/
│   │   │       │               └── com/
│   │   │       │                   └── dioxus/
│   │   │       │                       └── geolocation/
│   │   │       │                           ├── Geolocation.kt
│   │   │       │                           └── GeolocationPlugin.kt
│   │   │       ├── ios/
│   │   │       │   ├── .gitignore
│   │   │       │   ├── plugin/
│   │   │       │   │   ├── Package.swift
│   │   │       │   │   ├── Sources/
│   │   │       │   │   │   ├── GeolocationPlugin.swift
│   │   │       │   │   │   └── LocationActivityAttributes.swift
│   │   │       │   │   └── Tests/
│   │   │       │   │       └── PluginTests/
│   │   │       │   │           └── PluginTests.swift
│   │   │       │   └── widget/
│   │   │       │       ├── Package.swift
│   │   │       │       └── Sources/
│   │   │       │           ├── LocationActivityAttributes.swift
│   │   │       │           └── LocationWidget.swift
│   │   │       ├── main.rs
│   │   │       └── plugin/
│   │   │           ├── error.rs
│   │   │           ├── mod.rs
│   │   │           └── models.rs
│   │   ├── hackernews/
│   │   │   ├── .gitignore
│   │   │   ├── Cargo.toml
│   │   │   ├── assets/
│   │   │   │   └── hackernews.css
│   │   │   └── src/
│   │   │       └── main.rs
│   │   ├── hello_world.rs
│   │   ├── hotdog/
│   │   │   ├── .gitignore
│   │   │   ├── Cargo.toml
│   │   │   ├── Dioxus.toml
│   │   │   ├── Dockerfile
│   │   │   ├── README.md
│   │   │   ├── assets/
│   │   │   │   └── main.css
│   │   │   ├── fly.toml
│   │   │   └── src/
│   │   │       ├── backend.rs
│   │   │       ├── frontend.rs
│   │   │       └── main.rs
│   │   ├── image_generator_openai.rs
│   │   ├── repo_readme.rs
│   │   ├── todomvc.rs
│   │   ├── todomvc_store.rs
│   │   ├── weather_app.rs
│   │   └── websocket_chat.rs
│   ├── 02-building-ui/
│   │   ├── disabled.rs
│   │   ├── nested_listeners.rs
│   │   └── svg.rs
│   ├── 03-assets-styling/
│   │   ├── css_modules.rs
│   │   ├── custom_assets.rs
│   │   ├── dynamic_assets.rs
│   │   ├── meta.rs
│   │   └── meta_elements.rs
│   ├── 04-managing-state/
│   │   ├── context_api.rs
│   │   ├── error_handling.rs
│   │   ├── global.rs
│   │   ├── memo_chain.rs
│   │   ├── reducer.rs
│   │   └── signals.rs
│   ├── 05-using-async/
│   │   ├── backgrounded_futures.rs
│   │   ├── clock.rs
│   │   ├── future.rs
│   │   ├── streams.rs
│   │   └── suspense.rs
│   ├── 06-routing/
│   │   ├── flat_router.rs
│   │   ├── hash_fragment_state.rs
│   │   ├── link.rs
│   │   ├── query_segment_search.rs
│   │   ├── router.rs
│   │   ├── router_resource.rs
│   │   ├── router_restore_scroll.rs
│   │   └── simple_router.rs
│   ├── 07-fullstack/
│   │   ├── auth/
│   │   │   ├── Cargo.toml
│   │   │   └── src/
│   │   │       ├── auth.rs
│   │   │       └── main.rs
│   │   ├── custom_axum_serve.rs
│   │   ├── custom_error_page.rs
│   │   ├── desktop/
│   │   │   ├── Cargo.toml
│   │   │   └── src/
│   │   │       └── main.rs
│   │   ├── dog_app_self_hosted.rs
│   │   ├── full_request_access.rs
│   │   ├── fullstack_hello_world.rs
│   │   ├── handling_errors.rs
│   │   ├── header_map.rs
│   │   ├── hello-world/
│   │   │   ├── Cargo.toml
│   │   │   ├── assets/
│   │   │   │   └── hello.css
│   │   │   └── src/
│   │   │       └── main.rs
│   │   ├── login_form.rs
│   │   ├── middleware.rs
│   │   ├── multipart_form.rs
│   │   ├── query_params.rs
│   │   ├── redirect.rs
│   │   ├── router/
│   │   │   ├── Cargo.toml
│   │   │   └── src/
│   │   │       └── main.rs
│   │   ├── server_functions.rs
│   │   ├── server_sent_events.rs
│   │   ├── server_state.rs
│   │   ├── ssr-only/
│   │   │   ├── Cargo.toml
│   │   │   └── src/
│   │   │       └── main.rs
│   │   ├── streaming.rs
│   │   ├── streaming_file_upload.rs
│   │   ├── through_reqwest.rs
│   │   └── websocket.rs
│   ├── 08-apis/
│   │   ├── control_focus.rs
│   │   ├── custom_html.rs
│   │   ├── custom_menu.rs
│   │   ├── drag_and_drop.rs
│   │   ├── eval.rs
│   │   ├── file_upload.rs
│   │   ├── form.rs
│   │   ├── logging.rs
│   │   ├── multiwindow.rs
│   │   ├── multiwindow_with_tray_icon.rs
│   │   ├── on_resize.rs
│   │   ├── on_visible.rs
│   │   ├── overlay.rs
│   │   ├── read_size.rs
│   │   ├── scroll_to_offset.rs
│   │   ├── scroll_to_top.rs
│   │   ├── shortcut.rs
│   │   ├── ssr.rs
│   │   ├── title.rs
│   │   ├── video_stream.rs
│   │   ├── wgpu_child_window.rs
│   │   ├── window_event.rs
│   │   ├── window_focus.rs
│   │   ├── window_popup.rs
│   │   └── window_zoom.rs
│   ├── 09-reference/
│   │   ├── all_events.rs
│   │   ├── generic_component.rs
│   │   ├── optional_props.rs
│   │   ├── rsx_usage.rs
│   │   ├── shorthand.rs
│   │   ├── simple_list.rs
│   │   ├── spread.rs
│   │   ├── web_component.rs
│   │   └── xss_safety.rs
│   ├── 10-integrations/
│   │   ├── bevy/
│   │   │   ├── Cargo.toml
│   │   │   └── src/
│   │   │       ├── bevy_renderer.rs
│   │   │       ├── bevy_scene_plugin.rs
│   │   │       ├── demo_renderer.rs
│   │   │       ├── main.rs
│   │   │       └── styles.css
│   │   ├── native-headless/
│   │   │   ├── Cargo.toml
│   │   │   └── src/
│   │   │       └── main.rs
│   │   ├── native-headless-in-bevy/
│   │   │   ├── Cargo.toml
│   │   │   ├── README.md
│   │   │   └── src/
│   │   │       ├── bevy_scene_plugin.rs
│   │   │       ├── dioxus_in_bevy_plugin.rs
│   │   │       ├── main.rs
│   │   │       ├── ui.css
│   │   │       └── ui.rs
│   │   ├── pwa/
│   │   │   ├── Cargo.toml
│   │   │   ├── Dioxus.toml
│   │   │   ├── LICENSE
│   │   │   ├── README.md
│   │   │   ├── index.html
│   │   │   ├── public/
│   │   │   │   ├── manifest.json
│   │   │   │   └── sw.js
│   │   │   └── src/
│   │   │       └── main.rs
│   │   ├── tailwind/
│   │   │   ├── .gitignore
│   │   │   ├── Cargo.toml
│   │   │   ├── README.md
│   │   │   ├── assets/
│   │   │   │   └── tailwind.css
│   │   │   ├── src/
│   │   │   │   └── main.rs
│   │   │   └── tailwind.css
│   │   └── wgpu-texture/
│   │       ├── Cargo.toml
│   │       └── src/
│   │           ├── demo_renderer.rs
│   │           ├── main.rs
│   │           ├── shader.wgsl
│   │           └── styles.css
│   ├── assets/
│   │   ├── calculator.css
│   │   ├── clock.css
│   │   ├── context_api.css
│   │   ├── counter.css
│   │   ├── crm.css
│   │   ├── css_module1.css
│   │   ├── css_module2.css
│   │   ├── custom_assets.css
│   │   ├── events.css
│   │   ├── file_upload.css
│   │   ├── flat_router.css
│   │   ├── links.css
│   │   ├── overlay.css
│   │   ├── radio.css
│   │   ├── read_size.css
│   │   ├── roulette.css
│   │   ├── router.css
│   │   ├── todomvc.css
│   │   ├── visible.css
│   │   └── weatherapp.css
│   └── scripts/
│       └── scrape_examples.rs
├── flake.nix
├── lychee.toml
├── notes/
│   ├── CONTRIBUTING.md
│   ├── FAQ.md
│   ├── RELEASING.md
│   ├── SECURITY.md
│   ├── android_and_ios2.avif
│   ├── architecture/
│   │   ├── 00-OVERVIEW.md
│   │   ├── 01-CORE.md
│   │   ├── 02-CLI.md
│   │   ├── 03-RSX.md
│   │   ├── 04-SIGNALS.md
│   │   ├── 05-FULLSTACK.md
│   │   ├── 06-RENDERERS.md
│   │   ├── 07-HOTRELOAD.md
│   │   ├── 08-ASSETS.md
│   │   ├── 09-ROUTER.md
│   │   ├── 10-WASM-SPLIT.md
│   │   ├── 11-NATIVE-PLUGIN-FFI.md
│   │   └── 12-MANIFEST-SYSTEM.md
│   ├── dioxus-community.avif
│   ├── dioxus_splash_8.avif
│   ├── docs.avif
│   ├── ebou2.avif
│   ├── flat-splash.avif
│   ├── fullstack-websockets.avif
│   ├── image-splash.avif
│   ├── primitive-components.avif
│   ├── releases/
│   │   └── 0.7.0-alpha.0.md
│   └── translations/
│       ├── fa-ir/
│       │   └── README.md
│       ├── ja-jp/
│       │   └── README.md
│       ├── ko-kr/
│       │   └── README.md
│       ├── pt-br/
│       │   └── README.md
│       ├── tr-tr/
│       │   └── README.md
│       └── zh-cn/
│           └── README.md
└── packages/
    ├── asset-resolver/
    │   ├── Cargo.toml
    │   ├── assets/
    │   │   └── data.json
    │   └── src/
    │       ├── lib.rs
    │       ├── native.rs
    │       └── web.rs
    ├── autofmt/
    │   ├── .vscode/
    │   │   └── settings.json
    │   ├── Cargo.toml
    │   ├── README.md
    │   ├── src/
    │   │   ├── buffer.rs
    │   │   ├── collect_macros.rs
    │   │   ├── indent.rs
    │   │   ├── lib.rs
    │   │   ├── prettier_please.rs
    │   │   └── writer.rs
    │   └── tests/
    │       ├── error_handling.rs
    │       ├── partials/
    │       │   ├── no_parse.rsx
    │       │   ├── okay.rsx
    │       │   └── wrong.rsx
    │       ├── samples/
    │       │   ├── asset.rsx
    │       │   ├── attributes.rsx
    │       │   ├── basic_expr.rsx
    │       │   ├── blank_lines.rsx
    │       │   ├── blank_lines_preserved.rsx
    │       │   ├── collapse.rsx
    │       │   ├── collapse_expr.rsx
    │       │   ├── comments.rsx
    │       │   ├── commentshard.rsx
    │       │   ├── complex.rsx
    │       │   ├── docsite.rsx
    │       │   ├── emoji.rsx
    │       │   ├── expr_on_conditional.rsx
    │       │   ├── fat_exprs.rsx
    │       │   ├── ifchain_forloop.rsx
    │       │   ├── immediate_expr.rsx
    │       │   ├── key.rsx
    │       │   ├── letsome.rsx
    │       │   ├── long.rsx
    │       │   ├── long_exprs.rsx
    │       │   ├── manual_props.rsx
    │       │   ├── many_exprs.rsx
    │       │   ├── messy_indent.rsx
    │       │   ├── misplaced.rsx
    │       │   ├── multirsx.rsx
    │       │   ├── nested.rsx
    │       │   ├── oneline.rsx
    │       │   ├── prop_rsx.rsx
    │       │   ├── raw_strings.rsx
    │       │   ├── reallylong.rsx
    │       │   ├── shorthand.rsx
    │       │   ├── simple.rsx
    │       │   ├── skip.rsx
    │       │   ├── spaces.rsx
    │       │   ├── staged.rsx
    │       │   ├── t2.rsx
    │       │   ├── tiny.rsx
    │       │   ├── tinynoopt.rsx
    │       │   └── trailing_expr.rsx
    │       ├── samples.rs
    │       ├── srcless/
    │       │   ├── asset.rsx
    │       │   └── basic_expr.rsx
    │       ├── srcless.rs
    │       ├── wrong/
    │       │   ├── comments-4sp.rsx
    │       │   ├── comments-4sp.wrong.rsx
    │       │   ├── comments-attributes-4sp.rsx
    │       │   ├── comments-attributes-4sp.wrong.rsx
    │       │   ├── comments-big.rsx
    │       │   ├── comments-big.wrong.rsx
    │       │   ├── comments-inline-4sp.rsx
    │       │   ├── comments-inline-4sp.wrong.rsx
    │       │   ├── comments-tab.rsx
    │       │   ├── comments-tab.wrong.rsx
    │       │   ├── multi-4sp.rsx
    │       │   ├── multi-4sp.wrong.rsx
    │       │   ├── multi-tab.rsx
    │       │   ├── multi-tab.wrong.rsx
    │       │   ├── multiexpr-4sp.rsx
    │       │   ├── multiexpr-4sp.wrong.rsx
    │       │   ├── multiexpr-many.rsx
    │       │   ├── multiexpr-many.wrong.rsx
    │       │   ├── multiexpr-tab.rsx
    │       │   ├── multiexpr-tab.wrong.rsx
    │       │   ├── oneline-expand.rsx
    │       │   ├── oneline-expand.wrong.rsx
    │       │   ├── shortened.rsx
    │       │   ├── shortened.wrong.rsx
    │       │   ├── simple-combo-expr.rsx
    │       │   ├── simple-combo-expr.wrong.rsx
    │       │   ├── skipfail.rsx
    │       │   ├── skipfail.wrong.rsx
    │       │   ├── syntax_error.rsx
    │       │   └── syntax_error.wrong.rsx
    │       └── wrong.rs
    ├── check/
    │   ├── Cargo.toml
    │   ├── README.md
    │   └── src/
    │       ├── check.rs
    │       ├── issues.rs
    │       ├── lib.rs
    │       └── metadata.rs
    ├── cli/
    │   ├── .gitignore
    │   ├── Cargo.toml
    │   ├── Dioxus.toml
    │   ├── README.md
    │   ├── assets/
    │   │   ├── android/
    │   │   │   ├── MainActivity.kt.hbs
    │   │   │   ├── gen/
    │   │   │   │   ├── .gitignore
    │   │   │   │   ├── app/
    │   │   │   │   │   ├── build.gradle.kts.hbs
    │   │   │   │   │   ├── proguard-rules.pro
    │   │   │   │   │   └── src/
    │   │   │   │   │       └── main/
    │   │   │   │   │           ├── AndroidManifest.xml.hbs
    │   │   │   │   │           ├── assets/
    │   │   │   │   │           │   └── .gitignore
    │   │   │   │   │           ├── kotlin/
    │   │   │   │   │           │   └── .gitignore
    │   │   │   │   │           └── res/
    │   │   │   │   │               ├── drawable/
    │   │   │   │   │               │   └── ic_launcher_background.xml
    │   │   │   │   │               ├── drawable-v24/
    │   │   │   │   │               │   └── ic_launcher_foreground.xml
    │   │   │   │   │               ├── mipmap-anydpi-v26/
    │   │   │   │   │               │   └── ic_launcher.xml
    │   │   │   │   │               ├── values/
    │   │   │   │   │               │   ├── colors.xml
    │   │   │   │   │               │   ├── strings.xml.hbs
    │   │   │   │   │               │   └── styles.xml
    │   │   │   │   │               └── xml/
    │   │   │   │   │                   └── network_security_config.xml
    │   │   │   │   ├── build.gradle.kts
    │   │   │   │   ├── gradle/
    │   │   │   │   │   └── wrapper/
    │   │   │   │   │       ├── gradle-wrapper.jar
    │   │   │   │   │       └── gradle-wrapper.properties
    │   │   │   │   ├── gradle.properties
    │   │   │   │   ├── gradlew
    │   │   │   │   ├── gradlew.bat
    │   │   │   │   └── settings.gradle
    │   │   │   └── prebuilt/
    │   │   │       └── README.md
    │   │   ├── dioxus.toml
    │   │   ├── ios/
    │   │   │   └── ios.plist.hbs
    │   │   ├── macos/
    │   │   │   └── mac.plist.hbs
    │   │   └── web/
    │   │       ├── dev.index.html
    │   │       ├── dev.loading.html
    │   │       └── prod.index.html
    │   ├── build.rs
    │   ├── schema.json
    │   └── src/
    │       ├── build/
    │       │   ├── assets.rs
    │       │   ├── builder.rs
    │       │   ├── cache.rs
    │       │   ├── context.rs
    │       │   ├── ios_swift.rs
    │       │   ├── manifest.rs
    │       │   ├── manifest_mapper.rs
    │       │   ├── mod.rs
    │       │   ├── patch.rs
    │       │   ├── pre_render.rs
    │       │   ├── request.rs
    │       │   └── tools.rs
    │       ├── bundle_utils.rs
    │       ├── cargo_toml.rs
    │       ├── cli/
    │       │   ├── autoformat.rs
    │       │   ├── build.rs
    │       │   ├── build_assets.rs
    │       │   ├── bundle.rs
    │       │   ├── check.rs
    │       │   ├── component.rs
    │       │   ├── config.rs
    │       │   ├── create.rs
    │       │   ├── doctor.rs
    │       │   ├── hotpatch.rs
    │       │   ├── init.rs
    │       │   ├── link.rs
    │       │   ├── mod.rs
    │       │   ├── platform_override.rs
    │       │   ├── print.rs
    │       │   ├── run.rs
    │       │   ├── serve.rs
    │       │   ├── target.rs
    │       │   ├── translate.rs
    │       │   ├── update.rs
    │       │   └── verbosity.rs
    │       ├── config/
    │       │   ├── app.rs
    │       │   ├── bundle.rs
    │       │   ├── component.rs
    │       │   ├── dioxus_config.rs
    │       │   ├── inline_config.rs
    │       │   ├── manifest.rs
    │       │   ├── mod.rs
    │       │   ├── serve.rs
    │       │   └── web.rs
    │       ├── devcfg.rs
    │       ├── dx_build_info.rs
    │       ├── error.rs
    │       ├── fastfs.rs
    │       ├── logging.rs
    │       ├── main.rs
    │       ├── platform.rs
    │       ├── rustcwrapper.rs
    │       ├── serve/
    │       │   ├── ansi_buffer.rs
    │       │   ├── mod.rs
    │       │   ├── output.rs
    │       │   ├── proxy.rs
    │       │   ├── proxy_ws.rs
    │       │   ├── runner.rs
    │       │   ├── server.rs
    │       │   └── update.rs
    │       ├── settings.rs
    │       ├── tailwind.rs
    │       ├── test_harnesses.rs
    │       ├── wasm_bindgen.rs
    │       ├── wasm_opt.rs
    │       └── workspace.rs
    ├── cli-config/
    │   ├── .gitignore
    │   ├── Cargo.toml
    │   ├── README.md
    │   └── src/
    │       └── lib.rs
    ├── cli-harnesses/
    │   ├── .gitignore
    │   ├── README.md
    │   ├── harness-default-to-non-default/
    │   │   ├── Cargo.toml
    │   │   └── src/
    │   │       └── main.rs
    │   ├── harness-fullstack-desktop/
    │   │   ├── Cargo.toml
    │   │   └── src/
    │   │       └── main.rs
    │   ├── harness-fullstack-desktop-with-default/
    │   │   ├── Cargo.toml
    │   │   └── src/
    │   │       └── main.rs
    │   ├── harness-fullstack-desktop-with-features/
    │   │   ├── Cargo.toml
    │   │   └── src/
    │   │       └── main.rs
    │   ├── harness-fullstack-multi-target/
    │   │   ├── Cargo.toml
    │   │   └── src/
    │   │       └── main.rs
    │   ├── harness-fullstack-multi-target-no-default/
    │   │   ├── Cargo.toml
    │   │   └── src/
    │   │       └── main.rs
    │   ├── harness-fullstack-with-optional-tokio/
    │   │   ├── Cargo.toml
    │   │   └── src/
    │   │       └── main.rs
    │   ├── harness-no-dioxus/
    │   │   ├── Cargo.toml
    │   │   └── src/
    │   │       └── main.rs
    │   ├── harness-renderer-swap/
    │   │   ├── Cargo.toml
    │   │   └── src/
    │   │       └── main.rs
    │   ├── harness-simple-dedicated-client/
    │   │   ├── Cargo.toml
    │   │   └── src/
    │   │       └── main.rs
    │   ├── harness-simple-dedicated-server/
    │   │   ├── Cargo.toml
    │   │   └── src/
    │   │       └── main.rs
    │   ├── harness-simple-desktop/
    │   │   ├── Cargo.toml
    │   │   └── src/
    │   │       └── main.rs
    │   ├── harness-simple-fullstack/
    │   │   ├── Cargo.toml
    │   │   └── src/
    │   │       └── main.rs
    │   ├── harness-simple-fullstack-native-with-default/
    │   │   ├── Cargo.toml
    │   │   └── src/
    │   │       └── main.rs
    │   ├── harness-simple-fullstack-with-default/
    │   │   ├── Cargo.toml
    │   │   └── src/
    │   │       └── main.rs
    │   ├── harness-simple-mobile/
    │   │   ├── Cargo.toml
    │   │   └── src/
    │   │       └── main.rs
    │   ├── harness-simple-web/
    │   │   ├── Cargo.toml
    │   │   └── src/
    │   │       └── main.rs
    │   ├── harness-web-with-default-features/
    │   │   ├── Cargo.toml
    │   │   └── src/
    │   │       └── main.rs
    │   └── harness-web-with-no-default-features/
    │       ├── Cargo.toml
    │       └── src/
    │           └── main.rs
    ├── cli-opt/
    │   ├── Cargo.toml
    │   ├── build.rs
    │   └── src/
    │       ├── build_info.rs
    │       ├── css.rs
    │       ├── file.rs
    │       ├── folder.rs
    │       ├── hash.rs
    │       ├── image/
    │       │   ├── jpg.rs
    │       │   ├── mod.rs
    │       │   └── png.rs
    │       ├── js.rs
    │       ├── json.rs
    │       └── lib.rs
    ├── cli-telemetry/
    │   ├── Cargo.toml
    │   └── src/
    │       └── lib.rs
    ├── component-manifest/
    │   ├── Cargo.toml
    │   └── src/
    │       └── lib.rs
    ├── config-macro/
    │   ├── Cargo.toml
    │   ├── README.md
    │   └── src/
    │       └── lib.rs
    ├── config-macros/
    │   ├── Cargo.toml
    │   ├── README.md
    │   └── src/
    │       └── lib.rs
    ├── const-serialize/
    │   ├── .gitignore
    │   ├── Cargo.toml
    │   ├── README.md
    │   ├── src/
    │   │   ├── array.rs
    │   │   ├── cbor.rs
    │   │   ├── const_buffers.rs
    │   │   ├── const_vec.rs
    │   │   ├── enum.rs
    │   │   ├── lib.rs
    │   │   ├── list.rs
    │   │   ├── primitive.rs
    │   │   ├── str.rs
    │   │   └── struct.rs
    │   └── tests/
    │       ├── enum.rs
    │       ├── eq.rs
    │       ├── lists.rs
    │       ├── primitive.rs
    │       ├── str.rs
    │       ├── structs.rs
    │       └── tuples.rs
    ├── const-serialize-macro/
    │   ├── Cargo.toml
    │   └── src/
    │       └── lib.rs
    ├── core/
    │   ├── .vscode/
    │   │   ├── settings.json
    │   │   └── spellright.dict
    │   ├── Cargo.toml
    │   ├── README.md
    │   ├── docs/
    │   │   ├── common_spawn_errors.md
    │   │   └── reactivity.md
    │   ├── src/
    │   │   ├── any_props.rs
    │   │   ├── arena.rs
    │   │   ├── diff/
    │   │   │   ├── component.rs
    │   │   │   ├── iterator.rs
    │   │   │   ├── mod.rs
    │   │   │   └── node.rs
    │   │   ├── effect.rs
    │   │   ├── error_boundary.rs
    │   │   ├── events.rs
    │   │   ├── fragment.rs
    │   │   ├── generational_box.rs
    │   │   ├── global_context.rs
    │   │   ├── hotreload_utils.rs
    │   │   ├── launch.rs
    │   │   ├── lib.rs
    │   │   ├── mutations.rs
    │   │   ├── nodes.rs
    │   │   ├── properties.rs
    │   │   ├── reactive_context.rs
    │   │   ├── render_error.rs
    │   │   ├── root_wrapper.rs
    │   │   ├── runtime.rs
    │   │   ├── scheduler.rs
    │   │   ├── scope_arena.rs
    │   │   ├── scope_context.rs
    │   │   ├── scopes.rs
    │   │   ├── suspense/
    │   │   │   ├── component.rs
    │   │   │   └── mod.rs
    │   │   ├── tasks.rs
    │   │   └── virtual_dom.rs
    │   └── tests/
    │       ├── .rustfmt.toml
    │       ├── README.md
    │       ├── attr_cleanup.rs
    │       ├── attributes_pass.rs
    │       ├── boolattrs.rs
    │       ├── bubble_error.rs
    │       ├── children_drop_futures.rs
    │       ├── conditional_formatted_attributes.rs
    │       ├── context_api.rs
    │       ├── create_dom.rs
    │       ├── create_fragments.rs
    │       ├── create_lists.rs
    │       ├── create_passthru.rs
    │       ├── cycle.rs
    │       ├── diff_component.rs
    │       ├── diff_dynamic_node.rs
    │       ├── diff_element.rs
    │       ├── diff_keyed_list.rs
    │       ├── diff_unkeyed_list.rs
    │       ├── error_boundary.rs
    │       ├── event_propagation.rs
    │       ├── fuzzing.rs
    │       ├── hotreloading.rs
    │       ├── kitchen_sink.rs
    │       ├── lifecycle.rs
    │       ├── many_roots.rs
    │       ├── memory_leak.rs
    │       ├── miri_full_app.rs
    │       ├── miri_simple.rs
    │       ├── miri_stress.rs
    │       ├── safety.rs
    │       ├── suspense.rs
    │       ├── task.rs
    │       ├── tracing.rs
    │       └── use_drop.rs
    ├── core-macro/
    │   ├── .vscode/
    │   │   └── settings.json
    │   ├── Cargo.toml
    │   ├── README.md
    │   ├── docs/
    │   │   ├── component.md
    │   │   ├── props.md
    │   │   └── rsx.md
    │   ├── src/
    │   │   ├── component.rs
    │   │   ├── lib.rs
    │   │   ├── props/
    │   │   │   └── mod.rs
    │   │   └── utils.rs
    │   └── tests/
    │       ├── event_handler.rs
    │       ├── generics.rs
    │       ├── rsx/
    │       │   ├── trailing-comma-0.rs
    │       │   └── trailing-comma-0.stderr
    │       ├── rsx.rs
    │       └── values_memoize_in_place.rs
    ├── core-types/
    │   ├── Cargo.toml
    │   └── src/
    │       ├── attributes.rs
    │       ├── bubbles.rs
    │       ├── bundled.rs
    │       ├── formatter.rs
    │       ├── hr_context.rs
    │       └── lib.rs
    ├── depinfo/
    │   ├── Cargo.toml
    │   ├── README.md
    │   └── src/
    │       ├── dx.d
    │       └── lib.rs
    ├── desktop/
    │   ├── .vscode/
    │   │   └── settings.json
    │   ├── Cargo.toml
    │   ├── README.md
    │   ├── build.rs
    │   ├── headless_tests/
    │   │   ├── eval.rs
    │   │   ├── events.rs
    │   │   ├── forms.rs
    │   │   ├── rendering.rs
    │   │   └── utils.rs
    │   ├── src/
    │   │   ├── android_sync_lock.rs
    │   │   ├── app.rs
    │   │   ├── assets/
    │   │   │   ├── dev.index.html
    │   │   │   └── prod.index.html
    │   │   ├── assets.rs
    │   │   ├── config.rs
    │   │   ├── desktop_context.rs
    │   │   ├── document.rs
    │   │   ├── edits.rs
    │   │   ├── element.rs
    │   │   ├── event_handlers.rs
    │   │   ├── events.rs
    │   │   ├── file_upload.rs
    │   │   ├── hooks.rs
    │   │   ├── ipc.rs
    │   │   ├── js/
    │   │   │   ├── hash.txt
    │   │   │   └── native_eval.js
    │   │   ├── launch.rs
    │   │   ├── lib.rs
    │   │   ├── menubar.rs
    │   │   ├── mobile.rs
    │   │   ├── mobile_shortcut.rs
    │   │   ├── protocol.rs
    │   │   ├── query.rs
    │   │   ├── readme.md
    │   │   ├── shortcut.rs
    │   │   ├── trayicon.rs
    │   │   ├── ts/
    │   │   │   └── native_eval.ts
    │   │   ├── waker.rs
    │   │   └── webview.rs
    │   └── tsconfig.json
    ├── devtools/
    │   ├── Cargo.toml
    │   └── src/
    │       └── lib.rs
    ├── devtools-types/
    │   ├── Cargo.toml
    │   └── src/
    │       └── lib.rs
    ├── dioxus/
    │   ├── Cargo.toml
    │   ├── README.md
    │   ├── benches/
    │   │   └── jsframework.rs
    │   └── src/
    │       ├── launch.rs
    │       └── lib.rs
    ├── document/
    │   ├── Cargo.toml
    │   ├── assets/
    │   │   ├── script.js
    │   │   └── style.css
    │   ├── build.rs
    │   ├── docs/
    │   │   ├── eval.md
    │   │   └── head.md
    │   ├── src/
    │   │   ├── document.rs
    │   │   ├── elements/
    │   │   │   ├── link.rs
    │   │   │   ├── meta.rs
    │   │   │   ├── mod.rs
    │   │   │   ├── script.rs
    │   │   │   ├── style.rs
    │   │   │   ├── stylesheet.rs
    │   │   │   └── title.rs
    │   │   ├── error.rs
    │   │   ├── eval.rs
    │   │   ├── js/
    │   │   │   ├── hash.txt
    │   │   │   └── head.js
    │   │   ├── lib.rs
    │   │   └── ts/
    │   │       ├── .gitignore
    │   │       ├── eval.ts
    │   │       └── head.ts
    │   └── tsconfig.json
    ├── dx-wire-format/
    │   ├── Cargo.toml
    │   └── src/
    │       └── lib.rs
    ├── extension/
    │   ├── .eslintrc.js
    │   ├── .gitignore
    │   ├── .vscode/
    │   │   ├── launch.json
    │   │   └── tasks.json
    │   ├── Cargo.toml
    │   ├── DEV.md
    │   ├── LICENSE.txt
    │   ├── README.md
    │   ├── package.json
    │   ├── src/
    │   │   ├── lib.rs
    │   │   └── main.ts
    │   ├── tsconfig.json
    │   └── webpack.config.js
    ├── fullstack/
    │   ├── .vscode/
    │   │   └── settings.json
    │   ├── Cargo.toml
    │   ├── README.md
    │   ├── src/
    │   │   ├── client.rs
    │   │   ├── encoding.rs
    │   │   ├── lazy.rs
    │   │   ├── lib.rs
    │   │   ├── magic.rs
    │   │   ├── payloads/
    │   │   │   ├── axum_types.rs
    │   │   │   ├── cbor.rs
    │   │   │   ├── files.rs
    │   │   │   ├── form.rs
    │   │   │   ├── header.rs
    │   │   │   ├── msgpack.rs
    │   │   │   ├── multipart.rs
    │   │   │   ├── postcard.rs
    │   │   │   ├── query.rs
    │   │   │   ├── redirect.rs
    │   │   │   ├── sse.rs
    │   │   │   ├── stream.rs
    │   │   │   ├── text.rs
    │   │   │   └── websocket.rs
    │   │   ├── request.rs
    │   │   └── spawn.rs
    │   └── tests/
    │       └── compile-test.rs
    ├── fullstack-core/
    │   ├── Cargo.toml
    │   ├── README.md
    │   └── src/
    │       ├── document.rs
    │       ├── error.rs
    │       ├── errors.rs
    │       ├── history.rs
    │       ├── httperror.rs
    │       ├── lib.rs
    │       ├── loader.rs
    │       ├── server_cached.rs
    │       ├── server_future.rs
    │       ├── streaming.rs
    │       └── transport.rs
    ├── fullstack-macro/
    │   ├── Cargo.toml
    │   └── src/
    │       └── lib.rs
    ├── fullstack-server/
    │   ├── .gitignore
    │   ├── Cargo.toml
    │   ├── README.md
    │   └── src/
    │       ├── config.rs
    │       ├── document.rs
    │       ├── index_html.rs
    │       ├── isrg/
    │       │   ├── config.rs
    │       │   ├── freshness.rs
    │       │   ├── fs_cache.rs
    │       │   ├── memory_cache.rs
    │       │   └── mod.rs
    │       ├── launch.rs
    │       ├── lib.rs
    │       ├── redirect.rs
    │       ├── server.rs
    │       ├── serverfn.rs
    │       ├── ssr.rs
    │       └── streaming.rs
    ├── generational-box/
    │   ├── Cargo.toml
    │   ├── README.md
    │   ├── benches/
    │   │   └── lock.rs
    │   ├── src/
    │   │   ├── entry.rs
    │   │   ├── error.rs
    │   │   ├── lib.rs
    │   │   ├── references.rs
    │   │   ├── sync.rs
    │   │   └── unsync.rs
    │   └── tests/
    │       ├── basic.rs
    │       ├── errors.rs
    │       ├── reference_counting.rs
    │       ├── reused.rs
    │       └── sync.rs
    ├── history/
    │   ├── Cargo.toml
    │   └── src/
    │       ├── lib.rs
    │       └── memory.rs
    ├── hooks/
    │   ├── Cargo.toml
    │   ├── README.md
    │   ├── docs/
    │   │   ├── derived_state.md
    │   │   ├── moving_state_around.md
    │   │   ├── rules_of_hooks.md
    │   │   ├── side_effects.md
    │   │   └── use_resource.md
    │   ├── src/
    │   │   ├── lib.rs
    │   │   ├── use_action.rs
    │   │   ├── use_after_suspense_resolved.rs
    │   │   ├── use_callback.rs
    │   │   ├── use_collection.rs
    │   │   ├── use_context.rs
    │   │   ├── use_coroutine.rs
    │   │   ├── use_effect.rs
    │   │   ├── use_future.rs
    │   │   ├── use_hook_did_run.rs
    │   │   ├── use_memo.rs
    │   │   ├── use_on_destroy.rs
    │   │   ├── use_reactive.rs
    │   │   ├── use_resource.rs
    │   │   ├── use_root_context.rs
    │   │   ├── use_set_compare.rs
    │   │   ├── use_signal.rs
    │   │   ├── use_sorted.rs
    │   │   └── use_waker.rs
    │   └── tests/
    │       ├── effect.rs
    │       └── memo.rs
    ├── html/
    │   ├── Cargo.toml
    │   ├── README.md
    │   ├── docs/
    │   │   ├── common_event_handler_errors.md
    │   │   └── event_handlers.md
    │   ├── src/
    │   │   ├── attribute_groups.rs
    │   │   ├── data_transfer.rs
    │   │   ├── elements.rs
    │   │   ├── events/
    │   │   │   ├── animation.rs
    │   │   │   ├── cancel.rs
    │   │   │   ├── clipboard.rs
    │   │   │   ├── composition.rs
    │   │   │   ├── drag.rs
    │   │   │   ├── focus.rs
    │   │   │   ├── form.rs
    │   │   │   ├── image.rs
    │   │   │   ├── keyboard.rs
    │   │   │   ├── media.rs
    │   │   │   ├── mod.rs
    │   │   │   ├── mounted.rs
    │   │   │   ├── mouse.rs
    │   │   │   ├── pointer.rs
    │   │   │   ├── resize.rs
    │   │   │   ├── scroll.rs
    │   │   │   ├── selection.rs
    │   │   │   ├── toggle.rs
    │   │   │   ├── touch.rs
    │   │   │   ├── transition.rs
    │   │   │   ├── visible.rs
    │   │   │   └── wheel.rs
    │   │   ├── file_data.rs
    │   │   ├── geometry.rs
    │   │   ├── input_data.rs
    │   │   ├── lib.rs
    │   │   ├── point_interaction.rs
    │   │   ├── render_template.rs
    │   │   └── transit.rs
    │   └── tsconfig.json
    ├── html-internal-macro/
    │   ├── Cargo.toml
    │   ├── src/
    │   │   └── lib.rs
    │   └── tests/
    │       ├── 01-simple.rs
    │       └── progress.rs
    ├── interpreter/
    │   ├── .gitignore
    │   ├── Cargo.toml
    │   ├── NOTES.md
    │   ├── README.md
    │   ├── build.rs
    │   ├── src/
    │   │   ├── js/
    │   │   │   ├── common.js
    │   │   │   ├── core.js
    │   │   │   ├── hash.txt
    │   │   │   ├── hydrate.js
    │   │   │   ├── initialize_streaming.js
    │   │   │   ├── native.js
    │   │   │   ├── patch_console.js
    │   │   │   └── set_attribute.js
    │   │   ├── lib.rs
    │   │   ├── ts/
    │   │   │   ├── .gitignore
    │   │   │   ├── core.ts
    │   │   │   ├── hydrate.ts
    │   │   │   ├── hydrate_types.ts
    │   │   │   ├── initialize_streaming.ts
    │   │   │   ├── native.ts
    │   │   │   ├── patch_console.ts
    │   │   │   ├── serialize.ts
    │   │   │   └── set_attribute.ts
    │   │   ├── unified_bindings.rs
    │   │   └── write_native_mutations.rs
    │   ├── tests/
    │   │   ├── e2e.rs
    │   │   └── serialize.rs
    │   └── tsconfig.json
    ├── lazy-js-bundle/
    │   ├── Cargo.toml
    │   └── src/
    │       └── lib.rs
    ├── liveview/
    │   ├── Cargo.toml
    │   ├── README.md
    │   ├── examples/
    │   │   ├── axum.rs
    │   │   └── axum_stress.rs
    │   └── src/
    │       ├── adapters/
    │       │   ├── axum_adapter.rs
    │       │   └── mod.rs
    │       ├── config.rs
    │       ├── document.rs
    │       ├── element.rs
    │       ├── events.rs
    │       ├── history.rs
    │       ├── index.html
    │       ├── launch.rs
    │       ├── lib.rs
    │       ├── main.js
    │       ├── pool.rs
    │       └── query.rs
    ├── logger/
    │   ├── Cargo.toml
    │   ├── README.md
    │   └── src/
    │       └── lib.rs
    ├── manganis/
    │   ├── manganis/
    │   │   ├── Cargo.toml
    │   │   ├── README.md
    │   │   ├── assets/
    │   │   │   ├── script.js
    │   │   │   └── style.css
    │   │   └── src/
    │   │       ├── android/
    │   │       │   ├── activity.rs
    │   │       │   ├── callback.rs
    │   │       │   ├── java.rs
    │   │       │   ├── metadata.rs
    │   │       │   └── mod.rs
    │   │       ├── darwin/
    │   │       │   └── mod.rs
    │   │       ├── lib.rs
    │   │       └── macro_helpers.rs
    │   ├── manganis-07/
    │   │   ├── Cargo.toml
    │   │   └── src/
    │   │       ├── asset.rs
    │   │       ├── css.rs
    │   │       ├── css_module.rs
    │   │       ├── folder.rs
    │   │       ├── images.rs
    │   │       ├── js.rs
    │   │       ├── lib.rs
    │   │       └── options.rs
    │   ├── manganis-core/
    │   │   ├── Cargo.toml
    │   │   ├── assets/
    │   │   │   ├── script.js
    │   │   │   └── style.css
    │   │   └── src/
    │   │       ├── asset.rs
    │   │       ├── css.rs
    │   │       ├── css_module.rs
    │   │       ├── css_module_parser.rs
    │   │       ├── ffi.rs
    │   │       ├── folder.rs
    │   │       ├── images.rs
    │   │       ├── js.rs
    │   │       ├── lib.rs
    │   │       └── options.rs
    │   └── manganis-macro/
    │       ├── Cargo.toml
    │       ├── README.md
    │       ├── assets/
    │       │   ├── asset.txt
    │       │   ├── script.js
    │       │   └── style.css
    │       ├── src/
    │       │   ├── asset.rs
    │       │   ├── css_module.rs
    │       │   ├── ffi.rs
    │       │   ├── lib.rs
    │       │   └── linker.rs
    │       └── tests/
    │           └── option_asset.rs
    ├── native/
    │   ├── Cargo.toml
    │   └── src/
    │       ├── assets.rs
    │       ├── config.rs
    │       ├── contexts.rs
    │       ├── dioxus_application.rs
    │       ├── dioxus_renderer.rs
    │       ├── lib.rs
    │       ├── link_handler.rs
    │       └── prelude.rs
    ├── native-dom/
    │   ├── Cargo.toml
    │   └── src/
    │       ├── dioxus_document.rs
    │       ├── events.rs
    │       ├── lib.rs
    │       └── mutation_writer.rs
    ├── playwright-tests/
    │   ├── .gitignore
    │   ├── barebones-template/
    │   │   ├── .gitignore
    │   │   ├── Cargo.toml
    │   │   ├── Dioxus.toml
    │   │   ├── README.md
    │   │   ├── assets/
    │   │   │   └── main.css
    │   │   └── src/
    │   │       └── main.rs
    │   ├── cli-optimization/
    │   │   ├── .gitignore
    │   │   ├── Cargo.toml
    │   │   ├── assets/
    │   │   │   └── data.json
    │   │   ├── build.rs
    │   │   └── src/
    │   │       ├── lib.rs
    │   │       ├── main.rs
    │   │       └── old_cli.rs
    │   ├── cli-optimization.spec.js
    │   ├── default-features-disabled/
    │   │   ├── .gitignore
    │   │   ├── Cargo.toml
    │   │   └── src/
    │   │       └── main.rs
    │   ├── default-features-disabled.spec.js
    │   ├── fullstack/
    │   │   ├── .gitignore
    │   │   ├── Cargo.toml
    │   │   ├── Dioxus.toml
    │   │   └── src/
    │   │       └── main.rs
    │   ├── fullstack-error-codes/
    │   │   ├── .gitignore
    │   │   ├── Cargo.toml
    │   │   └── src/
    │   │       └── main.rs
    │   ├── fullstack-error-codes.spec.js
    │   ├── fullstack-errors/
    │   │   ├── .gitignore
    │   │   ├── Cargo.toml
    │   │   └── src/
    │   │       └── main.rs
    │   ├── fullstack-errors.spec.js
    │   ├── fullstack-hydration-order/
    │   │   ├── Cargo.toml
    │   │   └── src/
    │   │       └── main.rs
    │   ├── fullstack-hydration-order.spec.js
    │   ├── fullstack-mounted/
    │   │   ├── Cargo.toml
    │   │   └── src/
    │   │       └── main.rs
    │   ├── fullstack-mounted.spec.js
    │   ├── fullstack-routing/
    │   │   ├── .gitignore
    │   │   ├── Cargo.toml
    │   │   └── src/
    │   │       └── main.rs
    │   ├── fullstack-routing.spec.js
    │   ├── fullstack-spread/
    │   │   ├── Cargo.toml
    │   │   └── src/
    │   │       └── main.rs
    │   ├── fullstack-spread.spec.js
    │   ├── fullstack.spec.js
    │   ├── liveview/
    │   │   ├── Cargo.toml
    │   │   └── src/
    │   │       └── main.rs
    │   ├── liveview.spec.js
    │   ├── nested-suspense/
    │   │   ├── .gitignore
    │   │   ├── Cargo.toml
    │   │   ├── assets/
    │   │   │   └── style.css
    │   │   └── src/
    │   │       ├── lib.rs
    │   │       ├── main.rs
    │   │       └── ssg.rs
    │   ├── nested-suspense-no-js.spec.js
    │   ├── nested-suspense-ssg.spec.js
    │   ├── nested-suspense.spec.js
    │   ├── package.json
    │   ├── playwright.config.js
    │   ├── suspense-carousel/
    │   │   ├── .gitignore
    │   │   ├── Cargo.toml
    │   │   └── src/
    │   │       └── main.rs
    │   ├── suspense-carousel.spec.js
    │   ├── wasm-split-harness/
    │   │   ├── .cargo/
    │   │   │   └── config.toml
    │   │   ├── Cargo.toml
    │   │   ├── data/
    │   │   │   ├── .gitignore
    │   │   │   └── index.html
    │   │   ├── docsite.sh
    │   │   ├── run.sh
    │   │   └── src/
    │   │       ├── main.rs
    │   │       └── stars.js
    │   ├── wasm-split.spec.js
    │   ├── web/
    │   │   ├── .gitignore
    │   │   ├── Cargo.toml
    │   │   └── src/
    │   │       └── main.rs
    │   ├── web-hash-routing/
    │   │   ├── Cargo.toml
    │   │   └── src/
    │   │       └── main.rs
    │   ├── web-hash-routing.spec.js
    │   ├── web-hot-patch/
    │   │   ├── .gitignore
    │   │   ├── Cargo.toml
    │   │   ├── assets/
    │   │   │   ├── alternative-style.css
    │   │   │   └── style.css
    │   │   └── src/
    │   │       └── main.rs
    │   ├── web-hot-patch-fullstack/
    │   │   ├── .gitignore
    │   │   ├── Cargo.toml
    │   │   ├── assets/
    │   │   │   ├── alternative-style.css
    │   │   │   └── style.css
    │   │   └── src/
    │   │       └── main.rs
    │   ├── web-patch-fullstack.spec.js
    │   ├── web-patch.spec.js
    │   ├── web-routing/
    │   │   ├── .gitignore
    │   │   ├── Cargo.toml
    │   │   └── src/
    │   │       └── main.rs
    │   ├── web-routing.spec.js
    │   ├── web.spec.js
    │   ├── windows-headless/
    │   │   ├── Cargo.toml
    │   │   └── src/
    │   │       └── main.rs
    │   └── windows.spec.js
    ├── router/
    │   ├── .gitignore
    │   ├── Cargo.toml
    │   ├── README.md
    │   ├── src/
    │   │   ├── components/
    │   │   │   ├── child_router.rs
    │   │   │   ├── default_errors.rs
    │   │   │   ├── history_buttons.rs
    │   │   │   ├── history_provider.rs
    │   │   │   ├── link.rs
    │   │   │   ├── outlet.rs
    │   │   │   └── router.rs
    │   │   ├── contexts/
    │   │   │   ├── navigator.rs
    │   │   │   ├── outlet.rs
    │   │   │   └── router.rs
    │   │   ├── hooks/
    │   │   │   ├── use_navigator.rs
    │   │   │   ├── use_route.rs
    │   │   │   └── use_router.rs
    │   │   ├── lib.rs
    │   │   ├── navigation.rs
    │   │   ├── routable.rs
    │   │   ├── router_cfg.rs
    │   │   └── utils/
    │   │       └── use_router_internal.rs
    │   └── tests/
    │       ├── parent.rs
    │       ├── parsing.rs
    │       ├── site_map.rs
    │       └── via_ssr/
    │           ├── child_outlet.rs
    │           ├── link.rs
    │           ├── main.rs
    │           ├── navigation.rs
    │           ├── outlet.rs
    │           ├── redirect.rs
    │           └── without_index.rs
    ├── router-macro/
    │   ├── Cargo.toml
    │   └── src/
    │       ├── hash.rs
    │       ├── layout.rs
    │       ├── lib.rs
    │       ├── nest.rs
    │       ├── query.rs
    │       ├── redirect.rs
    │       ├── route.rs
    │       ├── route_tree.rs
    │       └── segment.rs
    ├── rsx/
    │   ├── .vscode/
    │   │   └── settings.json
    │   ├── Cargo.toml
    │   ├── README.md
    │   ├── src/
    │   │   ├── assign_dyn_ids.rs
    │   │   ├── attribute.rs
    │   │   ├── component.rs
    │   │   ├── diagnostics.rs
    │   │   ├── element.rs
    │   │   ├── expr_node.rs
    │   │   ├── forloop.rs
    │   │   ├── ifchain.rs
    │   │   ├── ifmt.rs
    │   │   ├── lib.rs
    │   │   ├── literal.rs
    │   │   ├── location.rs
    │   │   ├── node.rs
    │   │   ├── partial_closure.rs
    │   │   ├── raw_expr.rs
    │   │   ├── rsx_block.rs
    │   │   ├── rsx_call.rs
    │   │   ├── template_body.rs
    │   │   ├── text_node.rs
    │   │   └── util.rs
    │   └── tests/
    │       └── parsing.rs
    ├── rsx-hotreload/
    │   ├── Cargo.toml
    │   ├── src/
    │   │   ├── collect.rs
    │   │   ├── diff.rs
    │   │   ├── extensions.rs
    │   │   ├── last_build_state.rs
    │   │   └── lib.rs
    │   └── tests/
    │       ├── hotreload_pattern.rs
    │       ├── hotreloads.rs
    │       └── valid/
    │           ├── combo.new.rsx
    │           ├── combo.old.rsx
    │           ├── expr.new.rsx
    │           ├── expr.old.rsx
    │           ├── for_.new.rsx
    │           ├── for_.old.rsx
    │           ├── if_.new.rsx
    │           ├── if_.old.rsx
    │           ├── let_.new.rsx
    │           ├── let_.old.rsx
    │           ├── nested.new.rsx
    │           └── nested.old.rsx
    ├── rsx-rosetta/
    │   ├── Cargo.toml
    │   ├── README.md
    │   ├── examples/
    │   │   └── html.rs
    │   ├── src/
    │   │   └── lib.rs
    │   └── tests/
    │       ├── escape.rs
    │       ├── h-tags.rs
    │       ├── raw.rs
    │       ├── simple.rs
    │       ├── svgs.rs
    │       └── web-component.rs
    ├── signals/
    │   ├── Cargo.toml
    │   ├── README.md
    │   ├── docs/
    │   │   ├── hoist/
    │   │   │   ├── error.rs
    │   │   │   └── fixed_list.rs
    │   │   ├── memo.md
    │   │   └── signals.md
    │   ├── examples/
    │   │   ├── context.rs
    │   │   ├── dependencies.rs
    │   │   ├── map_signal.rs
    │   │   ├── read_only_degrade.rs
    │   │   ├── selector.rs
    │   │   ├── send.rs
    │   │   ├── send_store.rs
    │   │   └── split_subscriptions.rs
    │   ├── src/
    │   │   ├── boxed.rs
    │   │   ├── copy_value.rs
    │   │   ├── global/
    │   │   │   ├── memo.rs
    │   │   │   ├── mod.rs
    │   │   │   └── signal.rs
    │   │   ├── impls.rs
    │   │   ├── lib.rs
    │   │   ├── map.rs
    │   │   ├── map_mut.rs
    │   │   ├── memo.rs
    │   │   ├── props.rs
    │   │   ├── read.rs
    │   │   ├── set_compare.rs
    │   │   ├── signal.rs
    │   │   ├── warnings.rs
    │   │   └── write.rs
    │   └── tests/
    │       ├── create.rs
    │       ├── memo.rs
    │       └── subscribe.rs
    ├── ssr/
    │   ├── Cargo.toml
    │   ├── README.md
    │   ├── src/
    │   │   ├── cache.rs
    │   │   ├── config.rs
    │   │   ├── lib.rs
    │   │   ├── renderer.rs
    │   │   └── template.rs
    │   └── tests/
    │       ├── bool_attr.rs
    │       ├── escape.rs
    │       ├── forward_spreads.rs
    │       ├── hydration.rs
    │       ├── inner_html.rs
    │       ├── simple.rs
    │       ├── spread.rs
    │       └── styles.rs
    ├── stores/
    │   ├── Cargo.toml
    │   ├── README.md
    │   ├── src/
    │   │   ├── impls/
    │   │   │   ├── btreemap.rs
    │   │   │   ├── deref.rs
    │   │   │   ├── hashmap.rs
    │   │   │   ├── index.rs
    │   │   │   ├── mod.rs
    │   │   │   ├── option.rs
    │   │   │   ├── result.rs
    │   │   │   ├── slice.rs
    │   │   │   └── vec.rs
    │   │   ├── lib.rs
    │   │   ├── scope.rs
    │   │   ├── store.rs
    │   │   └── subscriptions.rs
    │   └── tests/
    │       ├── coercions.rs
    │       └── marco.rs
    ├── stores-macro/
    │   ├── Cargo.toml
    │   └── src/
    │       ├── derive.rs
    │       ├── extend.rs
    │       └── lib.rs
    ├── subsecond/
    │   ├── README.md
    │   ├── subsecond/
    │   │   ├── Cargo.toml
    │   │   └── src/
    │   │       └── lib.rs
    │   ├── subsecond-tests/
    │   │   ├── cross-tls-crate/
    │   │   │   ├── Cargo.toml
    │   │   │   └── src/
    │   │   │       └── lib.rs
    │   │   ├── cross-tls-crate-dylib/
    │   │   │   ├── Cargo.toml
    │   │   │   └── src/
    │   │   │       └── lib.rs
    │   │   └── cross-tls-test/
    │   │       ├── Cargo.toml
    │   │       ├── README.md
    │   │       └── src/
    │   │           └── main.rs
    │   └── subsecond-types/
    │       ├── Cargo.toml
    │       └── src/
    │           └── lib.rs
    ├── wasm-split/
    │   ├── README.md
    │   ├── wasm-split/
    │   │   ├── Cargo.toml
    │   │   └── src/
    │   │       └── lib.rs
    │   ├── wasm-split-cli/
    │   │   ├── Cargo.toml
    │   │   ├── data/
    │   │   │   └── .gitignore
    │   │   └── src/
    │   │       ├── __wasm_split.js
    │   │       ├── lib.rs
    │   │       └── main.rs
    │   ├── wasm-split-macro/
    │   │   ├── Cargo.toml
    │   │   └── src/
    │   │       └── lib.rs
    │   └── wasm-used/
    │       ├── Cargo.toml
    │       └── src/
    │           └── lib.rs
    └── web/
        ├── .gitignore
        ├── .vscode/
        │   └── settings.json
        ├── Cargo.toml
        ├── README.md
        ├── build.rs
        └── src/
            ├── cfg.rs
            ├── data_transfer.rs
            ├── devtools.rs
            ├── document.rs
            ├── dom.rs
            ├── events/
            │   ├── animation.rs
            │   ├── cancel.rs
            │   ├── clipboard.rs
            │   ├── composition.rs
            │   ├── drag.rs
            │   ├── file.rs
            │   ├── focus.rs
            │   ├── form.rs
            │   ├── keyboard.rs
            │   ├── load.rs
            │   ├── media.rs
            │   ├── mod.rs
            │   ├── mounted.rs
            │   ├── mouse.rs
            │   ├── pointer.rs
            │   ├── resize.rs
            │   ├── scroll.rs
            │   ├── selection.rs
            │   ├── toggle.rs
            │   ├── touch.rs
            │   ├── transition.rs
            │   ├── visible.rs
            │   └── wheel.rs
            ├── files.rs
            ├── history.rs
            ├── hydration/
            │   ├── hydrate.rs
            │   └── mod.rs
            ├── js/
            │   ├── eval.js
            │   └── hash.txt
            ├── launch.rs
            ├── lib.rs
            ├── mutations.rs
            └── ts/
                └── eval.ts
Download .txt
Showing preview only (710K chars total). Download the full file or copy to clipboard to get everything.
SYMBOL INDEX (8492 symbols across 773 files)

FILE: examples/01-app-demos/bluetooth-scanner/src/main.rs
  function main (line 3) | fn main() {
  function app (line 7) | fn app() -> Element {

FILE: examples/01-app-demos/calculator.rs
  constant TITLE (line 15) | const TITLE: &str = "Calculator";
  constant STYLE (line 16) | const STYLE: Asset = asset!("/examples/assets/calculator.css");
  function main (line 18) | fn main() {
  function app (line 39) | fn app() -> Element {
  function calc_val (line 150) | fn calc_val(val: &str) -> f64 {

FILE: examples/01-app-demos/calculator_mutable.rs
  function main (line 13) | fn main() {
  function app (line 35) | fn app() -> Element {
  function CalculatorKey (line 125) | fn CalculatorKey(name: String, onclick: EventHandler<MouseEvent>, childr...
  type Calculator (line 131) | struct Calculator {
    method new (line 147) | fn new() -> Self {
    method formatted_display (line 155) | fn formatted_display(&self) -> String {
    method clear_display (line 162) | fn clear_display(&mut self) {
    method input_digit (line 165) | fn input_digit(&mut self, digit: u8) {
    method input_dot (line 174) | fn input_dot(&mut self) {
    method perform_operation (line 179) | fn perform_operation(&mut self) {
    method toggle_sign (line 193) | fn toggle_sign(&mut self) {
    method toggle_percent (line 200) | fn toggle_percent(&mut self) {
    method backspace (line 203) | fn backspace(&mut self) {
    method set_operator (line 208) | fn set_operator(&mut self, operator: Operator) {
    method handle_keydown (line 213) | fn handle_keydown(&mut self, evt: KeyboardEvent) {
  type Operator (line 139) | enum Operator {

FILE: examples/01-app-demos/counters.rs
  constant STYLE (line 5) | const STYLE: Asset = asset!("/examples/assets/counter.css");
  function main (line 7) | fn main() {
  function app (line 11) | fn app() -> Element {

FILE: examples/01-app-demos/crm.rs
  function main (line 14) | fn main() {
  type Client (line 38) | struct Client {
  type Route (line 46) | enum Route {
  function List (line 58) | fn List() -> Element {
  function New (line 73) | fn New() -> Element {
  function Settings (line 151) | fn Settings() -> Element {

FILE: examples/01-app-demos/dog_app.rs
  function main (line 11) | fn main() {
  function app (line 15) | fn app() -> Element {

FILE: examples/01-app-demos/ecommerce-site/src/api.rs
  function fetch_product (line 6) | pub(crate) async fn fetch_product(product_id: usize) -> Result<Product> {
  function fetch_products (line 16) | pub(crate) async fn fetch_products(count: usize, sort: Sort) -> Result<V...
  type Product (line 26) | pub(crate) struct Product {
  type Rating (line 37) | pub(crate) struct Rating {
  method fmt (line 43) | fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
  type Sort (line 60) | pub(crate) enum Sort {
  method fmt (line 66) | fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {

FILE: examples/01-app-demos/ecommerce-site/src/components/error.rs
  function error_page (line 4) | pub fn error_page() -> Element {

FILE: examples/01-app-demos/ecommerce-site/src/components/home.rs
  function Home (line 10) | pub(crate) fn Home() -> Element {

FILE: examples/01-app-demos/ecommerce-site/src/components/loading.rs
  function ChildrenOrLoading (line 4) | pub(crate) fn ChildrenOrLoading(children: Element) -> Element {

FILE: examples/01-app-demos/ecommerce-site/src/components/nav.rs
  function Nav (line 4) | pub fn Nav() -> Element {
  function cart_icon (line 164) | pub(super) fn cart_icon() -> Element {
  function icon_1 (line 190) | pub(super) fn icon_1() -> Element {
  function icon_2 (line 209) | pub(super) fn icon_2() -> Element {
  function icon_3 (line 235) | pub(super) fn icon_3() -> Element {
  function icon_4 (line 254) | pub(super) fn icon_4() -> Element {
  function icon_5 (line 270) | pub(super) fn icon_5() -> Element {
  function icon_6 (line 296) | pub(super) fn icon_6() -> Element {
  function icon_7 (line 322) | pub(super) fn icon_7() -> Element {
  function icon_8 (line 348) | pub(super) fn icon_8() -> Element {
  function icon_9 (line 367) | pub(super) fn icon_9() -> Element {

FILE: examples/01-app-demos/ecommerce-site/src/components/product_item.rs
  function ProductItem (line 6) | pub(crate) fn ProductItem(product: Product) -> Element {

FILE: examples/01-app-demos/ecommerce-site/src/components/product_page.rs
  function ProductPage (line 7) | pub fn ProductPage(product_id: ReadSignal<usize>) -> Element {
  type Size (line 187) | enum Size {
  method fmt (line 195) | fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
  type Err (line 205) | type Err = ();
  method from_str (line 207) | fn from_str(s: &str) -> Result<Self, Self::Err> {
  function icon_0 (line 221) | pub(super) fn icon_0() -> Element {
  function icon_1 (line 239) | pub(super) fn icon_1() -> Element {
  function icon_2 (line 258) | pub(super) fn icon_2() -> Element {
  function icon_3 (line 287) | pub(super) fn icon_3() -> Element {

FILE: examples/01-app-demos/ecommerce-site/src/main.rs
  function main (line 17) | fn main() {
  type Route (line 33) | enum Route {
  function Details (line 43) | fn Details(product_id: usize) -> Element {

FILE: examples/01-app-demos/file-explorer/src/main.rs
  function main (line 13) | fn main() {
  function app (line 17) | fn app() -> Element {
  type Files (line 67) | struct Files {
    method new (line 74) | fn new() -> Self {
    method reload_path_list (line 86) | fn reload_path_list(&mut self) {
    method go_up (line 106) | fn go_up(&mut self) {
    method enter_dir (line 117) | fn enter_dir(&mut self, dir_id: usize) {
    method current (line 126) | fn current(&self) -> String {
    method clear_err (line 130) | fn clear_err(&mut self) {

FILE: examples/01-app-demos/geolocation-native-plugin/src/main.rs
  function main (line 17) | fn main() {
  function App (line 22) | fn App() -> Element {
  function PermissionBadge (line 176) | fn PermissionBadge(label: String, state: PermissionState) -> Element {
  function CoordinateRow (line 194) | fn CoordinateRow(label: String, value: String) -> Element {
  function format_optional (line 203) | fn format_optional(value: Option<f64>) -> String {
  function LiveActivityCard (line 211) | fn LiveActivityCard(
  function LiveActivityCard (line 280) | fn LiveActivityCard(geolocation: Signal<Geolocation>, error: Signal<Opti...

FILE: examples/01-app-demos/geolocation-native-plugin/src/plugin/error.rs
  type Result (line 7) | pub type Result<T> = std::result::Result<T, Error>;
  type Error (line 10) | pub enum Error {
    method from (line 39) | fn from(s: &str) -> Self {
    method from (line 45) | fn from(s: String) -> Self {
  method serialize (line 30) | fn serialize<S>(&self, serializer: S) -> std::result::Result<S::Ok, S::E...

FILE: examples/01-app-demos/geolocation-native-plugin/src/plugin/mod.rs
  type Geolocation (line 61) | pub struct Geolocation {
    method new (line 67) | pub fn new() -> Self {
    method get_plugin (line 72) | fn get_plugin(&mut self) -> Result<&GeolocationPlugin> {
    method get_current_position (line 88) | pub fn get_current_position(&mut self, options: Option<PositionOptions...
    method check_permissions (line 113) | pub fn check_permissions(&mut self) -> Result<PermissionStatus> {
    method request_permissions (line 130) | pub fn request_permissions(
    method start_live_activity (line 154) | pub fn start_live_activity(&mut self) -> Result<LiveActivityResult> {
    method update_live_activity (line 175) | pub fn update_live_activity(&mut self) -> Result<LiveActivityUpdate> {
    method end_live_activity (line 193) | pub fn end_live_activity(&mut self) -> Result<()> {
  method default (line 210) | fn default() -> Self {
  function getCurrentPositionJson (line 225) | pub fn getCurrentPositionJson(this: &GeolocationPlugin, optionsJson: Str...
  function checkPermissionsJson (line 229) | pub fn checkPermissionsJson(this: &GeolocationPlugin) -> String;
  function requestPermissionsJson (line 233) | pub fn requestPermissionsJson(this: &GeolocationPlugin, permissionsJson:...
  function startLiveActivityJson (line 237) | pub fn startLiveActivityJson(this: &GeolocationPlugin) -> String;
  function updateLiveActivityJson (line 241) | pub fn updateLiveActivityJson(this: &GeolocationPlugin, statusJson: Stri...
  function endLiveActivityJson (line 245) | pub fn endLiveActivityJson(this: &GeolocationPlugin) -> String;
  function getCurrentPositionJson (line 258) | pub fn getCurrentPositionJson(this: &GeolocationPlugin, optionsJson: Str...
  function checkPermissionsJson (line 262) | pub fn checkPermissionsJson(this: &GeolocationPlugin) -> String;
  function requestPermissionsJson (line 266) | pub fn requestPermissionsJson(this: &GeolocationPlugin, permissionsJson:...
  type GeolocationPlugin (line 286) | pub struct GeolocationPlugin;
    method new (line 289) | pub fn new() -> Result<Self> {
  function getCurrentPositionJson (line 296) | pub fn getCurrentPositionJson(_: &GeolocationPlugin, _: String) -> Resul...
  function checkPermissionsJson (line 302) | pub fn checkPermissionsJson(_: &GeolocationPlugin) -> Result<String> {
  function requestPermissionsJson (line 308) | pub fn requestPermissionsJson(_: &GeolocationPlugin, _: String) -> Resul...

FILE: examples/01-app-demos/geolocation-native-plugin/src/plugin/models.rs
  type PermissionState (line 11) | pub enum PermissionState {
  type PermissionStatus (line 28) | pub struct PermissionStatus {
  type PositionOptions (line 48) | pub struct PositionOptions {
  type PermissionType (line 69) | pub enum PermissionType {
  type Coordinates (line 76) | pub struct Coordinates {
  type Position (line 96) | pub struct Position {
  type LiveActivityResult (line 112) | pub struct LiveActivityResult {
  type LiveActivityUpdate (line 127) | pub struct LiveActivityUpdate {

FILE: examples/01-app-demos/hackernews/src/main.rs
  function main (line 13) | fn main() {
  type Route (line 27) | enum Route {
  function StoryPreview (line 33) | fn StoryPreview(story: ReadSignal<Option<i64>>) -> Element {
  function Stories (line 55) | fn Stories() -> Element {
  function StoryListing (line 79) | fn StoryListing(story: ReadSignal<i64>) -> Element {
  function Preview (line 136) | fn Preview(story_id: ReadSignal<i64>) -> Element {
  function Comment (line 153) | fn Comment(comment: ReadSignal<i64>) -> Element {
  constant COMMENT_DEPTH (line 188) | const COMMENT_DEPTH: i64 = 1;
  type StoryPageData (line 191) | pub struct StoryPageData {
  type CommentData (line 199) | pub struct CommentData {
  type StoryItem (line 214) | pub struct StoryItem {
  function get_story (line 232) | pub async fn get_story(id: i64) -> Result<StoryPageData> {
  function ChildrenOrLoading (line 242) | fn ChildrenOrLoading(children: Element) -> Element {

FILE: examples/01-app-demos/hello_world.rs
  function main (line 14) | fn main() {
  function app (line 18) | fn app() -> Element {

FILE: examples/01-app-demos/hotdog/src/backend.rs
  function list_dogs (line 23) | pub async fn list_dogs() -> Result<Vec<(usize, String)>> {
  function remove_dog (line 33) | pub async fn remove_dog(id: usize) -> Result<()> {
  function save_dog (line 39) | pub async fn save_dog(image: String) -> Result<()> {

FILE: examples/01-app-demos/hotdog/src/frontend.rs
  function Favorites (line 10) | pub fn Favorites() -> Element {
  function NavBar (line 32) | pub fn NavBar() -> Element {
  function DogView (line 44) | pub fn DogView() -> Element {

FILE: examples/01-app-demos/hotdog/src/main.rs
  type Route (line 8) | enum Route {
  function main (line 17) | fn main() {
  function app (line 24) | fn app() -> Element {

FILE: examples/01-app-demos/image_generator_openai.rs
  function main (line 3) | fn main() {
  function app (line 7) | fn app() -> Element {

FILE: examples/01-app-demos/repo_readme.rs
  function main (line 10) | fn main() {
  function app (line 14) | fn app() -> Element {

FILE: examples/01-app-demos/todomvc.rs
  constant STYLE (line 6) | const STYLE: Asset = asset!("/examples/assets/todomvc.css");
  function main (line 8) | fn main() {
  type FilterState (line 13) | enum FilterState {
  type TodoItem (line 19) | struct TodoItem {
  function app (line 24) | fn app() -> Element {
  function TodoHeader (line 113) | fn TodoHeader(mut todos: WriteSignal<HashMap<u32, TodoItem>>) -> Element {
  function TodoEntry (line 149) | fn TodoEntry(mut todos: WriteSignal<HashMap<u32, TodoItem>>, id: u32) ->...
  function ListFooter (line 210) | fn ListFooter(

FILE: examples/01-app-demos/todomvc_store.rs
  constant STYLE (line 9) | const STYLE: Asset = asset!("/examples/assets/todomvc.css");
  type TodoState (line 18) | struct TodoState {
  function active_items (line 29) | fn active_items(&self) -> Vec<u32> {
  function incomplete_count (line 40) | fn incomplete_count(&self) -> usize {
  function toggle_all (line 47) | fn toggle_all(&mut self) {
  function has_todos (line 54) | fn has_todos(&self) -> bool {
  type FilterState (line 60) | enum FilterState {
  type TodoItem (line 67) | struct TodoItem {
    method new (line 73) | fn new(contents: impl ToString) -> Self {
  function complete (line 83) | fn complete(&self) -> bool {
  function incomplete (line 87) | fn incomplete(&self) -> bool {
  function active (line 91) | fn active(&self, filter: FilterState) -> bool {
  function main (line 100) | fn main() {
  function app (line 104) | fn app() -> Element {
  function TodoHeader (line 173) | fn TodoHeader(mut todos: Store<TodoState>) -> Element {
  function TodoEntry (line 205) | fn TodoEntry(mut todos: Store<TodoState>, id: u32) -> Element {
  function ListFooter (line 266) | fn ListFooter(mut todos: Store<TodoState>, active_todo_count: ReadSignal...

FILE: examples/01-app-demos/weather_app.rs
  function main (line 7) | fn main() {
  function app (line 11) | fn app() -> Element {
  function CountryData (line 62) | fn CountryData(weather: WeatherResponse, country: WeatherLocation) -> El...
  function Forecast (line 89) | fn Forecast(weather: WeatherResponse) -> Element {
  function SearchBox (line 119) | fn SearchBox(mut country: WriteSignal<WeatherLocation>) -> Element {
  function MapIcon (line 182) | fn MapIcon() -> Element {
  type WeatherLocation (line 207) | struct WeatherLocation {
  type WeatherLocations (line 215) | type WeatherLocations = Vec<WeatherLocation>;
  type SearchResponse (line 218) | struct SearchResponse {
  function get_locations (line 223) | async fn get_locations(input: impl Display) -> Result<WeatherLocations> {
  type WeatherResponse (line 235) | struct WeatherResponse {
  type HourlyWeather (line 241) | struct HourlyWeather {
  type DailyWeather (line 247) | struct DailyWeather {
  function get_weather (line 252) | async fn get_weather(location: WeatherLocation) -> reqwest::Result<Weath...

FILE: examples/01-app-demos/websocket_chat.rs
  function main (line 15) | fn main() {
  function app (line 19) | fn app() -> Element {
  type ClientEvent (line 80) | enum ClientEvent {
  type ServerEvent (line 86) | enum ServerEvent {
  type ChatMessage (line 92) | struct ChatMessage {
  function uppercase_ws (line 99) | async fn uppercase_ws(

FILE: examples/02-building-ui/disabled.rs
  function main (line 7) | fn main() {
  function app (line 11) | fn app() -> Element {

FILE: examples/02-building-ui/nested_listeners.rs
  function main (line 9) | fn main() {
  function app (line 13) | fn app() -> Element {

FILE: examples/02-building-ui/svg.rs
  function main (line 12) | fn main() {
  function Dice (line 24) | fn Dice() -> Element {

FILE: examples/03-assets-styling/css_modules.rs
  function main (line 6) | fn main() {
  function app (line 10) | fn app() -> Element {

FILE: examples/03-assets-styling/custom_assets.rs
  function main (line 11) | fn main() {
  function app (line 15) | fn app() -> Element {

FILE: examples/03-assets-styling/dynamic_assets.rs
  constant STYLE (line 10) | const STYLE: Asset = asset!("/examples/assets/custom_assets.css");
  function main (line 12) | fn main() {
  function app (line 16) | fn app() -> Element {

FILE: examples/03-assets-styling/meta.rs
  function main (line 5) | fn main() {
  function app (line 9) | fn app() -> Element {

FILE: examples/03-assets-styling/meta_elements.rs
  function main (line 5) | fn main() {
  function app (line 9) | fn app() -> Element {

FILE: examples/04-managing-state/context_api.rs
  constant STYLE (line 12) | const STYLE: Asset = asset!("/examples/assets/context_api.css");
  function main (line 14) | fn main() {
  function app (line 19) | fn app() -> Element {
  type Theme (line 36) | enum Theme {
    method stylesheet (line 42) | fn stylesheet(&self) -> &'static str {
  function ThemeControls (line 51) | fn ThemeControls() -> Element {
  function ThemeDisplay (line 74) | fn ThemeDisplay() -> Element {
  function use_theme_context (line 86) | fn use_theme_context() -> Signal<Theme> {

FILE: examples/04-managing-state/error_handling.rs
  function main (line 13) | fn main() {
  function Simple (line 18) | fn Simple() -> Element {
  function ParseNumber (line 32) | fn ParseNumber() -> Element {
  function Show (line 50) | fn Show() -> Element {
  function ParseNumberWithShow (line 87) | fn ParseNumberWithShow() -> Element {
  function Panic (line 103) | fn Panic() -> Element {
  function ComponentPanic (line 117) | fn ComponentPanic() -> Element {
  type Route (line 122) | enum Route {
  function Home (line 133) | fn Home() -> Element {

FILE: examples/04-managing-state/global.rs
  constant STYLE (line 10) | const STYLE: Asset = asset!("/examples/assets/counter.css");
  function main (line 15) | fn main() {
  function app (line 19) | fn app() -> Element {
  function Increment (line 30) | fn Increment() -> Element {
  function Decrement (line 37) | fn Decrement() -> Element {
  function Display (line 44) | fn Display() -> Element {
  function Reset (line 52) | fn Reset() -> Element {

FILE: examples/04-managing-state/memo_chain.rs
  function main (line 8) | fn main() {
  function app (line 12) | fn app() -> Element {
  function Child (line 31) | fn Child(state: Memo<isize>, items: Memo<Vec<isize>>, depth: ReadSignal<...

FILE: examples/04-managing-state/reducer.rs
  constant STYLE (line 10) | const STYLE: Asset = asset!("/examples/assets/radio.css");
  function main (line 12) | fn main() {
  function app (line 16) | fn app() -> Element {
  type PlayerAction (line 33) | enum PlayerAction {
  type PlayerState (line 39) | struct PlayerState {
    method reduce (line 44) | fn reduce(&mut self, action: PlayerAction) {
    method is_playing (line 50) | fn is_playing(&self) -> &'static str {

FILE: examples/04-managing-state/signals.rs
  function main (line 12) | fn main() {
  function app (line 16) | fn app() -> Element {
  function Child (line 84) | fn Child(mut count: ReadSignal<i32>) -> Element {

FILE: examples/05-using-async/backgrounded_futures.rs
  function main (line 13) | fn main() {
  function app (line 17) | fn app() -> Element {
  function Child (line 39) | fn Child(count: WriteSignal<i32>) -> Element {

FILE: examples/05-using-async/clock.rs
  function main (line 7) | fn main() {
  function app (line 11) | fn app() -> Element {

FILE: examples/05-using-async/future.rs
  function main (line 9) | fn main() {
  function app (line 13) | fn app() -> Element {

FILE: examples/05-using-async/streams.rs
  function main (line 7) | fn main() {
  function app (line 11) | fn app() -> Element {
  function some_stream (line 30) | fn some_stream() -> std::pin::Pin<Box<dyn Stream<Item = i32>>> {

FILE: examples/05-using-async/suspense.rs
  function main (line 7) | fn main() {
  function app (line 11) | fn app() -> Element {
  function Doggo (line 33) | fn Doggo() -> Element {

FILE: examples/06-routing/flat_router.rs
  constant STYLE (line 12) | const STYLE: Asset = asset!("/examples/assets/flat_router.css");
  function main (line 14) | fn main() {
  type Route (line 25) | enum Route {
  function Footer (line 41) | fn Footer() -> Element {
  function Home (line 56) | fn Home() -> Element {
  function Games (line 64) | fn Games() -> Element {
  function Play (line 73) | fn Play() -> Element {
  function Settings (line 81) | fn Settings() -> Element {

FILE: examples/06-routing/hash_fragment_state.rs
  function main (line 21) | fn main() {
  type Route (line 31) | enum Route {
  type State (line 40) | struct State {
  method fmt (line 46) | fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
  type StateParseError (line 55) | enum StateParseError {
    method fmt (line 61) | fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
  type Err (line 71) | type Err = StateParseError;
  method from_str (line 73) | fn from_str(s: &str) -> Result<Self, Self::Err> {
  function Home (line 84) | fn Home(url_hash: ReadSignal<State>) -> Element {

FILE: examples/06-routing/link.rs
  constant STYLE (line 11) | const STYLE: Asset = asset!("/examples/assets/links.css");
  function main (line 13) | fn main() {
  function app (line 17) | fn app() -> Element {
  type Route (line 26) | enum Route {
  function Header (line 39) | fn Header() -> Element {
  function Home (line 52) | fn Home() -> Element {
  function Settings (line 57) | fn Settings() -> Element {
  function DefaultLinks (line 62) | fn DefaultLinks() -> Element {

FILE: examples/06-routing/query_segment_search.rs
  function main (line 16) | fn main() {
  type Route (line 26) | enum Route {
  function Home (line 40) | fn Home() -> Element {
  function Search (line 68) | fn Search(query: ReadSignal<String>, word_count: ReadSignal<usize>) -> E...

FILE: examples/06-routing/router.rs
  constant STYLE (line 11) | const STYLE: Asset = asset!("/examples/assets/router.css");
  function main (line 13) | fn main() {
  type Route (line 26) | enum Route {
  function NavBar (line 67) | fn NavBar() -> Element {
  function Home (line 78) | fn Home() -> Element {
  function Blog (line 83) | fn Blog() -> Element {
  function BlogList (line 91) | fn BlogList() -> Element {
  function BlogPost (line 108) | fn BlogPost(name: String) -> Element {
  function PageNotFound (line 122) | fn PageNotFound(route: Vec<String>) -> Element {

FILE: examples/06-routing/router_resource.rs
  type Route (line 10) | enum Route {
  function main (line 17) | fn main() {
  function App (line 22) | fn App() -> Element {
  function Blog (line 31) | fn Blog(id: ReadSignal<i32>) -> Element {
  function Home (line 55) | fn Home() -> Element {

FILE: examples/06-routing/router_restore_scroll.rs
  type Route (line 7) | enum Route {
  function main (line 14) | fn main() {
  function App (line 19) | fn App() -> Element {
  function Blog (line 28) | fn Blog(id: i32) -> Element {
  type Scroll (line 35) | type Scroll = Option<PixelsVector2D>;
  function Home (line 38) | fn Home() -> Element {

FILE: examples/06-routing/simple_router.rs
  function main (line 5) | fn main() {
  type Route (line 15) | enum Route {
  function Homepage (line 26) | fn Homepage() -> Element {
  function Blog (line 31) | fn Blog(id: String) -> Element {
  function Nav (line 42) | fn Nav() -> Element {

FILE: examples/07-fullstack/auth/src/auth.rs
  type Session (line 11) | pub(crate) type Session = axum_session_auth::AuthSession<User, i64, Sess...
  type AuthLayer (line 12) | pub(crate) type AuthLayer =
  type User (line 16) | pub(crate) struct User {
    method load_user (line 30) | async fn load_user(userid: i64, pool: Option<&SqlitePool>) -> Result<U...
    method is_authenticated (line 63) | fn is_authenticated(&self) -> bool {
    method is_active (line 67) | fn is_active(&self) -> bool {
    method is_anonymous (line 71) | fn is_anonymous(&self) -> bool {
    method has (line 78) | async fn has(&self, perm: &str, _pool: &Option<&SqlitePool>) -> bool {
  type SqlPermissionTokens (line 24) | pub(crate) struct SqlPermissionTokens {

FILE: examples/07-fullstack/auth/src/main.rs
  function main (line 20) | fn main() {
  function app (line 78) | fn app() -> Element {
  function login (line 118) | pub async fn login() -> Result<()> {
  function logout (line 125) | pub async fn logout() -> Result<()> {
  function get_user_name (line 135) | pub async fn get_user_name() -> Result<String> {
  function get_permissions (line 142) | pub async fn get_permissions() -> Result<HashSet<String>> {

FILE: examples/07-fullstack/custom_axum_serve.rs
  function main (line 24) | fn main() {
  function app (line 42) | fn app() -> Element {

FILE: examples/07-fullstack/custom_error_page.rs
  function main (line 13) | fn main() {
  type Route (line 22) | enum Route {
  function Home (line 32) | fn Home() -> Element {
  function Blog (line 45) | fn Blog(id: u32) -> Element {
  function ErrorLayout (line 62) | fn ErrorLayout() -> Element {

FILE: examples/07-fullstack/desktop/src/main.rs
  function main (line 4) | fn main() {
  function app (line 12) | pub fn app() -> Element {
  function post_server_data (line 35) | async fn post_server_data(data: String) -> ServerFnResult {
  function get_server_data (line 41) | async fn get_server_data() -> ServerFnResult<String> {

FILE: examples/07-fullstack/dog_app_self_hosted.rs
  function main (line 6) | fn main() {
  function app (line 10) | fn app() -> Element {
  function list_breeds (line 36) | async fn list_breeds() -> Result<Vec<String>> {
  function get_random_breed_image (line 41) | async fn get_random_breed_image(breed: String) -> Result<String> {

FILE: examples/07-fullstack/full_request_access.rs
  function main (line 9) | fn main() {
  function app (line 13) | fn app() -> Element {
  function full_request (line 27) | async fn full_request() -> Result<()> {

FILE: examples/07-fullstack/fullstack_hello_world.rs
  function main (line 9) | fn main() {
  function get_message (line 22) | async fn get_message(name: String, age: i32) -> Result<String> {

FILE: examples/07-fullstack/handling_errors.rs
  function main (line 29) | fn main() {
  function post_server_data (line 88) | async fn post_server_data(data: String) -> Result<(), StatusCode> {
  function get_ip_data (line 95) | async fn get_ip_data() -> Result<serde_json::Value> {
  function get_dog_data (line 101) | async fn get_dog_data() -> Result<serde_json::Value> {
  function get_dog_data_err (line 110) | async fn get_dog_data_err() -> Result<serde_json::Value> {
  function get_custom_encoding (line 121) | async fn get_custom_encoding(takes: Json<serde_json::Value>) -> Result<s...
  function get_throws_error (line 131) | async fn get_throws_error() -> Result<()> {
  function throws_http_error (line 137) | async fn throws_http_error() -> Result<()> {
  function throws_http_error_context (line 144) | async fn throws_http_error_context() -> Result<String> {
  function get_throws_ok (line 151) | async fn get_throws_ok() -> Result<()> {
  type MyCustomError (line 156) | enum MyCustomError {
  method as_status_code (line 168) | fn as_status_code(&self) -> StatusCode {
  function get_throws_typed_error (line 181) | async fn get_throws_typed_error() -> Result<(), MyCustomError> {
  function get_throws_serverfn_error (line 189) | async fn get_throws_serverfn_error() -> Result<(), ServerFnError> {

FILE: examples/07-fullstack/header_map.rs
  function main (line 14) | fn main() {
  function app (line 18) | fn app() -> Element {
  function get_headers (line 34) | async fn get_headers() -> Result<String> {

FILE: examples/07-fullstack/hello-world/src/main.rs
  function main (line 18) | fn main() {
  function app (line 22) | fn app() -> Element {
  function get_greeting (line 54) | async fn get_greeting(name: String, age: i32) -> Result<String> {

FILE: examples/07-fullstack/login_form.rs
  function main (line 21) | fn main() {
  function app (line 25) | fn app() -> Element {
  type LoginForm (line 65) | pub struct LoginForm {
  function login (line 83) | async fn login(form: Form<LoginForm>) -> Result<SetHeader<SetCookie>> {
  function sensitive (line 94) | async fn sensitive() -> Result<String> {

FILE: examples/07-fullstack/middleware.rs
  function main (line 12) | fn main() {
  function app (line 34) | fn app() -> Element {
  function per_route_middleware (line 52) | async fn per_route_middleware() -> Result<String> {

FILE: examples/07-fullstack/multipart_form.rs
  function main (line 8) | fn main() {
  function app (line 12) | fn app() -> Element {
  function upload (line 53) | async fn upload(mut form: MultipartFormData) -> Result<()> {

FILE: examples/07-fullstack/query_params.rs
  function main (line 9) | fn main() {
  function get_message (line 34) | async fn get_message(age: i32) -> Result<String> {
  function get_message_rebind (line 39) | async fn get_message_rebind(age_in_years: i32) -> Result<String> {
  type Params (line 44) | struct Params {
  function get_message_all (line 50) | async fn get_message_all(query: Params) -> Result<String> {

FILE: examples/07-fullstack/redirect.rs
  function main (line 11) | fn main() {
  type Route (line 20) | enum Route {
  function Home (line 29) | fn Home() -> Element {
  function Blog (line 41) | fn Blog() -> Element {
  function redirect_to_blog (line 48) | async fn redirect_to_blog() -> Result<Redirect> {

FILE: examples/07-fullstack/router/src/main.rs
  function main (line 9) | fn main() {
  function app (line 18) | fn app() -> Element {
  type Route (line 23) | enum Route {
  function Blog (line 32) | fn Blog(id: i32) -> Element {
  function Home (line 50) | fn Home() -> Element {
  function post_server_data (line 76) | async fn post_server_data(data: String) -> ServerFnResult {
  function get_server_data (line 83) | async fn get_server_data() -> ServerFnResult<String> {

FILE: examples/07-fullstack/server_functions.rs
  function main (line 136) | fn main() {
  function app (line 140) | fn app() -> Element {
  function echo (line 191) | async fn echo(body: String) -> Result<String> {
  function chat (line 197) | async fn chat(user_id: u32, room_id: Option<u32>) -> Result<String> {
  function get_data (line 218) | async fn get_data() -> Result<DogData> {
  type DogData (line 226) | struct DogData {
  function get_custom_data (line 233) | async fn get_custom_data() -> Result<CustomData> {
  type CustomData (line 240) | struct CustomData {
  method into_response (line 244) | fn into_response(self) -> axum_core::response::Response {
  method from_response (line 253) | async fn from_response(res: dioxus_fullstack::ClientResponse) -> Result<...
  function get_custom_response (line 264) | async fn get_custom_response() -> Result<axum_core::response::Response> {
  function anonymous (line 276) | async fn anonymous() -> Result<String> {
  function custom_anonymous (line 288) | async fn custom_anonymous() -> Result<String> {

FILE: examples/07-fullstack/server_sent_events.rs
  function main (line 28) | fn main() {
  function app (line 32) | fn app() -> Element {
  type MyServerEvent (line 57) | enum MyServerEvent {
  function listen_for_changes (line 65) | async fn listen_for_changes() -> Result<ServerEvents<MyServerEvent>> {

FILE: examples/07-fullstack/server_state.rs
  function add_message (line 31) | async fn add_message() -> Result<()> {
  function read_messages (line 37) | async fn read_messages() -> Result<Vec<String>> {
  function get_users (line 64) | async fn get_users() -> Result<Vec<String>> {
  type BroadcastExtension (line 83) | type BroadcastExtension = axum::Extension<tokio::sync::broadcast::Sender...
  function broadcast_message (line 86) | async fn broadcast_message() -> Result<()> {
  type MyAppState (line 110) | struct MyAppState {
    method from_ref (line 115) | fn from_ref(state: &FullstackContext) -> Self {
  type CustomExtractor (line 120) | struct CustomExtractor {
    type Rejection (line 130) | type Rejection = ();
    method from_request (line 132) | async fn from_request(
  function app_state (line 145) | async fn app_state() -> Result<()> {
  function main (line 152) | fn main() {
  function app (line 174) | fn app() -> Element {

FILE: examples/07-fullstack/ssr-only/src/main.rs
  function main (line 13) | fn main() {
  type Route (line 18) | enum Route {
  function Home (line 27) | fn Home() -> Element {
  function Post (line 39) | fn Post(id: ReadSignal<u32>) -> Element {
  function get_post (line 53) | async fn get_post(id: u32) -> Result<String, HttpError> {

FILE: examples/07-fullstack/streaming.rs
  function main (line 25) | fn main() {
  function app (line 29) | fn app() -> Element {
  function text_stream (line 77) | async fn text_stream(start: Option<i32>) -> Result<TextStream> {
  type Dog (line 97) | struct Dog {
  function json_stream (line 106) | async fn json_stream() -> Result<Streaming<Dog, JsonEncoding>> {
  function byte_stream (line 131) | async fn byte_stream() -> Result<Streaming<Bytes>> {

FILE: examples/07-fullstack/streaming_file_upload.rs
  function main (line 16) | fn main() {
  function app (line 20) | fn app() -> Element {
  function upload_file_as_filestream (line 115) | async fn upload_file_as_filestream(mut upload: FileStream) -> Result<u32> {
  function upload_as_bytestream (line 181) | async fn upload_as_bytestream(name: String, size: u64, mut stream: ByteS...
  function download_as_filestream (line 203) | async fn download_as_filestream() -> Result<FileStream> {

FILE: examples/07-fullstack/through_reqwest.rs
  function main (line 10) | fn main() {
  function app (line 14) | fn app() -> Element {
  type User (line 36) | struct User {
  function get_user (line 42) | async fn get_user(id: i32) -> Result<User> {

FILE: examples/07-fullstack/websocket.rs
  function main (line 22) | fn main() {
  function app (line 26) | fn app() -> Element {
  type ClientEvent (line 71) | enum ClientEvent {
  type ServerEvent (line 76) | enum ServerEvent {
  function uppercase_ws (line 81) | async fn uppercase_ws(

FILE: examples/08-apis/control_focus.rs
  constant STYLE (line 11) | const STYLE: Asset = asset!("/examples/assets/roulette.css");
  function main (line 13) | fn main() {
  function app (line 17) | fn app() -> Element {

FILE: examples/08-apis/custom_html.rs
  function main (line 6) | fn main() {
  function app (line 30) | fn app() -> Element {

FILE: examples/08-apis/custom_menu.rs
  function main (line 7) | fn main() {
  function app (line 34) | fn app() -> Element {

FILE: examples/08-apis/drag_and_drop.rs
  function main (line 13) | fn main() {
  type Item (line 17) | struct Item {
  function app (line 24) | fn app() -> Element {
  function initial_kanban_data (line 83) | fn initial_kanban_data() -> Vec<Item> {

FILE: examples/08-apis/eval.rs
  function main (line 9) | fn main() {
  function app (line 13) | fn app() -> Element {

FILE: examples/08-apis/file_upload.rs
  constant STYLE (line 10) | const STYLE: Asset = asset!("/examples/assets/file_upload.css");
  function main (line 12) | fn main() {
  type UploadedFile (line 16) | struct UploadedFile {
  function app (line 21) | fn app() -> Element {

FILE: examples/08-apis/form.rs
  function main (line 8) | fn main() {
  function app (line 12) | fn app() -> Element {

FILE: examples/08-apis/logging.rs
  function main (line 17) | fn main() {
  function app (line 28) | fn app() -> Element {

FILE: examples/08-apis/multiwindow.rs
  function main (line 9) | fn main() {
  function app (line 13) | fn app() -> Element {
  function popup (line 23) | fn popup() -> Element {

FILE: examples/08-apis/multiwindow_with_tray_icon.rs
  function main (line 16) | fn main() {
  function app (line 20) | fn app() -> Element {
  function popup (line 41) | fn popup() -> Element {

FILE: examples/08-apis/on_resize.rs
  function main (line 10) | fn main() {
  function app (line 14) | fn app() -> Element {

FILE: examples/08-apis/on_visible.rs
  function main (line 5) | fn main() {
  function app (line 9) | fn app() -> Element {

FILE: examples/08-apis/overlay.rs
  function main (line 13) | fn main() {
  function app (line 19) | fn app() -> Element {
  function make_config (line 50) | fn make_config() -> dioxus::desktop::Config {
  function make_window (line 54) | fn make_window() -> WindowBuilder {

FILE: examples/08-apis/read_size.rs
  function main (line 11) | fn main() {
  function app (line 15) | fn app() -> Element {

FILE: examples/08-apis/scroll_to_offset.rs
  function main (line 11) | fn main() {
  function app (line 15) | fn app() -> Element {
  function ScrollToCoordinates (line 23) | fn ScrollToCoordinates() -> Element {

FILE: examples/08-apis/scroll_to_top.rs
  function main (line 10) | fn main() {
  function app (line 14) | fn app() -> Element {

FILE: examples/08-apis/shortcut.rs
  function main (line 11) | fn main() {
  function app (line 15) | fn app() -> Element {

FILE: examples/08-apis/ssr.rs
  function main (line 10) | fn main() {
  function app (line 35) | fn app() -> Element {

FILE: examples/08-apis/title.rs
  function main (line 5) | fn main() {
  function app (line 9) | fn app() -> Element {

FILE: examples/08-apis/video_stream.rs
  constant VIDEO_PATH (line 13) | const VIDEO_PATH: &str = "./examples/assets/test_video.mp4";
  function main (line 15) | fn main() {
  function app (line 22) | fn app() -> Element {
  function get_stream_response (line 51) | async fn get_stream_response(
  function ensure_video_is_loaded (line 181) | fn ensure_video_is_loaded() {

FILE: examples/08-apis/wgpu_child_window.rs
  function main (line 15) | fn main() {
  function app (line 41) | fn app() -> Element {
  type GraphicsContext (line 85) | struct GraphicsContext {
  type GraphicsResources (line 92) | struct GraphicsResources<'a> {
  function new (line 101) | async fn new(window: Arc<Window>) -> Self {
  function render (line 205) | fn render(&self) {

FILE: examples/08-apis/window_event.rs
  function main (line 15) | fn main() {
  function app (line 27) | fn app() -> Element {
  function Header (line 42) | fn Header() -> Element {
  function SetOnTop (line 87) | fn SetOnTop() -> Element {
  function SetDecorations (line 106) | fn SetDecorations() -> Element {
  function SetTitle (line 125) | fn SetTitle() -> Element {

FILE: examples/08-apis/window_focus.rs
  function main (line 13) | fn main() {
  function app (line 17) | fn app() -> Element {

FILE: examples/08-apis/window_popup.rs
  function main (line 7) | fn main() {
  function app (line 11) | fn app() -> Element {
  function popup (line 44) | fn popup(send: Rc<dyn Fn(String)>) -> Element {

FILE: examples/08-apis/window_zoom.rs
  function main (line 7) | fn main() {
  function app (line 11) | fn app() -> Element {

FILE: examples/09-reference/all_events.rs
  constant STYLE (line 9) | const STYLE: Asset = asset!("/examples/assets/events.css");
  function main (line 11) | fn main() {
  function app (line 15) | fn app() -> Element {

FILE: examples/09-reference/generic_component.rs
  function main (line 9) | fn main() {
  function app (line 13) | fn app() -> Element {
  type GenericChildProps (line 20) | struct GenericChildProps<T: Display + PartialEq + Clone + 'static> {
  function generic_child (line 24) | fn generic_child<T: Display + PartialEq + Clone>(props: GenericChildProp...

FILE: examples/09-reference/optional_props.rs
  function main (line 8) | fn main() {
  function app (line 12) | fn app() -> Element {
  type ButtonProps (line 44) | struct ButtonProps {
  type SthElse (line 59) | type SthElse<T> = Option<T>;
  function Button (line 62) | fn Button(props: ButtonProps) -> Element {

FILE: examples/09-reference/rsx_usage.rs
  function main (line 41) | fn main() {
  function app (line 51) | fn app() -> Element {
  function format_dollars (line 254) | fn format_dollars(dollars: u32, cents: u32) -> String {
  function helper (line 258) | fn helper(text: &str) -> Element {
  function lowercase_helper (line 268) | fn lowercase_helper() -> Element {
  function Baller (line 279) | pub fn Baller() -> Element {
  function lowercase_component (line 287) | pub fn lowercase_component() -> Element {
  function Taller (line 294) | pub fn Taller(
  type TypedInputProps (line 303) | pub struct TypedInputProps<T: 'static + Clone + PartialEq> {
  function TypedInput (line 309) | pub fn TypedInput<T>(props: TypedInputProps<T>) -> Element
  function WithInline (line 322) | fn WithInline(text: String) -> Element {
  function Label (line 329) | fn Label<T: Clone + PartialEq + Display + 'static>(text: T) -> Element {

FILE: examples/09-reference/shorthand.rs
  function main (line 5) | fn main() {
  function app (line 9) | fn app() -> Element {
  function Component (line 30) | fn Component(

FILE: examples/09-reference/simple_list.rs
  function main (line 7) | fn main() {
  function app (line 11) | fn app() -> Element {

FILE: examples/09-reference/spread.rs
  function main (line 8) | fn main() {
  function app (line 15) | fn app() -> Element {
  type Props (line 29) | struct Props {
  function SpreadableComponent (line 39) | fn SpreadableComponent(props: Props) -> Element {

FILE: examples/09-reference/web_component.rs
  function main (line 9) | fn main() {
  function app (line 13) | fn app() -> Element {
  function CoolWebComponent (line 24) | fn CoolWebComponent(my_prop: String) -> Element {

FILE: examples/09-reference/xss_safety.rs
  function main (line 7) | fn main() {
  function app (line 11) | fn app() -> Element {

FILE: examples/10-integrations/bevy/src/bevy_renderer.rs
  type UIData (line 20) | pub struct UIData {
  type BevyRenderer (line 24) | pub struct BevyRenderer {
    method new (line 33) | pub fn new(device_handle: &DeviceHandle) -> Self {
    method render (line 81) | pub fn render(
    method init_texture (line 102) | fn init_texture(&mut self, mut ctx: CustomPaintCtx<'_>, width: u32, he...

FILE: examples/10-integrations/bevy/src/bevy_scene_plugin.rs
  type DynamicColoredCube (line 5) | pub struct DynamicColoredCube;
  type BevyScenePlugin (line 7) | pub struct BevyScenePlugin {}
  method build (line 10) | fn build(&self, app: &mut App) {
  function setup (line 17) | fn setup(
  function animate (line 57) | fn animate(time: Res<Time>, mut cube_query: Query<&mut Transform, With<D...
  function update_cube_color (line 64) | fn update_cube_color(

FILE: examples/10-integrations/bevy/src/demo_renderer.rs
  type DemoMessage (line 6) | pub enum DemoMessage {
  type DemoRendererState (line 11) | enum DemoRendererState {
  type DemoPaintSource (line 16) | pub struct DemoPaintSource {
    method new (line 25) | pub fn new() -> Self {
    method with_channel (line 30) | pub fn with_channel(tx: Sender<DemoMessage>, rx: Receiver<DemoMessage>...
    method sender (line 40) | pub fn sender(&self) -> Sender<DemoMessage> {
    method process_messages (line 44) | fn process_messages(&mut self) {
    method render (line 55) | fn render(
  method resume (line 73) | fn resume(&mut self, device_handle: &DeviceHandle) {
  method suspend (line 78) | fn suspend(&mut self) {
  method render (line 82) | fn render(

FILE: examples/10-integrations/bevy/src/main.rs
  type Color (line 17) | type Color = OpaqueColor<Srgb>;
  function limits (line 19) | fn limits() -> Limits {
  function main (line 26) | fn main() {
  function app (line 34) | fn app() -> Element {
  function ColorControl (line 78) | fn ColorControl(label: &'static str, color_str: WriteSignal<String>) -> ...
  function SpinningCube (line 92) | fn SpinningCube(color: Memo<Color>) -> Element {

FILE: examples/10-integrations/native-headless-in-bevy/src/bevy_scene_plugin.rs
  type DynamicCube (line 7) | pub struct DynamicCube;
  type OrbitCamera (line 10) | pub struct OrbitCamera {
  method default (line 18) | fn default() -> Self {
  type UIMessageSender (line 29) | struct UIMessageSender(Sender<UIMessage>);
  type UIMessageReceiver (line 32) | struct UIMessageReceiver(Receiver<UIMessage>);
  type CubeTranslationSpeed (line 35) | struct CubeTranslationSpeed(f32);
  method default (line 38) | fn default() -> Self {
  type CubeRotationSpeed (line 44) | struct CubeRotationSpeed(f32);
  method default (line 47) | fn default() -> Self {
  type BevyScenePlugin (line 52) | pub struct BevyScenePlugin {
  method build (line 58) | fn build(&self, app: &mut App) {
  function setup (line 69) | fn setup(
  function sync_with_ui (line 112) | fn sync_with_ui(
  function animate (line 144) | fn animate(
  function orbit_camera_system (line 156) | fn orbit_camera_system(

FILE: examples/10-integrations/native-headless-in-bevy/src/dioxus_in_bevy_plugin.rs
  constant SCALE_FACTOR (line 43) | const SCALE_FACTOR: f32 = 1.0;
  constant COLOR_SCHEME (line 44) | const COLOR_SCHEME: ColorScheme = ColorScheme::Light;
  constant CATCH_EVENTS_CLASS (line 45) | const CATCH_EVENTS_CLASS: &str = "catch-events";
  type DioxusInBevyPlugin (line 47) | pub struct DioxusInBevyPlugin<UIProps> {
  type AnimationTime (line 53) | struct AnimationTime(Instant);
  method build (line 58) | fn build(&self, app: &mut App) {
  method finish (line 109) | fn finish(&self, app: &mut App) {
  type RenderTexture (line 132) | struct RenderTexture {
  type MainWorldReceiver (line 139) | struct MainWorldReceiver(Receiver<RenderTexture>);
  type RenderWorldSender (line 142) | struct RenderWorldSender(Sender<RenderTexture>);
  function create_ui_texture (line 144) | fn create_ui_texture(width: u32, height: u32) -> Image {
  type TextureGetterNode (line 163) | struct TextureGetterNode;
  type TextureGetterNodeDriver (line 166) | struct TextureGetterNodeDriver;
    method update (line 169) | fn update(&mut self, world: &mut World) {
    method run (line 195) | fn run(
  type TextureImage (line 206) | pub struct TextureImage(Handle<Image>);
  type ExtractedTextureImage (line 209) | pub struct ExtractedTextureImage(Option<Handle<Image>>);
  function extract_texture_image (line 211) | fn extract_texture_image(
  type HeadElement (line 227) | struct HeadElement {
  type DioxusMessage (line 233) | enum DioxusMessage {
  type DioxusMessages (line 240) | struct DioxusMessages(Receiver<DioxusMessage>);
  type DioxusUiQuad (line 243) | pub struct DioxusUiQuad;
  function setup_ui (line 245) | fn setup_ui(
  function update_ui (line 294) | fn update_ui(
  function handle_window_resize (line 375) | fn handle_window_resize(
  type MouseState (line 415) | pub struct MouseState {
  function does_catch_events (line 422) | fn does_catch_events(dioxus_doc: &DioxusDocument, node_id: usize) -> bool {
  function handle_mouse_events (line 440) | fn handle_mouse_events(
  function handle_keyboard_events (line 514) | fn handle_keyboard_events(
  type DioxusDocumentProxy (line 588) | pub struct DioxusDocumentProxy {
    method new (line 593) | fn new(sender: Sender<DioxusMessage>) -> Self {
    method eval (line 599) | fn eval(&self, _js: String) -> dioxus::document::Eval {
    method create_head_element (line 603) | fn create_head_element(
    method set_title (line 621) | fn set_title(&self, title: String) {
    method create_meta (line 625) | fn create_meta(&self, props: dioxus::document::MetaProps) {
    method create_script (line 630) | fn create_script(&self, props: dioxus::document::ScriptProps) {
    method create_style (line 635) | fn create_style(&self, props: dioxus::document::StyleProps) {
    method create_link (line 640) | fn create_link(&self, props: dioxus::document::LinkProps) {
    method create_head_component (line 645) | fn create_head_component(&self) -> bool {
  type BevyNetCallback (line 650) | struct BevyNetCallback {
    method call (line 658) | fn call(&self, _doc_id: usize, result: core::result::Result<BlitzResou...
  type BevyNetProvider (line 665) | pub struct BevyNetProvider {
    method shared (line 669) | fn shared(sender: Sender<DioxusMessage>) -> Arc<dyn NetProvider<BlitzR...
    method new (line 673) | fn new(sender: Sender<DioxusMessage>) -> Self {
    method fetch (line 681) | fn fetch(
  function bevy_key_to_blitz_key (line 722) | fn bevy_key_to_blitz_key(key: &BevyKey) -> Key {
  function bevy_key_code_to_blitz_code (line 1037) | fn bevy_key_code_to_blitz_code(key_code: &BevyKeyCode) -> Code {

FILE: examples/10-integrations/native-headless-in-bevy/src/main.rs
  function main (line 10) | fn main() {

FILE: examples/10-integrations/native-headless-in-bevy/src/ui.rs
  type UIProps (line 42) | pub struct UIProps {
  function ui (line 47) | pub fn ui(props: UIProps) -> Element {

FILE: examples/10-integrations/native-headless/src/main.rs
  constant SCALE_FACTOR (line 25) | const SCALE_FACTOR: f32 = 1.0;
  constant WIDTH (line 26) | const WIDTH: u32 = 800;
  constant HEIGHT (line 27) | const HEIGHT: u32 = 600;
  constant COLOR_SCHEME (line 28) | const COLOR_SCHEME: ColorScheme = ColorScheme::Light;
  function app (line 31) | fn app() -> Element {
  function main (line 37) | fn main() {
  function create_waker (line 156) | pub fn create_waker(callback: Box<dyn Fn() + 'static + Send + Sync>) -> ...

FILE: examples/10-integrations/pwa/public/sw.js
  function fetchedFromNetwork (line 101) | function fetchedFromNetwork(response) {
  function unableToResolve (line 133) | function unableToResolve() {

FILE: examples/10-integrations/pwa/src/main.rs
  function main (line 3) | fn main() {
  function app (line 7) | fn app() -> Element {

FILE: examples/10-integrations/tailwind/src/main.rs
  function main (line 3) | fn main() {
  function app (line 7) | fn app() -> Element {
  function StacksIcon (line 72) | pub fn StacksIcon() -> Element {
  function RightArrowIcon (line 88) | pub fn RightArrowIcon() -> Element {

FILE: examples/10-integrations/wgpu-texture/src/demo_renderer.rs
  type DemoPaintSource (line 15) | pub struct DemoPaintSource {
    method new (line 73) | pub fn new() -> Self {
    method with_channel (line 78) | pub fn with_channel(tx: Sender<DemoMessage>, rx: Receiver<DemoMessage>...
    method sender (line 88) | pub fn sender(&self) -> Sender<DemoMessage> {
    method process_messages (line 92) | fn process_messages(&mut self) {
    method render (line 103) | fn render(
  method resume (line 24) | fn resume(&mut self, device_handle: &DeviceHandle) {
  method suspend (line 32) | fn suspend(&mut self) {
  method render (line 36) | fn render(
  type DemoMessage (line 48) | pub enum DemoMessage {
  type DemoRendererState (line 53) | enum DemoRendererState {
  type TextureAndHandle (line 59) | struct TextureAndHandle {
  type ActiveDemoRenderer (line 64) | struct ActiveDemoRenderer {
    method new (line 121) | pub(crate) fn new(device: &Device, queue: &Queue) -> Self {
    method render (line 167) | pub(crate) fn render(
  type PushConstants (line 239) | struct PushConstants {
  function create_texture (line 243) | fn create_texture(device: &Device, width: u32, height: u32) -> Texture {

FILE: examples/10-integrations/wgpu-texture/src/main.rs
  constant FEATURES (line 17) | const FEATURES: Features = Features::PUSH_CONSTANTS;
  function limits (line 18) | fn limits() -> Limits {
  function window_attributes (line 24) | fn window_attributes() -> WindowAttributes {
  type Color (line 32) | type Color = OpaqueColor<Srgb>;
  function main (line 34) | fn main() {
  function app (line 46) | fn app() -> Element {
  function ColorControl (line 90) | fn ColorControl(label: &'static str, color_str: WriteSignal<String>) -> ...
  function SpinningCube (line 104) | fn SpinningCube(color: Memo<Color>) -> Element {

FILE: examples/scripts/scrape_examples.rs
  type Example (line 3) | struct Example {
  function main (line 8) | fn main() {

FILE: packages/asset-resolver/src/lib.rs
  type AssetPathError (line 45) | pub enum AssetPathError {
  function asset_path (line 110) | pub fn asset_path(asset: impl ToString) -> Result<PathBuf, AssetPathErro...
  type AssetResolveError (line 123) | pub enum AssetResolveError {
  function read_asset_bytes (line 181) | pub async fn read_asset_bytes(asset: impl ToString) -> Result<Vec<u8>, A...
  type NativeAssetResolveError (line 201) | pub enum NativeAssetResolveError {
  type WebAssetResolveError (line 213) | pub struct WebAssetResolveError {
    method fmt (line 231) | fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
  method fmt (line 219) | fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {

FILE: packages/asset-resolver/src/native.rs
  type AssetServeError (line 12) | pub enum AssetServeError {
  function resolve_native_asset_path (line 23) | pub(crate) fn resolve_native_asset_path(path: &str) -> Result<PathBuf, A...
  function resolve_asset_path_from_filesystem (line 40) | fn resolve_asset_path_from_filesystem(path: &str) -> Option<PathBuf> {
  type ResolvedAsset (line 66) | struct ResolvedAsset {
    method new (line 72) | fn new(mime_type: &'static str, body: Vec<u8>) -> Self {
    method into_response (line 76) | fn into_response(self) -> Result<Response<Vec<u8>>, AssetServeError> {
  function resolve_native_asset (line 85) | pub(crate) fn resolve_native_asset(path: &str) -> Result<Vec<u8>, Native...
  function resolve_asset (line 104) | fn resolve_asset(path: &str) -> Result<Option<ResolvedAsset>, NativeAsse...
  function serve_asset (line 132) | pub fn serve_asset(path: &str) -> Result<Response<Vec<u8>>, AssetServeEr...
  function get_asset_root (line 152) | fn get_asset_root() -> PathBuf {
  function get_mime_from_path (line 192) | fn get_mime_from_path(asset: &Path) -> std::io::Result<&'static str> {
  function get_mime_by_ext (line 204) | fn get_mime_by_ext(trimmed: &Path) -> &'static str {
  function get_mime_from_ext (line 210) | pub fn get_mime_from_ext(ext: Option<&str>) -> &'static str {
  function to_java_load_asset (line 236) | pub(crate) fn to_java_load_asset(filepath: &str) -> Option<Vec<u8>> {

FILE: packages/asset-resolver/src/web.rs
  method from (line 11) | fn from(error: js_sys::Error) -> Self {
  method from_js_value (line 17) | fn from_js_value(value: JsValue) -> Self {
  function resolve_web_asset (line 26) | pub(crate) async fn resolve_web_asset(path: &str) -> Result<Vec<u8>, Web...

FILE: packages/autofmt/src/buffer.rs
  type Buffer (line 12) | pub struct Buffer {
    method tabbed_line (line 20) | pub fn tabbed_line(&mut self) -> Result {
    method indented_tabbed_line (line 26) | pub fn indented_tabbed_line(&mut self) -> Result {
    method tab (line 31) | pub fn tab(&mut self) -> Result {
    method indented_tab (line 35) | pub fn indented_tab(&mut self) -> Result {
    method write_tabs (line 39) | pub fn write_tabs(&mut self, num: usize) -> std::fmt::Result {
    method new_line (line 46) | pub fn new_line(&mut self) -> Result {
    method write_text (line 50) | pub fn write_text(&mut self, text: &IfmtInput) -> Result {
    method write_str (line 56) | fn write_str(&mut self, s: &str) -> std::fmt::Result {

FILE: packages/autofmt/src/collect_macros.rs
  type CollectedMacro (line 8) | type CollectedMacro<'a> = &'a Macro;
  function collect_from_file (line 10) | pub fn collect_from_file(file: &File) -> Vec<CollectedMacro<'_>> {
  type MacroCollector (line 17) | struct MacroCollector<'a, 'b> {
  function new (line 23) | fn new(macros: &'a mut Vec<CollectedMacro<'b>>) -> Self {
  function visit_macro (line 32) | fn visit_macro(&mut self, i: &'b Macro) {
  function visit_stmt (line 46) | fn visit_stmt(&mut self, i: &'b syn::Stmt) {
  function visit_item (line 52) | fn visit_item(&mut self, i: &'b syn::Item) {
  function visit_attribute (line 58) | fn visit_attribute(&mut self, i: &'b syn::Attribute) {
  function byte_offset (line 68) | pub fn byte_offset(input: &str, location: LineColumn) -> usize {
  function attr_is_rustfmt_skip (line 82) | fn attr_is_rustfmt_skip(i: &syn::Attribute) -> bool {
  function parses_file_and_collects_rsx_macros (line 95) | fn parses_file_and_collects_rsx_macros() {
  function dont_collect_skipped_macros (line 104) | fn dont_collect_skipped_macros() {

FILE: packages/autofmt/src/indent.rs
  type IndentType (line 2) | pub enum IndentType {
  type IndentOptions (line 8) | pub struct IndentOptions {
    method new (line 15) | pub fn new(ty: IndentType, width: usize, split_line_attributes: bool) ...
    method indent_str (line 28) | pub fn indent_str(&self) -> &str {
    method line_length (line 33) | pub fn line_length(&self, line: &str) -> usize {
    method count_indents (line 40) | pub fn count_indents(&self, mut line: &str) -> usize {
    method split_line_attributes (line 68) | pub fn split_line_attributes(&self) -> bool {
  method default (line 74) | fn default() -> Self {
  function count_indents (line 84) | fn count_indents() {

FILE: packages/autofmt/src/lib.rs
  type FormattedBlock (line 28) | pub struct FormattedBlock {
  function fmt_file (line 43) | pub fn fmt_file(contents: &str, indent: IndentOptions) -> Vec<FormattedB...
  function try_fmt_file (line 63) | pub fn try_fmt_file(
  function write_block_out (line 150) | pub fn write_block_out(body: &CallBody) -> Option<String> {
  function fmt_block (line 156) | pub fn fmt_block(block: &str, indent_level: usize, indent: IndentOptions...
  function apply_formats (line 172) | pub fn apply_formats(input: &str, blocks: Vec<FormattedBlock>) -> String {

FILE: packages/autofmt/src/prettier_please.rs
  function unparse_expr (line 7) | pub fn unparse_expr(&mut self, expr: &Expr) -> String {
  constant MARKER (line 13) | const MARKER: &str = "𝕣𝕤𝕩";
  constant MARKER_REPLACE (line 14) | const MARKER_REPLACE: &str = "𝕣𝕤𝕩! {}";
  function unparse_expr (line 16) | pub fn unparse_expr(expr: &Expr, src: &str, cfg: &IndentOptions) -> Stri...
  function unparse_inner (line 160) | pub fn unparse_inner(expr: &Expr) -> String {
  function unwrapped (line 167) | fn unwrapped(raw: String) -> String {
  function wrapped (line 186) | fn wrapped(expr: &Expr) -> File {
  function fmt_block_from_expr (line 206) | fn fmt_block_from_expr(raw: &str, tokens: TokenStream, cfg: IndentOption...
  function unparses_raw (line 214) | fn unparses_raw() {
  function weird_ifcase (line 221) | fn weird_ifcase() {
  function multiline_madness (line 234) | fn multiline_madness() {
  function write_body_no_indent (line 269) | fn write_body_no_indent() {
  function write_component_body (line 349) | fn write_component_body() {
  function weird_macro (line 360) | fn weird_macro() {
  function comments_on_nodes (line 383) | fn comments_on_nodes() {

FILE: packages/autofmt/src/writer.rs
  type Writer (line 14) | pub struct Writer<'a> {
  function new (line 23) | pub fn new(raw_src: &'a str, indent: IndentOptions) -> Self {
  function consume (line 36) | pub fn consume(self) -> Option<String> {
  function write_rsx_call (line 40) | pub fn write_rsx_call(&mut self, body: &CallBody) -> Result {
  function write_trailing_body_comments (line 58) | fn write_trailing_body_comments(&mut self, body: &CallBody) -> Result {
  function write_ident (line 73) | pub fn write_ident(&mut self, node: &BodyNode) -> Result {
  function is_short_rsx_call (line 91) | pub(crate) fn is_short_rsx_call(roots: &[BodyNode]) -> bool {
  function write_element (line 101) | fn write_element(&mut self, el: &Element) -> Result {
  function write_component (line 117) | fn write_component(
  function write_text_node (line 147) | fn write_text_node(&mut self, text: &TextNode) -> Result {
  function write_expr_node (line 151) | fn write_expr_node(&mut self, expr: &ExprNode) -> Result {
  function write_for_loop (line 155) | fn write_for_loop(&mut self, forloop: &ForLoop) -> std::fmt::Result {
  function write_if_chain (line 178) | fn write_if_chain(&mut self, ifchain: &IfChain) -> std::fmt::Result {
  function write_inline_expr (line 224) | fn write_inline_expr(&mut self, expr: &Expr) -> std::fmt::Result {
  function write_body_indented (line 250) | fn write_body_indented(&mut self, children: &[BodyNode]) -> Result {
  function write_body_nodes (line 257) | pub fn write_body_nodes(&mut self, children: &[BodyNode]) -> Result {
  function write_rsx_block (line 278) | fn write_rsx_block(
  function write_attributes (line 443) | fn write_attributes(
  function write_attribute (line 524) | fn write_attribute(&mut self, attr: &Attribute) -> Result {
  function write_attribute_name (line 536) | fn write_attribute_name(&mut self, attr: &AttributeName) -> Result {
  function write_attribute_value (line 544) | fn write_attribute_value(&mut self, value: &AttributeValue) -> Result {
  function write_attribute_if_chain (line 570) | fn write_attribute_if_chain(&mut self, if_chain: &IfAttributeValue) -> R...
  function write_attr_comments (line 591) | fn write_attr_comments(&mut self, brace: &Brace, attr_span: Span) -> Res...
  function write_inline_comments (line 616) | fn write_inline_comments(&mut self, final_span: LineColumn, offset: usiz...
  function accumulate_full_line_comments (line 646) | fn accumulate_full_line_comments(&mut self, loc: LineColumn) -> VecDeque...
  function apply_line_comments (line 695) | fn apply_line_comments(&mut self, mut comments: VecDeque<usize>) -> Resu...
  function write_comments (line 713) | fn write_comments(&mut self, loc: LineColumn) -> Result {
  function attr_value_len (line 719) | fn attr_value_len(&mut self, value: &AttributeValue) -> usize {
  function attr_expr_len (line 750) | fn attr_expr_len(&mut self, expr: &Expr) -> usize {
  function is_short_attrs (line 759) | fn is_short_attrs(
  function write_todo_body (line 811) | fn write_todo_body(&mut self, brace: &Brace) -> std::fmt::Result {
  function write_partial_expr (line 841) | fn write_partial_expr(&mut self, expr: syn::Result<Expr>, src_span: Span...
  function write_mulitiline_tokens (line 1048) | fn write_mulitiline_tokens(&mut self, out: String) -> Result {
  function write_spread_attribute (line 1076) | fn write_spread_attribute(&mut self, attr: &Expr) -> Result {
  function is_short_children (line 1097) | fn is_short_children(&mut self, children: &[BodyNode]) -> syn::Result<Op...
  function children_have_comments (line 1145) | fn children_have_comments(&self, children: &[BodyNode]) -> bool {
  function current_span_is_primary (line 1163) | fn current_span_is_primary(&self, location: LineColumn) -> bool {
  function leading_row_is_empty (line 1170) | fn leading_row_is_empty(&self, location: LineColumn) -> bool {
  function retrieve_formatted_expr (line 1183) | fn retrieve_formatted_expr(&mut self, expr: &Expr) -> Cow<'_, str> {
  function final_span_of_node (line 1203) | fn final_span_of_node(node: &BodyNode) -> Span {
  function total_span_of_attr (line 1226) | fn total_span_of_attr(&self, attr: &Attribute) -> Span {
  function brace_has_trailing_comments (line 1236) | fn brace_has_trailing_comments(&self, brace: &Brace) -> bool {
  function has_trailing_comments (line 1243) | fn has_trailing_comments(&self, children: &[BodyNode], brace: &Brace) ->...

FILE: packages/autofmt/tests/error_handling.rs
  function no_parse (line 2) | fn no_parse() {
  function parses_but_fmt_fails (line 8) | fn parses_but_fmt_fails() {
  function parses_and_is_okay (line 16) | fn parses_and_is_okay() {

FILE: packages/autofmt/tests/srcless.rs
  function write_block_out (line 16) | fn write_block_out() {
  function works (line 21) | fn works(parsed: CallBody, src: &str) {

FILE: packages/check/src/check.rs
  type VisitHooks (line 13) | struct VisitHooks {
    method new (line 19) | const fn new() -> Self {
    method visit_expr_call (line 100) | fn visit_expr_call(&mut self, i: &'ast syn::ExprCall) {
    method visit_item_fn (line 176) | fn visit_item_fn(&mut self, i: &'ast syn::ItemFn) {
    method visit_local (line 198) | fn visit_local(&mut self, i: &'ast syn::Local) {
    method visit_expr_if (line 209) | fn visit_expr_if(&mut self, i: &'ast syn::ExprIf) {
    method visit_expr_match (line 226) | fn visit_expr_match(&mut self, i: &'ast syn::ExprMatch) {
    method visit_expr_for_loop (line 242) | fn visit_expr_for_loop(&mut self, i: &'ast syn::ExprForLoop) {
    method visit_expr_while (line 255) | fn visit_expr_while(&mut self, i: &'ast syn::ExprWhile) {
    method visit_expr_loop (line 268) | fn visit_expr_loop(&mut self, i: &'ast syn::ExprLoop) {
    method visit_expr_closure (line 275) | fn visit_expr_closure(&mut self, i: &'ast syn::ExprClosure) {
    method visit_expr_async (line 282) | fn visit_expr_async(&mut self, i: &'ast syn::ExprAsync) {
  function check_file (line 28) | pub fn check_file(path: PathBuf, file_content: &str) -> IssueReport {
  type Node (line 42) | enum Node {
  function returns_element (line 55) | fn returns_element(ty: &syn::ReturnType) -> bool {
  function is_hook_ident (line 71) | fn is_hook_ident(ident: &syn::Ident) -> bool {
  function is_component_fn (line 75) | fn is_component_fn(item_fn: &syn::ItemFn) -> bool {
  function get_closure_hook_body (line 79) | fn get_closure_hook_body(local: &syn::Local) -> Option<&syn::Expr> {
  function fn_name_and_name_span (line 93) | fn fn_name_and_name_span(item_fn: &syn::ItemFn) -> (String, Span) {
  function test_no_hooks (line 302) | fn test_no_hooks() {
  function test_hook_correctly_used_inside_component (line 317) | fn test_hook_correctly_used_inside_component() {
  function test_hook_correctly_used_inside_hook_fn (line 333) | fn test_hook_correctly_used_inside_hook_fn() {
  function test_hook_correctly_used_inside_hook_closure (line 346) | fn test_hook_correctly_used_inside_hook_closure() {
  function test_conditional_hook_if (line 365) | fn test_conditional_hook_if() {
  function test_conditional_hook_match (line 406) | fn test_conditional_hook_match() {
  function test_use_in_match_expr (line 441) | fn test_use_in_match_expr() {
  function test_for_loop_hook (line 457) | fn test_for_loop_hook() {
  function test_while_loop_hook (line 498) | fn test_while_loop_hook() {
  function test_loop_hook (line 539) | fn test_loop_hook() {
  function test_conditional_okay (line 574) | fn test_conditional_okay() {
  function test_conditional_expr_okay (line 590) | fn test_conditional_expr_okay() {
  function test_closure_hook (line 605) | fn test_closure_hook() {
  function test_hook_outside_component (line 649) | fn test_hook_outside_component() {
  function test_hook_inside_hook (line 681) | fn test_hook_inside_hook() {
  function test_hook_inside_hook_initialization (line 694) | fn test_hook_inside_hook_initialization() {
  function test_hook_inside_hook_async_initialization (line 735) | fn test_hook_inside_hook_async_initialization() {
  function test_hook_inside_spawn (line 804) | fn test_hook_inside_spawn() {

FILE: packages/check/src/issues.rs
  type IssueReport (line 16) | pub struct IssueReport {
    method new (line 24) | pub fn new<S: ToString>(
  function lightblue (line 39) | fn lightblue(text: &str) -> String {
  function brightred (line 44) | fn brightred(text: &str) -> String {
  function bold (line 49) | fn bold(text: &str) -> String {
  method fmt (line 55) | fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
  type Issue (line 164) | pub enum Issue {
    method hook_info (line 176) | pub fn hook_info(&self) -> HookInfo {
    method fmt (line 188) | fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
  function test_issue_report_display_conditional_if (line 237) | fn test_issue_report_display_conditional_if() {
  function test_issue_report_display_conditional_match (line 265) | fn test_issue_report_display_conditional_match() {
  function test_issue_report_display_for_loop (line 296) | fn test_issue_report_display_for_loop() {
  function test_issue_report_display_while_loop (line 324) | fn test_issue_report_display_while_loop() {
  function test_issue_report_display_loop (line 352) | fn test_issue_report_display_loop() {
  function test_issue_report_display_closure (line 380) | fn test_issue_report_display_closure() {
  function test_issue_report_display_multiline_hook (line 406) | fn test_issue_report_display_multiline_hook() {

FILE: packages/check/src/metadata.rs
  type HookInfo (line 3) | pub struct HookInfo {
    method new (line 13) | pub const fn new(span: Span, name_span: Span, name: String) -> Self {
  type ConditionalInfo (line 23) | pub enum ConditionalInfo {
  type IfInfo (line 29) | pub struct IfInfo {
    method new (line 37) | pub const fn new(span: Span, head_span: Span) -> Self {
  type MatchInfo (line 43) | pub struct MatchInfo {
    method new (line 51) | pub const fn new(span: Span, head_span: Span) -> Self {
  type AnyLoopInfo (line 58) | pub enum AnyLoopInfo {
  type ForInfo (line 66) | pub struct ForInfo {
    method new (line 72) | pub const fn new(span: Span, head_span: Span) -> Self {
  type WhileInfo (line 79) | pub struct WhileInfo {
    method new (line 85) | pub const fn new(span: Span, head_span: Span) -> Self {
  type LoopInfo (line 92) | pub struct LoopInfo {
    method new (line 97) | pub const fn new(span: Span) -> Self {
  type ClosureInfo (line 104) | pub struct ClosureInfo {
    method new (line 109) | pub const fn new(span: Span) -> Self {
  type AsyncInfo (line 116) | pub struct AsyncInfo {
    method new (line 121) | pub const fn new(span: Span) -> Self {
  type ComponentInfo (line 128) | pub struct ComponentInfo {
    method new (line 135) | pub const fn new(span: Span, name: String, name_span: Span) -> Self {
  type FnInfo (line 146) | pub struct FnInfo {
    method new (line 153) | pub const fn new(span: Span, name: String, name_span: Span) -> Self {
  type Span (line 164) | pub struct Span {
    method new_from_str (line 171) | pub fn new_from_str(source_text: &str, start: LineColumn) -> Self {
    method from (line 191) | fn from(span: proc_macro2::Span) -> Self {
  type LineColumn (line 202) | pub struct LineColumn {
    method from (line 208) | fn from(lc: proc_macro2::LineColumn) -> Self {

FILE: packages/cli-config/src/lib.rs
  constant CLI_ENABLED_ENV (line 59) | pub const CLI_ENABLED_ENV: &str = "DIOXUS_CLI_ENABLED";
  constant SERVER_IP_ENV (line 60) | pub const SERVER_IP_ENV: &str = "IP";
  constant SERVER_PORT_ENV (line 61) | pub const SERVER_PORT_ENV: &str = "PORT";
  constant DEVSERVER_IP_ENV (line 62) | pub const DEVSERVER_IP_ENV: &str = "DIOXUS_DEVSERVER_IP";
  constant DEVSERVER_PORT_ENV (line 63) | pub const DEVSERVER_PORT_ENV: &str = "DIOXUS_DEVSERVER_PORT";
  constant ALWAYS_ON_TOP_ENV (line 64) | pub const ALWAYS_ON_TOP_ENV: &str = "DIOXUS_ALWAYS_ON_TOP";
  constant ASSET_ROOT_ENV (line 65) | pub const ASSET_ROOT_ENV: &str = "DIOXUS_ASSET_ROOT";
  constant APP_TITLE_ENV (line 66) | pub const APP_TITLE_ENV: &str = "DIOXUS_APP_TITLE";
  constant PRODUCT_NAME_ENV (line 67) | pub const PRODUCT_NAME_ENV: &str = "DIOXUS_PRODUCT_NAME";
  constant OUT_DIR (line 71) | pub const OUT_DIR: &str = "DIOXUS_OUT_DIR";
  constant SESSION_CACHE_DIR (line 72) | pub const SESSION_CACHE_DIR: &str = "DIOXUS_SESSION_CACHE_DIR";
  constant BUILD_ID (line 73) | pub const BUILD_ID: &str = "DIOXUS_BUILD_ID";
  function devserver_raw_addr (line 105) | pub fn devserver_raw_addr() -> Option<SocketAddr> {
  function devserver_ws_endpoint (line 128) | pub fn devserver_ws_endpoint() -> Option<String> {
  function server_ip (line 141) | pub fn server_ip() -> Option<IpAddr> {
  function server_port (line 155) | pub fn server_port() -> Option<u16> {
  function fullstack_address_or_localhost (line 184) | pub fn fullstack_address_or_localhost() -> SocketAddr {
  function app_title (line 193) | pub fn app_title() -> Option<String> {
  function always_on_top (line 200) | pub fn always_on_top() -> Option<bool> {
  function is_cli_enabled (line 214) | pub fn is_cli_enabled() -> bool {
  function base_path (line 226) | pub fn base_path() -> Option<String> {
  function get_meta_contents (line 250) | pub fn get_meta_contents(selector: &str) -> Option<String>;
  function web_base_path (line 257) | pub fn web_base_path() -> Option<String> {
  function format_base_path_meta_element (line 276) | pub fn format_base_path_meta_element(base_path: &str) -> String {
  function out_dir (line 288) | pub fn out_dir() -> Option<PathBuf> {
  function session_cache_dir (line 303) | pub fn session_cache_dir() -> Option<PathBuf> {
  function android_session_cache_dir (line 312) | pub fn android_session_cache_dir() -> PathBuf {
  function build_id (line 318) | pub fn build_id() -> u64 {
  function product_name (line 334) | pub fn product_name() -> Option<String> {

FILE: packages/cli-harnesses/harness-default-to-non-default/src/main.rs
  function main (line 2) | fn main() {

FILE: packages/cli-harnesses/harness-fullstack-desktop-with-default/src/main.rs
  function main (line 2) | fn main() {

FILE: packages/cli-harnesses/harness-fullstack-desktop-with-features/src/main.rs
  function main (line 2) | fn main() {

FILE: packages/cli-harnesses/harness-fullstack-desktop/src/main.rs
  function main (line 2) | fn main() {

FILE: packages/cli-harnesses/harness-fullstack-multi-target-no-default/src/main.rs
  function main (line 2) | fn main() {

FILE: packages/cli-harnesses/harness-fullstack-multi-target/src/main.rs
  function main (line 2) | fn main() {

FILE: packages/cli-harnesses/harness-fullstack-with-optional-tokio/src/main.rs
  function main (line 2) | fn main() {

FILE: packages/cli-harnesses/harness-no-dioxus/src/main.rs
  function main (line 1) | fn main() {

FILE: packages/cli-harnesses/harness-renderer-swap/src/main.rs
  function main (line 2) | fn main() {

FILE: packages/cli-harnesses/harness-simple-dedicated-client/src/main.rs
  function main (line 1) | fn main() {

FILE: packages/cli-harnesses/harness-simple-dedicated-server/src/main.rs
  function main (line 1) | fn main() {

FILE: packages/cli-harnesses/harness-simple-desktop/src/main.rs
  function main (line 1) | fn main() {

FILE: packages/cli-harnesses/harness-simple-fullstack-native-with-default/src/main.rs
  function main (line 2) | fn main() {

FILE: packages/cli-harnesses/harness-simple-fullstack-with-default/src/main.rs
  function main (line 2) | fn main() {

FILE: packages/cli-harnesses/harness-simple-fullstack/src/main.rs
  function main (line 2) | fn main() {

FILE: packages/cli-harnesses/harness-simple-mobile/src/main.rs
  function main (line 1) | fn main() {

FILE: packages/cli-harnesses/harness-simple-web/src/main.rs
  function main (line 1) | fn main() {

FILE: packages/cli-harnesses/harness-web-with-default-features/src/main.rs
  function main (line 1) | fn main() {

FILE: packages/cli-harnesses/harness-web-with-no-default-features/src/main.rs
  function main (line 1) | fn main() {

FILE: packages/cli-opt/build.rs
  function main (line 1) | fn main() {

FILE: packages/cli-opt/src/build_info.rs
  function version (line 4) | pub(crate) fn version() -> String {

FILE: packages/cli-opt/src/css.rs
  function process_css (line 13) | pub(crate) fn process_css(
  function process_css_module (line 46) | pub(crate) fn process_css_module(
  function minify_css (line 110) | pub(crate) fn minify_css(css: &str) -> anyhow::Result<String> {
  function compile_scss (line 146) | pub(crate) fn compile_scss(
  function process_scss (line 166) | pub(crate) fn process_scss(
  type ScssLogger (line 186) | struct ScssLogger {}
    method debug (line 189) | fn debug(&self, location: SpanLoc, message: &str) {
    method warn (line 198) | fn warn(&self, location: SpanLoc, message: &str) {
  function hash_scss (line 210) | pub(crate) fn hash_scss(

FILE: packages/cli-opt/src/file.rs
  function process_file_to (line 14) | pub fn process_file_to(
  function process_file_to_with_options (line 23) | pub(crate) fn process_file_to_with_options(
  type ResolvedAssetType (line 106) | pub(crate) enum ResolvedAssetType {
  function resolve_asset_options (line 125) | pub(crate) fn resolve_asset_options(source: &Path, options: &AssetVarian...
  function resolve_unknown_asset_options (line 140) | fn resolve_unknown_asset_options(source: &Path) -> ResolvedAssetType {

FILE: packages/cli-opt/src/folder.rs
  function process_folder (line 8) | pub fn process_folder(source: &Path, output_folder: &Path) -> anyhow::Re...
  function process_file_minimal (line 34) | fn process_file_minimal(input_path: &Path, output_path: &Path) -> anyhow...

FILE: packages/cli-opt/src/hash.rs
  type AssetHash (line 18) | struct AssetHash {
    method new (line 25) | const fn new(hash: u64) -> Self {
    method bytes (line 32) | pub const fn bytes(&self) -> &[u8] {
    method hash_file_contents (line 37) | pub fn hash_file_contents(
  function hash_file (line 46) | fn hash_file(options: &AssetOptions, source: &Path) -> anyhow::Result<As...
  function hash_file_with_options (line 60) | pub(crate) fn hash_file_with_options(
  function hash_file_contents (line 112) | pub(crate) fn hash_file_contents(source: &Path, hasher: &mut impl Hasher...
  function add_hash_to_asset (line 131) | pub fn add_hash_to_asset(asset: &mut BundledAsset) {

FILE: packages/cli-opt/src/image/jpg.rs
  function compress_jpg (line 7) | pub(crate) fn compress_jpg(image: DynamicImage, output_location: &Path) ...

FILE: packages/cli-opt/src/image/mod.rs
  function process_image (line 11) | pub(crate) fn process_image(

FILE: packages/cli-opt/src/image/png.rs
  function compress_png (line 5) | pub(crate) fn compress_png(image: DynamicImage, output_location: &Path) {

FILE: packages/cli-opt/src/js.rs
  type TracingEmitter (line 30) | struct TracingEmitter;
  method emit (line 33) | fn emit(&mut self, db: &mut swc_common::errors::DiagnosticBuilder<'_>) {
  function inside_handler (line 50) | fn inside_handler<O>(f: impl FnOnce(&Globals, Lrc<SourceMap>) -> O) -> O {
  function bundle_js_to_writer (line 57) | fn bundle_js_to_writer(
  function resolve_js_inside_handler (line 68) | fn resolve_js_inside_handler(
  function bundle_js_to_writer_inside_handler (line 120) | fn bundle_js_to_writer_inside_handler(
  type PathLoader (line 164) | struct PathLoader {
  method load (line 169) | fn load(&self, file: &FileName) -> anyhow::Result<ModuleData> {
  type Hook (line 203) | struct Hook;
    method get_import_meta_props (line 206) | fn get_import_meta_props(
  function process_js (line 241) | pub(crate) fn process_js(
  function hash_js_module (line 266) | fn hash_js_module(file: PathBuf, hasher: &mut impl Hasher, bundle: bool)...
  function hash_js (line 279) | pub(crate) fn hash_js(

FILE: packages/cli-opt/src/json.rs
  function minify_json (line 5) | pub(crate) fn minify_json(source: &str) -> anyhow::Result<String> {
  function process_json (line 13) | pub(crate) fn process_json(source: &Path, output_path: &Path) -> anyhow:...

FILE: packages/cli-opt/src/lib.rs
  type AssetManifest (line 26) | pub struct AssetManifest {
    method register_asset (line 33) | pub fn register_asset(
    method insert_asset (line 55) | pub fn insert_asset(&mut self, asset: BundledAsset) {
    method get_assets_for_source (line 64) | pub fn get_assets_for_source(&self, path: &Path) -> Option<&HashSet<Bu...
    method get_first_asset_for_source (line 69) | pub fn get_first_asset_for_source(&self, path: &Path) -> Option<&Bundl...
    method contains (line 76) | pub fn contains(&self, asset: &BundledAsset) -> bool {
    method unique_assets (line 84) | pub fn unique_assets(&self) -> impl Iterator<Item = &BundledAsset> {
    method load_from_file (line 92) | pub fn load_from_file(path: &Path) -> anyhow::Result<Self> {
  function optimize_all_assets (line 101) | pub fn optimize_all_assets(

FILE: packages/cli-telemetry/src/lib.rs
  type TelemetryEventData (line 61) | pub struct TelemetryEventData {
    method new (line 102) | pub fn new(name: impl ToString, message: impl ToString) -> Self {
    method with_value (line 121) | pub fn with_value<K: ToString, V: serde::Serialize>(mut self, key: K, ...
    method with_module (line 128) | pub fn with_module(mut self, module: impl ToString) -> Self {
    method with_file (line 133) | pub fn with_file(mut self, file: impl ToString) -> Self {
    method with_line_column (line 138) | pub fn with_line_column(mut self, line: u32, column: u32) -> Self {
    method with_error_handled (line 144) | pub fn with_error_handled(mut self, error_handled: bool) -> Self {
    method with_error_type (line 149) | pub fn with_error_type(mut self, error_type: String) -> Self {
    method with_stack_frames (line 154) | pub fn with_stack_frames(mut self, stack_frames: Vec<StackFrame>) -> S...
    method with_values (line 159) | pub fn with_values(mut self, fields: serde_json::Map<String, serde_jso...
    method to_json (line 166) | pub fn to_json(&self) -> serde_json::Value {
    method fmt (line 173) | fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
  type StackFrame (line 187) | pub struct StackFrame {
  function strip_paths (line 244) | pub fn strip_paths(string: &str) -> String {
  function strip_paths_value (line 266) | fn strip_paths_value(value: &mut serde_json::Value) {

FILE: packages/cli/build.rs
  function main (line 1) | fn main() {

FILE: packages/cli/src/build/assets.rs
  function manganis_symbols (line 47) | fn manganis_symbols<'a, 'b, R: ReadRef<'a>>(
  type ManganisVersion (line 60) | enum ManganisVersion {
    method size (line 69) | fn size(&self) -> usize {
    method deserialize (line 85) | fn deserialize(&self, data: &[u8]) -> Option<SymbolDataOrAsset> {
    method serialize_asset (line 161) | fn serialize_asset(&self, asset: &BundledAsset) -> Vec<u8> {
    method serialize_symbol_data (line 184) | fn serialize_symbol_data(&self, data: &SymbolData) -> Option<Vec<u8>> {
  type SymbolDataOrAsset (line 202) | enum SymbolDataOrAsset {
  type AssetWriteEntry (line 211) | struct AssetWriteEntry {
    method new (line 218) | fn new(
  type AssetRepresentation (line 232) | enum AssetRepresentation {
  function legacy_asset_to_modern_asset (line 239) | fn legacy_asset_to_modern_asset(
  function modern_asset_to_legacy_asset (line 298) | fn modern_asset_to_legacy_asset(modern_asset: &BundledAsset) -> manganis...
  function looks_like_manganis_symbol (line 355) | fn looks_like_manganis_symbol(name: &str) -> Option<ManganisVersion> {
  type ManganisSymbolOffset (line 367) | struct ManganisSymbolOffset {
    method new (line 373) | fn new(version: ManganisVersion, offset: u64) -> Self {
  function find_symbol_offsets (line 379) | fn find_symbol_offsets<'a, R: ReadRef<'a>>(
  function find_pdb_file (line 400) | fn find_pdb_file(path: &Path) -> Option<PathBuf> {
  function find_pdb_symbol_offsets (line 431) | fn find_pdb_symbol_offsets(pdb_file: &Path) -> Result<Vec<ManganisSymbol...
  function find_native_symbol_offsets (line 470) | fn find_native_symbol_offsets<'a, R: ReadRef<'a>>(
  function eval_walrus_global_expr (line 497) | fn eval_walrus_global_expr(module: &walrus::Module, expr: &walrus::Const...
  function find_global_export_value (line 514) | fn find_global_export_value(module: &walrus::Module, name: &str) -> Opti...
  function find_wasm_symbol_offsets (line 533) | fn find_wasm_symbol_offsets<'a, R: ReadRef<'a>>(
  type SymbolExtractionResult (line 701) | pub(crate) struct SymbolExtractionResult {
  function extract_symbols_from_file (line 714) | pub(crate) async fn extract_symbols_from_file(
  function extract_assets_from_file (line 892) | pub(crate) async fn extract_assets_from_file(path: impl AsRef<Path>) -> ...
  function open_file_for_writing_with_timeout (line 904) | async fn open_file_for_writing_with_timeout(
  function write_serialized_bytes (line 928) | fn write_serialized_bytes(

FILE: packages/cli/src/build/builder.rs
  type AppBuilder (line 52) | pub(crate) struct AppBuilder {
    method new (line 142) | pub(crate) fn new(request: &BuildRequest) -> Result<Self> {
    method started (line 177) | pub fn started(request: &BuildRequest, mode: BuildMode, build_id: Buil...
    method start (line 183) | pub(crate) fn start(&mut self, mode: BuildMode, build_id: BuildId) {
    method wait (line 201) | pub(crate) async fn wait(&mut self) -> BuilderUpdate {
    method patch_rebuild (line 335) | pub(crate) fn patch_rebuild(
    method start_rebuild (line 428) | pub(crate) fn start_rebuild(&mut self, mode: BuildMode, build_id: Buil...
    method abort_all (line 452) | pub(crate) fn abort_all(&mut self, stage: BuildStage) {
    method finish_build (line 469) | pub(crate) async fn finish_build(&mut self) -> Result<BuildArtifacts> {
    method child_environment_variables (line 535) | pub(crate) fn child_environment_variables(
    method open (line 629) | pub(crate) async fn open(
    method soft_kill (line 689) | pub(crate) async fn soft_kill(&mut self) {
    method hotpatch (line 735) | pub(crate) async fn hotpatch(
    method hotreload_bundled_assets (line 839) | pub(crate) async fn hotreload_bundled_assets(
    method copy_file_to_android_tmp (line 895) | pub(crate) async fn copy_file_to_android_tmp(
    method open_with_main_exe (line 925) | fn open_with_main_exe(&mut self, envs: Vec<(String, String)>, args: &[...
    method open_web (line 950) | fn open_web(&self, address: SocketAddr) {
    method open_ios_sim (line 969) | async fn open_ios_sim(&mut self, envs: Vec<(String, String)>) -> Resul...
    method open_ios_device (line 1010) | async fn open_ios_device(&mut self, device_query: &str) -> Result<()> {
    method get_ios_device_uuid (line 1060) | async fn get_ios_device_uuid(device_name_query: &str) -> Result<String> {
    method install_ios_app (line 1175) | async fn install_ios_app(device_uuid: &str, app_path: &Path) -> Result...
    method launch_ios_app_paused (line 1247) | async fn launch_ios_app_paused(device_uuid: &str, application_id: &str...
    method open_android (line 1335) | async fn open_android(
    method make_entropy_path (line 1509) | fn make_entropy_path(exe: &PathBuf) -> PathBuf {
    method app_exe (line 1528) | fn app_exe(&mut self) -> PathBuf {
    method complete_compile (line 1556) | fn complete_compile(&mut self) {
    method total_build_time (line 1564) | pub(crate) fn total_build_time(&self) -> Option<Duration> {
    method compile_duration (line 1568) | pub(crate) fn compile_duration(&self) -> Option<Duration> {
    method bundle_duration (line 1576) | pub(crate) fn bundle_duration(&self) -> Option<Duration> {
    method compile_progress (line 1585) | pub(crate) fn compile_progress(&self) -> f64 {
    method bundle_progress (line 1589) | pub(crate) fn bundle_progress(&self) -> f64 {
    method is_finished (line 1593) | pub(crate) fn is_finished(&self) -> bool {
    method can_receive_hotreloads (line 1604) | pub(crate) fn can_receive_hotreloads(&self) -> bool {
    method open_debugger (line 1608) | pub(crate) async fn open_debugger(&mut self, server: &WebServer) -> Re...
    method get_android_device_transport_id (line 1775) | async fn get_android_device_transport_id(
    method get_android_app_pid (line 1830) | async fn get_android_app_pid(

FILE: packages/cli/src/build/cache.rs
  type ObjectCache (line 25) | pub struct ObjectCache {
    method new (line 34) | pub fn new(session_cache_dir: &Path) -> Self {
    method cache_from_rlib (line 44) | pub fn cache_from_rlib(&mut self, crate_name: &str, rlib_path: &Path) ...
    method cache_from_paths (line 87) | pub fn cache_from_paths(
    method get (line 116) | pub fn get(&self, crate_name: &str) -> Option<&Vec<PathBuf>> {

FILE: packages/cli/src/build/context.rs
  type BuildContext (line 16) | pub struct BuildContext {
    method is_primary_build (line 84) | pub(crate) fn is_primary_build(&self) -> bool {
    method status_wasm_bindgen_start (line 88) | pub(crate) fn status_wasm_bindgen_start(&self) {
    method status_splitting_bundle (line 94) | pub(crate) fn status_splitting_bundle(&self) {
    method status_start_bundle (line 100) | pub(crate) fn status_start_bundle(&self) {
    method status_running_gradle (line 106) | pub(crate) fn status_running_gradle(&self) {
    method status_compiling_native_plugins (line 112) | pub(crate) fn status_compiling_native_plugins(&self, detail: impl Into...
    method status_codesigning (line 120) | pub(crate) fn status_codesigning(&self) {
    method status_build_diagnostic (line 126) | pub(crate) fn status_build_diagnostic(&self, message: Diagnostic) {
    method status_build_error (line 132) | pub(crate) fn status_build_error(&self, line: String) {
    method status_build_message (line 136) | pub(crate) fn status_build_message(&self, line: String) {
    method status_build_progress (line 140) | pub(crate) fn status_build_progress(&self, count: usize, total: usize,...
    method status_starting_build (line 150) | pub(crate) fn status_starting_build(&self, crate_count: usize) {
    method status_starting_link (line 159) | pub(crate) fn status_starting_link(&self) {
    method status_copied_asset (line 165) | pub(crate) fn status_copied_asset(
    method status_optimizing_wasm (line 180) | pub(crate) fn status_optimizing_wasm(&self) {
    method status_hotpatching (line 186) | pub(crate) fn status_hotpatching(&self) {
    method status_installing_tooling (line 192) | pub(crate) fn status_installing_tooling(&self) {
    method status_compressing_assets (line 198) | pub(crate) fn status_compressing_assets(&self) {
    method status_extracting_assets (line 203) | pub(crate) fn status_extracting_assets(&self) {
  type ProgressTx (line 22) | pub type ProgressTx = UnboundedSender<BuilderUpdate>;
  type ProgressRx (line 23) | pub type ProgressRx = UnboundedReceiver<BuilderUpdate>;
  type BuildId (line 26) | pub struct BuildId(pub(crate) usize);
    constant PRIMARY (line 28) | pub const PRIMARY: Self = Self(0);
    constant SECONDARY (line 29) | pub const SECONDARY: Self = Self(1);
  type BuilderUpdate (line 33) | pub enum BuilderUpdate {

FILE: packages/cli/src/build/ios_swift.rs
  function create_framework_bundle (line 14) | pub async fn create_framework_bundle(
  function compile_swift_sources (line 178) | pub async fn compile_swift_sources(
  function modify_package_for_dynamic_library (line 374) | fn modify_package_for_dynamic_library(package_path: &Path, product_name:...
  function swift_target_and_sdk (line 413) | fn swift_target_and_sdk(triple: &Triple) -> Result<(String, String)> {
  function lookup_sdk_path (line 457) | async fn lookup_sdk_path(sdk_name: &str) -> Result<String> {
  function copy_dir_recursive (line 482) | fn copy_dir_recursive(src: &Path, dst: &Path) -> Result<()> {
  function extract_swift_metadata_from_link_args (line 506) | pub fn extract_swift_metadata_from_link_args(
  function extract_swift_from_rlib (line 543) | fn extract_swift_from_rlib(rlib_path: &Path) -> Result<Vec<SwiftPackageM...
  function extract_swift_from_object (line 570) | fn extract_swift_from_object(obj_path: &Path) -> Result<Vec<SwiftPackage...
  function extract_swift_from_bytes (line 576) | fn extract_swift_from_bytes(bytes: &[u8]) -> Result<Vec<SwiftPackageMeta...
  function collect_swift_files (line 625) | fn collect_swift_files(dir: &Path) -> Result<Vec<PathBuf>> {
  type AppleWidgetSource (line 648) | pub struct AppleWidgetSource {
  function compile_apple_widget (line 686) | pub async fn compile_apple_widget(

FILE: packages/cli/src/build/manifest.rs
  type AppManifest (line 15) | pub struct AppManifest {

FILE: packages/cli/src/build/manifest_mapper.rs
  type AndroidPermissionEntry (line 15) | pub struct AndroidPermissionEntry {
  type PlistEntry (line 24) | pub struct PlistEntry {
  type ManifestMapper (line 33) | pub struct ManifestMapper {
    method from_config (line 60) | pub fn from_config(
    method map_location (line 123) | fn map_location(&mut self, permissions: &PermissionsConfig) {
    method map_camera (line 155) | fn map_camera(&mut self, permissions: &PermissionsConfig) {
    method map_microphone (line 174) | fn map_microphone(&mut self, permissions: &PermissionsConfig) {
    method map_notifications (line 193) | fn map_notifications(&mut self, permissions: &PermissionsConfig) {
    method map_photos (line 203) | fn map_photos(&mut self, permissions: &PermissionsConfig) {
    method map_bluetooth (line 253) | fn map_bluetooth(&mut self, permissions: &PermissionsConfig) {
    method map_background_location (line 276) | fn map_background_location(&mut self, permissions: &PermissionsConfig) {
    method map_contacts (line 290) | fn map_contacts(&mut self, permissions: &PermissionsConfig) {
    method map_calendar (line 329) | fn map_calendar(&mut self, permissions: &PermissionsConfig) {
    method map_biometrics (line 368) | fn map_biometrics(&mut self, permissions: &PermissionsConfig) {
    method map_nfc (line 382) | fn map_nfc(&mut self, permissions: &PermissionsConfig) {
    method map_motion (line 396) | fn map_motion(&mut self, permissions: &PermissionsConfig) {
    method map_health (line 410) | fn map_health(&mut self, permissions: &PermissionsConfig) {
    method map_speech (line 444) | fn map_speech(&mut self, permissions: &PermissionsConfig) {
    method map_media_library (line 459) | fn map_media_library(&mut self, permissions: &PermissionsConfig) {
    method map_siri (line 473) | fn map_siri(&mut self, permissions: &PermissionsConfig) {
    method map_homekit (line 483) | fn map_homekit(&mut self, permissions: &PermissionsConfig) {
    method map_local_network (line 493) | fn map_local_network(&mut self, permissions: &PermissionsConfig) {
    method map_nearby_wifi (line 503) | fn map_nearby_wifi(&mut self, permissions: &PermissionsConfig) {
    method map_deep_links (line 514) | fn map_deep_links(
    method map_background_modes (line 550) | fn map_background_modes(
  function test_location_permission_mapping (line 631) | fn test_location_permission_mapping() {
  function test_camera_permission_mapping (line 667) | fn test_camera_permission_mapping() {
  function test_android_camera_permission_data (line 695) | fn test_android_camera_permission_data() {

FILE: packages/cli/src/build/patch.rs
  type Result (line 28) | type Result<T, E = PatchError> = std::result::Result<T, E>;
  type PatchError (line 31) | pub enum PatchError {
  type HotpatchModuleCache (line 67) | pub struct HotpatchModuleCache {
    method fmt (line 107) | fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
    method new (line 117) | pub fn new(original: &Path, triple: &Triple) -> Result<Self> {
  type CachedSymbol (line 91) | pub struct CachedSymbol {
  method eq (line 101) | fn eq(&self, other: &Self) -> bool {
  function create_windows_jump_table (line 348) | pub fn create_windows_jump_table(patch: &Path, cache: &HotpatchModuleCac...
  function create_native_jump_table (line 402) | pub fn create_native_jump_table(
  function create_wasm_jump_table (line 457) | pub fn create_wasm_jump_table(patch: &Path, cache: &HotpatchModuleCache)...
  function convert_func_to_ifunc_call (line 747) | fn convert_func_to_ifunc_call(
  function collect_func_ifuncs (line 788) | fn collect_func_ifuncs(m: &Module) -> HashMap<&str, i32> {
  function create_undefined_symbol_stub (line 836) | pub fn create_undefined_symbol_stub(
  function prepare_wasm_base_module (line 1260) | pub fn prepare_wasm_base_module(bytes: &[u8]) -> Result<Vec<u8>> {
  function name_is_bindgen_symbol (line 1418) | fn name_is_bindgen_symbol(name: &str) -> bool {
  function parse_bytes_to_data_segment (line 1432) | fn parse_bytes_to_data_segment(bytes: &[u8]) -> Result<RawDataSection<'_...
  type RawDataSection (line 1515) | struct RawDataSection<'a> {
  type DataSymbol (line 1524) | struct DataSymbol {
  type ParsedModule (line 1532) | struct ParsedModule<'a> {
  function parse_module_with_ids (line 1540) | fn parse_module_with_ids(bindgened: &[u8]) -> Result<ParsedModule<'_>> {
  function main_sentinel (line 1573) | fn main_sentinel(triple: &Triple) -> &'static str {

FILE: packages/cli/src/build/pre_render.rs
  function pre_render_static_routes (line 16) | pub(crate) async fn pre_render_static_routes(

FILE: packages/cli/src/build/request.rs
  type BuildRequest (line 372) | pub(crate) struct BuildRequest {
    method new (line 502) | pub(crate) async fn new(args: &TargetArgs, workspace: Arc<Workspace>) ...
    method prebuild (line 1046) | pub(crate) async fn prebuild(&self, ctx: &BuildContext) -> Result<()> {
    method build (line 1079) | pub(crate) async fn build(&self, ctx: &BuildContext) -> Result<BuildAr...
    method cargo_build (line 1207) | async fn cargo_build(&self, ctx: &BuildContext) -> Result<BuildArtifac...
    method compile_workspace_deps (line 1436) | async fn compile_workspace_deps(&self, ctx: &BuildContext) -> Result<O...
    method collect_assets_and_metadata (line 1546) | async fn collect_assets_and_metadata(
    method install_android_artifacts (line 1646) | fn install_android_artifacts(
    method copy_build_dir_recursive (line 1743) | fn copy_build_dir_recursive(&self, src: &Path, dst: &Path) -> Result<(...
    method strip_gradle_plugin_versions (line 1775) | fn strip_gradle_plugin_versions(&self, module_dir: &Path) -> Result<()> {
    method ensure_settings_gradle_include (line 1803) | fn ensure_settings_gradle_include(
    method compile_swift_sources (line 1830) | async fn compile_swift_sources(&self, swift_sources: &[SwiftPackageMet...
    method install_swift_framework (line 1856) | async fn install_swift_framework(&self, framework_path: &Path) -> Resu...
    method embed_swift_stdlibs (line 1883) | async fn embed_swift_stdlibs(&self, swift_sources: &[SwiftPackageMetad...
    method compile_widget_extensions (line 1952) | async fn compile_widget_extensions(&self) -> Result<()> {
    method write_executable (line 2035) | async fn write_executable(
    method write_frameworks (line 2096) | async fn write_frameworks(
    method frameworks_folder (line 2178) | fn frameworks_folder(&self) -> PathBuf {
    method plugins_folder (line 2210) | fn plugins_folder(&self) -> PathBuf {
    method write_assets (line 2223) | async fn write_assets(&self, ctx: &BuildContext, assets: &AssetManifes...
    method write_patch (line 2335) | async fn write_patch(
    method thin_link_args (line 2593) | fn thin_link_args(&self, original_args: &[String]) -> Result<Vec<Strin...
    method patch_exe (line 2773) | pub(crate) fn patch_exe(&self, time_start: SystemTime) -> PathBuf {
    method run_fat_link (line 2824) | pub(crate) async fn run_fat_link(&self, exe: &Path, rustc_args: &Rustc...
    method create_jump_table (line 3144) | pub(crate) fn create_jump_table(
    method linker_flavor (line 3190) | fn linker_flavor(&self) -> LinkerFlavor {
    method select_linker (line 3240) | fn select_linker(&self) -> Result<PathBuf, Error> {
    method build_command (line 3286) | fn build_command(&self, build_mode: &BuildMode) -> Result<Command> {
    method cargo_build_arguments (line 3387) | pub(crate) fn cargo_build_arguments(&self, build_mode: &BuildMode) -> ...
    method cargo_build_env_vars (line 3597) | pub(crate) fn cargo_build_env_vars(
    method android_env_vars (line 3676) | fn android_env_vars(&self) -> Result<Vec<(Cow<'static, str>, OsString)...
    method android_artifact_dir (line 3948) | fn android_artifact_dir(&self) -> Result<PathBuf> {
    method get_unit_count_estimate (line 3963) | async fn get_unit_count_estimate(&self, build_mode: &BuildMode) -> usi...
    method get_unit_count (line 3985) | async fn get_unit_count(&self, build_mode: &BuildMode) -> crate::Resul...
    method all_target_features (line 4021) | pub(crate) fn all_target_features(&self) -> Vec<String> {
    method root_dir (line 4052) | pub(crate) fn root_dir(&self) -> PathBuf {
    method platform_dir (line 4077) | fn platform_dir(&self) -> PathBuf {
    method platform_exe_name (line 4084) | fn platform_exe_name(&self) -> String {
    method build_android_app_dir (line 4112) | fn build_android_app_dir(&self) -> Result<()> {
    method wry_android_kotlin_files_out_dir (line 4409) | fn wry_android_kotlin_files_out_dir(&self) -> PathBuf {
    method ensure_gradle_dependency (line 4424) | fn ensure_gradle_dependency(&self, build_gradle: &Path, dependency_lin...
    method session_cache_dir (line 4447) | pub(crate) fn session_cache_dir(&self) -> PathBuf {
    method rustc_wrapper_args_dir (line 4451) | pub(crate) fn rustc_wrapper_args_dir(&self) -> PathBuf {
    method tip_crate_name (line 4456) | fn tip_crate_name(&self) -> String {
    method link_err_file (line 4460) | fn link_err_file(&self) -> PathBuf {
    method link_args_file (line 4464) | fn link_args_file(&self) -> PathBuf {
    method windows_command_file (line 4468) | fn windows_command_file(&self) -> PathBuf {
    method crate_out_dir (line 4474) | pub(crate) fn crate_out_dir(&self) -> Option<PathBuf> {
    method internal_out_dir (line 4485) | fn internal_out_dir(&self) -> PathBuf {
    method bundle_dir (line 4495) | pub(crate) fn bundle_dir(&self, bundle: BundleFormat) -> PathBuf {
    method workspace_dir (line 4503) | pub(crate) fn workspace_dir(&self) -> PathBuf {
    method crate_dir (line 4512) | pub(crate) fn crate_dir(&self) -> PathBuf {
    method package (line 4522) | pub(crate) fn package(&self) -> &krates::cm::Package {
    method executable_name (line 4527) | pub(crate) fn executable_name(&self) -> &str {
    method executable_type (line 4532) | pub(crate) fn executable_type(&self) -> TargetKind {
    method feature_for_platform_and_renderer (line 4537) | fn feature_for_platform_and_renderer(
    method get_strip_setting (line 4596) | pub(crate) fn get_strip_setting(&self) -> StripSetting {
    method renderer_enabled_by_dioxus_dependency (line 4635) | pub(crate) fn renderer_enabled_by_dioxus_dependency(
    method features_that_enable_renderers (line 4660) | pub(crate) fn features_that_enable_renderers(
    method enabled_cargo_toml_default_features_renderers (line 4675) | pub(crate) fn enabled_cargo_toml_default_features_renderers(
    method rendererless_features (line 4728) | fn rendererless_features(package: &krates::cm::Package) -> Vec<String> {
    method bundled_app_name (line 4771) | pub(crate) fn bundled_app_name(&self) -> String {
    method crate_version (line 4777) | fn crate_version(&self) -> String {
    method bundle_identifier (line 4783) | pub(crate) fn bundle_identifier(&self) -> String {
    method main_exe (line 4809) | pub(crate) fn main_exe(&self) -> PathBuf {
    method is_wasm_or_wasi (line 4813) | fn is_wasm_or_wasi(&self) -> bool {
    method fullstack_feature_enabled (line 4850) | pub(crate) fn fullstack_feature_enabled(&self) -> bool {
    method write_metadata (line 4884) | async fn write_metadata(&self) -> Result<()> {
    method optimize (line 4921) | async fn optimize(&self, ctx: &BuildContext) -> Result<()> {
    method strip_binary (line 4950) | async fn strip_binary(&self, artifacts: &BuildArtifacts) -> Result<()> {
    method should_pre_compress_web_assets (line 4984) | fn should_pre_compress_web_assets(&self, release: bool) -> bool {
    method should_bundle_to_asset (line 4989) | fn should_bundle_to_asset(&self) -> bool {
    method bundle_web (line 4998) | async fn bundle_web(
    method write_js_glue_shim (line 5207) | fn write_js_glue_shim(&self, assets: &AssetManifest) -> Result<()> {
    method write_index_html (line 5242) | pub(crate) fn write_index_html(&self, assets: &AssetManifest) -> Resul...
    method bundled_js_path (line 5255) | fn bundled_js_path(&self, assets: &AssetManifest) -> String {
    method bundled_wasm_path (line 5271) | fn bundled_wasm_path(&self, assets: &AssetManifest) -> String {
    method info_plist_contents (line 5286) | fn info_plist_contents(&self, bundle: BundleFormat) -> Result<String> {
    method assemble (line 5424) | async fn assemble(&self, ctx: &BuildContext) -> Result<()> {
    method android_gradle_bundle (line 5465) | pub(crate) async fn android_gradle_bundle(&self) -> Result<PathBuf> {
    method gradle_exe (line 5497) | fn gradle_exe(&self) -> Result<PathBuf> {
    method debug_apk_path (line 5517) | pub(crate) fn debug_apk_path(&self) -> PathBuf {
    method prepare_build_dir (line 5535) | pub(crate) fn prepare_build_dir(&self, ctx: &BuildContext) -> Result<(...
    method asset_dir (line 5584) | pub(crate) fn asset_dir(&self) -> PathBuf {
    method exe_dir (line 5619) | fn exe_dir(&self) -> PathBuf {
    method wasm_bindgen_out_dir (line 5642) | fn wasm_bindgen_out_dir(&self) -> PathBuf {
    method wasm_bindgen_js_output_file (line 5647) | pub(crate) fn wasm_bindgen_js_output_file(&self) -> PathBuf {
    method wasm_bindgen_wasm_output_file (line 5654) | pub(crate) fn wasm_bindgen_wasm_output_file(&self) -> PathBuf {
    method app_manifest (line 5664) | pub(crate) fn app_manifest(&self) -> PathBuf {
    method load_manifest (line 5668) | pub(crate) fn load_manifest(&self) -> Result<AppManifest> {
    method verify_tooling (line 5681) | pub(crate) async fn verify_tooling(&self, ctx: &BuildContext) -> Resul...
    method verify_toolchain_installed (line 5697) | async fn verify_toolchain_installed(&self) -> Result<()> {
    method verify_web_tooling (line 5749) | async fn verify_web_tooling(&self) -> Result<()> {
    method verify_ios_tooling (line 5770) | async fn verify_ios_tooling(&self) -> Result<()> {
    method verify_android_tooling (line 5807) | async fn verify_android_tooling(&self) -> Result<()> {
    method verify_linux_tooling (line 5829) | async fn verify_linux_tooling(&self) -> Result<()> {
    method workspace_dependents_of (line 5841) | pub(crate) fn workspace_dependents_of(&self, crate_name: &str) -> Vec<...
    method compile_dep_crate (line 5888) | async fn compile_dep_crate(&self, crate_name: &str, rustc_args: &Rustc...
    method find_rlib_for_crate (line 5928) | fn find_rlib_for_crate(&self, crate_name: &str, rustc_args: &RustcArgs...
    method bust_fingerprint (line 5998) | fn bust_fingerprint(&self, ctx: &BuildContext) -> Result<()> {
    method patch_cache_exe (line 6035) | pub(crate) fn patch_cache_exe(&self, exe: &Path) -> PathBuf {
    method create_patch_cache (line 6042) | pub(crate) fn create_patch_cache(&self, exe: &Path) -> Result<Hotpatch...
    method prepare_html (line 6067) | pub(crate) fn prepare_html(
    method is_dev_build (line 6101) | fn is_dev_build(&self) -> bool {
    method inject_resources (line 6106) | fn inject_resources(&self, assets: &AssetManifest, html: &mut String) ...
    method inject_loading_scripts (line 6199) | fn inject_loading_scripts(&self, assets: &AssetManifest, html: &mut St...
    method replace_template_placeholders (line 6218) | fn replace_template_placeholders(&self, html: &mut String, wasm_path: ...
    method replace_or_insert_before (line 6238) | fn replace_or_insert_before(
    method user_public_dir (line 6252) | pub(crate) fn user_public_dir(&self) -> Option<PathBuf> {
    method path_is_in_public_dir (line 6266) | pub(crate) fn path_is_in_public_dir(&self, path: &Path) -> bool {
    method base_path (line 6280) | pub(crate) fn base_path(&self) -> Option<&str> {
    method trimmed_base_path (line 6288) | pub(crate) fn trimmed_base_path(&self) -> Option<&str> {
    method base_path_or_default (line 6295) | pub(crate) fn base_path_or_default(&self) -> &str {
    method package_manifest_dir (line 6300) | pub(crate) fn package_manifest_dir(&self) -> PathBuf {
    method min_sdk_version_or_default (line 6310) | pub(crate) fn min_sdk_version_or_default(&self) -> u32 {
    method start_simulators (line 6317) | pub(crate) async fn start_simulators(&self) -> Result<()> {
    method profile_args (line 6455) | fn profile_args(&self) -> Vec<String> {
    method codesign_apple (line 6497) | pub async fn codesign_apple(&self, ctx: &BuildContext) -> Result<()> {
    method auto_provision_signing_name (line 6582) | async fn auto_provision_signing_name() -> Result<String> {
    method enrich_entitlements_from_config (line 6611) | fn enrich_entitlements_from_config(&self, base_xml: String) -> Result<...
    method auto_provision_entitlements (line 6833) | async fn auto_provision_entitlements(bundle_id: &str) -> Result<(Strin...
    method write_app_manifest (line 7048) | async fn write_app_manifest(&self, assets: &AssetManifest) -> Result<(...
    method record_build_duration (line 7062) | fn record_build_duration(&self, time_start: SystemTime, ctx: &BuildCon...
  type BuildMode (line 424) | pub enum BuildMode {
  type BuildArtifacts (line 468) | pub struct BuildArtifacts {
  function generate_plist_entries (line 7098) | fn generate_plist_entries(plist: &std::collections::HashMap<String, serd...
  function value_to_plist_xml (line 7110) | fn value_to_plist_xml(value: &serde_json::Value, indent: usize) -> String {

FILE: packages/cli/src/build/tools.rs
  type AndroidTools (line 14) | pub(crate) struct AndroidTools {
    method android_tools_dir (line 124) | pub(crate) fn android_tools_dir(&self) -> PathBuf {
    method android_cc (line 159) | pub(crate) fn android_cc(&self, triple: &Triple, sdk_version: u32) -> ...
    method sysroot (line 175) | pub(crate) fn sysroot(&self) -> PathBuf {
    method sdk (line 182) | pub(crate) fn sdk(&self) -> PathBuf {
    method emulator (line 190) | pub(crate) fn emulator(&self) -> PathBuf {
    method clang_folder (line 194) | pub(crate) fn clang_folder(&self) -> PathBuf {
    method ranlib (line 205) | pub(crate) fn ranlib(&self) -> PathBuf {
    method ar_path (line 209) | pub(crate) fn ar_path(&self) -> PathBuf {
    method target_cc (line 213) | pub(crate) fn target_cc(&self) -> PathBuf {
    method target_cxx (line 217) | pub(crate) fn target_cxx(&self) -> PathBuf {
    method java_home (line 221) | pub(crate) fn java_home(&self) -> Option<PathBuf> {
    method android_jnilib (line 225) | pub(crate) fn android_jnilib(triple: &Triple) -> &'static str {
    method autodetect_android_device_triple (line 236) | pub(crate) async fn autodetect_android_device_triple(&self) -> Triple {
    method libcpp_shared (line 283) | pub(crate) fn libcpp_shared(&self, triple: &Triple) -> PathBuf {
    method sysroot_target (line 294) | pub(crate) fn sysroot_target(rust_target: &str) -> &str {
    method openssl_prebuilt_aar (line 301) | pub(crate) fn openssl_prebuilt_aar() -> &'static [u8] {
    method openssl_prebuilt_dest (line 305) | pub(crate) fn openssl_prebuilt_dest() -> PathBuf {
    method openssl_lib_dir (line 311) | pub(crate) fn openssl_lib_dir(arch: &Triple) -> PathBuf {
    method openssl_include_dir (line 323) | pub(crate) fn openssl_include_dir() -> PathBuf {
    method unpack_prebuilt_openssl (line 328) | pub(crate) fn unpack_prebuilt_openssl() -> Result<()> {
  function get_android_tools (line 21) | pub fn get_android_tools() -> Option<Arc<AndroidTools>> {
  function var_or_debug (line 352) | fn var_or_debug(name: &str) -> Option<PathBuf> {

FILE: packages/cli/src/bundle_utils.rs
  function from (line 7) | fn from(val: NsisSettings) -> Self {
  function from (line 26) | fn from(val: BundleConfig) -> Self {
  function from (line 46) | fn from(val: DebianSettings) -> Self {
  function from (line 67) | fn from(val: WixSettings) -> Self {
  function from (line 105) | fn from(val: MacOsSettings) -> Self {
  function from (line 124) | fn from(val: WindowsSettings) -> Self {
  function from (line 142) | fn from(val: NSISInstallerMode) -> Self {
  function from (line 152) | fn from(value: PackageType) -> Self {
  method into (line 168) | fn into(self) -> tauri_utils::config::WebviewInstallMode {
  function from (line 188) | fn from(val: CustomSignCommandSettings) -> Self {

FILE: packages/cli/src/cargo_toml.rs
  function load_manifest_from_path (line 10) | pub fn load_manifest_from_path(path: &Path) -> Result<Manifest, cargo_to...
  function cargo_home (line 25) | fn cargo_home() -> Option<PathBuf> {
  function global_cargo_config_path (line 43) | fn global_cargo_config_path() -> Option<PathBuf> {
  function extend_manifest_config_toml (line 48) | fn extend_manifest_config_toml(manifest: &mut Manifest, path: &Path) {
  function merge_profiles (line 68) | fn merge_profiles(target: &mut Profiles, new: Profiles) {
  function merge_profile (line 120) | fn merge_profile(target: &mut Profile, new: Profile) {

FILE: packages/cli/src/cli/autoformat.rs
  type Autoformat (line 13) | pub(crate) struct Autoformat {
    method autoformat (line 41) | pub(crate) async fn autoformat(self) -> Result<StructuredOutput> {
  function refactor_file (line 85) | fn refactor_file(
  function format_file (line 121) | fn format_file(
  function autoformat_project (line 158) | fn autoformat_project(
  function indentation_for (line 200) | fn indentation_for(
  function format_rust (line 243) | fn format_rust(input: &str) -> Result<String> {
  function format_syn_error (line 251) | fn format_syn_error(err: syn::Error) -> Error {
  function test_auto_fmt (line 259) | async fn test_auto_fmt() {

FILE: packages/cli/src/cli/build.rs
  type BuildArgs (line 13) | pub struct BuildArgs {
    method force_sequential_build (line 49) | pub(crate) fn force_sequential_build(&self) -> bool {
  method anonymized (line 56) | fn anonymized(&self) -> Value {
  type BuildTargets (line 65) | pub struct BuildTargets {
  function into_targets (line 98) | pub async fn into_targets(mut self) -> Result<BuildTargets> {
  function build (line 149) | pub async fn build(self) -> Result<StructuredOutput> {
  function build_client_inner (line 174) | pub(crate) async fn build_client_inner(
  function build_server_inner (line 186) | pub(crate) async fn build_server_inner(
  method into_structured_output (line 211) | pub(crate) fn into_structured_output(self) -> StructuredBuildArtifacts {

FILE: packages/cli/src/cli/build_assets.rs
  type BuildAssets (line 9) | pub struct BuildAssets {
    method run (line 18) | pub async fn run(self) -> Result<StructuredOutput> {

FILE: packages/cli/src/cli/bundle.rs
  type Bundle (line 15) | pub struct Bundle {
    method bundle (line 37) | pub(crate) async fn bundle(mut self) -> Result<StructuredOutput> {
    method bundle_desktop (line 151) | fn bundle_desktop(

FILE: packages/cli/src/cli/check.rs
  type Check (line 14) | pub(crate) struct Check {
    method check (line 26) | pub(crate) async fn check(self) -> Result<StructuredOutput> {
  function check_file_and_report (line 55) | async fn check_file_and_report(path: PathBuf) -> Result<()> {
  function check_project_and_report (line 64) | async fn check_project_and_report(build: &BuildRequest) -> Result<()> {
  function check_files_and_report (line 78) | async fn check_files_and_report(files_to_check: Vec<PathBuf>) -> Result<...
  function collect_rs_files (line 126) | pub(crate) fn collect_rs_files(folder: &Path, files: &mut Vec<PathBuf>) {

FILE: packages/cli/src/cli/component.rs
  type ComponentCommand (line 20) | pub enum ComponentCommand {
    method run (line 88) | pub async fn run(self) -> Result<StructuredOutput> {
    method remove_component (line 250) | async fn remove_component(
    method resolve_config (line 290) | async fn resolve_config() -> Result<DioxusConfig> {
    method resolve_registry (line 301) | fn resolve_registry(
    method add_rust_dependencies (line 313) | async fn add_rust_dependencies(dependencies: &HashSet<CargoDependency>...
  type ComponentArgs (line 68) | pub struct ComponentArgs {
  type RemoteComponentRegistry (line 336) | pub struct RemoteComponentRegistry {
    method resolve (line 348) | async fn resolve(&self) -> Result<PathBuf> {
    method update (line 388) | async fn update(&self) -> Result<()> {
    method resolve_or_default (line 424) | fn resolve_or_default(&self) -> (String, Option<String>) {
    method checkout_rev (line 433) | fn checkout_rev(repo: &Repository, git: &str, rev: &str) -> Result<()> {
  type ComponentRegistry (line 454) | pub struct ComponentRegistry {
    method resolve (line 467) | async fn resolve(&self) -> Result<PathBuf> {
    method read_components (line 478) | async fn read_components(&self) -> Result<Vec<ResolvedComponent>> {
    method is_default (line 491) | fn is_default(&self) -> bool {
  type ResolvedComponent (line 498) | struct ResolvedComponent {
    method member_paths (line 505) | fn member_paths(&self) -> Vec<PathBuf> {
  type Target (line 515) | type Target = Component;
  method deref (line 517) | fn deref(&self) -> &Self::Target {
  function find_component (line 523) | fn find_component(components: &[ResolvedComponent], component: &str) -> ...
  function components_root (line 532) | fn components_root(module_path: Option<&Path>, config: &DioxusConfig) ->...
  function global_assets_root (line 547) | async fn global_assets_root(assets_path: Option<&Path>, config: &DioxusC...
  type ComponentExistsBehavior (line 563) | enum ComponentExistsBehavior {
  function add_component (line 575) | async fn add_component(
  function copy_component_files (line 628) | async fn copy_component_files(
  function ensure_components_module_exists (line 731) | async fn ensure_components_module_exists(components_dir: &Path) -> Resul...
  function read_component (line 746) | async fn read_component(path: &Path) -> Result<ResolvedComponent> {
  function discover_components (line 764) | async fn discover_components(root: ResolvedComponent) -> Result<Vec<Reso...
  function copy_global_assets (line 789) | async fn copy_global_assets(

FILE: packages/cli/src/cli/config.rs
  type Config (line 6) | pub(crate) enum Config {
    method config (line 81) | pub(crate) async fn config(self) -> Result<StructuredOutput> {
  type Setting (line 38) | pub(crate) enum Setting {
  method fmt (line 52) | fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
  type BoolValue (line 66) | pub(crate) enum BoolValue {
  function from (line 72) | fn from(value: BoolValue) -> Self {

FILE: packages/cli/src/cli/create.rs
  type Create (line 11) | pub struct Create {
    method create (line 58) | pub async fn create(mut self) -> Result<StructuredOutput> {
  function resolve_template_and_branch (line 116) | pub(crate) fn resolve_template_and_branch(
  function name_from_path (line 131) | pub(crate) fn name_from_path(path: &Path) -> Result<String> {
  function post_create (line 145) | pub(crate) fn post_create(path: &Path, vcs: &Vcs) -> Result<()> {
  function remove_triple_newlines (line 226) | fn remove_triple_newlines(string: &str) -> String {
  function check_path (line 238) | pub(crate) async fn check_path(path: &std::path::PathBuf) -> Result<()> {
  function check_connectivity (line 252) | pub(crate) async fn check_connectivity() -> Result<()> {

FILE: packages/cli/src/cli/doctor.rs
  type Doctor (line 8) | pub(crate) struct Doctor {}
    method doctor (line 11) | pub async fn doctor(self) -> Result<StructuredOutput> {

FILE: packages/cli/src/cli/hotpatch.rs
  constant HELP_HEADING (line 11) | const HELP_HEADING: &str = "Hotpatching a binary";
  type HotpatchTip (line 20) | pub struct HotpatchTip {
    method run (line 34) | pub async fn run(self) -> Result<StructuredOutput> {

FILE: packages/cli/src/cli/init.rs
  type Init (line 6) | pub struct Init {
    method init (line 54) | pub async fn init(mut self) -> Result<StructuredOutput> {

FILE: packages/cli/src/cli/link.rs
  type LinkAction (line 31) | pub struct LinkAction {
    constant DX_LINK_ARG (line 52) | const DX_LINK_ARG: &str = "DX_LINK";
    constant DX_ARGS_FILE (line 53) | const DX_ARGS_FILE: &str = "DX_LINK_ARGS_FILE";
    constant DX_ERR_FILE (line 54) | const DX_ERR_FILE: &str = "DX_LINK_ERR_FILE";
    constant DX_LINK_TRIPLE (line 55) | const DX_LINK_TRIPLE: &str = "DX_LINK_TRIPLE";
    constant DX_LINK_CUSTOM_LINKER (line 56) | const DX_LINK_CUSTOM_LINKER: &str = "DX_LINK_CUSTOM_LINKER";
    method from_env (line 61) | pub(crate) fn from_env() -> Option<Self> {
    method write_env_vars (line 83) | pub(crate) fn write_env_vars(
    method run_link (line 109) | pub(crate) fn run_link(self) -> ExitCode {
    method run_link_inner (line 129) | fn run_link_inner(self) -> Result<()> {
  type LinkerFlavor (line 43) | pub enum LinkerFlavor {
  function get_actual_linker_args_excluding_program_name (line 243) | pub fn get_actual_linker_args_excluding_program_name(args: Vec<String>) ...
  function handle_linker_arg_response_file (line 252) | pub fn handle_linker_arg_response_file(arg: String) -> Vec<String> {

FILE: packages/cli/src/cli/mod.rs
  type Cli (line 48) | pub(crate) struct Cli {
  type Commands (line 57) | pub(crate) enum Commands {
  type BuildTools (line 127) | pub enum BuildTools {
  constant CARGO_STYLING (line 147) | pub(crate) const CARGO_STYLING: Styles = Styles::styled()
  constant HEADER (line 158) | pub(crate) const HEADER: Style = AnsiColor::Green.on_default().effects(E...
  constant USAGE (line 159) | pub(crate) const USAGE: Style = AnsiColor::Green.on_default().effects(Ef...
  constant LITERAL (line 160) | pub(crate) const LITERAL: Style = AnsiColor::Cyan.on_default().effects(E...
  constant PLACEHOLDER (line 161) | pub(crate) const PLACEHOLDER: Style = AnsiColor::Cyan.on_default();
  constant ERROR (line 162) | pub(crate) const ERROR: Style = AnsiColor::Red.on_default().effects(Effe...
  constant VALID (line 164) | pub(crate) const VALID: Style = AnsiColor::Cyan.on_default().effects(Eff...
  constant INVALID (line 165) | pub(crate) const INVALID: Style = AnsiColor::Yellow.on_default().effects...
  constant GLOW_STYLE (line 169) | pub(crate) const GLOW_STYLE: Style = AnsiColor::Yellow.on_default();
  constant NOTE_STYLE (line 170) | pub(crate) const NOTE_STYLE: Style = AnsiColor::Green.on_default();
  constant LINK_STYLE (line 171) | pub(crate) const LINK_STYLE: Style = AnsiColor::Blue.on_default();
  constant ERROR_STYLE (line 172) | pub(crate) const ERROR_STYLE: Style = AnsiColor::Red.on_default();
  constant HINT_STYLE (line 173) | pub(crate) const HINT_STYLE: Style = clap::builder::styling::Ansi256Colo...

FILE: packages/cli/src/cli/platform_override.rs
  type CommandWithPlatformOverrides (line 10) | pub struct CommandWithPlatformOverrides<T> {
  function with_client_or_shared (line 20) | pub(crate) fn with_client_or_shared<'a, O>(&'a self, f: impl FnOnce(&'a ...
  function with_server_or_shared (line 27) | pub(crate) fn with_server_or_shared<'a, O>(&'a self, f: impl FnOnce(&'a ...
  method anonymized (line 39) | fn anonymized(&self) -> Value {
  method command (line 51) | fn command() -> clap::Command {
  method command_for_update (line 55) | fn command_for_update() -> clap::Command {
  method augment_args (line 64) | fn augment_args(cmd: clap::Command) -> clap::Command {
  method augment_args_for_update (line 70) | fn augment_args_for_update(_cmd: clap::Command) -> clap::Command {
  function merge_matches (line 75) | fn merge_matches<T: Args>(base: &ArgMatches, platform: &ArgMatches) -> R...
  method from_arg_matches (line 98) | fn from_arg_matches(matches: &ArgMatches) -> Result<Self, clap::Error> {
  method update_from_arg_matches (line 126) | fn update_from_arg_matches(&mut self, _matches: &ArgMatches) -> Result<(...
  type PlatformOverrides (line 133) | pub(crate) enum PlatformOverrides<T: Args> {
  type ChainedCommand (line 148) | pub struct ChainedCommand<T, U> {
  method augment_args (line 161) | fn augment_args(cmd: clap::Command) -> clap::Command {
  method augment_args_for_update (line 167) | fn augment_args_for_update(_cmd: clap::Command) -> clap::Command {
  method from_arg_matches (line 177) | fn from_arg_matches(_: &ArgMatches) -> Result<Self, clap::Error> {
  method update_from_arg_matches (line 181) | fn update_from_arg_matches(&mut self, _matches: &ArgMatches) -> Result<(...

FILE: packages/cli/src/cli/print.rs
  type Print (line 9) | pub(crate) enum Print {
    method print (line 61) | pub(crate) async fn print(self) -> Result<StructuredOutput> {
    method print_as_unified_command (line 101) | fn print_as_unified_command(
    method escape_windows (line 180) | fn escape_windows(s: Cow<str>) -> Cow<str> {
  type PrintCargoArgs (line 22) | pub(crate) struct PrintCargoArgs {
  type PrintStyle (line 39) | pub(crate) enum PrintStyle {

FILE: packages/cli/src/cli/run.rs
  type RunArgs (line 16) | pub(crate) struct RunArgs {
    method run (line 23) | pub(crate) async fn run(mut self) -> Result<StructuredOutput> {

FILE: packages/cli/src/cli/serve.rs
  type ServeArgs (line 27) | pub(crate) struct ServeArgs {
    method serve (line 94) | pub(crate) async fn serve(self, tracer: &TraceController) -> Result<St...
    method is_interactive_tty (line 107) | pub(crate) fn is_interactive_tty(&self) -> bool {
  type PlatformServeArgs (line 78) | pub(crate) struct PlatformServeArgs {
  method anonymized (line 114) | fn anonymized(&self) -> Value {
  method anonymized (line 132) | fn anonymized(&self) -> Value {

FILE: packages/cli/src/cli/target.rs
  constant HELP_HEADING (line 8) | const HELP_HEADING: &str = "Target Options";
  type TargetArgs (line 12) | pub(crate) struct TargetArgs {
  method anonymized (line 183) | fn anonymized(&self) -> Value {

FILE: packages/cli/src/cli/translate.rs
  type Translate (line 8) | pub(crate) struct Translate {
    method translate (line 28) | pub(crate) fn translate(self) -> Result<StructuredOutput> {
  function convert_html_to_formatted_rsx (line 51) | pub fn convert_html_to_formatted_rsx(dom: &Dom, component: bool) -> Stri...
  function write_callbody_with_icon_section (line 60) | fn write_callbody_with_icon_section(mut callbody: CallBody) -> String {
  function write_component_body (line 74) | fn write_component_body(raw: String) -> String {
  function write_svg_section (line 81) | fn write_svg_section(out: &mut String, svgs: Vec<BodyNode>) {
  function indent_and_write (line 97) | fn indent_and_write(raw: &str, idx: usize, out: &mut String) {
  function determine_input (line 107) | fn determine_input(file: Option<String>, raw: Option<String>) -> Result<...

FILE: packages/cli/src/cli/update.rs
  type SelfUpdate (line 11) | pub(crate) struct SelfUpdate {
    method self_update (line 34) | pub async fn self_update(self) -> Result<StructuredOutput> {
  function log_if_cli_could_update (line 220) | pub fn log_if_cli_could_update() {

FILE: packages/cli/src/cli/verbosity.rs
  type Verbosity (line 5) | pub struct Verbosity {

FILE: packages/cli/src/config/app.rs
  type ApplicationConfig (line 6) | pub(crate) struct ApplicationConfig {
  function public_dir_default (line 56) | fn public_dir_default() -> Option<PathBuf> {
  function empty_string_is_none (line 60) | fn empty_string_is_none<'de, D>(deserializer: D) -> Result<Option<PathBu...

FILE: packages/cli/src/config/bundle.rs
  type BundleConfig (line 7) | pub(crate) struct BundleConfig {
  type DebianSettings (line 37) | pub(crate) struct DebianSettings {
  type WixSettings (line 93) | pub(crate) struct WixSettings {
  type MacOsSettings (line 146) | pub(crate) struct MacOsSettings {
  function default_hardened_runtime (line 178) | fn default_hardened_runtime() -> bool {
  type WindowsSettings (line 183) | pub(crate) struct WindowsSettings {
  type NsisSettings (line 221) | pub(crate) struct NsisSettings {
  type NSISInstallerMode (line 252) | pub(crate) enum NSISInstallerMode {
  type WebviewInstallMode (line 260) | pub(crate) enum WebviewInstallMode {
  method default (line 269) | fn default() -> Self {
  type AndroidSettings (line 276) | pub(crate) struct AndroidSettings {
  type CustomSignCommandSettings (line 284) | pub struct CustomSignCommandSettings {
  type PackageType (line 294) | pub(crate) enum PackageType {
  type Err (line 333) | type Err = String;
  method from_str (line 335) | fn from_str(s: &str) -> Result<Self, Self::Err> {

FILE: packages/cli/src/config/component.rs
  type ComponentConfig (line 8) | pub(crate) struct ComponentConfig {

FILE: packages/cli/src/config/dioxus_config.rs
  type DioxusConfig (line 8) | pub(crate) struct DioxusConfig {
    method resolved_identifier (line 88) | pub fn resolved_identifier(&self, platform: BundlePlatform) -> Option<...
  type BundlePlatform (line 63) | pub enum BundlePlatform {
    method from (line 73) | fn from(format: crate::BundleFormat) -> Self {
  method default (line 102) | fn default() -> Self {
  function static_dir_defaults_to_public (line 161) | fn static_dir_defaults_to_public() {
  function static_dir_can_be_overridden (line 170) | fn static_dir_can_be_overridden() {
  function static_dir_can_be_disabled (line 184) | fn static_dir_can_be_disabled() {

FILE: packages/cli/src/config/inline_config.rs
  function extract_inline_config (line 48) | pub fn extract_inline_config(source: &str) -> Option<toml::Value> {
  function extract_inline_config_from_file (line 55) | pub fn extract_inline_config_from_file(path: &Path) -> Option<toml::Valu...
  function extract_module_doc_comments (line 66) | fn extract_module_doc_comments(source: &str) -> Option<String> {
  function extract_toml_block (line 126) | fn extract_toml_block(doc_content: &str) -> Option<String> {
  function merge_toml_values (line 159) | pub fn merge_toml_values(base: toml::Value, override_val: toml::Value) -...
  function merge_with_inline_config (line 185) | pub fn merge_with_inline_config(
  function test_extract_module_doc_comments (line 205) | fn test_extract_module_doc_comments() {
  function test_extract_doc_comments_with_inner_attrs (line 221) | fn test_extract_doc_comments_with_inner_attrs() {
  function test_extract_doc_comments_with_multiline_attr (line 238) | fn test_extract_doc_comments_with_multiline_attr() {
  function test_extract_toml_block (line 257) | fn test_extract_toml_block() {
  function test_extract_inline_config (line 273) | fn test_extract_inline_config() {
  function test_extract_inline_config_with_attrs (line 298) | fn test_extract_inline_config_with_attrs() {
  function test_no_inline_config (line 318) | fn test_no_inline_config() {
  function test_merge_toml_values_simple (line 329) | fn test_merge_toml_values_simple() {
  function test_merge_toml_values_deep (line 358) | fn test_merge_toml_values_deep() {
  function test_merge_adds_new_sections (line 401) | fn test_merge_adds_new_sections() {

FILE: packages/cli/src/config/manifest.rs
  type PermissionsConfig (line 32) | pub struct PermissionsConfig {
  type SimplePermission (line 114) | pub struct SimplePermission {
  type DeepLinkConfig (line 135) | pub struct DeepLinkConfig {
  type BackgroundConfig (line 170) | pub struct BackgroundConfig {
  type LocationPermission (line 221) | pub struct LocationPermission {
  type LocationPrecision (line 231) | pub enum LocationPrecision {
  type StoragePermission (line 241) | pub struct StoragePermission {
  type StorageAccess (line 251) | pub enum StorageAccess {
  type RawPermission (line 263) | pub struct RawPermission {
  type IosConfig (line 286) | pub struct IosConfig {
  type WidgetExtensionConfig (line 396) | pub struct WidgetExtensionConfig {
  type IosDocumentType (line 421) | pub struct IosDocumentType {
  type IosTypeIdentifier (line 448) | pub struct IosTypeIdentifier {
  type IosEntitlements (line 470) | pub struct IosEntitlements {
  type IosRawConfig (line 509) | pub struct IosRawConfig {
  type AndroidConfig (line 544) | pub struct AndroidConfig {
  type AndroidSigningConfig (line 663) | pub struct AndroidSigningConfig {
  type AndroidIntentFilter (line 679) | pub struct AndroidIntentFilter {
  type AndroidIntentData (line 699) | pub struct AndroidIntentData {
  type AndroidQueries (line 731) | pub struct AndroidQueries {
  type AndroidQueryIntent (line 743) | pub struct AndroidQueryIntent {
  type AndroidRawConfig (line 757) | pub struct AndroidRawConfig {
  type AndroidApplicationConfig (line 772) | pub struct AndroidApplicationConfig {
  type MacosConfig (line 807) | pub struct MacosConfig {
  type MacosEntitlements (line 935) | pub struct MacosEntitlements {
  type MacosRawConfig (line 1006) | pub struct MacosRawConfig {
  type WindowsConfig (line 1035) | pub struct WindowsConfig {
  type WindowsWixSettings (line 1134) | pub struct WindowsWixSettings {
  type WindowsNsisSettings (line 1203) | pub struct WindowsNsisSettings {
  type WindowsWebviewInstallMode (line 1256) | pub enum WindowsWebviewInstallMode {
  type WindowsSignCommand (line 1280) | pub struct WindowsSignCommand {
  type LinuxConfig (line 1305) | pub struct LinuxConfig {
  type LinuxDebSettings (line 1376) | pub struct LinuxDebSettings {
  function generate_manifest_schema (line 1446) | pub fn generate_manifest_schema() -> schemars::schema::RootSchema {
  function simplify_schema (line 1465) | fn simplify_schema(schema: &mut schemars::schema::SchemaObject) {
  function test_parse_permissions (line 1557) | fn test_parse_permissions() {
  function test_parse_ios_config (line 1577) | fn test_parse_ios_config() {
  function test_parse_android_config (line 1600) | fn test_parse_android_config() {
  function test_parse_deep_links (line 1624) | fn test_parse_deep_links() {
  function test_parse_background_modes (line 1647) | fn test_parse_background_modes() {
  function test_parse_ios_url_schemes_and_background (line 1670) | fn test_parse_ios_url_schemes_and_background() {
  function test_parse_android_intent_filters (line 1699) | fn test_parse_android_intent_filters() {
  function test_parse_macos_url_schemes (line 1733) | fn test_parse_macos_url_schemes() {
  function test_generate_schema (line 1760) | fn test_generate_schema() {

FILE: packages/cli/src/config/serve.rs
  type AddressArguments (line 5) | pub(crate) struct AddressArguments {
    method anonymized (line 16) | fn anonymized(&self) -> serde_json::Value {

FILE: packages/cli/src/config/web.rs
  type WebConfig (line 6) | pub(crate) struct WebConfig {
  method default (line 32) | fn default() -> Self {
  type WasmOptConfig (line 47) | pub(crate) struct WasmOptConfig {
  type WasmOptLevel (line 88) | pub(crate) enum WasmOptLevel {
  type WebAppConfig (line 114) | pub(crate) struct WebAppConfig {
  method default (line 121) | fn default() -> Self {
  type WebProxyConfig (line 130) | pub(crate) struct WebProxyConfig {
  type WebWatcherConfig (line 135) | pub(crate) struct WebWatcherConfig {
  method default (line 147) | fn default() -> Self {
  function watch_path_default (line 156) | fn watch_path_default() -> Vec<PathBuf> {
  type WebResourceConfig (line 161) | pub(crate) struct WebResourceConfig {
  type WebDevResourceConfig (line 168) | pub(crate) struct WebDevResourceConfig {
  type WebHttpsConfig (line 176) | pub(crate) struct WebHttpsConfig {
  function true_bool (line 183) | fn true_bool() -> bool {
  function false_bool (line 187) | fn false_bool() -> bool {
  function default_title (line 191) | pub(crate) fn default_title() -> String {

FILE: packages/cli/src/devcfg.rs
  function should_force_entropy (line 7) | pub(crate) fn should_force_entropy() -> bool {
  function test_installs (line 13) | pub(crate) fn test_installs() -> bool {

FILE: packages/cli/src/error.rs
  type Result (line 1) | pub(crate) type Result<T, E = Error> = std::result::Result<T, E>;
  function log_stacktrace (line 5) | pub fn log_stacktrace(err: &anyhow::Error, padding: usize) -> String {

FILE: packages/cli/src/fastfs.rs
  function compressed_path (line 15) | fn compressed_path(path: &Path) -> Option<PathBuf> {
  function pre_compress_file (line 32) | pub(crate) fn pre_compress_file(path: &Path) -> std::io::Result<()> {
  function pre_compress_folder (line 47) | pub(crate) fn pre_compress_folder(path: &Path, pre_compress: bool) -> st...

FILE: packages/cli/src/logging.rs
  constant LOG_ENV (line 67) | const LOG_ENV: &str = "DIOXUS_LOG";
  constant DX_SRC_FLAG (line 68) | const DX_SRC_FLAG: &str = "dx_src";
  function verbosity_or_default (line 72) | pub fn verbosity_or_default() -> Verbosity {
  function reset_cursor (line 76) | fn reset_cursor() {
  type Anonymized (line 87) | pub(crate) trait Anonymized {
    method anonymized (line 88) | fn anonymized(&self) -> serde_json::Value;
  type TraceController (line 97) | pub struct TraceController {
    method main (line 142) | pub async fn main<F>(run_app: impl FnOnce(Commands, Self) -> F) -> Str...
    method redirect_to_tui (line 354) | pub fn redirect_to_tui(&self) {
    method wait (line 359) | pub(crate) async fn wait(&self) -> ServeUpdate {
    method upload_telemetry_files (line 390) | async fn upload_telemetry_files(self, invoked_event: TelemetryEventDat...
    method upload_to_posthog (line 468) | async fn upload_to_posthog(&self, body: &Vec<serde_json::Value>) -> Re...
    method send_invoked_event (line 495) | async fn send_invoked_event(&self, heartbeat: TelemetryEventData) -> R...
    method telemetry_to_posthog (line 504) | fn telemetry_to_posthog(
    method enroll_reporter (line 581) | fn enroll_reporter() -> Result<Reporter> {
    method finish (line 643) | async fn finish(
    method flush_telemetry_to_disk (line 721) | async fn flush_telemetry_to_disk(&self) -> Result<()> {
    method posthog_capture_endpoint (line 768) | fn posthog_capture_endpoint() -> String {
    method posthog_endpoint (line 775) | fn posthog_endpoint() -> String {
    method to_invoked_event (line 790) | pub(crate) fn to_invoked_event(arg: &crate::Commands) -> TelemetryEven...
    method command_anonymized (line 804) | pub(crate) fn command_anonymized(arg: &crate::Commands) -> (String, se...
    method record_backtrace (line 952) | fn record_backtrace(
    method on_event (line 1042) | fn on_event(
  type CapturedPanicError (line 111) | struct CapturedPanicError {
    method fmt (line 118) | fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
  type SavedLocation (line 129) | struct SavedLocation {
  type CollectVisitor (line 1157) | struct CollectVisitor {
    method pretty (line 1201) | fn pretty(&self) -> String {
    method fields_to_json (line 1215) | fn fields_to_json(&self) -> serde_json::Map<String, serde_json::Value> {
  method record_debug (line 1165) | fn record_debug(&mut self, field: &tracing::field::Field, value: &dyn st...
  method record_error (line 1188) | fn record_error(
  function format_field (line 1224) | fn format_field(field_name: &str, value: &dyn Debug) -> String {
  type TraceMsg (line 1232) | pub struct TraceMsg {
    method text (line 1247) | pub fn text(source: TraceSrc, level: Level, content: String) -> Self {
    method cargo (line 1259) | pub fn cargo(content: Diagnostic) -> Self {
  type TraceContent (line 1241) | pub enum TraceContent {
  type TraceSrc (line 1278) | pub enum TraceSrc {
    method fmt (line 1290) | fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
    method from (line 1296) | fn from(value: String) -> Self {
  method fmt (line 1309) | fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
  type PrettyUptime (line 1325) | pub struct PrettyUptime {
  method default (line 1330) | fn default() -> Self {
  method format_time (line 1338) | fn format_time(&self, w: &mut Writer<'_>) -> std::fmt::Result {
  function run_with_ctrl_c (line 1347) | async fn run_with_ctrl_c(
  type Reporter (line 1375) | pub struct Reporter {

FILE: packages/cli/src/main.rs
  function main (line 44) | async fn main() -> ExitCode {

FILE: packages/cli/src/platform.rs
  type Platform (line 12) | pub(crate) enum Platform {
    method from_identifier (line 51) | fn from_identifier(identifier: &str) -> std::result::Result<Self, clap...
  method augment_args_for_update (line 84) | fn augment_args_for_update(cmd: clap::Command) -> clap::Command {
  method augment_args (line 88) | fn augment_args(cmd: clap::Command) -> clap::Command {
  method from_arg_matches (line 123) | fn from_arg_matches(matches: &ArgMatches) -> Result<Self, clap::Error> {
  method update_from_arg_matches (line 133) | fn update_from_arg_matches(&mut self, matches: &ArgMatches) -> Result<()...
  type Renderer (line 153) | pub(crate) enum Renderer {
    method feature_name (line 175) | pub(crate) fn feature_name(&self, target: &Triple) -> &str {
    method autodetect_from_cargo_feature (line 188) | pub(crate) fn autodetect_from_cargo_feature(feature: &str) -> Option<S...
  type UnknownRendererError (line 201) | pub(crate) struct UnknownRendererError;
    method fmt (line 206) | fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
  type Err (line 212) | type Err = UnknownRendererError;
  method from_str (line 214) | fn from_str(s: &str) -> Result<Self, Self::Err> {
  method fmt (line 227) | fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
  type BundleFormat (line 241) | pub(crate) enum BundleFormat {
    method host (line 279) | pub(crate) fn host() -> Self {
    method build_folder_name (line 294) | pub(crate) fn build_folder_name(&self) -> &'static str {
    method profile_name (line 306) | pub(crate) fn profile_name(&self, release: bool) -> String {
    method expected_name (line 320) | pub(crate) fn expected_name(&self) -> &'static str {
  type UnknownBundleFormatError (line 334) | pub(crate) struct UnknownBundleFormatError;
    method fmt (line 339) | fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
  type Err (line 345) | type Err = UnknownBundleFormatError;
  method from_str (line 347) | fn from_str(s: &str) -> Result<Self, Self::Err> {
  method fmt (line 362) | fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {

FILE: packages/cli/src/rustcwrapper.rs
  constant DX_RUSTC_WRAPPER_ENV_VAR (line 12) | pub const DX_RUSTC_WRAPPER_ENV_VAR: &str = "DX_RUSTC";
  function is_wrapping_rustc (line 22) | pub fn is_wrapping_rustc() -> bool {
  type RustcArgs (line 27) | pub struct RustcArgs {
  function has_linking_args (line 35) | fn has_linking_args() -> bool {
  function run_rustc (line 71) | pub fn run_rustc() -> ExitCode {

FILE: packages/cli/src/serve/ansi_buffer.rs
  function ansi_string_to_line (line 8) | pub fn ansi_string_to_line(line: Line) -> String {
  function write_cell_style (line 31) | fn write_cell_style(f: &mut impl Write, modifier: Modifier, fg: Color, b...

FILE: packages/cli/src/serve/mod.rs
  function serve_all (line 42) | pub(crate) async fn serve_all(args: ServeArgs, tracer: &TraceController)...

FILE: packages/cli/src/serve/output.rs
  constant TICK_RATE_MS (line 33) | const TICK_RATE_MS: u64 = 100;
  constant VIEWPORT_MAX_WIDTH (line 34) | const VIEWPORT_MAX_WIDTH: u16 = 90;
  constant VIEWPORT_HEIGHT_SMALL (line 35) | const VIEWPORT_HEIGHT_SMALL: u16 = 5;
  constant VIEWPORT_HEIGHT_BIG (line 36) | const VIEWPORT_HEIGHT_BIG: u16 = 14;
  type Output (line 46) | pub struct Output {
    method start (line 79) | pub(crate) async fn start(interactive: bool) -> crate::Result<Self> {
    method startup (line 109) | fn startup(&mut self) -> Result<()> {
    method enable_raw_mode (line 143) | fn enable_raw_mode() -> Result<()> {
    method remote_shutdown (line 169) | pub(crate) fn remote_shutdown(interactive: bool) -> Result<()> {
    method wait (line 184) | pub(crate) async fn wait(&mut self) -> ServeUpdate {
    method handle_input (line 218) | fn handle_input(&mut self, input: Event) -> Result<Option<ServeUpdate>> {
    method handle_keypress (line 225) | fn handle_keypress(&mut self, key: KeyEvent) -> Result<Option<ServeUpd...
    method push_log (line 324) | pub fn push_log(&mut self, message: TraceMsg) {
    method push_cargo_log (line 328) | pub fn push_cargo_log(&mut self, message: Diagnostic) {
    method push_stdio (line 339) | pub fn push_stdio(&mut self, bundle: BundleFormat, msg: String, level:...
    method push_ws_message (line 380) | pub fn push_ws_message(&mut self, bundle: BundleFormat, message: &axum...
    method new_build_update (line 428) | pub(crate) fn new_build_update(&mut self, update: &BuilderUpdate) {
    method render (line 440) | pub fn render(&mut self, runner: &AppServer, server: &WebServer) {
    method render_frame (line 463) | fn render_frame(&self, frame: &mut Frame, state: RenderState) {
    method render_body_title (line 481) | fn render_body_title(&self, frame: &mut Frame<'_>, area: Rect, _state:...
    method render_body (line 496) | fn render_body(&self, frame: &mut Frame<'_>, area: Rect, state: Render...
    method render_gauges (line 518) | fn render_gauges(&self, frame: &mut Frame<'_>, area: Rect, state: Rend...
    method render_single_gauge (line 628) | fn render_single_gauge(
    method render_stats (line 700) | fn render_stats(&self, frame: &mut Frame<'_>, area: Rect, state: Rende...
    method render_feature_list (line 754) | fn render_feature_list(&self, frame: &mut Frame<'_>, area: Rect, state...
    method render_more_modal (line 779) | fn render_more_modal(&self, frame: &mut Frame<'_>, area: Rect, state: ...
    method render_borders (line 887) | fn render_borders(&self, frame: &mut Frame, area: Rect) {
    method render_log (line 916) | fn render_log(
    method viewport_current_height (line 1012) | fn viewport_current_height(&self) -> u16 {
    method tracemsg_to_ansi_string (line 1019) | fn tracemsg_to_ansi_string(log: TraceMsg) -> Vec<String> {
    method drop (line 1100) | fn drop(&mut self) {
  type RenderState (line 73) | struct RenderState<'a> {

FILE: packages/cli/src/serve/proxy.rs
  function send_with_retry (line 23) | async fn send_with_retry(
  function add_proxy (line 82) | pub(crate) fn add_proxy(mut router: Router, proxy: &WebProxyConfig) -> R...
  function proxy_to (line 118) | pub(crate) fn proxy_to(
  function handle_proxy_error (line 190) | pub(crate) fn handle_proxy_error(e: Error) -> axum::http::Response<axum:...
  function setup_servers (line 207) | async fn setup_servers(mut config: WebProxyConfig) -> String {
  function test_proxy_requests (line 247) | async fn test_proxy_requests(path: String) {
  function add_proxy (line 291) | async fn add_proxy() {
  function add_proxy_trailing_slash (line 296) | async fn add_proxy_trailing_slash() {

FILE: packages/cli/src/serve/proxy_ws.rs
  function proxy_websocket (line 15) | pub(crate) async fn proxy_websocket(
  function into_proxied_request (line 39) | fn into_proxied_request(
  type WsError (line 53) | enum WsError {
  function handle_ws_connection (line 66) | async fn handle_ws_connection(
  type IntoMsg (line 96) | trait IntoMsg<T> {
    method into_msg (line 98) | fn into_msg(self) -> Result<T, Self::Error>;
  type Error (line 102) | type Error = std::convert::Infallible;
  method into_msg (line 103) | fn into_msg(self) -> Result<ServerMessage, Self::Error> {
  type UnexpectedRawFrame (line 118) | struct UnexpectedRawFrame;
  type Error (line 120) | type Error = UnexpectedRawFrame;
  method into_msg (line 121) | fn into_msg(self) -> Result<ClientMessage, Self::Error> {

FILE: packages/cli/src/serve/runner.rs
  type AppServer (line 42) | pub(crate) struct AppServer {
    method new (line 97) | pub(crate) async fn new(args: ServeArgs) -> Result<Self> {
    method initialize (line 235) | pub(crate) fn initialize(&mut self) {
    method take_pending_file_changes (line 249) | pub(crate) fn take_pending_file_changes(&mut self) -> Vec<PathBuf> {
    method rebuild_ssg (line 253) | pub(crate) async fn rebuild_ssg(&mut self, devserver: &WebServer) {
    method wait (line 274) | pub(crate) async fn wait(&mut self) -> ServeUpdate {
    method new_build_update (line 343) | pub(crate) async fn new_build_update(&mut self, update: &BuilderUpdate...
    method handle_file_change (line 355) | pub(crate) async fn handle_file_change(&mut self, files: &[PathBuf], s...
    method open (line 582) | pub(crate) async fn open(
    method open_all (line 642) | pub(crate) async fn open_all(
    method shutdown (line 698) | pub(crate) async fn shutdown(&mut self) -> Result<()> {
    method full_rebuild (line 730) | pub(crate) async fn full_rebuild(&mut self) {
    method hotpatch (line 747) | pub(crate) async fn hotpatch(
    method get_build (line 816) | pub(crate) fn get_build(&self, id: BuildId) -> Option<&AppBuilder> {
    method client (line 824) | pub(crate) fn client(&self) -> &AppBuilder {
    method app_name (line 829) | pub(crate) fn app_name(&self) -> &str {
    method applied_hot_reload_changes (line 834) | pub(crate) fn applied_hot_reload_changes(&mut self, build: BuildId) ->...
    method clear_hot_reload_changes (line 856) | pub(crate) fn clear_hot_reload_changes(&mut self) {
    method clear_patches (line 860) | pub(crate) fn clear_patches(&mut self) {
    method client_connected (line 867) | pub(crate) async fn client_connected(
    method add_hot_reload_message (line 919) | fn add_hot_reload_message(&mut self, msg: &HotReloadMsg) {
    method load_rsx_filemap (line 952) | fn load_rsx_filemap(&mut self) {
    method fill_filemap_from_krate (line 975) | fn fill_filemap_from_krate(&mut self, crate_dir: PathBuf) {
    method clear_cached_rsx (line 1007) | fn clear_cached_rsx(&mut self) {
    method watch_filesystem (line 1016) | fn watch_filesystem(&mut self) {
    method watch_paths (line 1058) | fn watch_paths(&self, crate_dir: PathBuf, crate_package: NodeId) -> Ve...
    method local_dependencies (line 1111) | fn local_dependencies(&self, crate_package: NodeId) -> Vec<PathBuf> {
    method all_watched_crates (line 1144) | fn all_watched_crates(&self) -> Vec<PathBuf> {
    method workspace_dep_chain (line 1188) | pub(crate) fn workspace_dep_chain(&self, changed_crate: &str) -> Vec<S...
    method order_changed_crates (line 1280) | fn order_changed_crates(&self, files: &[PathBuf]) -> Vec<String> {
    method file_to_workspace_crate (line 1304) | fn file_to_workspace_crate(&self, file: &Path) -> Option<String> {
    method is_fullstack (line 1328) | pub(crate) fn is_fullstack(&self) -> bool {
    method server_compile_progress (line 1333) | pub(crate) fn server_compile_progress(&self) -> f64 {
    method open_debugger (line 1341) | pub(crate) async fn open_debugger(&mut self, dev: &WebServer, build: B...
  type CachedFile (line 89) | pub(crate) struct CachedFile {
  function get_available_port (line 1366) | fn get_available_port(address: IpAddr, prefer: Option<u16>) -> Option<u1...
  function create_notify_watcher (line 1380) | fn create_notify_watcher(
  function handle_notify_error (line 1427) | fn handle_notify_error(err: notify::Error) {
  function is_wsl (line 1445) | fn is_wsl() -> bool {
  function format_duration_ms (line 1474) | fn format_duration_ms(d: Duration) -> String {

FILE: packages/cli/src/serve/server.rs
  type WebServer (line 55) | pub(crate) struct WebServer {
    constant SELF_IP (line 77) | pub const SELF_IP: IpAddr = IpAddr::V4(Ipv4Addr::new(127, 0, 0, 1));
    method start (line 84) | pub(crate) fn start(runner: &AppServer) -> Result<Self> {
    method wait (line 137) | pub(crate) async fn wait(&mut self) -> ServeUpdate {
    method shutdown (line 191) | pub(crate) async fn shutdown(&mut self) {
    method send_build_status (line 199) | async fn send_build_status(&mut self) {
    method start_build (line 212) | pub(crate) async fn start_build(&mut self) {
    method new_build_update (line 221) | pub(crate) async fn new_build_update(&mut self, update: &BuilderUpdate) {
    method has_hotreload_sockets (line 271) | pub(crate) fn has_hotreload_sockets(&self) -> bool {
    method send_hotreload (line 276) | pub(crate) async fn send_hotreload(&mut self, reload: HotReloadMsg) {
    method send_patch (line 303) | pub(crate) async fn send_patch(
    method send_patch_start (line 323) | pub(crate) async fn send_patch_start(&mut self) {
    method send_reload_start (line 329) | pub(crate) async fn send_reload_start(&mut self) {
    method send_reload_failed (line 335) | pub(crate) async fn send_reload_failed(&mut self) {
    method send_reload_command (line 341) | pub(crate) async fn send_reload_command(&mut self) {
    method send_shutdown (line 348) | pub(crate) async fn send_shutdown(&mut self) {
    method send_devserver_message_to_all (line 354) | async fn send_devserver_message_to_all(&mut self, msg: DevserverMsg) {
    method set_ready (line 364) | async fn set_ready(&mut self) {
    method devserver_address (line 374) | pub fn devserver_address(&self) -> SocketAddr {
    method proxied_server_address (line 379) | pub fn proxied_server_address(&self) -> Option<SocketAddr> {
    method server_address (line 384) | pub fn server_address(&self) -> Option<SocketAddr> {
    method displayed_address (line 394) | pub fn displayed_address(&self) -> Option<SocketAddr> {
  type ConnectedWsClient (line 69) | pub(crate) struct ConnectedWsClient {
  function devserver_mainloop (line 408) | async fn devserver_mainloop(
  function build_devserver_router (line 447) | fn build_devserver_router(
  function build_serve_dir (line 549) | fn build_serve_dir(runner: &AppServer) -> axum::routing::MethodRouter {
  function no_cache (line 594) | fn no_cache(
  function insert_no_cache_headers (line 634) | pub(crate) fn insert_no_cache_headers(headers: &mut HeaderMap) {
  function get_rustls (line 640) | async fn get_rustls(web_config: &WebHttpsConfig) -> Result<(String, Stri...
  function build_status_middleware (line 704) | async fn build_status_middleware(
  type SharedStatus (line 735) | struct SharedStatus(Arc<RwLock<Status>>);
    method new (line 755) | fn new(status: Status) -> Self {
    method new_with_starting_build (line 759) | fn new_with_starting_build() -> Self {
    method set (line 766) | fn set(&self, status: Status) {
    method get (line 770) | fn get(&self) -> Status {
    method send_to (line 774) | async fn send_to(&self, socket: &mut WebSocket) -> Result<(), axum::Er...
  type Status (line 739) | enum Status {

FILE: packages/cli/src/serve/update.rs
  type ServeUpdate (line 9) | pub(crate) enum ServeUpdate {

FILE: packages/cli/src/settings.rs
  type CliSettings (line 16) | pub(crate) struct CliSettings {
    method load (line 36) | pub(crate) fn load() -> Arc<Self> {
    method global_or_default (line 42) | pub fn global_or_default() -> Self {
    method get_settings_path (line 47) | pub(crate) fn get_settings_path() -> PathBuf {
    method from_global (line 52) | pub(crate) fn from_global() -> Option<Self> {
    method save (line 75) | pub(crate) fn save(&self) -> Result<()> {
    method modify_settings (line 106) | pub(crate) fn modify_settings(with: impl FnOnce(&mut CliSettings)) -> ...
    method prefer_no_downloads (line 116) | pub(crate) fn prefer_no_downloads() -> bool {
    method telemetry_disabled (line 129) | pub(crate) fn telemetry_disabled() -> bool {
    method is_ci (line 153) | pub(crate) fn is_ci() -> bool {
  function default_wsl_file_poll_interval (line 172) | fn default_wsl_file_poll_interval() -> Option<u16> {

FILE: packages/cli/src/tailwind.rs
  type TailwindCli (line 10) | pub(crate) struct TailwindCli {
    constant V3_TAG (line 15) | const V3_TAG: &'static str = "v3.4.15";
    constant V4_TAG (line 16) | const V4_TAG: &'static str = "v4.1.5";
    method new (line 18) | pub(crate) fn new(version: String) -> Self {
    method run_once (line 22) | pub(crate) async fn run_once(
    method serve (line 51) | pub(crate) fn serve(
    method autodetect (line 84) | pub(crate) fn autodetect(manifest_dir: &Path, input_path: &Option<Path...
    method v4 (line 106) | pub(crate) fn v4() -> Self {
    method v3 (line 110) | pub(crate) fn v3() -> Self {
    method run (line 114) | pub(crate) fn run(
    method get_binary_path (line 160) | pub fn get_binary_path(&self) -> anyhow::Result<PathBuf> {
    method installed_bin_name (line 170) | fn installed_bin_name(&self) -> String {
    method install_github (line 178) | async fn install_github(&self) -> anyhow::Result<()> {
    method downloaded_bin_name (line 214) | fn downloaded_bin_name(&self) -> Option<String> {
    method install_dir (line 234) | fn install_dir(&self) -> Result<PathBuf> {
    method git_install_url (line 239) | fn git_install_url(&self) -> Option<String> {

FILE: packages/cli/src/test_harnesses.rs
  function run_harness (line 16) | async fn run_harness() {
  function test_harnesses (line 21) | async fn test_harnesses() {
  type TestHarnessBuilder (line 284) | struct TestHarnessBuilder {
    method new (line 298) | fn new(name: &str) -> Self {
    method deps (line 308) | fn deps(mut self, dependencies: impl Into<String>) -> Self {
    method fetr (line 314) | fn fetr(mut self, features: impl Into<String>) -> Self {
    method asrt (line 320) | fn asrt<F>(
    method build (line 336) | fn build(&self, harness_dir: &Path) {
    method run (line 384) | async fn run(harnesses: Vec<Self>) {
    method host_ios_triple_sim (line 458) | fn host_ios_triple_sim() -> Triple {
  type TestHarnessTestCase (line 291) | struct TestHarnessTestCase {

FILE: packages/cli/src/wasm_bindgen.rs
  type WasmBindgen (line 9) | pub(crate) struct WasmBindgen {
    method new (line 24) | pub(crate) fn new(version: &str) -> Self {
    method input_path (line 40) | pub(crate) fn input_path(self, input_path: &Path) -> Self {
    method out_dir (line 47) | pub(crate) fn out_dir(self, out_dir: &Path) -> Self {
    method out_name (line 54) | pub(crate) fn out_name(self, out_name: &str) -> Self {
    method target (line 61) | pub(crate) fn target(self, target: &str) -> Self {
    method debug (line 68) | pub(crate) fn debug(self, debug: bool) -> Self {
    method keep_debug (line 72) | pub(crate) fn keep_debug(self, keep_debug: bool) -> Self {
    method demangle (line 76) | pub(crate) fn demangle(self, demangle: bool) -> Self {
    method remove_name_section (line 80) | pub(crate) fn remove_name_section(self, remove_name_section: bool) -> ...
    method remove_producers_section (line 87) | pub(crate) fn remove_producers_section(self, remove_producers_section:...
    method keep_lld_sections (line 94) | pub(crate) fn keep_lld_sections(self, keep_lld_sections: bool) -> Self {
    method run (line 102) | pub(crate) async fn run(&self) -> Result<std::process::Output> {
    method verify_install (line 186) | pub async fn verify_install(version: &str) -> anyhow::Result<()> {
    method install (line 203) | async fn install(&self) -> anyhow::Result<()> {
    method install_github (line 242) | async fn install_github(&self) -> anyhow::Result<()> {
    method install_binstall (line 280) | async fn install_binstall(&self) -> anyhow::Result<()> {
    method install_cargo (line 311) | async fn install_cargo(&self) -> anyhow::Result<()> {
    method verify_local_install (line 347) | async fn verify_local_install(&self) -> anyhow::Result<()> {
    method verify_managed_install (line 375) | async fn verify_managed_install(&self) -> anyhow::Result<()> {
    method get_binary_path (line 391) | pub fn get_binary_path(&self) -> anyhow::Result<PathBuf> {
    method install_dir (line 402) | fn install_dir(&self) -> anyhow::Result<PathBuf> {
    method installed_bin_name (line 408) | fn installed_bin_name(&self) -> String {
    method cargo_bin_name (line 416) | fn cargo_bin_name(&self) -> String {
    method downloaded_bin_name (line 420) | fn downloaded_bin_name(&self) -> &'static str {
    method git_install_url (line 428) | fn git_install_url(&self) -> Option<String> {
  constant VERSION (line 453) | const VERSION: &str = "0.2.99";
  function test_github_install (line 457) | async fn test_github_install() {
  function test_cargo_install (line 470) | async fn test_cargo_install() {
  function test_binstall_install (line 484) | async fn test_binstall_install() {
  function test_verify_install (line 496) | async fn test_verify_install() {
  function verify_installation (line 501) | async fn verify_installation(binary: &WasmBindgen) {
  function reset_test (line 512) | async fn reset_test() {

FILE: packages/cli/src/wasm_opt.rs
  function write_wasm (line 10) | pub async fn write_wasm(bytes: &[u8], output_path: &Path, cfg: &WasmOptC...
  function optimize (line 16) | pub async fn optimize(input_path: &Path, output_path: &Path, cfg: &WasmO...
  type WasmOpt (line 28) | struct WasmOpt {
    method new (line 37) | pub async fn new(
    method build_command (line 53) | fn build_command(&self) -> tokio::process::Command {
    method optimize (line 108) | pub async fn optimize(&self) -> Result<()> {
  function find_latest_wasm_opt_download_url (line 134) | async fn find_latest_wasm_opt_download_url() -> anyhow::Result<String> {
  function get_binary_path (line 205) | pub async fn get_binary_path() -> anyhow::Result<PathBuf> {
  function installed_location (line 228) | pub fn installed_location() -> Option<PathBuf> {
  function install_dir (line 247) | fn install_dir() -> PathBuf {
  function installed_bin_name (line 251) | fn installed_bin_name() -> &'static str {
  function installed_bin_path (line 259) | fn installed_bin_path(install_dir: &Path) -> PathBuf {
  function install_github (line 264) | async fn install_github(install_dir: &Path) -> anyhow::Result<()> {

FILE: packages/cli/src/workspace.rs
  type Workspace (line 15) | pub struct Workspace {
    method current (line 28) | pub async fn current() -> Result<Arc<Workspace>> {
    method android_tools (line 139) | pub fn android_tools(&self) -> Result<Arc<AndroidTools>> {
    method is_release_profile (line 146) | pub fn is_release_profile(&self, profile: &str) -> bool {
    method check_dioxus_version_against_cli (line 177) | pub fn check_dioxus_version_against_cli(&self) {
    method dioxus_versions (line 212) | pub fn dioxus_versions(&self) -> Vec<Version> {
    method rust_lld (line 225) | pub fn rust_lld(&self) -> PathBuf {
    method cc (line 238) | pub fn cc(&self) -> PathBuf {
    method lld_link (line 243) | pub fn lld_link(&self) -> PathBuf {
    method wasm_ld (line 247) | pub fn wasm_ld(&self) -> PathBuf {
    method select_ranlib (line 251) | pub fn select_ranlib() -> Option<PathBuf> {
    method wasm_bindgen_version (line 259) | pub fn wasm_bindgen_version(&self) -> Option<String> {
    method gcc_ld_dir (line 268) | fn gcc_ld_dir(&self) -> PathBuf {
    method rustc_objcopy (line 279) | pub fn rustc_objcopy(&self) -> PathBuf {
    method rustc_objcopy_dylib_path (line 289) | pub fn rustc_objcopy_dylib_path(&self) -> PathBuf {
    method find_main_package (line 294) | pub fn find_main_package(&self, package: Option<String>) -> Result<Nod...
    method load_dioxus_config (line 405) | pub fn load_dioxus_config(
    method workspace_gitignore (line 479) | pub fn workspace_gitignore(workspace_dir: &Path) -> Gitignore {
    method ignore_for_krate (line 492) | pub fn ignore_for_krate(&self, path: &Path) -> ignore::gitignore::Giti...
    method default_ignore_list (line 502) | pub fn default_ignore_list() -> Vec<&'static str> {
    method workspace_root (line 517) | pub(crate) fn workspace_root(&self) -> PathBuf {
    method crate_root_from_path (line 524) | pub(crate) fn crate_root_from_path() -> Result<PathBuf> {
    method get_xcode_path (line 556) | pub async fn get_xcode_path() -> Option<PathBuf> {
    method get_rustc_sysroot (line 566) | pub async fn get_rustc_sysroot() -> Result<String, anyhow::Error> {
    method get_rustc_version (line 576) | pub async fn get_rustc_version() -> Result<String> {
    method path_to_dx (line 587) | pub(crate) fn path_to_dx() -> Result<PathBuf> {
    method dioxus_data_dir (line 596) | pub(crate) fn dioxus_data_dir() -> PathBuf {
    method global_settings_file (line 616) | pub(crate) fn global_settings_file() -> PathBuf {
    method component_cache_dir (line 621) | pub(crate) fn component_cache_dir() -> PathBuf {
    method component_cache_path (line 626) | pub(crate) fn component_cache_path(git: &str, rev: Option<&str>) -> Pa...
    method fmt (line 640) | fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {

FILE: packages/component-manifest/src/lib.rs
  type Component (line 10) | pub struct Component {
  type ComponentDependency (line 38) | pub enum ComponentDependency {
  type CargoDependency (line 51) | pub enum CargoDependency {
    method add_command (line 70) | pub fn add_command(&self) -> Command {
    method name (line 110) | pub fn name(&self) -> &str {
  function component_manifest_schema (line 119) | pub fn component_manifest_schema() -> Schema {

FILE: packages/const-serialize-macro/src/lib.rs
  function add_bounds (line 6) | fn add_bounds(where_clause: &mut Option<WhereClause>, generics: &Generic...
  function derive_parse (line 23) | pub fn derive_parse(raw_input: TokenStream) -> TokenStream {

FILE: packages/const-serialize/src/array.rs
  type ArrayLayout (line 5) | pub struct ArrayLayout {
    method new (line 12) | pub const fn new(len: usize, item_layout: &'static Layout) -> Self {
  constant MEMORY_LAYOUT (line 18) | const MEMORY_LAYOUT: Layout = Layout::Array(ArrayLayout {
  function serialize_const_array (line 25) | pub(crate) const unsafe fn serialize_const_array(
  function deserialize_const_array (line 42) | pub(crate) const fn deserialize_const_array<'a>(

FILE: packages/const-serialize/src/cbor.rs
  type MajorType (line 27) | enum MajorType {
    constant MASK (line 48) | const MASK: u8 = 0b0001_1111;
    method from_byte (line 50) | const fn from_byte(byte: u8) -> Self {
  function item_length (line 66) | const fn item_length(bytes: &[u8]) -> Result<usize, ()> {
  function take_number (line 121) | pub(crate) const fn take_number(bytes: &[u8]) -> Result<(i64, &[u8]), ()> {
  function write_number (line 145) | pub(crate) const fn write_number<const MAX_SIZE: usize>(
  function write_major_type_and_u64 (line 158) | const fn write_major_type_and_u64<const MAX_SIZE: usize>(
  function log2_bytes_for_number (line 191) | const fn log2_bytes_for_number(number: u64) -> u8 {
  function take_bytes (line 203) | pub(crate) const fn take_bytes(bytes: &[u8]) -> Result<(&[u8], &[u8]), (...
  function write_bytes (line 217) | pub(crate) const fn write_bytes<const MAX_SIZE: usize>(
  function take_str (line 226) | pub(crate) const fn take_str(bytes: &[u8]) -> Result<(&str, &[u8]), ()> {
  function write_str (line 246) | pub(crate) const fn write_str<const MAX_SIZE: usize>(
  function take_array (line 256) | pub(crate) const fn take_array(bytes: &[u8]) -> Result<(usize, &[u8]), (...
  function write_array (line 273) | pub(crate) const fn write_array<const MAX_SIZE: usize>(
  function write_map (line 281) | pub(crate) const fn write_map<const MAX_SIZE: usize>(
  function write_map_key (line 290) | pub(crate) const fn write_map_key<const MAX_SIZE: usize>(
  function take_map (line 298) | pub(crate) const fn take_map<'a>(bytes: &'a [u8]) -> Result<(MapRef<'a>,...
  type MapRef (line 328) | pub(crate) struct MapRef<'a> {
  function new (line 337) | const fn new(bytes: &'a [u8], len: usize) -> Self {
  function find (line 342) | pub(crate) const fn find(&self, key: &str) -> Result<Option<&[u8]>, ()> {
  function str_eq (line 367) | pub(crate) const fn str_eq(a: &str, b: &str) -> bool {
  function take_len_from (line 386) | const fn take_len_from(rest: &[u8], additional_information: u8) -> Resul...
  function take_bytes_from (line 403) | pub(crate) const fn take_bytes_from(
  function get_length_of_number (line 417) | const fn get_length_of_number(additional_information: u8) -> u8 {
  function grab_u64 (line 426) | const fn grab_u64(rest: &[u8], additional_information: u8) -> Result<(u6...
  function grab_u64_with_byte_length (line 435) | const fn grab_u64_with_byte_length(
  function test_parse_byte (line 463) | fn test_parse_byte() {
  function test_byte_roundtrip (line 481) | fn test_byte_roundtrip() {
  function test_number_roundtrip (line 496) | fn test_number_roundtrip() {
  function test_bytes_roundtrip (line 506) | fn test_bytes_roundtrip() {
  function test_array_roundtrip (line 517) | fn test_array_roundtrip() {
  function test_map_roundtrip (line 534) | fn test_map_roundtrip() {
  function test_item_length_str (line 563) | fn test_item_length_str() {
  function test_item_length_map (line 578) | fn test_item_length_map() {

FILE: packages/const-serialize/src/const_buffers.rs
  type ConstReadBuffer (line 4) | pub struct ConstReadBuffer<'a> {
  function new (line 11) | pub const fn new(memory: &'a [u8]) -> Self {
  function get (line 20) | pub const fn get(mut self) -> Option<(Self, u8)> {
  function as_ref (line 30) | pub const fn as_ref(&self) -> &[u8] {
  function remaining (line 35) | pub const fn remaining(&self) -> &[u8] {

FILE: packages/const-serialize/src/const_vec.rs
  constant DEFAULT_MAX_SIZE (line 6) | const DEFAULT_MAX_SIZE: usize = 2usize.pow(10);
  type ConstVec (line 27) | pub struct ConstVec<T, const MAX_SIZE: usize = DEFAULT_MAX_SIZE> {
  method clone (line 33) | fn clone(&self) -> Self {
  method eq (line 45) | fn eq(&self, other: &Self) -> bool {
  method hash (line 51) | fn hash<H: std::hash::Hasher>(&self, state: &mut H) {
  method default (line 57) | fn default() -> Self {
  method fmt (line 63) | fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
  function new (line 73) | pub const fn new() -> Self {
  function new_with_max_size (line 86) | pub const fn new_with_max_size() -> Self {
  function push (line 102) | pub const fn push(mut self, value: T) -> Self {
  function extend (line 117) | pub const fn extend(mut self, other: &[T]) -> Self
  function get (line 138) | pub const fn get(&self, index: usize) -> Option<&T> {
  function len (line 155) | pub const fn len(&self) -> usize {
  function is_empty (line 169) | pub const fn is_empty(&self) -> bool {
  function as_ref (line 182) | pub const fn as_ref(&self) -> &[T] {
  function swap (line 199) | pub const fn swap(mut self, first: usize, second: usize) -> Self
  function pop (line 224) | pub const fn pop(mut self) -> (Self, Option<T>)
  function remove (line 252) | pub const fn remove(mut self, index: usize) -> (Self, Option<T>)
  function set (line 282) | pub const fn set(mut self, index: usize, value: T) -> Self {
  function into_parts (line 290) | pub(crate) const fn into_parts(self) -> ([MaybeUninit<T>; MAX_SIZE], usi...
  function split_at (line 307) | pub const fn split_at(&self, index: usize) -> (Self, Self)
  function read (line 341) | pub const fn read(&self) -> ConstReadBuffer<'_> {
  function test_const_vec (line 347) | fn test_const_vec() {
  function test_const_vec_len (line 366) | fn test_const_vec_len() {
  function test_const_vec_get (line 377) | fn test_const_vec_get() {
  function test_const_vec_swap (line 390) | fn test_const_vec_swap() {
  function test_const_vec_remove (line 406) | fn test_const_vec_remove() {
  function test_const_vec_extend (line 425) | fn test_const_vec_extend() {

FILE: packages/const-serialize/src/enum.rs
  function serialize_const_enum (line 4) | pub(crate) const unsafe fn serialize_const_enum(
  type EnumLayout (line 32) | pub struct EnumLayout {
    method new (line 41) | pub const fn new(
  type EnumVariant (line 73) | pub struct EnumVariant {
    method new (line 83) | pub const fn new(name: &'static str, tag: u32, data: StructLayout, ali...
  function deserialize_const_enum (line 94) | pub(crate) const fn deserialize_const_enum<'a>(

FILE: packages/const-serialize/src/lib.rs
  type Layout (line 33) | pub enum Layout {
    method size (line 48) | pub const fn size(&self) -> usize {
  type SerializeConst (line 63) | pub unsafe trait SerializeConst: Sized {
    constant MEMORY_LAYOUT (line 65) | const MEMORY_LAYOUT: Layout;
    constant _ASSERT (line 67) | const _ASSERT: () = assert!(Self::MEMORY_LAYOUT.size() == std::mem::si...
  function serialize_const_ptr (line 71) | const unsafe fn serialize_const_ptr(
  function serialize_const (line 108) | pub const fn serialize_const<T: SerializeConst>(data: &T, to: ConstVec<u...
  function deserialize_const_ptr (line 115) | const fn deserialize_const_ptr<'a>(
  function deserialize_const_raw (line 171) | pub const unsafe fn deserialize_const_raw<const N: usize, T: SerializeCo...
  function serialize_eq (line 187) | pub const fn serialize_eq<T: SerializeConst>(first: &T, second: &T) -> b...

FILE: packages/const-serialize/src/list.rs
  type ListLayout (line 5) | pub struct ListLayout {
    method new (line 20) | pub const fn new(
  function serialize_const_list (line 38) | pub(crate) const unsafe fn serialize_const_list(
  function deserialize_const_list (line 68) | pub(crate) const fn deserialize_const_list<'a>(

FILE: packages/const-serialize/src/primitive.rs
  type PrimitiveLayout (line 6) | pub struct PrimitiveLayout {
    method new (line 12) | pub const fn new(size: usize) -> Self {
    method read (line 20) | pub const unsafe fn read(self, byte_ptr: *const u8) -> u32 {
    method write (line 41) | pub const fn write(self, value: u32, out: &mut [MaybeUninit<u8>]) {
  function serialize_const_primitive (line 74) | pub(crate) const unsafe fn serialize_const_primitive(
  function deserialize_const_primitive (line 100) | pub(crate) const fn deserialize_const_primitive<'a>(

FILE: packages/const-serialize/src/str.rs
  constant MAX_STR_SIZE (line 4) | const MAX_STR_SIZE: usize = 256;
  type ConstStr (line 8) | pub struct ConstStr {
    method deserialize (line 37) | fn deserialize<D>(deserializer: D) -> Result<Self, D::Error>
    constant MEMORY_LAYOUT (line 66) | const MEMORY_LAYOUT: const_serialize_07::Layout =
    method new (line 91) | pub const fn new(s: &str) -> Self {
    method bytes (line 111) | const fn bytes(&self) -> &[u8] {
    method as_str (line 120) | pub const fn as_str(&self) -> &str {
    method len (line 131) | pub const fn len(&self) -> usize {
    method is_empty (line 136) | pub const fn is_empty(&self) -> bool {
    method push (line 141) | pub const fn push(self, byte: char) -> Self {
    method push_str (line 152) | pub const fn push_str(self, str: &str) -> Self {
    method split_at (line 172) | pub const fn split_at(self, index: usize) -> (Self, Self) {
    method rsplit_once (line 190) | pub const fn rsplit_once(&self, char: char) -> Option<(Self, Self)> {
    method split_once (line 240) | pub const fn split_once(&self, char: char) -> Option<(Self, Self)> {
  method fmt (line 14) | fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
  method serialize (line 28) | fn serialize<S>(&self, serializer: S) -> Result<S::Ok, S::Error>
  constant MEMORY_LAYOUT (line 48) | const MEMORY_LAYOUT: Layout = Layout::List(ListLayout::new(
  method eq (line 289) | fn eq(&self, other: &Self) -> bool {
  method partial_cmp (line 297) | fn partial_cmp(&self, other: &Self) -> Option<std::cmp::Ordering> {
  method cmp (line 303) | fn cmp(&self, other: &Self) -> std::cmp::Ordering {
  method hash (line 309) | fn hash<H: std::hash::Hasher>(&self, state: &mut H) {
  function test_rsplit_once (line 315) | fn test_rsplit_once() {
  constant CONTINUED_CHAR_MASK (line 352) | const CONTINUED_CHAR_MASK: u8 = 0b10000000;
  constant BYTE_CHAR_BOUNDARIES (line 353) | const BYTE_CHAR_BOUNDARIES: [u8; 4] = [0b00000000, 0b11000000, 0b1110000...
  function char_to_bytes (line 356) | const fn char_to_bytes(char: char) -> ([u8; 4], usize) {
  function fuzz_char_to_bytes (line 387) | fn fuzz_char_to_bytes() {
  function utf8_char_boundary_to_char_len (line 397) | const fn utf8_char_boundary_to_char_len(byte: u8) -> Option<u8> {
  function fuzz_utf8_byte_to_char_len (line 408) | fn fuzz_utf8_byte_to_char_len() {

FILE: packages/const-serialize/src/struct.rs
  type StructFieldLayout (line 5) | pub struct StructFieldLayout {
    method new (line 13) | pub const fn new(name: &'static str, offset: usize, layout: Layout) ->...
  type StructLayout (line 24) | pub struct StructLayout {
    method new (line 31) | pub const fn new(size: usize, data: &'static [StructFieldLayout]) -> S...
  function serialize_const_struct (line 37) | pub(crate) const unsafe fn serialize_const_struct(
  function deserialize_const_struct (line 61) | pub(crate) const fn deserialize_const_struct<'a>(

FILE: packages/const-serialize/tests/enum.rs
  function test_transmute_bytes_to_enum (line 5) | fn test_transmute_bytes_to_enum() {
  function test_serialize_enum (line 67) | fn test_serialize_enum() {
  function test_serialize_list_of_lopsided_enums (line 99) | fn test_serialize_list_of_lopsided_enums() {
  function test_serialize_u8_enum (line 160) | fn test_serialize_u8_enum() {
  function test_serialize_corrupted_enum (line 186) | fn test_serialize_corrupted_enum() {
  function test_serialize_nested_enum (line 206) | fn test_serialize_nested_enum() {
  function test_adding_enum_field_non_breaking (line 270) | fn test_adding_enum_field_non_breaking() {
  function test_adding_enum_variant_non_breaking (line 303) | fn test_adding_enum_variant_non_breaking() {

FILE: packages/const-serialize/tests/eq.rs
  type Struct (line 4) | struct Struct {
  type Enum (line 13) | enum Enum {
  function const_eq (line 19) | fn const_eq() {

FILE: packages/const-serialize/tests/lists.rs
  function test_serialize_const_layout_list (line 4) | fn test_serialize_const_layout_list() {
  function test_serialize_const_layout_nested_lists (line 13) | fn test_serialize_const_layout_nested_lists() {
  function test_serialize_list_too_little_data (line 29) | fn test_serialize_list_too_little_data() {

FILE: packages/const-serialize/tests/primitive.rs
  function test_serialize_const_layout_primitive (line 4) | fn test_serialize_const_layout_primitive() {
  function test_serialize_primitive_too_little_data (line 39) | fn test_serialize_primitive_too_little_data() {

FILE: packages/const-serialize/tests/str.rs
  function test_serialize_const_layout_str (line 4) | fn test_serialize_const_layout_str() {
  function test_serialize_const_layout_nested_str (line 16) | fn test_serialize_const_layout_nested_str() {
  function test_serialize_str_too_little_data (line 35) | fn test_serialize_str_too_little_data() {

FILE: packages/const-serialize/tests/structs.rs
  function test_transmute_bytes_to_struct (line 5) | fn test_transmute_bytes_to_struct() {
  function test_serialize_const_layout_struct_list (line 38) | fn test_serialize_const_layout_struct_list() {
  function test_serialize_const_layout_struct (line 137) | fn test_serialize_const_layout_struct() {
  function test_adding_struct_field_non_breaking (line 167) | fn test_adding_struct_field_non_breaking() {

FILE: packages/const-serialize/tests/tuples.rs
  function test_serialize_const_layout_tuple (line 4) | fn test_serialize_const_layout_tuple() {

FILE: packages/core-macro/src/component.rs
  type ComponentBody (line 8) | pub struct ComponentBody {
    method with_options (line 25) | pub fn with_options(mut self, options: ComponentMacroOptions) -> Self {
    method comp_fn (line 83) | fn comp_fn(&self) -> ItemFn {
    method lazy_body (line 159) | fn lazy_body(
    method props_struct (line 219) | fn props_struct(&self) -> (ItemStruct, Vec<ItemImpl>) {
    method props_docs (line 283) | fn props_docs(&self, inputs: Vec<&FnArg>) -> Vec<Attribute> {
    method is_explicit_props_ident (line 351) | fn is_explicit_props_ident(&self) -> bool {
    method has_struct_parameter_pattern (line 361) | fn has_struct_parameter_pattern(&self) -> bool {
    method completion_hints (line 373) | fn completion_hints(&self) -> TokenStream {
  method parse (line 14) | fn parse(input: ParseStream) -> Result<Self> {
  method to_tokens (line 32) | fn to_tokens(&self, tokens: &mut TokenStream) {
  type DocField (line 397) | struct DocField<'a> {
  function build_doc_fields (line 404) | fn build_doc_fields(f: &FnArg) -> Option<DocField<'_>> {
  function validate_component_fn (line 456) | fn validate_component_fn(item_fn: &ItemFn) -> Result<()> {
  function make_prop_struct_field (line 508) | fn make_prop_struct_field(f: &FnArg, vis: &Visibility) -> TokenStream {
  function make_prop_struct_field_idents (line 537) | fn make_prop_struct_field_idents(f: &FnArg) -> &Ident {
  function make_prop_struct_generics (line 549) | fn make_prop_struct_generics(generics: &GenericParam) -> TokenStream {
  function rebind_mutability (line 566) | fn rebind_mutability(f: &FnArg) -> TokenStream {
  function strip_pat_mutability (line 575) | fn strip_pat_mutability(pat: &Pat) -> Pat {
  function is_attr_doc (line 586) | fn is_attr_doc(attr: &Attribute) -> bool {
  function keep_up_to_n_consecutive_chars (line 590) | fn keep_up_to_n_consecutive_chars(
  function allow_camel_case_for_fn_ident (line 619) | fn allow_camel_case_for_fn_ident(item_fn: &ItemFn) -> ItemFn {
  type ComponentMacroOptions (line 635) | pub struct ComponentMacroOptions {
  method parse (line 640) | fn parse(input: ParseStream) -> Result<Self> {

FILE: packages/core-macro/src/lib.rs
  function derive_props (line 18) | pub fn derive_props(input: TokenStream) -> TokenStream {
  function rsx (line 28) | pub fn rsx(tokens: TokenStream) -> TokenStream {
  function component (line 37) | pub fn component(_args: TokenStream, input: TokenStream) -> TokenStream {

FILE: packages/core-macro/src/props/mod.rs
  function impl_my_derive (line 18) | pub fn impl_my_derive(ast: &syn::DeriveInput) -> Result<TokenStream, Err...
  function path_to_single_string (line 78) | pub fn path_to_single_string(path: &syn::Path) -> Option<String> {
  function expr_to_single_string (line 94) | pub fn expr_to_single_string(expr: &syn::Expr) -> Option<String> {
  function ident_to_type (line 102) | pub fn ident_to_type(ident: syn::Ident) -> syn::Type {
  function empty_type (line 114) | pub fn empty_type() -> syn::Type {
  function type_tuple (line 122) | pub fn type_tuple(elems: impl Iterator<Item = syn::Type>) -> syn::TypeTu...
  function empty_type_tuple (line 133) | pub fn empty_type_tuple() -> syn::TypeTuple {
  function make_punctuated_single (line 140) | pub fn make_punctuated_single<T, P: Default>(value: T) -> syn::punctuate...
  function modify_types_generics_hack (line 146) | pub fn modify_types_generics_hack<F>(
  function strip_raw_ident_prefix (line 166) | pub fn strip_raw_ident_prefix(mut name: String) -> String {
  type FieldInfo (line 187) | pub struct FieldInfo<'a> {
  function new (line 196) | pub fn new(
  function generic_ty_param (line 263) | pub fn generic_ty_param(&self) -> syn::GenericParam {
  function type_ident (line 267) | pub fn type_ident(&self) -> syn::Type {
  function tuplized_type_ty_param (line 271) | pub fn tuplized_type_ty_param(&self) -> syn::Type {
  function extends_vec_ident (line 282) | pub fn extends_vec_ident(&self) -> Option<syn::Ident> {
  type FieldBuilderAttr (line 291) | pub struct FieldBuilderAttr {
    method with (line 304) | pub fn with(mut self, attrs: &[syn::Attribute]) -> Result<Self, Error> {
    method apply_meta (line 351) | pub fn apply_meta(&mut self, expr: syn::Expr) -> Result<(), Error> {
  function type_from_inside_option (line 500) | fn type_from_inside_option(ty: &Type) -> Option<&Type> {
  function extract_inner_type_from_segment (line 539) | fn extract_inner_type_from_segment(segment: &PathSegment) -> Option<&Typ...
  type StructInfo (line 570) | pub struct StructInfo<'a> {
  function included_fields (line 584) | pub fn included_fields(&self) -> impl Iterator<Item = &FieldInfo<'a>> {
  function extend_fields (line 588) | pub fn extend_fields(&self) -> impl Iterator<Item = &FieldInfo<'a>> {
  function new (line 594) | pub fn new(
  function modify_generics (line 618) | fn modify_generics<F: FnMut(&mut syn::Generics)>(&self, mut mutator: F) ...
  function has_child_owned_fields (line 625) | fn has_child_owned_fields(&self) -> bool {
  function memoize_impl (line 629) | fn memoize_impl(&self) -> Result<TokenStream, Error> {
  function builder_creation_impl (line 768) | pub fn builder_creation_impl(&self) -> Result<TokenStream, Error> {
  function conversion_helper_impl (line 916) | pub fn conversion_helper_impl(&self) -> Result<TokenStream, Error> {
  function extends_impl (line 939) | pub fn extends_impl(&self, field: &FieldInfo) -> Result<TokenStream, Err...
  function field_impl (line 1070) | pub fn field_impl(&self, field: &FieldInfo) -> Result<TokenStream, Error> {
  function required_field_impl (line 1236) | pub fn required_field_impl(&self, field: &FieldInfo) -> Result<TokenStre...
  function generic_builder_param (line 1343) | fn generic_builder_param(&self, field: &FieldInfo) -> syn::TypeParam {
  function build_method_impl (line 1368) | pub fn build_method_impl(&self) -> TokenStream {
  type TypeBuilderAttr (line 1552) | pub struct TypeBuilderAttr {
    method new (line 1571) | pub fn new(attrs: &[syn::Attribute]) -> Result<TypeBuilderAttr, Error> {
    method apply_meta (line 1601) | fn apply_meta(&mut self, expr: syn::Expr) -> Result<(), Error> {
  function extract_base_type_without_generics (line 1675) | fn extract_base_type_without_generics(ty: &Type) -> Option<syn::Path> {
  function strip_option (line 1716) | fn strip_option(type_: &Type) -> Option<Type> {
  function remove_option_wrapper (line 1746) | fn remove_option_wrapper(type_: Type) -> Type {
  function child_owned_type (line 1751) | fn child_owned_type(ty: &Type) -> bool {
  function last_segment_matches (line 1756) | fn last_segment_matches(ty: &Type, expected: &Ident) -> bool {
  function looks_like_signal_type (line 1765) | fn looks_like_signal_type(ty: &Type) -> bool {
  function looks_like_write_type (line 1770) | fn looks_like_write_type(ty: &Type) -> bool {
  function looks_like_store_type (line 1774) | fn looks_like_store_type(ty: &Type) -> bool {
  function looks_like_callback_type (line 1780) | fn looks_like_callback_type(ty: &Type) -> bool {
  function test_looks_like_type (line 1787) | fn test_looks_like_type() {
  function test_remove_option_wrapper (line 1828) | fn test_remove_option_wrapper() {

FILE: packages/core-macro/src/utils.rs
  function lit_to_string (line 11) | pub fn lit_to_string(lit: Lit) -> Option<String> {
  function format_type_string (line 25) | pub fn format_type_string(ty: &Type) -> String {
  type DeprecatedAttribute (line 39) | pub struct DeprecatedAttribute {
    method from_meta (line 46) | pub fn from_meta(meta: &Meta) -> syn::Result<Self> {
  type DeprecatedAttributeArgsParser (line 87) | struct DeprecatedAttributeArgsParser {
  method parse (line 93) | fn parse(input: ParseStream) -> syn::Result<Self> {

FILE: packages/core-macro/tests/event_handler.rs
  function event_handlers_compile (line 7) | fn event_handlers_compile() {

FILE: packages/core-macro/tests/generics.rs
  function generic_props_compile (line 10) | fn generic_props_compile() {

FILE: packages/core-macro/tests/rsx.rs
  function rsx (line 2) | fn rsx() {
  type MyCoolProps (line 16) | struct MyCoolProps {
  function UsesComponents (line 110) | fn UsesComponents() -> Element {
  type MyTestProps (line 130) | struct MyTestProps {
  function PropsStruct (line 136) | fn PropsStruct(props: MyTestProps) -> Element {
  function PropParams (line 142) | fn PropParams(opt_read_sig: ReadSignal<Option<u16>>) -> Element {
  function DoubleOption (line 147) | fn DoubleOption(optional: Option<Option<u16>>) -> Element {

FILE: packages/core-macro/tests/rsx/trailing-comma-0.rs
  function main (line 6) | fn main() {

FILE: packages/core-macro/tests/values_memoize_in_place.rs
  function values_memoize_in_place (line 9) | async fn values_memoize_in_place() {
  function cloning_event_handler_components_work (line 74) | fn cloning_event_handler_components_work() {
  function TakesEventHandler (line 111) | fn TakesEventHandler(click: EventHandler<usize>, number: usize) -> Eleme...
  function TakesSignal (line 127) | fn TakesSignal(sig: ReadSignal<usize>, number: usize) -> Element {
  function spreads_memorize_in_place (line 141) | fn spreads_memorize_in_place() {
  function cloning_read_signal_components_work (line 172) | fn cloning_read_signal_components_work() {
  function optional_event_handler_diff (line 221) | async fn optional_event_handler_diff() {

FILE: packages/core-types/src/bubbles.rs
  function event_bubbles (line 11) | pub fn event_bubbles(evt: &str) -> bool {

FILE: packages/core-types/src/bundled.rs
  function is_bundled_app (line 3) | pub fn is_bundled_app() -> bool {

FILE: packages/core-types/src/formatter.rs
  type DioxusFormattable (line 12) | pub trait DioxusFormattable {
    method format (line 13) | fn format(&self) -> Cow<'static, str>;

FILE: packages/core-types/src/hr_context.rs
  type HotReloadingContext (line 1) | pub trait HotReloadingContext {
    method map_attribute (line 2) | fn map_attribute(
    method map_element (line 6) | fn map_element(element_name_rust: &str) -> Option<(&'static str, Optio...
    method map_attribute (line 12) | fn map_attribute(_: &str, _: &str) -> Option<(&'static str, Option<&'s...
    method map_element (line 16) | fn map_element(_: &str) -> Option<(&'static str, Option<&'static str>)> {
  type Empty (line 9) | pub struct Empty;

FILE: packages/core/src/any_props.rs
  type BoxedAnyProps (line 4) | pub(crate) type BoxedAnyProps = Box<dyn AnyProps>;
  type AnyProps (line 7) | pub(crate) trait AnyProps: 'static {
    method render (line 9) | fn render(&self) -> Element;
    method memoize (line 11) | fn memoize(&mut self, other: &dyn Any) -> bool;
    method props (line 13) | fn props(&self) -> &dyn Any;
    method props_mut (line 15) | fn props_mut(&mut self) -> &mut dyn Any;
    method duplicate (line 17) | fn duplicate(&self) -> BoxedAnyProps;
    method memoize (line 62) | fn memoize(&mut self, other: &dyn Any) -> bool {
    method props (line 69) | fn props(&self) -> &dyn Any {
    method props_mut (line 73) | fn props_mut(&mut self) -> &mut dyn Any {
    method render (line 77) | fn render(&self) -> Element {
    method duplicate (line 101) | fn duplicate(&self) -> BoxedAnyProps {
  type VProps (line 21) | pub(crate) struct VProps<F: ComponentFunction<P, M>, P, M> {
  method clone (line 30) | fn clone(&self) -> Self {
  function new (line 43) | pub fn new(

FILE: packages/core/src/arena.rs
  type ElementId (line 10) | pub struct ElementId(pub usize);
  type MountId (line 18) | pub(crate) struct MountId(pub(crate) usize);
    constant PLACEHOLDER (line 27) | pub(crate) const PLACEHOLDER: Self = Self(usize::MAX);
    method as_usize (line 29) | pub(crate) fn as_usize(self) -> Option<usize> {
    method mounted (line 38) | pub(crate) fn mounted(self) -> bool {
  method default (line 21) | fn default() -> Self {
  type ElementRef (line 44) | pub struct ElementRef {
  type ElementPath (line 53) | pub struct ElementPath {
    method is_descendant (line 97) | pub(crate) fn is_descendant(&self, small: &[u8]) -> bool {
    method eq (line 119) | fn eq(&self, other: &&[u8]) -> bool {
  method next_element (line 58) | pub(crate) fn next_element(&mut self) -> ElementId {
  method reclaim (line 63) | pub(crate) fn reclaim(&mut self, el: ElementId) {
  method try_reclaim (line 69) | pub(crate) fn try_reclaim(&mut self, el: ElementId) -> bool {
  method drop_scope (line 82) | pub(crate) fn drop_scope(&mut self, id: ScopeId) {
  function is_descendant (line 103) | fn is_descendant() {

FILE: packages/core/src/diff/component.rs
  method run_and_diff_scope (line 19) | pub(crate) fn run_and_diff_scope<M: WriteMutations>(
  method diff_scope (line 34) | fn diff_scope<M: WriteMutations>(
  method create_scope (line 67) | pub(crate) fn create_scope<M: WriteMutations>(
  method remove_component_node (line 94) | pub(crate) fn remove_component_node<M: WriteMutations>(
  method diff_vcomponent (line 117) | pub(crate) fn diff_vcomponent(
  method replace_vcomponent (line 153) | fn replace_vcomponent(
  method create_component_node (line 175) | pub(super) fn create_component_node(

FILE: packages/core/src/diff/iterator.rs
  method diff_non_empty_fragment (line 10) | pub(crate) fn diff_non_empty_fragment(
  method diff_non_keyed_children (line 43) | fn diff_non_keyed_children(
  method diff_keyed_children (line 88) | fn diff_keyed_children(
  method diff_keyed_ends (line 157) | fn diff_keyed_ends(
  method diff_keyed_middle (line 239) | fn diff_keyed_middle(
  method create_and_insert_before (line 432) | fn create_and_insert_before(
  method insert_before (line 443) | fn insert_before(&mut self, to: Option<&mut impl WriteMutations>, new: u...
  method create_and_insert_after (line 452) | fn create_and_insert_after(
  method insert_after (line 463) | fn insert_after(&mut self, to: Option<&mut impl WriteMutations>, new: us...
  method push_all_root_nodes (line 475) | pub(crate) fn push_all_root_nodes(

FILE: packages/core/src/diff/mod.rs
  method create_children (line 25) | pub(crate) fn create_children(
  method get_mounted_parent (line 37) | pub(crate) fn get_mounted_parent(&self, mount: MountId) -> Option<Elemen...
  method get_mounted_dyn_node (line 42) | pub(crate) fn get_mounted_dyn_node(&self, mount: MountId, dyn_node_idx: ...
  method set_mounted_dyn_node (line 47) | pub(crate) fn set_mounted_dyn_node(&self, mount: MountId, dyn_node_idx: ...
  method get_mounted_dyn_attr (line 52) | pub(crate) fn get_mounted_dyn_attr(&self, mount: MountId, dyn_attr_idx: ...
  method set_mounted_dyn_attr (line 57) | pub(crate) fn set_mounted_dyn_attr(
  method get_mounted_root_node (line 67) | pub(crate) fn get_mounted_root_node(&self, mount: MountId, root_idx: usi...
  method set_mounted_root_node (line 72) | pub(crate) fn set_mounted_root_node(&self, mount: MountId, root_idx: usi...
  method remove_nodes (line 79) | fn remove_nodes(
  function is_dyn_node_only_child (line 99) | fn is_dyn_node_only_child(node: &VNode, idx: usize) -> bool {

FILE: packages/core/src/diff/node.rs
  method diff_node (line 15) | pub(crate) fn diff_node(
  method move_mount_to (line 64) | fn move_mount_to(&self, new: &VNode, dom: &mut VirtualDom) {
  method diff_dynamic_node (line 78) | fn diff_dynamic_node(
  method get_dynamic_root_node_and_id (line 142) | pub(crate) fn get_dynamic_root_node_and_id(
  method find_first_element (line 151) | pub(crate) fn find_first_element(&self, dom: &VirtualDom) -> ElementId {
  method find_last_element (line 181) | pub(crate) fn find_last_element(&self, dom: &VirtualDom) -> ElementId {
  method diff_vtext (line 215) | fn diff_vtext(&self, to: &mut impl WriteMutations, id: ElementId, left: ...
  method replace (line 221) | pub(crate) fn replace(
  method move_node_to_background (line 234) | pub(crate) fn move_node_to_background(
  method replace_inner (line 244) | pub(crate) fn replace_inner(
  method remove_node (line 259) | pub(crate) fn remove_node<M: WriteMutations>(
  method remove_node_inner (line 269) | pub(crate) fn remove_node_inner<M: WriteMutations>(
  method reclaim_roots (line 301) | fn reclaim_roots(
  method remove_nested_dyn_nodes (line 338) | fn remove_nested_dyn_nodes<M: WriteMutations>(
  method remove_dynamic_node (line 362) | fn remove_dynamic_node(
  method reclaim_attributes (line 399) | pub(super) fn reclaim_attributes(&self, mount: MountId, dom: &mut Virtua...
  method diff_attributes (line 416) | pub(super) fn diff_attributes(
  method remove_attribute (line 500) | fn remove_attribute(&self, attribute: &Attribute, id: ElementId, to: &mu...
  method write_attribute (line 516) | fn write_attribute(
  method create (line 542) | pub(crate) fn create(
  method reference_to_dynamic_node (line 646) | fn reference_to_dynamic_node(&self, mount: MountId, dynamic_node_id: usi...
  method create_dynamic_node (line 655) | pub(crate) fn create_dynamic_node(
  method load_placeholders (line 712) | fn load_placeholders(
  method write_attrs (line 795) | fn write_attrs(
  method load_template_root (line 833) | fn load_template_root(
  method assign_static_node_as_dynamic (line 856) | fn assign_static_node_as_dynamic(
  method create_dynamic_text (line 876) | fn create_dynamic_text(
  method create_placeholder (line 892) | pub(crate) fn create_placeholder(
  method mount_node (line 909) | fn mount_node(self, node_index: usize, dom: &mut VirtualDom) -> ElementId {

FILE: packages/core/src/effect.rs
  type Effect (line 10) | pub(crate) struct Effect {
    method new (line 18) | pub(crate) fn new(order: ScopeOrder, f: Box<dyn FnOnce() + 'static>) -...
    method push_back (line 27) | pub(crate) fn push_back(&self, f: impl FnOnce() + 'static) {
    method run (line 31) | pub(crate) fn run(&self) {
    method borrow (line 60) | fn borrow(&self) -> &ScopeOrder {
  method cmp (line 40) | fn cmp(&self, other: &Self) -> std::cmp::Ordering {
  method partial_cmp (line 46) | fn partial_cmp(&self, other: &Self) -> Option<std::cmp::Ordering> {
  method eq (line 52) | fn eq(&self, other: &Self) -> bool {

FILE: packages/core/src/error_boundary.rs
  type CapturedPanic (line 34) | pub(crate) struct CapturedPanic(pub(crate) Box<dyn Any + Send + 'static>);
  method fmt (line 38) | fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
  method fmt (line 44) | fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
  type CreateErrorBoundary (line 53) | struct CreateErrorBoundary(fn() -> ErrorContext);
  method default (line 56) | fn default() -> Self {
  function provide_create_error_boundary (line 64) | pub fn provide_create_error_boundary(create_error_boundary: fn() -> Erro...
  function create_error_boundary (line 69) | fn create_error_boundary() -> ErrorContext {
  function use_error_boundary_provider (line 76) | pub fn use_error_boundary_provider() -> ErrorContext {
  type ErrorContext (line 82) | pub struct ErrorContext {
    method new (line 103) | pub fn new(error: Option<CapturedError>) -> Self {
    method error (line 112) | pub fn error(&self) -> Option<CapturedError> {
    method insert_error (line 123) | pub fn insert_error(&self, error: CapturedError) {
    method clear_errors (line 129) | pub fn clear_errors(&self) {
    method mark_dirty (line 135) | fn mark_dirty(&self) {
  method fmt (line 88) | fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
  method eq (line 96) | fn eq(&self, other: &Self) -> bool {
  type ErrorHandler (line 148) | pub struct ErrorHandler(Rc<dyn Fn(ErrorContext) -> Element>);
    method from (line 150) | fn from(value: F) -> Self {
  function default_handler (line 155) | fn default_handler(errors: ErrorContext) -> Element {
  type ErrorBoundaryProps (line 200) | pub struct ErrorBoundaryProps {
    method builder (line 345) | pub fn builder() -> ErrorBoundaryPropsBuilder<((), ())> {
  function ErrorBoundary (line 311) | pub fn ErrorBoundary(props: ErrorBoundaryProps) -> Element {
  type ErrorBoundaryPropsBuilder (line 353) | pub struct ErrorBoundaryPropsBuilder<TypedBuilderFields> {
  method clone (line 360) | fn clone(&self) -> Self {
  type Builder (line 367) | type Builder = ErrorBoundaryPropsBuilder<((), ())>;
  method builder (line 368) | fn builder() -> Self::Builder {
  method memoize (line 371) | fn memoize(&mut self, other: &Self) -> bool {
  type ErrorBoundaryPropsBuilder_Optional (line 378) | pub trait ErrorBoundaryPropsBuilder_Optional<T> {
    method into_value (line 379) | fn into_value<F: FnOnce() -> T>(self, default: F) -> T;
  function into_value (line 382) | fn into_value<F: FnOnce() -> T>(self, default: F) -> T {
  function into_value (line 387) | fn into_value<F: FnOnce() -> T>(self, _: F) -> T {
  function children (line 393) | pub fn children(
  type ErrorBoundaryPropsBuilder_Error_Repeated_field_children (line 406) | pub enum ErrorBoundaryPropsBuilder_Error_Repeated_field_children {}
  function children (line 411) | pub fn children(
  function handle_error (line 420) | pub fn handle_error(
  type ErrorBoundaryPropsBuilder_Error_Repeated_field_handle_error (line 433) | pub enum ErrorBoundaryPropsBuilder_Error_Repeated_field_handle_error {}
  function handle_error (line 438) | pub fn handle_error(
  function build (line 451) | pub fn build(self) -> ErrorBoundaryProps {

FILE: packages/core/src/events.rs
  type Event (line 23) | pub struct Event<T: 'static + ?Sized> {
  type EventMetadata (line 30) | pub(crate) struct EventMetadata {
  function new (line 37) | pub fn new(data: Rc<T>, propagates: bool) -> Self {
  function map (line 64) | pub fn map<U: 'static, F: FnOnce(&T) -> U>(&self, f: F) -> Event<U> {
  function into_any (line 72) | pub fn into_any(self) -> Event<dyn Any>
  function cancel_bubble (line 98) | pub fn cancel_bubble(&self) {
  function propagates (line 103) | pub fn propagates(&self) -> bool {
  function stop_propagation (line 121) | pub fn stop_propagation(&self) {
  function data (line 140) | pub fn data(&self) -> Rc<T> {
  function prevent_default (line 172) | pub fn prevent_default(&self) {
  function default_action_enabled (line 177) | pub fn default_action_enabled(&self) -> bool {
  method clone (line 183) | fn clone(&self) -> Self {
  type Target (line 192) | type Target = Rc<T>;
  function deref (line 193) | fn deref(&self) -> &Self::Target {
  function fmt (line 199) | fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
  type EventHandler (line 23
Condensed preview — 1335 files, each showing path, character count, and a content snippet. Download the .json file or copy for the full structured content (7,051K chars).
[
  {
    "path": ".devcontainer/Dockerfile",
    "chars": 838,
    "preview": "ARG VARIANT=\"nightly-bookworm-slim\"\nFROM rustlang/rust:${VARIANT}\n\nENV DEBIAN_FRONTEND=noninteractive\n\n# Install require"
  },
  {
    "path": ".devcontainer/README.md",
    "chars": 1758,
    "preview": "# Dev Container\n\nA dev container in the most simple context allows one to create a consistent development environment wi"
  },
  {
    "path": ".devcontainer/devcontainer.json",
    "chars": 952,
    "preview": "{\n    \"name\": \"dioxus\",\n    \"remoteUser\": \"vscode\",\n    \"build\": {\n        \"dockerfile\": \"./Dockerfile\",\n        \"contex"
  },
  {
    "path": ".github/CODEOWNERS",
    "chars": 113,
    "preview": "# borrowed from tauri - only allow core maintainers to approve PRs\n\n* @DioxusLabs/core\n\n.github @DioxusLabs/core\n"
  },
  {
    "path": ".github/FUNDING.yml",
    "chars": 222,
    "preview": "# These are supported funding model platforms\n\ngithub: DioxusLabs # Replace with up to 4 GitHub Sponsors-enabled usernam"
  },
  {
    "path": ".github/ISSUE_TEMPLATE/bug_report.md",
    "chars": 926,
    "preview": "---\nname: Bug report\nabout: Create a report to help us improve Dioxus\nlabels: bug\n---\n\n**Problem**\n\n<!-- A clear and con"
  },
  {
    "path": ".github/ISSUE_TEMPLATE/feature_requst.md",
    "chars": 418,
    "preview": "---\nname: Feature Request\nabout: If you have any interesting advice, you can tell us.\nlabels: enhancement\n---\n\n## Featur"
  },
  {
    "path": ".github/actions/free-disk-space/action.yml",
    "chars": 424,
    "preview": "name: Free Disk Space\ndescription: Free up disk space on the runner\nruns:\n  using: composite\n  steps:\n  - name: Free Dis"
  },
  {
    "path": ".github/dependabot.yml",
    "chars": 164,
    "preview": "version: 2\nupdates:\n\n  # Maintain dependencies for GitHub Actions\n  - package-ecosystem: \"github-actions\"\n    directory:"
  },
  {
    "path": ".github/install.ps1",
    "chars": 1315,
    "preview": "#!/usr/bin/env pwsh\n\n$ErrorActionPreference = 'Stop'\n\nif ($v) {\n  $Version = \"v${v}\"\n}\nif ($Args.Length -eq 1) {\n  $Vers"
  },
  {
    "path": ".github/install.sh",
    "chars": 2643,
    "preview": "#!/bin/sh\nset -eo pipefail\n\n# Reset\nColor_Off=''\n\n# Regular Colors\nRed=''\nGreen=''\nDim='' # White\n\n# Bold\nBold_White=''\n"
  },
  {
    "path": ".github/workflows/main.yml",
    "chars": 17433,
    "preview": "# Whenever an open PR is updated, the workflow will be triggered\n#\n# This can get expensive, so we do a lot of caching a"
  },
  {
    "path": ".github/workflows/merge.yml",
    "chars": 2876,
    "preview": "# Runs whenever a PR is merged:\n# - attempt to backports fixes\n# - upload nightly docs\n#\n# Future:\n# - upload nightly CL"
  },
  {
    "path": ".github/workflows/promote.yml",
    "chars": 1699,
    "preview": "# Promote the current main branch to a stable release.\n# This will not actually release anything, so you need to run the"
  },
  {
    "path": ".github/workflows/publish.yml",
    "chars": 6941,
    "preview": "# Release workflow\n#\n# We parallelize builds, dump all the artifacts into a release, and then publish the release\n# This"
  },
  {
    "path": ".github/workflows/setup-dev-drive.ps1",
    "chars": 825,
    "preview": "# This creates a 20GB dev drive, and exports all required environment\n# variables so that rustup, uv and others all use "
  },
  {
    "path": ".github/workflows/typos.yml",
    "chars": 1056,
    "preview": "# Whenever an open PR is updated, the workflow will be triggered\n\nname: Language Linting\n\non:\n  push:\n    branches:\n    "
  },
  {
    "path": ".gitignore",
    "chars": 1077,
    "preview": ".dioxus\n/target\n/packages/playwright-tests/cli-optimization/monaco-editor-0.52.2\n/packages/playwright-tests/web/dist\n/pa"
  },
  {
    "path": ".vscode/settings.json",
    "chars": 714,
    "preview": "{\n  \"editor.formatOnSave\": true,\n  \"[toml]\": {\n    \"editor.formatOnSave\": false\n  },\n  \"[handlebars]\": {\n    \"editor.for"
  },
  {
    "path": "AGENTS.md",
    "chars": 3831,
    "preview": "# Dioxus Agent Guide\n\nDioxus is a cross-platform UI framework for Rust, similar to React. It compiles to web (WASM), des"
  },
  {
    "path": "Cargo.toml",
    "chars": 27590,
    "preview": "[workspace]\nresolver = \"2\"\nmembers = [\n    \"packages/dioxus\",\n    \"packages/core\",\n    \"packages/core-types\",\n    \"packa"
  },
  {
    "path": "LICENSE-APACHE",
    "chars": 9723,
    "preview": "                              Apache License\n                        Version 2.0, January 2004\n                     http"
  },
  {
    "path": "LICENSE-MIT",
    "chars": 1023,
    "preview": "Permission is hereby granted, free of charge, to any\nperson obtaining a copy of this software and associated\ndocumentati"
  },
  {
    "path": "README.md",
    "chars": 11953,
    "preview": "<p>\n    <p align=\"center\" >\n      <!-- <img src=\"./notes/header-light-updated.svg#gh-light-mode-only\" >\n      <img src=\""
  },
  {
    "path": "_typos.toml",
    "chars": 429,
    "preview": "[default.extend-words]\n# https://ratatui.rs/\nratatui = \"ratatui\"\n# lits is short for literals\nlits = \"lits\"\n# https://de"
  },
  {
    "path": "codecov.yml",
    "chars": 39,
    "preview": "comment: false\nfail_ci_if_error: false\n"
  },
  {
    "path": "examples/01-app-demos/bluetooth-scanner/.gitignore",
    "chars": 8,
    "preview": "/target\n"
  },
  {
    "path": "examples/01-app-demos/bluetooth-scanner/Cargo.toml",
    "chars": 462,
    "preview": "[package]\nname = \"bluetooth-scanner\"\nversion = \"0.1.1\"\nedition = \"2021\"\npublish = false\n\n# See more keys and their defin"
  },
  {
    "path": "examples/01-app-demos/bluetooth-scanner/README.md",
    "chars": 117,
    "preview": "# Bluetooth scanner app\n\nThis desktop app showcases the use of background threads.\n\n![Demo of app](./demo_small.png)\n"
  },
  {
    "path": "examples/01-app-demos/bluetooth-scanner/assets/tailwind.css",
    "chars": 10709,
    "preview": "/*! tailwindcss v4.1.5 | MIT License | https://tailwindcss.com */\n@layer properties;\n@layer theme, base, components, uti"
  },
  {
    "path": "examples/01-app-demos/bluetooth-scanner/src/main.rs",
    "chars": 4011,
    "preview": "use dioxus::prelude::*;\n\nfn main() {\n    dioxus::launch(app)\n}\n\nfn app() -> Element {\n    let mut scan = use_action(|| a"
  },
  {
    "path": "examples/01-app-demos/bluetooth-scanner/tailwind.css",
    "chars": 59,
    "preview": "@import \"tailwindcss\";\n@source \"./src/**/*.{rs,html,css}\";\n"
  },
  {
    "path": "examples/01-app-demos/calculator.rs",
    "chars": 8198,
    "preview": "//! Calculator\n//!\n//! This example is a simple iOS-style calculator. Instead of wrapping the state in a single struct l"
  },
  {
    "path": "examples/01-app-demos/calculator_mutable.rs",
    "chars": 9182,
    "preview": "//! This example showcases a simple calculator using an approach to state management where the state is composed of only"
  },
  {
    "path": "examples/01-app-demos/counters.rs",
    "chars": 2099,
    "preview": "//! A simple counters example that stores a list of items in a vec and then iterates over them.\n\nuse dioxus::prelude::*;"
  },
  {
    "path": "examples/01-app-demos/crm.rs",
    "chars": 5495,
    "preview": "//! Tiny CRM - A simple CRM app using the Router component and global signals\n//!\n//! This shows how to use the `Router`"
  },
  {
    "path": "examples/01-app-demos/dog_app.rs",
    "chars": 2302,
    "preview": "//! This example demonstrates a simple app that fetches a list of dog breeds and displays a random dog.\n//!\n//! This app"
  },
  {
    "path": "examples/01-app-demos/ecommerce-site/.gitignore",
    "chars": 8,
    "preview": "/target\n"
  },
  {
    "path": "examples/01-app-demos/ecommerce-site/Cargo.toml",
    "chars": 632,
    "preview": "[package]\nname = \"ecommerce-site\"\nversion = \"0.1.1\"\nedition = \"2021\"\npublish = false\n# See more keys and their definitio"
  },
  {
    "path": "examples/01-app-demos/ecommerce-site/README.md",
    "chars": 767,
    "preview": "# Dioxus Example: An e-commerce site using the FakeStoreAPI\n\nThis example app is a fullstack web application leveraging "
  },
  {
    "path": "examples/01-app-demos/ecommerce-site/public/loading.css",
    "chars": 298,
    "preview": "@keyframes spin {\n    0% {\n        transform: rotate(0deg);\n    }\n\n    100% {\n        transform: rotate(360deg);\n    }\n}"
  },
  {
    "path": "examples/01-app-demos/ecommerce-site/public/tailwind.css",
    "chars": 20795,
    "preview": "/*! tailwindcss v4.1.0 | MIT License | https://tailwindcss.com */\n@supports ((-webkit-hyphens: none) and (not (margin-tr"
  },
  {
    "path": "examples/01-app-demos/ecommerce-site/src/api.rs",
    "chars": 1890,
    "preview": "use dioxus::prelude::Result;\nuse serde::{Deserialize, Serialize};\nuse std::fmt::Display;\n\n// Cache up to 100 requests, i"
  },
  {
    "path": "examples/01-app-demos/ecommerce-site/src/components/error.rs",
    "chars": 341,
    "preview": "use dioxus::prelude::*;\n\n#[component]\npub fn error_page() -> Element {\n    rsx! {\n        section { class: \"py-20\",\n    "
  },
  {
    "path": "examples/01-app-demos/ecommerce-site/src/components/home.rs",
    "chars": 575,
    "preview": "// The homepage is statically rendered, so we don't need to a persistent websocket connection.\n\nuse crate::{\n    api::{f"
  },
  {
    "path": "examples/01-app-demos/ecommerce-site/src/components/loading.rs",
    "chars": 302,
    "preview": "use dioxus::prelude::*;\n\n#[component]\npub(crate) fn ChildrenOrLoading(children: Element) -> Element {\n    rsx! {\n       "
  },
  {
    "path": "examples/01-app-demos/ecommerce-site/src/components/nav.rs",
    "chars": 18180,
    "preview": "use dioxus::prelude::*;\n\n#[component]\npub fn Nav() -> Element {\n    rsx! {\n        section { class: \"relative\",\n        "
  },
  {
    "path": "examples/01-app-demos/ecommerce-site/src/components/product_item.rs",
    "chars": 1119,
    "preview": "use dioxus::prelude::*;\n\nuse crate::api::Product;\n\n#[component]\npub(crate) fn ProductItem(product: Product) -> Element {"
  },
  {
    "path": "examples/01-app-demos/ecommerce-site/src/components/product_page.rs",
    "chars": 14110,
    "preview": "use std::{fmt::Display, str::FromStr};\n\nuse crate::api::{fetch_product, Product};\nuse dioxus::prelude::*;\n\n#[component]\n"
  },
  {
    "path": "examples/01-app-demos/ecommerce-site/src/main.rs",
    "chars": 1004,
    "preview": "#![allow(non_snake_case)]\n\nuse components::home::Home;\nuse components::loading::ChildrenOrLoading;\nuse dioxus::prelude::"
  },
  {
    "path": "examples/01-app-demos/ecommerce-site/tailwind.css",
    "chars": 59,
    "preview": "@import \"tailwindcss\";\n@source \"./src/**/*.{rs,html,css}\";\n"
  },
  {
    "path": "examples/01-app-demos/file-explorer/.gitignore",
    "chars": 346,
    "preview": "# Generated by Cargo\n# will have compiled files and executables\n/target/\n/dist/\n/static/\n/.dioxus/\n\n# Remove Cargo.lock "
  },
  {
    "path": "examples/01-app-demos/file-explorer/Cargo.toml",
    "chars": 346,
    "preview": "[package]\nname = \"file-explorer\"\nedition = \"2021\"\nversion = \"0.1.0\"\npublish = false\n\n# See more keys and their definitio"
  },
  {
    "path": "examples/01-app-demos/file-explorer/Dioxus.toml",
    "chars": 654,
    "preview": "[application]\n\n# App (Project) Name\nname = \"file-explorer\"\n\n# Dioxus App Default Platform\n# desktop, web\ndefault_platfor"
  },
  {
    "path": "examples/01-app-demos/file-explorer/README.md",
    "chars": 258,
    "preview": "# File-explorer with Rust and Dioxus\n\nThis example shows how a Dioxus App can directly leverage system calls and librari"
  },
  {
    "path": "examples/01-app-demos/file-explorer/assets/fileexplorer.css",
    "chars": 2598,
    "preview": "* {\n    margin: 0;\n    padding: 0;\n    font-family: 'Roboto', sans-serif;\n    user-select: none;\n    transition: .2s all"
  },
  {
    "path": "examples/01-app-demos/file-explorer/src/main.rs",
    "chars": 4259,
    "preview": "//! Example: File Explorer\n//!\n//! This is a fun little desktop application that lets you explore the file system.\n//!\n/"
  },
  {
    "path": "examples/01-app-demos/geolocation-native-plugin/Cargo.toml",
    "chars": 564,
    "preview": "[package]\nname = \"geolocation-native-plugin\"\nversion = \"0.1.0\"\nauthors = [\"Sabin Regmi <get2sabin@gmail.com>\"]\nedition ="
  },
  {
    "path": "examples/01-app-demos/geolocation-native-plugin/Dioxus.toml",
    "chars": 631,
    "preview": "#:schema ../../../packages/cli/schema.json\n\n[bundle]\nidentifier = \"com.dioxuslabs.geolocation\"\npublisher = \"Dioxus Labs\""
  },
  {
    "path": "examples/01-app-demos/geolocation-native-plugin/README.md",
    "chars": 1519,
    "preview": "# Geolocation demo\n\nA minimal Dioxus application that implements a native plugin.\n\nThe plugin demonstrated here makes it"
  },
  {
    "path": "examples/01-app-demos/geolocation-native-plugin/assets/main.css",
    "chars": 3551,
    "preview": "body {\n  background-color: #05060a;\n  color: #f4f4f5;\n  font-family: 'Inter', 'Segoe UI', sans-serif;\n  margin: 0;\n  min"
  },
  {
    "path": "examples/01-app-demos/geolocation-native-plugin/src/android/build.gradle.kts",
    "chars": 961,
    "preview": "import org.gradle.api.tasks.bundling.AbstractArchiveTask\n\nplugins {\n    id(\"com.android.library\") version \"8.4.2\"\n    ko"
  },
  {
    "path": "examples/01-app-demos/geolocation-native-plugin/src/android/consumer-rules.pro",
    "chars": 87,
    "preview": "# Intentionally empty; no consumer Proguard rules required for the geolocation plugin.\n"
  },
  {
    "path": "examples/01-app-demos/geolocation-native-plugin/src/android/src/main/AndroidManifest.xml",
    "chars": 475,
    "preview": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<manifest xmlns:android=\"http://schemas.android.com/apk/res/android\">\n    <uses-p"
  },
  {
    "path": "examples/01-app-demos/geolocation-native-plugin/src/android/src/main/kotlin/com/dioxus/geolocation/Geolocation.kt",
    "chars": 3145,
    "preview": "// Copyright 2019-2023 Tauri Programme within The Commons Conservancy\n// SPDX-License-Identifier: Apache-2.0\n// SPDX-Lic"
  },
  {
    "path": "examples/01-app-demos/geolocation-native-plugin/src/android/src/main/kotlin/com/dioxus/geolocation/GeolocationPlugin.kt",
    "chars": 6175,
    "preview": "// Copyright 2019-2023 Tauri Programme within The Commons Conservancy\n// SPDX-License-Identifier: Apache-2.0\n// SPDX-Lic"
  },
  {
    "path": "examples/01-app-demos/geolocation-native-plugin/src/ios/.gitignore",
    "chars": 182,
    "preview": ".DS_Store\n/.build\n/Packages\n/*.xcodeproj\nxcuserdata/\nDerivedData/\n.swiftpm/config/registries.json\n.swiftpm/xcode/package"
  },
  {
    "path": "examples/01-app-demos/geolocation-native-plugin/src/ios/plugin/Package.swift",
    "chars": 873,
    "preview": "// swift-tools-version:5.9\n// Copyright 2019-2023 Tauri Programme within The Commons Conservancy\n// SPDX-License-Identif"
  },
  {
    "path": "examples/01-app-demos/geolocation-native-plugin/src/ios/plugin/Sources/GeolocationPlugin.swift",
    "chars": 10632,
    "preview": "// Copyright 2019-2023 Tauri Programme within The Commons Conservancy\n// SPDX-License-Identifier: Apache-2.0\n// SPDX-Lic"
  },
  {
    "path": "examples/01-app-demos/geolocation-native-plugin/src/ios/plugin/Sources/LocationActivityAttributes.swift",
    "chars": 1690,
    "preview": "// Shared ActivityAttributes for Live Activities\n// This MUST be the single source of truth for both the main app and wi"
  },
  {
    "path": "examples/01-app-demos/geolocation-native-plugin/src/ios/plugin/Tests/PluginTests/PluginTests.swift",
    "chars": 310,
    "preview": "// Copyright 2019-2023 Tauri Programme within The Commons Conservancy\n// SPDX-License-Identifier: Apache-2.0\n// SPDX-Lic"
  },
  {
    "path": "examples/01-app-demos/geolocation-native-plugin/src/ios/widget/Package.swift",
    "chars": 1230,
    "preview": "// swift-tools-version:5.9\n// Widget Extension for displaying location permission status on lock screen\n//\n// IMPORTANT:"
  },
  {
    "path": "examples/01-app-demos/geolocation-native-plugin/src/ios/widget/Sources/LocationActivityAttributes.swift",
    "chars": 1690,
    "preview": "// Shared ActivityAttributes for Live Activities\n// This MUST be the single source of truth for both the main app and wi"
  },
  {
    "path": "examples/01-app-demos/geolocation-native-plugin/src/ios/widget/Sources/LocationWidget.swift",
    "chars": 14623,
    "preview": "// Widget Extension for Live Activity only\n// Note: Having multiple widgets in the same bundle can cause Live Activities"
  },
  {
    "path": "examples/01-app-demos/geolocation-native-plugin/src/main.rs",
    "chars": 11382,
    "preview": "//! A simple Dioxus app demonstrating how to build a native plugin using manganis.\n//!\n//! This example shows how to use"
  },
  {
    "path": "examples/01-app-demos/geolocation-native-plugin/src/plugin/error.rs",
    "chars": 1189,
    "preview": "// Copyright 2019-2023 Tauri Programme within The Commons Conservancy\n// SPDX-License-Identifier: Apache-2.0\n// SPDX-Lic"
  },
  {
    "path": "examples/01-app-demos/geolocation-native-plugin/src/plugin/mod.rs",
    "chars": 11622,
    "preview": "#![allow(non_snake_case)]\n// Copyright 2019-2023 Tauri Programme within The Commons Conservancy\n// SPDX-License-Identifi"
  },
  {
    "path": "examples/01-app-demos/geolocation-native-plugin/src/plugin/models.rs",
    "chars": 4585,
    "preview": "// Copyright 2019-2023 Tauri Programme within The Commons Conservancy\n// SPDX-License-Identifier: Apache-2.0\n// SPDX-Lic"
  },
  {
    "path": "examples/01-app-demos/hackernews/.gitignore",
    "chars": 13,
    "preview": "/static\n/dist"
  },
  {
    "path": "examples/01-app-demos/hackernews/Cargo.toml",
    "chars": 558,
    "preview": "[package]\nname = \"fullstack-hackernews-example\"\nversion = \"0.1.0\"\nauthors = [\"Evan Almloff <evanalmloff@gmail.com>\"]\nedi"
  },
  {
    "path": "examples/01-app-demos/hackernews/assets/hackernews.css",
    "chars": 298,
    "preview": "@keyframes spin {\n    0% {\n        transform: rotate(0deg);\n    }\n\n    100% {\n        transform: rotate(360deg);\n    }\n}"
  },
  {
    "path": "examples/01-app-demos/hackernews/src/main.rs",
    "chars": 6680,
    "preview": "#![allow(non_snake_case, unused)]\nuse dioxus::prelude::*;\n// Define the Hackernews API and types\nuse chrono::{DateTime, "
  },
  {
    "path": "examples/01-app-demos/hello_world.rs",
    "chars": 801,
    "preview": "//! The simplest example of a Dioxus app.\n//!\n//! In this example we:\n//! - import a number of important items from the "
  },
  {
    "path": "examples/01-app-demos/hotdog/.gitignore",
    "chars": 11,
    "preview": "hotdogdb/*\n"
  },
  {
    "path": "examples/01-app-demos/hotdog/Cargo.toml",
    "chars": 592,
    "preview": "[package]\nname = \"hotdog\"\nversion = \"0.1.0\"\nauthors = [\"Dioxus Labs\"]\nedition = \"2021\"\npublish = false\n\n[dependencies]\nd"
  },
  {
    "path": "examples/01-app-demos/hotdog/Dioxus.toml",
    "chars": 119,
    "preview": "[application]\n\n# App (Project) Name\nname = \"hot_dog\"\n\n[bundle]\nidentifier = \"com.dioxuslabs\"\npublisher = \"Dioxus Labs\"\n"
  },
  {
    "path": "examples/01-app-demos/hotdog/Dockerfile",
    "chars": 654,
    "preview": "FROM rust:1 AS chef\nRUN cargo install cargo-chef\nWORKDIR /app\n\nFROM chef AS planner\nCOPY . .\nRUN cargo chef prepare --re"
  },
  {
    "path": "examples/01-app-demos/hotdog/README.md",
    "chars": 303,
    "preview": "# Hot diggity dog!\n\nA Dioxus demo app for the new tutorial!\n\n![Demo](assets/screenshot.png)\n\n## To run\n\nMake sure you cd"
  },
  {
    "path": "examples/01-app-demos/hotdog/assets/main.css",
    "chars": 2591,
    "preview": "/* App-wide styling */\nhtml, body {\n    background-color: #0e0e0e;\n    color: white;\n    font-family: 'Segoe UI', Tahoma"
  },
  {
    "path": "examples/01-app-demos/hotdog/fly.toml",
    "chars": 533,
    "preview": "# fly.toml app configuration file generated for hot-dog on 2024-12-19T18:23:45-08:00\n#\n# See https://fly.io/docs/referen"
  },
  {
    "path": "examples/01-app-demos/hotdog/src/backend.rs",
    "chars": 1219,
    "preview": "use anyhow::Result;\nuse dioxus::prelude::*;\n\n#[cfg(feature = \"server\")]\nthread_local! {\n    static DB: std::sync::LazyLo"
  },
  {
    "path": "examples/01-app-demos/hotdog/src/frontend.rs",
    "chars": 1889,
    "preview": "use dioxus::prelude::*;\nuse serde::{Deserialize, Serialize};\n\nuse crate::{\n    backend::{list_dogs, remove_dog, save_dog"
  },
  {
    "path": "examples/01-app-demos/hotdog/src/main.rs",
    "chars": 487,
    "preview": "mod backend;\nmod frontend;\n\nuse dioxus::prelude::*;\nuse frontend::*;\n\n#[derive(Routable, PartialEq, Clone)]\nenum Route {"
  },
  {
    "path": "examples/01-app-demos/image_generator_openai.rs",
    "chars": 3509,
    "preview": "use dioxus::prelude::*;\n\nfn main() {\n    dioxus::launch(app)\n}\n\nfn app() -> Element {\n    let mut api_key = use_signal(|"
  },
  {
    "path": "examples/01-app-demos/repo_readme.rs",
    "chars": 709,
    "preview": "//! The example from the readme!\n//!\n//! This example demonstrates how to create a simple counter app with dioxus. The `"
  },
  {
    "path": "examples/01-app-demos/todomvc.rs",
    "chars": 9086,
    "preview": "//! The typical TodoMVC app, implemented in Dioxus.\n\nuse dioxus::prelude::*;\nuse std::collections::HashMap;\n\nconst STYLE"
  },
  {
    "path": "examples/01-app-demos/todomvc_store.rs",
    "chars": 10494,
    "preview": "//! The typical TodoMVC app, implemented in Dioxus with stores. Stores let us\n//! share nested reactive state between co"
  },
  {
    "path": "examples/01-app-demos/weather_app.rs",
    "chars": 10062,
    "preview": "#![allow(non_snake_case)]\n\nuse dioxus::{fullstack::Loading, prelude::*};\nuse serde::{Deserialize, Serialize};\nuse std::f"
  },
  {
    "path": "examples/01-app-demos/websocket_chat.rs",
    "chars": 5520,
    "preview": "//! A websocket chat demo using Dioxus' built-in websocket support.\n//!\n//! We setup an endpoint at `/api/chat` that acc"
  },
  {
    "path": "examples/02-building-ui/disabled.rs",
    "chars": 747,
    "preview": "//! A simple demonstration of how to set attributes on buttons to disable them.\n//!\n//! This example also showcases the "
  },
  {
    "path": "examples/02-building-ui/nested_listeners.rs",
    "chars": 842,
    "preview": "//! Nested Listeners\n//!\n//! This example showcases how to control event bubbling from child to parents.\n//!\n//! Both we"
  },
  {
    "path": "examples/02-building-ui/svg.rs",
    "chars": 2033,
    "preview": "//! Thanks to @japsu and their project https://github.com/japsu/jatsi for the example!\n//!\n//! This example shows how to"
  },
  {
    "path": "examples/03-assets-styling/css_modules.rs",
    "chars": 949,
    "preview": "//! This example shows how to use css modules with the `css_module` macro. Css modules convert css\n//! class names to un"
  },
  {
    "path": "examples/03-assets-styling/custom_assets.rs",
    "chars": 649,
    "preview": "//! A simple example on how to use assets loading from the filesystem.\n//!\n//! Dioxus provides the asset!() macro which "
  },
  {
    "path": "examples/03-assets-styling/dynamic_assets.rs",
    "chars": 1034,
    "preview": "//! This example shows how to load in custom assets with the use_asset_handler hook.\n//!\n//! This hook is currently only"
  },
  {
    "path": "examples/03-assets-styling/meta.rs",
    "chars": 1031,
    "preview": "//! This example shows how to add metadata to the page with the Meta component\n\nuse dioxus::prelude::*;\n\nfn main() {\n   "
  },
  {
    "path": "examples/03-assets-styling/meta_elements.rs",
    "chars": 816,
    "preview": "//! This example shows how to add metadata to the page with the Meta component\n\nuse dioxus::prelude::*;\n\nfn main() {\n   "
  },
  {
    "path": "examples/04-managing-state/context_api.rs",
    "chars": 2085,
    "preview": "//! Demonstrates cross-component state sharing using Dioxus' Context API\n//!\n//! Features:\n//! - Context provider initia"
  },
  {
    "path": "examples/04-managing-state/error_handling.rs",
    "chars": 4613,
    "preview": "//! This example showcases how to use the ErrorBoundary component to handle errors in your app.\n//!\n//! The ErrorBoundar"
  },
  {
    "path": "examples/04-managing-state/global.rs",
    "chars": 1613,
    "preview": "//! Example: Global signals and memos\n//!\n//! This example demonstrates how to use global signals and memos to share sta"
  },
  {
    "path": "examples/04-managing-state/memo_chain.rs",
    "chars": 1399,
    "preview": "//! This example shows how you can chain memos together to create a tree of memoized values.\n//!\n//! Memos will also pau"
  },
  {
    "path": "examples/04-managing-state/reducer.rs",
    "chars": 1492,
    "preview": "//! Example: Reducer Pattern\n//! -----------------\n//!\n//! This example shows how to encapsulate state in dioxus compone"
  },
  {
    "path": "examples/04-managing-state/signals.rs",
    "chars": 3161,
    "preview": "//! A simple example demonstrating how to use signals to modify state from several different places.\n//!\n//! This simple"
  },
  {
    "path": "examples/05-using-async/backgrounded_futures.rs",
    "chars": 1775,
    "preview": "//! Backgrounded futures example\n//!\n//! This showcases how use_future, use_memo, and use_effect will stop running if th"
  },
  {
    "path": "examples/05-using-async/clock.rs",
    "chars": 1117,
    "preview": "//! A simple little clock that updates the time every few milliseconds.\n\nuse async_std::task::sleep;\nuse dioxus::prelude"
  },
  {
    "path": "examples/05-using-async/future.rs",
    "chars": 1681,
    "preview": "//! A simple example that shows how to use the use_future hook to run a background task.\n//!\n//! use_future won't return"
  },
  {
    "path": "examples/05-using-async/streams.rs",
    "chars": 963,
    "preview": "//! Handle async streams using use_future and awaiting the next value.\n\nuse async_std::task::sleep;\nuse dioxus::prelude:"
  },
  {
    "path": "examples/05-using-async/suspense.rs",
    "chars": 2175,
    "preview": "//! Suspense in Dioxus\n//!\n//! Suspense allows components to bubble up loading states to parent components, simplifying "
  },
  {
    "path": "examples/06-routing/flat_router.rs",
    "chars": 2436,
    "preview": "//! This example shows how to use the `Router` component to create a simple navigation system.\n//! The more complex rout"
  },
  {
    "path": "examples/06-routing/hash_fragment_state.rs",
    "chars": 3713,
    "preview": "//! This example shows how to use the hash segment to store state in the url.\n//!\n//! You can set up two way data bindin"
  },
  {
    "path": "examples/06-routing/link.rs",
    "chars": 2090,
    "preview": "//! How to use links in Dioxus\n//!\n//! The `router` crate gives us a `Link` component which is a much more powerful vers"
  },
  {
    "path": "examples/06-routing/query_segment_search.rs",
    "chars": 3659,
    "preview": "//! This example shows how to access and use query segments present in an url on the web.\n//!\n//! The enum router makes "
  },
  {
    "path": "examples/06-routing/router.rs",
    "chars": 3657,
    "preview": "//! An advanced usage of the router with nested routes and redirects.\n//!\n//! Dioxus implements an enum-based router, wh"
  },
  {
    "path": "examples/06-routing/router_resource.rs",
    "chars": 1435,
    "preview": "//! Example: Updating components with use_resource\n//! -----------------\n//!\n//! This example shows how to use ReadSigna"
  },
  {
    "path": "examples/06-routing/router_restore_scroll.rs",
    "chars": 1626,
    "preview": "use std::rc::Rc;\n\nuse dioxus::html::geometry::PixelsVector2D;\nuse dioxus::prelude::*;\n\n#[derive(Clone, Routable, Debug, "
  },
  {
    "path": "examples/06-routing/simple_router.rs",
    "chars": 1817,
    "preview": "//! A simple example of a router with a few routes and a nav bar.\n\nuse dioxus::prelude::*;\n\nfn main() {\n    // launch th"
  },
  {
    "path": "examples/07-fullstack/auth/Cargo.toml",
    "chars": 1500,
    "preview": "[package]\nname = \"fullstack-auth-example\"\nversion = \"0.1.0\"\nedition = \"2021\"\npublish = false\n\n\n# See more keys and their"
  },
  {
    "path": "examples/07-fullstack/auth/src/auth.rs",
    "chars": 2329,
    "preview": "//! The code here is pulled from the `axum-session-auth` crate examples, requiring little to no\n//! modification to work"
  },
  {
    "path": "examples/07-fullstack/auth/src/main.rs",
    "chars": 6173,
    "preview": "//! This example showcases how to use the `axum-session-auth` crate with Dioxus fullstack.\n//! We add the `auth::Session"
  },
  {
    "path": "examples/07-fullstack/custom_axum_serve.rs",
    "chars": 2081,
    "preview": "//! This example demonstrates how to use `dioxus::serve` with a custom Axum router.\n//!\n//! By default, `dioxus::launch`"
  },
  {
    "path": "examples/07-fullstack/custom_error_page.rs",
    "chars": 2814,
    "preview": "//! To render custom error pages, you can create a layout component that captures errors from routes\n//! with an `ErrorB"
  },
  {
    "path": "examples/07-fullstack/desktop/Cargo.toml",
    "chars": 288,
    "preview": "[package]\nname = \"fullstack-desktop-example\"\nversion = \"0.1.0\"\nedition = \"2021\"\npublish = false\n\n[dependencies]\ndioxus ="
  },
  {
    "path": "examples/07-fullstack/desktop/src/main.rs",
    "chars": 1238,
    "preview": "#![allow(non_snake_case)]\nuse dioxus::prelude::*;\n\nfn main() {\n    // Make sure to set the url of the server where serve"
  },
  {
    "path": "examples/07-fullstack/dog_app_self_hosted.rs",
    "chars": 1786,
    "preview": "//! This example showcases a fullstack variant of the \"dog app\" demo, but with the loader and actions\n//! self-hosted in"
  },
  {
    "path": "examples/07-fullstack/full_request_access.rs",
    "chars": 1074,
    "preview": "//! This example shows how to get access to the full axum request in a handler.\n//!\n//! The extra arguments in the `post"
  },
  {
    "path": "examples/07-fullstack/fullstack_hello_world.rs",
    "chars": 781,
    "preview": "//! A simple example using Dioxus Fullstack to call a server action.\n//!\n//! the `get`, `post`, `put`, `delete`, etc mac"
  },
  {
    "path": "examples/07-fullstack/handling_errors.rs",
    "chars": 7595,
    "preview": "//! An example of handling errors from server functions.\n//!\n//! This example showcases a few important error handling p"
  },
  {
    "path": "examples/07-fullstack/header_map.rs",
    "chars": 1226,
    "preview": "//! This example shows how you can extract a HeaderMap from requests to read custom headers.\n//!\n//! The extra arguments"
  },
  {
    "path": "examples/07-fullstack/hello-world/Cargo.toml",
    "chars": 520,
    "preview": "[package]\nname = \"fullstack-hello-world-example\"\nversion = \"0.1.0\"\nedition = \"2021\"\npublish = false\n\n# See more keys and"
  },
  {
    "path": "examples/07-fullstack/hello-world/assets/hello.css",
    "chars": 35,
    "preview": "h1 {\n    font-family: monospace;\n}\n"
  },
  {
    "path": "examples/07-fullstack/hello-world/src/main.rs",
    "chars": 1889,
    "preview": "//! A simple hello world example for Dioxus fullstack\n//!\n//! Run with:\n//!\n//! ```sh\n//! dx serve --web\n//! ```\n//!\n//!"
  },
  {
    "path": "examples/07-fullstack/login_form.rs",
    "chars": 4015,
    "preview": "//! This example demonstrates how to use types like `Form`, `SetHeader`, and `TypedHeader`\n//! to create a simple login "
  },
  {
    "path": "examples/07-fullstack/middleware.rs",
    "chars": 1937,
    "preview": "//! This example shows how to use middleware in a fullstack Dioxus app.\n//!\n//! Dioxus supports two ways of middleware:\n"
  },
  {
    "path": "examples/07-fullstack/multipart_form.rs",
    "chars": 2774,
    "preview": "//! This example showcases how to handle multipart form data uploads in Dioxus.\n//!\n//! Dioxus provides the `MultipartFo"
  },
  {
    "path": "examples/07-fullstack/query_params.rs",
    "chars": 1773,
    "preview": "//! An example showcasing query parameters in Dioxus Fullstack server functions.\n//!\n//! The query parameter syntax most"
  },
  {
    "path": "examples/07-fullstack/redirect.rs",
    "chars": 1202,
    "preview": "//! This example shows how to use the axum `Redirect` type to redirect the client to a different URL.\n//!\n//! On the web"
  },
  {
    "path": "examples/07-fullstack/router/Cargo.toml",
    "chars": 521,
    "preview": "[package]\nname = \"fullstack-router-example\"\nversion = \"0.1.0\"\nedition = \"2021\"\npublish = false\n\n# See more keys and thei"
  },
  {
    "path": "examples/07-fullstack/router/src/main.rs",
    "chars": 2089,
    "preview": "//! Run with:\n//!\n//! ```sh\n//! dx serve --platform web\n//! ```\n\nuse dioxus::prelude::*;\n\nfn main() {\n    dioxus::Launch"
  },
  {
    "path": "examples/07-fullstack/server_functions.rs",
    "chars": 13127,
    "preview": "//! This example is a simple showcase of Dioxus Server Functions.\n//!\n//! The other examples in this folder showcase adv"
  },
  {
    "path": "examples/07-fullstack/server_sent_events.rs",
    "chars": 3688,
    "preview": "//! This example demonstrates server-sent events (SSE) using Dioxus Fullstack.\n//!\n//! Server-sent events allow the serv"
  },
  {
    "path": "examples/07-fullstack/server_state.rs",
    "chars": 5995,
    "preview": "//! This example shows how to use global state to maintain state between server functions.\n\nuse std::rc::Rc;\n\nuse axum_c"
  },
  {
    "path": "examples/07-fullstack/ssr-only/Cargo.toml",
    "chars": 228,
    "preview": "[package]\nname = \"ssr-only\"\nedition = \"2024\"\nversion.workspace = true\npublish = false\n\n[dependencies]\ndioxus = { workspa"
  },
  {
    "path": "examples/07-fullstack/ssr-only/src/main.rs",
    "chars": 1722,
    "preview": "//! This example showcases how to use Fullstack in a server-side rendering only context.\n//!\n//! This means we have no c"
  },
  {
    "path": "examples/07-fullstack/streaming.rs",
    "chars": 4879,
    "preview": "//! This example shows how to use the `Streaming<T, E>` type to send streaming responses from the\n//! server to the clie"
  },
  {
    "path": "examples/07-fullstack/streaming_file_upload.rs",
    "chars": 7608,
    "preview": "//! This example showcases how to upload files from the client to the server.\n//!\n//! We can use the `FileStream` type t"
  },
  {
    "path": "examples/07-fullstack/through_reqwest.rs",
    "chars": 1495,
    "preview": "//! This example demonstrates that dioxus server functions can be called directly as a Rust\n//! function or via an HTTP "
  },
  {
    "path": "examples/07-fullstack/websocket.rs",
    "chars": 3595,
    "preview": "//! This example showcases the built-in websocket functionality in Dioxus Fullstack.\n//!\n//! We can create a new websock"
  },
  {
    "path": "examples/08-apis/control_focus.rs",
    "chars": 1830,
    "preview": "//! Managing focus\n//!\n//! This example shows how to manage focus in a Dioxus application. We implement a \"roulette\" tha"
  },
  {
    "path": "examples/08-apis/custom_html.rs",
    "chars": 769,
    "preview": "//! This example shows how to use a custom index.html and custom <HEAD> extensions\n//! to add things like stylesheets, s"
  },
  {
    "path": "examples/08-apis/custom_menu.rs",
    "chars": 1569,
    "preview": "//! This example shows how to use a custom menu bar with Dioxus desktop.\n//! This example is not supported on the mobile"
  },
  {
    "path": "examples/08-apis/drag_and_drop.rs",
    "chars": 4339,
    "preview": "//! This example shows how to implement a simple drag-and-drop kanban board using Dioxus.\n//! You can drag items between"
  },
  {
    "path": "examples/08-apis/eval.rs",
    "chars": 1747,
    "preview": "//! This example shows how to use the `eval` function to run JavaScript code in the webview.\n//!\n//! Eval will only work"
  },
  {
    "path": "examples/08-apis/file_upload.rs",
    "chars": 3044,
    "preview": "//! This example shows how to use the `file` methods on FormEvent and DragEvent to handle file uploads and drops.\n//!\n//"
  },
  {
    "path": "examples/08-apis/form.rs",
    "chars": 6057,
    "preview": "//! Forms\n//!\n//! Dioxus forms deviate slightly from html, automatically returning all named inputs\n//! in the \"values\" "
  },
  {
    "path": "examples/08-apis/logging.rs",
    "chars": 1996,
    "preview": "//! Dioxus ships out-of-the-box with tracing hooks that integrate with the Dioxus-CLI.\n//!\n//! The built-in tracing-subs"
  },
  {
    "path": "examples/08-apis/multiwindow.rs",
    "chars": 786,
    "preview": "//! Multiwindow example\n//!\n//! This example shows how to implement a simple multiwindow application using dioxus.\n//! T"
  },
  {
    "path": "examples/08-apis/multiwindow_with_tray_icon.rs",
    "chars": 1329,
    "preview": "//! Multiwindow with tray icon example\n//!\n//! This example shows how to implement a simple multiwindow application and "
  },
  {
    "path": "examples/08-apis/on_resize.rs",
    "chars": 793,
    "preview": "//! Run a callback\n//!\n//! Whenever an Element is finally mounted to the Dom, its data is available to be read.\n//! Thes"
  },
  {
    "path": "examples/08-apis/on_visible.rs",
    "chars": 3589,
    "preview": "//! Port of the https://codepen.io/ryanfinni/pen/VwZeGxN example\n\nuse dioxus::prelude::*;\n\nfn main() {\n    dioxus::launc"
  },
  {
    "path": "examples/08-apis/overlay.rs",
    "chars": 1906,
    "preview": "//! This example demonstrates how to create an overlay window with dioxus.\n//!\n//! Basically, we just create a new windo"
  },
  {
    "path": "examples/08-apis/read_size.rs",
    "chars": 1265,
    "preview": "//! Read the size of elements using the MountedData struct.\n//!\n//! Whenever an Element is finally mounted to the Dom, i"
  },
  {
    "path": "examples/08-apis/scroll_to_offset.rs",
    "chars": 1805,
    "preview": "//! Scroll elements using their MountedData\n//!\n//! Dioxus exposes a few helpful APIs around elements (mimicking the DOM"
  },
  {
    "path": "examples/08-apis/scroll_to_top.rs",
    "chars": 1085,
    "preview": "//! Scroll elements using their MountedData\n//!\n//! Dioxus exposes a few helpful APIs around elements (mimicking the DOM"
  },
  {
    "path": "examples/08-apis/shortcut.rs",
    "chars": 768,
    "preview": "//! Add global shortcuts to your app while a component is active\n//!\n//! This demo shows how to add a global shortcut to"
  },
  {
    "path": "examples/08-apis/ssr.rs",
    "chars": 1097,
    "preview": "//! Example: SSR\n//!\n//! This example shows how we can render the Dioxus Virtualdom using SSR.\n//! Dioxus' SSR is quite "
  },
  {
    "path": "examples/08-apis/title.rs",
    "chars": 640,
    "preview": "//! This example shows how to set the title of the page or window with the Title component\n\nuse dioxus::prelude::*;\n\nfn "
  },
  {
    "path": "examples/08-apis/video_stream.rs",
    "chars": 7609,
    "preview": "//! Using `wry`'s http module, we can stream a video file from the local file system.\n//!\n//! You could load in any file"
  },
  {
    "path": "examples/08-apis/wgpu_child_window.rs",
    "chars": 8130,
    "preview": "//! Demonstrate how to use dioxus as a child window for use in alternative renderers like wgpu.\n//!\n//! The code here is"
  },
  {
    "path": "examples/08-apis/window_event.rs",
    "chars": 4655,
    "preview": "//! This example demonstrates how to handle window events and change window properties.\n//!\n//! We're able to do things "
  },
  {
    "path": "examples/08-apis/window_focus.rs",
    "chars": 1208,
    "preview": "//! Listen for window focus events using a wry event handler\n//!\n//! This example shows how to use the use_wry_event_han"
  },
  {
    "path": "examples/08-apis/window_popup.rs",
    "chars": 2117,
    "preview": "//! This example shows how to create a popup window and send data back to the parent window.\n//! Currently Dioxus doesn'"
  },
  {
    "path": "examples/08-apis/window_zoom.rs",
    "chars": 767,
    "preview": "//! Adjust the zoom of a desktop app\n//!\n//! This example shows how to adjust the zoom of a desktop app using the webvie"
  },
  {
    "path": "examples/09-reference/all_events.rs",
    "chars": 2727,
    "preview": "//! This example shows how to listen to all events on a div and log them to the console.\n//!\n//! The primary demonstrati"
  },
  {
    "path": "examples/09-reference/generic_component.rs",
    "chars": 745,
    "preview": "//! This example demonstrates how to create a generic component in Dioxus.\n//!\n//! Generic components can be useful when"
  },
  {
    "path": "examples/09-reference/optional_props.rs",
    "chars": 1742,
    "preview": "//! Optional props\n//!\n//! This example demonstrates how to use optional props in your components. The `Button` componen"
  },
  {
    "path": "examples/09-reference/rsx_usage.rs",
    "chars": 10583,
    "preview": "//! A tour of the rsx! macro\n//! ------------------------\n//!\n//! This example serves as an informal quick reference of "
  },
  {
    "path": "examples/09-reference/shorthand.rs",
    "chars": 1045,
    "preview": "//! Dioxus supports shorthand syntax for creating elements and components.\n\nuse dioxus::prelude::*;\n\nfn main() {\n    dio"
  },
  {
    "path": "examples/09-reference/simple_list.rs",
    "chars": 1014,
    "preview": "//! A few ways of mapping elements into rsx! syntax\n//!\n//! Rsx allows anything that's an iterator where the output type"
  },
  {
    "path": "examples/09-reference/spread.rs",
    "chars": 1112,
    "preview": "//! This example demonstrates how to use the spread operator to pass attributes to child components.\n//!\n//! This lets c"
  },
  {
    "path": "examples/09-reference/web_component.rs",
    "chars": 940,
    "preview": "//! Dioxus allows webcomponents to be created with a simple syntax.\n//!\n//! Read more about webcomponents [here](https:/"
  },
  {
    "path": "examples/09-reference/xss_safety.rs",
    "chars": 540,
    "preview": "//! XSS Safety\n//!\n//! This example proves that Dioxus is safe from XSS attacks.\n\nuse dioxus::prelude::*;\n\nfn main() {\n "
  },
  {
    "path": "examples/10-integrations/bevy/Cargo.toml",
    "chars": 379,
    "preview": "[package]\nname = \"bevy-example\"\nversion = \"0.0.0\"\nedition = \"2021\"\nlicense = \"MIT\"\npublish = false\n\n[features]\ntracing ="
  },
  {
    "path": "examples/10-integrations/bevy/src/bevy_renderer.rs",
    "chars": 6071,
    "preview": "use crate::bevy_scene_plugin::BevyScenePlugin;\nuse bevy::{\n    camera::{ManualTextureViewHandle, RenderTarget},\n    prel"
  },
  {
    "path": "examples/10-integrations/bevy/src/bevy_scene_plugin.rs",
    "chars": 2340,
    "preview": "use crate::bevy_renderer::UIData;\nuse bevy::prelude::*;\n\n#[derive(Component)]\npub struct DynamicColoredCube;\n\npub struct"
  },
  {
    "path": "examples/10-integrations/bevy/src/demo_renderer.rs",
    "chars": 2278,
    "preview": "use crate::bevy_renderer::BevyRenderer;\nuse crate::Color;\nuse dioxus_native::{CustomPaintCtx, CustomPaintSource, DeviceH"
  },
  {
    "path": "examples/10-integrations/bevy/src/main.rs",
    "chars": 2864,
    "preview": "use std::any::Any;\n\nuse color::{palette::css::WHITE, parse_color};\nuse color::{OpaqueColor, Srgb};\nuse demo_renderer::{D"
  },
  {
    "path": "examples/10-integrations/bevy/src/styles.css",
    "chars": 938,
    "preview": "* {\n    box-sizing: border-box;\n}\n\nhtml, body, main {\n    height: 100%;\n    font-family: system-ui, sans;\n    margin: 0;"
  },
  {
    "path": "examples/10-integrations/native-headless/Cargo.toml",
    "chars": 763,
    "preview": "[package]\nname = \"native-headless\"\nversion = \"0.0.0\"\nedition = \"2021\"\nlicense = \"MIT\"\npublish = false\n\n[features]\ntracin"
  },
  {
    "path": "examples/10-integrations/native-headless/src/main.rs",
    "chars": 5438,
    "preview": "//! A \"sketch\" of how to integrate a Dioxus Native app to into a wider application\n//! by rendering the UI to a texture "
  },
  {
    "path": "examples/10-integrations/native-headless-in-bevy/Cargo.toml",
    "chars": 1087,
    "preview": "# Copyright © SixtyFPS GmbH <info@slint.dev>\n# SPDX-License-Identifier: MIT\n\n[package]\nname = \"native-headless-in-bevy\"\n"
  }
]

// ... and 1135 more files (download for full content)

About this extraction

This page contains the full source code of the DioxusLabs/dioxus GitHub repository, extracted and formatted as plain text for AI agents and large language models (LLMs). The extraction includes 1335 files (6.4 MB), approximately 1.7M tokens, and a symbol index with 8492 extracted functions, classes, methods, constants, and types. Use this with OpenClaw, Claude, ChatGPT, Cursor, Windsurf, or any other AI tool that accepts text input. You can copy the full output to your clipboard or download it as a .txt file.

Extracted by GitExtract — free GitHub repo to text converter for AI. Built by Nikandr Surkov.

Copied to clipboard!