Releases: Textualize/textual
The last release of the year, for real this time
Only Python 3.11 has a high resolution sleep by default. This adds a more accurate sleep for windows on Python < 3.11
[0.9.1] - 2022-12-30
Added
- Added textual._win_sleep for Python on Windows < 3.11 #1457
 
The performance release
No new functionality so speak of, but performance has improved over the 0.8.x version. A change to how rendered content is stored has made updates faster.
There is also a fix for slow updates on Windows. See this blog post for details.
This is likely the last release of the year, so I would like to share this music video which seems strangely appropriate.
https://www.youtube.com/watch?v=kAFxLXqP8UM&ab_channel=Nightwish
[0.9.0] - 2022-12-30
Added
- Added textual.strip.Strip primitive
 - Added textual._cache.FIFOCache
 - Added an option to clear columns in DataTable.clear() #1427
 
Changed
- Widget.render_line now returns a Strip
 - Fix for slow updates on Windows
 - Bumped Rich dependency
 
Fix for TextLog.clear
The Xmas release
I really should be pealing potatoes.
[0.8.1] - 2022-12-25
Fixed
- Fix for overflowing tree issue #1425
 
v0.8.0 with textual keys
Version 0.8.0 adds a new textual keys command which you can use to preview key events.
There are a few minor breaking changes in this release. See below for details.
[0.8.0] - 2022-12-22
Fixed
- Fixed issues with nested auto dimensions #1402
 - Fixed watch method incorrectly running on first set when value hasn't changed and init=False #1367
 App.darkcan now be set fromApp.on_loadwithout an error being raised #1369- Fixed setting 
visibilitychanges needing arefresh#1355 
Added
- Added 
textual.actions.SkipActionexception which can be raised from an action to allow parents to process bindings. - Added 
textual keyspreview. - Added ability to bind to a character in addition to key name. i.e. you can bind to "." or "full_stop".
 - Added TextLog.shrink attribute to allow renderable to reduce in size to fit width.
 
Changed
- Deprecated 
PRIORITY_BINDINGSclass variable. - Renamed 
chartocharacteron Key event. - Renamed 
key_nametonameon Key event. - Queries/
walk_childrenno longer includes self in results by default #1416 
You are bound to like this release
Mostly fixes in this release.
[0.7.0] - 2022-12-17
Added
- Added 
PRIORITY_BINDINGSclass variable, which can be used to control if a widget's bindings have priority by default. #1343 
Changed
- Renamed the 
Bindingargumentuniversaltopriority. #1343 - When looking for bindings that have priority, they are now looked from 
Appdownwards. #1343 BINDINGSon anApp-derived class have priority by default. #1343BINDINGSon aScreen-derived class have priority by default. #1343- Added a message parameter to Widget.exit
 
Fixed
Treemendous Redux
See the blog post for the low down on this release.
[0.6.0] - 2022-12-11
Added
- Added "inherited bindings" -- BINDINGS classvar will be merged with base classes, unless inherit_bindings is set to False
 - Added 
Treewidget which replacesTreeControl. - Added widget 
Placeholder#1200. 
Changed
- Rebuilt 
DirectoryTreewith newTreecontrol. - Empty containers with a dimension set to 
"auto"will now collapse instead of filling up the available space. - Container widgets now have default height of 
1fr. - The default 
widthof aLabelis nowauto. 
Fixed
Lazy screens
[0.5.0] - 2022-11-20
Added
- Add get_child_by_id and get_widget_by_id, remove get_child #1146
 - Add easing parameter to Widget.scroll_* methods #1144
 - Added Widget.call_later which invokes a callback on idle.
 DOMNode.ancestorsno longer includesself.- Added 
DOMNode.ancestors_with_self, which retains the old behaviour of
DOMNode.ancestors. - Improved the speed of 
DOMQuery.remove. - Added DataTable.clear
 - Added low-level 
textual.walkmethods. - It is now possible to 
awaitaWidget.remove.
#1094 - It is now possible to 
awaitaDOMQuery.remove. Note that this changes
the return value ofDOMQuery.remove, which used to returnself.
#1094 - Added Pilot.wait_for_animation
 - Added 
Widget.move_child#1121 - Added a 
Labelwidget #1190 - Support lazy-instantiated Screens (callables in App.SCREENS) #1185
 - Display of keys in footer has more sensible defaults #1213
 - Add App.get_key_display, allowing custom key_display App-wide #1213
 
Changed
- Watchers are now called immediately when setting the attribute if they are synchronous. #1145
 - Widget.call_later has been renamed to Widget.call_after_refresh.
 - Button variant values are now checked at runtime. #1189
 - Added caching of some properties in Styles object
 
Fixed
- Fixed DataTable row not updating after add #1026
 - Fixed issues with animation. Now objects of different types may be animated.
 - Fixed containers with transparent background not showing borders #1175
 - Fixed auto-width in horizontal containers #1155
 - Fixed Input cursor invisible when placeholder empty #1202
 - Fixed deadlock when removing widgets from the App #1219
 
Mounting excitement
Read the blog post: https://textual.textualize.io/blog/2022/11/08/version-040/#version-040
[0.4.0] - 2022-11-08
Changed
- Dropped support for mounting "named" and "anonymous" widgets via
App.mountandWidget.mount. Both methods now simply take one or more
widgets as positional arguments. DOMNode.query_onenow raises aTooManyMatchesexception if there is
more than one matching node.
#1096App.mountandWidget.mounthave newbeforeandafterparameters #778
Added
Scarily good release with FR units
A number of fixes, and internal enhancements.
We have a new API for running textual apps asynchronously, and a much better way of running integration tests. Testing is important and we will be documenting this in a future release.
Also in this release, we've made fr units more useful. These CSS units can be used to easily create flexible layouts. See the video below:
Screen.Recording.2022-10-31.at.15.29.57.mov
Here's the full changelog
[0.3.0] - 2022-10-31
Fixed
- Fixed issue where scrollbars weren't being unmounted
 - Fixed fr units for horizontal and vertical layouts #1067
 - Fixed 
textual runbreaking sys.argv #1064 - Fixed footer not updating styles when toggling dark mode
 - Fixed how the app title in a 
Headeris centred #1060 - Fixed the swapping of button variants #1048
 - Fixed reserved characters in screenshots #993
 - Fixed issue with TextLog max_lines #1058
 
Changed
- DOMQuery now raises InvalidQueryFormat in response to invalid query strings, rather than cryptic CSS error
 - Dropped quit_after, screenshot, and screenshot_title from App.run, which can all be done via auto_pilot
 - Widgets are now closed in reversed DOM order
 - Input widget justify hardcoded to left to prevent text-align interference
 - Changed 
textual runso that it patchesargvin more situations - DOM classes and IDs are now always treated fully case-sensitive #1047
 
Added
- Added Unmount event
 - Added App.run_async method
 - Added App.run_test context manager
 - Added auto_pilot to App.run and App.run_async
 - Added Widget._get_virtual_dom to get scrollbars
 - Added size parameter to run and run_async
 - Added always_update to reactive
 - Returned an awaitable from push_screen, switch_screen, and install_screen #1061
 
