gitextract_qt3yaq80/ ├── .editorconfig ├── .github/ │ ├── CODEOWNERS │ ├── FUNDING.yml │ ├── ISSUE_TEMPLATE/ │ │ ├── config.yml │ │ └── issue-form.yml │ ├── copilot-instructions.md │ ├── pull_request_template.md │ └── workflows/ │ ├── .hatch-run.yml │ ├── check.yml │ ├── codeql-analysis.yml │ └── publish.yml ├── .gitignore ├── .pre-commit-config.yaml ├── .prettierrc ├── CHANGELOG.md ├── CODE_OF_CONDUCT.md ├── LICENSE ├── README.md ├── docs/ │ ├── .gitignore │ ├── Dockerfile │ ├── README.md │ ├── docs_app/ │ │ ├── __init__.py │ │ ├── app.py │ │ ├── dev.py │ │ ├── examples.py │ │ └── prod.py │ ├── main.py │ ├── pyproject.toml │ └── source/ │ ├── _custom_js/ │ │ ├── README.md │ │ ├── bun.lockb │ │ ├── package.json │ │ ├── rollup.config.js │ │ └── src/ │ │ └── index.js │ ├── _exts/ │ │ ├── async_doctest.py │ │ ├── autogen_api_docs.py │ │ ├── build_custom_js.py │ │ ├── copy_vdom_json_schema.py │ │ ├── custom_autosectionlabel.py │ │ ├── patched_html_translator.py │ │ ├── reactpy_example.py │ │ └── reactpy_view.py │ ├── _static/ │ │ └── css/ │ │ ├── furo-theme-overrides.css │ │ ├── larger-api-margins.css │ │ ├── larger-headings.css │ │ ├── reactpy-view.css │ │ ├── sphinx-design-overrides.css │ │ └── widget-output-css-overrides.css │ ├── about/ │ │ ├── changelog.rst │ │ ├── contributor-guide.rst │ │ └── credits-and-licenses.rst │ ├── conf.py │ ├── guides/ │ │ ├── adding-interactivity/ │ │ │ ├── components-with-state/ │ │ │ │ ├── _examples/ │ │ │ │ │ ├── adding_state_variable/ │ │ │ │ │ │ ├── data.json │ │ │ │ │ │ └── main.py │ │ │ │ │ ├── isolated_state/ │ │ │ │ │ │ ├── data.json │ │ │ │ │ │ └── main.py │ │ │ │ │ ├── multiple_state_variables/ │ │ │ │ │ │ ├── data.json │ │ │ │ │ │ └── main.py │ │ │ │ │ └── when_variables_are_not_enough/ │ │ │ │ │ ├── data.json │ │ │ │ │ └── main.py │ │ │ │ └── index.rst │ │ │ ├── dangers-of-mutability/ │ │ │ │ ├── _examples/ │ │ │ │ │ ├── dict_remove.py │ │ │ │ │ ├── dict_update.py │ │ │ │ │ ├── list_insert.py │ │ │ │ │ ├── list_re_order.py │ │ │ │ │ ├── list_remove.py │ │ │ │ │ ├── list_replace.py │ │ │ │ │ ├── moving_dot.py │ │ │ │ │ ├── moving_dot_broken.py │ │ │ │ │ ├── set_remove.py │ │ │ │ │ └── set_update.py │ │ │ │ └── index.rst │ │ │ ├── index.rst │ │ │ ├── multiple-state-updates/ │ │ │ │ ├── _examples/ │ │ │ │ │ ├── delay_before_count_updater.py │ │ │ │ │ ├── delay_before_set_count.py │ │ │ │ │ ├── set_color_3_times.py │ │ │ │ │ └── set_state_function.py │ │ │ │ └── index.rst │ │ │ ├── responding-to-events/ │ │ │ │ ├── _examples/ │ │ │ │ │ ├── audio_player.py │ │ │ │ │ ├── button_async_handlers.py │ │ │ │ │ ├── button_does_nothing.py │ │ │ │ │ ├── button_handler_as_arg.py │ │ │ │ │ ├── button_prints_event.py │ │ │ │ │ ├── button_prints_message.py │ │ │ │ │ ├── prevent_default_event_actions.py │ │ │ │ │ └── stop_event_propagation.py │ │ │ │ └── index.rst │ │ │ └── state-as-a-snapshot/ │ │ │ ├── _examples/ │ │ │ │ ├── delayed_print_after_set.py │ │ │ │ ├── print_chat_message.py │ │ │ │ ├── print_count_after_set.py │ │ │ │ ├── send_message.py │ │ │ │ └── set_counter_3_times.py │ │ │ └── index.rst │ │ ├── creating-interfaces/ │ │ │ ├── html-with-reactpy/ │ │ │ │ └── index.rst │ │ │ ├── index.rst │ │ │ ├── rendering-data/ │ │ │ │ ├── _examples/ │ │ │ │ │ ├── sorted_and_filtered_todo_list.py │ │ │ │ │ ├── todo_from_list.py │ │ │ │ │ └── todo_list_with_keys.py │ │ │ │ └── index.rst │ │ │ └── your-first-components/ │ │ │ ├── _examples/ │ │ │ │ ├── bad_conditional_todo_list.py │ │ │ │ ├── good_conditional_todo_list.py │ │ │ │ ├── nested_photos.py │ │ │ │ ├── parametrized_photos.py │ │ │ │ ├── simple_photo.py │ │ │ │ ├── todo_list.py │ │ │ │ ├── wrap_in_div.py │ │ │ │ └── wrap_in_fragment.py │ │ │ └── index.rst │ │ ├── escape-hatches/ │ │ │ ├── _examples/ │ │ │ │ ├── material_ui_button_no_action.py │ │ │ │ ├── material_ui_button_on_click.py │ │ │ │ └── super_simple_chart/ │ │ │ │ ├── main.py │ │ │ │ └── super-simple-chart.js │ │ │ ├── distributing-javascript.rst │ │ │ ├── index.rst │ │ │ ├── javascript-components.rst │ │ │ ├── using-a-custom-backend.rst │ │ │ └── using-a-custom-client.rst │ │ ├── getting-started/ │ │ │ ├── _examples/ │ │ │ │ ├── debug_error_example.py │ │ │ │ ├── hello_world.py │ │ │ │ ├── run_fastapi.py │ │ │ │ ├── run_flask.py │ │ │ │ ├── run_sanic.py │ │ │ │ ├── run_starlette.py │ │ │ │ ├── run_tornado.py │ │ │ │ └── sample_app.py │ │ │ ├── _static/ │ │ │ │ ├── embed-doc-ex.html │ │ │ │ └── embed-reactpy-view/ │ │ │ │ ├── index.html │ │ │ │ └── main.py │ │ │ ├── index.rst │ │ │ ├── installing-reactpy.rst │ │ │ └── running-reactpy.rst │ │ ├── managing-state/ │ │ │ ├── combining-contexts-and-reducers/ │ │ │ │ └── index.rst │ │ │ ├── deeply-sharing-state-with-contexts/ │ │ │ │ └── index.rst │ │ │ ├── how-to-structure-state/ │ │ │ │ └── index.rst │ │ │ ├── index.rst │ │ │ ├── sharing-component-state/ │ │ │ │ ├── _examples/ │ │ │ │ │ ├── filterable_list/ │ │ │ │ │ │ ├── data.json │ │ │ │ │ │ └── main.py │ │ │ │ │ └── synced_inputs/ │ │ │ │ │ └── main.py │ │ │ │ └── index.rst │ │ │ ├── simplifying-updates-with-reducers/ │ │ │ │ └── index.rst │ │ │ └── when-and-how-to-reset-state/ │ │ │ └── index.rst │ │ └── understanding-reactpy/ │ │ ├── index.rst │ │ ├── layout-render-servers.rst │ │ ├── representing-html.rst │ │ ├── the-rendering-pipeline.rst │ │ ├── the-rendering-process.rst │ │ ├── what-are-components.rst │ │ ├── why-reactpy-needs-keys.rst │ │ └── writing-tests.rst │ ├── index.rst │ └── reference/ │ ├── _examples/ │ │ ├── character_movement/ │ │ │ └── main.py │ │ ├── click_count.py │ │ ├── material_ui_switch.py │ │ ├── matplotlib_plot.py │ │ ├── network_graph.py │ │ ├── pigeon_maps.py │ │ ├── simple_dashboard.py │ │ ├── slideshow.py │ │ ├── snake_game.py │ │ ├── todo.py │ │ ├── use_reducer_counter.py │ │ ├── use_state_counter.py │ │ └── victory_chart.py │ ├── _static/ │ │ └── vdom-json-schema.json │ ├── browser-events.rst │ ├── hooks-api.rst │ ├── html-attributes.rst │ ├── javascript-api.rst │ └── specifications.rst ├── pyproject.toml ├── src/ │ ├── build_scripts/ │ │ ├── build_js_app.py │ │ ├── build_js_client.py │ │ ├── build_js_event_to_object.py │ │ ├── clean_js_dir.py │ │ ├── copy_dir.py │ │ ├── delete_old_coverage.py │ │ └── install_playwright.py │ ├── js/ │ │ ├── .gitignore │ │ ├── bun.lockb │ │ ├── eslint.config.mjs │ │ ├── package.json │ │ ├── packages/ │ │ │ ├── @reactpy/ │ │ │ │ ├── app/ │ │ │ │ │ ├── bun.lockb │ │ │ │ │ ├── package.json │ │ │ │ │ ├── src/ │ │ │ │ │ │ ├── index.ts │ │ │ │ │ │ ├── preact-dom.ts │ │ │ │ │ │ ├── preact-jsx-runtime.ts │ │ │ │ │ │ └── preact.ts │ │ │ │ │ └── tsconfig.json │ │ │ │ └── client/ │ │ │ │ ├── README.md │ │ │ │ ├── bun.lockb │ │ │ │ ├── package.json │ │ │ │ ├── src/ │ │ │ │ │ ├── bind.tsx │ │ │ │ │ ├── client.ts │ │ │ │ │ ├── components.tsx │ │ │ │ │ ├── index.ts │ │ │ │ │ ├── logger.ts │ │ │ │ │ ├── mount.tsx │ │ │ │ │ ├── types.ts │ │ │ │ │ ├── vdom.tsx │ │ │ │ │ └── websocket.ts │ │ │ │ └── tsconfig.json │ │ │ └── event-to-object/ │ │ │ ├── README.md │ │ │ ├── bun.lockb │ │ │ ├── package.json │ │ │ ├── src/ │ │ │ │ └── index.ts │ │ │ ├── tests/ │ │ │ │ ├── event-to-object.test.ts │ │ │ │ └── tooling/ │ │ │ │ ├── check.ts │ │ │ │ ├── mock.ts │ │ │ │ └── setup.js │ │ │ ├── tsconfig.json │ │ │ └── vitest.config.ts │ │ └── tsconfig.json │ └── reactpy/ │ ├── __init__.py │ ├── _console/ │ │ ├── __init__.py │ │ ├── ast_utils.py │ │ ├── cli.py │ │ ├── rewrite_keys.py │ │ └── rewrite_props.py │ ├── _html.py │ ├── _option.py │ ├── _warnings.py │ ├── config.py │ ├── core/ │ │ ├── __init__.py │ │ ├── _f_back.py │ │ ├── _life_cycle_hook.py │ │ ├── _thread_local.py │ │ ├── component.py │ │ ├── events.py │ │ ├── hooks.py │ │ ├── layout.py │ │ ├── serve.py │ │ └── vdom.py │ ├── executors/ │ │ ├── __init__.py │ │ ├── asgi/ │ │ │ ├── __init__.py │ │ │ ├── middleware.py │ │ │ ├── pyscript.py │ │ │ ├── standalone.py │ │ │ └── types.py │ │ ├── pyscript/ │ │ │ ├── __init__.py │ │ │ ├── component_template.py │ │ │ ├── components.py │ │ │ ├── layout_handler.py │ │ │ └── utils.py │ │ └── utils.py │ ├── logging.py │ ├── py.typed │ ├── reactjs/ │ │ ├── __init__.py │ │ ├── module.py │ │ ├── types.py │ │ └── utils.py │ ├── static/ │ │ └── pyscript-hide-debug.css │ ├── templatetags/ │ │ ├── __init__.py │ │ └── jinja.py │ ├── testing/ │ │ ├── __init__.py │ │ ├── backend.py │ │ ├── common.py │ │ ├── display.py │ │ └── logs.py │ ├── transforms.py │ ├── types.py │ ├── utils.py │ ├── web/ │ │ ├── __init__.py │ │ ├── module.py │ │ └── utils.py │ └── widgets.py └── tests/ ├── __init__.py ├── conftest.py ├── sample.py ├── templates/ │ ├── index.html │ ├── jinja_bad_kwargs.html │ └── pyscript.html ├── test_asgi/ │ ├── __init__.py │ ├── pyscript_components/ │ │ ├── load_first.py │ │ ├── load_second.py │ │ └── root.py │ ├── test_init.py │ ├── test_middleware.py │ ├── test_pyscript.py │ ├── test_standalone.py │ └── test_utils.py ├── test_client.py ├── test_config.py ├── test_console/ │ ├── __init__.py │ ├── test_rewrite_keys.py │ └── test_rewrite_props.py ├── test_core/ │ ├── __init__.py │ ├── test_component.py │ ├── test_events.py │ ├── test_hooks.py │ ├── test_layout.py │ ├── test_serve.py │ └── test_vdom.py ├── test_html.py ├── test_option.py ├── test_pyscript/ │ ├── __init__.py │ ├── pyscript_components/ │ │ ├── custom_root_name.py │ │ └── root.py │ ├── test_components.py │ └── test_utils.py ├── test_reactjs/ │ ├── __init__.py │ ├── js_fixtures/ │ │ ├── callable-prop.js │ │ ├── component-can-have-child.js │ │ ├── export-resolution/ │ │ │ ├── index.js │ │ │ ├── one.js │ │ │ └── two.js │ │ ├── exports-syntax.js │ │ ├── exports-two-components.js │ │ ├── generic-module.js │ │ ├── keys-properly-propagated.js │ │ ├── nest-custom-under-web.js │ │ ├── set-flag-when-unmount-is-called.js │ │ ├── simple-button.js │ │ └── subcomponent-notation.js │ ├── test_modules.py │ ├── test_modules_from_npm.py │ └── test_utils.py ├── test_sample.py ├── test_testing.py ├── test_utils.py ├── test_web/ │ ├── __init__.py │ ├── js_fixtures/ │ │ ├── callable-prop.js │ │ ├── component-can-have-child.js │ │ ├── export-resolution/ │ │ │ ├── index.js │ │ │ ├── one.js │ │ │ └── two.js │ │ ├── exports-syntax.js │ │ ├── exports-two-components.js │ │ ├── generic-module.js │ │ ├── keys-properly-propagated.js │ │ ├── set-flag-when-unmount-is-called.js │ │ ├── simple-button.js │ │ └── subcomponent-notation.js │ └── test_module.py ├── test_widgets.py └── tooling/ ├── __init__.py ├── aio.py ├── common.py ├── hooks.py ├── layout.py └── select.py