* Add the basic ContentSwitcher widget * Docstring tidy * Add a visible_content property to the ContentSwitcher * Clarify that children of ContentSwitcher with no IDs get ignored * Simplify setting the display value * Add the start of an example ContentSwitcher for the docs * Tweak the example layout to better fit in small spaces * Add the content switcher to the API docs * Add a guide entry for the ContentSwitcher This one is a wee bit more involved than most other widget entries in the guide in that it doesn't obviously do anything itself, but needs developer-input to make it do something useful. As such the outline here isn't as clean as it could be, but I think it conveys everything necessary without getting too complicated. * Add the reactive attribute table to the ContentSwitcher guide * Update the README * Add a refresh after everything has been flipped in the switcher As noted in the code, this should not be necessary and I don't believe it has anything to do with this code. I would suspect some lower-level issue with flipping between different widgets within a container. I need to find a way to make an isolated reproduction that isn't about this particular widget. Meanwhile though this works with the refresh(). * Swap current from var to reactive This solves the explicit refresh issue, but only because the refresh is implied due to the use of a reactive over a var. As such this sort of addresses #1979 by ignoring the issue rather than diving into it. I still suspect that I shouldn't need to do this, and that perhaps there's a refresh issue when you flip display. So I'll keep #1979 kicking around and at some point see if I can recreate in isolation. * Add unit tests for the content switcher * Add snapshot tests for the ContentSwitcher * Clarify that an exception can be thrown on a bad ID * Try and help other Pythons * Add a pause at the end of the second switcher snapshot test I'm getting a lot of fails in CI; none of them are actual problems. Hopefully this will cure it. * Paaaaaaaaause More of a test than anything else really. My particular snapshot test is failing but kinda randomly in each environment each time -- sometimes Windows, sometimes GNU/Linux, different Python versions. So... yeah, let's try this and see if it makes it through; otherwise I may need to rethink this. * New pause So it turns out that _ doesn't do anything any more; and instead there's a "wait:<n>" syntax! So let's give that a try. * Learning my alphabet... * Fix a typo in the docs. Co-authored-by: Rodrigo Girão Serrão <5621605+rodrigogiraoserrao@users.noreply.github.com> * Add missing full stop. Co-authored-by: Rodrigo Girão Serrão <5621605+rodrigogiraoserrao@users.noreply.github.com> * Add a missing word Co-authored-by: Rodrigo Girão Serrão <5621605+rodrigogiraoserrao@users.noreply.github.com> * Try a longer wait on the switcher I'm starting to suspect that this doesn't come down to a timing issue; especially given that the snapshot report seems to be showing some oddity in the length of the vertical scrollbar. But... I want to be as sure as possible so let's double the length of the wait. Bit a bit of me is starting to wonder if I've somehow managed to create the perfect storm for scrollbars and you don't always get the same result every time. Seems unlikely, but if it's not timing it's that or lots of cosmic rays. * Test a longer pause on the content switcher test The idea here being that it takes 200ms for the button to pop again. * Refresh the snapshots This time. THIS TIME! * Experiment: is the issue the same name for two tests? * Experiment: drop the different source files, try terminal size Having got over the issue of the button not ending up in the same state, we're stuck with the scrollbar having different sizes. Having tried other options let's go with tweaking the terminal size. * Do a little less work when changing current Rather than set everything invisible then the new one visible, every time current is changed, instead just make sure everything is invisible up front and then just swap the affected children each time. This does mean that if someone messes with the children under the hood they may see oddness happening, but less work while being less defensive seems fair here. --------- Co-authored-by: Rodrigo Girão Serrão <5621605+rodrigogiraoserrao@users.noreply.github.com>
31 KiB
31 KiB
Change Log
All notable changes to this project will be documented in this file.
The format is based on Keep a Changelog and this project adheres to Semantic Versioning.
[0.14.0] - Unreleased
Changed
- Breaking change: There is now only
post_messageto post events, which is non-async,post_message_no_waitwas dropped. https://github.com/Textualize/textual/pull/1940 - Breaking change: The Timer class now has just one method to stop it,
Timer.stopwhich is non sync https://github.com/Textualize/textual/pull/1940 - Breaking change: Messages don't require a
senderin their constructor https://github.com/Textualize/textual/pull/1940 - Many messages have grown a
controlproperty which returns the control they relate to. https://github.com/Textualize/textual/pull/1940 - Updated styling to make it clear DataTable grows horizontally https://github.com/Textualize/textual/pull/1946
- Changed the
Checkboxcharacter due to issues with Windows Terminal and Windows 10 https://github.com/Textualize/textual/issues/1934 - Changed the
RadioButtoncharacter due to issues with Windows Terminal and Windows 10 and 11 https://github.com/Textualize/textual/issues/1934 - Changed the
Markdowninitial bullet character due to issues with Windows Terminal and Windows 10 and 11 https://github.com/Textualize/textual/issues/1982
Added
- Added
data_tableattribute to DataTable events https://github.com/Textualize/textual/pull/1940 - Added
list_viewattribute toListViewevents https://github.com/Textualize/textual/pull/1940 - Added
radio_setattribute toRadioSetevents https://github.com/Textualize/textual/pull/1940 - Added
switchattribute toSwitchevents https://github.com/Textualize/textual/pull/1940 - Added
hoverandclickmethods toPilothttps://github.com/Textualize/textual/pull/1966 - Breaking change: Added
toggle_buttonattribute to RadioButton and Checkbox events, replacesinputhttps://github.com/Textualize/textual/pull/1940 - A percentage alpha can now be applied to a border https://github.com/Textualize/textual/issues/1863
- Added
Color.multiply_alpha. - Added
ContentSwitcherhttps://github.com/Textualize/textual/issues/1945
Fixed
- Fixed bug that prevented pilot from pressing some keys https://github.com/Textualize/textual/issues/1815
- DataTable race condition that caused crash https://github.com/Textualize/textual/pull/1962
- DataTable crash when enter pressed when table is empty https://github.com/Textualize/textual/pull/1973
0.13.0 - 2023-03-02
Added
- Added
Checkboxhttps://github.com/Textualize/textual/pull/1872 - Added
RadioButtonhttps://github.com/Textualize/textual/pull/1872 - Added
RadioSethttps://github.com/Textualize/textual/pull/1872
Changed
- Widget scrolling methods (such as
Widget.scroll_homeandWidget.scroll_end) now perform the scroll after the next refresh https://github.com/Textualize/textual/issues/1774 - Buttons no longer accept arbitrary renderables https://github.com/Textualize/textual/issues/1870
Fixed
- Scrolling with cursor keys now moves just one cell https://github.com/Textualize/textual/issues/1897
- Fix exceptions in watch methods being hidden on startup https://github.com/Textualize/textual/issues/1886
- Fixed scrollbar size miscalculation https://github.com/Textualize/textual/pull/1910
- Fixed slow exit on some terminals https://github.com/Textualize/textual/issues/1920
0.12.1 - 2023-02-25
Fixed
- Fix for batch update glitch https://github.com/Textualize/textual/pull/1880
0.12.0 - 2023-02-24
Added
- Added
App.batch_updatehttps://github.com/Textualize/textual/pull/1832 - Added horizontal rule to Markdown https://github.com/Textualize/textual/pull/1832
- Added
Widget.disabledhttps://github.com/Textualize/textual/pull/1785 - Added
DOMNode.notify_style_updateto replacemessages.StylesUpdatedmessage https://github.com/Textualize/textual/pull/1861 - Added
DataTable.show_row_labelsreactive to show and hide row labels https://github.com/Textualize/textual/pull/1868 - Added
DataTable.RowLabelSelectedevent, which is emitted when a row label is clicked https://github.com/Textualize/textual/pull/1868 - Added
MessagePump.preventcontext manager to temporarily suppress a given message type https://github.com/Textualize/textual/pull/1866
Changed
- Scrolling by page now adds to current position.
- Markdown lists have been polished: a selection of bullets, better alignment of numbers, style tweaks https://github.com/Textualize/textual/pull/1832
- Added alternative method of composing Widgets https://github.com/Textualize/textual/pull/1847
- Added
labelparameter toDataTable.add_rowhttps://github.com/Textualize/textual/pull/1868 - Breaking change: Some
DataTablecomponent classes were renamed - see PR for details https://github.com/Textualize/textual/pull/1868
Removed
- Removed
screen.visible_widgetsandscreen.widgets - Removed
StylesUpdatemessage. https://github.com/Textualize/textual/pull/1861
Fixed
- Numbers in a descendant-combined selector no longer cause an error https://github.com/Textualize/textual/issues/1836
- Fixed superfluous scrolling when focusing a docked widget https://github.com/Textualize/textual/issues/1816
- Fixes walk_children which was returning more than one screen https://github.com/Textualize/textual/issues/1846
- Fixed issue with watchers fired for detached nodes https://github.com/Textualize/textual/issues/1846
0.11.1 - 2023-02-17
Fixed
- DataTable fix issue where offset cache was not being used https://github.com/Textualize/textual/pull/1810
- DataTable scrollbars resize correctly when header is toggled https://github.com/Textualize/textual/pull/1803
- DataTable location mapping cleared when clear called https://github.com/Textualize/textual/pull/1809
0.11.0 - 2023-02-15
Added
- Added
TreeNode.expand_allhttps://github.com/Textualize/textual/issues/1430 - Added
TreeNode.collapse_allhttps://github.com/Textualize/textual/issues/1430 - Added
TreeNode.toggle_allhttps://github.com/Textualize/textual/issues/1430 - Added the coroutines
Animator.wait_until_completeandpilot.wait_for_scheduled_animationsthat allow waiting for all current and scheduled animations https://github.com/Textualize/textual/issues/1658 - Added the method
Animator.is_being_animatedthat checks if an attribute of an object is being animated or is scheduled for animation - Added more keyboard actions and related bindings to
Inputhttps://github.com/Textualize/textual/pull/1676 - Added App.scroll_sensitivity_x and App.scroll_sensitivity_y to adjust how many lines the scroll wheel moves the scroll position https://github.com/Textualize/textual/issues/928
- Added Shift+scroll wheel and ctrl+scroll wheel to scroll horizontally
- Added
Tree.action_toggle_nodeto toggle a node without selecting, and bound it to Space https://github.com/Textualize/textual/issues/1433 - Added
Tree.resetto fully reset aTreehttps://github.com/Textualize/textual/issues/1437 - Added
DataTable.sortto sort rows https://github.com/Textualize/textual/pull/1638 - Added
DataTable.get_cellto retrieve a cell by column/row keys https://github.com/Textualize/textual/pull/1638 - Added
DataTable.get_cell_atto retrieve a cell by coordinate https://github.com/Textualize/textual/pull/1638 - Added
DataTable.update_cellto update a cell by column/row keys https://github.com/Textualize/textual/pull/1638 - Added
DataTable.update_cell_atto update a cell at a coordinate https://github.com/Textualize/textual/pull/1638 - Added
DataTable.ordered_rowsproperty to retrieveRows as they're currently ordered https://github.com/Textualize/textual/pull/1638 - Added
DataTable.ordered_columnsproperty to retrieveColumns as they're currently ordered https://github.com/Textualize/textual/pull/1638 - Added
DataTable.coordinate_to_cell_keyto find the key for the cell at a coordinate https://github.com/Textualize/textual/pull/1638 - Added
DataTable.is_valid_coordinatehttps://github.com/Textualize/textual/pull/1638 - Added
DataTable.is_valid_row_indexhttps://github.com/Textualize/textual/pull/1638 - Added
DataTable.is_valid_column_indexhttps://github.com/Textualize/textual/pull/1638 - Added attributes to events emitted from
DataTableindicating row/column/cell keys https://github.com/Textualize/textual/pull/1638 - Added
DataTable.get_rowto retrieve the values from a row by key https://github.com/Textualize/textual/pull/1786 - Added
DataTable.get_row_atto retrieve the values from a row by index https://github.com/Textualize/textual/pull/1786 - Added
DataTable.get_columnto retrieve the values from a column by key https://github.com/Textualize/textual/pull/1786 - Added
DataTable.get_column_atto retrieve the values from a column by index https://github.com/Textualize/textual/pull/1786 - Added
DataTable.HeaderSelectedwhich is posted when header label clicked https://github.com/Textualize/textual/pull/1788 - Added
DOMNode.watchandDOMNode.is_attachedmethods https://github.com/Textualize/textual/pull/1750 - Added
DOMNode.css_treewhich is a renderable that shows the DOM and CSS https://github.com/Textualize/textual/pull/1778 - Added
DOMNode.children_viewwhich is a view on to a nodes children list, use for querying https://github.com/Textualize/textual/pull/1778 - Added
MarkdownandMarkdownViewerwidgets. - Added
--screenshotoption totextual run
Changed
- Breaking change:
TreeNodecan no longer be imported fromtextual.widgets; it is now available viafrom textual.widgets.tree import TreeNode. https://github.com/Textualize/textual/pull/1637 Treenow shows a (subdued) cursor for a highlighted node when focus has moved elsewhere https://github.com/Textualize/textual/issues/1471DataTable.add_rownow acceptskeyargument to uniquely identify the row https://github.com/Textualize/textual/pull/1638DataTable.add_columnnow acceptskeyargument to uniquely identify the column https://github.com/Textualize/textual/pull/1638DataTable.add_rowandDataTable.add_columnnow return lists of keys identifying the added rows/columns https://github.com/Textualize/textual/pull/1638- Breaking change:
DataTable.get_cell_valuerenamed toDataTable.get_value_athttps://github.com/Textualize/textual/pull/1638 DataTable.row_countis now a property https://github.com/Textualize/textual/pull/1638- Breaking change:
DataTable.cursor_cellrenamed toDataTable.cursor_coordinatehttps://github.com/Textualize/textual/pull/1638- The method
validate_cursor_cellwas renamed tovalidate_cursor_coordinate. - The method
watch_cursor_cellwas renamed towatch_cursor_coordinate.
- The method
- Breaking change:
DataTable.hover_cellrenamed toDataTable.hover_coordinatehttps://github.com/Textualize/textual/pull/1638- The method
validate_hover_cellwas renamed tovalidate_hover_coordinate.
- The method
- Breaking change:
DataTable.datastructure changed, and will be made private in upcoming release https://github.com/Textualize/textual/pull/1638 - Breaking change:
DataTable.refresh_cellwas renamed toDataTable.refresh_coordinatehttps://github.com/Textualize/textual/pull/1638 - Breaking change:
DataTable.get_row_heightnow takes aRowKeyargument instead of a row index https://github.com/Textualize/textual/pull/1638 - Breaking change:
DataTable.datarenamed toDataTable._data(it's now private) https://github.com/Textualize/textual/pull/1786 - The
_filtermodule was made public (now calledfilter) https://github.com/Textualize/textual/pull/1638 - Breaking change: renamed
CheckboxtoSwitchhttps://github.com/Textualize/textual/issues/1746 App.install_screenname is no longer optional https://github.com/Textualize/textual/pull/1778App.querynow only includes the current screen https://github.com/Textualize/textual/pull/1778DOMNode.treenow displays simple DOM structure only https://github.com/Textualize/textual/pull/1778App.install_screennow returns None rather than AwaitMount https://github.com/Textualize/textual/pull/1778DOMNode.childrenis now a simple sequence, the NodesList is exposed asDOMNode._nodeshttps://github.com/Textualize/textual/pull/1778DataTablecursor can now enter fixed columns https://github.com/Textualize/textual/pull/1799
Fixed
- Fixed stuck screen https://github.com/Textualize/textual/issues/1632
- Fixed programmatic style changes not refreshing children layouts when parent widget did not change size https://github.com/Textualize/textual/issues/1607
- Fixed relative units in
grid-rowsandgrid-columnsbeing computed with respect to the wrong dimension https://github.com/Textualize/textual/issues/1406 - Fixed bug with animations that were triggered back to back, where the second one wouldn't start https://github.com/Textualize/textual/issues/1372
- Fixed bug with animations that were scheduled where all but the first would be skipped https://github.com/Textualize/textual/issues/1372
- Programmatically setting
overflow_x/overflow_yrefreshes the layout correctly https://github.com/Textualize/textual/issues/1616 - Fixed double-paste into
Inputhttps://github.com/Textualize/textual/issues/1657 - Added a workaround for an apparent Windows Terminal paste issue https://github.com/Textualize/textual/issues/1661
- Fixed issue with renderable width calculation https://github.com/Textualize/textual/issues/1685
- Fixed issue with app not processing Paste event https://github.com/Textualize/textual/issues/1666
- Fixed glitch with view position with auto width inputs https://github.com/Textualize/textual/issues/1693
- Fixed
DataTable"selected" events containing wrong coordinates when mouse was used https://github.com/Textualize/textual/issues/1723
Removed
- Methods
MessagePump.emitandMessagePump.emit_no_waithttps://github.com/Textualize/textual/pull/1738 - Removed
reactive.watchin favor of DOMNode.watch.
0.10.1 - 2023-01-20
Added
- Added Strip.text property https://github.com/Textualize/textual/issues/1620
Fixed
- Fixed
textual diagnosecrash on older supported Python versions. https://github.com/Textualize/textual/issues/1622
Changed
- The default filename for screenshots uses a datetime format similar to ISO8601, but with reserved characters replaced by underscores https://github.com/Textualize/textual/pull/1518
0.10.0 - 2023-01-19
Added
- Added
TreeNode.parent-- a read-only property for accessing a node's parent https://github.com/Textualize/textual/issues/1397 - Added public
TreeNodelabel access viaTreeNode.labelhttps://github.com/Textualize/textual/issues/1396 - Added read-only public access to the children of a
TreeNodeviaTreeNode.childrenhttps://github.com/Textualize/textual/issues/1398 - Added
Tree.get_node_by_idto allow getting a node by its ID https://github.com/Textualize/textual/pull/1535 - Added a
Tree.NodeHighlightedmessage, giving aon_tree_node_highlightedevent handler https://github.com/Textualize/textual/issues/1400 - Added a
inherit_component_classessubclassing parameter to control whether component classes are inherited from base classes https://github.com/Textualize/textual/issues/1399 - Added
diagnoseas atextualcommand https://github.com/Textualize/textual/issues/1542 - Added
rowandcolumncursors toDataTablehttps://github.com/Textualize/textual/pull/1547 - Added an optional parameter
selectorto the methodsScreen.focus_nextandScreen.focus_previousthat enable using a CSS selector to narrow down which widgets can get focus https://github.com/Textualize/textual/issues/1196
Changed
MouseScrollUpandMouseScrollDownnow inherit fromMouseEventand have attached modifier keys. https://github.com/Textualize/textual/pull/1458- Fail-fast and print pretty tracebacks for Widget compose errors https://github.com/Textualize/textual/pull/1505
- Added Widget._refresh_scroll to avoid expensive layout when scrolling https://github.com/Textualize/textual/pull/1524
events.Pastenow bubbles https://github.com/Textualize/textual/issues/1434- Improved error message when style flag
noneis mixed with other flags (e.g., when settingtext-style) https://github.com/Textualize/textual/issues/1420 - Clock color in the
Headerwidget now matches the header color https://github.com/Textualize/textual/issues/1459 - Programmatic calls to scroll now optionally scroll even if overflow styling says otherwise (introduces a new
forceparameter to all thescroll_*methods) https://github.com/Textualize/textual/issues/1201 COMPONENT_CLASSESare now inherited from base classes https://github.com/Textualize/textual/issues/1399- Watch methods may now take no parameters
- Added
computeparameter to reactive - A
TypeErrorraised duringcomposenow carries the full traceback - Removed base class
NodeMessagefrom which all node-relatedTreeevents inherited
Fixed
- The styles
scrollbar-background-activeandscrollbar-color-hoverare no longer ignored https://github.com/Textualize/textual/pull/1480 - The widget
Placeholdercan now have its width set toautohttps://github.com/Textualize/textual/pull/1508 - Behavior of widget
Inputwhen rendering after programmatic value change and related scenarios https://github.com/Textualize/textual/issues/1477 https://github.com/Textualize/textual/issues/1443 DataTable.show_cursornow correctly allows cursor toggling https://github.com/Textualize/textual/pull/1547- Fixed cursor not being visible on
DataTablemount whenfixed_columnswere used https://github.com/Textualize/textual/pull/1547 - Fixed
DataTablecursors not resetting to origin onclear()https://github.com/Textualize/textual/pull/1601 - Fixed TextLog wrapping issue https://github.com/Textualize/textual/issues/1554
- Fixed issue with TextLog not writing anything before layout https://github.com/Textualize/textual/issues/1498
- Fixed an exception when populating a child class of
ListViewpurely fromcomposehttps://github.com/Textualize/textual/issues/1588 - Fixed freeze in tests https://github.com/Textualize/textual/issues/1608
- Fixed minus not displaying as symbol https://github.com/Textualize/textual/issues/1482
0.9.1 - 2022-12-30
Added
- Added textual._win_sleep for Python on Windows < 3.11 https://github.com/Textualize/textual/pull/1457
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() https://github.com/Textualize/textual/pull/1427
Changed
- Widget.render_line now returns a Strip
- Fix for slow updates on Windows
- Bumped Rich dependency
0.8.2 - 2022-12-28
Fixed
- Fixed issue with TextLog.clear() https://github.com/Textualize/textual/issues/1447
0.8.1 - 2022-12-25
Fixed
- Fix for overflowing tree issue https://github.com/Textualize/textual/issues/1425
0.8.0 - 2022-12-22
Fixed
- Fixed issues with nested auto dimensions https://github.com/Textualize/textual/issues/1402
- Fixed watch method incorrectly running on first set when value hasn't changed and init=False https://github.com/Textualize/textual/pull/1367
App.darkcan now be set fromApp.on_loadwithout an error being raised https://github.com/Textualize/textual/issues/1369- Fixed setting
visibilitychanges needing arefreshhttps://github.com/Textualize/textual/issues/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 https://github.com/Textualize/textual/pull/1416
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. https://github.com/Textualize/textual/issues/1343
Changed
- Renamed the
Bindingargumentuniversaltopriority. https://github.com/Textualize/textual/issues/1343 - When looking for bindings that have priority, they are now looked from
Appdownwards. https://github.com/Textualize/textual/issues/1343 BINDINGSon anApp-derived class have priority by default. https://github.com/Textualize/textual/issues/1343BINDINGSon aScreen-derived class have priority by default. https://github.com/Textualize/textual/issues/1343- Added a message parameter to Widget.exit
Fixed
- Fixed validator not running on first reactive set https://github.com/Textualize/textual/pull/1359
- Ensure only printable characters are used as key_display https://github.com/Textualize/textual/pull/1361
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
Placeholderhttps://github.com/Textualize/textual/issues/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
- Type selectors can now contain numbers https://github.com/Textualize/textual/issues/1253
- Fixed visibility not affecting children https://github.com/Textualize/textual/issues/1313
- Fixed issue with auto width/height and relative children https://github.com/Textualize/textual/issues/1319
- Fixed issue with offset applied to containers https://github.com/Textualize/textual/issues/1256
- Fixed default CSS retrieval for widgets with no
DEFAULT_CSSthat inherited from widgets withDEFAULT_CSShttps://github.com/Textualize/textual/issues/1335 - Fixed merging of
BINDINGSwhen binding inheritance is set toNonehttps://github.com/Textualize/textual/issues/1351
0.5.0 - 2022-11-20
Added
- Add get_child_by_id and get_widget_by_id, remove get_child https://github.com/Textualize/textual/pull/1146
- Add easing parameter to Widget.scroll_* methods https://github.com/Textualize/textual/pull/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 ofDOMNode.ancestors. - Improved the speed of
DOMQuery.remove. - Added DataTable.clear
- Added low-level
textual.walkmethods. - It is now possible to
awaitaWidget.remove. https://github.com/Textualize/textual/issues/1094 - It is now possible to
awaitaDOMQuery.remove. Note that this changes the return value ofDOMQuery.remove, which used to returnself. https://github.com/Textualize/textual/issues/1094 - Added Pilot.wait_for_animation
- Added
Widget.move_childhttps://github.com/Textualize/textual/issues/1121 - Added a
Labelwidget https://github.com/Textualize/textual/issues/1190 - Support lazy-instantiated Screens (callables in App.SCREENS) https://github.com/Textualize/textual/pull/1185
- Display of keys in footer has more sensible defaults https://github.com/Textualize/textual/pull/1213
- Add App.get_key_display, allowing custom key_display App-wide https://github.com/Textualize/textual/pull/1213
Changed
- Watchers are now called immediately when setting the attribute if they are synchronous. https://github.com/Textualize/textual/pull/1145
- Widget.call_later has been renamed to Widget.call_after_refresh.
- Button variant values are now checked at runtime. https://github.com/Textualize/textual/issues/1189
- Added caching of some properties in Styles object
Fixed
- Fixed DataTable row not updating after add https://github.com/Textualize/textual/issues/1026
- Fixed issues with animation. Now objects of different types may be animated.
- Fixed containers with transparent background not showing borders https://github.com/Textualize/textual/issues/1175
- Fixed auto-width in horizontal containers https://github.com/Textualize/textual/pull/1155
- Fixed Input cursor invisible when placeholder empty https://github.com/Textualize/textual/pull/1202
- Fixed deadlock when removing widgets from the App https://github.com/Textualize/textual/pull/1219
0.4.0 - 2022-11-08
https://textual.textualize.io/blog/2022/11/08/version-040/#version-040
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. https://github.com/Textualize/textual/issues/1096App.mountandWidget.mounthave newbeforeandafterparameters https://github.com/Textualize/textual/issues/778
Added
- Added
initparam to reactive.watch CSS_PATHcan now be a list of CSS files https://github.com/Textualize/textual/pull/1079- Added
DOMQuery.only_onehttps://github.com/Textualize/textual/issues/1096 - Writes to stdout are now done in a thread, for smoother animation. https://github.com/Textualize/textual/pull/1104
0.3.0 - 2022-10-31
Fixed
- Fixed issue where scrollbars weren't being unmounted
- Fixed fr units for horizontal and vertical layouts https://github.com/Textualize/textual/pull/1067
- Fixed
textual runbreaking sys.argv https://github.com/Textualize/textual/issues/1064 - Fixed footer not updating styles when toggling dark mode
- Fixed how the app title in a
Headeris centred https://github.com/Textualize/textual/issues/1060 - Fixed the swapping of button variants https://github.com/Textualize/textual/issues/1048
- Fixed reserved characters in screenshots https://github.com/Textualize/textual/issues/993
- Fixed issue with TextLog max_lines https://github.com/Textualize/textual/issues/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 https://github.com/Textualize/textual/issues/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 https://github.com/Textualize/textual/pull/1061
0.2.1 - 2022-10-23
Changed
- Updated meta data for PyPI
0.2.0 - 2022-10-23
Added
- CSS support
- Too numerous to mention
0.1.18 - 2022-04-30
Changed
- Bump typing extensions
0.1.17 - 2022-03-10
Changed
- Bumped Rich dependency
0.1.16 - 2022-03-10
Fixed
- Fixed escape key hanging on Windows
0.1.15 - 2022-01-31
Added
- Added Windows Driver
0.1.14 - 2022-01-09
Changed
- Updated Rich dependency to 11.X
0.1.13 - 2022-01-01
Fixed
- Fixed spurious characters when exiting app
- Fixed increasing delay when exiting
0.1.12 - 2021-09-20
Added
- Added geometry.Spacing
Fixed
- Fixed calculation of virtual size in scroll views
0.1.11 - 2021-09-12
Changed
- Changed message handlers to use prefix handle_
- Renamed messages to drop the Message suffix
- Events now bubble by default
- Refactor of layout
Added
- Added App.measure
- Added auto_width to Vertical Layout, WindowView, an ScrollView
- Added big_table.py example
- Added easing.py example
0.1.10 - 2021-08-25
Added
- Added keyboard control of tree control
- Added Widget.gutter to calculate space between renderable and outside edge
- Added margin, padding, and border attributes to Widget
Changed
- Callbacks may be async or non-async.
- Event handler event argument is optional.
- Fixed exception in clock example https://github.com/willmcgugan/textual/issues/52
- Added Message.wait() which waits for a message to be processed
- Key events are now sent to widgets first, before processing bindings
0.1.9 - 2021-08-06
Added
- Added hover over and mouse click to activate keys in footer
- Added verbosity argument to Widget.log
Changed
- Simplified events. Remove Startup event (use Mount)
- Changed geometry.Point to geometry.Offset and geometry.Dimensions to geometry.Size
0.1.8 - 2021-07-17
Fixed
- Fixed exiting mouse mode
- Fixed slow animation
Added
- New log system
0.1.7 - 2021-07-14
Changed
- Added functionality to calculator example.
- Scrollview now shows scrollbars automatically
- New handler system for messages that doesn't require inheritance
- Improved traceback handling