dars-framework 1.9.3__tar.gz → 1.9.5__tar.gz
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.
- {dars_framework-1.9.3/dars_framework.egg-info → dars_framework-1.9.5}/PKG-INFO +37 -32
- {dars_framework-1.9.3 → dars_framework-1.9.5}/README.md +36 -31
- {dars_framework-1.9.3 → dars_framework-1.9.5}/dars/all.py +5 -2
- {dars_framework-1.9.3 → dars_framework-1.9.5}/dars/components/basic/markdown.py +2 -0
- {dars_framework-1.9.3 → dars_framework-1.9.5}/dars/scripts/animations.py +16 -4
- {dars_framework-1.9.3 → dars_framework-1.9.5}/dars/scripts/dscript.py +0 -8
- {dars_framework-1.9.3 → dars_framework-1.9.5}/dars/scripts/script.py +3 -0
- {dars_framework-1.9.3 → dars_framework-1.9.5}/dars/scripts/utils_ds.py +434 -1
- {dars_framework-1.9.3 → dars_framework-1.9.5}/dars/version.py +2 -2
- {dars_framework-1.9.3 → dars_framework-1.9.5/dars_framework.egg-info}/PKG-INFO +37 -32
- {dars_framework-1.9.3 → dars_framework-1.9.5}/pyproject.toml +1 -1
- {dars_framework-1.9.3 → dars_framework-1.9.5}/Dars-logo.png +0 -0
- {dars_framework-1.9.3 → dars_framework-1.9.5}/LICENSE +0 -0
- {dars_framework-1.9.3 → dars_framework-1.9.5}/MANIFEST.in +0 -0
- {dars_framework-1.9.3 → dars_framework-1.9.5}/dars/__init__.py +0 -0
- {dars_framework-1.9.3 → dars_framework-1.9.5}/dars/actionProtocol.py +0 -0
- {dars_framework-1.9.3 → dars_framework-1.9.5}/dars/backend/__init__.py +0 -0
- {dars_framework-1.9.3 → dars_framework-1.9.5}/dars/backend/components.py +0 -0
- {dars_framework-1.9.3 → dars_framework-1.9.5}/dars/backend/data.py +0 -0
- {dars_framework-1.9.3 → dars_framework-1.9.5}/dars/backend/http.py +0 -0
- {dars_framework-1.9.3 → dars_framework-1.9.5}/dars/backend/json_utils.py +0 -0
- {dars_framework-1.9.3 → dars_framework-1.9.5}/dars/backend/route_loader.py +0 -0
- {dars_framework-1.9.3 → dars_framework-1.9.5}/dars/backend/ssr.py +0 -0
- {dars_framework-1.9.3 → dars_framework-1.9.5}/dars/cli/__init__.py +0 -0
- {dars_framework-1.9.3 → dars_framework-1.9.5}/dars/cli/doctor/__init__.py +0 -0
- {dars_framework-1.9.3 → dars_framework-1.9.5}/dars/cli/doctor/detect.py +0 -0
- {dars_framework-1.9.3 → dars_framework-1.9.5}/dars/cli/doctor/doctor.py +0 -0
- {dars_framework-1.9.3 → dars_framework-1.9.5}/dars/cli/doctor/installers.py +0 -0
- {dars_framework-1.9.3 → dars_framework-1.9.5}/dars/cli/doctor/persist.py +0 -0
- {dars_framework-1.9.3 → dars_framework-1.9.5}/dars/cli/doctor/preflight.py +0 -0
- {dars_framework-1.9.3 → dars_framework-1.9.5}/dars/cli/doctor/ui.py +0 -0
- {dars_framework-1.9.3 → dars_framework-1.9.5}/dars/cli/dpm.py +0 -0
- {dars_framework-1.9.3 → dars_framework-1.9.5}/dars/cli/hot_reload.py +0 -0
- {dars_framework-1.9.3 → dars_framework-1.9.5}/dars/cli/main.py +0 -0
- {dars_framework-1.9.3 → dars_framework-1.9.5}/dars/cli/preview.py +0 -0
- {dars_framework-1.9.3 → dars_framework-1.9.5}/dars/cli/translations.py +0 -0
- {dars_framework-1.9.3 → dars_framework-1.9.5}/dars/components/__init__.py +0 -0
- {dars_framework-1.9.3 → dars_framework-1.9.5}/dars/components/advanced/__init__.py +0 -0
- {dars_framework-1.9.3 → dars_framework-1.9.5}/dars/components/advanced/accordion.py +0 -0
- {dars_framework-1.9.3 → dars_framework-1.9.5}/dars/components/advanced/card.py +0 -0
- {dars_framework-1.9.3 → dars_framework-1.9.5}/dars/components/advanced/file_upload.py +0 -0
- {dars_framework-1.9.3 → dars_framework-1.9.5}/dars/components/advanced/head.py +0 -0
- {dars_framework-1.9.3 → dars_framework-1.9.5}/dars/components/advanced/modal.py +0 -0
- {dars_framework-1.9.3 → dars_framework-1.9.5}/dars/components/advanced/navbar.py +0 -0
- {dars_framework-1.9.3 → dars_framework-1.9.5}/dars/components/advanced/outlet.py +0 -0
- {dars_framework-1.9.3 → dars_framework-1.9.5}/dars/components/advanced/table.py +0 -0
- {dars_framework-1.9.3 → dars_framework-1.9.5}/dars/components/advanced/tabs.py +0 -0
- {dars_framework-1.9.3 → dars_framework-1.9.5}/dars/components/basic/__init__.py +0 -0
- {dars_framework-1.9.3 → dars_framework-1.9.5}/dars/components/basic/audio.py +0 -0
- {dars_framework-1.9.3 → dars_framework-1.9.5}/dars/components/basic/button.py +0 -0
- {dars_framework-1.9.3 → dars_framework-1.9.5}/dars/components/basic/checkbox.py +0 -0
- {dars_framework-1.9.3 → dars_framework-1.9.5}/dars/components/basic/container.py +0 -0
- {dars_framework-1.9.3 → dars_framework-1.9.5}/dars/components/basic/datepicker.py +0 -0
- {dars_framework-1.9.3 → dars_framework-1.9.5}/dars/components/basic/image.py +0 -0
- {dars_framework-1.9.3 → dars_framework-1.9.5}/dars/components/basic/input.py +0 -0
- {dars_framework-1.9.3 → dars_framework-1.9.5}/dars/components/basic/link.py +0 -0
- {dars_framework-1.9.3 → dars_framework-1.9.5}/dars/components/basic/page.py +0 -0
- {dars_framework-1.9.3 → dars_framework-1.9.5}/dars/components/basic/progressbar.py +0 -0
- {dars_framework-1.9.3 → dars_framework-1.9.5}/dars/components/basic/radiobutton.py +0 -0
- {dars_framework-1.9.3 → dars_framework-1.9.5}/dars/components/basic/section.py +0 -0
- {dars_framework-1.9.3 → dars_framework-1.9.5}/dars/components/basic/select.py +0 -0
- {dars_framework-1.9.3 → dars_framework-1.9.5}/dars/components/basic/slider.py +0 -0
- {dars_framework-1.9.3 → dars_framework-1.9.5}/dars/components/basic/spinner.py +0 -0
- {dars_framework-1.9.3 → dars_framework-1.9.5}/dars/components/basic/text.py +0 -0
- {dars_framework-1.9.3 → dars_framework-1.9.5}/dars/components/basic/textarea.py +0 -0
- {dars_framework-1.9.3 → dars_framework-1.9.5}/dars/components/basic/tooltip.py +0 -0
- {dars_framework-1.9.3 → dars_framework-1.9.5}/dars/components/basic/video.py +0 -0
- {dars_framework-1.9.3 → dars_framework-1.9.5}/dars/components/layout/__init__.py +0 -0
- {dars_framework-1.9.3 → dars_framework-1.9.5}/dars/components/layout/anchor.py +0 -0
- {dars_framework-1.9.3 → dars_framework-1.9.5}/dars/components/layout/flex.py +0 -0
- {dars_framework-1.9.3 → dars_framework-1.9.5}/dars/components/layout/grid.py +0 -0
- {dars_framework-1.9.3 → dars_framework-1.9.5}/dars/components/visualization/__init__.py +0 -0
- {dars_framework-1.9.3 → dars_framework-1.9.5}/dars/components/visualization/chart.py +0 -0
- {dars_framework-1.9.3 → dars_framework-1.9.5}/dars/components/visualization/table.py +0 -0
- {dars_framework-1.9.3 → dars_framework-1.9.5}/dars/config.py +0 -0
- {dars_framework-1.9.3 → dars_framework-1.9.5}/dars/core/__init__.py +0 -0
- {dars_framework-1.9.3 → dars_framework-1.9.5}/dars/core/app.py +0 -0
- {dars_framework-1.9.3 → dars_framework-1.9.5}/dars/core/component.py +0 -0
- {dars_framework-1.9.3 → dars_framework-1.9.5}/dars/core/events.py +0 -0
- {dars_framework-1.9.3 → dars_framework-1.9.5}/dars/core/js_bridge.py +0 -0
- {dars_framework-1.9.3 → dars_framework-1.9.5}/dars/core/properties.py +0 -0
- {dars_framework-1.9.3 → dars_framework-1.9.5}/dars/core/route_types.py +0 -0
- {dars_framework-1.9.3 → dars_framework-1.9.5}/dars/core/routing.py +0 -0
- {dars_framework-1.9.3 → dars_framework-1.9.5}/dars/core/state.py +0 -0
- {dars_framework-1.9.3 → dars_framework-1.9.5}/dars/core/state_v2.py +0 -0
- {dars_framework-1.9.3 → dars_framework-1.9.5}/dars/core/utilities.py +0 -0
- {dars_framework-1.9.3 → dars_framework-1.9.5}/dars/dars_tests/apps_test/health_check.py +0 -0
- {dars_framework-1.9.3 → dars_framework-1.9.5}/dars/dars_tests/run_tests.py +0 -0
- {dars_framework-1.9.3 → dars_framework-1.9.5}/dars/dars_tests/tests/test_advanced_components.py +0 -0
- {dars_framework-1.9.3 → dars_framework-1.9.5}/dars/dars_tests/tests/test_basic_components.py +0 -0
- {dars_framework-1.9.3 → dars_framework-1.9.5}/dars/dars_tests/tests/test_core_and_cli.py +0 -0
- {dars_framework-1.9.3 → dars_framework-1.9.5}/dars/dars_tests/tests/test_layout_components.py +0 -0
- {dars_framework-1.9.3 → dars_framework-1.9.5}/dars/dars_tests/tests/test_version_check.py +0 -0
- {dars_framework-1.9.3 → dars_framework-1.9.5}/dars/desktop/__init__.py +0 -0
- {dars_framework-1.9.3 → dars_framework-1.9.5}/dars/desktop/api.py +0 -0
- {dars_framework-1.9.3 → dars_framework-1.9.5}/dars/desktop/js_generator.py +0 -0
- {dars_framework-1.9.3 → dars_framework-1.9.5}/dars/docs/INSTALL.md +0 -0
- {dars_framework-1.9.3 → dars_framework-1.9.5}/dars/docs/KeyEvents.md +0 -0
- {dars_framework-1.9.3 → dars_framework-1.9.5}/dars/docs/__init__.py +0 -0
- {dars_framework-1.9.3 → dars_framework-1.9.5}/dars/docs/animations.md +0 -0
- {dars_framework-1.9.3 → dars_framework-1.9.5}/dars/docs/app.md +0 -0
- {dars_framework-1.9.3 → dars_framework-1.9.5}/dars/docs/backend_api.md +0 -0
- {dars_framework-1.9.3 → dars_framework-1.9.5}/dars/docs/cli.md +0 -0
- {dars_framework-1.9.3 → dars_framework-1.9.5}/dars/docs/components.md +0 -0
- {dars_framework-1.9.3 → dars_framework-1.9.5}/dars/docs/config.md +0 -0
- {dars_framework-1.9.3 → dars_framework-1.9.5}/dars/docs/custom_components.md +0 -0
- {dars_framework-1.9.3 → dars_framework-1.9.5}/dars/docs/env.md +0 -0
- {dars_framework-1.9.3 → dars_framework-1.9.5}/dars/docs/events.md +0 -0
- {dars_framework-1.9.3 → dars_framework-1.9.5}/dars/docs/exporters.md +0 -0
- {dars_framework-1.9.3 → dars_framework-1.9.5}/dars/docs/getting_started.md +0 -0
- {dars_framework-1.9.3 → dars_framework-1.9.5}/dars/docs/hooks.md +0 -0
- {dars_framework-1.9.3 → dars_framework-1.9.5}/dars/docs/index.md +0 -0
- {dars_framework-1.9.3 → dars_framework-1.9.5}/dars/docs/operations.md +0 -0
- {dars_framework-1.9.3 → dars_framework-1.9.5}/dars/docs/routing.md +0 -0
- {dars_framework-1.9.3 → dars_framework-1.9.5}/dars/docs/scripts.md +0 -0
- {dars_framework-1.9.3 → dars_framework-1.9.5}/dars/docs/ssr.md +0 -0
- {dars_framework-1.9.3 → dars_framework-1.9.5}/dars/docs/state_management.md +0 -0
- {dars_framework-1.9.3 → dars_framework-1.9.5}/dars/docs/styling.md +0 -0
- {dars_framework-1.9.3 → dars_framework-1.9.5}/dars/env.py +0 -0
- {dars_framework-1.9.3 → dars_framework-1.9.5}/dars/exporters/__init__.py +0 -0
- {dars_framework-1.9.3 → dars_framework-1.9.5}/dars/exporters/base.py +0 -0
- {dars_framework-1.9.3 → dars_framework-1.9.5}/dars/exporters/desktop/electron.py +0 -0
- {dars_framework-1.9.3 → dars_framework-1.9.5}/dars/exporters/web/__init__.py +0 -0
- {dars_framework-1.9.3 → dars_framework-1.9.5}/dars/exporters/web/html_css_js.py +0 -0
- {dars_framework-1.9.3 → dars_framework-1.9.5}/dars/exporters/web/vdom.py +0 -0
- {dars_framework-1.9.3 → dars_framework-1.9.5}/dars/hooks/__init__.py +0 -0
- {dars_framework-1.9.3 → dars_framework-1.9.5}/dars/hooks/form_helpers.py +0 -0
- {dars_framework-1.9.3 → dars_framework-1.9.5}/dars/hooks/set_vref.py +0 -0
- {dars_framework-1.9.3 → dars_framework-1.9.5}/dars/hooks/update_vref.py +0 -0
- {dars_framework-1.9.3 → dars_framework-1.9.5}/dars/hooks/use_dynamic.py +0 -0
- {dars_framework-1.9.3 → dars_framework-1.9.5}/dars/hooks/use_value.py +0 -0
- {dars_framework-1.9.3 → dars_framework-1.9.5}/dars/hooks/use_vref.py +0 -0
- {dars_framework-1.9.3 → dars_framework-1.9.5}/dars/hooks/use_watch.py +0 -0
- {dars_framework-1.9.3 → dars_framework-1.9.5}/dars/hooks/value_helpers.py +0 -0
- {dars_framework-1.9.3 → dars_framework-1.9.5}/dars/scripts/__init__.py +0 -0
- {dars_framework-1.9.3 → dars_framework-1.9.5}/dars/scripts/keycode.py +0 -0
- {dars_framework-1.9.3 → dars_framework-1.9.5}/dars/security.py +0 -0
- {dars_framework-1.9.3 → dars_framework-1.9.5}/dars/templates/__init__.py +0 -0
- {dars_framework-1.9.3 → dars_framework-1.9.5}/dars/templates/desktop/icon.png +0 -0
- {dars_framework-1.9.3 → dars_framework-1.9.5}/dars/templates/desktop/template/backend/icons/icon.png +0 -0
- {dars_framework-1.9.3 → dars_framework-1.9.5}/dars/templates/desktop/template/backend/main.js +0 -0
- {dars_framework-1.9.3 → dars_framework-1.9.5}/dars/templates/desktop/template/backend/package.json +0 -0
- {dars_framework-1.9.3 → dars_framework-1.9.5}/dars/templates/desktop/template/backend/preload.js +0 -0
- {dars_framework-1.9.3 → dars_framework-1.9.5}/dars/templates/desktop/template/dars.config.json +0 -0
- {dars_framework-1.9.3 → dars_framework-1.9.5}/dars/templates/desktop/template/icons/icon.png +0 -0
- {dars_framework-1.9.3 → dars_framework-1.9.5}/dars/templates/desktop/template/main.py +0 -0
- {dars_framework-1.9.3 → dars_framework-1.9.5}/dars/templates/desktop/template/public/electron-icon.png +0 -0
- {dars_framework-1.9.3 → dars_framework-1.9.5}/dars/templates/desktop/template/public/icon.png +0 -0
- {dars_framework-1.9.3 → dars_framework-1.9.5}/dars/templates/examples/README.md +0 -0
- {dars_framework-1.9.3 → dars_framework-1.9.5}/dars/templates/examples/advanced/CustomComp/main.py +0 -0
- {dars_framework-1.9.3 → dars_framework-1.9.5}/dars/templates/examples/advanced/Modal_Demo/advanced_modal_demo.py +0 -0
- {dars_framework-1.9.3 → dars_framework-1.9.5}/dars/templates/examples/advanced/StateV2/README.md +0 -0
- {dars_framework-1.9.3 → dars_framework-1.9.5}/dars/templates/examples/advanced/StateV2/animation_component.py +0 -0
- {dars_framework-1.9.3 → dars_framework-1.9.5}/dars/templates/examples/advanced/StateV2/counter_component.py +0 -0
- {dars_framework-1.9.3 → dars_framework-1.9.5}/dars/templates/examples/advanced/StateV2/hero_component.py +0 -0
- {dars_framework-1.9.3 → dars_framework-1.9.5}/dars/templates/examples/advanced/StateV2/main.py +0 -0
- {dars_framework-1.9.3 → dars_framework-1.9.5}/dars/templates/examples/advanced/StateV2/styles.css +0 -0
- {dars_framework-1.9.3 → dars_framework-1.9.5}/dars/templates/examples/advanced/StateV2/timer_component.py +0 -0
- {dars_framework-1.9.3 → dars_framework-1.9.5}/dars/templates/examples/advanced/VariousComponents/all_components_demo.py +0 -0
- {dars_framework-1.9.3 → dars_framework-1.9.5}/dars/templates/examples/advanced/__init__.py +0 -0
- {dars_framework-1.9.3 → dars_framework-1.9.5}/dars/templates/examples/advanced/dState/state_mods_demo.py +0 -0
- {dars_framework-1.9.3 → dars_framework-1.9.5}/dars/templates/examples/advanced/hooks/useDynamic.py +0 -0
- {dars_framework-1.9.3 → dars_framework-1.9.5}/dars/templates/examples/advanced/hooks/useValue.py +0 -0
- {dars_framework-1.9.3 → dars_framework-1.9.5}/dars/templates/examples/advanced/hooks/useWatch.py +0 -0
- {dars_framework-1.9.3 → dars_framework-1.9.5}/dars/templates/examples/basic/HelloWorld/hello_world.py +0 -0
- {dars_framework-1.9.3 → dars_framework-1.9.5}/dars/templates/examples/basic/Layouts/flex_layout_responsive.py +0 -0
- {dars_framework-1.9.3 → dars_framework-1.9.5}/dars/templates/examples/basic/Layouts/grid_layout_responsive.py +0 -0
- {dars_framework-1.9.3 → dars_framework-1.9.5}/dars/templates/examples/basic/Layouts/layout_multipage_demo.py +0 -0
- {dars_framework-1.9.3 → dars_framework-1.9.5}/dars/templates/examples/basic/PWA/icon-192x192.png +0 -0
- {dars_framework-1.9.3 → dars_framework-1.9.5}/dars/templates/examples/basic/PWA/icon-512x512.png +0 -0
- {dars_framework-1.9.3 → dars_framework-1.9.5}/dars/templates/examples/basic/PWA/pwa_custom_icons.py +0 -0
- {dars_framework-1.9.3 → dars_framework-1.9.5}/dars/templates/examples/basic/__init__.py +0 -0
- {dars_framework-1.9.3 → dars_framework-1.9.5}/dars/templates/examples/markdown/MarkdownTemplate/README.md +0 -0
- {dars_framework-1.9.3 → dars_framework-1.9.5}/dars/templates/examples/markdown/MarkdownTemplate/markdown_template.py +0 -0
- {dars_framework-1.9.3 → dars_framework-1.9.5}/dars/templates/examples/markdown/MarkdownTemplate/other_docs.md +0 -0
- {dars_framework-1.9.3 → dars_framework-1.9.5}/dars/templates/examples/markdown/__init__.py +0 -0
- {dars_framework-1.9.3 → dars_framework-1.9.5}/dars_framework.egg-info/SOURCES.txt +0 -0
- {dars_framework-1.9.3 → dars_framework-1.9.5}/dars_framework.egg-info/dependency_links.txt +0 -0
- {dars_framework-1.9.3 → dars_framework-1.9.5}/dars_framework.egg-info/entry_points.txt +0 -0
- {dars_framework-1.9.3 → dars_framework-1.9.5}/dars_framework.egg-info/requires.txt +0 -0
- {dars_framework-1.9.3 → dars_framework-1.9.5}/dars_framework.egg-info/top_level.txt +0 -0
- {dars_framework-1.9.3 → dars_framework-1.9.5}/setup.cfg +0 -0
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: dars-framework
|
|
3
|
-
Version: 1.9.
|
|
3
|
+
Version: 1.9.5
|
|
4
4
|
Summary: Dars is a Full-Stack multiplatform Python UI framework for building modern, interactive web and desktop apps with Python code. Seamlessly integrated with FastAPI, it allows you to build complete applications with Server-Side Rendering (SSR) and reactive SPA capabilities also classic multipage html and desktop apps in a single codebase.
|
|
5
5
|
Author-email: ztamdev <ztadevs@gmail.com>
|
|
6
6
|
Maintainer-email: ztamdev <ztadevs@gmail.com>
|
|
@@ -52,7 +52,6 @@ Dynamic: license-file
|
|
|
52
52
|
<a href="https://deepwiki.com/ZtaMDev/Dars-Framework"><img src="https://deepwiki.com/badge.svg" alt="Ask DeepWiki"></a>
|
|
53
53
|
</p>
|
|
54
54
|
|
|
55
|
-
|
|
56
55
|
<p align="center">
|
|
57
56
|
<em>Dars is a Full-Stack multiplatform Python UI framework for building modern, interactive web and desktop apps with Python code. Seamlessly integrated with FastAPI, it allows you to build complete applications with Server-Side Rendering (SSR) and reactive SPA capabilities also classic multipage html and desktop apps in a single codebase.</em>
|
|
58
57
|
|
|
@@ -60,8 +59,9 @@ Dynamic: license-file
|
|
|
60
59
|
|
|
61
60
|
<div align="center">
|
|
62
61
|
|
|
63
|
-
Official [Website](https://ztamdev.github.io/Dars-Framework/) |
|
|
64
|
-
Documentation [Docs](https://ztamdev.github.io/Dars-Framework/docs.html) |
|
|
62
|
+
Official [Website](https://ztamdev.github.io/Dars-Framework/) |
|
|
63
|
+
Documentation [Docs](https://ztamdev.github.io/Dars-Framework/docs.html) |
|
|
64
|
+
Official [Roadmap](https://ztamdev.github.io/Dars-Framework/roadmap.html) |
|
|
65
65
|
Extension for VSCode [here](https://marketplace.visualstudio.com/items?itemName=ZtaMDev.dars-framework) and OpenVSX version [here](https://open-vsx.org/extension/ztamdev/dars-framework)
|
|
66
66
|
|
|
67
67
|
</div>
|
|
@@ -73,6 +73,7 @@ pip install dars-framework
|
|
|
73
73
|
Try dars without installing nothing just visit the [Dars Playground](https://dars-playground.vercel.app/)
|
|
74
74
|
|
|
75
75
|
## How It Works
|
|
76
|
+
|
|
76
77
|
- Build your UI using Python classes and components (like Text, Button, Container, Page, etc).
|
|
77
78
|
- Preview instantly with hot-reload using `app.rTimeCompile()`.
|
|
78
79
|
- Export your app to static/dynamic/ssr web files with a single CLI command.
|
|
@@ -81,6 +82,7 @@ Try dars without installing nothing just visit the [Dars Playground](https://dar
|
|
|
81
82
|
- For more information visit the [Documentation](https://ztamdev.github.io/Dars-Framework/docs.html)
|
|
82
83
|
|
|
83
84
|
## Quick Example: Your First App
|
|
85
|
+
|
|
84
86
|
```python
|
|
85
87
|
from dars.all import *
|
|
86
88
|
|
|
@@ -91,7 +93,7 @@ state = State("app", title_val="Simple Counter", count=0)
|
|
|
91
93
|
|
|
92
94
|
# 2. Define Route
|
|
93
95
|
@route("/")
|
|
94
|
-
def index():
|
|
96
|
+
def index():
|
|
95
97
|
return Page(
|
|
96
98
|
# 3. Use useValue for app text
|
|
97
99
|
Text(
|
|
@@ -131,7 +133,7 @@ def index():
|
|
|
131
133
|
),
|
|
132
134
|
style="flex flex-col items-center justify-center h-[100vh] ffam-[Arial] bg-[#f0f2f5]",
|
|
133
135
|
|
|
134
|
-
)
|
|
136
|
+
)
|
|
135
137
|
|
|
136
138
|
# 8. Add page
|
|
137
139
|
app.add_page("index", index(), title="index")
|
|
@@ -148,9 +150,11 @@ if __name__ == "__main__":
|
|
|
148
150
|
Dars Framework features **powerful state management system**, designed for different use cases.
|
|
149
151
|
|
|
150
152
|
### State V2
|
|
153
|
+
|
|
151
154
|
Modern, Pythonic state management for reactive updates. Best for counters, timers, and component interactions using hooks.
|
|
152
155
|
|
|
153
156
|
**Hooks System:**
|
|
157
|
+
|
|
154
158
|
- `useDynamic()`: Reactive state binding for automatic UI updates.
|
|
155
159
|
- `useValue()`: Set initial values from state (non-reactive).
|
|
156
160
|
- `useWatch()`: Monitor state changes and trigger side effects.
|
|
@@ -168,7 +172,7 @@ def index():
|
|
|
168
172
|
return Page(
|
|
169
173
|
# Bind to state with useDynamic
|
|
170
174
|
Text(text=useDynamic("counter.count"), style={"font-size": "24px"}),
|
|
171
|
-
|
|
175
|
+
|
|
172
176
|
# Update state on click
|
|
173
177
|
Button("Increment", on_click=state.count.increment(1)),
|
|
174
178
|
Button("Decrement", on_click=state.count.decrement(1)),
|
|
@@ -181,7 +185,7 @@ if __name__ == "__main__":
|
|
|
181
185
|
app.rTimeCompile()
|
|
182
186
|
```
|
|
183
187
|
|
|
184
|
-
**String ID Support:** `State()` can accept a string ID (e.g., `State("my-state", ...)`).
|
|
188
|
+
**String ID Support:** `State()` can accept a string ID (e.g., `State("my-state", ...)`).
|
|
185
189
|
|
|
186
190
|
> [!WARNING]
|
|
187
191
|
> **Important:** When using hooks, the State ID is used for binding. **Do not use an ID that belongs to another unrelated component**, as hooks use this ID as the State ID. Using a conflicting ID may cause unexpected behavior or state collisions.
|
|
@@ -215,6 +219,7 @@ button.on_click = sequence(
|
|
|
215
219
|
```
|
|
216
220
|
|
|
217
221
|
**Available Animations:**
|
|
222
|
+
|
|
218
223
|
- **Opacity:** `fadeIn`, `fadeOut`
|
|
219
224
|
- **Movement:** `slideIn`, `slideOut` (up, down, left, right)
|
|
220
225
|
- **Scaling:** `scaleIn`, `scaleOut`, `pulse`
|
|
@@ -257,7 +262,6 @@ button.on_click = sequence(
|
|
|
257
262
|
|
|
258
263
|
---
|
|
259
264
|
|
|
260
|
-
|
|
261
265
|
## Routing System (SPA & SSR)
|
|
262
266
|
|
|
263
267
|
Dars Framework offers a flexible routing system that supports both Client-Side Routing (SPA) and Server-Side Rendering (SSR).
|
|
@@ -321,7 +325,7 @@ def dashboard():
|
|
|
321
325
|
Link("Settings", href="/dashboard/settings"),
|
|
322
326
|
Link("Profile", href="/dashboard/profile"),
|
|
323
327
|
id="nav",
|
|
324
|
-
|
|
328
|
+
|
|
325
329
|
),
|
|
326
330
|
Outlet(), # Child routes render here
|
|
327
331
|
style={"padding": "20px"}
|
|
@@ -356,6 +360,7 @@ app.set_404_page(custom_404)
|
|
|
356
360
|
### Hot Reload for SPAs
|
|
357
361
|
|
|
358
362
|
The development preview server includes intelligent hot reload:
|
|
363
|
+
|
|
359
364
|
- Detects changes and reloads automatically
|
|
360
365
|
- Stops polling after 10 errors to prevent browser lag
|
|
361
366
|
- Clean console output without spam
|
|
@@ -458,10 +463,10 @@ callback=(
|
|
|
458
463
|
|
|
459
464
|
### Available HTTP Methods
|
|
460
465
|
|
|
461
|
-
- **`get(id, url, **options)
|
|
462
|
-
- **`post(id, url, body, **options)
|
|
463
|
-
- **`put(id, url, body, **options)
|
|
464
|
-
- **`delete(id, url, **options)
|
|
466
|
+
- **`get(id, url, **options)`\*\* - GET request
|
|
467
|
+
- **`post(id, url, body, **options)`\*\* - POST request
|
|
468
|
+
- **`put(id, url, body, **options)`\*\* - PUT request
|
|
469
|
+
- **`delete(id, url, **options)`\*\* - DELETE request
|
|
465
470
|
|
|
466
471
|
For complete documentation, see the [Backend API Guide](https://ztamdev.github.io/Dars-Framework/docs.html#backend-http-utilities).
|
|
467
472
|
|
|
@@ -469,23 +474,23 @@ For complete documentation, see the [Backend API Guide](https://ztamdev.github.i
|
|
|
469
474
|
|
|
470
475
|
## CLI Usage
|
|
471
476
|
|
|
472
|
-
| Command
|
|
473
|
-
|
|
474
|
-
| `dars export my_app.py --format html`
|
|
475
|
-
| `dars init --type desktop`
|
|
476
|
-
| `dars init --type ssr`
|
|
477
|
-
| `dars build` (desktop config)
|
|
478
|
-
| `dars preview ./my_app_web`
|
|
479
|
-
| `dars init my_project`
|
|
480
|
-
| `dars init --update`
|
|
481
|
-
| `dars build`
|
|
482
|
-
| `dars config validate`
|
|
483
|
-
| `dars info my_app.py`
|
|
484
|
-
| `dars formats`
|
|
485
|
-
| `dars dev`
|
|
486
|
-
| `dars dev --port 9000`
|
|
487
|
-
| `dars dev --backend`
|
|
488
|
-
| `dars --help`
|
|
477
|
+
| Command | What it does |
|
|
478
|
+
| ------------------------------------- | ----------------------------------------------------------------- |
|
|
479
|
+
| `dars export my_app.py --format html` | Export app to HTML/CSS/JS in `./my_app_web` |
|
|
480
|
+
| `dars init --type desktop` | Scaffold desktop-capable project (BETA) |
|
|
481
|
+
| `dars init --type ssr` | Scaffold full-stack SSR project (SSR + API) |
|
|
482
|
+
| `dars build` (desktop config) | Build desktop app artifacts (BETA) |
|
|
483
|
+
| `dars preview ./my_app_web` | Preview exported app locally |
|
|
484
|
+
| `dars init my_project` | Create a new Dars project (also creates dars.config.json) |
|
|
485
|
+
| `dars init --update` | Create/Update dars.config.json in current dir |
|
|
486
|
+
| `dars build` | Build using dars.config.json (entry/outdir/format) |
|
|
487
|
+
| `dars config validate` | Validate dars.config.json and print report |
|
|
488
|
+
| `dars info my_app.py` | Show info about your app |
|
|
489
|
+
| `dars formats` | List supported export formats |
|
|
490
|
+
| `dars dev` | Run the configured entry file with hot preview (app.rTimeCompile) |
|
|
491
|
+
| `dars dev --port 9000` | Run dev server on a custom port (overrides config) |
|
|
492
|
+
| `dars dev --backend` | Run only the configured backendEntry (FastAPI/SSR backend) |
|
|
493
|
+
| `dars --help` | Show help and all CLI options |
|
|
489
494
|
|
|
490
495
|
Tip: use `dars doctor` to review optional tooling that can enhance bundling/minification.
|
|
491
496
|
|
|
@@ -570,7 +575,7 @@ Example default:
|
|
|
570
575
|
- `viteMinify`: Toggle the Vite/esbuild minifier for JS/CSS. Default `true`.
|
|
571
576
|
- `utility_styles`: Dictionary defining custom utility classes. Keys are class names, values are lists of utility strings or raw CSS properties.
|
|
572
577
|
- `markdownHighlight`: Auto-inject a client-side syntax highlighter for fenced code blocks in Markdown. Default `true`.
|
|
573
|
-
|
|
578
|
+
- `backendEntry`: Python import path for your SSR/backend app (e.g. `"backend.api:app"`). Required when your app uses `RouteType.SSR` routes. Used by `dars dev --backend`.
|
|
574
579
|
- `port`: The port for the development preview server. Default `8000`.
|
|
575
580
|
|
|
576
581
|
Validate your config:
|
|
@@ -11,7 +11,6 @@
|
|
|
11
11
|
<a href="https://deepwiki.com/ZtaMDev/Dars-Framework"><img src="https://deepwiki.com/badge.svg" alt="Ask DeepWiki"></a>
|
|
12
12
|
</p>
|
|
13
13
|
|
|
14
|
-
|
|
15
14
|
<p align="center">
|
|
16
15
|
<em>Dars is a Full-Stack multiplatform Python UI framework for building modern, interactive web and desktop apps with Python code. Seamlessly integrated with FastAPI, it allows you to build complete applications with Server-Side Rendering (SSR) and reactive SPA capabilities also classic multipage html and desktop apps in a single codebase.</em>
|
|
17
16
|
|
|
@@ -19,8 +18,9 @@
|
|
|
19
18
|
|
|
20
19
|
<div align="center">
|
|
21
20
|
|
|
22
|
-
Official [Website](https://ztamdev.github.io/Dars-Framework/) |
|
|
23
|
-
Documentation [Docs](https://ztamdev.github.io/Dars-Framework/docs.html) |
|
|
21
|
+
Official [Website](https://ztamdev.github.io/Dars-Framework/) |
|
|
22
|
+
Documentation [Docs](https://ztamdev.github.io/Dars-Framework/docs.html) |
|
|
23
|
+
Official [Roadmap](https://ztamdev.github.io/Dars-Framework/roadmap.html) |
|
|
24
24
|
Extension for VSCode [here](https://marketplace.visualstudio.com/items?itemName=ZtaMDev.dars-framework) and OpenVSX version [here](https://open-vsx.org/extension/ztamdev/dars-framework)
|
|
25
25
|
|
|
26
26
|
</div>
|
|
@@ -32,6 +32,7 @@ pip install dars-framework
|
|
|
32
32
|
Try dars without installing nothing just visit the [Dars Playground](https://dars-playground.vercel.app/)
|
|
33
33
|
|
|
34
34
|
## How It Works
|
|
35
|
+
|
|
35
36
|
- Build your UI using Python classes and components (like Text, Button, Container, Page, etc).
|
|
36
37
|
- Preview instantly with hot-reload using `app.rTimeCompile()`.
|
|
37
38
|
- Export your app to static/dynamic/ssr web files with a single CLI command.
|
|
@@ -40,6 +41,7 @@ Try dars without installing nothing just visit the [Dars Playground](https://dar
|
|
|
40
41
|
- For more information visit the [Documentation](https://ztamdev.github.io/Dars-Framework/docs.html)
|
|
41
42
|
|
|
42
43
|
## Quick Example: Your First App
|
|
44
|
+
|
|
43
45
|
```python
|
|
44
46
|
from dars.all import *
|
|
45
47
|
|
|
@@ -50,7 +52,7 @@ state = State("app", title_val="Simple Counter", count=0)
|
|
|
50
52
|
|
|
51
53
|
# 2. Define Route
|
|
52
54
|
@route("/")
|
|
53
|
-
def index():
|
|
55
|
+
def index():
|
|
54
56
|
return Page(
|
|
55
57
|
# 3. Use useValue for app text
|
|
56
58
|
Text(
|
|
@@ -90,7 +92,7 @@ def index():
|
|
|
90
92
|
),
|
|
91
93
|
style="flex flex-col items-center justify-center h-[100vh] ffam-[Arial] bg-[#f0f2f5]",
|
|
92
94
|
|
|
93
|
-
)
|
|
95
|
+
)
|
|
94
96
|
|
|
95
97
|
# 8. Add page
|
|
96
98
|
app.add_page("index", index(), title="index")
|
|
@@ -107,9 +109,11 @@ if __name__ == "__main__":
|
|
|
107
109
|
Dars Framework features **powerful state management system**, designed for different use cases.
|
|
108
110
|
|
|
109
111
|
### State V2
|
|
112
|
+
|
|
110
113
|
Modern, Pythonic state management for reactive updates. Best for counters, timers, and component interactions using hooks.
|
|
111
114
|
|
|
112
115
|
**Hooks System:**
|
|
116
|
+
|
|
113
117
|
- `useDynamic()`: Reactive state binding for automatic UI updates.
|
|
114
118
|
- `useValue()`: Set initial values from state (non-reactive).
|
|
115
119
|
- `useWatch()`: Monitor state changes and trigger side effects.
|
|
@@ -127,7 +131,7 @@ def index():
|
|
|
127
131
|
return Page(
|
|
128
132
|
# Bind to state with useDynamic
|
|
129
133
|
Text(text=useDynamic("counter.count"), style={"font-size": "24px"}),
|
|
130
|
-
|
|
134
|
+
|
|
131
135
|
# Update state on click
|
|
132
136
|
Button("Increment", on_click=state.count.increment(1)),
|
|
133
137
|
Button("Decrement", on_click=state.count.decrement(1)),
|
|
@@ -140,7 +144,7 @@ if __name__ == "__main__":
|
|
|
140
144
|
app.rTimeCompile()
|
|
141
145
|
```
|
|
142
146
|
|
|
143
|
-
**String ID Support:** `State()` can accept a string ID (e.g., `State("my-state", ...)`).
|
|
147
|
+
**String ID Support:** `State()` can accept a string ID (e.g., `State("my-state", ...)`).
|
|
144
148
|
|
|
145
149
|
> [!WARNING]
|
|
146
150
|
> **Important:** When using hooks, the State ID is used for binding. **Do not use an ID that belongs to another unrelated component**, as hooks use this ID as the State ID. Using a conflicting ID may cause unexpected behavior or state collisions.
|
|
@@ -174,6 +178,7 @@ button.on_click = sequence(
|
|
|
174
178
|
```
|
|
175
179
|
|
|
176
180
|
**Available Animations:**
|
|
181
|
+
|
|
177
182
|
- **Opacity:** `fadeIn`, `fadeOut`
|
|
178
183
|
- **Movement:** `slideIn`, `slideOut` (up, down, left, right)
|
|
179
184
|
- **Scaling:** `scaleIn`, `scaleOut`, `pulse`
|
|
@@ -216,7 +221,6 @@ button.on_click = sequence(
|
|
|
216
221
|
|
|
217
222
|
---
|
|
218
223
|
|
|
219
|
-
|
|
220
224
|
## Routing System (SPA & SSR)
|
|
221
225
|
|
|
222
226
|
Dars Framework offers a flexible routing system that supports both Client-Side Routing (SPA) and Server-Side Rendering (SSR).
|
|
@@ -280,7 +284,7 @@ def dashboard():
|
|
|
280
284
|
Link("Settings", href="/dashboard/settings"),
|
|
281
285
|
Link("Profile", href="/dashboard/profile"),
|
|
282
286
|
id="nav",
|
|
283
|
-
|
|
287
|
+
|
|
284
288
|
),
|
|
285
289
|
Outlet(), # Child routes render here
|
|
286
290
|
style={"padding": "20px"}
|
|
@@ -315,6 +319,7 @@ app.set_404_page(custom_404)
|
|
|
315
319
|
### Hot Reload for SPAs
|
|
316
320
|
|
|
317
321
|
The development preview server includes intelligent hot reload:
|
|
322
|
+
|
|
318
323
|
- Detects changes and reloads automatically
|
|
319
324
|
- Stops polling after 10 errors to prevent browser lag
|
|
320
325
|
- Clean console output without spam
|
|
@@ -417,10 +422,10 @@ callback=(
|
|
|
417
422
|
|
|
418
423
|
### Available HTTP Methods
|
|
419
424
|
|
|
420
|
-
- **`get(id, url, **options)
|
|
421
|
-
- **`post(id, url, body, **options)
|
|
422
|
-
- **`put(id, url, body, **options)
|
|
423
|
-
- **`delete(id, url, **options)
|
|
425
|
+
- **`get(id, url, **options)`\*\* - GET request
|
|
426
|
+
- **`post(id, url, body, **options)`\*\* - POST request
|
|
427
|
+
- **`put(id, url, body, **options)`\*\* - PUT request
|
|
428
|
+
- **`delete(id, url, **options)`\*\* - DELETE request
|
|
424
429
|
|
|
425
430
|
For complete documentation, see the [Backend API Guide](https://ztamdev.github.io/Dars-Framework/docs.html#backend-http-utilities).
|
|
426
431
|
|
|
@@ -428,23 +433,23 @@ For complete documentation, see the [Backend API Guide](https://ztamdev.github.i
|
|
|
428
433
|
|
|
429
434
|
## CLI Usage
|
|
430
435
|
|
|
431
|
-
| Command
|
|
432
|
-
|
|
433
|
-
| `dars export my_app.py --format html`
|
|
434
|
-
| `dars init --type desktop`
|
|
435
|
-
| `dars init --type ssr`
|
|
436
|
-
| `dars build` (desktop config)
|
|
437
|
-
| `dars preview ./my_app_web`
|
|
438
|
-
| `dars init my_project`
|
|
439
|
-
| `dars init --update`
|
|
440
|
-
| `dars build`
|
|
441
|
-
| `dars config validate`
|
|
442
|
-
| `dars info my_app.py`
|
|
443
|
-
| `dars formats`
|
|
444
|
-
| `dars dev`
|
|
445
|
-
| `dars dev --port 9000`
|
|
446
|
-
| `dars dev --backend`
|
|
447
|
-
| `dars --help`
|
|
436
|
+
| Command | What it does |
|
|
437
|
+
| ------------------------------------- | ----------------------------------------------------------------- |
|
|
438
|
+
| `dars export my_app.py --format html` | Export app to HTML/CSS/JS in `./my_app_web` |
|
|
439
|
+
| `dars init --type desktop` | Scaffold desktop-capable project (BETA) |
|
|
440
|
+
| `dars init --type ssr` | Scaffold full-stack SSR project (SSR + API) |
|
|
441
|
+
| `dars build` (desktop config) | Build desktop app artifacts (BETA) |
|
|
442
|
+
| `dars preview ./my_app_web` | Preview exported app locally |
|
|
443
|
+
| `dars init my_project` | Create a new Dars project (also creates dars.config.json) |
|
|
444
|
+
| `dars init --update` | Create/Update dars.config.json in current dir |
|
|
445
|
+
| `dars build` | Build using dars.config.json (entry/outdir/format) |
|
|
446
|
+
| `dars config validate` | Validate dars.config.json and print report |
|
|
447
|
+
| `dars info my_app.py` | Show info about your app |
|
|
448
|
+
| `dars formats` | List supported export formats |
|
|
449
|
+
| `dars dev` | Run the configured entry file with hot preview (app.rTimeCompile) |
|
|
450
|
+
| `dars dev --port 9000` | Run dev server on a custom port (overrides config) |
|
|
451
|
+
| `dars dev --backend` | Run only the configured backendEntry (FastAPI/SSR backend) |
|
|
452
|
+
| `dars --help` | Show help and all CLI options |
|
|
448
453
|
|
|
449
454
|
Tip: use `dars doctor` to review optional tooling that can enhance bundling/minification.
|
|
450
455
|
|
|
@@ -529,7 +534,7 @@ Example default:
|
|
|
529
534
|
- `viteMinify`: Toggle the Vite/esbuild minifier for JS/CSS. Default `true`.
|
|
530
535
|
- `utility_styles`: Dictionary defining custom utility classes. Keys are class names, values are lists of utility strings or raw CSS properties.
|
|
531
536
|
- `markdownHighlight`: Auto-inject a client-side syntax highlighter for fenced code blocks in Markdown. Default `true`.
|
|
532
|
-
|
|
537
|
+
- `backendEntry`: Python import path for your SSR/backend app (e.g. `"backend.api:app"`). Required when your app uses `RouteType.SSR` routes. Used by `dars dev --backend`.
|
|
533
538
|
- `port`: The port for the development preview server. Default `8000`.
|
|
534
539
|
|
|
535
540
|
Validate your config:
|
|
@@ -65,6 +65,7 @@ from dars.exporters.web.html_css_js import HTMLCSSJSExporter
|
|
|
65
65
|
# Script utilities
|
|
66
66
|
from dars.scripts.dscript import dScript, RawJS, Arg
|
|
67
67
|
from dars.scripts.utils_ds import showModal, hideModal, goTo, goToNew, reload, goBack, goForward, alert, confirm, log, getDateTime, show, hide, toggle, addClass, removeClass, toggleClass, scrollTo, scrollToTop, scrollToBottom, scrollToElement, submitForm, resetForm, getValue, clearInput, saveToLocal, loadFromLocal, removeFromLocal, clearLocalStorage, copyToClipboard, copyElementText, focus, blur, setText, setTimeout, getInputValue, switch
|
|
68
|
+
from dars.scripts.utils_ds import onViewport, classOnView, runOnView, animateOnView, staggerOnView, scrollProgress, animate, timeline, stagger # Viewport & Scroll Animation Utilities
|
|
68
69
|
from dars.scripts.animations import fadeIn, fadeOut, slideIn, slideOut, scaleIn, scaleOut, shake, bounce, pulse, rotate, flip, colorChange, morphSize, popIn, popOut, sequence # Animation System
|
|
69
70
|
from dars.scripts.script import *
|
|
70
71
|
# Hooks
|
|
@@ -128,8 +129,7 @@ __all__ = [
|
|
|
128
129
|
# Storage utilities
|
|
129
130
|
'saveToLocal', 'loadFromLocal', 'removeFromLocal', 'clearLocalStorage',
|
|
130
131
|
# Clipboard utilities
|
|
131
|
-
'copyToClipboard', 'copyElementText',
|
|
132
|
-
# Focus utilities
|
|
132
|
+
'copyToClipboard', 'copyElementText', # Focus utilities
|
|
133
133
|
'focus', 'blur',
|
|
134
134
|
# Timer utilities
|
|
135
135
|
'setTimeout',
|
|
@@ -137,6 +137,9 @@ __all__ = [
|
|
|
137
137
|
'fadeIn', 'fadeOut', 'slideIn', 'slideOut', 'scaleIn', 'scaleOut',
|
|
138
138
|
'shake', 'bounce', 'pulse', 'rotate', 'flip',
|
|
139
139
|
'colorChange', 'morphSize', 'popIn', 'popOut', 'sequence',
|
|
140
|
+
# Viewport & Scroll Animation Engine
|
|
141
|
+
'onViewport', 'classOnView', 'runOnView', 'animateOnView',
|
|
142
|
+
'staggerOnView', 'scrollProgress', 'animate', 'timeline', 'stagger',
|
|
140
143
|
# Input utilities
|
|
141
144
|
'getInputValue',
|
|
142
145
|
# Hooks
|
|
@@ -18,12 +18,14 @@ class Markdown(Component):
|
|
|
18
18
|
- **Events**: Handlers like `on_click`, `on_mouse_enter`, etc.
|
|
19
19
|
|
|
20
20
|
Example:
|
|
21
|
+
|
|
21
22
|
```python
|
|
22
23
|
Markdown(
|
|
23
24
|
content="# Hello Dars\nThis is **markdown** content.",
|
|
24
25
|
class_name="p-6 bg-white rounded-xl shadow-sm border border-slate-200"
|
|
25
26
|
)
|
|
26
27
|
```
|
|
28
|
+
|
|
27
29
|
"""
|
|
28
30
|
def __init__(
|
|
29
31
|
self,
|
|
@@ -19,7 +19,19 @@ Usage:
|
|
|
19
19
|
"""
|
|
20
20
|
|
|
21
21
|
from dars.scripts.dscript import dScript
|
|
22
|
-
|
|
22
|
+
class Action:
|
|
23
|
+
@staticmethod
|
|
24
|
+
def sequence(actions): return {'op': 'sequence', 'args': actions}
|
|
25
|
+
@staticmethod
|
|
26
|
+
def dom_set_style(id, style): return {'op': 'dom_set_style', 'args': {'id': id, 'style': style}}
|
|
27
|
+
@staticmethod
|
|
28
|
+
def dom_reflow(id): return {'op': 'dom_reflow', 'args': {'id': id}}
|
|
29
|
+
@staticmethod
|
|
30
|
+
def delay(ms): return {'op': 'delay', 'args': {'ms': ms}}
|
|
31
|
+
@staticmethod
|
|
32
|
+
def dom_hide(id): return {'op': 'dom_hide', 'args': {'id': id}}
|
|
33
|
+
@staticmethod
|
|
34
|
+
def dom_animate(id, keyframes, options): return {'op': 'dom_animate', 'args': {'id': id, 'keyframes': keyframes, 'options': options}}
|
|
23
35
|
from typing import Union, List
|
|
24
36
|
|
|
25
37
|
|
|
@@ -28,7 +40,7 @@ from typing import Union, List
|
|
|
28
40
|
def fadeIn(id: str, duration: int = 300, easing: str = "ease") -> dScript:
|
|
29
41
|
"""Fade in an element with secure DAP."""
|
|
30
42
|
return dScript(data=Action.sequence([
|
|
31
|
-
Action.dom_set_style(id, {"transition": "none", "opacity": "0", "display": "
|
|
43
|
+
Action.dom_set_style(id, {"transition": "none", "opacity": "0", "display": ""}),
|
|
32
44
|
Action.dom_reflow(id),
|
|
33
45
|
Action.delay(ms=20),
|
|
34
46
|
Action.dom_set_style(id, {"transition": f"opacity {duration}ms {easing}", "opacity": "1"}),
|
|
@@ -61,7 +73,7 @@ def slideIn(id: str, direction: str = "down", duration: int = 300, easing: str =
|
|
|
61
73
|
initial_transform = transforms.get(direction, 'translateY(-100%)')
|
|
62
74
|
|
|
63
75
|
return dScript(data=Action.sequence([
|
|
64
|
-
Action.dom_set_style(id, {"transition": "none", "transform": initial_transform, "display": "
|
|
76
|
+
Action.dom_set_style(id, {"transition": "none", "transform": initial_transform, "display": ""}),
|
|
65
77
|
Action.dom_reflow(id),
|
|
66
78
|
Action.delay(ms=20),
|
|
67
79
|
Action.dom_set_style(id, {"transition": f"transform {duration}ms {easing}", "transform": "translateX(0) translateY(0)"}),
|
|
@@ -94,7 +106,7 @@ def slideOut(id: str, direction: str = "up", duration: int = 300, easing: str =
|
|
|
94
106
|
def scaleIn(id: str, duration: int = 300, easing: str = "ease", from_scale: float = 0.0) -> dScript:
|
|
95
107
|
"""Scale in an element with secure DAP."""
|
|
96
108
|
return dScript(data=Action.sequence([
|
|
97
|
-
Action.dom_set_style(id, {"transition": "none", "transform": f"scale({from_scale})", "opacity": "0", "display": "
|
|
109
|
+
Action.dom_set_style(id, {"transition": "none", "transform": f"scale({from_scale})", "opacity": "0", "display": ""}),
|
|
98
110
|
Action.dom_reflow(id),
|
|
99
111
|
Action.delay(ms=20),
|
|
100
112
|
Action.dom_set_style(id, {"transition": f"transform {duration}ms {easing}, opacity {duration}ms {easing}", "transform": "scale(1)", "opacity": "1"}),
|
|
@@ -305,14 +305,6 @@ def compile_action(action):
|
|
|
305
305
|
return f"window.open({json.dumps(path)}, '_blank');"
|
|
306
306
|
elif op == 'reload':
|
|
307
307
|
return "window.location.reload();"
|
|
308
|
-
elif op == 'delay':
|
|
309
|
-
ms = args.get('ms', 0)
|
|
310
|
-
inner = compile_action(args.get('action', {}))
|
|
311
|
-
return f"setTimeout(function() {{ {inner} }}, {ms});"
|
|
312
|
-
elif op == 'sequence':
|
|
313
|
-
actions = args.get('actions', args if isinstance(args, list) else [])
|
|
314
|
-
parts = [compile_action(a) for a in actions]
|
|
315
|
-
return "\n".join(parts)
|
|
316
308
|
elif op == 'class_add':
|
|
317
309
|
eid = args.get('id', '')
|
|
318
310
|
cn = args.get('className', '')
|
|
@@ -21,6 +21,9 @@ class Script(ABC):
|
|
|
21
21
|
"""Returns the script code in the target language"""
|
|
22
22
|
pass
|
|
23
23
|
|
|
24
|
+
def __str__(self) -> str:
|
|
25
|
+
return self.get_code()
|
|
26
|
+
|
|
24
27
|
class InlineScript(Script):
|
|
25
28
|
"""Script defined directly in Python code"""
|
|
26
29
|
def __init__(self, code: str, target_language: str = "javascript", module: bool = False):
|