Add this suggestion to a batch that can be applied as a single commit.
This suggestion is invalid because no changes were made to the code.
Suggestions cannot be applied while the pull request is closed.
Suggestions cannot be applied while viewing a subset of changes.
Only one suggestion per line can be applied in a batch.
Add this suggestion to a batch that can be applied as a single commit.
Applying suggestions on deleted lines is not supported.
You must change the existing code in this line in order to create a valid suggestion.
Outdated suggestions cannot be applied.
This suggestion has been applied or marked resolved.
Suggestions cannot be applied from pending reviews.
Suggestions cannot be applied on multi-line comments.
Suggestions cannot be applied while the pull request is queued to merge.
Suggestion cannot be applied right now. Please check back later.
This PR contains the following updates:
==0.5.0
->==1.2.1
Release Notes
posit-dev/py-shiny (shiny)
v1.2.1
Compare Source
Bug fixes
Branded theming via
ui.Theme.from_brand()
now correctly applies monospace inline and block font family choices. (#1762)Compatibility with
websockets>=14.0
, which has changed its public APIs. Shiny now requires websockets 13 or later. (#1769)v1.2.0
Compare Source
Breaking changes
.expect_inverse()
for Navset controllers inshiny.playwright.controllers
now requires abool
value. To keep behavior the same, use.expect_inverse(False)
. (#1668).expect_layout()
for Navset controllers inshiny.playwright.controllers
is now renamed to.expect_fluid()
and requires abool
value. To keep behavior the same, use.expect_fluid(True)
. (#1668).expect_icon()
for Accordion controllers inshiny.playwright.controllers
now requires abool
value instead of astr
. (#1710)New features
New features for
@render.data_frame
:Added narwhals support for
@render.data_frame
. This allows for any eager data frame supported by narwhals to be returned from a@render.data_frame
output method. All internal methods and helper methods now leverage thenarwhals
API to be data frame agnostic. (#1570)Added
.data_patched()
reactive calculation that applies all.cell_patches()
to.data()
. (#1719)Added
.update_cell_value()
method to programmatically update the contents of a data frame cell. (#1719)Added
.update_data()
method to update the rendered data without resetting any user sort or filter. Note, all user edits will be forgotten. (#1719)Added narwhals support for
@render.table
. This allows for any eager data frame supported by narwhals to be returned from a@render.table
output method. (#1570)Shiny now supports theming via brand.yml with a single
_brand.yml
file. Callui.Theme.from_brand()
with__file__
or the path to a_brand.yml
file and pass the resulting theme to thetheme
argument ofexpress.ui.page_opts()
(Shiny Express) orui.page_*()
functions (Shiny Core) to apply the brand theme to the entire app. (#1743)chat_ui()
andChat.ui()
gain amessages
parameter for providing starting messages. (#1736)Other changes
Incorporated
orjson
for faster data serialization in@render.data_frame
outputs. (#1570)Added
PageNavbar
class to the list ofshiny.playwright.controllers
for testingui.page_navbar()
. (#1668)Added
.expect_widths()
toNavsetPillList
inshiny.playwright.controllers
for testingui.navset_pill_list(widths=)
. (#1668)Added
.expect_title()
forPopover
inshiny.playwright.controllers
(#1683)Added
.expect_disabled()
forInputActionButton
inshiny.playwright.controllers
(#1705)Small improvements to the default pulse busy indicator to better blend with any background. It's also now slightly smaller by default.(#1707)
Added
.expect_class()
,.expect_gap()
,.expect_bg_color()
,.expect_desktop_state()
,.expect_mobile_state()
,.expect_mobile_max_height()
,.expect_title()
, and.expect_padding()
forSidebar
inshiny.playwright.controllers
(#1715)Modified
.expect_text()
forSidebar
inshiny.playwright.controllers
to use.loc_content
instead ofloc
for text. Also modified.expect_width()
to check the.loc_container
's style instead of the.loc
element. (#1715)Modified
.expect_text()
and.expect_width()
forSidebar
inshiny.playwright.controllers
to useloc_content
instead ofloc
for text. (#1715)Added
.expect_class()
and.expect_multiple()
forAccordion
inshiny.playwright.controllers
(#1710)Bug fixes
A few fixes for
ui.Chat()
, including:Chat()
sometimes silently dropping errors. (#1672)Chat()
sometimes not removing it's loading icon (on error or aNone
transform). (#1679).messages(format="anthropic")
correctly removes non-user starting messages (once again). (#1685)shiny create
now uses the templateid
rather than the directory name as the default directory. (#1666)ui.Theme()
now works correctly on Windows when the theme requires Sass compilation. (Thanks, @yuuuxt!) (#1684)Fixed multiple input controllers (
InputSlider
,InputDate
,InputDateRange
,InputCheckbox
, andInputCheckboxGroup
) inshiny.playwright.controller
to check thewidth
property within thestyle
attribute. (#1691, #1696, #1702)Fixed multiple input controllers (
InputSwitch
,InputRadioButtons
,InputNumeric
,InputText
,InputTextArea
,InputPassword
,InputActionButton
, andInputActionLink
) inshiny.playwright.controller
to correctly validate thewidth
style property in `.expect_width(). (#1705)Fixed input controller
InputTextArea
inshiny.playwright.controller
to correctly validate theresize
style property in.expect_resize()
. (#1705)Fixed a bug in
ui.conditional_panel()
that would cause the panel to repeatedly show/hide itself when the provided condition did not evaluate to a boolean value. (#1707)Fixed a bug with
ui.input_slider()
when used as a range slider that made it impossible to change the slider value when both handles were at the maximum value. (#1707)Fixed bug in
@render.data_frame
wherebool
orobject
columns were not being rendered. (#1570)Fixed output controller
OutputDataFrame
inshiny.playwright.controller
to correctly assert the number of rows in.expect_nrow()
as the total number of virtual rows, not the number of currently displaying rows. (#1719)Fixed issue where
@render.download
did not respect the module namespacing. (Thanks, @nsiicm0!) (#1732)Added workaround in
Accordion
inshiny.playwright.controller
where.expect_open()
and.expect_panels()
would hang while resolving a playwright locator. (Thanks, @joesho112358!) (#1165)v1.1.0
Compare Source
New features
ui.Chat()
gains a new.update_user_input()
method, which adds the ability to update the input placeholder message. As a result,.set_user_message()
is now deprecated (since the new method can also be used to update the message). (#1594)shiny create
now supports a succinct format for specifying the GitHub repository via the--github
flag, e.g.--github posit-dev/py-shiny-templates
. You can now also use--github
and--template
together, in which case--github
should point to a repository containing a directory matching the name provided in--template
. (#1623)shiny create
now identifies templates in external repositories using a_template.json
metadata file. This file should contain at an"id"
and optionally a"title"
and"description"
. Whenshiny create
is called with the--github
flag but without a--template
flag, it will offer a menu listing all available templates in the repository. (#1631)Other changes
ui.Chat()
, including:.messages()
method no longer trims messages by default (i.e., the default value oftoken_limits
is nowNone
instead of the overly generic and conservative value of(4096, 1000)
). See the new generative AI in production templates (viashiny create
) for examples of settingtoken_limits
based on the model being used. (#1657)Bug fixes
A few fixes for
ui.Chat()
, including:.messages(format="google")
now returns the correct role. (#1622)transform_assistant_response
can now returnNone
and correctly handles change of content on the last chunk. (#1641)An empty
ui.input_date()
value no longer crashes Shiny. (#1528)Fixed bug where calling
.update_filter(None)
on a data frame renderer did not visually reset non-numeric column filters. (It did reset the column's filtering, just not the label). Now it resets filter's label. (#1557)Require shinyswatch >= 0.7.0 and updated examples accordingly. (#1558)
ui.input_text_area(autoresize=True)
now resizes properly even when it's not visible when initially rendered (e.g. in a closed accordion or a hidden tab). (#1560)ui.notification_show(duration=None)
now persists the notification until the app user closes it. (#1577)Some copies of Windows 10 have registry entries mapping .js files to content type "text/plain", which was causing all sorts of problems for browsers. (#1624)
Added missing support for
express.ui.navset_card_pill(placement:)
. (#1602)Added
.expect_sidebar()
and.expect_title()
methods forNavsetCardTab
,NavsetCardPill
,NavsetCardUnderline
, andNavsetBar
. (#1602)Added
.expect_placement()
method forNavsetCardPill
andNavsetCardUnderline
. (#1602)Deprecations
v1.0.0
Compare Source
New features
Added a new
shiny.ui.Chat
class for building conversational interfaces with fully customizable and performant response generation. (#1453)Expose
shiny.playwright
,shiny.run
, andshiny.pytest
modules that allow users to testing their Shiny apps. (#1448, #1456, #1481)shiny.playwright
containscontroller
andexpect
submodules.controller
will contain many classes to interact with (and verify!) your Shiny app using Playwright.expect
contains expectation functions that enhance standard Playwright expectation methods.shiny.run
contains therun_shiny_app
command and the return typeShinyAppProc
.ShinyAppProc
can be used to type the Shiny app pytest fixtures.shiny.pytest
contains pytest test fixtures. Thelocal_app
pytest fixture is automatically available and runs a siblingapp.py
file. Where ascreate_app_fixture(PATH_TO_APP)
allows for a relative path to a Shiny app to be instantiated from a different folder.Added CLI command
shiny add test
to add a test file to an existing Shiny app. (#1461)@render.data_frame
,render.DataGrid
, andrender.DataTable
now supportpolars
data frames (#1474).@render.data_frame
,render.DataGrid
, andrender.DataTable
are now type aware. This means that the data frame renderer object's.data()
and.data_view()
methods will return the same type of data given the the renderer. E.g. If aDataGrid
wrapping apolars
data frame is returned to the renderer function,.data_view()
will returnpolars
data. (#1502)@render.data_frame
'srender.DataGrid
andrender.DataTable
added support for cell styling with the newstyles=
parameter. This parameter can receive a style info object (or a list of style info objects), or a function that accepts a data frame and returns a list of style info objects. Each style info object can contain therows
andcols
locations where the inlinestyle
and/or CSSclass
should be applied. (#1475)@render.data_frame
has added a few new methods:.data_view_rows()
is a reactive value representing the sorted and filtered row numbers. This value wrapsinput.<ID>_data_view_rows()
(#1374).sort()
is a reactive value representing the sorted column information (dictionaries containingcol: int
anddesc: bool
). This value wrapsinput.<ID>_sort()
. (#1374).filter()
is a reactive value representing the filtered column information (dictionaries containingcol: int
andvalue
which is either a string or a length 2 array of at least one non-None
number). This value wrapsinput.<ID>_filter()
. (#1374).update_sort(sort=)
allows app authors to programmatically update the sorting of the data frame. (#1374).update_filter(filter=)
allows app authors to programmatically update the filtering of the data frame. (#1374)@render.data_frame
now accepts both a non-"none"
selection_mode
value andeditable=True
. (#1454, #1534)@render.data_frame
's<ID>.cell_selection()
no longer returns aNone
value and now always returns a dictionary containing both therows
andcols
keys. This is done to achieve more consistent author code when working with cell selection. When the value'stype="none"
, bothrows
andcols
are empty tuples. Whentype="row"
,cols
represents all column numbers of the data. In the future, whentype="col"
,rows
will represent all row numbers of the data. These extra values are not available ininput.<ID>_cell_selection()
as they are independent of cells being selected and are removed to reduce information being sent to and from the browser. (#1376)Relative imports, like
from . import utils
, now can be used in Shiny Express apps. (#1464)ui.Theme
allows you to create custom themes for your Shiny app by recompiling Bootstrap and Shiny's Sass files with your own customizations. Themes created withui.Theme
can be passed directly to thetheme
argument ofexpress.ui.page_opts()
(Shiny Express) orui.page_*()
functions (Shiny Core) to apply the theme to the entire app. This feature requires the libsass package which can be installed withpip install libsass
. (#1358)ui.card_body()
can be used to wrap the contents of elements inui.card()
, allowing you to change parameters likefillable
orpadding
andgap
for groups of elements in the card. (#1506)Other changes
ui.input_action_button()
andui.update_action_button()
gain adisabled
argument. When the button is disabled, it appears grayed out and cannot be clicked. (#1465)The main content area of
ui.page_sidebar()
andui.page_navbar()
with a page-levelsidebar
now have a minimum height and width to avoid squashed content in fillable layouts. The minimum height and width are controllable via--bslib-page-main-min-{width,height}
CSS variables. (#1436)Added a new option to place an always-open sidebar above the main content on mobile screens by providing
open={"mobile": "always-above"}
toui.sidebar()
. (#1436)Bug fixes
Fixed #1440: When a Shiny Express app with a
www/
subdirectory was deployed to shinyapps.io or a Connect server, it would not start correctly. (#1442)Fixed #1498: Update table related TypeScript dependencies to their latest versions. This fixed an issue where the Row Virtualizer would scroll to the end when hidden. This would cause the DOM to update numerous times, locking up the browser tab for multiple seconds. (#1524, #1550)
The return type for the data frame patch function now returns a list of
render.CellPatch
objects (which supporthtmltools.TagNode
for thevalue
attribute). These values will be set inside the data frame's.data_view()
result. This also means that.cell_patches()
will be a list ofrender.CellPatch
objects. (#1526)Made sure all
@render.data_frame
cells that have been edited are now restored back to ready state to handle the off chance that the returned patches are at different locations the the original edit patches. (#1529)remove_all_fill(tag)
no longer modifies the originaltag
input and instead returns a modified copy oftag
. (#1538)Deprecations
The following deprecated functions have now been removed (#1546):
shiny.ui.panel_sidebar()
was deprecated in v0.6.0; useshiny.ui.sidebar()
instead.shiny.ui.panel_main()
was deprecated in v0.6.0; instead pass items directly toshiny.ui.layout_sidebar()
.shiny.ui.navset_pill_card()
was deprecated in v0.6.0; useshiny.ui.navset_card_pill()
instead.shiny.ui.navset_tab_card()
was deprecated in v0.6.0; useshiny.ui.navset_card_tab()
instead.shiny.ui.nav()
was deprecated in v0.6.1; useshiny.ui.nav_panel()
instead.@render.data_frame
,render.DataGrid
, andrender.DataTable
have deprecated support for data frame types that arepandas
compatible. Please call.to_pandas()
on your data before it is returned to the renderer (#1502). Currently, bothpolars
andpandas
data frames are supported (#1474). If you'd like to add support for a new data frame type, please open an issue or a pull request.@render.data_frame
's.cell_selection()
will no longer returnNone
when the selection mode is"none"
. In addition, missingrows
orcols
information will be populated with appropiate values. This allows for consistent handling of the cell selection object. (#1374)@render.data_frame
's input valueinput.<ID>_data_view_indices()
has been deprecated. Please use<ID>.data_view_rows()
to retrieve the same information. (#1377)@render.data_frame
's input valueinput.<ID>_column_sort()
has been deprecated. Please use<ID>.sort()
to retrieve the same information. (#1374)@render.data_frame
's input valueinput.<ID>_column_filter()
has been deprecated. Please use<ID>.filter()
to retrieve the same information. (#1374)Deprecated functions in
shiny.experimental
have been removed. By and large, these functions are now available in the mainshiny
namespace. (#1540)We've deprecated several card-related
shiny.experimental.ui
functions that were moved to the mainshiny.ui
namespace in v0.6.0. Bothcard()
andcard_body()
are no longer experimental and can be called viashiny.ui.card()
andshiny.ui.card_body()
directly.shiny.experimental.ui.card_title()
is now deprecated, but can be replaced withshiny.ui.tags.h5()
orshiny.ui.card_header()
. (#1543)v0.10.2
Compare Source
Bug fixes
v0.10.1
Compare Source
Bug fixes
v0.10.0
Compare Source
Deprecations
Restored
@render.data_frame
's (prematurely removed in v0.9.0) input valueinput.<ID>_selected_rows()
. Please use<ID>.cell_selection()["rows"]
and considerinput.<ID>_selected_rows()
deprecated. (#1345, #1377)@render.data_frame
's method.input_cell_selection()
has been renamed to.cell_selection()
. Please use.cell_selection()
and consider.input_cell_selection()
deprecated. (#1407)New features
Added busy indicators to provide users with a visual cue when the server is busy calculating outputs or otherwise serving requests to the client. More specifically, a spinner is shown on each calculating/recalculating output, and a pulsing banner is shown at the top of the page when the app is otherwise busy. Use the new
ui.busy_indicator.options()
function to customize the appearance of the busy indicators andui.busy_indicator.use()
to disable/enable them. (#918)Added support for creating modules using Shiny Express syntax, and using modules in Shiny Express apps. (#1220)
ui.page_*()
functions gain atheme
argument that allows you to replace the Bootstrap CSS file with a new CSS file.theme
can be a local CSS file, a URL, or a shinyswatch theme. In Shiny Express apps,theme
can be set viaexpress.ui.page_opts()
. (#1334)Bug fixes
Fixed an issue that prevented Shiny from serving the
font.css
file referenced in Shiny's Bootstrap CSS file. (#1342)Removed temporary state where a data frame renderer would try to subset to selected rows that did not exist. (#1351, #1377)
Fix an issue in the data frame output which caused the table to freeze when filters removed previously selected cells. (#1412)
Other changes
Session
is now an abstract base class, andAppSession
is a concrete subclass of it. Also,ExpressMockSession
has been renamedExpressStubSession
and is a concrete subclass ofSession
. (#1331)The
Session
class now has a methodis_stub_session()
. ForExpressStubSession
, this method returnsTrue
for , andAppSession
objects it returnsFalse
. (#1331)Closed #1293: The error console would display error messages if an app was disconnected and the user changed an input. (#1339)
Fixed an issue where some CSS files were larger than necessary because they had source maps embedded in them. (#1339)
v0.9.0
Compare Source
Breaking Changes
@render.data_frame
return values ofDataTable
andDataGrid
had their parameter ofrow_selection: Literal["single", "multiple"]
become deprecated. Please useselection_mode="row"
orselection_mode="rows"
instead. (#1198)The
col_widths
argument ofui.layout_columns()
now sets thesm
breakpoint by default, rather than themd
breakpoint. For example,col_widths=(12, 6, 6)
is now equivalent to{"sm": (12, 6, 6)}
rather than{"md": (12, 6, 6)}
. (#1222)New features
Session
objects now have aset_message_handler(name, fn)
method that allows you to register a message handler function that will be called when a request message with the given name is received from the client (viaShiny.shinyapp.makeRequest()
(JS)). (#1253)Experimental:
@render.data_frame
return values ofDataTable
andDataGrid
supporteditable=True
to enable editing of the data table cells. (#1198)ui.card()
andui.value_box()
now take anid
argument that, when provided, is used to report the full screen state of the card or value box to the server. For example, when usingui.card(id = "my_card", full_screen = TRUE)
you can determine if the card is currently in full screen mode by reading the boolean value ofinput.my_card_full_screen()
. (#1215, #1266)Added support for using
shiny.express
in Quarto Dashboards. (#1217)ui.value_box()
,ui.layout_columns()
andui.layout_column_wrap()
now all havemin_height
andmax_height
arguments. These are useful in filling layouts, likeui.page_fillable()
,ui.page_sidebar(fillable=True)
orui.page_navbar(fillable=True)
. For example, you can useui.layout_columns(min_height=300, max_height=500)
to ensure that a set of items (likely arranged in a row of columns) are always between 300 and 500 pixels tall. (#1223)Added an error console which displays errors in the browser's UI. This is enabled by default when running applications locally, and can be disabled with
shiny run --no-dev-mode
. It is not enabled for applications that are deployed to a server. (#1060)shiny create
was updated to include some additional templates as well as an option to choose from the new templates website. (#1273, #1277, #1274)shiny.express.ui.page_opts()
now accepts additional keyword arguments that are passed to the underlying page layout chosen byshiny.ui.page_auto()
. (#1314)Bug fixes
On Windows, Shiny Express app files are now read in as UTF-8. (#1203)
input_dark_mode()
now accepts astyle
argument that can be used to customize the appearance and position of the dark mode toggle switch. (#1207)Calling
ui.update_selectize()
withchoices
andselected
now clears the current selection before updating the choices and selected value. (#1221)Fixed an issue that could happen with a
ui.card()
orui.value_box()
that is rendered dynamically via@render.ui
when an updated card replaces a card that the user has expanded into full screen mode. Now the full screen state is reset for the new card or value box. If you want to update a card without potentially exiting the full-screen mode, update specific parts of the card usingui.output_ui()
orui.output_text()
. (#1221)ui.layout_columns()
now correctly applies therow_heights
at thexs
breakpoint, if supplied. (#1222)ui.panel_conditional()
now adds the.shiny-panel-conditional
class to the<div>
element wrapping the conditional panel contents. (#1257)ui.panel_conditional()
no longer results in unwanted double padding when the parent container usesgap
for spacing multiple elements (e.g., when used inui.layout_columns()
,ui.page_fillable()
, etc). (#1266)Error messages now use
var(--bs-danger)
instead ofvar(--bs-danger-text-emphasis)
for the text color. (#1266)Other changes
fillable=True
) now uses a CSS cascade layer namedhtmltools
to reduce the precedence order of the fill CSS. (#1228)v0.8.1
Compare Source
Breaking Changes
ui.page_sidebar()
now places thetitle
element in a.navbar
container that matches the structure ofpage_navbar()
. This ensures that the title elements ofpage_sidebar()
andpage_navbar()
have consistent appearance. (#1176)Bug fixes
Shiny now compiles the Bootstrap 5-based stylesheets for component styles imported from https://github.com/rstudio/shiny. (#1191)
Fixed the CSS for
ui.output_ui()
to avoid unwanted double padding when its parent container usesgap
for spacing multiple elements (e.g.,ui.layout_columns()
,ui.page_fillable()
, etc). (#1176)Other changes
Closed #1178: Removed run-time dependency on asgiref. (#1183)
The uvicorn and click packages are no longer needed when running on Emscripten. (#1187)
We adjusted the shadows used for cards and popovers. Cards now use a slightly smaller shadow and the same shadow style is also now used by popovers. (#1176)
We increased the spacing between elements just slightly. This change is most noticeable in the
layout_columns()
orlayout_column_wrap()
component. In these and other components, you can usegap
andpadding
arguments to choose your own values, or you can set the$bslib-spacer
(Sass) or--bslib-spacer
(CSS) variable. (#1176)v0.8.0
Compare Source
Breaking Changes
Page-level sidebars used in
ui.page_sidebar()
andui.page_navbar()
will now default to being initially open but collapsible on desktop devices and always open on mobile devices. You can adjust this default choice by settingui.sidebar(open=)
. (#1129)ui.sidebar()
is now a thin wrapper for the internalui.Sidebar
class. Theui.Sidebar
class has been updated to store the sidebar's contents and settings and to delay rendering until the sidebar HTML is actually used. Because most users callui.sidebar()
instead of using the class directly, this change is not expected to affect many apps. (#1129)New features
Added
ui.input_dark_mode()
, a toggle switch that allows users to switch between light and dark mode. By default, whenui.input_dark_mode()
is added to an app, the app's color mode follows the users's system preferences, unless the app author sets themode
argument. Whenui.input_dark_mode(id=)
is set, the color mode is reported to the server, and server-side color mode updating is possible usingui.update_dark_mode()
. (#1149)ui.sidebar(open=)
now accepts a dictionary with keysdesktop
andmobile
, allowing you to independently control the initial state of the sidebar at desktop and mobile screen sizes. (#1129)Closed #984: In Shiny Express apps, if there is a
"www"
subdirectory in the app's directory, Shiny will serve the files in that directory as static assets, mounted at/
. (#1170)For Shiny Express apps, added
express.app_opts()
, which allows setting application-level options, likestatic_assets
anddebug
. (#1170)Closed #1079: For Shiny Express apps, automatically run a
globals.py
file in the same directory as the app file, if it exists. The code inglobals.py
will be run with the session context set toNone
. (#1172)Bug fixes
Fixed
input_task_button
not working in a Shiny module. (#1108)Fixed several issues with
page_navbar()
styling. (#1124)Fixed
Renderer.output_id
to not contain the module namespace prefix, only the output id. (#1130)Fixed gap-driven spacing between children in fillable
nav_panel()
containers. (#1152)Fixed #1138: An empty value in a date or date range input would cause an error; now it is treated as
None
. (#1139)Other changes
@render.data_frame
now properly fills its container by default. (#1126)We improved the accessibility of the full screen toggle button in cards created with
ui.card(full_screen=True)
. Full-screen cards are now also supported on mobile devices. (#1129)When entering and exiting full-screen card mode, Shiny now emits a client-side custom
bslib.card
event that JavaScript-oriented users can use to react to the full screen state change. (#1129)The sidebar's collapse toggle now has a high
z-index
value to ensure it always appears above elements in the main content area ofui.layout_sidebar()
. The sidebar overlay also now receives the same highz-index
on mobile layouts. (#1129)Updated example apps to use lower-case versions of
reactive.Calc
->reactive.calc
,reactive.Effect
->reactive.effect
, andreactive.Value
->reactive.value
. (#1164)Closed #1081: The
@expressify()
function now has an optionhas_docstring
. This allows the decorator to be used with functions that contain a docstring. (#1163)Replaced use of
sys.stderr.write()
withprint(file=sys.stderr)
, because on some platformssys.stderr
can beNone
. (#1131)Replaced soon-to-be deprecated
datetime
method calls when handlingshiny.datetime
inputs. (#1146)v0.7.1
Compare Source
Bug fixes
Fixed
render.download
not working in Express. (#1085)express.ui.hold()
can now accept any type of object, instead of justTagChild
objects. (#1089)Fixed an issue where
input_selectize
would not initialize correctly when created within a Shiny module. (#1091)v0.7.0
Compare Source
Breaking Changes
page_sidebar()
andpage_navbar()
now usefillable=False
by default. (#990)New features
Added
shiny.ui.input_task_button()
for creating buttons that launch longer-running tasks thanshiny.ui.input_action_button()
was designed for. Task buttons give visual feedback that the task is running, and cannot be clicked again until the task is complete. (#907)Added
@extended_task
decorator for creating long-running tasks that can be cancelled. (#907)Added
@render.download
as a replacement for@session.download
, which is now deprecated. (#977)Added
ui.output_code()
, which is currently an alias forui.output_text_verbatim()
. (#997)Added
@render.code
, which is an alias for@render.text
, but in Express mode, it displays the result usingui.output_code()
. (#997)Added
App.on_shutdown
method for registering a callback to be called when the app is shutting down. (#907)You can now pass options to
ui.input_selectize
see the selectize.js docs for available options. (#914, #158)ui.input_selectize
gains theremove_button
argument which allows you to control the visibility of the remove button.Bug fixes
CLI command
shiny create
... (#965)-d
/--dir
flag for saving to a specific output directoryrequirements.txt
Fixed
js-react
template build error. (#965)Fixed #1007: Plot interaction with plotnine provided incorrect values. (#999)
Developer features
shiny.render.renderer.Renderer
class. This class should contain either a.transform(self, value)
method (common) or a.render(self)
(rare). These two methods should return something can be converted to JSON. In addition,.default_ui(self, id)
should be implemented by returninghtmltools.Tag
-like content for use within Shiny Express. To make your own output renderer, please inherit from theRenderer[IT]
class whereIT
is the type (excludingNone
) required to be returned from the App author. (#964)shiny.render.RenderFunction
shiny.render.RenderFunctionAsync
shiny.render.transformer.OutputRenderer
shiny.render.transformer.OutputRendererSync
shiny.render.transformer.OutputRendererAsync
Other changes
)
v0.6.1.1
Compare Source
Bug fixes
shiny create
required therequests
package, but it was not listed as a dependency. It now usesurllib
instead, which is part of the Python standard library. (#940)v0.6.1
Compare Source
Bug fixes
shiny create
required therequests
package, but it was not listed as a dependency. It now usesurllib
instead, which is part of the Python standard library. (#940)v0.6.0
Compare Source
Breaking Changes
shiny.run
only allows positional arguments forapp
,host
, andport
, all other arguments must be specified with keywords.New features
shiny run
now takesreload-includes
andreload-excludes
to allow you to define which files trigger a reload (#780).shiny.run
now passes keyword arguments touvicorn.run
(#780).The
@output
decorator is no longer required for rendering functions;@render.xxx
decorators now register themselves automatically. You can still use@output
explicitly if you need to set specific output options (#747, #790).Added support for integration with Quarto (#746).
Added
shiny.render.renderer_components
decorator to help create new output renderers (#621).Added
shiny.experimental.ui.popover()
,update_popover()
, andtoggle_popover()
for easy creation (and server-side updating) of Bootstrap popovers. Popovers are similar to tooltips, but are more persistent, and should primarily be used with button-like UI elements (e.g.input_action_button()
or icons) (#680).Added CSS classes to UI input methods (#680) .
Session
objects can now accept an asynchronous (or synchronous) function for.on_flush(fn=)
,.on_flushed(fn=)
, and.on_ended(fn=)
(#686).App()
now allowsstatic_assets
to represent multiple paths. To do this, pass in a dictionary instead of a string (#763).The
showcase_layout
argument ofvalue_box()
now accepts one of three character values:"left center"
,"top right"
,"bottom"
. (#772)value_box()
now supports many new themes and styles, or fully customizable themes using the newvalue_box_theme()
function. To reflect the new capabilities, we've replacedtheme_color
with a newtheme
argument. The previous argument will continue work as expected, but with a deprecation warning. (#772)In addition to the Bootstrap theme names (
primary
,secondary
, etc.), you can now use the main Boostrap colors (purple
,blue
,red
, etc.). You can also choose to apply the color to the background or foreground by prepending abg-
ortext-
prefix to the theme or color name. Finally, we've also added new gradient themes allowing you to pair any two color names asbg-gradient-{from}-{to}
(e.g.,bg-gradient-purple-blue
).These named color themes aren't limited to value boxes: because they're powered by small utility classes, you can use them anywhere within your bslib-powered UI.
Added
shiny.ui.showcase_bottom()
, a newshiny.ui.value_box()
layout that places the showcase below the value boxtitle
andvalue
, perfect for a full-bleed plot. (#772)Bug fixes
shiny run
now respects the user providedreload-dir
argument (#765).Fixed #646: Wrap bare value box value in
<p />
tags. (#668)Fixed #676: The
render.data_frame
selection feature was underdocumented and buggy (sometimes returningNone
as a row identifier if the pandas data frame's index had gaps in it). With this release, the selection is consistently a tuple of the 0-based row numbers of the selected rows--orNone
if no rows are selected. (#677)Added tests to verify that ui input methods, ui labels, ui update (value) methods, and ui output methods work within modules (#696).
Adjusted the
@render.plot
input type to beobject
to allow for any object (if any) to be returned (#712).In
layout_column_wrap()
, whenwidth
is a CSS unit -- e.g.width = "400px"
orwidth = "25%"
-- andfixed_width = FALSE
,layout_column_wrap()
will ensure that the columns are at leastwidth
wide, unless the parent container is narrower thanwidth
. (#772)Other changes
input_action_button()
now defaults to having whitespace around it. (#758)layout_sidebar()
now uses an<aside>
element for the sidebar's container and a<header>
element for the sidebar title. The classes of each element remain the same, but the semantic meaning of the elements is now better reflected in the HTML markup. (#772)layout_sidebar()
no longer gives the sidebar main content area therole="main"
attribute. (#772)Improved the style and appearance of the button to enter full screen in
card()
s andvalue_box()
es to better adapt to Bootstrap's dark mode. (#772)API changes
Added
shiny.ui.navset_underline()
andshiny.ui.navset_card_underline()
whose navigation container is similar toshiny.ui.navset_tab()
andshiny.ui.navset_card_tab()
respectively, but its active/focused navigation links are styled with an underline. (#772)shiny.ui.layout_column_wrap(width, *args)
was rearranged toshiny.ui.layout_column_wrap(*args, width)
. Now,width
will default to200px
is no value is provided. (#772)shiny.ui.showcase_left_center()
andshiny.ui.showcase_top_right()
no longer take two values for thewidth
argument. Instead, they now take a single value (e.g.,width = "30%"
) representing the width of the showcase are in the value box. Furthermore, they've both gainedwidth_full_screen
arguments that determine the width of the showcase area when the value box is expanded to fill the screen. (#772)shiny.ui.panel_main()
andshiny.ui.panel_sidebar()
are deprecated in favor of new API forshiny.ui.layout_sidebar()
. Please useshiny.ui.sidebar()
to construct asidebar=
and supply it toshiny.ui.layout_sidebar(sidebar, *args, **kwargs)
. (#788)shiny.experimental.ui.toggle_sidebar()
has been renamed toshiny.ui.update_sidebar()
. It'sopen
value now only supportsbool
values. (#788)API relocations
shiny.ui
'snavset_pill_card()
andnavset_tab_card()
have been renamed tonavset_card_pill()
andnavset_card_tab()
respectively (#492).The following methods have been moved from
shiny.experimental.ui
and integrated intoshiny.ui
(final locations undershiny.ui
are displayed) (#680):Sidebar - Sidebar layout or manipulation
sidebar()
,page_sidebar()
,update_sidebar()
,layout_sidebar()
,Sidebar
Filling layout - Allow UI components to expand into the parent container and/or allow its content to expand
page_fillable()
,fill.as_fillable_container()
,fill.as_fill_item()
,fill.remove_all_fill()
output_plot(fill=)
,output_image(fill=)
,output_ui(fill=, fillable=)
CSS units - CSS units and padding
css.as_css_unit()
,css.as_css_padding()
,css.CssUnit
Tooltip - Hover-based context UI element
tooltip()
,update_tooltip()
Popover - Click-based context UI element
popover()
,update_popover()
Accordion - Vertically collapsible UI element
accordion()
,accordion_panel()
,insert_accordion_panel()
,remove_accordion_panel()
,update_accordion()
,update_accordion_panel()
,Accordion
,AccordionPanel
Card - A g
Configuration
📅 Schedule: Branch creation - At any time (no schedule defined), Automerge - At any time (no schedule defined).
🚦 Automerge: Disabled by config. Please merge this manually once you are satisfied.
♻ Rebasing: Whenever PR is behind base branch, or you tick the rebase/retry checkbox.
🔕 Ignore: Close this PR and you won't be reminded about this update again.
This PR was generated by Mend Renovate. View the repository job log.