Commit Graph

130 Commits

Author SHA1 Message Date
Thomas Brandého
34ee07ecd1
use dict instead of set to store hooks (#2995) 2024-04-03 17:13:42 -07:00
Martin Xu
00b1e193ad
the keywords in pyproject.toml template have extra spaces (#2990) 2024-04-02 14:07:12 -07:00
Alek Petuskey
0981ac675b
Update sidebar template (#2959) 2024-04-02 11:48:34 -07:00
Masen Furer
628c865530
Set is_hydrated=False at route onChangeStart (#2949)
* Connection pulser only depends on has_connection_errors

Avoid showing the WiFi error icon when the state is hydrating / navigating
because not being hydrated is not indicative of a connection error in itself.

* Set is_hydrated=False at route onChangeStart

When navigation event starts, set is_hydrated=False on the client side before
any on_load event is dispatched. This avoids a flickering problem where the
client browser navigates and briefly shows content on the page before
processing on_load events associated with the page.

Fix #2885

* Update pyi
2024-03-29 09:41:18 -07:00
Martin Xu
68c56a9811
[REF-2168] Add share options to custom component commands (#2883)
* add command to share custom component info for gallery

* cleanup

* tested

* Update custom_components.py

Co-authored-by: Masen Furer <m_github@0x26.net>

* reorder the questions

* ask user to verify info before publishing

* remove questions already captured in pyproject.toml

* no need to cache form inputs since not many questions

* tested

* cleanup

* delete test

---------

Co-authored-by: Masen Furer <m_github@0x26.net>
2024-03-28 15:13:37 -07:00
Thomas Brandého
94823f1317
fix hook order to use ref inside user hooks (#2906)
* fix hook order to use ref inside user hooks

* 2nd attempt to fix ref_hook order

* add missing definition

* remove print statements
2024-03-27 12:49:11 +01:00
Masen Furer
b89a18f632
Separate get_hooks and get_hooks_internal for stable output (#2710)
* Separate `get_hooks` and `get_hooks_internal` for stable output

When downstream component wrappers depend on State when writing hooks, they
need to be assured that all internal hooks (events, var hooks, memoized
handlers, etc) will be rendered prior to user-defined hooks.

This also makes it less likely for downstream components to feel the need to
overwrite `get_hooks` (no underscore) directly and break internal functioning
of Reflex components.

* Include internal hooks in AppWrap and Page

* Apply get_hooks_internal in a few more places
2024-03-15 16:16:09 -07:00
Masen Furer
94e750a5f1
[REF-2157] Allow rx.download to resolve rx.get_upload_url links (#2813) 2024-03-11 12:29:34 -07:00
Thomas Brandého
1b207eb444
fix template (#2787) 2024-03-05 16:10:44 -08:00
Yummy-Yums
7725c48fb7
Reconnection Logic (#2743)
* reconnection logic

* prettier state.js

---------

Co-authored-by: Masen Furer <m_github@0x26.net>
2024-02-29 16:21:35 -08:00
Tom Gotsman
93fc269860
initial attempt at writing test for urls (#2689)
* initial attempt at writing test for urls

* turn it into a pytest test

* fix precommit and add wrong url to make sure test work

* fix darglint error and fix url set error

* black error

* add to test .md files in reflex as well

* update to fix masen comment

* black formatting

* Fix trailing slash in reflex/state.py

---------

Co-authored-by: Tom Gotsman <tomgotsman@Toms-MacBook-Pro.local>
Co-authored-by: Tom Gotsman <tomgotsman@toms-mbp.lan>
Co-authored-by: Masen Furer <m_github@0x26.net>
2024-02-29 13:45:57 -08:00
Thomas Brandého
cc678e8648
add pulser for connection + adjust condition for connnection_modal (#2676)
* add pulser for connection + adjust condition for connnection_modal

* update style for connection pulser

* rename connectError to connectErrors

* resolve update bug of connectErrors

* fix pulse definition

* rollback pulse definition

* Define WifiOffPulse icon as its own component

Attach the pulse keyframes and imports to the icon itself so that the code gets
properly included in stateful_components.js when it is used.

* limit number of errors in memory

---------

Co-authored-by: Masen Furer <m_github@0x26.net>
2024-02-29 19:01:12 +01:00
Martin Xu
4f9cdd6472
Add support for custom components starter (#2314) 2024-02-28 15:25:26 -08:00
Thomas Brandého
3bcd0672e5
update templates radix sidebar (#2705) 2024-02-28 14:52:24 -08:00
Masen Furer
deae662e2a
[REF-1988] API to Get instance of Arbitrary State class (#2678)
* WiP get_state

* Refactor get_state fast path

Rudimentary protection for state instance access from a background task
(StateProxy)

* retain dirty substate marking per `_mark_dirty` call to avoid test changes

* Find common ancestor by part instead of by character

Fix StateProxy for substates and parent_state attributes (have to handle in
__getattr__, not property)

Fix type annotation for `get_state`

* test_state: workflow test for `get_state` functionality

* Do not reset _always_dirty_substates when adding vars

Reset the substate tracking only when the class is instantiated.

* test_state_tree: test substate access in a larger state tree

Ensure that `get_state` returns the proper "branch" of the state tree depending
on what substate is requested.

* test_format: fixup broken tests from adding substates of TestState

* Fix flaky integration tests with more polling

* AppHarness: reset _always_dirty_substates on rx.State

* RuntimeError unless State is instantiated with _reflex_internal_init=True

Avoid user errors trying to directly instantiate State classes

* Helper functions for _substate_key and _split_substate_key

Unify the implementation of generating and decoding the token + state name
format used for redis state sharding.

* StateManagerRedis: use create_task in get_state and set_state

read and write substates concurrently (allow redis to shine)

* test_state_inheritance: use polling cuz life too short for flaky tests

kthnxbai ❤️

* Move _is_testing_env to reflex.utils.exec.is_testing_env

Reuse the code in app.py

* Break up `BaseState.get_state` and friends into separate methods

* Add test case for pre-fetching cached var dependency

* Move on_load_internal and update_vars_internal to substates

Avoid loading the entire state tree to process these common internal events. If
the state tree is very large, this allow page navigation to occur more quickly.

Pre-fetch substates that contain cached vars, as they may need to be recomputed
if certain vars change.

* Do not copy ROUTER_DATA into all substates.

This is a waste of time and memory, and can be handled via a special case in
__getattribute__

* Track whether State instance _was_touched

Avoid wasting time serializing states that have no modifications

* Do not persist states in `StateManagerRedis.get_state`

Wait until the state is actually modified, and then persist it as part of `set_state`.

Factor out common logic into helper methods for readability and to reduce
duplication of common logic.

To avoid having to recursively call `get_state`, which would require persisting
the instance and then getting it again, some of the initialization logic
regarding parent_state and substates is duplicated when creating a new
instance. This is for performance reasons.

* Remove stray print()

* context.js.jinja2: fix check for empty local storage / cookie vars

* Add comments for onLoadInternalEvent and initialEvents

* nit: typo

* split _get_was_touched into _update_was_touched

Improve clarity in cases where _get_was_touched was being called for its side
effects only.

* Remove extraneous information from incorrect State instantiation error

* Update missing redis exception message
2024-02-27 13:02:08 -08:00
Chris Davis
39175f5812
Update sidebar template README.md (#2735) 2024-02-27 09:50:26 -08:00
Masen Furer
fc874e2ece
Avoid frontend errors with getRefValue (#2691) 2024-02-26 19:38:02 -08:00
Masen Furer
421bfa034a
Apply app theme color_mode/appearance as next-themes default (#2654)
* Apply app theme color_mode/appearance as next-themes default

* compiler: blacken
2024-02-22 10:14:38 -08:00
abulvenz
980834605b
feat: Synchronizing localStorage between tabs using browser events (#2533)
* 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>
2024-02-20 15:14:55 -08:00
Elijah Ahianyo
ec31f00185
Accordion Items unique Value (#2663)
* Accordion Items unique Value

use crypto.randomUUID to generate accordion item value at runtime instead of compile time

* use generateUUID in state.js instead of crypto.randomUUID()
2024-02-20 11:50:50 -08:00
abulvenz
052f82cd06
fix: File upload error after using rx.clear_selected_files (#2666) 2024-02-19 10:42:11 -08:00
Nikhil Rao
6ded702d03
Simplify app template (#2627) 2024-02-15 12:51:52 -08:00
Timothy Pidashev
45b70a130c
align vstack in blank demo app (#2625) 2024-02-15 12:17:53 -08:00
Masen Furer
44000af633
Unbreak demo app (#2623)
Apparently this was converted before code_block got moved back to the top
level.
2024-02-15 11:09:00 -08:00
Masen Furer
4b327edeb6
Merge remote-tracking branch 'origin/main' into reflex-0.4.0 2024-02-13 12:36:30 -08:00
Tom Gotsman
dec777485f
rx.download accepts data arg as either str or bytes (#2493)
* initial attempt that works for dataframe and text downloads

* changes for masens comments

* Instead of using blob, just send a data: URL from the backend

* Enable rx.download directly with Var

If the Var is string-like and starts with `data:`, then no special processing
occurs. Otherwise, the value is passed to JSON.stringify and downloaded as
text/plain.

* event: update docstring and comments on rx.download

Raise ValueError when URL and data are both provided, or the data provided is
not one of the expected types.

---------

Co-authored-by: Tom Gotsman <tomgotsman@toms-mbp.lan>
Co-authored-by: Masen Furer <m_github@0x26.net>
2024-02-13 12:35:31 -08:00
Masen Furer
4206afeb7b
[REF-1958] Remove shadowed radix css props (#2590)
* 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
2024-02-13 10:06:28 -08:00
Masen Furer
0da21ea605
Merge remote-tracking branch 'origin/main' into reflex-0.4.0 2024-02-12 15:05:34 -08:00
Masen Furer
47a6901695
banner.py: fix import specification for getBackendURL (#2584)
* banner.py: fix import specification for getBackendURL

Use the constant Dirs.STATE_PATH

* state.js: only `getBackendURL` dynamically when running client side

During server side rendering, `getBackendURL` cannot access the current
location from the `window`, because there is no `window`.

* Better client-side context checking

Thanks jackie
2024-02-12 15:04:59 -08:00
Masen Furer
fc6eff7104
Convert templates to use rx.chakra where needed (#2555)
* Convert templates to use `rx.chakra` where needed

* reflex_init_in_docker_test: run test on PR into reflex-0.4.0

This is why we didn't catch the template issues earlier
2024-02-12 13:32:23 -08:00
Masen Furer
b607531318
Unbreak tests after recent changes in main (p2) 2024-02-08 10:46:40 -08:00
Masen Furer
ae20644a82
Merge remote-tracking branch 'origin/main' into reflex-0.4.0 2024-02-08 10:17:34 -08:00
Masen Furer
450aa909ca
state.js: determine upload URL dynamically (#2531) 2024-02-07 15:33:16 -08:00
Masen Furer
de6244483d
[REF-1743] Implement radix-native color mode switch and button (#2526) 2024-02-07 11:55:25 -08:00
Nikhil Rao
05d1be2182
Move core components to radix namespace (#2506) 2024-02-02 14:26:46 -08:00
Alek Petuskey
d466c2aaa2
Radix Accordion (#2310) 2024-01-18 14:20:21 -08:00
Masen Furer
7cec7feb63
Update comments in template apps (#2370) 2024-01-08 16:10:56 -08:00
Masen Furer
87844c3f7d
Enable real app AppHarness tests to not specify state= (#2358) 2024-01-05 17:47:31 -08:00
Elijah Ahianyo
abfc099779
rx.match component (#2318)
* initial commit

* add more tests

* refactor match jinja template

* add docstrings

* cleanup

* possible fix for pyright

* fix conflicts

* fix conflicts again

* comments

* fixed bug from review

* fix tests

* address PR comment

* fix tests

* type error improvement

* formatting

* darglint fix

* more tests

* stringify switch condition and cases as js doesnt support complex types(lists and dicts) in switch cases.

* Update reflex/vars.py

Co-authored-by: Masen Furer <m_github@0x26.net>

* change usages

* Precommit fix

---------

Co-authored-by: Alek Petuskey <alek@pynecone.io>
Co-authored-by: Masen Furer <m_github@0x26.net>
Co-authored-by: Alek Petuskey <alekpetuskey@aleks-mbp.lan>
2024-01-04 09:48:18 -08:00
Masen Furer
accaf6dc52
[REF-1365] Radix + Tailwind Compatibility (and allow tailwind to be completely disabled) (#2246) 2023-12-28 00:14:04 -08:00
Thomas Brandého
78429866bd
fix editable property of columns being ignored in data_editor (#2338) 2023-12-28 00:09:07 -08:00
Thomas Brandého
527fa4bc3f
Add slider, progress, and form primitives (#2306) 2023-12-21 10:32:40 -08:00
Masen Furer
1289182f2e
Remove app.compile() from templates (#2327) 2023-12-21 09:49:30 -08:00
Romain Bury
42bcea7631
update tailwind.config.js.jinja2 to add darkMode option (#2312) 2023-12-20 15:43:47 -08:00
Nikhil Rao
96f68cb94d
Implement accordion component (#2262)
* Implement accordion component

* Fix literal annotation

* Use style prop instead of css

* Move accordion to primitives folder

* Add pyi file

* Fix pyright

* Add apply_theme method

* Fix apply_theme

* Use apply_theme method

* Fix lint
2023-12-08 21:20:30 -08:00
Masen Furer
21000d9889
state.js: do not connect unless a state subclass is defined (#2259) 2023-12-05 17:14:47 -08:00
Nikhil Rao
19c01492be
Update sidebar tutorial for new substates (#2256) 2023-12-04 16:49:28 -08:00
Masen Furer
60147dec65
[REF-201] Separate on_load handler from initial hydration (#1847) 2023-11-30 12:21:15 -08:00
Masen Furer
3c7af9fad4
Support hooks in custom components (state, addEvents) (#2234) 2023-11-30 09:59:09 -08:00
Masen Furer
0c55723df4
[REF-1158] Move chakra-only deps to chakra lib (#2171) 2023-11-28 00:04:07 -08:00