reflex 0.3.8a1__py3-none-any.whl → 0.3.9__py3-none-any.whl
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Potentially problematic release.
This version of reflex might be problematic. Click here for more details.
- reflex/.templates/apps/blank/code/blank.py +1 -1
- reflex/.templates/apps/demo/code/demo.py +1 -1
- reflex/.templates/apps/sidebar/code/sidebar.py +6 -1
- reflex/.templates/jinja/web/pages/utils.js.jinja2 +1 -1
- reflex/__init__.py +2 -0
- reflex/__init__.pyi +3 -0
- reflex/app.py +22 -7
- reflex/components/chakra/__init__.py +1 -0
- reflex/components/chakra/forms/__init__.py +1 -0
- reflex/components/chakra/forms/time_picker.py +11 -0
- reflex/components/chakra/forms/time_picker.pyi +129 -0
- reflex/components/component.py +3 -1
- reflex/components/core/match.py +8 -4
- reflex/components/datadisplay/dataeditor.py +5 -1
- reflex/components/markdown/markdown.py +1 -0
- reflex/components/radix/__init__.py +2 -0
- reflex/components/radix/primitives/__init__.py +14 -1
- reflex/components/radix/primitives/accordion.py +430 -69
- reflex/components/radix/primitives/accordion.pyi +41 -11
- reflex/components/radix/primitives/base.py +4 -0
- reflex/components/radix/primitives/base.pyi +81 -0
- reflex/components/radix/primitives/form.py +4 -2
- reflex/components/radix/primitives/form.pyi +2 -2
- reflex/components/radix/primitives/progress.py +4 -2
- reflex/components/radix/primitives/progress.pyi +2 -2
- reflex/components/radix/primitives/slider.py +7 -5
- reflex/components/radix/primitives/slider.pyi +5 -5
- reflex/components/radix/themes/components/__init__.py +14 -4
- reflex/components/radix/themes/components/alertdialog.py +31 -10
- reflex/components/radix/themes/components/alertdialog.pyi +396 -3
- reflex/components/radix/themes/components/aspectratio.py +2 -4
- reflex/components/radix/themes/components/aspectratio.pyi +1 -3
- reflex/components/radix/themes/components/avatar.py +7 -3
- reflex/components/radix/themes/components/avatar.pyi +5 -3
- reflex/components/radix/themes/components/badge.py +5 -7
- reflex/components/radix/themes/components/badge.pyi +4 -6
- reflex/components/radix/themes/components/callout.py +36 -5
- reflex/components/radix/themes/components/callout.pyi +273 -9
- reflex/components/radix/themes/components/card.py +3 -3
- reflex/components/radix/themes/components/card.pyi +2 -2
- reflex/components/radix/themes/components/checkbox.py +41 -4
- reflex/components/radix/themes/components/checkbox.pyi +231 -8
- reflex/components/radix/themes/components/dialog.py +1 -1
- reflex/components/radix/themes/components/dialog.pyi +1 -1
- reflex/components/radix/themes/components/dropdownmenu.py +6 -0
- reflex/components/radix/themes/components/dropdownmenu.pyi +193 -0
- reflex/components/radix/themes/components/iconbutton.py +1 -1
- reflex/components/radix/themes/components/iconbutton.pyi +1 -1
- reflex/components/radix/themes/components/icons.py +1 -0
- reflex/components/radix/themes/components/inset.py +1 -0
- reflex/components/radix/themes/components/inset.pyi +1 -0
- reflex/components/radix/themes/components/radiogroup.py +68 -1
- reflex/components/radix/themes/components/radiogroup.pyi +254 -2
- reflex/components/radix/themes/components/select.py +94 -5
- reflex/components/radix/themes/components/select.pyi +251 -5
- reflex/components/radix/themes/components/slider.py +9 -6
- reflex/components/radix/themes/components/slider.pyi +12 -6
- reflex/components/radix/themes/components/tooltip.py +1 -0
- reflex/components/radix/themes/components/tooltip.pyi +1 -0
- reflex/components/radix/themes/layout/box.py +1 -1
- reflex/state.py +21 -4
- reflex/style.py +15 -0
- reflex/testing.py +2 -0
- reflex/utils/format.py +13 -9
- reflex/utils/path_ops.py +2 -2
- reflex/utils/prerequisites.py +61 -4
- reflex/utils/types.py +4 -1
- reflex/vars.py +36 -3
- {reflex-0.3.8a1.dist-info → reflex-0.3.9.dist-info}/METADATA +2 -2
- {reflex-0.3.8a1.dist-info → reflex-0.3.9.dist-info}/RECORD +73 -71
- {reflex-0.3.8a1.dist-info → reflex-0.3.9.dist-info}/WHEEL +1 -1
- {reflex-0.3.8a1.dist-info → reflex-0.3.9.dist-info}/LICENSE +0 -0
- {reflex-0.3.8a1.dist-info → reflex-0.3.9.dist-info}/entry_points.txt +0 -0
|
@@ -85,7 +85,7 @@
|
|
|
85
85
|
{% macro render_match_tag(component) %}
|
|
86
86
|
{
|
|
87
87
|
(() => {
|
|
88
|
-
switch (JSON.stringify({{ component.cond.
|
|
88
|
+
switch (JSON.stringify({{ component.cond._var_name_unwrapped }})) {
|
|
89
89
|
{% for case in component.match_cases %}
|
|
90
90
|
{% for condition in case[:-1] %}
|
|
91
91
|
case JSON.stringify({{ condition._var_name_unwrapped }}):
|
reflex/__init__.py
CHANGED
|
@@ -216,6 +216,7 @@ _ALL_COMPONENTS = [
|
|
|
216
216
|
"Tfoot",
|
|
217
217
|
"Th",
|
|
218
218
|
"Thead",
|
|
219
|
+
"TimePicker",
|
|
219
220
|
"Tooltip",
|
|
220
221
|
"Tr",
|
|
221
222
|
"UnorderedList",
|
|
@@ -252,6 +253,7 @@ _MAPPING = {
|
|
|
252
253
|
"reflex.compiler.utils": ["get_asset_path"],
|
|
253
254
|
"reflex.components": _ALL_COMPONENTS + ["chakra", "next"],
|
|
254
255
|
"reflex.components.component": ["memo"],
|
|
256
|
+
"reflex.components.radix": ["radix"],
|
|
255
257
|
"reflex.components.recharts": ["recharts"],
|
|
256
258
|
"reflex.components.moment.moment": ["MomentDelta"],
|
|
257
259
|
"reflex.config": ["config", "Config", "DBConfig"],
|
reflex/__init__.pyi
CHANGED
|
@@ -209,6 +209,7 @@ from reflex.components import TextArea as TextArea
|
|
|
209
209
|
from reflex.components import Tfoot as Tfoot
|
|
210
210
|
from reflex.components import Th as Th
|
|
211
211
|
from reflex.components import Thead as Thead
|
|
212
|
+
from reflex.components import TimePicker as TimePicker
|
|
212
213
|
from reflex.components import Tooltip as Tooltip
|
|
213
214
|
from reflex.components import Tr as Tr
|
|
214
215
|
from reflex.components import UnorderedList as UnorderedList
|
|
@@ -420,6 +421,7 @@ from reflex.components import text_area as text_area
|
|
|
420
421
|
from reflex.components import tfoot as tfoot
|
|
421
422
|
from reflex.components import th as th
|
|
422
423
|
from reflex.components import thead as thead
|
|
424
|
+
from reflex.components import time_picker as time_picker
|
|
423
425
|
from reflex.components import tooltip as tooltip
|
|
424
426
|
from reflex.components import tr as tr
|
|
425
427
|
from reflex.components import unordered_list as unordered_list
|
|
@@ -445,6 +447,7 @@ from reflex.components import NoSSRComponent as NoSSRComponent
|
|
|
445
447
|
from reflex.components import chakra as chakra
|
|
446
448
|
from reflex.components import next as next
|
|
447
449
|
from reflex.components.component import memo as memo
|
|
450
|
+
from reflex.components import radix as radix
|
|
448
451
|
from reflex.components import recharts as recharts
|
|
449
452
|
from reflex.components.moment.moment import MomentDelta as MomentDelta
|
|
450
453
|
from reflex import config as config
|
reflex/app.py
CHANGED
|
@@ -43,7 +43,6 @@ from reflex.components.core.client_side_routing import (
|
|
|
43
43
|
Default404Page,
|
|
44
44
|
wait_for_client_redirect,
|
|
45
45
|
)
|
|
46
|
-
from reflex.components.radix import themes
|
|
47
46
|
from reflex.config import get_config
|
|
48
47
|
from reflex.event import Event, EventHandler, EventSpec
|
|
49
48
|
from reflex.middleware import HydrateMiddleware, Middleware
|
|
@@ -63,6 +62,7 @@ from reflex.state import (
|
|
|
63
62
|
State,
|
|
64
63
|
StateManager,
|
|
65
64
|
StateUpdate,
|
|
65
|
+
code_uses_state_contexts,
|
|
66
66
|
)
|
|
67
67
|
from reflex.utils import console, exceptions, format, prerequisites, types
|
|
68
68
|
from reflex.utils.imports import ImportVar
|
|
@@ -128,11 +128,11 @@ class App(Base):
|
|
|
128
128
|
Union[Component, ComponentCallable]
|
|
129
129
|
] = default_overlay_component
|
|
130
130
|
|
|
131
|
-
# Background tasks that are currently running
|
|
131
|
+
# Background tasks that are currently running.
|
|
132
132
|
background_tasks: Set[asyncio.Task] = set()
|
|
133
133
|
|
|
134
|
-
# The radix theme for the entire app
|
|
135
|
-
theme: Optional[Component]
|
|
134
|
+
# The radix theme for the entire app.
|
|
135
|
+
theme: Optional[Component]
|
|
136
136
|
|
|
137
137
|
def __init__(self, *args, **kwargs):
|
|
138
138
|
"""Initialize the app.
|
|
@@ -169,7 +169,8 @@ class App(Base):
|
|
|
169
169
|
deprecation_version="0.3.5",
|
|
170
170
|
removal_version="0.4.0",
|
|
171
171
|
)
|
|
172
|
-
|
|
172
|
+
if len(State.class_subclasses) > 0:
|
|
173
|
+
self.state = State
|
|
173
174
|
# Get the config
|
|
174
175
|
config = get_config()
|
|
175
176
|
|
|
@@ -590,7 +591,7 @@ class App(Base):
|
|
|
590
591
|
continue
|
|
591
592
|
_frontend_packages.append(package)
|
|
592
593
|
page_imports.update(_frontend_packages)
|
|
593
|
-
prerequisites.install_frontend_packages(page_imports)
|
|
594
|
+
prerequisites.install_frontend_packages(page_imports, get_config())
|
|
594
595
|
|
|
595
596
|
def _app_root(self, app_wrappers: dict[tuple[int, str], Component]) -> Component:
|
|
596
597
|
for component in tuple(app_wrappers.values()):
|
|
@@ -636,7 +637,11 @@ class App(Base):
|
|
|
636
637
|
return
|
|
637
638
|
|
|
638
639
|
def compile_(self):
|
|
639
|
-
"""Compile the app and output it to the pages folder.
|
|
640
|
+
"""Compile the app and output it to the pages folder.
|
|
641
|
+
|
|
642
|
+
Raises:
|
|
643
|
+
RuntimeError: When any page uses state, but no rx.State subclass is defined.
|
|
644
|
+
"""
|
|
640
645
|
# add the pages before the compile check so App know onload methods
|
|
641
646
|
for render, kwargs in DECORATED_PAGES:
|
|
642
647
|
self.add_page(render, **kwargs)
|
|
@@ -701,6 +706,16 @@ class App(Base):
|
|
|
701
706
|
stateful_components_code,
|
|
702
707
|
page_components,
|
|
703
708
|
) = compiler.compile_stateful_components(self.pages.values())
|
|
709
|
+
|
|
710
|
+
# Catch "static" apps (that do not define a rx.State subclass) which are trying to access rx.State.
|
|
711
|
+
if (
|
|
712
|
+
code_uses_state_contexts(stateful_components_code)
|
|
713
|
+
and self.state is None
|
|
714
|
+
):
|
|
715
|
+
raise RuntimeError(
|
|
716
|
+
"To access rx.State in frontend components, at least one "
|
|
717
|
+
"subclass of rx.State must be defined in the app."
|
|
718
|
+
)
|
|
704
719
|
compile_results.append((stateful_components_path, stateful_components_code))
|
|
705
720
|
|
|
706
721
|
result_futures = []
|
|
@@ -45,6 +45,7 @@ from .select import Option, Select
|
|
|
45
45
|
from .slider import Slider, SliderFilledTrack, SliderMark, SliderThumb, SliderTrack
|
|
46
46
|
from .switch import Switch
|
|
47
47
|
from .textarea import TextArea
|
|
48
|
+
from .time_picker import TimePicker
|
|
48
49
|
|
|
49
50
|
helpers = [
|
|
50
51
|
"color_mode_cond",
|
|
@@ -0,0 +1,129 @@
|
|
|
1
|
+
"""Stub file for reflex/components/chakra/forms/time_picker.py"""
|
|
2
|
+
# ------------------- DO NOT EDIT ----------------------
|
|
3
|
+
# This file was generated by `scripts/pyi_generator.py`!
|
|
4
|
+
# ------------------------------------------------------
|
|
5
|
+
|
|
6
|
+
from typing import Any, Dict, Literal, Optional, Union, overload
|
|
7
|
+
from reflex.vars import Var, BaseVar, ComputedVar
|
|
8
|
+
from reflex.event import EventChain, EventHandler, EventSpec
|
|
9
|
+
from reflex.style import Style
|
|
10
|
+
from reflex.components.chakra.forms.input import Input
|
|
11
|
+
from reflex.vars import Var
|
|
12
|
+
|
|
13
|
+
class TimePicker(Input):
|
|
14
|
+
@overload
|
|
15
|
+
@classmethod
|
|
16
|
+
def create( # type: ignore
|
|
17
|
+
cls,
|
|
18
|
+
*children,
|
|
19
|
+
type_: Optional[Union[Var[str], str]] = None,
|
|
20
|
+
value: Optional[Union[Var[str], str]] = None,
|
|
21
|
+
default_value: Optional[Union[Var[str], str]] = None,
|
|
22
|
+
placeholder: Optional[Union[Var[str], str]] = None,
|
|
23
|
+
error_border_color: Optional[Union[Var[str], str]] = None,
|
|
24
|
+
focus_border_color: Optional[Union[Var[str], str]] = None,
|
|
25
|
+
is_disabled: Optional[Union[Var[bool], bool]] = None,
|
|
26
|
+
is_invalid: Optional[Union[Var[bool], bool]] = None,
|
|
27
|
+
is_read_only: Optional[Union[Var[bool], bool]] = None,
|
|
28
|
+
is_required: Optional[Union[Var[bool], bool]] = None,
|
|
29
|
+
variant: Optional[
|
|
30
|
+
Union[
|
|
31
|
+
Var[Literal["outline", "filled", "flushed", "unstyled"]],
|
|
32
|
+
Literal["outline", "filled", "flushed", "unstyled"],
|
|
33
|
+
]
|
|
34
|
+
] = None,
|
|
35
|
+
size: Optional[
|
|
36
|
+
Union[Var[Literal["sm", "md", "lg", "xs"]], Literal["sm", "md", "lg", "xs"]]
|
|
37
|
+
] = None,
|
|
38
|
+
name: Optional[Union[Var[str], str]] = None,
|
|
39
|
+
style: Optional[Style] = None,
|
|
40
|
+
key: Optional[Any] = None,
|
|
41
|
+
id: Optional[Any] = None,
|
|
42
|
+
class_name: Optional[Any] = None,
|
|
43
|
+
autofocus: Optional[bool] = None,
|
|
44
|
+
custom_attrs: Optional[Dict[str, Union[Var, str]]] = None,
|
|
45
|
+
on_blur: Optional[
|
|
46
|
+
Union[EventHandler, EventSpec, list, function, BaseVar]
|
|
47
|
+
] = None,
|
|
48
|
+
on_change: Optional[
|
|
49
|
+
Union[EventHandler, EventSpec, list, function, BaseVar]
|
|
50
|
+
] = None,
|
|
51
|
+
on_click: Optional[
|
|
52
|
+
Union[EventHandler, EventSpec, list, function, BaseVar]
|
|
53
|
+
] = None,
|
|
54
|
+
on_context_menu: Optional[
|
|
55
|
+
Union[EventHandler, EventSpec, list, function, BaseVar]
|
|
56
|
+
] = None,
|
|
57
|
+
on_double_click: Optional[
|
|
58
|
+
Union[EventHandler, EventSpec, list, function, BaseVar]
|
|
59
|
+
] = None,
|
|
60
|
+
on_focus: Optional[
|
|
61
|
+
Union[EventHandler, EventSpec, list, function, BaseVar]
|
|
62
|
+
] = None,
|
|
63
|
+
on_key_down: Optional[
|
|
64
|
+
Union[EventHandler, EventSpec, list, function, BaseVar]
|
|
65
|
+
] = None,
|
|
66
|
+
on_key_up: Optional[
|
|
67
|
+
Union[EventHandler, EventSpec, list, function, BaseVar]
|
|
68
|
+
] = None,
|
|
69
|
+
on_mount: Optional[
|
|
70
|
+
Union[EventHandler, EventSpec, list, function, BaseVar]
|
|
71
|
+
] = None,
|
|
72
|
+
on_mouse_down: Optional[
|
|
73
|
+
Union[EventHandler, EventSpec, list, function, BaseVar]
|
|
74
|
+
] = None,
|
|
75
|
+
on_mouse_enter: Optional[
|
|
76
|
+
Union[EventHandler, EventSpec, list, function, BaseVar]
|
|
77
|
+
] = None,
|
|
78
|
+
on_mouse_leave: Optional[
|
|
79
|
+
Union[EventHandler, EventSpec, list, function, BaseVar]
|
|
80
|
+
] = None,
|
|
81
|
+
on_mouse_move: Optional[
|
|
82
|
+
Union[EventHandler, EventSpec, list, function, BaseVar]
|
|
83
|
+
] = None,
|
|
84
|
+
on_mouse_out: Optional[
|
|
85
|
+
Union[EventHandler, EventSpec, list, function, BaseVar]
|
|
86
|
+
] = None,
|
|
87
|
+
on_mouse_over: Optional[
|
|
88
|
+
Union[EventHandler, EventSpec, list, function, BaseVar]
|
|
89
|
+
] = None,
|
|
90
|
+
on_mouse_up: Optional[
|
|
91
|
+
Union[EventHandler, EventSpec, list, function, BaseVar]
|
|
92
|
+
] = None,
|
|
93
|
+
on_scroll: Optional[
|
|
94
|
+
Union[EventHandler, EventSpec, list, function, BaseVar]
|
|
95
|
+
] = None,
|
|
96
|
+
on_unmount: Optional[
|
|
97
|
+
Union[EventHandler, EventSpec, list, function, BaseVar]
|
|
98
|
+
] = None,
|
|
99
|
+
**props
|
|
100
|
+
) -> "TimePicker":
|
|
101
|
+
"""Create an Input component.
|
|
102
|
+
|
|
103
|
+
Args:
|
|
104
|
+
*children: The children of the component.
|
|
105
|
+
type_: The type of input.
|
|
106
|
+
value: State var to bind the input.
|
|
107
|
+
default_value: The default value of the input.
|
|
108
|
+
placeholder: The placeholder text.
|
|
109
|
+
error_border_color: The border color when the input is invalid.
|
|
110
|
+
focus_border_color: The border color when the input is focused.
|
|
111
|
+
is_disabled: If true, the form control will be disabled. This has 2 side effects - The FormLabel will have `data-disabled` attribute - The form element (e.g, Input) will be disabled
|
|
112
|
+
is_invalid: If true, the form control will be invalid. This has 2 side effects - The FormLabel and FormErrorIcon will have `data-invalid` set to true - The form element (e.g, Input) will have `aria-invalid` set to true
|
|
113
|
+
is_read_only: If true, the form control will be readonly.
|
|
114
|
+
is_required: If true, the form control will be required. This has 2 side effects - The FormLabel will show a required indicator - The form element (e.g, Input) will have `aria-required` set to true
|
|
115
|
+
variant: "outline" | "filled" | "flushed" | "unstyled"
|
|
116
|
+
size: "lg" | "md" | "sm" | "xs"
|
|
117
|
+
name: The name of the form field
|
|
118
|
+
style: The style of the component.
|
|
119
|
+
key: A unique key for the component.
|
|
120
|
+
id: The id for the component.
|
|
121
|
+
class_name: The class name for the component.
|
|
122
|
+
autofocus: Whether the component should take the focus once the page is loaded
|
|
123
|
+
custom_attrs: custom attribute
|
|
124
|
+
**props: The properties of the component.
|
|
125
|
+
|
|
126
|
+
Returns:
|
|
127
|
+
The component.
|
|
128
|
+
"""
|
|
129
|
+
...
|
reflex/components/component.py
CHANGED
|
@@ -623,6 +623,8 @@ class Component(BaseComponent, ABC):
|
|
|
623
623
|
Returns:
|
|
624
624
|
The dictionary of the component style as value and the style notation as key.
|
|
625
625
|
"""
|
|
626
|
+
if isinstance(self.style, Var):
|
|
627
|
+
return {"css": self.style}
|
|
626
628
|
return {"css": Var.create(format_as_emotion(self.style))}
|
|
627
629
|
|
|
628
630
|
def render(self) -> Dict:
|
|
@@ -721,7 +723,7 @@ class Component(BaseComponent, ABC):
|
|
|
721
723
|
vars.append(prop_var)
|
|
722
724
|
|
|
723
725
|
# Style keeps track of its own VarData instance, so embed in a temp Var that is yielded.
|
|
724
|
-
if self.style:
|
|
726
|
+
if isinstance(self.style, dict) and self.style or isinstance(self.style, Var):
|
|
725
727
|
vars.append(
|
|
726
728
|
BaseVar(
|
|
727
729
|
_var_name="style",
|
reflex/components/core/match.py
CHANGED
|
@@ -64,7 +64,8 @@ class Match(MemoizationLeaf):
|
|
|
64
64
|
Raises:
|
|
65
65
|
ValueError: If the condition is not provided.
|
|
66
66
|
"""
|
|
67
|
-
match_cond_var = Var.create(cond)
|
|
67
|
+
match_cond_var = Var.create(cond, _var_is_string=type(cond) is str)
|
|
68
|
+
|
|
68
69
|
if match_cond_var is None:
|
|
69
70
|
raise ValueError("The condition must be set")
|
|
70
71
|
return match_cond_var # type: ignore
|
|
@@ -216,13 +217,14 @@ class Match(MemoizationLeaf):
|
|
|
216
217
|
|
|
217
218
|
return match_cond_var._replace(
|
|
218
219
|
_var_name=format.format_match(
|
|
219
|
-
cond=match_cond_var.
|
|
220
|
+
cond=match_cond_var._var_name_unwrapped,
|
|
220
221
|
match_cases=match_cases, # type: ignore
|
|
221
222
|
default=default, # type: ignore
|
|
222
223
|
),
|
|
223
224
|
_var_type=default._var_type, # type: ignore
|
|
224
225
|
_var_is_local=False,
|
|
225
226
|
_var_full_name_needs_state_prefix=False,
|
|
227
|
+
_var_is_string=False,
|
|
226
228
|
merge_var_data=VarData.merge(*var_data),
|
|
227
229
|
)
|
|
228
230
|
|
|
@@ -247,11 +249,13 @@ class Match(MemoizationLeaf):
|
|
|
247
249
|
for case in self.match_cases:
|
|
248
250
|
if isinstance(case[-1], BaseComponent):
|
|
249
251
|
merged_imports = imports.merge_imports(
|
|
250
|
-
merged_imports,
|
|
252
|
+
merged_imports,
|
|
253
|
+
case[-1].get_imports(),
|
|
251
254
|
)
|
|
252
255
|
# Get the import of the default case component.
|
|
253
256
|
if isinstance(self.default, BaseComponent):
|
|
254
257
|
merged_imports = imports.merge_imports(
|
|
255
|
-
merged_imports,
|
|
258
|
+
merged_imports,
|
|
259
|
+
self.default.get_imports(),
|
|
256
260
|
)
|
|
257
261
|
return merged_imports
|
|
@@ -109,7 +109,11 @@ class DataEditor(NoSSRComponent):
|
|
|
109
109
|
tag = "DataEditor"
|
|
110
110
|
is_default = True
|
|
111
111
|
library: str = "@glideapps/glide-data-grid@^5.3.0"
|
|
112
|
-
lib_dependencies: List[str] = [
|
|
112
|
+
lib_dependencies: List[str] = [
|
|
113
|
+
"lodash@^4.17.21",
|
|
114
|
+
"marked@^4.0.10",
|
|
115
|
+
"react-responsive-carousel@^3.2.7",
|
|
116
|
+
]
|
|
113
117
|
|
|
114
118
|
# Number of rows.
|
|
115
119
|
rows: Var[int]
|
|
@@ -1,6 +1,12 @@
|
|
|
1
1
|
"""Radix primitive components (https://www.radix-ui.com/primitives)."""
|
|
2
2
|
|
|
3
|
-
from .accordion import
|
|
3
|
+
from .accordion import (
|
|
4
|
+
AccordionContent,
|
|
5
|
+
AccordionHeader,
|
|
6
|
+
AccordionRoot,
|
|
7
|
+
AccordionTrigger,
|
|
8
|
+
accordion_item,
|
|
9
|
+
)
|
|
4
10
|
from .form import (
|
|
5
11
|
form_control,
|
|
6
12
|
form_field,
|
|
@@ -12,3 +18,10 @@ from .form import (
|
|
|
12
18
|
)
|
|
13
19
|
from .progress import progress
|
|
14
20
|
from .slider import slider
|
|
21
|
+
|
|
22
|
+
# accordion
|
|
23
|
+
accordion = AccordionRoot.create
|
|
24
|
+
accordion_root = AccordionRoot.create
|
|
25
|
+
accordion_header = AccordionHeader.create
|
|
26
|
+
accordion_trigger = AccordionTrigger.create
|
|
27
|
+
accordion_content = AccordionContent.create
|