Releases: Textualize/textual
The Buttery Release
A patch to improve scrolling speed when there are many widgets in the screen.
Scrolling show now be buttery smooth for the screen and other scrolling containers (like the ListView).
[0.44.1] - 2023-12-4
Fixed
- Fixed slow scrolling when there are many widgets #3801
The so long 3.7 release
This release drops support for Python3.7
Additionally, there are a few fixes and some changes. See below for details
[0.44.0] - 2023-12-1
Changed
- Breaking change: Dropped 3.7 support #3766
- Breaking changes #1530
link-hover-background
renamed tolink-background-hover
link-hover-color
renamed tolink-color-hover
link-hover-style
renamed tolink-style-hover
- Brought rxvt's use of shift-numpad keys in line with most other terminals #3769
Added
- Added support for Ctrl+Fn and Ctrl+Shift+Fn keys in urxvt #3737
- Friendly error messages when trying to mount non-widgets #3780
Fixed
The NoWidget fix release
The fixed scrollbar release
The Nothing to See Here Release
The highlight of this release, is the new keyline rule which draws lines around widgets in the margins.
This is similar to border
, but keyline
can overlap with neighbouring widgets. Here's a screenshot. Note how the green borders around the widgets intersect with each other.
See below for the full changelog.
[0.43.0] - 2023-11-28
Fixed
- Fixed mouse targeting issue in
TextArea
when tabs were not fully expanded #3725 - Fixed
Select
not updating after changing theprompt
reactive #2983 - Fixed flicker when updating Markdown #3757
Added
- Added experimental Canvas class #3669
- Added
keyline
rule #3669 - Widgets can now have an ALLOW_CHILDREN (bool) classvar to disallow adding children to a widget #3758
- Added the ability to set the
label
property of aCheckbox
#3765 - Added the ability to set the
label
property of aRadioButton
#3765 - Added app focus/blur for textual-web #3767
Changed
- Method
MarkdownTableOfContents.set_table_of_contents
renamed toMarkdownTableOfContents.rebuild_table_of_contents
#3730 - Exception
Tree.UnknownNodeID
moved out ofTree
, import fromtextual.widgets.tree
#3730 - Exception
TreeNode.RemoveRootError
moved out ofTreeNode
, import fromtextual.widgets.tree
#3730 - Optimized startup time #3753
- App.COMMANDS or Screen.COMMANDS can now accept a callable which returns a command palette provider #3756
The Life Universe and Everything release!
Some fixes, improvements, and updates to Pilot (used in testing).
Also some significant improvements in rendering speed.
A few minor breaking changes, see below for details...
[0.42.0] - 2023-11-22
Fixed
- Duplicate CSS errors when parsing CSS from a screen #3581
- Added missing
blur
pseudo class #3439 - Fixed visual glitched characters on Windows due to Python limitation #2548
- Fixed
ScrollableContainer
to receive focus #3632 - Fixed app-level queries causing a crash when the command palette is active #3633
- Fixed outline not rendering correctly in some scenarios (e.g. on Button widgets) #3628
- Fixed live-reloading of screen CSS #3454
Select.value
could be in an invalid state #3612- Off-by-one in CSS error reporting #3625
- Loading indicators and app notifications overlapped in the wrong order #3677
- Widgets being loaded are disabled and have their scrolling explicitly disabled too #3677
- Method render on a widget could be called before mounting said widget #2914
Added
- Exceptions to
textual.widgets.select
#3614InvalidSelectValueError
for when setting aSelect
to an invalid valueEmptySelectError
when creating/setting aSelect
to have no options whenallow_blank
isFalse
Select
methods #3614clear
is_blank
- Constant
Select.BLANK
to flag an empty selection #3614 - Added
restrict
,type
,max_length
, andvalid_empty
to Input #3657 - Added
Pilot.mouse_down
to simulateMouseDown
events #3495 - Added
Pilot.mouse_up
to simulateMouseUp
events #3495 - Added
Widget.is_mounted
property #3709
Changed
- CSS error reporting will no longer provide links to the files in question #3582
- inline CSS error reporting will report widget/class variable where the CSS was read from #3582
- Breaking change: Setting
Select.value
toNone
no longer clears the selection (SeeSelect.BLANK
andSelect.clear
) #3614 - Breaking change:
Button
no longer inherits fromStatic
, now it inherits directly fromWidget
#3603 - Rich markup in markdown headings is now escaped when building the TOC #3689
- Mechanics behind mouse clicks. See this for more details. #3495
- Breaking change: max/min-width/height now includes padding and border. #3712
The scarily good release
Just in time for Halloween, we have a new release. There are a lot of fixes, and improvement to startup time. A few breaking changes that are unlikely to impact many people.
We also reached the scary milestone of 666 forks!
[0.41.0] - 2023-10-31
Fixed
- Fixed
Input.cursor_blink
reactive not changing blink state afterInput
was mounted #3498 - Fixed
Tabs.active
attribute value not being re-assigned after removing a tab or clearing #3498 - Fixed
DirectoryTree
race-condition crash when changing path #3498 - Fixed issue with
LRUCache.discard
#3537 - Fixed
DataTable
not scrolling to rows that were just added #3552 - Fixed cache bug with
DataTable.update_cell
#3551 - Fixed CSS errors being repeated #3566
- Fix issue with chunky highlights on buttons #3571
- Fixed
OptionList
event leakage fromCommandPalette
toApp
. - Fixed crash in
LoadingIndicator
#3498 - Fixed crash when
Tabs
appeared as a descendant ofTabbedContent
in the DOM #3602 - Fixed the command palette cancelling other workers #3615
Added
- Add Document
get_index_from_location
/get_location_from_index
#3410 - Add setter for
TextArea.text
#3525 - Added
key
argument to theDataTable.sort()
method, allowing the table to be sorted using a custom function (or other callable) #3090 - Added
initial
to all css rules, which restores default (i.e. value from DEFAULT_CSS) #3566 - Added HorizontalPad to pad.py #3571
- Added
AwaitComplete
class, to be used for optionally awaitable return values #3498
Changed
- Breaking change:
Button.ACTIVE_EFFECT_DURATION
classvar converted toButton.active_effect_duration
attribute #3498 - Breaking change:
Input.blink_timer
made private (renamed toInput._blink_timer
) #3498 - Breaking change:
Input.cursor_blink
reactive updated to not run on mount (nowinit=False
) #3498 - Breaking change:
AwaitTabbedContent
class removed #3498 - Breaking change:
Tabs.remove_tab
now returns anAwaitComplete
instead of anAwaitRemove
#3498 - Breaking change:
Tabs.clear
now returns anAwaitComplete
instead of anAwaitRemove
#3498 TabbedContent.add_pane
now returns anAwaitComplete
instead of anAwaitTabbedContent
#3498TabbedContent.remove_pane
now returns anAwaitComplete
instead of anAwaitTabbedContent
#3498TabbedContent.clear_pane
now returns anAwaitComplete
instead of anAwaitTabbedContent
#3498Tabs.add_tab
now returns anAwaitComplete
instead of anAwaitMount
#3498DirectoryTree.reload
now returns anAwaitComplete
, which may be awaited to ensure the node has finished being processed by the internal queue #3498Tabs.remove_tab
now returns anAwaitComplete
, which may be awaited to ensure the tab is unmounted and internal state is updated #3498App.switch_mode
now returns anAwaitMount
, which may be awaited to ensure the screen is mounted #3498- Buttons will now display multiple lines, and have auto height #3539
- DataTable now has a max-height of 100vh rather than 100%, which doesn't work with auto
- Breaking change: empty rules now result in an error #3566
- Improved startup time by caching CSS parsing #3575
- Workers are now created/run in a thread-safe way #3586
The loading release
You can now set widget.loading=True
to replace the widget with a loading indicator.
https://twitter.com/willmcgugan/status/1712104087213297791
[0.40.0] - 2023-10-11
- Added
loading
reactive property to widgets #3509
The invisible scrollbar release
A mixed bag of fixes and API improvements.
Notable breaking change is that the tree-sitter code has been split out. If you need syntax highlighting in the TextArea, you can install it with this:
pip install "textual[syntax]"
[0.39.0] - 2023-10-10
Fixed
Pilot.click
/Pilot.hover
can't useScreen
as a selector #3395- App exception when a
Tree
is initialized/mounted withdisabled=True
#3407 - Fixed
print
locations not being correctly reported intextual console
#3237 - Fix location of IME and emoji popups #3408
- Fixed application freeze when pasting an emoji into an application on Windows #3178
- Fixed duplicate option ID handling in the
OptionList
#3455 - Fix crash when removing and updating DataTable cell at same time #3487
- Fixed fractional styles to allow integer values #3414
- Stop eating stdout/stderr in headless mode - print works again in tests #3486
Added
OutOfBounds
exception to be raised byPilot
#3360TextArea.cursor_screen_offset
property for getting the screen-relative position of the cursor #3408Input.cursor_screen_offset
property for getting the screen-relative position of the cursor #3408- Reactive
cell_padding
(and respective parameter) to define horizontal cell padding in data table columns #3435 - Added
Input.clear
method #3430 - Added
TextArea.SelectionChanged
andTextArea.Changed
messages #3442 - Added
wait_for_dismiss
parameter toApp.push_screen
#3477 - Allow scrollbar-size to be set to 0 to achieve scrollable containers with no visible scrollbars #3488
Changed
- Breaking change: tree-sitter and tree-sitter-languages dependencies moved to
syntax
extra #3398 Pilot.click
/Pilot.hover
now raisesOutOfBounds
when clicking outside visible screen #3360Pilot.click
/Pilot.hover
now return a Boolean indicating whether the click/hover landed on the widget that matches the selector #3360- Added a delay to when the
No Matches
message appears in the command palette, thus removing a flicker #3399