Skip to content

Releases: Textualize/textual

The styles should update on mount now release

12 Dec 21:22
4bfb82a
Compare
Choose a tag to compare

A hotfix for #3858

[0.45.1] - 2023-12-12

Fixed

  • Fixed issues were styles wouldn't update if changed in mount. #3860

The speedy release

12 Dec 14:45
21ba7db
Compare
Choose a tag to compare

A relative minor release, feature wise, but this version much faster CSS processing. You may notice this if you have UIs with 100s of widgets.

Also see a new HowTo: https://textual.textualize.io/how-to/render-and-compose/

[0.45.0] - 2023-12-12

Fixed

  • Fixed DataTable.update_cell not raising an error with an invalid column key #3335
  • Fixed Input showing suggestions when not focused #3808
  • Fixed loading indicator not covering scrollbars #3816

Removed

  • Removed renderables/align.py which was no longer used.

Changed

  • Dropped ALLOW_CHILDREN flag introduced in 0.43.0 #3814
  • Widgets with an auto height in an auto height container will now expand if they have no siblings #3814
  • Breaking change: Removed limit_rules from Stylesheet.apply #3844

Added

  • Added get_loading_widget to Widget and App customize the loading widget. #3816
  • Added messages Collapsible.Expanded and Collapsible.Collapsed that inherit from Collapsible.Toggled. #3824

The Buttery Release

04 Dec 14:00
ad3934b
Compare
Choose a tag to compare

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

01 Dec 11:54
e537125
Compare
Choose a tag to compare

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 to link-background-hover
  • link-hover-color renamed to link-color-hover
  • link-hover-style renamed to link-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

  • Fixed NoWidget when mouse goes outside window #3790
  • Removed spurious print statements from press_keys #3785

The NoWidget fix release

29 Nov 13:31
1a76b62
Compare
Choose a tag to compare

[0.43.2] - 2023-11-29

Fixed

  • Fixed NoWidget error #3779

The fixed scrollbar release

29 Nov 10:45
Compare
Choose a tag to compare

A hotfix.

[0.43.1] - 2023-11-29

Fixed

  • Fixed clicking on scrollbar moves TextArea cursor #3763

The Nothing to See Here Release

28 Nov 14:38
60766a3
Compare
Choose a tag to compare

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.

Screenshot 2023-11-23 at 21 11 53

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 the prompt 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 a Checkbox #3765
  • Added the ability to set the label property of a RadioButton #3765
  • Added app focus/blur for textual-web #3767

Changed

  • Method MarkdownTableOfContents.set_table_of_contents renamed to MarkdownTableOfContents.rebuild_table_of_contents #3730
  • Exception Tree.UnknownNodeID moved out of Tree, import from textual.widgets.tree #3730
  • Exception TreeNode.RemoveRootError moved out of TreeNode, import from textual.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!

22 Nov 16:21
a64a0d2
Compare
Choose a tag to compare

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 #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 #3614
    • clear
    • is_blank
  • Constant Select.BLANK to flag an empty selection #3614
  • Added restrict, type, max_length, and valid_empty to Input #3657
  • Added Pilot.mouse_down to simulate MouseDown events #3495
  • Added Pilot.mouse_up to simulate MouseUp 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 to None no longer clears the selection (See Select.BLANK and Select.clear) #3614
  • Breaking change: Button no longer inherits from Static, now it inherits directly from Widget #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

31 Oct 13:31
b3d6043
Compare
Choose a tag to compare

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!

Screenshot 2023-10-31 at 13 14 29

[0.41.0] - 2023-10-31

Fixed

  • Fixed Input.cursor_blink reactive not changing blink state after Input 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 from CommandPalette to App.
  • Fixed crash in LoadingIndicator #3498
  • Fixed crash when Tabs appeared as a descendant of TabbedContent 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 the DataTable.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 to Button.active_effect_duration attribute #3498
  • Breaking change: Input.blink_timer made private (renamed to Input._blink_timer) #3498
  • Breaking change: Input.cursor_blink reactive updated to not run on mount (now init=False) #3498
  • Breaking change: AwaitTabbedContent class removed #3498
  • Breaking change: Tabs.remove_tab now returns an AwaitComplete instead of an AwaitRemove #3498
  • Breaking change: Tabs.clear now returns an AwaitComplete instead of an AwaitRemove #3498
  • TabbedContent.add_pane now returns an AwaitComplete instead of an AwaitTabbedContent #3498
  • TabbedContent.remove_pane now returns an AwaitComplete instead of an AwaitTabbedContent #3498
  • TabbedContent.clear_pane now returns an AwaitComplete instead of an AwaitTabbedContent #3498
  • Tabs.add_tab now returns an AwaitComplete instead of an AwaitMount #3498
  • DirectoryTree.reload now returns an AwaitComplete, which may be awaited to ensure the node has finished being processed by the internal queue #3498
  • Tabs.remove_tab now returns an AwaitComplete, which may be awaited to ensure the tab is unmounted and internal state is updated #3498
  • App.switch_mode now returns an AwaitMount, 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

11 Oct 15:57
Compare
Choose a tag to compare

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