Releases: Textualize/textual
The Quickening Release
This is a large release!
v0.86.0 Adds an entirely new theming system and an updated demo (Run python -m textual
).
The new theming system standardizes the look-and-feel of widgets. This should mean they will look pretty when used in combination, and you will need less tweaking of your UI. If your app already has a customized look and feel, you may need to make a few style changes. Let us know if you need any help with that (jump on the Discord server).
Here's what the demo looks like now:
Screen.Recording.2024-11-16.at.19.08.15.mov
Use the command palette to switch themes...
[0.86.0] - 2024-11-16
Fixed
- Fixed duplicated key displays in the help panel #5037
- Fixed
TextArea
mouse selection with tab characters #5212 - Fixed
Tabs
not updating the highlighting after removing a tab #5218
Added
- Added
App.theme
reactive attribute #5087 - Added various starter themes #5087
- Added "Change theme" command to command palette #5087
- Added
variant
parameter toLabel
widget for quick access to common styles #5087 - Added
App.get_theme
which returns a theme by name #5087 - Added
App.register_theme
andApp.unregister_theme
#5087 - Added
App.theme_changed_signal
#5087 - Added
App.available_themes
property which returns a mapping of theme names toTheme
instances #5087 - Added
App.current_theme
property which returns the currently active theme object #5087 - Added
App.get_theme_variable_defaults
which returns a mapping of theme variables to their default values #5087 - Added
App.search
which allows bringing up a fuzzy search list of commands on-demand #5087 - Added
App.search_themes
which allows bringing up a fuzzy search list of themes on-demand #5087 - Added
textual.theme.ThemeProvider
, a command palette provider which returns all registered themes #5087 - Added several new built-in CSS variables #5087
- Added support for in-band terminal resize protocol #5217
- Added TEXTUAL_THEME environment var, which should be a comma separated list of desired themes #5238
- Added
Widget.is_scrolling
#5238 - Added
Tree.add_json
#5238
Changed
Driver.process_event
is nowDriver.process_message
#5217Driver.send_event
is nowDriver.send_message
#5217- Added
can_focus
andcan_focus_children
parameters to scrollable container types. #5226 - Added
textual.lazy.Reveal
#5226 - Added
Screen.action_blur
#5226 Click
events can now be used with the on decorator to match the originally clicked widget #5238- Breaking change: Removed
App.dark
reactive attribute #5087 - Breaking change: To improve consistency, several changes have been made to default widget CSS and the CSS variables which ship with Textual. On upgrading, your app will likely look different. All of these changes can be overidden with your own CSS. #5087
Removed
- Removed
App.HOVER_EFFECTS_SCROLL_PAUSE
#5238
The Focus, Will, Focus! Release
An interim fix, for broken focus-within pseudo-selector
[0.85.2] - 2024-11-02
- Fixed broken focus-within #5190
The Freddy's hotfix Release
Hotfix to fix saving screenshots on Windows
[0.85.1] - 2024-10-26
Fixed
- Fixed encoding issue when saving files such as screenshots on Windows #5182
The Freddy's Revenge Release
This versions updates the demo app. The previous demo was written quite a while ago and needed a refresh. It's not quite finished (there are plenty more widgets to cover), but it is still a bug improvement over the old one.
python -m textual
Give it a shot, we think it is pretty fun to play with.
Screen.Recording.2024-10-25.at.16.02.46.mov
There are a number of other updates in this release, and some under-the-hood changes for even smoother updates and optimizations. See below for the full list...
Enjoy!
[0.85.0] - 2024-10-25
Changed
- Grid will now size children to the maximum height of a row #5113
- Markdown links will be opened with
App.open_url
automatically #5113 - The universal selector (
*
) will now not match widgets with the class-textual-system
(scrollbars, notifications etc) #5113 - Renamed
Screen.can_view
andWidget.can_view
toScreen.can_view_entire
andWidget.can_view_entire
#5174
Added
- Added Link widget #5113
- Added
open_links
toMarkdown
andMarkdownViewer
widgets #5113 - Added
App.DEFAULT_MODE
#5113 - Added
Containers.HorizontalGroup
andContainers.VerticalGroup
#5113 - Added
$
,£
,€
,(
,)
symbols to Digits #5113 - Added
Button.action
parameter to invoke action when clicked #5113 - Added
immediate
parameter to scroll methods #5164 - Added
textual._loop.loop_from_index
#5164 - Added
min_color
andmax_color
to Sparklines constructor, which take precedence over CSS #5174 - Added new demo
python -m textual
, not quite finished but better than the old one #5174 - Added
Screen.can_view_partial
andWidget.can_view_partial
#5174 - Added
App.is_web
property to indicate if the app is running via a web browser #5128 Enter
andLeave
events can now be used with theon
decorator #5159
Fixed
- Fixed glitchy ListView #5163
The Who You Gonna Call Release
This was mainly a hotfix for a potential infinite loop in the TextArea, although there are a few fun additions: see below
[0.84.0] - 2024-10-22
Fixed
Added
The Enhanced AF Release
The Digits widget can now display A-F, so you can use hex!
See below for the full changes.
[0.83.0] - 2024-10-10
Added
Changed
Screen.ALLOW_IN_MAXIMIZED_VIEW
will now default toApp.ALLOW_IN_MAXIMIZED_VIEW
#5088- Widgets matching
.-textual-system
will now be included in the maximize view by default #5088 - Digits are now thin by default, style with text-style: bold to get bold digits #5094
- Made
Widget.absolute_offset
public #5097 - Tooltips are now displayed directly below the mouse cursor #5097
Region.inflect
will now assume that margins overlap #5097Pilot.click
and friends will now accept a widget, in addition to a selector #5095
The Are you the Keymaster Release?
The highlight of this release is the new keymap support, which enables dynamic configuration of keys -- so you can now provide a way for users of your app to customize key bindings.
Keymaps aren't documented beyond the API level at the moment. That will happen in a few releases. In the meantime, @darrenburns has written up this new feature (which he also implemented) on his blog. Check it out:
https://darren.codes/posts/textual-keymaps/
See below for the full changes:
[0.82.0] - 2024-10-03
Fixed
- Fixed issue with screen not updating when auto_refresh was enabled #5063
- Fixed issues regarding loading indicator #5079
- Fixed issues with inspecting the lazy loaded widgets module #5080
Added
- Added
DOMNode.is_on_screen
property #5063 - Added support for keymaps (user configurable key bindings) #5038
- Added descriptions to bindings for all internal widgets, and updated casing to be consistent #5062
Changed
- Breaking change:
Widget.set_loading
no longer return an awaitable #5079
The glitch-free-tree release
Mostly tree related fixes and a updates. Enjoy.
[0.81.0] - 2024-09-25
Added
- Added
x_axis
andy_axis
parameters toWidget.scroll_to_region
#5047 - Added
Tree.move_cursor_to_line
#5052
Changed
- Tree will no longer scroll the X axis when moving the cursor #5047
- DirectoryTree will no longer select the first node #5052
Fixed
The Scanners release
The best decade release
This is a large release!
The feature I am most excited about is the new MaskedInput widget, a contribution by Angelo Mottola. Here's a quick preview:
Screen.Recording.2024-09-23.at.15.33.49.mov
Here's the full release notes...
[0.80.0] - 2024-09-23
Added
- Added
MaskedInput
widget #4783 - Input validation for floats and integers accept embedded underscores, e.g., "1_234_567" is valid. #4784
- Support for
"none"
value added todock
,hatch
andsplit
styles #4982 - Support for
"none"
added to box and border style properties (e.gwidget.style.border = "none"
) #4982 - Docstrings added to most style properties #4982
- Added
ansi_color
switch to App to permit ANSI (themed) colors #5000 - Added
:ansi
pseudo class #5000 - Added
-ansi-scrollbar
style to widgets #5000 - Added
App.INLINE_PADDING
to define the number of spaces above inline apps #5000 - Added
nocolor
psuedoclass when NO_COLOR env var is set BINDING_GROUP_TITLE
now defaults toNone
#5023- Added
TreeNode.siblings
,TreeNode.next_sibling
,TreeNode.previous_sibling
,TreeNode.is_collapsed
#5023 - Added additional bindings to Tree widget #5023
- Added
Tree.center_scroll
#5023 - Added
Tree.unselect
#5023
Changed
- Input validation for integers no longer accepts scientific notation like '1.5e2'; must be castable to int. #4784
- Default
scrollbar-size-vertical
changed to2
in inline styles to match Widget default CSS (unlikely to affect users) #4982 - Removed border-right from
Toast
#4984 - Some fixes in
RichLog
result in slightly different semantics, see docstrings for details #4978 - Changed how scrollbars are rendered (will have no visual effect, but will break snapshot tests) #5000
- Added
enabled
switch to filters (mostly used internally) #5000 BINDING_GROUP_TITLE
now defaults toNone
#5023- Breaking change: Changed how scrollbars are rendered so they work in ansi mode (will break snapshots) #5023
Fixed
- Input validation of floats no longer accepts NaN (not a number). #4784
- Fixed issues with screenshots by simplifying segments only for snapshot tests #4929
- Fixed
RichLog.write
not respectingwidth
parameter #4978 - Fixed
RichLog
writing at wrong width whenwrite
occurs before width is known (e.g. incompose
oron_mount
) #4978 - Fixed
RichLog.write
incorrectly shrinking width toRichLog.min_width
whenshrink=True
(now shrinks to fit content area instead) #4978 - Fixed flicker when setting
dark
reactive on startup #4989 - Fixed command palette not sorting search results by their match score #4994
- Fixed
DataTable
cached height issue on re-populating the table when using auto-height rows #4992 - Fixed inline app output being cleared when
inline_no_clear=True
#5019