diff -pruN 0.16.0-1/CHANGELOG.md 0.17.2-1/CHANGELOG.md
--- 0.16.0-1/CHANGELOG.md	2025-10-20 20:25:46.000000000 +0000
+++ 0.17.2-1/CHANGELOG.md	2025-10-24 21:32:15.000000000 +0000
@@ -4,6 +4,18 @@ All notable changes to this project will
 
 ## [Unreleased]
 
+## [0.17.2] - 2025-10-24
+
+- This widget no longer stops (prevents bubbling of) the Changed and SelectionChanged events.
+
+## [0.17.1] - 2025-10-23
+
+- Fixes a bug with the Open/Save/Find/Goto input's focus and appearance after attempting to open multiple inputs ([harlequin/#869](https://github.com/tconbeer/harlequin/issues/869)).
+
+## [0.17.0] - 2025-10-22
+
+- **Breaking:** drops support for Textual &lt; 6.4, due to updated tree-sitter dependencies in that version.
+
 ## [0.16.0] - 2025-10-20
 
 - **Breaking:** drops support for Python 3.9.
@@ -288,7 +300,10 @@ All notable changes to this project will
   support for syntax highlighting, themes, keyboard navigation, copy-paste, file
   opening and saving, and more!
 
-[unreleased]: https://github.com/tconbeer/textual-textarea/compare/0.16.0...HEAD
+[unreleased]: https://github.com/tconbeer/textual-textarea/compare/0.17.2...HEAD
+[0.17.2]: https://github.com/tconbeer/textual-textarea/compare/0.17.1...0.17.2
+[0.17.1]: https://github.com/tconbeer/textual-textarea/compare/0.17.0...0.17.1
+[0.17.0]: https://github.com/tconbeer/textual-textarea/compare/0.16.0...0.17.0
 [0.16.0]: https://github.com/tconbeer/textual-textarea/compare/0.15.0...0.16.0
 [0.15.0]: https://github.com/tconbeer/textual-textarea/compare/0.14.4...0.15.0
 [0.14.4]: https://github.com/tconbeer/textual-textarea/compare/0.14.3...0.14.4
diff -pruN 0.16.0-1/debian/changelog 0.17.2-1/debian/changelog
--- 0.16.0-1/debian/changelog	2025-10-21 05:30:49.000000000 +0000
+++ 0.17.2-1/debian/changelog	2025-10-25 06:12:42.000000000 +0000
@@ -1,3 +1,9 @@
+textual-textarea (0.17.2-1) sid; urgency=medium
+
+  * Merging upstream version 0.17.2.
+
+ -- Daniel Baumann <daniel@debian.org>  Sat, 25 Oct 2025 08:12:42 +0200
+
 textual-textarea (0.16.0-1) sid; urgency=medium
 
   * Adding upstream metadata.
diff -pruN 0.16.0-1/pyproject.toml 0.17.2-1/pyproject.toml
--- 0.16.0-1/pyproject.toml	2025-10-20 20:25:46.000000000 +0000
+++ 0.17.2-1/pyproject.toml	2025-10-24 21:32:15.000000000 +0000
@@ -1,7 +1,7 @@
 [project]
 
 name = "textual-textarea"
-version = "0.16.0"
+version = "0.17.2"
 requires-python = ">=3.10,<3.15"
 description = "A text area (multi-line input) with syntax highlighting for Textual"
 authors = [
@@ -10,21 +10,15 @@ authors = [
 license = "MIT"
 readme = "README.md"
 dependencies = [
-    "textual[syntax]>=6.3.0,<7",
+    "textual[syntax]>=6.4.0,<7",
     "pyperclip>=1.9.0,<2",
-
-    # some tree sitter language version are incompatible with some core
-    # library versions, so we pin them.
-    "tree-sitter==0.25.2",
-    "tree-sitter-python==0.25.0",
-    "tree-sitter-sql==0.3.7",
 ]
 
 
 [dependency-groups]
 dev = [
     "pre-commit>=3.3,<4",
-    "textual==6.3.0",
+    "textual==6.4.0",
     "textual-dev==1.8.0",
     "pyinstrument>=5,<6",
 ]
diff -pruN 0.16.0-1/src/textual_textarea/containers.py 0.17.2-1/src/textual_textarea/containers.py
--- 0.16.0-1/src/textual_textarea/containers.py	2025-10-20 20:25:46.000000000 +0000
+++ 0.17.2-1/src/textual_textarea/containers.py	2025-10-24 21:32:15.000000000 +0000
@@ -1,6 +1,8 @@
 from typing import Any, Union
 
+from textual import on
 from textual.containers import Container, ScrollableContainer
+from textual.events import Click
 from textual.widget import Widget
 
 
@@ -34,7 +36,7 @@ class FooterContainer(
         FooterContainer {
             dock: bottom;
             height: auto;
-            width: 100%
+            width: 100%;
         }
         FooterContainer.hide {
             height: 0;
@@ -52,3 +54,12 @@ class FooterContainer(
         super().__init__(
             *children, name=name, id=id, classes=classes, disabled=disabled
         )
+
+    @on(Click)
+    def handle_click(self, event: Click) -> None:
+        """
+        Prevent clicks on inputs in the footer container from
+        bubbling up to the TextArea widget, which casuses
+        a race condition for the app focus.
+        """
+        event.stop()
diff -pruN 0.16.0-1/src/textual_textarea/text_editor.py 0.17.2-1/src/textual_textarea/text_editor.py
--- 0.16.0-1/src/textual_textarea/text_editor.py	2025-10-20 20:25:46.000000000 +0000
+++ 0.17.2-1/src/textual_textarea/text_editor.py	2025-10-24 21:32:15.000000000 +0000
@@ -10,7 +10,6 @@ import pyperclip
 from rich.console import RenderableType
 from textual import events, on, work
 from textual._cells import cell_len
-from textual._node_list import DuplicateIds
 from textual.app import ComposeResult
 from textual.binding import Binding
 from textual.events import Paste
@@ -1164,7 +1163,6 @@ class TextEditor(Widget, can_focus=True,
     def update_completion_list_offset(
         self, event: TextAreaPlus.SelectionChanged
     ) -> None:
-        event.stop()
         assert self.text_input is not None
         region_x, region_y, _, _ = self.text_input.region
         self.completion_list.cursor_offset = self.text_input.cursor_screen_offset - (
@@ -1174,7 +1172,6 @@ class TextEditor(Widget, can_focus=True,
 
     @on(TextAreaPlus.Changed)
     def check_for_find_updates(self, event: TextAreaPlus.Changed) -> None:
-        event.stop()
         try:
             find_input = self.footer.query_one(FindInput)
         except Exception:
@@ -1216,10 +1213,8 @@ class TextEditor(Widget, can_focus=True,
         self.text_input.completer_active = None
 
     @on(CancellableInput.Cancelled)
-    def clear_footer(self) -> None:
-        self._clear_footer_input()
-        if self.text_input is not None:
-            self.text_input.focus()
+    async def clear_footer(self) -> None:
+        await self._clear_footer_input()
 
     @on(Input.Changed)
     def update_validation_label(self, message: Input.Changed) -> None:
@@ -1251,10 +1246,11 @@ class TextEditor(Widget, can_focus=True,
                 label.update("")
         elif message.input.id in ("textarea__find_input"):
             message.stop()
+            self._update_find_label(value=message.value)
             self._find_next_after_cursor(value=message.value)
 
     @on(Input.Submitted, "#textarea__save_input")
-    def save_file(self, message: Input.Submitted) -> None:
+    async def save_file(self, message: Input.Submitted) -> None:
         """
         Handle the submit event for the Save and Open modals.
         """
@@ -1274,12 +1270,10 @@ class TextEditor(Widget, can_focus=True,
             )
         else:
             self.post_message(TextAreaSaved(path=expanded_path))
-        self._clear_footer_input()
-        if self.text_input is not None:
-            self.text_input.focus()
+        await self._clear_footer_input()
 
     @on(Input.Submitted, "#textarea__open_input")
-    def open_file(self, message: Input.Submitted) -> None:
+    async def open_file(self, message: Input.Submitted) -> None:
         message.stop()
         expanded_path = Path(message.input.value).expanduser()
         try:
@@ -1295,12 +1289,10 @@ class TextEditor(Widget, can_focus=True,
             )
         else:
             self.text = contents
-        self._clear_footer_input()
-        if self.text_input is not None:
-            self.text_input.focus()
+        await self._clear_footer_input()
 
     @on(Input.Submitted, "#textarea__gotoline_input")
-    def goto_line(self, message: Input.Submitted) -> None:
+    async def goto_line(self, message: Input.Submitted) -> None:
         message.stop()
         assert self.text_input is not None
         try:
@@ -1308,8 +1300,7 @@ class TextEditor(Widget, can_focus=True,
         except (ValueError, TypeError):
             return
         self.text_input.move_cursor((new_line, 0), select=False)
-        self._clear_footer_input()
-        self.text_input.focus()
+        await self._clear_footer_input()
 
     @on(Input.Submitted, "#textarea__find_input")
     def find_next(self, message: Input.Submitted) -> None:
@@ -1341,15 +1332,13 @@ class TextEditor(Widget, can_focus=True,
             self.text_input.register_theme(textarea_theme)
             self.text_input.theme = theme
 
-    def action_save(self) -> None:
-        self._clear_footer_input()
-        self._mount_footer_path_input("save")
-
-    def action_load(self) -> None:
-        self._clear_footer_input()
-        self._mount_footer_path_input("open")
+    async def action_save(self) -> None:
+        await self._mount_footer_path_input("save")
+
+    async def action_load(self) -> None:
+        await self._mount_footer_path_input("open")
 
-    def action_find(self, prepopulate_from_history: bool = False) -> None:
+    async def action_find(self, prepopulate_from_history: bool = False) -> None:
         try:
             find_input = self.footer.query_one(FindInput)
         except Exception:
@@ -1357,7 +1346,6 @@ class TextEditor(Widget, can_focus=True,
         else:
             find_input.focus()
             return
-        self._clear_footer_input()
         if prepopulate_from_history and self._find_history:
             value = self._find_history[-1]
         else:
@@ -1367,9 +1355,9 @@ class TextEditor(Widget, can_focus=True,
             history=self._find_history,
             classes="textarea--footer-input",
         )
-        self._mount_footer_input(input_widget=find_input)
+        await self._mount_footer_input(input_widget=find_input)
 
-    def action_goto_line(self) -> None:
+    async def action_goto_line(self) -> None:
         try:
             goto_input = self.footer.query_one(GotoLineInput)
         except Exception:
@@ -1377,7 +1365,6 @@ class TextEditor(Widget, can_focus=True,
         else:
             goto_input.focus()
             return
-        self._clear_footer_input()
         goto_input = GotoLineInput(
             max_line_number=self.text_input.document.line_count
             if self.text_input is not None
@@ -1387,29 +1374,33 @@ class TextEditor(Widget, can_focus=True,
             id="textarea__gotoline_input",
             classes="textarea--footer-input",
         )
-        self._mount_footer_input(input_widget=goto_input)
+        await self._mount_footer_input(input_widget=goto_input)
 
-    def _clear_footer_input(self) -> None:
-        try:
-            self.footer.query_one(Input).remove()
-        except Exception:
-            pass
-        try:
-            self.footer_label.update("")
-        except Exception:
-            pass
+    async def _clear_footer_input(self) -> None:
+        if self.footer.has_focus or self.footer.has_focus_within:
+            # move focus to the main text area
+            self.focus()
+        await self.footer.remove_children(Input)
+        self.footer_label.update("")
         self.footer.add_class("hide")
 
-    def _mount_footer_input(self, input_widget: Input) -> None:
+    async def _mount_footer_input(self, input_widget: Input) -> None:
+        """
+        Footer's first child is always the validation label. It may
+        or may not have a second child, which is an input.
+        """
+        if len(self.footer.children) > 1:
+            if self.footer.children[1].id == input_widget.id:
+                self.footer.children[1].focus()
+                return
+            else:
+                self.footer_label.update("")
+                await self.footer.remove_children(Input)
         self.footer.remove_class("hide")
-        try:
-            self.footer.mount(input_widget)
-        except DuplicateIds:
-            return
-        else:
-            input_widget.focus()
+        await self.footer.mount(input_widget)
+        input_widget.focus()
 
-    def _mount_footer_path_input(self, name: str) -> None:
+    async def _mount_footer_path_input(self, name: str) -> None:
         if name == "open":
             file_okay, dir_okay, must_exist = True, False, True
         else:
@@ -1423,13 +1414,11 @@ class TextEditor(Widget, can_focus=True,
             must_exist=must_exist,
             classes="textarea--footer-input",
         )
-        self._mount_footer_input(input_widget=path_input)
+        await self._mount_footer_input(input_widget=path_input)
 
     def _find_next_after_cursor(self, value: str) -> None:
         assert self.text_input is not None
-        label = self.footer_label
         if not value:
-            label.update("")
             return
         cursor = self.selection.start
         lines = self.text_input.document.lines
@@ -1452,14 +1441,21 @@ class TextEditor(Widget, can_focus=True,
                     )
                     break
         self.text_input.scroll_cursor_visible(animate=True)
-        self._update_find_label(value=value)
 
     def _update_find_label(self, value: str) -> None:
         label = self.footer_label
+        if not value:
+            label.remove_class("validation-error")
+            label.update("")
+            return
+
         n_matches = self.text.count(value)
         if n_matches > 1:
+            label.remove_class("validation-error")
             label.update(f"{n_matches} found; Enter for next; ESC to close")
         elif n_matches > 0:
+            label.remove_class("validation-error")
             label.update(f"{n_matches} found")
         else:
+            label.add_class("validation-error")
             label.update("No results.")
diff -pruN 0.16.0-1/tests/functional_tests/test_open.py 0.17.2-1/tests/functional_tests/test_open.py
--- 0.16.0-1/tests/functional_tests/test_open.py	2025-10-20 20:25:46.000000000 +0000
+++ 0.17.2-1/tests/functional_tests/test_open.py	2025-10-24 21:32:15.000000000 +0000
@@ -69,3 +69,43 @@ async def test_save(app: App, tmp_path:
         with open(p, "r") as f:
             saved_text = f.read()
         assert saved_text == TEXT
+
+
+@pytest.mark.asyncio
+async def test_multiple_footer_inputs(app: App) -> None:
+    async with app.run_test() as pilot:
+        ta = app.query_exactly_one("#ta", expect_type=TextEditor)
+        ta.text = "select 1"
+        assert ta.text_input is not None
+        ta.text_input.focus()
+        while not ta.text_input.has_focus:
+            await pilot.pause()
+
+        await pilot.press("ctrl+o")
+        open_input = ta.query_exactly_one(Input)
+        assert open_input.id and "open" in open_input.id
+        assert open_input.has_focus
+
+        await pilot.press("a")
+        assert open_input.value == "a"
+
+        await pilot.press("ctrl+o")
+        new_input = ta.query_exactly_one(Input)
+        assert open_input is new_input
+        assert open_input.has_focus
+        assert open_input.value == "a"
+
+        await pilot.press("ctrl+s")
+        save_input = ta.query_exactly_one(Input)
+        assert open_input is not save_input
+        assert save_input.id and "save" in save_input.id
+        assert save_input.has_focus
+        assert save_input.value == ""
+
+        await pilot.click(ta.text_input)
+        await pilot.pause(0.1)
+        assert ta.text_input.has_focus
+
+        await pilot.click(save_input)
+        await pilot.pause(0.1)
+        assert save_input.has_focus
diff -pruN 0.16.0-1/uv.lock 0.17.2-1/uv.lock
--- 0.16.0-1/uv.lock	2025-10-20 20:25:46.000000000 +0000
+++ 0.17.2-1/uv.lock	2025-10-24 21:32:15.000000000 +0000
@@ -423,9 +423,6 @@ wheels = [
 linkify = [
     { name = "linkify-it-py" },
 ]
-plugins = [
-    { name = "mdit-py-plugins" },
-]
 
 [[package]]
 name = "markupsafe"
@@ -1170,18 +1167,19 @@ wheels = [
 
 [[package]]
 name = "textual"
-version = "6.3.0"
+version = "6.4.0"
 source = { registry = "https://pypi.org/simple" }
 dependencies = [
-    { name = "markdown-it-py", extra = ["linkify", "plugins"] },
+    { name = "markdown-it-py", extra = ["linkify"] },
+    { name = "mdit-py-plugins" },
     { name = "platformdirs" },
     { name = "pygments" },
     { name = "rich" },
     { name = "typing-extensions" },
 ]
-sdist = { url = "https://files.pythonhosted.org/packages/ff/51/51a0863339c4c3fa204f43044e52dfd688a7ee2ba2c987e021acc9583a42/textual-6.3.0.tar.gz", hash = "sha256:a89c557fa740611551dcf4f93643f33853eca488183ef5882200dde8e94315e8", size = 1573232, upload-time = "2025-10-11T11:17:01.888Z" }
+sdist = { url = "https://files.pythonhosted.org/packages/23/6c/565521dc6dd00fa857845483ae0c070575fda1f9a56d92d732554fecfea4/textual-6.4.0.tar.gz", hash = "sha256:f40df9165a001c10249698d532f2f5a71708b70f0e4ef3fce081a9dd93ffeaaa", size = 1573599, upload-time = "2025-10-22T17:29:51.357Z" }
 wheels = [
-    { url = "https://files.pythonhosted.org/packages/ff/2a/bca677b0b05ee77b4105f73db0d8ef231a9f1db154d69388abd5c73f9dcc/textual-6.3.0-py3-none-any.whl", hash = "sha256:ec908b4b008662e7670af4a3e7c773847066b0950b1c50126c72fa939b514c97", size = 711457, upload-time = "2025-10-11T11:16:59.754Z" },
+    { url = "https://files.pythonhosted.org/packages/37/20/6eed0e55bdd2576475e9cea49cc71c47f8e56ab54f04cbe04b2fb56440de/textual-6.4.0-py3-none-any.whl", hash = "sha256:b346dbb8e12f17cefb33ddfdf7f19bdc9e66c29daf82fc981a8db6b7d985e115", size = 711663, upload-time = "2025-10-22T17:29:49.346Z" },
 ]
 
 [package.optional-dependencies]
@@ -1239,14 +1237,11 @@ wheels = [
 
 [[package]]
 name = "textual-textarea"
-version = "0.16.0"
+version = "0.17.2"
 source = { editable = "." }
 dependencies = [
     { name = "pyperclip" },
     { name = "textual", extra = ["syntax"] },
-    { name = "tree-sitter" },
-    { name = "tree-sitter-python" },
-    { name = "tree-sitter-sql" },
 ]
 
 [package.dev-dependencies]
@@ -1268,17 +1263,14 @@ test = [
 [package.metadata]
 requires-dist = [
     { name = "pyperclip", specifier = ">=1.9.0,<2" },
-    { name = "textual", extras = ["syntax"], specifier = ">=6.3.0,<7" },
-    { name = "tree-sitter", specifier = "==0.25.2" },
-    { name = "tree-sitter-python", specifier = "==0.25.0" },
-    { name = "tree-sitter-sql", specifier = "==0.3.7" },
+    { name = "textual", extras = ["syntax"], specifier = ">=6.4.0,<7" },
 ]
 
 [package.metadata.requires-dev]
 dev = [
     { name = "pre-commit", specifier = ">=3.3,<4" },
     { name = "pyinstrument", specifier = ">=5,<6" },
-    { name = "textual", specifier = "==6.3.0" },
+    { name = "textual", specifier = "==6.4.0" },
     { name = "textual-dev", specifier = "==1.8.0" },
 ]
 static = [
@@ -1555,17 +1547,18 @@ wheels = [
 
 [[package]]
 name = "tree-sitter-sql"
-version = "0.3.7"
+version = "0.3.11"
 source = { registry = "https://pypi.org/simple" }
-sdist = { url = "https://files.pythonhosted.org/packages/2a/f2/1497523b26ccc82b9b3080fd2e6362f1bc207e0bf6d73763a13ff50b15a8/tree_sitter_sql-0.3.7.tar.gz", hash = "sha256:5eb671ad597e6245d96aa44fd584c990d3eaffe80faddf941bfe8ebee6a8e2dd", size = 704482, upload-time = "2024-11-21T16:56:39.17Z" }
+sdist = { url = "https://files.pythonhosted.org/packages/e8/5c/3d10387f779f36835486167253682f61d5f4fd8336b7001da1ac7d78f31c/tree_sitter_sql-0.3.11.tar.gz", hash = "sha256:700b93be2174c3c83d174ec3e10b682f72a4fb451f0076c7ce5012f1d5a76cbc", size = 834454, upload-time = "2025-10-01T13:44:15.913Z" }
 wheels = [
-    { url = "https://files.pythonhosted.org/packages/d4/b1/2676b424c501f5b3feb92267df7ad6e9324d7603cb62534022164ef99cfd/tree_sitter_sql-0.3.7-cp38-abi3-macosx_10_9_x86_64.whl", hash = "sha256:f3f8427328bd8b4ee02ab50d71bfc515937c037b8a03dcf54b8c98403d804269", size = 278389, upload-time = "2024-11-21T16:56:30.333Z" },
-    { url = "https://files.pythonhosted.org/packages/f6/83/bd2c62a0f1390ff72f798b5e96a4064a34283871242930befc52c64c4618/tree_sitter_sql-0.3.7-cp38-abi3-macosx_11_0_arm64.whl", hash = "sha256:97ad55611f7d777b08a30d60150e1c44100ac2759a341b1cf1ffa2f97f20259e", size = 293078, upload-time = "2024-11-21T16:56:31.529Z" },
-    { url = "https://files.pythonhosted.org/packages/4d/b8/1eb53e1148aa5bb2e278b4cb8e4fad0f5664c8972ddd9bf2a0a827114112/tree_sitter_sql-0.3.7-cp38-abi3-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:aa7beae1c2e841edc6de5a80d3ee6d401b579d9d27ce9553f2c569bef4b95b8f", size = 333651, upload-time = "2024-11-21T16:56:32.642Z" },
-    { url = "https://files.pythonhosted.org/packages/46/35/c0888c299deb7b55281c82c838a5c0a988d3cd8beac54d6e9ca0a0e080f2/tree_sitter_sql-0.3.7-cp38-abi3-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:b5fc2daa8fc8d49265327ddaff0b5bbda5a6a0e37d05b157fdbcb2530f1e96e8", size = 331910, upload-time = "2024-11-21T16:56:33.715Z" },
-    { url = "https://files.pythonhosted.org/packages/db/27/dcd5b5a187a1d0718b8acb5b0b9f6b4362c0c5812c524cc13e0cf948a37d/tree_sitter_sql-0.3.7-cp38-abi3-musllinux_1_2_x86_64.whl", hash = "sha256:5f3c34121b625ee8f43e6ccffaca5205b206afa31592aedd1f078b4f6f4cb321", size = 333281, upload-time = "2024-11-21T16:56:35.463Z" },
-    { url = "https://files.pythonhosted.org/packages/d0/95/c8fa00eb8a72febdc59404a2ae4c37a9f17dd9064f2ff0aa71d5d87e2ffe/tree_sitter_sql-0.3.7-cp38-abi3-win_amd64.whl", hash = "sha256:09e4af2b4c32b09e602c83f1e584e5f390901fce929fa7c3da2ddf416e30681e", size = 301042, upload-time = "2024-11-21T16:56:36.508Z" },
-    { url = "https://files.pythonhosted.org/packages/f2/0f/c8a035ab0d72a47542c707002193e9a032265c986a529349d4f2e23970a7/tree_sitter_sql-0.3.7-cp38-abi3-win_arm64.whl", hash = "sha256:e7b09235e5492ac8f71abaeb078e28dbfa94881998a5fbf22c659da49165054c", size = 285133, upload-time = "2024-11-21T16:56:38.112Z" },
+    { url = "https://files.pythonhosted.org/packages/32/68/bb80073915dfe1b38935451bc0d65528666c126b2d5878e7140ef9bf9f8a/tree_sitter_sql-0.3.11-cp310-abi3-macosx_10_9_x86_64.whl", hash = "sha256:cf1b0c401756940bf47544ad7c4cc97373fc0dac118f821820953e7015a115e3", size = 322035, upload-time = "2025-10-01T13:44:07.497Z" },
+    { url = "https://files.pythonhosted.org/packages/05/45/b2bd5f9919ea15c4ae90a156999101ebd4caa4036babe54efaf9d3e77d55/tree_sitter_sql-0.3.11-cp310-abi3-macosx_11_0_arm64.whl", hash = "sha256:a33cd6880ab2debef036f80365c32becb740ec79946805598488732b6c515fff", size = 341635, upload-time = "2025-10-01T13:44:08.961Z" },
+    { url = "https://files.pythonhosted.org/packages/8e/96/7cee5661aa897e5d1a67499944ea5cf8a148953c1dc07a3059a50db8cb56/tree_sitter_sql-0.3.11-cp310-abi3-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:344e99b59c8c8d72f7154041e9d054400f4a3fccc16c2c96ac106dde0e7f8d0c", size = 381217, upload-time = "2025-10-01T13:44:10.211Z" },
+    { url = "https://files.pythonhosted.org/packages/1d/c1/eec7c09a9c94436ea4c56d096feba815e42b209b3d41a17532f99ecf0c67/tree_sitter_sql-0.3.11-cp310-abi3-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:5128b12f71ac0f5ebcc607f67a62cdc56a187c1a5ba7553feeb9c5f6f9bc3c72", size = 380606, upload-time = "2025-10-01T13:44:11.135Z" },
+    { url = "https://files.pythonhosted.org/packages/94/1d/06e9598799bd119e56f6e431d42c2f3a5c6dee858a5b6ad7633cc4d670aa/tree_sitter_sql-0.3.11-cp310-abi3-musllinux_1_2_aarch64.whl", hash = "sha256:03cc164fcf7b1f711e7d939aeb4d1f62c76f4162e081c70b860b4fcd91806a38", size = 380862, upload-time = "2025-10-01T13:44:12.072Z" },
+    { url = "https://files.pythonhosted.org/packages/52/e9/a7afd7f68ce165c040ce50e67bb05553784a8e17f37e057405d693fc869d/tree_sitter_sql-0.3.11-cp310-abi3-musllinux_1_2_x86_64.whl", hash = "sha256:0e22ea8de690dd9960d8c0c36c4cd25417b084e1e29c91ac0235fbdb3abb4664", size = 379447, upload-time = "2025-10-01T13:44:13.062Z" },
+    { url = "https://files.pythonhosted.org/packages/eb/b3/57ff42dadd33c06fabe6c725de50e1625e1060f1571cc21a9260febadc1f/tree_sitter_sql-0.3.11-cp310-abi3-win_amd64.whl", hash = "sha256:c57b877702d218c0856592d33320c02b2dc8411d8820b3bf7b81be86c54fa0bb", size = 343550, upload-time = "2025-10-01T13:44:13.988Z" },
+    { url = "https://files.pythonhosted.org/packages/77/60/f10b8551f435d57a4748820ee30e66df2682820b2972375c2b89d2e5fb10/tree_sitter_sql-0.3.11-cp310-abi3-win_arm64.whl", hash = "sha256:8a1e42f0a2c9b01b23074708ecf5b8d21b9a0440e3dff279d8cf466cdf1a877e", size = 333547, upload-time = "2025-10-01T13:44:14.893Z" },
 ]
 
 [[package]]
