- tabs - tab color was not being applied to inactive tabs #570
- persistence - orginal class was missing from the resulting base classes #573
- persistence - linked class attributes were not handling None values correctly #577
- popover - fix bug with popovers not handling dom nodes correctly #580
- theme - fix Colors() without a variant argument #581
- tabs - tab color can now be a css var and better support for css colors in general #570
- messaging - support custom loggers in messaging module #569
- persistence - Handle addition and updates of instances with linked classes #575
- messaging - with_logging argument is deprecated and maybe removed in a future version
logging messages is now off by default - to turn it on provide a custom
logger
argument https://github.com/anvilistas/anvil-extras/pull/572/files - persistence - LinkedAttribute is deprecated and will be removed in a future version #578
- popover - fix bug where popovers could not be used on forms using layouts #553
- ChipsInput - Chip close icon color is fixed for the last highlighted chip #567
- popover - rewritten without bootstrap, now uses floating-ui
dismiss_on_scroll
is deprecated class names on the popover element have changed #563 - multi-select - rewritten without bootstrap, now uses popover and basic anvil components #566
- classic editor - design components are no longer supported #567
- class-names and roles - all anvil extras components now use class names and roles prefixed with
ae-
#567
- theme module - Define and switch between colour schemes via code #551
- quill - implement get_markdown() #557
- persistence - add reset method #542
- persistence - add set behaviour for linked classes
- multiselect - fix bug where enable_selct_all was not being set correctly https://anvil.works/forum/t/anvil-extras-2-6/21252/4
- non-blocking - fix catching exceptions when accessing a non-blocking promise #543
- multiselect - fix select all buttons overlapping when using width=fit #545
- mulitselect - fix bug where properties were not being set correctly #554
- augment - fix bug where event couldn't be used as a raise_event kw https://anvil.works/forum/t/tabulator-multiple-value-error-on-row-click/22158/9
- authorisation - added config option to avoid adding a roles column to the users table #516
- storage - proxyobjects are passed to the underlying storage so that those implementing the serializable interface can be stored #533
- Slider - allow connect and behaviour to be set at runtime #538
- persistence - fix get method #523
- persistence - fix handling of Linked Attributes with no row #534
- MultiSelect - fix an issue with multiselect on the self hosted app server #525
- routing - fix redirect with None conditions #532
- MultiSelect - fix an issue where the dropdown menu would remain open when the form is hidden #536
- routing - fix initialisation of history state #519
- multiselect - fix visible False property in the designer #510
- multiselect - fix toggling enabled property loses selected state #513
- switch - fix lever color when switch is checked #517
- routing - fix on_form_load might fire stale value if form_show event is slow #521
- designer hints - add some designer hints to components #512
- authorisation - added config option to avoid adding a roles column to the users table #516
- routing - fix rendering slow loading pages #501
- logging - add missing date format parameter #502
- logging - fix critical error message displays as warning #505
- tabs - add better support for using faded colors e.g.
tabs.active_background = "#2196F344"
#483 - augment - use python implementation #488
- non-blocking: add a getter to expose the raw javascript promise #475
- augment - trigger("writeback") is now deprecated - use the native version instead
raise_event('x-anvil-write-back-<property-name>)
#429
- Tabs - adds active_background property #481
- storage - fix a bug in ios when indexed db accessed in a webworker and closed #484
- routing - preserve properties when changing templates #486
- storage - fix bug with deserializing
- authorisation - adds
check_permissions
andhas_permission
functions #382 routing.lazy_route
- allows you to lazily load Forms whilst using routing #442- Autocompletion: adds filter_mode property - either contains or startswith #444
- navigation -
set_mode("hash")
can be used to set the default navigation mode to hash routing #458 - navigation - menu definition can include
title
, rather than registering a form with a title #453 - navigation - set menu item visibility using conditions defined in the menu definition #460
- view transitions - routing and navigation use a transition on page changes (can be turned off) #465
- Progress Bars - support dynamic property changes #466
- pivot - don't fail if self.items is not set #468
- routing was no longer dismissing alerts on navigation
you will now need to use
routing.alert
in place ofanvil.alert
for an alert to be dismissed on navigation non-dismissible alerts will block the navigation #437 - tabs - ensure the selected tab indicator adjusts when the tab component changes size #467
- Slider - improve behaviour in the designer #472
- wait_for_writeback is now written in pure python #431
- Switch - improve designer behaviour #470
- Add non-blocking module #411
- augment - adding event handler like click to a button will no longer fire twice #412
- autocomplete - fix suggestions position on mobile in M3 design #413
- tabs - tweak css for better mobile experience #421
- autocomplete - changing the suggestions will force the UI to change #426
- add zod validation library #406
- Add use of kwargs in persistent class init method #408
- Raise TableError when accessing non-existent columns on persisted class
- Fix attribute handling for new instances
- Typo in persistence module fixed
- persistence - Define simple classes for use in client side code and have instances of those classes synchronised with data tables rows.
-
add
tag
property to custom components https://anvil.works/forum/t/chip-tag-initialization/15461 -
add
format_selected_text
method override for multi-select-dropdown #398 -
add
selected_keys
property for multi-select-dropdown #398
navigation
- Add args and kwargs toopen_form
#393storage
- fix serialisation of dictionary values #395
routing
- fixrouting.ANY
withinurl_keys
#388
anvil_extras.uuid
module can be replaced wholesale by uuid from stdlib DeprecatedWarning added touuid.uuid4()
- Some component properties adjusted to type enum so they can be selected, rather than typed, in the designer
uuid
andstorage
will check ifuuid
andlocalforage
are aleady installed before importing them from cdn #381
routing
-form.url_dict
will be updated whenredirect=False
#374
routing
- remove_from_cache will work across templates #367MultiSelectDropDown
- fix setting certain attributes dynamically cause events to stop firing #365
augment
ensure that"mouseenter"
is always correct event type in"hover"
events #319augment
adjust handling of RadioButton to work correctly with the augment module #325routing
- to catch arbirtrary query params in a route useurl_keys=[routing.ANY]
#342
augment
- DataGrid's pagination click event prevented other events from being added #325MultiSelectDropDown
- all properties are now dynamic and can be updated in code #331serialisation
- support accelerated tables with linked columns #350navigation
- Now handles links with roles defined when setting 'selected' #352popovers
fix bug scrolling on mobile #324
MultiSelectDropDown
: addwidth
property with options forfit
andauto
sizing #329navigation
- newset_title
function for custom click handlers #358
@auto_refreshing
- the original item will now be proxied rather than copied. Changes to the proxied item will make changes to the original item. #311MultiSelectDropDown
- the change event will only fire with user interaction. Previously also fired when theselected
property was changed in code. This behaviour now matches other anvil Components - e.g. changing theselected_value
of a DropDown does not fire the DropDown change event. #307
- routing - a template argument was added to the
@routing.route
decorator. This argument determines which templates a route can be added to. #293 - routing - a tempalate can take multiple paths
@routing.template(path=["admin", "user"])
#298 - routing -
@routing.redirect()
decorator added #298 - hashlib module added #301
utils.import_module
: similar implementation to python'simportlib.import_module
#302MultiSelectDropDown
: add eventsopened
andclosed
#279
MultiSelectDropDown
: fix change event should only fire on user interaction #307@auto_refreshing
: support auto_refreshing when the item is not explicitly set #250
- routing - fix regression with before unload #289
routing.load_form()
was removed. Userouting.set_url_hash()
instead.
- Popovers - supports changing the default container to something other than
"body"
adddismiss_on_scroll()
andset_default_container()
methods #268 - Quill - adds a sanitize property and a sanitize kwarg to the
set_html()
method #273 - routing - adds support for multiple top level forms
#281
@routing.template(path='', priority=0, condition=None)
A template form is a top level form that holds the header, navigation bar, side panel and an emptycontent_panel
. When navigating the routing module will ensure the correct template is the currentopen_form
based on thepriority
,path
, andcondition
. The currenturl_hash
must start with thepath
, and if acondition
is set it must returnTrue
. Templates are checked order of priority, highest values first.@routing.default_template
replaces@routing.main_router
. The@main_router
decorator is still available.@default_template
is equivalent to@template()
routing.NavigationExit()
when raised within atemplate
'son_navgation
callback, this will prevent therouting
module from changing thecontent_panel
. This is useful if you have aLoginForm
as atemplate
whose content should remain unchanged when the user tries to navigate to otherroutes
.routing.launch()
called within a startup module, replaces the call toopen_form()
.routing.launch()
checks the currenturl_hash
and ensures that the correct template is loaded based on the paramaters of each template. Callingrouting.set_url_hash()
in a Startup Module will have no effect on form loading untilrouting.launch()
has been called. (This allows you to change theurl_hash
within the startup logic)
logging
module #282 Small, simple, lightweight API for logging in anvil apps, a bit like the Python logging module. See the docs:
- Multi-select - fix button clicks don't always close the dropdown menu #271
- fix bug with
@timed
decorator if used with keyword logger and level arguments #282
- Select All functionality added to MultiSelect component
- Dynamic serialisation of data tables rows #191
utils.correct_canvas_resolution()
- canvas elements can look blurry on retina displays This function sharpens the resolution of a canvas element when called in the reset event #202augment.remove_event_handler()
added to the augment module #259- Slider - visual properties -
handle_size
,bar_height
, androle
added #261
- storage supports
datetime
anddate
objects #179 on_form_load()
can be used in arouting.main_router
Form This method will be fired with the currenturl_hash
and theform
that was added to thecontent_panel
. #180animate
duration argument is no longer keyword only i.e.animate(self, fade_in, 300)
is valid #182
- MultiSelect component works correctly in a popover #187
- popover
is_visible
bug when usingpop("toggle")
#199 - Using routing load_from_cache=False to reload the current form works correctly #243
- PageBreak retains its thickness in print mode #263
-
has_popover()
function added to the popover module #171 -
Transition
class in the animate module is more flexible for combining transitions. Some pre-computed transitions adjusted.rotate_in/rotate_out
replaced byrotate
#173
- animation module - Wrap the Web Animations API around a convenient set of python tools for anvil #169
- MultiSelectDropdown - Fix "Hides menu when component is removed from the page" #170
- Pivot - Dynamic pivot table component #165
- MultiSelectDropdown - Hides menu when component is removed from the page #149
- Popover - content's show and hide events will be triggered when the popover shows and hides #150
- Autocomplete - Add missing TextBox properties to design view #160
- Quill - dynamically add custom modules #117
- routing - adjusts the behaviour of anvil.alert to ensure dismissible alerts are closed on navigation. And navigation prevented for non-dismissible alerts. #132
storage.indexed_db
- Now supports the browser'sIndexedDB
with a dictionary like api #135- storage - additional store objects can be created inside the browsers
localStorage
orIndexedDB
. e.g.todo_store = indexed_db.get_store('todos')
Each store object behaves like a dictionary object. #135 - PageBreak -
border
property added and documentation updated. #139
- Autocomplete - can now be used inside an alert #114
- Popover - fix stickyhover #121
- storage - update and clear were missing from the documented api #125
- PageBreak - fix margin_top property and make it optional #137
- PageBreak and Multi-select - fix illegal HTML #139
- Popover - remove the requirement for delays in show/hide/destroy transitions #146
- storage.session_storage was deprecated. Use local_storage instead #135
- Slider Component - bump javascript dependency and refactor. No changes to the component's public API. #112
- Autocomple - duplicate suggestions are ignored and a warning is printed #116
- Popover - documentation added and clone link updated. The example now imports
anvil_extras
#121
augment
-add_event_handler()
method added.original_event
passed as anevent_arg
. #109
- Add missing support for binding writeback on the Switch component #111
- Autocompleter suggestions on mobile #103
local_storage
- wrapper around the browser localStorage object #93
- Quill editor supports a toolbar and theme set at runtime. #80
- Add navigation.go_to function, improved navigation error messages #99
- Autocompleter focus method doesn't trigger autocomplete suggestions #94
- Improve error reporting when passing an invalid content object to a popover #90
- Fixed the publisher.unsubscribe method in the Messaging module, making it functional #92
- Fix indeterminate progress bar not always displaying #95
- Tabs Component #64
- uuid4 in the browser #67
- Chip Component and ChipsInput Component #68
- AutoComplete Component #70
- Improved dynamic designer support for Switch, MultiSelectDropDown, Tabs, Quill and Slider #66
- Improved slider formatting #61
- Update styling of switch component #56
- Include pagination_click event in augment module #55
- Slider Component #60
- Refactor of progress bars #59
- component.trigger('writeback') #47
- MultiSelectDropDown component #44
- @wait_for_writeback decorator #50
- Quill component #52
- Switch component #31
- Auto Refreshing Item #39
- Initial release