Releases: posit-dev/py-shiny
Shiny 0.7.1
Shiny 0.7.0
Breaking Changes
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)- has added a
-d
/--dir
flag for saving to a specific output directory - will raise an error if if will overwrite existing files
- prompt users to install
requirements.txt
- has added a
-
Fixed
js-react
template build error. (#965) -
Fixed #1007: Plot interaction with plotnine provided incorrect values. (#999)
Developer features
- Output renderers should now be created with the
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)- Legacy renderers that will be removed in the near future:
shiny.render.RenderFunction
shiny.render.RenderFunctionAsync
shiny.render.transformer.OutputRenderer
shiny.render.transformer.OutputRendererSync
shiny.render.transformer.OutputRendererAsync
- Legacy renderers that will be removed in the near future:
Shiny 0.6.1.1
Shiny 0.6.1
New features
shiny create
now allows you to select from a list of template apps.shiny create
provides templates which help you build your own custom JavaScript components.- Closed #814: The functions
reactive.Calc
andreactive.Effect
have been changed to have lowercase names:reactive.calc
, andreactive.effect
. The old capitalized names are now aliases to the new lowercase names, so existing code will continue to work. Similarly, the classreactive.Value
has a new alias,reactive.value
, but in this case, since the original was a class, it keeps the original capitalized name as the primary name. The examples have not been changed yet, but will be changed in a future release. (#822) - Added
ui.layout_columns()
for creating responsive column-forward layouts based on Bootstrap's 12-column CSS Grid. (#856) - Added support for Shiny Express apps, which has a simpler, easier-to-use API than the existing API (Shiny Core). Please note that this API is still experimental and may change. (#767)
Bug fixes
- Fix support for
shiny.ui.accordion(multiple=)
(#799).
Other changes
- Closed #492:
shiny.ui.nav()
is now deprecated in favor of the more aptly namedshiny.ui.nav_panel()
(#876). - Update penguins example to credit Allison Horst and drop usage of
shiny.experimental
(#798). as_fillable_container()
andas_fill_item()
no longer mutate theTag
object that was passed in. Instead, it returns a newTag
object. Also closed #856: these functions now put thehtml-fill-container
andhtml-fill-item
CSS classes last, instead of first. (#862)App()
now accepts a server function with a singleinput
parameter, or a server function with parametersinput
,output
andsession
. Server functions with two or more than three parameters now raise an exception. (#920)
shiny 0.6.0
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). -
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 into shiny.ui
(final locations under shiny.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 general purpose container for grouping related UI elements together
card()
,card_header()
,card_footer()
,CardItem
- Valuebox - Opinionated container for displaying a value and title
valuebox()
showcase_left_center()
showcase_top_right()
- Navs - Navigation within a page
navset_bar()
,navset_tab_card()
,navset_pill_card()
page_navbar(sidebar=, fillable=, fillable_mobile=, gap=, padding=)
,navset_card_tab(sidebar=)
,navset_card_pill(sidebar=)
,navset_bar(sidebar=, fillable=, gap=, padding=)
- Layout - Layout of UI elements
layout_column_wrap()
- Inputs - UI elements for user input
input_text_area(autoresize=)
If a ported method is called from shiny.experimental.ui
, a deprecation warning will be displayed.
Methods still under consideration in shiny.experimental.ui
:
card(wrapper=)
: A function (which returns a UI element) to call on unnamed arguments incard(*args)
which are not alreadyshiny.ui.CardItem
objects.card_body()
: A container for grouping related UI elements togethercard_image()
: A general container for an image within ashiny.ui.card
.card_title()
: A general container for the "title" of ashiny.ui.card
.
API removals
shiny.experimental.ui.FillingLayout
has been removed. (#481)shiny.experimental.ui.toggle_switch()
has been made defunct. Please remove it from your code and useshiny.ui.update_switch()
instead. (#772)shiny.experimental.ui.as_width_unit()
has been made defunct. Please remove it from your code. (#772)shiny.experimental.ui
'as_fill_carrier()
,is_fill_carrier()
,is_fillable_container()
, andis_fill_item()
have been made defunct. Remove them from your code. (#680, #788)- Support for
min_height=
,max_height=
, andgap=
inshiny.experimental.ui.as_fillable_container()
andas_fill_item()
has been removed. (#481) shiny.experimental.ui.TagCallable
has been made defunct. Please use its type is equivalent tohtmltools.TagFunction
. (#680)
shiny 0.5.1
shiny 0.5.0
New features
- The new fast-scrolling data table/grid feature (
ui.output_data_frame
/render.data_frame
) now has a filtering feature. To enable, pass the argumentfilters=True
to therender.DataTable
orrender.DataGrid
constructors. (#592) shiny run
now takes a--reload-dir <DIR>
argument that indicates a directory--reload
should (recursively) monitor for changes, in addition to the app's parent directory. Can be used more than once. (#353)- The default theme has been updated to use Bootstrap 5 with custom Shiny style enhancements. (#624)
- Added experimental UI
tooltip()
,update_tooltip()
, andtoggle_tooltip()
for easy creation (and server-side updating) of Bootstrap tooltips (a way to display additional information when focusing (or hovering over) a UI element). (#629)
Bug fixes
- Using
update_slider
to update a slider's value to adatetime
object or other non-numeric value would result in an error. (#649)
Other changes
shiny 0.4.0
New features
-
Added new fast-scrolling data table and data grid outputs. (#538)
-
Added
include_js()
andinclude_css()
, for easily including JS and CSS files in an application. (#127) -
Added sidebar, card, value box, and accordion methods into
shiny.experimental.ui
. (#481) -
Added
fill
andfillable
methods intoshiny.experimental.ui
. Iffill
isTrue
, then the UI component is allowed to expand into the parent container. Iffillable
isTrue
, then the UI component will allow its content to expand. Bothfill
on the child component andfillable
on the parent component must beTrue
for the child component to expand. (#481) -
Added sidebar methods into
shiny.experimental.ui
.shiny.experimental.ui.layout_sidebar()
does not requireui.panel_main()
andui.panel_sidebar()
. These two methods have been deprecated.x.ui.page_navbar()
,x.ui.navset_bar()
,x.navset_tab_card()
, andx.navset.pill_card()
addedsidebar=
support. (#481) -
feat(sidebar):
ui.layout_sidebar()
internally usesx.ui.layout_sidebar()
, enabling filling layout features. (#568)
Bug fixes
shiny 0.3.3
New features
-
Added
shiny.experimental
as a place to put experimental features. When using Shiny's experimental features, we recommend importing them by callingimport shiny.experimental as x
, so that all local function calls must start withx
(e.g.x.ui.card()
) to signify the method may be changed/removed without warning or future support. (#462) -
Added
penguins
example. (#462) -
The bootstrap HTMLDependency is now created using the dev version of
{bslib}
to get the latest features. (#462) -
Added
shiny.experimental.ui.input_text_area()
, which supports auto-resizing height to fit the content whenautoresize=True
. (#463)
Other changes
shiny.reactive.lock
is now exported. (#458)