503 curated breaking changes across major versions of textual. Use this as a migration checklist before bumping dependencies.
Added `mode` argument to `push_screen` and `push_screen_wait` to enable pushing a screen to a non-active mode https://github.com/Textualize/textual/pull/6362
Added `App.mode_change_signal` and `App.screen_change_signal` https://github.com/Textualize/textual/pull/6362
Added 50ms delay when switching screens to allow state to udpate and prevent janky flash of old content https://github.com/Textualize/textual/pull/6362
Breaking change: Changed `Select.BLANK` to `Select.NULL` to avoid clash with newer `Widget.BLANK` Classvar https://github.com/Textualize/textual/pull/6374
Added `Tabs.get_tab` https://github.com/Textualize/textual/pull/6362
Added Catppuccin Frappe and Macchiato themes https://github.com/Textualize/textual/pull/6335
It is no longer a NOOP and warning to dismiss a non-active screen. The dismiss will still work, but the screen may not update if the current mode is not active. https://github.com/Textualize/textual/pull/6362
Breaking change: Optimization to line API to avoid applying background styles to widget content. In practice this means that you can no longer rely on blank Segments automatically getting the background color.
Fixed `Content.expand_tabs` https://github.com/Textualize/textual/pull/6038
Fix type hint for SelectType: only hashable types are allowed. https://github.com/Textualize/textual/pull/6034
Fixed return value for `Pilot.double_click` and `Pilot.triple_click` https://github.com/Textualize/textual/pull/6035
Fixed sizing issue with `Pretty` widget https://github.com/Textualize/textual/pull/6040 https://github.com/Textualize/textual/pull/6041
Fixed garbled inline app output when `inline_no_clear=True` https://github.com/Textualize/textual/pull/6080
Added `BAR_RENDERABLE` to `ProgressBar` widget https://github.com/Textualize/textual/pull/5963
Added `OptionList.set_options` https://github.com/Textualize/textual/pull/6048
Added `TextArea.suggestion` https://github.com/Textualize/textual/pull/6048
Added `TextArea.placeholder` https://github.com/Textualize/textual/pull/6048
Added `Header.format_title` and `App.format_title` for easier customization of title in the Header https://github.com/Textualize/textual/pull/6051
Added `Widget.get_line_filters` and `App.get_line_filters` https://github.com/Textualize/textual/pull/6057
Added `Binding.Group` https://github.com/Textualize/textual/pull/6070
Added `DOMNode.displayed_children` https://github.com/Textualize/textual/pull/6070
Added `TextArea.hide_suggestion_on_blur` boolean https://github.com/Textualize/textual/pull/6070
Added `OptionList.highlighted_option` property https://github.com/Textualize/textual/pull/6090
Added `TextArea.update_suggestion` method https://github.com/Textualize/textual/pull/6090
Added `textual.getters.app` https://github.com/Textualize/textual/pull/6089
Breaking change: The `renderable` property on the `Static` widget has been changed to `content`. https://github.com/Textualize/textual/pull/6041
Breaking change: `HeaderTitle` widget is now a static, with no `text` and `sub_text` reactives https://github.com/Textualize/textual/pull/6051
Breaking change: Renamed `Label` constructor argument `renderable` to `content` for consistency https://github.com/Textualize/textual/pull/6045
Breaking change: Removed `Markdown.code_dark_theme`, `Markdown.code_light_theme`, `Markdown.code_indent_guides` which are no longer needed with the new code fence. https://github.com/Textualize/textual/pull/5967
Removed focus style from Markdown, as it can be a little expensive https://github.com/Textualize/textual/commit/e84600cfb31630f8b5493bf1043a4a1e7c212f7c
Added `compact` parameter to `MaskedInput` https://github.com/Textualize/textual/pull/5952
Added `Markdown.append` https://github.com/Textualize/textual/pull/5950
Breaking change: `Widget.anchor` now has different semantics. It should be applied to a container and anchors to the bottom of the scroll position. https://github.com/Textualize/textual/pull/5950
Added `Widget.release_anchor` https://github.com/Textualize/textual/pull/5950
Fixed `query_one` and `query_exactly_one` not raising documented `WrongType` exception. https://github.com/Textualize/textual/pull/5945
Fixed logging to a file on Windows https://github.com/Textualize/textual/issues/5941
Fixed eight bit colors crashing when applying dim style https://github.com/Textualize/textual/pull/5957
Potential breaking change: Changed default `query_one` and `query_exactly_one` search to breadth first https://github.com/Textualize/textual/pull/5930
Cursor is now visible by default when in read only mode (restoring pre 3.6.0 behavior) https://github.com/Textualize/textual/pull/5934
Fixed issue with Keylines not scrolling https://github.com/Textualize/textual/pull/5936
Added textual.getters https://github.com/Textualize/textual/pull/5930
Added a `show_cursor` boolean to TextArea https://github.com/Textualize/textual/pull/5934
Added missing `scroll_end` parameter to the `Log.write_line` method https://github.com/Textualize/textual/pull/5672
Fixed crash on clicking line API border https://github.com/Textualize/textual/pull/5641
Content now has a default argument of an empty string, so `Content()` is equivalent to `Content("")`
Breaking change: `App.query` and friends will now always query the default (first) screen, not necessarily the active screen.
Fixed Select.selection now correctly returns None if Select.BLANK is selected instead of an AssertionError
Assigned names to Textual-specific threads: `textual-input`, `textual-output`. These should become visible in monitoring tools (ps, top, htop) as of Python 3.14. https://github.com/Textualize/textual/pull/5654
Tabs now accept Content or Textual markup https://github.com/Textualize/textual/pull/5657
Buttons will now use Textual markup rather than console markup
tree-sitter languages are now loaded lazily, improving cold-start time https://github.com/Textualize/textual/pull/563
Static and Label now accept Content objects, satisfying type checkers https://github.com/Textualize/textual/pull/5618
Fixed click selection not being disabled when allow_select was set to false https://github.com/Textualize/textual/issues/5627
Fixed additional spaces after text-wrapping https://github.com/Textualize/textual/pull/5657
Restored support for blink https://github.com/Textualize/textual/pull/5675
Fixed scrolling breaking on DataTable with `overflow: hidden` https://github.com/Textualize/textual/pull/5681
Added Widget.preflight_checks to perform some debug checks after a widget is instantiated, to catch common errors. https://github.com/Textualize/textual/pull/5588
Added text-padding style https://github.com/Textualize/textual/pull/5657
Added `Content.first_line` property https://github.com/Textualize/textual/pull/5657
Added `Content.from_text` constructor https://github.com/Textualize/textual/pull/5657
Added `Content.empty` constructor https://github.com/Textualize/textual/pull/5657
Added `Content.pad` method https://github.com/Textualize/textual/pull/5657
Added `Style.has_transparent_foreground` property https://github.com/Textualize/textual/pull/5657
Breaking change: Removed `wrap` argument from OptionList (use CSS `text-wrap: nowrap; text-overflow: ellipsis`)
Breaking change: Removed `tooltip` argument from OptionList. Use `tooltip` attribute or `with_tooltip(...)` method.
Added `times` parameter to `Pilot.click` method, for simulating rapid clicks https://github.com/Textualize/textual/pull/5369
Breaking change: Change default quit key to `ctrl+q` https://github.com/Textualize/textual/pull/5352
Added support for double/triple/etc clicks via `chain` attribute on `Click` events https://github.com/Textualize/textual/pull/5369
Fixed issue with alignment in auto containers https://github.com/Textualize/textual/pull/5360
Added `App.clipboard` https://github.com/Textualize/textual/pull/5352
Added standard cut/copy/paste (ctrl+x, ctrl+c, ctrl+v) bindings to Input / TextArea https://github.com/Textualize/textual/pull/5352 & https://github.com/Textualize/textual/pull/5374
Added `system` boolean to Binding, which hides the binding from the help panel https://github.com/Textualize/textual/pull/5352
Text can now be select using mouse or keyboard in the Input widget https://github.com/Textualize/textual/pull/5340
The command palette will now select the top item automatically https://github.com/Textualize/textual/pull/5361
Implemented a better matching algorithm for the command palette https://github.com/Textualize/textual/pull/5365
`ctrl+shift+k` now deletes the current line in `TextArea`, and `ctrl+x` will cut
Breaking change: `TextArea.register_language` signature changed https://github.com/Textualize/textual/pull/5320
Breaking change: `Document.query_syntax_tree` signature changed https://github.com/Textualize/textual/pull/5320
Added `Input.select_on_focus` (default `True`) to enable/disable selecting all text in an `Input` on focus https://github.com/Textualize/textual/pull/5340
`Input.restrict` now checked on all edit operations (rather than just on `insert`) https://github.com/Textualize/textual/pull/5340
Added "tab" border style https://github.com/Textualize/textual/pull/5335
Added support for XML syntax highlighting https://github.com/Textualize/textual/pull/5320
Added `TextArea.update_highlight_query` https://github.com/Textualize/textual/pull/5320
`Input` widget now supports text selection via mouse and keyboard https://github.com/Textualize/textual/pull/5340
Added new keybinds (hold shift) for text selection in `Input` https://github.com/Textualize/textual/pull/5340
Added `Input.selection` reactive attribute for reading and updating the current selection https://github.com/Textualize/textual/pull/5340
Added `Input.selected_text` property for getting the currently selected text https://github.com/Textualize/textual/pull/5340
`Input` can now be scrolled independently of cursor position (hold shift and scroll with the mouse wheel in supported environments) https://github.com/Textualize/textual/pull/5340
Fixed Select not scrolling highlight in to view when clicked https://github.com/Textualize/textual/issues/5255
Upgraded tree-sitter to 0.23+ (`syntax` extras) https://github.com/Textualize/textual/pull/5320
Some syntax highlighting changes due to tree-sitter updates https://github.com/Textualize/textual/pull/5320
Fixed selection list wrapping https://github.com/Textualize/textual/pull/5331
Fixed CSS encoding issue on Windows https://github.com/Textualize/textual/pull/5324
Breaking change: Removed `Input` reactive attributes `view_position`, `cursor_position` (now exists as a property which proxies to the `Input.selection` reactive attribute), https://github.com/Textualize/textual/pull/5340
Breaking change: `SyntaxAwareDocument.language_name` property removed https://github.com/Textualize/textual/pull/5320
Added methods `Input.replace`, `Input.insert`, `Input.delete`, `Input.delete_selection` for editing text https://github.com/Textualize/textual/pull/5340
Breaking change: Kotlin syntax highlighting removed from `TextArea` https://github.com/Textualize/textual/pull/5320
Removed `App.HOVER_EFFECTS_SCROLL_PAUSE` https://github.com/Textualize/textual/pull/5238
Fixed issue with screen not updating when auto_refresh was enabled https://github.com/Textualize/textual/pull/5063
Breaking change: `Widget.set_loading` no longer return an awaitable https://github.com/Textualize/textual/pull/5079
Added descriptions to bindings for all internal widgets, and updated casing to be consistent https://github.com/Textualize/textual/pull/5062
Fixed issues with inspecting the lazy loaded widgets module https://github.com/Textualize/textual/pull/5080
Added `DOMNode.is_on_screen` property https://github.com/Textualize/textual/pull/5063
Added support for keymaps (user configurable key bindings) https://github.com/Textualize/textual/pull/5038
Fixed issues regarding loading indicator https://github.com/Textualize/textual/pull/5079
`BINDING_GROUP_TITLE` now defaults to `None` https://github.com/Textualize/textual/pull/5023
Default `scrollbar-size-vertical` changed to `2` in inline styles to match Widget default CSS (unlikely to affect users) https://github.com/Textualize/textual/pull/4982
Added `nocolor` psuedoclass when NO_COLOR env var is set- `BINDING_GROUP_TITLE` now defaults to `None` https://github.com/Textualize/textual/pull/5023
Added `App.INLINE_PADDING` to define the number of spaces above inline apps https://github.com/Textualize/textual/pull/5000
Added `MaskedInput` widget https://github.com/Textualize/textual/pull/4783
Input validation for floats and integers accept embedded underscores, e.g., "1_234_567" is valid. https://github.com/Textualize/textual/pull/4784
Support for `"none"` value added to `dock`, `hatch` and `split` styles https://github.com/Textualize/textual/pull/4982
Support for `"none"` added to box and border style properties (e.g `widget.style.border = "none"`) https://github.com/Textualize/textual/pull/4982
Docstrings added to most style properties https://github.com/Textualize/textual/pull/4982
Added `ansi_color` switch to App to permit ANSI (themed) colors https://github.com/Textualize/textual/pull/5000
Added `:ansi` pseudo class https://github.com/Textualize/textual/pull/5000
Added `-ansi-scrollbar` style to widgets https://github.com/Textualize/textual/pull/5000
Added `TreeNode.siblings`, `TreeNode.next_sibling`, `TreeNode.previous_sibling`, `TreeNode.is_collapsed` https://github.com/Textualize/textual/pull/5023
Added additional bindings to Tree widget https://github.com/Textualize/textual/pull/5023
Added `Tree.center_scroll` https://github.com/Textualize/textual/pull/5023
Added `Tree.unselect` https://github.com/Textualize/textual/pull/5023
Input validation for integers no longer accepts scientific notation like '1.5e2'; must be castable to int. https://github.com/Textualize/textual/pull/4784
Some fixes in `RichLog` result in slightly different semantics, see docstrings for details https://github.com/Textualize/textual/pull/4978
Changed how scrollbars are rendered (will have no visual effect, but will break snapshot tests) https://github.com/Textualize/textual/pull/5000
Added `enabled` switch to filters (mostly used internally) https://github.com/Textualize/textual/pull/5000
Breaking change: Changed how scrollbars are rendered so they work in ansi mode (will break snapshots) https://github.com/Textualize/textual/pull/5023
Input validation of floats no longer accepts NaN (not a number). https://github.com/Textualize/textual/pull/4784
Fixed issues with screenshots by simplifying segments only for snapshot tests https://github.com/Textualize/textual/issues/4929
Removed border-right from `Toast` https://github.com/Textualize/textual/pull/4984
Added `SelectorSet.is_simple` https://github.com/Textualize/textual/pull/4950
Added `DOMNode.query_exactly_one` https://github.com/Textualize/textual/pull/4950
KeyPanel will show multiple keys if bound to the same action https://github.com/Textualize/textual/pull/4940
Breaking change: `DOMNode.query_one` will not `raise TooManyMatches` https://github.com/Textualize/textual/pull/4950
Added `DOMNode.check_consume_key` https://github.com/Textualize/textual/pull/4940
Added `App.ESCAPE_TO_MINIMIZE`, `App.screen_to_minimize`, and `Screen.ESCAPE_TO_MINIMIZE` https://github.com/Textualize/textual/pull/4951
Changed default command palette binding to `ctrl+p` https://github.com/Textualize/textual/pull/4867
Added `App.COMMAND_PALETTE_KEY` to change default command palette key binding https://github.com/Textualize/textual/pull/4867
Breaking change: `App.get_key_display` now requires `textual.binding.Binding` instead of `str`.
Added `tooltip` to Binding https://github.com/Textualize/textual/pull/4859
Added a link to the command palette to the Footer (set `show_command_palette=False` to disable) https://github.com/Textualize/textual/pull/4867
Added `TOOLTIP_DELAY` to App to customize time until a tooltip is displayed
Added "Show keys" option to system commands to show a summary of key bindings. https://github.com/Textualize/textual/pull/4876
Added "split" CSS style, currently undocumented, and may change. https://github.com/Textualize/textual/pull/4876
Added `Region.get_spacing_between` https://github.com/Textualize/textual/pull/4876
Added `App.get_key_display` https://github.com/Textualize/textual/pull/4890
Added `DOMNode.BINDING_GROUP` https://github.com/Textualize/textual/pull/4906
Added `DOMNode.HELP` classvar which contains Markdown help to be shown in the help panel https://github.com/Textualize/textual/pull/4915
Added `App.get_system_commands` https://github.com/Textualize/textual/pull/4920
Added "Save Screenshot" system command https://github.com/Textualize/textual/pull/4922
Keys such as escape and space are now displayed in lower case in footer https://github.com/Textualize/textual/pull/4876
Disallowed `Screen` instances in `App.SCREENS` and `App.MODES`
Fix crash when `validate_on` value isn't a set https://github.com/Textualize/textual/pull/4868
Fix `Input.cursor_blink` having no effect on the blink cycle after mounting https://github.com/Textualize/textual/pull/4869
Fixed scrolling by page not taking scrollbar in to account https://github.com/Textualize/textual/pull/4916
Fixed `App.MODES` being the same for all instances -- per-instance modes now exist internally
Removed caps_lock and num_lock modifiers https://github.com/Textualize/textual/pull/4861
Breaking change: Removed `ClassicFooter` widget (please use new `Footer` widget) https://github.com/Textualize/textual/pull/4921
Removed `ctrl_to_caret` and `upper_case_keys` from Footer. These can be implemented in `App.get_key_display`.
Renamed `SystemCommands` to `SystemCommandsProvider` https://github.com/Textualize/textual/pull/4920
Breaking change: `Screen.dismiss` now returns an Awaitable rather than a bool. https://github.com/Textualize/textual/pull/4672
Fixed issue with mouse movements on non-active screen https://github.com/Textualize/textual/pull/4688
Fixed link inside markdown table not posting a `Markdown.LinkClicked` message https://github.com/Textualize/textual/issues/4683
Fixed mouse code leakage https://github.com/Textualize/textual/pull/4681
Snapshot tests will normalize SVG output so that changes with no visual impact don't break snapshots, but this release will break most of them.
Breaking change: `App.push_screen` now returns an Awaitable rather than a screen. https://github.com/Textualize/textual/pull/4672
Fixed grid + keyline when the grid has auto dimensions https://github.com/Textualize/textual/pull/4680
Stylistic changes to Markdown (simpler headers, less margin, etc) https://github.com/Textualize/textual/pull/4541
Fixed actions in links https://github.com/Textualize/textual/pull/4540
Breaking change: New Footer (likely a drop in replacement, unless you have customized styles) https://github.com/Textualize/textual/pull/4537
Added `App.get_default_screen` https://github.com/Textualize/textual/pull/4520
Added dynamic binding via `DOMNode.check_action` https://github.com/Textualize/textual/pull/4516
Added "focused" to allowed action namespaces https://github.com/Textualize/textual/pull/4516
Breaking change: Actions (as used in bindings) will no longer check the app if they are unhandled. This was undocumented anyway, and not that useful. https://github.com/Textualize/textual/pull/4516
Added `"focused"` action namespace so you can bind a key to an action on the focused widget https://github.com/Textualize/textual/pull/4516
Breaking change: Renamed `App.namespace_bindings` to `active_bindings`
Support for pseudo-classes in nested TCSS https://github.com/Textualize/textual/issues/4039
Mapping of ANSI colors to hex codes configurable via `App.ansi_theme_dark` and `App.ansi_theme_light` https://github.com/Textualize/textual/pull/4192
`Pilot.resize_terminal` to resize the terminal in testing https://github.com/Textualize/textual/issues/4212
Added `sort_children` method https://github.com/Textualize/textual/pull/4244
Fixed `TextArea.code_editor` missing recently added attributes https://github.com/Textualize/textual/pull/4172
Fixed `Sparkline` not working with data in a `deque` https://github.com/Textualize/textual/issues/3899
Tooltips are now cleared when the related widget is no longer under them https://github.com/Textualize/textual/issues/3045
Simplified tree-sitter highlight queries for HTML, which also seems to fix segfault issue https://github.com/Textualize/textual/pull/4195
Fixed `DirectoryTree.path` no longer reacting to new values https://github.com/Textualize/textual/issues/4208
Fixed content size cache with Pretty widget https://github.com/Textualize/textual/pull/4211
Fixed `grid-gutter` interaction with Pretty widget https://github.com/Textualize/textual/pull/4219
Fixed `TextArea` styling issue on alternate screens https://github.com/Textualize/textual/pull/4220
Fixed `RichLog.min_width` not being used https://github.com/Textualize/textual/pull/4223
Markdown component classes weren't refreshed when watching for CSS https://github.com/Textualize/textual/issues/3464
Fixed `OptionList.OptionHighlighted` leaking out of `Select` https://github.com/Textualize/textual/issues/4224
Fixed `Tab` enable/disable messages leaking into `TabbedContent` https://github.com/Textualize/textual/issues/4233
Fixed a style leak from `TabbedContent` https://github.com/Textualize/textual/issues/4232
Fixed active hidden scrollbars not releasing the mouse https://github.com/Textualize/textual/issues/4274
Fixed the mouse not being released when hiding a `TextArea` while mouse selection is happening https://github.com/Textualize/textual/issues/4292
Fix mouse scrolling not working when mouse cursor is over a disabled child widget https://github.com/Textualize/textual/issues/4242
Clicking a non focusable widget focus ancestors https://github.com/Textualize/textual/pull/4236
Fixed writing to invisible `RichLog` https://github.com/Textualize/textual/pull/4223
Rename `CollapsibleTitle.action_toggle` to `action_toggle_collapsible` to fix clash with `DOMNode.action_toggle` https://github.com/Textualize/textual/pull/4221
Rename `Switch.action_toggle` to `action_toggle_switch` to fix clash with `DOMNode.action_toggle` https://github.com/Textualize/textual/issues/4262
`TextArea.theme` now defaults to `"css"` instead of None, and is no longer optional https://github.com/Textualize/textual/pull/4157
Add some syntax highlighting to TextArea default theme https://github.com/Textualize/textual/pull/4149
Improve support for rule declarations after nested TCSS rule sets https://github.com/Textualize/textual/issues/3999
TextArea now has `read_only` mode https://github.com/Textualize/textual/pull/4151
Improve support for selector lists in nested TCSS https://github.com/Textualize/textual/issues/3969
Add undo and redo to TextArea https://github.com/Textualize/textual/pull/4124
Added support for command palette command discoverability https://github.com/Textualize/textual/pull/4154
Fixed out-of-view `Tab` not being scrolled into view when `Tabs.active` is assigned https://github.com/Textualize/textual/issues/4150
Fixed `TabbedContent.TabActivate` not being posted when `TabbedContent.active` is assigned https://github.com/Textualize/textual/issues/4150
Breaking change: Renamed `TextArea.tab_behaviour` to `TextArea.tab_behavior` https://github.com/Textualize/textual/pull/4124
Breaking change: `TextArea` will not use `Escape` to shift focus if the `tab_behaviour` is the default https://github.com/Textualize/textual/issues/4110
`Tree` (and `DirectoryTree`) grew an attribute `lock` that can be used for synchronization across coroutines https://github.com/Textualize/textual/issues/4056
Fixed `DirectoryTree.clear_node` not clearing the node specified https://github.com/Textualize/textual/issues/4122
`DirectoryTree.reload` and `DirectoryTree.reload_node` now preserve state when reloading https://github.com/Textualize/textual/issues/4056
Fixed a crash in the TextArea when performing a backward replace https://github.com/Textualize/textual/pull/4126
Fixed selection not updating correctly when pasting while there's a non-zero selection https://github.com/Textualize/textual/pull/4126
`TextArea` cursor will now be invisible before first focus https://github.com/Textualize/textual/pull/4128
Fix toggling `TextArea.cursor_blink` reactive when widget does not have focus https://github.com/Textualize/textual/pull/4128
Added DOMQuery.set https://github.com/Textualize/textual/pull/4075
Added DOMNode.set_reactive https://github.com/Textualize/textual/pull/4075
Added DOMNode.data_bind https://github.com/Textualize/textual/pull/4075
Added DOMNode.action_toggle https://github.com/Textualize/textual/pull/4075
Added Worker.cancelled_event https://github.com/Textualize/textual/pull/4075
Fixed scrolling in long `OptionList` by adding max height of 100% https://github.com/Textualize/textual/issues/4021
Breaking change: keyboard navigation in `RadioSet`, `ListView`, `OptionList`, and `SelectionList`, no longer allows highlighting disabled items https://github.com/Textualize/textual/issues/3881
Fixed a hang in the Linux driver when connected to a pipe https://github.com/Textualize/textual/issues/4104
Fixed broken `OptionList` `Option.id` mappings https://github.com/Textualize/textual/issues/4101
Parameter `animate` from `DataTable.move_cursor` was being ignored https://github.com/Textualize/textual/issues/3840
`show_line_numbers=False` - line numbers are now disabled by default.
Changed the default notification timeout from 3 to 5 seconds https://github.com/Textualize/textual/pull/4059
Added `TextArea.tab_behaviour` reactive attribute added https://github.com/Textualize/textual/pull/3933
`soft_wrap=True` - soft wrapping is now enabled by default.
Breaking change: Significant changes to `TextArea.__init__` default values/behaviour https://github.com/Textualize/textual/pull/3933
`tab_behaviour="focus"` - pressing the tab key now switches focus instead of indenting by default.
Breaking change: `TextArea` default theme changed to CSS, and default styling changed https://github.com/Textualize/textual/pull/4074
Added `App.action_suspend_process` https://github.com/Textualize/textual/pull/4064
Breaking change: `DOMNode.has_pseudo_class` now accepts a single name only https://github.com/Textualize/textual/pull/3970
Made `textual.cache` (formerly `textual._cache`) public https://github.com/Textualize/textual/pull/3976
`Tab.label` can now be used to change the label of a tab https://github.com/Textualize/textual/pull/3979
Prior scroll animations are now cancelled on new scrolls https://github.com/Textualize/textual/pull/4081
Added `DOMNode.has_pseudo_classes` https://github.com/Textualize/textual/pull/3970
Added `Widget.allow_focus` and `Widget.allow_focus_children` https://github.com/Textualize/textual/pull/3989
Added `TextArea.soft_wrap` reactive attribute added https://github.com/Textualize/textual/pull/3933
Added `TextArea.code_editor` classmethod/alternative constructor https://github.com/Textualize/textual/pull/3933
Added `TextArea.wrapped_document` attribute which can convert between wrapped visual coordinates and locations https://github.com/Textualize/textual/pull/3933
Added `show_line_numbers` to `TextArea.__init__` https://github.com/Textualize/textual/pull/3933
Added component classes allowing `TextArea` to be styled using CSS https://github.com/Textualize/textual/pull/4074
Added `Query.blur` and `Query.focus` https://github.com/Textualize/textual/pull/4012
Added `MessagePump.message_queue_size` https://github.com/Textualize/textual/pull/4012
Added `TabbedContent.active_pane` https://github.com/Textualize/textual/pull/4012
Added `App.suspend` https://github.com/Textualize/textual/pull/4064
Breaking change: `Widget.move_child` parameters `before` and `after` are now keyword-only https://github.com/Textualize/textual/pull/3896
`Widget.move_child` would break if `before`/`after` is set to the index of the widget in `child` https://github.com/Textualize/textual/issues/1743
Fixed `Tree.clear` not retaining the root's expanded state https://github.com/Textualize/textual/issues/3557
Fixed auto width text not processing markup https://github.com/Textualize/textual/issues/3918
Added nesting of CSS https://github.com/Textualize/textual/pull/3946
Style tweak to toasts https://github.com/Textualize/textual/pull/3955
Added textual.lazy https://github.com/Textualize/textual/pull/3936
Added App.push_screen_wait https://github.com/Textualize/textual/pull/3955
Added caching of rules attributes and `cache` parameter to Stylesheet.apply https://github.com/Textualize/textual/pull/3880
Added `Collapsible.title` reactive attribute https://github.com/Textualize/textual/pull/3830
Disabled radio buttons could be selected with the keyboard https://github.com/Textualize/textual/issues/3839
Fixed zero width scrollbars causing content to disappear https://github.com/Textualize/textual/issues/3886
Added a `pane` attribute to `TabbedContent.TabActivated` https://github.com/Textualize/textual/pull/3815
The tabs within a `TabbedContent` now prefix their IDs to stop any clash with their associated `TabPane` https://github.com/Textualize/textual/pull/3815
Breaking change: `tab` is no longer a `@on` decorator selector for `TabbedContent.TabActivated` -- use `pane` instead https://github.com/Textualize/textual/pull/3815
Removed renderables/align.py which was no longer used.
Added `Select.from_values` class method that can be used to initialize a Select control with an iterator of values https://github.com/Textualize/textual/pull/3743
Fixed NoWidget when mouse goes outside window https://github.com/Textualize/textual/pull/3790
Breaking changes https://github.com/Textualize/textual/issues/1530
Breaking change: Dropped 3.7 support https://github.com/Textualize/textual/pull/3766
Friendly error messages when trying to mount non-widgets https://github.com/Textualize/textual/pull/3780
`Tree` now forces a scroll when `scroll_to_node` is called https://github.com/Textualize/textual/pull/3786
Brought rxvt's use of shift-numpad keys in line with most other terminals https://github.com/Textualize/textual/pull/3769
Added support for Ctrl+Fn and Ctrl+Shift+Fn keys in urxvt https://github.com/Textualize/textual/pull/3737
Removed spurious print statements from press_keys https://github.com/Textualize/textual/issues/3785
`link-hover-color` renamed to `link-color-hover`
`link-hover-style` renamed to `link-style-hover`
`link-hover-background` renamed to `link-background-hover`
Duplicate CSS errors when parsing CSS from a screen https://github.com/Textualize/textual/issues/3581
Added missing `blur` pseudo class https://github.com/Textualize/textual/issues/3439
Fixed visual glitched characters on Windows due to Python limitation https://github.com/Textualize/textual/issues/2548
Fixed `ScrollableContainer` to receive focus https://github.com/Textualize/textual/pull/3632
Fixed app-level queries causing a crash when the command palette is active https://github.com/Textualize/textual/issues/3633
Fixed outline not rendering correctly in some scenarios (e.g. on Button widgets) https://github.com/Textualize/textual/issues/3628
Fixed live-reloading of screen CSS https://github.com/Textualize/textual/issues/3454
`Select.value` could be in an invalid state https://github.com/Textualize/textual/issues/3612
Off-by-one in CSS error reporting https://github.com/Textualize/textual/issues/3625
Loading indicators and app notifications overlapped in the wrong order https://github.com/Textualize/textual/issues/3677
Widgets being loaded are disabled and have their scrolling explicitly disabled too https://github.com/Textualize/textual/issues/3677
Method render on a widget could be called before mounting said widget https://github.com/Textualize/textual/issues/2914
Exceptions to `textual.widgets.select` https://github.com/Textualize/textual/pull/3614
`InvalidSelectValueError` for when setting a `Select` to an invalid value
`EmptySelectError` when creating/setting a `Select` to have no options when `allow_blank` is `False`
`Select` methods https://github.com/Textualize/textual/pull/3614
Constant `Select.BLANK` to flag an empty selection https://github.com/Textualize/textual/pull/3614
Added `restrict`, `type`, `max_length`, and `valid_empty` to Input https://github.com/Textualize/textual/pull/3657
Added `Pilot.mouse_down` to simulate `MouseDown` events https://github.com/Textualize/textual/pull/3495
Added `Pilot.mouse_up` to simulate `MouseUp` events https://github.com/Textualize/textual/pull/3495
Added `Widget.is_mounted` property https://github.com/Textualize/textual/pull/3709
Added `TreeNode.refresh` https://github.com/Textualize/textual/pull/3639
Added `key` argument to the `DataTable.sort()` method, allowing the table to be sorted using a custom function (or other callable) https://github.com/Textualize/textual/pull/3090
Added `initial` to all css rules, which restores default (i.e. value from DEFAULT_CSS) https://github.com/Textualize/textual/pull/3566
Fixed crash when `Tabs` appeared as a descendant of `TabbedContent` in the DOM https://github.com/Textualize/textual/pull/3602
Fixed `Input.cursor_blink` reactive not changing blink state after `Input` was mounted https://github.com/Textualize/textual/pull/3498
Fixed `DirectoryTree` race-condition crash when changing path https://github.com/Textualize/textual/pull/3498
Fixed issue with `LRUCache.discard` https://github.com/Textualize/textual/issues/3537
Fixed `DataTable` not scrolling to rows that were just added https://github.com/Textualize/textual/pull/3552
Fixed cache bug with `DataTable.update_cell` https://github.com/Textualize/textual/pull/3551
Fixed CSS errors being repeated https://github.com/Textualize/textual/pull/3566
Fix issue with chunky highlights on buttons https://github.com/Textualize/textual/pull/3571
Fixed `OptionList` event leakage from `CommandPalette` to `App`.
Fixed crash in `LoadingIndicator` https://github.com/Textualize/textual/pull/3498
Fixed the command palette cancelling other workers https://github.com/Textualize/textual/issues/3615
Add Document `get_index_from_location` / `get_location_from_index` https://github.com/Textualize/textual/pull/3410
Add setter for `TextArea.text` https://github.com/Textualize/textual/discussions/3525
Added HorizontalPad to pad.py https://github.com/Textualize/textual/pull/3571
Added `AwaitComplete` class, to be used for optionally awaitable return values https://github.com/Textualize/textual/pull/3498
Breaking change: `Button.ACTIVE_EFFECT_DURATION` classvar converted to `Button.active_effect_duration` attribute https://github.com/Textualize/textual/pull/3498
Breaking change: `Input.cursor_blink` reactive updated to not run on mount (now `init=False`) https://github.com/Textualize/textual/pull/3498
Breaking change: `AwaitTabbedContent` class removed https://github.com/Textualize/textual/pull/3498
Breaking change: `Tabs.clear` now returns an `AwaitComplete` instead of an `AwaitRemove` https://github.com/Textualize/textual/pull/3498
Fixed `Tabs.active` attribute value not being re-assigned after removing a tab or clearing https://github.com/Textualize/textual/pull/3498
Breaking change: `Tabs.remove_tab` now returns an `AwaitComplete` instead of an `AwaitRemove` https://github.com/Textualize/textual/pull/3498
Breaking change: `Input.blink_timer` made private (renamed to `Input._blink_timer`) https://github.com/Textualize/textual/pull/3498
Reactive `cell_padding` (and respective parameter) to define horizontal cell padding in data table columns https://github.com/Textualize/textual/issues/3435
Added `wait_for_dismiss` parameter to `App.push_screen` https://github.com/Textualize/textual/pull/3477
Stop eating stdout/stderr in headless mode - print works again in tests https://github.com/Textualize/textual/pull/3486
`OutOfBounds` exception to be raised by `Pilot` https://github.com/Textualize/textual/pull/3360
`TextArea.cursor_screen_offset` property for getting the screen-relative position of the cursor https://github.com/Textualize/textual/pull/3408
`Input.cursor_screen_offset` property for getting the screen-relative position of the cursor https://github.com/Textualize/textual/pull/3408
Added `Input.clear` method https://github.com/Textualize/textual/pull/3430
Added `TextArea.SelectionChanged` and `TextArea.Changed` messages https://github.com/Textualize/textual/pull/3442
Fixed fractional styles to allow integer values https://github.com/Textualize/textual/issues/3414
`Pilot.click`/`Pilot.hover` can't use `Screen` as a selector https://github.com/Textualize/textual/issues/3395
App exception when a `Tree` is initialized/mounted with `disabled=True` https://github.com/Textualize/textual/issues/3407
Fixed `print` locations not being correctly reported in `textual console` https://github.com/Textualize/textual/issues/3237
Fix location of IME and emoji popups https://github.com/Textualize/textual/pull/3408
Fixed application freeze when pasting an emoji into an application on Windows https://github.com/Textualize/textual/issues/3178
Fixed duplicate option ID handling in the `OptionList` https://github.com/Textualize/textual/issues/3455
Allow scrollbar-size to be set to 0 to achieve scrollable containers with no visible scrollbars https://github.com/Textualize/textual/pull/3488
Breaking change: tree-sitter and tree-sitter-languages dependencies moved to `syntax` extra https://github.com/Textualize/textual/pull/3398
`Pilot.click`/`Pilot.hover` now raises `OutOfBounds` when clicking outside visible screen https://github.com/Textualize/textual/pull/3360
`Pilot.click`/`Pilot.hover` now return a Boolean indicating whether the click/hover landed on the widget that matches the selector https://github.com/Textualize/textual/pull/3360
Timer callbacks are now typed more loosely https://github.com/Textualize/textual/issues/3434
Fix crash when removing and updating DataTable cell at same time https://github.com/Textualize/textual/pull/3487
Added a delay to when the `No Matches` message appears in the command palette, thus removing a flicker https://github.com/Textualize/textual/pull/3399
Breaking change: CSS in DEFAULT_CSS is now automatically scoped to the widget (set SCOPED_CSS=False) to disable
Added :dark and :light pseudo classes
Breaking change: Changed `Markdown.goto_anchor` to return a boolean (if the anchor was found) instead of `None` https://github.com/Textualize/textual/pull/3334
Fixed `DataTable` not updating component styles on hot-reloading https://github.com/Textualize/textual/issues/3312
Added a TextArea https://github.com/Textualize/textual/pull/2931
Attribute `Input.validate_on` (and `__init__` parameter of the same name) to customise when validation occurs https://github.com/Textualize/textual/pull/3193
Properties `Header.screen_title` and `Header.screen_sub_title` https://github.com/Textualize/textual/pull/3199
Added the command palette https://github.com/Textualize/textual/pull/3058
`Input` is now validated when focus moves out of it https://github.com/Textualize/textual/pull/3193
Screen-specific (sub-)title attributes https://github.com/Textualize/textual/pull/3199:
`Screen.SUB_TITLE`
Fixed a crash in `MarkdownViewer` when clicking on a link that contains an anchor https://github.com/Textualize/textual/issues/3094
Fixed wrong message pump in pop_screen https://github.com/Textualize/textual/pull/3315
Widget.notify and App.notify are now thread-safe https://github.com/Textualize/textual/pull/3275
Breaking change: Widget.notify and App.notify now return None https://github.com/Textualize/textual/pull/3275
`Markdown.load` will now attempt to scroll to a related heading if an anchor is provided https://github.com/Textualize/textual/pull/3244
`ProgressBar` explicitly supports being set back to its indeterminate state https://github.com/Textualize/textual/pull/3286
Added `DirectoryTree.DirectorySelected` message https://github.com/Textualize/textual/issues/3200
Added `widgets.Collapsible` contributed by Sunyoung Yoo https://github.com/Textualize/textual/pull/2989
Fixed a crash when removing an option from an `OptionList` while the mouse is hovering over the last option https://github.com/Textualize/textual/issues/3270
App.unnotify is now private (renamed to App._unnotify) https://github.com/Textualize/textual/pull/3275
Property `Widget.focusable_children` https://github.com/Textualize/textual/pull/3070
Added Widget.is_vertical_scroll_end, Widget.is_horizontal_scroll_end, Widget.is_vertical_scrollbar_grabbed, Widget.is_horizontal_scrollbar_grabbed
Added widgets.Log
Breaking change: Renamed TextLog to RichLog
Breaking change: Creating a thread worker now requires that a `thread=True` keyword argument is passed https://github.com/Textualize/textual/pull/2938
Breaking change: the default style of a `DataTable` now has `max-height: 100%` https://github.com/Textualize/textual/issues/2959
Breaking change: `Markdown.load` no longer captures all errors and returns a `bool`, errors now propagate https://github.com/Textualize/textual/issues/2956
Added `App.stop_animation` https://github.com/Textualize/textual/issues/2786
Added App.begin_capture_print, App.end_capture_print, Widget.begin_capture_print, Widget.end_capture_print https://github.com/Textualize/textual/issues/2952
Added the ability to run async methods as thread workers https://github.com/Textualize/textual/pull/2938
Added `Widget.stop_animation` https://github.com/Textualize/textual/issues/2786
Fixed a crash when a `SelectionList` had a prompt wider than itself https://github.com/Textualize/textual/issues/2900
Fixed a bug where `Click` events were bubbling up from `Switch` widgets https://github.com/Textualize/textual/issues/2366
Fixed a crash when using empty CSS variables https://github.com/Textualize/textual/issues/1849
Fixed issue with tabs in TextLog https://github.com/Textualize/textual/issues/3007
Fixed a bug with `DataTable` hover highlighting https://github.com/Textualize/textual/issues/2909
`Tabs.add_tab` now takes `before` and `after` arguments to position a new tab https://github.com/Textualize/textual/pull/2778
Added `center` parameter to `Widget.scroll_to_region`
Added `origin_visible` parameter to `Widget.scroll_to_region`
Added `origin_visible` parameter to `Widget.scroll_to_center`
Fixed the `Tabs` `Underline` highlight getting "lost" in some extreme situations https://github.com/Textualize/textual/pull/2751
Breaking change: The `@on` decorator will now match a message class and any child classes https://github.com/Textualize/textual/pull/2746
Breaking change: Styles update to checkbox, radiobutton, OptionList, Select, SelectionList, Switch https://github.com/Textualize/textual/pull/2777
`Tabs.add_tab` is now optionally awaitable https://github.com/Textualize/textual/pull/2778
Class variable `CSS_PATH` to screens https://github.com/Textualize/textual/issues/2137
The devtools console now confirms when CSS files have been successfully loaded after a previous error https://github.com/Textualize/textual/pull/2716
Class variable `CSS` to screens https://github.com/Textualize/textual/issues/2137
Added `cursor_foreground_priority` and `cursor_background_priority` to `DataTable` https://github.com/Textualize/textual/pull/2736
Added Region.center
Added `TabbedContent.tab_count` https://github.com/Textualize/textual/pull/2751
Added `TabbedContent.add_pane` https://github.com/Textualize/textual/pull/2751
Added `TabbedContent.clear_panes` https://github.com/Textualize/textual/pull/2751
Added `TabbedContent.Cleared` https://github.com/Textualize/textual/pull/2751
Fixed setting `TreeNode.label` on an existing `Tree` node not immediately refreshing https://github.com/Textualize/textual/pull/2713
Correctly implement `__eq__` protocol in DataTable https://github.com/Textualize/textual/pull/2705
Fixed exceptions in Pilot tests being silently ignored https://github.com/Textualize/textual/pull/2754
Fixed issue where internal data of `OptionList` could be invalid for short window after `clear_options` https://github.com/Textualize/textual/pull/2754
Fixed `Tooltip` causing a `query_one` on a lone `Static` to fail https://github.com/Textualize/textual/issues/2723
Nested widgets wouldn't lose focus when parent is disabled https://github.com/Textualize/textual/issues/2772
Added `TabbedContent.remove_pane` https://github.com/Textualize/textual/pull/2751
`Placeholder.reset_color_cycle`
Removed `Widget.reset_focus` (now called `Widget.blur`) https://github.com/Textualize/textual/issues/2642
Fixed `!important` not applying to `border` https://github.com/Textualize/textual/issues/2420
Fixed `!important` not applying to `content-align` https://github.com/Textualize/textual/issues/2420
Fixed `!important` not applying to `outline` https://github.com/Textualize/textual/issues/2420
Fixed `!important` not applying to `overflow` https://github.com/Textualize/textual/issues/2420
Fixed `!important` not applying to `scrollbar-size` https://github.com/Textualize/textual/issues/2420
Fixed `outline-right` not being recognised https://github.com/Textualize/textual/issues/2446
Fixed OSError when a file system is not available https://github.com/Textualize/textual/issues/2468
Unknown psuedo-selectors will now raise a tokenizer error (previously they were silently ignored) https://github.com/Textualize/textual/pull/2445
Breaking change: `DirectoryTree.FileSelected.path` is now always a `Path` https://github.com/Textualize/textual/issues/2448
Setting attributes with a `compute_` method will now raise an `AttributeError` https://github.com/Textualize/textual/issues/2383
Fixed `outline` top and bottom not handling alpha - https://github.com/Textualize/textual/issues/2371
Fixed `!important` not applying to `align` https://github.com/Textualize/textual/issues/2420
Added `DirectoryTree.path` reactive attribute https://github.com/Textualize/textual/issues/2448
Added `DirectoryTree.FileSelected.node` https://github.com/Textualize/textual/pull/2463
Added `DirectoryTree.reload` https://github.com/Textualize/textual/issues/2448
Added textual.on decorator https://github.com/Textualize/textual/issues/2398
Unknown pseudo-selectors will now raise a tokenizer error (previously they were silently ignored) https://github.com/Textualize/textual/pull/2445
Watch methods can now optionally be private https://github.com/Textualize/textual/issues/2382
Breaking change: `Directorytree.load_directory` renamed to `Directorytree._load_directory` https://github.com/Textualize/textual/issues/2448
Breaking change: `VerticalScroll` no longer shows a required horizontal scrollbar by default
Breaking change: `HorizontalScroll` no longer shows a required vertical scrollbar by default
Breaking change: `Container` no longer shows required scrollbars by default https://github.com/Textualize/textual/issues/2361
Added `-c` switch to `textual run` which runs commands in a Textual dev environment.
`textual run` execs apps in a new context.
Textual console no longer parses console markup.
Breaking change: `RadioSet` is now a single focusable widget https://github.com/Textualize/textual/pull/2372
Breaking change: standard keyboard scrollable navigation bindings have been moved off `Widget` and onto a new base class for scrollable containers (see also below addition) https://github.com/Textualize/textual/issues/2332
`ScrollView` now inherits from `ScrollableContainer` rather than `Widget` https://github.com/Textualize/textual/issues/2332
Containers no longer inherit any bindings from `Widget` https://github.com/Textualize/textual/issues/2331
Added `ScrollableContainer`; a container class that binds the common navigation keys to scroll actions (see also above breaking change) https://github.com/Textualize/textual/issues/2332
Fixed dark mode toggles in a "child" screen not updating a "parent" screen https://github.com/Textualize/textual/issues/1999
Fixed "panel" border not exposed via CSS
Fixed `TabbedContent.active` changes not changing the actual content https://github.com/Textualize/textual/issues/2352
Fixed broken color on macOS Terminal https://github.com/Textualize/textual/issues/2359
Breaking change: Renamed `App.action_remove_class_` to `App.action_remove_class`
Breaking change: Removed `containers.Content` (use `containers.VerticalScroll` now)
Breaking change: Renamed `App.action_add_class_` to `App.action_add_class`
Changed signature of Driver. Technically a breaking change, but unlikely to affect anyone.
`HorizontalScroll` and `VerticalScroll` are now focusable by default https://github.com/Textualize/textual/pull/2317
Style updates are now done immediately rather than on_idle https://github.com/Textualize/textual/pull/2304
`ButtonVariant` is now exported from `textual.widgets.button` https://github.com/Textualize/textual/issues/2264
Added `border-title-color`, `border-title-background`, `border-title-style` rules https://github.com/Textualize/textual/issues/2289
A clicked tab will now be scrolled to the center of its tab container https://github.com/Textualize/textual/pull/2276
Added `border-subtitle-color`, `border-subtitle-background`, `border-subtitle-style` rules https://github.com/Textualize/textual/issues/2289
Fixed order styles are applied in DataTable - allows combining of renderable styles and component classes https://github.com/Textualize/textual/pull/2272
Fixed key combos with up/down keys in some terminals https://github.com/Textualize/textual/pull/2280
Fix empty ListView preventing bindings from firing https://github.com/Textualize/textual/pull/2281
Fix `get_component_styles` returning incorrect values on first call when combined with pseudoclasses https://github.com/Textualize/textual/pull/2304
Fixed `active_message_pump.get` sometimes resulting in a `LookupError` https://github.com/Textualize/textual/issues/2301
option `--port` to the command `textual console` to specify which port the console should connect to https://github.com/Textualize/textual/pull/2258
`Widget.scroll_to_center` method to scroll children to the center of container widget https://github.com/Textualize/textual/pull/2255 and https://github.com/Textualize/textual/pull/2276
Added `TabActivated` message to `TabbedContent` https://github.com/Textualize/textual/pull/2260
Added "panel" border style https://github.com/Textualize/textual/pull/2292
Breaking change: Timer.start is now private, and returns None. There was no reason to call this manually, so unlikely to affect anyone.
Added `DataTable.remove_row` method https://github.com/Textualize/textual/pull/2253
Added Worker API https://github.com/Textualize/textual/pull/2182
Breaking change: Markdown.update is no longer a coroutine https://github.com/Textualize/textual/pull/2182
`RadioSet` is now far less likely to report `pressed_button` as `None` https://github.com/Textualize/textual/issues/2203
Removed `sender` attribute from messages. It's now just private (`_sender`). https://github.com/Textualize/textual/pull/2071
Added `shift`, `meta` and `control` arguments to `Pilot.click`.
Added a LoadingIndicator widget https://github.com/Textualize/textual/pull/2018
Fixed issue where the horizontal scrollbar would be incorrectly enabled https://github.com/Textualize/textual/pull/2024
Fixed `Pilot.click` not correctly creating the mouse events https://github.com/Textualize/textual/issues/2022
Fixes issue where the horizontal scrollbar would be incorrectly enabled https://github.com/Textualize/textual/pull/2024
Fixes for tracebacks not appearing on exit https://github.com/Textualize/textual/issues/2027
Added Tabs Widget https://github.com/Textualize/textual/pull/2020
Fixed container not resizing when a widget is removed https://github.com/Textualize/textual/issues/2007
Breaking change: Renamed Widget.action and App.action to Widget.run_action and App.run_action
Breaking change: The Timer class now has just one method to stop it, `Timer.stop` which is non sync https://github.com/Textualize/textual/pull/1940
Breaking change: Messages don't require a `sender` in their constructor https://github.com/Textualize/textual/pull/1940
Many messages have grown a `control` property which returns the control they relate to. https://github.com/Textualize/textual/pull/1940
Updated styling to make it clear DataTable grows horizontally https://github.com/Textualize/textual/pull/1946
Changed the `Checkbox` character due to issues with Windows Terminal and Windows 10 https://github.com/Textualize/textual/issues/1934
Changed the `RadioButton` character due to issues with Windows Terminal and Windows 10 and 11 https://github.com/Textualize/textual/issues/1934
Changed the `Markdown` initial bullet character due to issues with Windows Terminal and Windows 10 and 11 https://github.com/Textualize/textual/issues/1982
The underscore `_` is no longer a special alias for the method `pilot.press`
Added `data_table` attribute to DataTable events https://github.com/Textualize/textual/pull/1940
Added `list_view` attribute to `ListView` events https://github.com/Textualize/textual/pull/1940
Added `radio_set` attribute to `RadioSet` events https://github.com/Textualize/textual/pull/1940
Added `switch` attribute to `Switch` events https://github.com/Textualize/textual/pull/1940
Added `hover` and `click` methods to `Pilot` https://github.com/Textualize/textual/pull/1966
Breaking change: Added `toggle_button` attribute to RadioButton and Checkbox events, replaces `input` https://github.com/Textualize/textual/pull/1940
A percentage alpha can now be applied to a border https://github.com/Textualize/textual/issues/1863
Added `Color.multiply_alpha`.
Added `ContentSwitcher` https://github.com/Textualize/textual/issues/1945
DataTable crash when enter pressed when table is empty https://github.com/Textualize/textual/pull/1973
Breaking change: There is now only `post_message` to post events, which is non-async, `post_message_no_wait` was dropped. https://github.com/Textualize/textual/pull/1940
Fixed bug that prevented pilot from pressing some keys https://github.com/Textualize/textual/issues/1815
DataTable race condition that caused crash https://github.com/Textualize/textual/pull/1962
Fixed scrollbar getting "stuck" to cursor when cursor leaves window during drag https://github.com/Textualize/textual/pull/1968 https://github.com/Textualize/textual/pull/2003
Removed `screen.visible_widgets` and `screen.widgets`
Removed `StylesUpdate` message. https://github.com/Textualize/textual/pull/1861
Methods `MessagePump.emit` and `MessagePump.emit_no_wait` https://github.com/Textualize/textual/pull/1738
Removed `reactive.watch` in favor of DOMNode.watch.
Get this data programmatically \u2014 free, no authentication.
curl https://depscope.dev/api/breaking/pypi/textual