Releases: Textualize/textual
The Wedding Anniversary Release
The Query faster Release
This release optimizes query_one
and changes the semantics a little. query_one
will no longer raise a TooManyMatches if there is more than a single widget matching the selector. For the old behavior, you can use the new query_exactly_one
method.
See also https://textual.textualize.io/guide/devtools/#serve
Check below for the full details!
[0.79.0] - 2024-08-30
Added
- Added
DOMNode.check_consume_key
#4940 - Added
App.ESCAPE_TO_MINIMIZE
,App.screen_to_minimize
, andScreen.ESCAPE_TO_MINIMIZE
#4951 - Added
DOMNode.query_exactly_one
#4950 - Added
SelectorSet.is_simple
#4950
Changed
The Push it to the Max Release
This release adds a new maximize
method, which you can use to temporarily full the screen with any given widget. This can be great for allowing the user to focus on a particular view.
You can maximize via the command palette, or you can bind a key with the action screen.maximize
.
Here are some screenshots of this feature in action:
![Screenshot 2024-08-27 at 13 17 19](https://private-user-images.githubusercontent.com/554369/361800621-febf001d-ad6d-4751-b5a4-7e957b0b6e05.png?jwt=eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJpc3MiOiJnaXRodWIuY29tIiwiYXVkIjoicmF3LmdpdGh1YnVzZXJjb250ZW50LmNvbSIsImtleSI6ImtleTUiLCJleHAiOjE3MjU4NDQ1NDcsIm5iZiI6MTcyNTg0NDI0NywicGF0aCI6Ii81NTQzNjkvMzYxODAwNjIxLWZlYmYwMDFkLWFkNmQtNDc1MS1iNWE0LTdlOTU3YjBiNmUwNS5wbmc_WC1BbXotQWxnb3JpdGhtPUFXUzQtSE1BQy1TSEEyNTYmWC1BbXotQ3JlZGVudGlhbD1BS0lBVkNPRFlMU0E1M1BRSzRaQSUyRjIwMjQwOTA5JTJGdXMtZWFzdC0xJTJGczMlMkZhd3M0X3JlcXVlc3QmWC1BbXotRGF0ZT0yMDI0MDkwOVQwMTEwNDdaJlgtQW16LUV4cGlyZXM9MzAwJlgtQW16LVNpZ25hdHVyZT01ZGEwZTIwMjJlNTJkYWViMjBkMmQzNjdjYzM0OTUxYjE0ODY3ZGNlNWE3NDhjYjE0NzVlZGI0YTI3M2VkYzkyJlgtQW16LVNpZ25lZEhlYWRlcnM9aG9zdCZhY3Rvcl9pZD0wJmtleV9pZD0wJnJlcG9faWQ9MCJ9.1MDl2L33fDORAZH2dBNmn9ZMV7R98jTmJzG1wq14upg)
![Screenshot 2024-08-27 at 13 17 24](https://private-user-images.githubusercontent.com/554369/361800614-98684073-9e4f-44cc-9e67-d26d5ae3f6c3.png?jwt=eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJpc3MiOiJnaXRodWIuY29tIiwiYXVkIjoicmF3LmdpdGh1YnVzZXJjb250ZW50LmNvbSIsImtleSI6ImtleTUiLCJleHAiOjE3MjU4NDQ1NDcsIm5iZiI6MTcyNTg0NDI0NywicGF0aCI6Ii81NTQzNjkvMzYxODAwNjE0LTk4Njg0MDczLTllNGYtNDRjYy05ZTY3LWQyNmQ1YWUzZjZjMy5wbmc_WC1BbXotQWxnb3JpdGhtPUFXUzQtSE1BQy1TSEEyNTYmWC1BbXotQ3JlZGVudGlhbD1BS0lBVkNPRFlMU0E1M1BRSzRaQSUyRjIwMjQwOTA5JTJGdXMtZWFzdC0xJTJGczMlMkZhd3M0X3JlcXVlc3QmWC1BbXotRGF0ZT0yMDI0MDkwOVQwMTEwNDdaJlgtQW16LUV4cGlyZXM9MzAwJlgtQW16LVNpZ25hdHVyZT03YTFhODQzM2Q5YjQxZmI1ODZiODk1NzY4NzM3OWQ2NDAwZjQ3YjAwM2Q3YmIxMTUxYmM5ZjUxYjM5MzgzNzI5JlgtQW16LVNpZ25lZEhlYWRlcnM9aG9zdCZhY3Rvcl9pZD0wJmtleV9pZD0wJnJlcG9faWQ9MCJ9.BdACl2NzcVXofyIweu0HjnPGnhYnR-ODgpWgYQshvSY)
![Screenshot 2024-08-27 at 13 17 30](https://private-user-images.githubusercontent.com/554369/361800604-aeac55d6-df53-408a-b1d8-648a0ef35c45.png?jwt=eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJpc3MiOiJnaXRodWIuY29tIiwiYXVkIjoicmF3LmdpdGh1YnVzZXJjb250ZW50LmNvbSIsImtleSI6ImtleTUiLCJleHAiOjE3MjU4NDQ1NDcsIm5iZiI6MTcyNTg0NDI0NywicGF0aCI6Ii81NTQzNjkvMzYxODAwNjA0LWFlYWM1NWQ2LWRmNTMtNDA4YS1iMWQ4LTY0OGEwZWYzNWM0NS5wbmc_WC1BbXotQWxnb3JpdGhtPUFXUzQtSE1BQy1TSEEyNTYmWC1BbXotQ3JlZGVudGlhbD1BS0lBVkNPRFlMU0E1M1BRSzRaQSUyRjIwMjQwOTA5JTJGdXMtZWFzdC0xJTJGczMlMkZhd3M0X3JlcXVlc3QmWC1BbXotRGF0ZT0yMDI0MDkwOVQwMTEwNDdaJlgtQW16LUV4cGlyZXM9MzAwJlgtQW16LVNpZ25hdHVyZT03M2M3M2ViNTRmNWFjYzllZTAzYjY3ZjhhZjMwZjkyZjMyOGE1YzM3MGI5NTBiYzY3NzY2NmQ0ZTg0ZDRkZTAwJlgtQW16LVNpZ25lZEhlYWRlcnM9aG9zdCZhY3Rvcl9pZD0wJmtleV9pZD0wJnJlcG9faWQ9MCJ9.YBcbGyWdOzec4CXv4_syk6v520KvaTAd_ZSYwmF_-oo)
[0.78.0] - 2024-08-27
Added
The lucky number 77 release
This is quite a large release!
We've done a lot of work on the command palette to make it easier to work with and use.
We've also added a "help panel" which you can summon from the command palette. This will give you context sensitive help, and a summary of all the key bindings. Here it is in action:
Screen.Recording.2024-08-22.at.15.13.22.mov
Also in the command palette is a "save screenshot" command, which will save a screenshot of the current screen. Very handy for adding to documentation.
There are a number of other smaller changes, fixes, and a few breaking changes. See the detailed release notes below:
[0.77.0] - 2024-08-22
Added
- Added
tooltip
to Binding #4859 - Added a link to the command palette to the Footer (set
show_command_palette=False
to disable) #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. #4876
- Added "split" CSS style, currently undocumented, and may change. #4876
- Added
Region.get_spacing_between
#4876 - Added
App.COMMAND_PALETTE_KEY
to change default command palette key binding #4867 - Added
App.get_key_display
#4890 - Added
DOMNode.BINDING_GROUP
#4906 - Added
DOMNode.HELP
classvar which contains Markdown help to be shown in the help panel #4915 - Added
App.get_system_commands
#4920 - Added "Save Screenshot" system command #4922
Changed
- Removed caps_lock and num_lock modifiers #4861
- Keys such as escape and space are now displayed in lower case in footer #4876
- Changed default command palette binding to
ctrl+p
#4867 - Removed
ctrl_to_caret
andupper_case_keys
from Footer. These can be implemented inApp.get_key_display
. - Renamed
SystemCommands
toSystemCommandsProvider
#4920 - Breaking change: Removed
ClassicFooter
widget (please use newFooter
widget) #4921 - Disallowed
Screen
instances inApp.SCREENS
andApp.MODES
Fixed
The Key Release
Mostly fixes, but there are some refactored code in this release related to key handling and bindings. If you encounter an issues, let us know!
[0.76.0]
Changed
- Input cursor will no longer jump to the end on focus #4773
- Removed
Size.cip_size
, which was a clone ofcrop_size
- Widgets with auto dimensions will now grow if there is a scrollbar #4844
- Don't do automatic refresh when widget is not visible #4847
- Renamed
DOMNode._automatic_refresh
toDOMNode.automatic_refresh
to allow for customization #4847
Fixed
Hotfix for slow UI
The 74-75 Release
https://www.youtube.com/watch?v=BgNTBgJjIRI&ab_channel=LyricsDope
[0.75.0] - 2024-08-01
Added
- Added
App.open_url
to open URLs in the web browser. When running via the WebDriver, the URL will be opened in the browser that is controlling the app (web side not yet live) #4819 - Added
Widget.is_mouse_over
#4818 - Added
node
attribute toevents.Enter
andevents.Leave
#4818
Changed
events.Enter
andevents.Leave
events now bubble. #4818- Renamed
Widget.mouse_over
toWidget.mouse_hover
#4818
Fixed
- Fixed issue with
mutate_reactive
and data binding #4828
The Year Zero Release
Mostly fixes and a small (potentially breaking) change.
[0.74.0] - 2024-07-25
Fixed
- Fixed issues in Kitty terminal after exiting app #4779
- Fixed exception when removing Selects #4786
- Fixed issue with non-clickable Footer keys #4798
- Fixed issue with recompose not working from Mount handler #4802
Changed
- Calling
Screen.dismiss
with no arguments will invoke the screen callback withNone
(previously the callback wasn't invoke at all). #4795
The Taste the Rainbow Release
This is a rather large release. Lots of fixes and enhancements, including optimizations to the DataTable.
There's also a rather nifty addition to the ProgressBar
widget. Checkout the gradient:
Screen.Recording.2024-07-18.at.14.17.05.mov
We've also polished the API docs, which should hopefully make them easier to navigate...
https://textual.textualize.io/api/app/
[0.73.0] - 2024-07-18
Added
- Added
TextArea.line_number_start
reactive attribute #4471 - Added
TextArea.matching_bracket_location
property #4764 - Added
DOMNode.mutate_reactive
#4731 - Added "quality" parameter to
textual.color.Gradient
#4739 - Added
textual.color.Gradient.get_rich_color
#4739 Widget.remove_children
now accepts an iterable if widgets in addition to a selector #4735- Raise
ValueError
with improved error message when number of cells inserted usingDataTable.add_row
doesn't match the number of columns in the table #4742 - Add
Tree.move_cursor
to programmatically move the cursor without selecting the node #4753 - Added
Footer
component style handling of padding for the key/description #4651 StringKey
is now exported fromdata_table
#4760TreeNode.add
andTreeNode.add_leaf
now acceptsbefore
andafter
arguments to position a new node #4772- Added a
gradient
parameter to theProgressBar
widget #4774
Fixed
- Fixed issue with
Tabs
where disabled tabs could still be activated by clicking the underline #4701 - Fixed scroll_visible with margin #4719
- Fixed programmatically disabling button stuck in hover state #4724
- Fixed
DataTable
poor performance on startup and focus change when rows contain multi-line content #4748 - Fixed
Tree
andDirectoryTree
horizontal scrolling off-by-2 #4744 - Fixed text-opacity in component styles #4747
- Ensure
Tree.select_node
sendsNodeSelected
message #4753 - Fixed message handlers not working when message types are assigned as the value of class vars #3940
- Fixed
CommandPalette
not focusing the input when opened whenApp.AUTO_FOCUS
doesn't match the input #4763 SelectionList.SelectionToggled
will now be sent for each option when a bulk toggle is performed (e.g.toggle_all
). Previously no messages were sent at all. #4759- Fixed focus styles not being updated on blur #4771
Changed
- "Discover" hits in the command palette are no longer sorted alphabetically #4720
TreeNodeSelected
messages are now posted beforeTreeNodeExpanded
messages
when an expandable node is selected #4753Markdown.LinkClicked.href
is now automatically unquoted #4749- The mouse cursor hover effect of
Tree
andDirectoryTree
will no longer linger after the mouse leaves the widget #4766
The Prune Release
A fixes release. The largest of which is a refactor to the logic of removing widgets, which should resolve some instability on shutdown in particular.
[0.72.0] - 2024-07-09
Changed
- More predictable DOM removals. #4708