reflex 0.6.4a2__py3-none-any.whl → 0.6.5__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/jinja/web/pages/custom_component.js.jinja2 +0 -14
- reflex/.templates/jinja/web/pages/utils.js.jinja2 +4 -8
- reflex/.templates/web/components/shiki/code.js +16 -11
- reflex/.templates/web/utils/state.js +29 -21
- reflex/__init__.py +4 -0
- reflex/__init__.pyi +4 -0
- reflex/app.py +148 -154
- reflex/app_mixins/lifespan.py +5 -1
- reflex/app_mixins/middleware.py +3 -1
- reflex/app_mixins/mixin.py +3 -2
- reflex/base.py +2 -4
- reflex/compiler/compiler.py +111 -37
- reflex/components/base/app_wrap.pyi +17 -17
- reflex/components/base/bare.py +72 -3
- reflex/components/base/body.pyi +17 -17
- reflex/components/base/document.pyi +81 -81
- reflex/components/base/error_boundary.pyi +25 -18
- reflex/components/base/fragment.pyi +17 -17
- reflex/components/base/head.pyi +33 -33
- reflex/components/base/link.pyi +33 -33
- reflex/components/base/meta.pyi +65 -65
- reflex/components/base/script.py +4 -4
- reflex/components/base/script.pyi +23 -20
- reflex/components/component.py +250 -31
- reflex/components/core/banner.py +1 -1
- reflex/components/core/banner.pyi +81 -81
- reflex/components/core/client_side_routing.pyi +33 -33
- reflex/components/core/clipboard.py +2 -2
- reflex/components/core/clipboard.pyi +24 -18
- reflex/components/core/debounce.py +2 -2
- reflex/components/core/debounce.pyi +18 -18
- reflex/components/core/html.pyi +17 -17
- reflex/components/core/upload.py +90 -28
- reflex/components/core/upload.pyi +128 -72
- reflex/components/datadisplay/code.py +55 -40
- reflex/components/datadisplay/code.pyi +46 -44
- reflex/components/datadisplay/dataeditor.py +21 -20
- reflex/components/datadisplay/dataeditor.pyi +103 -35
- reflex/components/datadisplay/shiki_code_block.py +60 -27
- reflex/components/datadisplay/shiki_code_block.pyi +86 -65
- reflex/components/dynamic.py +9 -5
- reflex/components/el/element.pyi +17 -17
- reflex/components/el/elements/base.pyi +17 -17
- reflex/components/el/elements/forms.py +12 -3
- reflex/components/el/elements/forms.pyi +293 -233
- reflex/components/el/elements/inline.pyi +449 -449
- reflex/components/el/elements/media.pyi +401 -401
- reflex/components/el/elements/metadata.pyi +97 -97
- reflex/components/el/elements/other.pyi +113 -113
- reflex/components/el/elements/scripts.pyi +49 -49
- reflex/components/el/elements/sectioning.pyi +241 -241
- reflex/components/el/elements/tables.pyi +161 -161
- reflex/components/el/elements/typography.pyi +241 -241
- reflex/components/gridjs/datatable.pyi +33 -33
- reflex/components/lucide/icon.py +1 -1
- reflex/components/lucide/icon.pyi +33 -33
- reflex/components/markdown/markdown.py +180 -49
- reflex/components/markdown/markdown.pyi +36 -19
- reflex/components/moment/moment.py +17 -21
- reflex/components/moment/moment.pyi +26 -21
- reflex/components/next/base.pyi +17 -17
- reflex/components/next/image.py +3 -3
- reflex/components/next/image.pyi +21 -19
- reflex/components/next/link.pyi +17 -17
- reflex/components/next/video.pyi +17 -17
- reflex/components/plotly/plotly.py +79 -78
- reflex/components/plotly/plotly.pyi +91 -41
- reflex/components/props.py +34 -0
- reflex/components/radix/primitives/accordion.py +15 -8
- reflex/components/radix/primitives/accordion.pyi +121 -118
- reflex/components/radix/primitives/base.pyi +33 -33
- reflex/components/radix/primitives/drawer.py +41 -20
- reflex/components/radix/primitives/drawer.pyi +279 -190
- reflex/components/radix/primitives/form.py +2 -2
- reflex/components/radix/primitives/form.pyi +200 -167
- reflex/components/radix/primitives/progress.pyi +81 -81
- reflex/components/radix/primitives/slider.pyi +89 -83
- reflex/components/radix/themes/base.py +30 -1
- reflex/components/radix/themes/base.pyi +286 -113
- reflex/components/radix/themes/color_mode.py +17 -9
- reflex/components/radix/themes/color_mode.pyi +68 -56
- reflex/components/radix/themes/components/alert_dialog.py +8 -5
- reflex/components/radix/themes/components/alert_dialog.pyi +125 -117
- reflex/components/radix/themes/components/aspect_ratio.pyi +17 -17
- reflex/components/radix/themes/components/avatar.py +1 -5
- reflex/components/radix/themes/components/avatar.pyi +17 -17
- reflex/components/radix/themes/components/badge.py +1 -5
- reflex/components/radix/themes/components/badge.pyi +17 -17
- reflex/components/radix/themes/components/button.pyi +18 -21
- reflex/components/radix/themes/components/callout.py +1 -4
- reflex/components/radix/themes/components/callout.pyi +81 -81
- reflex/components/radix/themes/components/card.py +1 -3
- reflex/components/radix/themes/components/card.pyi +17 -17
- reflex/components/radix/themes/components/checkbox.py +4 -8
- reflex/components/radix/themes/components/checkbox.pyi +61 -52
- reflex/components/radix/themes/components/checkbox_cards.pyi +33 -33
- reflex/components/radix/themes/components/checkbox_group.pyi +33 -33
- reflex/components/radix/themes/components/context_menu.py +121 -28
- reflex/components/radix/themes/components/context_menu.pyi +250 -147
- reflex/components/radix/themes/components/data_list.pyi +65 -65
- reflex/components/radix/themes/components/dialog.py +11 -11
- reflex/components/radix/themes/components/dialog.pyi +135 -120
- reflex/components/radix/themes/components/dropdown_menu.py +14 -25
- reflex/components/radix/themes/components/dropdown_menu.pyi +157 -145
- reflex/components/radix/themes/components/hover_card.py +19 -7
- reflex/components/radix/themes/components/hover_card.pyi +102 -67
- reflex/components/radix/themes/components/icon_button.pyi +18 -21
- reflex/components/radix/themes/components/inset.py +1 -3
- reflex/components/radix/themes/components/inset.pyi +17 -17
- reflex/components/radix/themes/components/popover.py +22 -13
- reflex/components/radix/themes/components/popover.pyi +98 -72
- reflex/components/radix/themes/components/progress.pyi +17 -17
- reflex/components/radix/themes/components/radio.pyi +17 -17
- reflex/components/radix/themes/components/radio_cards.py +2 -2
- reflex/components/radix/themes/components/radio_cards.pyi +37 -34
- reflex/components/radix/themes/components/radio_group.py +3 -7
- reflex/components/radix/themes/components/radio_group.pyi +69 -66
- reflex/components/radix/themes/components/scroll_area.py +1 -3
- reflex/components/radix/themes/components/scroll_area.pyi +17 -17
- reflex/components/radix/themes/components/segmented_control.pyi +37 -34
- reflex/components/radix/themes/components/select.py +7 -11
- reflex/components/radix/themes/components/select.pyi +175 -154
- reflex/components/radix/themes/components/separator.py +1 -4
- reflex/components/radix/themes/components/separator.pyi +17 -17
- reflex/components/radix/themes/components/skeleton.pyi +17 -17
- reflex/components/radix/themes/components/slider.py +12 -21
- reflex/components/radix/themes/components/slider.pyi +47 -25
- reflex/components/radix/themes/components/spinner.py +1 -4
- reflex/components/radix/themes/components/spinner.pyi +17 -17
- reflex/components/radix/themes/components/switch.py +3 -6
- reflex/components/radix/themes/components/switch.pyi +21 -18
- reflex/components/radix/themes/components/table.py +21 -5
- reflex/components/radix/themes/components/table.pyi +392 -116
- reflex/components/radix/themes/components/tabs.py +3 -6
- reflex/components/radix/themes/components/tabs.pyi +89 -83
- reflex/components/radix/themes/components/text_area.py +1 -5
- reflex/components/radix/themes/components/text_area.pyi +43 -20
- reflex/components/radix/themes/components/text_field.py +1 -5
- reflex/components/radix/themes/components/text_field.pyi +101 -55
- reflex/components/radix/themes/components/tooltip.py +5 -7
- reflex/components/radix/themes/components/tooltip.pyi +25 -22
- reflex/components/radix/themes/layout/base.py +2 -27
- reflex/components/radix/themes/layout/base.pyi +82 -82
- reflex/components/radix/themes/layout/box.pyi +17 -17
- reflex/components/radix/themes/layout/center.pyi +17 -17
- reflex/components/radix/themes/layout/container.pyi +17 -17
- reflex/components/radix/themes/layout/flex.py +1 -6
- reflex/components/radix/themes/layout/flex.pyi +17 -17
- reflex/components/radix/themes/layout/grid.py +1 -6
- reflex/components/radix/themes/layout/grid.pyi +17 -17
- reflex/components/radix/themes/layout/list.py +20 -15
- reflex/components/radix/themes/layout/list.pyi +175 -92
- reflex/components/radix/themes/layout/section.pyi +17 -17
- reflex/components/radix/themes/layout/spacer.pyi +17 -17
- reflex/components/radix/themes/layout/stack.py +6 -6
- reflex/components/radix/themes/layout/stack.pyi +91 -62
- reflex/components/radix/themes/typography/blockquote.py +2 -8
- reflex/components/radix/themes/typography/blockquote.pyi +17 -17
- reflex/components/radix/themes/typography/code.py +4 -10
- reflex/components/radix/themes/typography/code.pyi +19 -18
- reflex/components/radix/themes/typography/heading.py +4 -11
- reflex/components/radix/themes/typography/heading.pyi +19 -18
- reflex/components/radix/themes/typography/link.py +4 -10
- reflex/components/radix/themes/typography/link.pyi +19 -18
- reflex/components/radix/themes/typography/text.py +4 -11
- reflex/components/radix/themes/typography/text.pyi +115 -114
- reflex/components/react_player/audio.pyi +58 -33
- reflex/components/react_player/react_player.py +17 -17
- reflex/components/react_player/react_player.pyi +55 -33
- reflex/components/react_player/video.pyi +58 -33
- reflex/components/recharts/cartesian.py +45 -45
- reflex/components/recharts/cartesian.pyi +389 -304
- reflex/components/recharts/charts.py +22 -22
- reflex/components/recharts/charts.pyi +226 -179
- reflex/components/recharts/general.py +26 -27
- reflex/components/recharts/general.pyi +106 -99
- reflex/components/recharts/polar.py +33 -33
- reflex/components/recharts/polar.pyi +70 -64
- reflex/components/recharts/recharts.pyi +33 -33
- reflex/components/sonner/toast.py +9 -36
- reflex/components/sonner/toast.pyi +20 -24
- reflex/components/suneditor/editor.py +8 -8
- reflex/components/suneditor/editor.pyi +50 -25
- reflex/components/tags/iter_tag.py +1 -10
- reflex/components/tags/tag.py +1 -4
- reflex/config.py +252 -41
- reflex/constants/__init__.py +4 -16
- reflex/constants/base.py +7 -14
- reflex/constants/colors.py +0 -1
- reflex/constants/installer.py +12 -7
- reflex/constants/state.py +4 -0
- reflex/custom_components/custom_components.py +6 -6
- reflex/event.py +486 -241
- reflex/experimental/client_state.py +9 -9
- reflex/experimental/layout.py +2 -2
- reflex/experimental/layout.pyi +95 -87
- reflex/experimental/misc.py +1 -1
- reflex/istate/__init__.py +1 -0
- reflex/istate/proxy.py +33 -0
- reflex/istate/wrappers.py +27 -0
- reflex/model.py +7 -7
- reflex/page.py +2 -1
- reflex/reflex.py +142 -8
- reflex/state.py +133 -46
- reflex/testing.py +9 -7
- reflex/utils/console.py +0 -1
- reflex/utils/exceptions.py +31 -3
- reflex/utils/exec.py +33 -14
- reflex/utils/format.py +15 -12
- reflex/utils/net.py +1 -1
- reflex/utils/path_ops.py +2 -2
- reflex/utils/prerequisites.py +82 -46
- reflex/utils/pyi_generator.py +63 -20
- reflex/utils/registry.py +1 -1
- reflex/utils/serializers.py +75 -36
- reflex/utils/telemetry.py +3 -2
- reflex/utils/types.py +125 -10
- reflex/vars/base.py +131 -119
- reflex/vars/function.py +59 -12
- reflex/vars/number.py +3 -1
- reflex/vars/object.py +30 -24
- reflex/vars/sequence.py +7 -7
- {reflex-0.6.4a2.dist-info → reflex-0.6.5.dist-info}/METADATA +3 -3
- reflex-0.6.5.dist-info/RECORD +394 -0
- reflex-0.6.4a2.dist-info/RECORD +0 -391
- {reflex-0.6.4a2.dist-info → reflex-0.6.5.dist-info}/LICENSE +0 -0
- {reflex-0.6.4a2.dist-info → reflex-0.6.5.dist-info}/WHEEL +0 -0
- {reflex-0.6.4a2.dist-info → reflex-0.6.5.dist-info}/entry_points.txt +0 -0
|
@@ -8,20 +8,6 @@
|
|
|
8
8
|
{% endfor %}
|
|
9
9
|
|
|
10
10
|
export const {{component.name}} = memo(({ {{-component.props|join(", ")-}} }) => {
|
|
11
|
-
{% if component.name == "CodeBlock" and "language" in component.props %}
|
|
12
|
-
if (language) {
|
|
13
|
-
(async () => {
|
|
14
|
-
try {
|
|
15
|
-
const module = await import(`react-syntax-highlighter/dist/cjs/languages/prism/${language}`);
|
|
16
|
-
SyntaxHighlighter.registerLanguage(language, module.default);
|
|
17
|
-
} catch (error) {
|
|
18
|
-
console.error(`Error importing language module for ${language}:`, error);
|
|
19
|
-
}
|
|
20
|
-
})();
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
}
|
|
24
|
-
{% endif %}
|
|
25
11
|
{% for hook in component.hooks %}
|
|
26
12
|
{{ hook }}
|
|
27
13
|
{% endfor %}
|
|
@@ -36,14 +36,10 @@
|
|
|
36
36
|
{# component: component dictionary #}
|
|
37
37
|
{% macro render_tag(component) %}
|
|
38
38
|
<{{component.name}} {{- render_props(component.props) }}>
|
|
39
|
-
{
|
|
40
|
-
|
|
41
|
-
{
|
|
42
|
-
|
|
43
|
-
{% for child in component.children %}
|
|
44
|
-
{{ render(child) }}
|
|
45
|
-
{% endfor %}
|
|
46
|
-
{%- endif -%}
|
|
39
|
+
{{ component.contents }}
|
|
40
|
+
{% for child in component.children %}
|
|
41
|
+
{{ render(child) }}
|
|
42
|
+
{% endfor %}
|
|
47
43
|
</{{component.name}}>
|
|
48
44
|
{%- endmacro %}
|
|
49
45
|
|
|
@@ -1,26 +1,31 @@
|
|
|
1
1
|
import { useEffect, useState } from "react"
|
|
2
2
|
import { codeToHtml} from "shiki"
|
|
3
3
|
|
|
4
|
-
|
|
4
|
+
/**
|
|
5
|
+
* Code component that uses Shiki to convert code to HTML and render it.
|
|
6
|
+
*
|
|
7
|
+
* @param code - The code to be highlighted.
|
|
8
|
+
* @param theme - The theme to be used for highlighting.
|
|
9
|
+
* @param language - The language of the code.
|
|
10
|
+
* @param transformers - The transformers to be applied to the code.
|
|
11
|
+
* @param decorations - The decorations to be applied to the code.
|
|
12
|
+
* @param divProps - Additional properties to be passed to the div element.
|
|
13
|
+
* @returns The rendered code block.
|
|
14
|
+
*/
|
|
15
|
+
export function Code ({code, theme, language, transformers, decorations, ...divProps}) {
|
|
5
16
|
const [codeResult, setCodeResult] = useState("")
|
|
6
17
|
useEffect(() => {
|
|
7
18
|
async function fetchCode() {
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
if (Array.isArray(code)) {
|
|
11
|
-
final_code = code[0];
|
|
12
|
-
} else {
|
|
13
|
-
final_code = code;
|
|
14
|
-
}
|
|
15
|
-
const result = await codeToHtml(final_code, {
|
|
19
|
+
const result = await codeToHtml(code, {
|
|
16
20
|
lang: language,
|
|
17
21
|
theme,
|
|
18
|
-
transformers
|
|
22
|
+
transformers,
|
|
23
|
+
decorations
|
|
19
24
|
});
|
|
20
25
|
setCodeResult(result);
|
|
21
26
|
}
|
|
22
27
|
fetchCode();
|
|
23
|
-
}, [code, language, theme, transformers]
|
|
28
|
+
}, [code, language, theme, transformers, decorations]
|
|
24
29
|
|
|
25
30
|
)
|
|
26
31
|
return (
|
|
@@ -15,7 +15,6 @@ import {
|
|
|
15
15
|
} from "$/utils/context.js";
|
|
16
16
|
import debounce from "$/utils/helpers/debounce";
|
|
17
17
|
import throttle from "$/utils/helpers/throttle";
|
|
18
|
-
import * as Babel from "@babel/standalone";
|
|
19
18
|
|
|
20
19
|
// Endpoint URLs.
|
|
21
20
|
const EVENTURL = env.EVENT;
|
|
@@ -139,8 +138,7 @@ export const evalReactComponent = async (component) => {
|
|
|
139
138
|
if (!window.React && window.__reflex) {
|
|
140
139
|
window.React = window.__reflex.react;
|
|
141
140
|
}
|
|
142
|
-
const
|
|
143
|
-
const encodedJs = encodeURIComponent(output);
|
|
141
|
+
const encodedJs = encodeURIComponent(component);
|
|
144
142
|
const dataUri = "data:text/javascript;charset=utf-8," + encodedJs;
|
|
145
143
|
const module = await eval(`import(dataUri)`);
|
|
146
144
|
return module.default;
|
|
@@ -180,11 +178,6 @@ export const applyEvent = async (event, socket) => {
|
|
|
180
178
|
return false;
|
|
181
179
|
}
|
|
182
180
|
|
|
183
|
-
if (event.name == "_console") {
|
|
184
|
-
console.log(event.payload.message);
|
|
185
|
-
return false;
|
|
186
|
-
}
|
|
187
|
-
|
|
188
181
|
if (event.name == "_remove_cookie") {
|
|
189
182
|
cookies.remove(event.payload.key, { ...event.payload.options });
|
|
190
183
|
queueEventIfSocketExists(initialEvents(), socket);
|
|
@@ -215,12 +208,6 @@ export const applyEvent = async (event, socket) => {
|
|
|
215
208
|
return false;
|
|
216
209
|
}
|
|
217
210
|
|
|
218
|
-
if (event.name == "_set_clipboard") {
|
|
219
|
-
const content = event.payload.content;
|
|
220
|
-
navigator.clipboard.writeText(content);
|
|
221
|
-
return false;
|
|
222
|
-
}
|
|
223
|
-
|
|
224
211
|
if (event.name == "_download") {
|
|
225
212
|
const a = document.createElement("a");
|
|
226
213
|
a.hidden = true;
|
|
@@ -235,11 +222,6 @@ export const applyEvent = async (event, socket) => {
|
|
|
235
222
|
return false;
|
|
236
223
|
}
|
|
237
224
|
|
|
238
|
-
if (event.name == "_alert") {
|
|
239
|
-
alert(event.payload.message);
|
|
240
|
-
return false;
|
|
241
|
-
}
|
|
242
|
-
|
|
243
225
|
if (event.name == "_set_focus") {
|
|
244
226
|
const ref =
|
|
245
227
|
event.payload.ref in refs ? refs[event.payload.ref] : event.payload.ref;
|
|
@@ -256,9 +238,35 @@ export const applyEvent = async (event, socket) => {
|
|
|
256
238
|
return false;
|
|
257
239
|
}
|
|
258
240
|
|
|
259
|
-
if (
|
|
241
|
+
if (
|
|
242
|
+
event.name == "_call_function" &&
|
|
243
|
+
typeof event.payload.function !== "string"
|
|
244
|
+
) {
|
|
245
|
+
try {
|
|
246
|
+
const eval_result = event.payload.function();
|
|
247
|
+
if (event.payload.callback) {
|
|
248
|
+
if (!!eval_result && typeof eval_result.then === "function") {
|
|
249
|
+
event.payload.callback(await eval_result);
|
|
250
|
+
} else {
|
|
251
|
+
event.payload.callback(eval_result);
|
|
252
|
+
}
|
|
253
|
+
}
|
|
254
|
+
} catch (e) {
|
|
255
|
+
console.log("_call_function", e);
|
|
256
|
+
if (window && window?.onerror) {
|
|
257
|
+
window.onerror(e.message, null, null, null, e);
|
|
258
|
+
}
|
|
259
|
+
}
|
|
260
|
+
return false;
|
|
261
|
+
}
|
|
262
|
+
|
|
263
|
+
if (event.name == "_call_script" || event.name == "_call_function") {
|
|
260
264
|
try {
|
|
261
|
-
const eval_result =
|
|
265
|
+
const eval_result =
|
|
266
|
+
event.name == "_call_script"
|
|
267
|
+
? eval(event.payload.javascript_code)
|
|
268
|
+
: eval(event.payload.function)();
|
|
269
|
+
|
|
262
270
|
if (event.payload.callback) {
|
|
263
271
|
if (!!eval_result && typeof eval_result.then === "function") {
|
|
264
272
|
eval(event.payload.callback)(await eval_result);
|
reflex/__init__.py
CHANGED
|
@@ -303,10 +303,13 @@ _MAPPING: dict = {
|
|
|
303
303
|
"EventHandler",
|
|
304
304
|
"background",
|
|
305
305
|
"call_script",
|
|
306
|
+
"call_function",
|
|
307
|
+
"run_script",
|
|
306
308
|
"clear_local_storage",
|
|
307
309
|
"clear_session_storage",
|
|
308
310
|
"console_log",
|
|
309
311
|
"download",
|
|
312
|
+
"noop",
|
|
310
313
|
"prevent_default",
|
|
311
314
|
"redirect",
|
|
312
315
|
"remove_cookie",
|
|
@@ -333,6 +336,7 @@ _MAPPING: dict = {
|
|
|
333
336
|
"State",
|
|
334
337
|
"dynamic",
|
|
335
338
|
],
|
|
339
|
+
"istate.wrappers": ["get_state"],
|
|
336
340
|
"style": ["Style", "toggle_color_mode"],
|
|
337
341
|
"utils.imports": ["ImportVar"],
|
|
338
342
|
"utils.serializers": ["serializer"],
|
reflex/__init__.pyi
CHANGED
|
@@ -155,17 +155,20 @@ from .constants import Env as Env
|
|
|
155
155
|
from .event import EventChain as EventChain
|
|
156
156
|
from .event import EventHandler as EventHandler
|
|
157
157
|
from .event import background as background
|
|
158
|
+
from .event import call_function as call_function
|
|
158
159
|
from .event import call_script as call_script
|
|
159
160
|
from .event import clear_local_storage as clear_local_storage
|
|
160
161
|
from .event import clear_session_storage as clear_session_storage
|
|
161
162
|
from .event import console_log as console_log
|
|
162
163
|
from .event import download as download
|
|
163
164
|
from .event import event as event
|
|
165
|
+
from .event import noop as noop
|
|
164
166
|
from .event import prevent_default as prevent_default
|
|
165
167
|
from .event import redirect as redirect
|
|
166
168
|
from .event import remove_cookie as remove_cookie
|
|
167
169
|
from .event import remove_local_storage as remove_local_storage
|
|
168
170
|
from .event import remove_session_storage as remove_session_storage
|
|
171
|
+
from .event import run_script as run_script
|
|
169
172
|
from .event import scroll_to as scroll_to
|
|
170
173
|
from .event import set_clipboard as set_clipboard
|
|
171
174
|
from .event import set_focus as set_focus
|
|
@@ -177,6 +180,7 @@ from .experimental import _x as _x
|
|
|
177
180
|
from .istate.storage import Cookie as Cookie
|
|
178
181
|
from .istate.storage import LocalStorage as LocalStorage
|
|
179
182
|
from .istate.storage import SessionStorage as SessionStorage
|
|
183
|
+
from .istate.wrappers import get_state as get_state
|
|
180
184
|
from .middleware import Middleware as Middleware
|
|
181
185
|
from .middleware import middleware as middleware
|
|
182
186
|
from .model import Model as Model
|