gitextract_3104ppvg/ ├── .formatter.exs ├── .github/ │ ├── ISSUE_TEMPLATE/ │ │ ├── bug_report.md │ │ └── config.yml │ ├── extract-changelog.sh │ ├── single-file-samples/ │ │ ├── main.exs │ │ └── test.exs │ └── workflows/ │ ├── assets.yml │ ├── ci.yml │ ├── docs.yml │ ├── github_release.yml │ └── npm-publish.yml ├── .gitignore ├── .igniter.exs ├── CHANGELOG.md ├── LICENSE.md ├── README.md ├── assets/ │ ├── .prettierignore │ ├── .prettierrc │ ├── js/ │ │ └── phoenix_live_view/ │ │ ├── aria.js │ │ ├── browser.js │ │ ├── constants.js │ │ ├── dom.js │ │ ├── dom_patch.js │ │ ├── dom_post_morph_restorer.js │ │ ├── element_ref.js │ │ ├── entry_uploader.js │ │ ├── global.d.ts │ │ ├── hooks.js │ │ ├── index.ts │ │ ├── js.js │ │ ├── js_commands.ts │ │ ├── live_socket.js │ │ ├── live_uploader.js │ │ ├── rendered.js │ │ ├── upload_entry.js │ │ ├── utils.js │ │ ├── view.js │ │ └── view_hook.ts │ └── test/ │ ├── browser_test.ts │ ├── debounce_test.ts │ ├── dom_test.ts │ ├── event_test.ts │ ├── globals.d.ts │ ├── hook_types_test.ts │ ├── index_test.ts │ ├── integration/ │ │ ├── event_test.ts │ │ ├── metadata_test.ts │ │ └── portal_test.ts │ ├── js_test.ts │ ├── live_socket_test.ts │ ├── modify_root_test.ts │ ├── rendered_test.ts │ ├── test_helpers.ts │ ├── tsconfig.json │ ├── utils_test.ts │ └── view_test.ts ├── babel.config.json ├── config/ │ ├── config.exs │ ├── dev.exs │ ├── docs.exs │ ├── e2e.exs │ └── test.exs ├── eslint.config.js ├── guides/ │ ├── cheatsheets/ │ │ └── html-attrs.cheatmd │ ├── client/ │ │ ├── bindings.md │ │ ├── external-uploads.md │ │ ├── form-bindings.md │ │ ├── js-interop.md │ │ └── syncing-changes.md │ ├── introduction/ │ │ └── welcome.md │ └── server/ │ ├── assigns-eex.md │ ├── deployments.md │ ├── error-handling.md │ ├── gettext.md │ ├── live-layouts.md │ ├── live-navigation.md │ ├── security-model.md │ ├── telemetry.md │ └── uploads.md ├── jest.config.js ├── lib/ │ ├── mix/ │ │ └── tasks/ │ │ ├── compile/ │ │ │ └── phoenix_live_view.ex │ │ └── phoenix_live_view.upgrade.ex │ ├── phoenix_component/ │ │ ├── declarative.ex │ │ └── macro_component.ex │ ├── phoenix_component.ex │ ├── phoenix_live_component.ex │ ├── phoenix_live_view/ │ │ ├── application.ex │ │ ├── async.ex │ │ ├── async_result.ex │ │ ├── channel.ex │ │ ├── colocated_hook.ex │ │ ├── colocated_js.ex │ │ ├── controller.ex │ │ ├── debug.ex │ │ ├── diff.ex │ │ ├── engine.ex │ │ ├── helpers.ex │ │ ├── html_algebra.ex │ │ ├── html_engine.ex │ │ ├── html_formatter/ │ │ │ └── tag_formatter.ex │ │ ├── html_formatter.ex │ │ ├── igniter/ │ │ │ └── upgrade_to_1_1.ex │ │ ├── js.ex │ │ ├── lifecycle.ex │ │ ├── live_stream.ex │ │ ├── logger.ex │ │ ├── plug.ex │ │ ├── renderer.ex │ │ ├── route.ex │ │ ├── router.ex │ │ ├── session.ex │ │ ├── socket.ex │ │ ├── static.ex │ │ ├── tag_engine/ │ │ │ ├── compiler.ex │ │ │ ├── parser.ex │ │ │ └── tokenizer.ex │ │ ├── tag_engine.ex │ │ ├── test/ │ │ │ ├── client_proxy.ex │ │ │ ├── diff.ex │ │ │ ├── dom.ex │ │ │ ├── live_view_test.ex │ │ │ ├── structs.ex │ │ │ ├── tree_dom.ex │ │ │ ├── upload_client.ex │ │ │ └── utils.ex │ │ ├── upload.ex │ │ ├── upload_channel.ex │ │ ├── upload_config.ex │ │ ├── upload_tmp_file_writer.ex │ │ ├── upload_writer.ex │ │ └── utils.ex │ ├── phoenix_live_view.ex │ └── prettier.ex ├── mix.exs ├── package.json ├── priv/ │ └── static/ │ ├── phoenix_live_view.cjs.js │ ├── phoenix_live_view.esm.js │ └── phoenix_live_view.js ├── setupTests.js ├── test/ │ ├── e2e/ │ │ ├── .prettierignore │ │ ├── README.md │ │ ├── merge-coverage.js │ │ ├── playwright.config.js │ │ ├── support/ │ │ │ ├── colocated_live.ex │ │ │ ├── components_live.ex │ │ │ ├── error_live.ex │ │ │ ├── form_dynamic_inputs_live.ex │ │ │ ├── form_feedback.ex │ │ │ ├── form_live.ex │ │ │ ├── issues/ │ │ │ │ ├── issue_2787.ex │ │ │ │ ├── issue_2965.ex │ │ │ │ ├── issue_3026.ex │ │ │ │ ├── issue_3040.ex │ │ │ │ ├── issue_3047.ex │ │ │ │ ├── issue_3083.ex │ │ │ │ ├── issue_3107.ex │ │ │ │ ├── issue_3117.ex │ │ │ │ ├── issue_3169.ex │ │ │ │ ├── issue_3194.ex │ │ │ │ ├── issue_3200.ex │ │ │ │ ├── issue_3378.ex │ │ │ │ ├── issue_3448.ex │ │ │ │ ├── issue_3496.ex │ │ │ │ ├── issue_3529.ex │ │ │ │ ├── issue_3530.ex │ │ │ │ ├── issue_3612.ex │ │ │ │ ├── issue_3636.ex │ │ │ │ ├── issue_3647.ex │ │ │ │ ├── issue_3651.ex │ │ │ │ ├── issue_3656.ex │ │ │ │ ├── issue_3658.ex │ │ │ │ ├── issue_3681.ex │ │ │ │ ├── issue_3684.ex │ │ │ │ ├── issue_3686.ex │ │ │ │ ├── issue_3709.ex │ │ │ │ ├── issue_3719.ex │ │ │ │ ├── issue_3814.ex │ │ │ │ ├── issue_3819.ex │ │ │ │ ├── issue_3919.ex │ │ │ │ ├── issue_3931.ex │ │ │ │ ├── issue_3941.ex │ │ │ │ ├── issue_3953.ex │ │ │ │ ├── issue_3979.ex │ │ │ │ ├── issue_4027.ex │ │ │ │ ├── issue_4066.ex │ │ │ │ ├── issue_4078.ex │ │ │ │ ├── issue_4088.ex │ │ │ │ ├── issue_4094.ex │ │ │ │ ├── issue_4095.ex │ │ │ │ ├── issue_4102.ex │ │ │ │ ├── issue_4107.ex │ │ │ │ ├── issue_4121.ex │ │ │ │ └── issue_4147.ex │ │ │ ├── js_live.ex │ │ │ ├── keyed_comprehension_live.ex │ │ │ ├── navigation.ex │ │ │ ├── portal.ex │ │ │ ├── select_live.ex │ │ │ └── upload_live.ex │ │ ├── teardown.js │ │ ├── test-fixtures.js │ │ ├── test_helper.exs │ │ ├── tests/ │ │ │ ├── colocated.spec.js │ │ │ ├── components.spec.js │ │ │ ├── errors.spec.js │ │ │ ├── forms.spec.js │ │ │ ├── issues/ │ │ │ │ ├── 2787.spec.js │ │ │ │ ├── 2965.spec.js │ │ │ │ ├── 3026.spec.js │ │ │ │ ├── 3040.spec.js │ │ │ │ ├── 3047.spec.js │ │ │ │ ├── 3083.spec.js │ │ │ │ ├── 3107.spec.js │ │ │ │ ├── 3117.spec.js │ │ │ │ ├── 3169.spec.js │ │ │ │ ├── 3194.spec.js │ │ │ │ ├── 3200.spec.js │ │ │ │ ├── 3378.spec.js │ │ │ │ ├── 3448.spec.js │ │ │ │ ├── 3496.spec.js │ │ │ │ ├── 3529.spec.js │ │ │ │ ├── 3530.spec.js │ │ │ │ ├── 3612.spec.js │ │ │ │ ├── 3636.spec.js │ │ │ │ ├── 3647.spec.js │ │ │ │ ├── 3651.spec.js │ │ │ │ ├── 3656.spec.js │ │ │ │ ├── 3658.spec.js │ │ │ │ ├── 3681.spec.js │ │ │ │ ├── 3684.spec.js │ │ │ │ ├── 3686.spec.js │ │ │ │ ├── 3709.spec.js │ │ │ │ ├── 3719.spec.js │ │ │ │ ├── 3814.spec.js │ │ │ │ ├── 3819.spec.js │ │ │ │ ├── 3919.spec.js │ │ │ │ ├── 3931.spec.js │ │ │ │ ├── 3941.spec.js │ │ │ │ ├── 3953.spec.js │ │ │ │ ├── 3979.spec.js │ │ │ │ ├── 4027.spec.js │ │ │ │ ├── 4066.spec.js │ │ │ │ ├── 4078.spec.js │ │ │ │ ├── 4088.spec.js │ │ │ │ ├── 4094.spec.js │ │ │ │ ├── 4095.spec.js │ │ │ │ ├── 4102.spec.js │ │ │ │ ├── 4107.spec.js │ │ │ │ ├── 4121.spec.js │ │ │ │ └── 4147.spec.js │ │ │ ├── js.spec.js │ │ │ ├── keyed-comprehension.spec.js │ │ │ ├── navigation.spec.js │ │ │ ├── portal.spec.js │ │ │ ├── select.spec.js │ │ │ ├── streams.spec.js │ │ │ └── uploads.spec.js │ │ └── utils.js │ ├── phoenix_component/ │ │ ├── components_test.exs │ │ ├── declarative_assigns_test.exs │ │ ├── macro_component_integration_test.exs │ │ ├── macro_component_test.exs │ │ ├── pages/ │ │ │ ├── about_page.html.heex │ │ │ ├── another_root/ │ │ │ │ ├── root.html.heex │ │ │ │ └── root.text.eex │ │ │ └── welcome_page.html.heex │ │ ├── rendering_test.exs │ │ └── verify_test.exs │ ├── phoenix_component_test.exs │ ├── phoenix_live_view/ │ │ ├── async_result_test.exs │ │ ├── async_test.exs │ │ ├── colocated_hook_test.exs │ │ ├── colocated_js_test.exs │ │ ├── controller_test.exs │ │ ├── debug_test.exs │ │ ├── diff_test.exs │ │ ├── engine_test.exs │ │ ├── heex_extension_test.exs │ │ ├── hooks_test.exs │ │ ├── html_engine_test.exs │ │ ├── html_formatter_test.exs │ │ ├── igniter/ │ │ │ └── upgrade_to_1_1_test.exs │ │ ├── integrations/ │ │ │ ├── assign_async_test.exs │ │ │ ├── assigns_test.exs │ │ │ ├── collocated_test.exs │ │ │ ├── connect_test.exs │ │ │ ├── elements_test.exs │ │ │ ├── event_test.exs │ │ │ ├── expensive_runtime_checks_test.exs │ │ │ ├── flash_test.exs │ │ │ ├── hooks_test.exs │ │ │ ├── html_formatter_test.exs │ │ │ ├── layout_test.exs │ │ │ ├── live_components_test.exs │ │ │ ├── live_reload_test.exs │ │ │ ├── live_view_test.exs │ │ │ ├── live_view_test_warnings_test.exs │ │ │ ├── navigation_test.exs │ │ │ ├── nested_test.exs │ │ │ ├── params_test.exs │ │ │ ├── start_async_test.exs │ │ │ ├── stream_async_test.exs │ │ │ ├── stream_test.exs │ │ │ ├── telemetry_test.exs │ │ │ └── update_test.exs │ │ ├── js_test.exs │ │ ├── live_stream_test.exs │ │ ├── plug_test.exs │ │ ├── router_test.exs │ │ ├── socket_test.exs │ │ ├── tag_engine/ │ │ │ └── tokenizer_test.exs │ │ ├── test/ │ │ │ ├── diff_test.exs │ │ │ ├── dom_test.exs │ │ │ └── tree_dom_test.exs │ │ ├── upload/ │ │ │ ├── channel_test.exs │ │ │ ├── config_test.exs │ │ │ └── external_test.exs │ │ └── utils_test.exs │ ├── phoenix_live_view_test.exs │ ├── support/ │ │ ├── async_sync.ex │ │ ├── controller.ex │ │ ├── endpoint.ex │ │ ├── layout_view.ex │ │ ├── live_views/ │ │ │ ├── assign_async.ex │ │ │ ├── cids_destroyed.ex │ │ │ ├── collocated.ex │ │ │ ├── collocated_component.html.heex │ │ │ ├── collocated_live.html.heex │ │ │ ├── component_and_nested_in_live.ex │ │ │ ├── component_in_live.ex │ │ │ ├── components.ex │ │ │ ├── connect.ex │ │ │ ├── debug_anno.exs │ │ │ ├── debug_anno_opt_out.exs │ │ │ ├── elements.ex │ │ │ ├── events.ex │ │ │ ├── expensive_runtime_checks.ex │ │ │ ├── flash.ex │ │ │ ├── general.ex │ │ │ ├── host.ex │ │ │ ├── layout.ex │ │ │ ├── lifecycle.ex │ │ │ ├── live_in_component.ex │ │ │ ├── params.ex │ │ │ ├── reload_live.ex │ │ │ ├── render_with.ex │ │ │ ├── root_tag_attr.exs │ │ │ ├── start_async.ex │ │ │ ├── stream_async.ex │ │ │ ├── streams.ex │ │ │ ├── test_warnings.ex │ │ │ ├── update.ex │ │ │ └── upload_live.ex │ │ ├── router.ex │ │ ├── telemetry_test_helpers.ex │ │ └── templates/ │ │ ├── heex/ │ │ │ ├── dead_with_function_component.html.heex │ │ │ ├── dead_with_function_component_with_inner_content.html.heex │ │ │ ├── dead_with_live.html.eex │ │ │ ├── inner_dead.html.eex │ │ │ ├── inner_live.html.heex │ │ │ ├── live_with_comprehension.html.heex │ │ │ ├── live_with_dead.html.heex │ │ │ └── live_with_live.html.heex │ │ └── leex/ │ │ ├── dead_with_live.html.eex │ │ ├── inner_dead.html.eex │ │ ├── inner_live.html.leex │ │ ├── live_with_comprehension.html.leex │ │ ├── live_with_dead.html.leex │ │ └── live_with_live.html.leex │ └── test_helper.exs └── tsconfig.json