* fix image serializing
* If get_format_mimetype does not work, look up format in Image.MIME
Throw a warning if the image format does not have an associated MIME type and
ultimately fallback to image/png and let the browser figure it out.
* test_media: end to end serialization of PIL images
---------
Co-authored-by: Masen Furer <m_github@0x26.net>
* Move sharding internal to StateManager
Avoid leaking sharding implementation details all over the State class and
breaking the API
* WiP StateManager based sharding
* Copy the state __dict__ when serializing to avoid breaking the instance
* State tests need to pass the correct substate token for redis
* state: when getting parent_state, set top_level=False
ensure that we don't end up with a broken tree
* test_app: get tests passing with redis by passing the correct token
refactor upload tests to suck less
* test_client_storage: look up substate key
* state.py: pass static checks
* test_dynamic_routes: working with redis state shard
* Update the remaining AppHarness tests to pass {token}_{state.get_full_name()}
* test_app: pass all tokens with state suffix
* StateManagerRedis: clean up commentary
* feat: Synchronizing localStorage between tabs using browser events
* test_client_storage: Test sync'd local storage vars
* update_vars_internal: generic handler to apply var changes to state tree
Apply fully qualified var names to each substate they are associated with. This
allows consistent updates to arbitrary state vars without having to know their
"setter" arguments, in case the user has overwritted the `set_x` name.
---------
Co-authored-by: Masen Furer <m_github@0x26.net>
* link: respect `is_external` prop and other attributes on A tag
Instead of passing all props to NextLink by default, only pass props that
NextLink understands, placing the remaining props on the Radix link
Add a test case to avoid regression of `is_external` behavior.
* Link is a MemoizationLeaf
Because Link is often rendered with NextLink as_child, and NextLink breaks if
the href is stateful outside of a Link, ensure that any stateful child of Link
gets memoized together.
* style: shorthand replacements need camelCase
Avoid warning on terminal and in browser console from using kebab-case CSS
props with emotion.
* _rename_props only replace prop name once
In case the value also contains the prop name, we don't want to replace it
multiple times.
* pyi_generator: ignore _rename_props in create signature
* Avoid shadowing CSS prop `display` and `gap`
Replace usages of `gap` with `spacing` to retain Radix sizing number system,
while allowing users to specify a responsive `gap` using CSS units.
Remove `display` props from radix components, allowing `display` to accept
responsive lists.
* checkbox: apply `gap` to `flex` if provided
* Remove _rename_props from .create signatures
* Fix spacing prop in blank template
* Fixup tests after changing style shorthand to return camelCase
* wip event handlers for state mixins
* fix computed vars, prepare event handler tests
* fix computed vars and event handlers inherited by mixins
* Base is not a mixin
* improve state inheritance tests
* wait for alerts to appear
* poll_for_content to fix flaky ci tests
* Expose preventDefault and stopPropagation for DOM events
All EventHandler, EventSpec, and EventChain can now carry these extra
"event_actions" that will be applied inside the frontend code when an event is
triggered from the DOM.
Fix#1621
Fix REF-675
* Test cases (and fixes) for "event_actions"
* form: from __future__ import annotations
for py38, py39 compat
* Revert overzealous merge conflict resolution
* test_client_storage: remove race conditions for cookie assignment
Poll for default timeout for cookies to appear in the controlled browser.
* Remove use of deprecated get_token and get_sid in core
Both reflex.app and reflex.state were still using deprecated methods, which
were throwing unsolvable warnings for end users.
* Remove deprecated router functions from integration tests
Mostly removing custom "token" var and replacing with
router.session.client_token.
Also replacing `get_query_params` and `get_current_page` usage as well.
* fix upload tests
Cannot pass substate as main app state, since it blocks us from accessing
"inherited vars"
* state: do NOT reset `router` to default
When calling `.reset` to reset state vars, do NOT reset the router data, as
that could mess up internal event processing.
* partly add some radix-ui/themes based components
* add @radix-ui/themes integration to top-level app
* WiP: compile _app_wrap based on which component library is used
TODO: working color mode
* WiP get color mode working with agnostic provider
still not perfect, as the RadixColorModeProvider seems to trip hydration errors
when using color_mode_cond component, but for now, this provides a nice balance
between the two libraries and allows them to interoperate.
* WiP template _app.js instead of making a separate wrap file
* WiP: use next-themes for consistent darkmode switching
* strict pin chakra deps
* Move ChakraColorModeProvider to separate js file
* move nasty radix themes js code into js files
* remove chakra from default imports
* chakra fixup import to use .js extension
* Add radix theme typography and layout components
* do NOT special case the radix theme...
avoid templating json and applying it, avoid non-customizable logic
just add the radix Theme component as an app wrap if the user specifies it to
rx.App, and any other app-wrap theme-like component could _also_ be used
without having to change the code.
this also allows different themes for different sections of the app by simply
placing elements inside a different rdxt.theme wrapper.
* Theme uses "radius" not "borderRadius"
* move next-themes to main packages.json
this is always used, regardless of the component library
* test_app: test cases for app_wrap interface
* Finish wrapping Button, Switch, and TextField components
* docstring, comments, static fixups
* debounce: use alias or tag when passing child Element
Fix REF-830
* test_app: ruin my beautiful indentation
* py38 compatibility
* Add event triggers for switch and TextField
* Add type hints for radix theme components
* radix themes fixups from writing the tests
* Add integration test for radix themes components
* test_app: mock out package installation
we only need the compile result, we're not actually trying to install packages
* avoid incompatible version of @emotion/react
* test_radix_themes: include theme_panel component
* next-themes default scheme: "light"
until all of our components look good in dark mode, need to keep the default as
light mode regardless of the system setting.