dars-framework 1.9.1__tar.gz → 1.9.2__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.
Files changed (183) hide show
  1. {dars_framework-1.9.1/dars_framework.egg-info → dars_framework-1.9.2}/PKG-INFO +1 -1
  2. {dars_framework-1.9.1 → dars_framework-1.9.2}/dars/components/advanced/accordion.py +2 -2
  3. {dars_framework-1.9.1 → dars_framework-1.9.2}/dars/components/advanced/card.py +2 -2
  4. {dars_framework-1.9.1 → dars_framework-1.9.2}/dars/components/advanced/file_upload.py +2 -2
  5. {dars_framework-1.9.1 → dars_framework-1.9.2}/dars/components/advanced/head.py +2 -2
  6. {dars_framework-1.9.1 → dars_framework-1.9.2}/dars/components/advanced/modal.py +2 -2
  7. {dars_framework-1.9.1 → dars_framework-1.9.2}/dars/components/advanced/navbar.py +2 -2
  8. {dars_framework-1.9.1 → dars_framework-1.9.2}/dars/components/advanced/outlet.py +2 -2
  9. {dars_framework-1.9.1 → dars_framework-1.9.2}/dars/components/advanced/table.py +2 -2
  10. {dars_framework-1.9.1 → dars_framework-1.9.2}/dars/components/advanced/tabs.py +2 -2
  11. {dars_framework-1.9.1 → dars_framework-1.9.2}/dars/components/basic/audio.py +2 -2
  12. {dars_framework-1.9.1 → dars_framework-1.9.2}/dars/components/basic/button.py +2 -2
  13. {dars_framework-1.9.1 → dars_framework-1.9.2}/dars/components/basic/checkbox.py +2 -2
  14. {dars_framework-1.9.1 → dars_framework-1.9.2}/dars/components/basic/container.py +2 -2
  15. {dars_framework-1.9.1 → dars_framework-1.9.2}/dars/components/basic/datepicker.py +2 -2
  16. {dars_framework-1.9.1 → dars_framework-1.9.2}/dars/components/basic/image.py +2 -2
  17. {dars_framework-1.9.1 → dars_framework-1.9.2}/dars/components/basic/input.py +2 -2
  18. {dars_framework-1.9.1 → dars_framework-1.9.2}/dars/components/basic/link.py +2 -2
  19. {dars_framework-1.9.1 → dars_framework-1.9.2}/dars/components/basic/markdown.py +2 -2
  20. {dars_framework-1.9.1 → dars_framework-1.9.2}/dars/components/basic/page.py +2 -2
  21. {dars_framework-1.9.1 → dars_framework-1.9.2}/dars/components/basic/progressbar.py +2 -2
  22. {dars_framework-1.9.1 → dars_framework-1.9.2}/dars/components/basic/radiobutton.py +2 -2
  23. {dars_framework-1.9.1 → dars_framework-1.9.2}/dars/components/basic/section.py +2 -2
  24. {dars_framework-1.9.1 → dars_framework-1.9.2}/dars/components/basic/select.py +2 -2
  25. {dars_framework-1.9.1 → dars_framework-1.9.2}/dars/components/basic/slider.py +2 -2
  26. {dars_framework-1.9.1 → dars_framework-1.9.2}/dars/components/basic/spinner.py +2 -2
  27. {dars_framework-1.9.1 → dars_framework-1.9.2}/dars/components/basic/text.py +2 -2
  28. {dars_framework-1.9.1 → dars_framework-1.9.2}/dars/components/basic/textarea.py +2 -2
  29. {dars_framework-1.9.1 → dars_framework-1.9.2}/dars/components/basic/tooltip.py +2 -2
  30. {dars_framework-1.9.1 → dars_framework-1.9.2}/dars/components/basic/video.py +2 -2
  31. {dars_framework-1.9.1 → dars_framework-1.9.2}/dars/components/layout/flex.py +2 -2
  32. {dars_framework-1.9.1 → dars_framework-1.9.2}/dars/components/layout/grid.py +2 -2
  33. {dars_framework-1.9.1 → dars_framework-1.9.2}/dars/components/visualization/chart.py +2 -2
  34. {dars_framework-1.9.1 → dars_framework-1.9.2}/dars/components/visualization/table.py +2 -2
  35. {dars_framework-1.9.1 → dars_framework-1.9.2}/dars/core/app.py +112 -1
  36. {dars_framework-1.9.1 → dars_framework-1.9.2}/dars/version.py +2 -2
  37. {dars_framework-1.9.1 → dars_framework-1.9.2/dars_framework.egg-info}/PKG-INFO +1 -1
  38. {dars_framework-1.9.1 → dars_framework-1.9.2}/pyproject.toml +1 -1
  39. {dars_framework-1.9.1 → dars_framework-1.9.2}/Dars-logo.png +0 -0
  40. {dars_framework-1.9.1 → dars_framework-1.9.2}/LICENSE +0 -0
  41. {dars_framework-1.9.1 → dars_framework-1.9.2}/MANIFEST.in +0 -0
  42. {dars_framework-1.9.1 → dars_framework-1.9.2}/README.md +0 -0
  43. {dars_framework-1.9.1 → dars_framework-1.9.2}/dars/__init__.py +0 -0
  44. {dars_framework-1.9.1 → dars_framework-1.9.2}/dars/actionProtocol.py +0 -0
  45. {dars_framework-1.9.1 → dars_framework-1.9.2}/dars/all.py +0 -0
  46. {dars_framework-1.9.1 → dars_framework-1.9.2}/dars/backend/__init__.py +0 -0
  47. {dars_framework-1.9.1 → dars_framework-1.9.2}/dars/backend/components.py +0 -0
  48. {dars_framework-1.9.1 → dars_framework-1.9.2}/dars/backend/data.py +0 -0
  49. {dars_framework-1.9.1 → dars_framework-1.9.2}/dars/backend/http.py +0 -0
  50. {dars_framework-1.9.1 → dars_framework-1.9.2}/dars/backend/json_utils.py +0 -0
  51. {dars_framework-1.9.1 → dars_framework-1.9.2}/dars/backend/route_loader.py +0 -0
  52. {dars_framework-1.9.1 → dars_framework-1.9.2}/dars/backend/ssr.py +0 -0
  53. {dars_framework-1.9.1 → dars_framework-1.9.2}/dars/cli/__init__.py +0 -0
  54. {dars_framework-1.9.1 → dars_framework-1.9.2}/dars/cli/doctor/__init__.py +0 -0
  55. {dars_framework-1.9.1 → dars_framework-1.9.2}/dars/cli/doctor/detect.py +0 -0
  56. {dars_framework-1.9.1 → dars_framework-1.9.2}/dars/cli/doctor/doctor.py +0 -0
  57. {dars_framework-1.9.1 → dars_framework-1.9.2}/dars/cli/doctor/installers.py +0 -0
  58. {dars_framework-1.9.1 → dars_framework-1.9.2}/dars/cli/doctor/persist.py +0 -0
  59. {dars_framework-1.9.1 → dars_framework-1.9.2}/dars/cli/doctor/preflight.py +0 -0
  60. {dars_framework-1.9.1 → dars_framework-1.9.2}/dars/cli/doctor/ui.py +0 -0
  61. {dars_framework-1.9.1 → dars_framework-1.9.2}/dars/cli/dpm.py +0 -0
  62. {dars_framework-1.9.1 → dars_framework-1.9.2}/dars/cli/hot_reload.py +0 -0
  63. {dars_framework-1.9.1 → dars_framework-1.9.2}/dars/cli/main.py +0 -0
  64. {dars_framework-1.9.1 → dars_framework-1.9.2}/dars/cli/preview.py +0 -0
  65. {dars_framework-1.9.1 → dars_framework-1.9.2}/dars/cli/translations.py +0 -0
  66. {dars_framework-1.9.1 → dars_framework-1.9.2}/dars/components/__init__.py +0 -0
  67. {dars_framework-1.9.1 → dars_framework-1.9.2}/dars/components/advanced/__init__.py +0 -0
  68. {dars_framework-1.9.1 → dars_framework-1.9.2}/dars/components/basic/__init__.py +0 -0
  69. {dars_framework-1.9.1 → dars_framework-1.9.2}/dars/components/layout/__init__.py +0 -0
  70. {dars_framework-1.9.1 → dars_framework-1.9.2}/dars/components/layout/anchor.py +0 -0
  71. {dars_framework-1.9.1 → dars_framework-1.9.2}/dars/components/visualization/__init__.py +0 -0
  72. {dars_framework-1.9.1 → dars_framework-1.9.2}/dars/config.py +0 -0
  73. {dars_framework-1.9.1 → dars_framework-1.9.2}/dars/core/__init__.py +0 -0
  74. {dars_framework-1.9.1 → dars_framework-1.9.2}/dars/core/component.py +0 -0
  75. {dars_framework-1.9.1 → dars_framework-1.9.2}/dars/core/events.py +0 -0
  76. {dars_framework-1.9.1 → dars_framework-1.9.2}/dars/core/js_bridge.py +0 -0
  77. {dars_framework-1.9.1 → dars_framework-1.9.2}/dars/core/properties.py +0 -0
  78. {dars_framework-1.9.1 → dars_framework-1.9.2}/dars/core/route_types.py +0 -0
  79. {dars_framework-1.9.1 → dars_framework-1.9.2}/dars/core/routing.py +0 -0
  80. {dars_framework-1.9.1 → dars_framework-1.9.2}/dars/core/state.py +0 -0
  81. {dars_framework-1.9.1 → dars_framework-1.9.2}/dars/core/state_v2.py +0 -0
  82. {dars_framework-1.9.1 → dars_framework-1.9.2}/dars/core/utilities.py +0 -0
  83. {dars_framework-1.9.1 → dars_framework-1.9.2}/dars/dars_tests/apps_test/health_check.py +0 -0
  84. {dars_framework-1.9.1 → dars_framework-1.9.2}/dars/dars_tests/run_tests.py +0 -0
  85. {dars_framework-1.9.1 → dars_framework-1.9.2}/dars/dars_tests/tests/test_advanced_components.py +0 -0
  86. {dars_framework-1.9.1 → dars_framework-1.9.2}/dars/dars_tests/tests/test_basic_components.py +0 -0
  87. {dars_framework-1.9.1 → dars_framework-1.9.2}/dars/dars_tests/tests/test_core_and_cli.py +0 -0
  88. {dars_framework-1.9.1 → dars_framework-1.9.2}/dars/dars_tests/tests/test_layout_components.py +0 -0
  89. {dars_framework-1.9.1 → dars_framework-1.9.2}/dars/dars_tests/tests/test_version_check.py +0 -0
  90. {dars_framework-1.9.1 → dars_framework-1.9.2}/dars/desktop/__init__.py +0 -0
  91. {dars_framework-1.9.1 → dars_framework-1.9.2}/dars/desktop/api.py +0 -0
  92. {dars_framework-1.9.1 → dars_framework-1.9.2}/dars/desktop/js_generator.py +0 -0
  93. {dars_framework-1.9.1 → dars_framework-1.9.2}/dars/docs/INSTALL.md +0 -0
  94. {dars_framework-1.9.1 → dars_framework-1.9.2}/dars/docs/KeyEvents.md +0 -0
  95. {dars_framework-1.9.1 → dars_framework-1.9.2}/dars/docs/__init__.py +0 -0
  96. {dars_framework-1.9.1 → dars_framework-1.9.2}/dars/docs/animations.md +0 -0
  97. {dars_framework-1.9.1 → dars_framework-1.9.2}/dars/docs/app.md +0 -0
  98. {dars_framework-1.9.1 → dars_framework-1.9.2}/dars/docs/backend_api.md +0 -0
  99. {dars_framework-1.9.1 → dars_framework-1.9.2}/dars/docs/cli.md +0 -0
  100. {dars_framework-1.9.1 → dars_framework-1.9.2}/dars/docs/components.md +0 -0
  101. {dars_framework-1.9.1 → dars_framework-1.9.2}/dars/docs/config.md +0 -0
  102. {dars_framework-1.9.1 → dars_framework-1.9.2}/dars/docs/custom_components.md +0 -0
  103. {dars_framework-1.9.1 → dars_framework-1.9.2}/dars/docs/env.md +0 -0
  104. {dars_framework-1.9.1 → dars_framework-1.9.2}/dars/docs/events.md +0 -0
  105. {dars_framework-1.9.1 → dars_framework-1.9.2}/dars/docs/exporters.md +0 -0
  106. {dars_framework-1.9.1 → dars_framework-1.9.2}/dars/docs/getting_started.md +0 -0
  107. {dars_framework-1.9.1 → dars_framework-1.9.2}/dars/docs/hooks.md +0 -0
  108. {dars_framework-1.9.1 → dars_framework-1.9.2}/dars/docs/index.md +0 -0
  109. {dars_framework-1.9.1 → dars_framework-1.9.2}/dars/docs/operations.md +0 -0
  110. {dars_framework-1.9.1 → dars_framework-1.9.2}/dars/docs/routing.md +0 -0
  111. {dars_framework-1.9.1 → dars_framework-1.9.2}/dars/docs/scripts.md +0 -0
  112. {dars_framework-1.9.1 → dars_framework-1.9.2}/dars/docs/ssr.md +0 -0
  113. {dars_framework-1.9.1 → dars_framework-1.9.2}/dars/docs/state_management.md +0 -0
  114. {dars_framework-1.9.1 → dars_framework-1.9.2}/dars/docs/styling.md +0 -0
  115. {dars_framework-1.9.1 → dars_framework-1.9.2}/dars/env.py +0 -0
  116. {dars_framework-1.9.1 → dars_framework-1.9.2}/dars/exporters/__init__.py +0 -0
  117. {dars_framework-1.9.1 → dars_framework-1.9.2}/dars/exporters/base.py +0 -0
  118. {dars_framework-1.9.1 → dars_framework-1.9.2}/dars/exporters/desktop/electron.py +0 -0
  119. {dars_framework-1.9.1 → dars_framework-1.9.2}/dars/exporters/web/__init__.py +0 -0
  120. {dars_framework-1.9.1 → dars_framework-1.9.2}/dars/exporters/web/html_css_js.py +0 -0
  121. {dars_framework-1.9.1 → dars_framework-1.9.2}/dars/exporters/web/vdom.py +0 -0
  122. {dars_framework-1.9.1 → dars_framework-1.9.2}/dars/hooks/__init__.py +0 -0
  123. {dars_framework-1.9.1 → dars_framework-1.9.2}/dars/hooks/form_helpers.py +0 -0
  124. {dars_framework-1.9.1 → dars_framework-1.9.2}/dars/hooks/set_vref.py +0 -0
  125. {dars_framework-1.9.1 → dars_framework-1.9.2}/dars/hooks/update_vref.py +0 -0
  126. {dars_framework-1.9.1 → dars_framework-1.9.2}/dars/hooks/use_dynamic.py +0 -0
  127. {dars_framework-1.9.1 → dars_framework-1.9.2}/dars/hooks/use_value.py +0 -0
  128. {dars_framework-1.9.1 → dars_framework-1.9.2}/dars/hooks/use_vref.py +0 -0
  129. {dars_framework-1.9.1 → dars_framework-1.9.2}/dars/hooks/use_watch.py +0 -0
  130. {dars_framework-1.9.1 → dars_framework-1.9.2}/dars/hooks/value_helpers.py +0 -0
  131. {dars_framework-1.9.1 → dars_framework-1.9.2}/dars/js_lib.py +0 -0
  132. {dars_framework-1.9.1 → dars_framework-1.9.2}/dars/scripts/__init__.py +0 -0
  133. {dars_framework-1.9.1 → dars_framework-1.9.2}/dars/scripts/animations.py +0 -0
  134. {dars_framework-1.9.1 → dars_framework-1.9.2}/dars/scripts/dscript.py +0 -0
  135. {dars_framework-1.9.1 → dars_framework-1.9.2}/dars/scripts/keycode.py +0 -0
  136. {dars_framework-1.9.1 → dars_framework-1.9.2}/dars/scripts/script.py +0 -0
  137. {dars_framework-1.9.1 → dars_framework-1.9.2}/dars/scripts/utils_ds.py +0 -0
  138. {dars_framework-1.9.1 → dars_framework-1.9.2}/dars/security.py +0 -0
  139. {dars_framework-1.9.1 → dars_framework-1.9.2}/dars/templates/__init__.py +0 -0
  140. {dars_framework-1.9.1 → dars_framework-1.9.2}/dars/templates/desktop/icon.png +0 -0
  141. {dars_framework-1.9.1 → dars_framework-1.9.2}/dars/templates/desktop/template/backend/icons/icon.png +0 -0
  142. {dars_framework-1.9.1 → dars_framework-1.9.2}/dars/templates/desktop/template/backend/main.js +0 -0
  143. {dars_framework-1.9.1 → dars_framework-1.9.2}/dars/templates/desktop/template/backend/package.json +0 -0
  144. {dars_framework-1.9.1 → dars_framework-1.9.2}/dars/templates/desktop/template/backend/preload.js +0 -0
  145. {dars_framework-1.9.1 → dars_framework-1.9.2}/dars/templates/desktop/template/dars.config.json +0 -0
  146. {dars_framework-1.9.1 → dars_framework-1.9.2}/dars/templates/desktop/template/icons/icon.png +0 -0
  147. {dars_framework-1.9.1 → dars_framework-1.9.2}/dars/templates/desktop/template/main.py +0 -0
  148. {dars_framework-1.9.1 → dars_framework-1.9.2}/dars/templates/desktop/template/public/electron-icon.png +0 -0
  149. {dars_framework-1.9.1 → dars_framework-1.9.2}/dars/templates/desktop/template/public/icon.png +0 -0
  150. {dars_framework-1.9.1 → dars_framework-1.9.2}/dars/templates/examples/README.md +0 -0
  151. {dars_framework-1.9.1 → dars_framework-1.9.2}/dars/templates/examples/advanced/CustomComp/main.py +0 -0
  152. {dars_framework-1.9.1 → dars_framework-1.9.2}/dars/templates/examples/advanced/Modal_Demo/advanced_modal_demo.py +0 -0
  153. {dars_framework-1.9.1 → dars_framework-1.9.2}/dars/templates/examples/advanced/StateV2/README.md +0 -0
  154. {dars_framework-1.9.1 → dars_framework-1.9.2}/dars/templates/examples/advanced/StateV2/animation_component.py +0 -0
  155. {dars_framework-1.9.1 → dars_framework-1.9.2}/dars/templates/examples/advanced/StateV2/counter_component.py +0 -0
  156. {dars_framework-1.9.1 → dars_framework-1.9.2}/dars/templates/examples/advanced/StateV2/hero_component.py +0 -0
  157. {dars_framework-1.9.1 → dars_framework-1.9.2}/dars/templates/examples/advanced/StateV2/main.py +0 -0
  158. {dars_framework-1.9.1 → dars_framework-1.9.2}/dars/templates/examples/advanced/StateV2/styles.css +0 -0
  159. {dars_framework-1.9.1 → dars_framework-1.9.2}/dars/templates/examples/advanced/StateV2/timer_component.py +0 -0
  160. {dars_framework-1.9.1 → dars_framework-1.9.2}/dars/templates/examples/advanced/VariousComponents/all_components_demo.py +0 -0
  161. {dars_framework-1.9.1 → dars_framework-1.9.2}/dars/templates/examples/advanced/__init__.py +0 -0
  162. {dars_framework-1.9.1 → dars_framework-1.9.2}/dars/templates/examples/advanced/dState/state_mods_demo.py +0 -0
  163. {dars_framework-1.9.1 → dars_framework-1.9.2}/dars/templates/examples/advanced/hooks/useDynamic.py +0 -0
  164. {dars_framework-1.9.1 → dars_framework-1.9.2}/dars/templates/examples/advanced/hooks/useValue.py +0 -0
  165. {dars_framework-1.9.1 → dars_framework-1.9.2}/dars/templates/examples/advanced/hooks/useWatch.py +0 -0
  166. {dars_framework-1.9.1 → dars_framework-1.9.2}/dars/templates/examples/basic/HelloWorld/hello_world.py +0 -0
  167. {dars_framework-1.9.1 → dars_framework-1.9.2}/dars/templates/examples/basic/Layouts/flex_layout_responsive.py +0 -0
  168. {dars_framework-1.9.1 → dars_framework-1.9.2}/dars/templates/examples/basic/Layouts/grid_layout_responsive.py +0 -0
  169. {dars_framework-1.9.1 → dars_framework-1.9.2}/dars/templates/examples/basic/Layouts/layout_multipage_demo.py +0 -0
  170. {dars_framework-1.9.1 → dars_framework-1.9.2}/dars/templates/examples/basic/PWA/icon-192x192.png +0 -0
  171. {dars_framework-1.9.1 → dars_framework-1.9.2}/dars/templates/examples/basic/PWA/icon-512x512.png +0 -0
  172. {dars_framework-1.9.1 → dars_framework-1.9.2}/dars/templates/examples/basic/PWA/pwa_custom_icons.py +0 -0
  173. {dars_framework-1.9.1 → dars_framework-1.9.2}/dars/templates/examples/basic/__init__.py +0 -0
  174. {dars_framework-1.9.1 → dars_framework-1.9.2}/dars/templates/examples/markdown/MarkdownTemplate/README.md +0 -0
  175. {dars_framework-1.9.1 → dars_framework-1.9.2}/dars/templates/examples/markdown/MarkdownTemplate/markdown_template.py +0 -0
  176. {dars_framework-1.9.1 → dars_framework-1.9.2}/dars/templates/examples/markdown/MarkdownTemplate/other_docs.md +0 -0
  177. {dars_framework-1.9.1 → dars_framework-1.9.2}/dars/templates/examples/markdown/__init__.py +0 -0
  178. {dars_framework-1.9.1 → dars_framework-1.9.2}/dars_framework.egg-info/SOURCES.txt +0 -0
  179. {dars_framework-1.9.1 → dars_framework-1.9.2}/dars_framework.egg-info/dependency_links.txt +0 -0
  180. {dars_framework-1.9.1 → dars_framework-1.9.2}/dars_framework.egg-info/entry_points.txt +0 -0
  181. {dars_framework-1.9.1 → dars_framework-1.9.2}/dars_framework.egg-info/requires.txt +0 -0
  182. {dars_framework-1.9.1 → dars_framework-1.9.2}/dars_framework.egg-info/top_level.txt +0 -0
  183. {dars_framework-1.9.1 → dars_framework-1.9.2}/setup.cfg +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: dars-framework
3
- Version: 1.9.1
3
+ Version: 1.9.2
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>
@@ -9,8 +9,8 @@ class Accordion(Component):
9
9
  - **sections** (list): List of tuples containing `(title, content)`.
10
10
  - **open_indices** (list): Optional list of indices that should be open by default.
11
11
  - **id** (str): Unique identifier for the component.
12
- - **class_name** (str): String containing CSS utility classes (e.g., `"divide-y divide-slate-200 border rounded-xl overflow-hidden"`).
13
- - **style** (dict): Optional dictionary for direct inline styles (prefer `class_name`).
12
+ - **class_name** (str): String containing regular CSS class names.
13
+ - **style** (dict): Optional dictionary for CSS utility classes (prefer `style`).
14
14
  - **children** (list): List of child components.
15
15
  - **Events**: Handlers like `on_click`, etc.
16
16
 
@@ -9,8 +9,8 @@ class Card(Component):
9
9
  - **children** (list): List of child components to render inside the card.
10
10
  - **title** (str): Optional title displayed at the top of the card.
11
11
  - **id** (str): Unique identifier for the component.
12
- - **class_name** (str): String containing CSS utility classes (e.g., `"p-6 bg-white rounded-2xl shadow-xl hover:shadow-2xl transition-shadow"`).
13
- - **style** (dict): Optional dictionary for direct inline styles (prefer `class_name`).
12
+ - **class_name** (str): String containing regular CSS class names.
13
+ - **style** (dict): Optional dictionary for CSS utility classes (prefer `style`).
14
14
  - **Events**: Handlers like `on_click`, `on_mouse_enter`, etc.
15
15
 
16
16
  Example:
@@ -15,8 +15,8 @@ class FileUpload(Component):
15
15
  - **max_size** (int): Maximum file size allowed in bytes.
16
16
  - **label** (str): Text label for the upload button (defaults to "Choose File").
17
17
  - **id** (str): Unique identifier for the component.
18
- - **class_name** (str): String containing CSS utility classes (e.g., `"bg-slate-100 border-2 border-dashed p-8 text-center rounded-xl"`).
19
- - **style** (dict): Optional dictionary for direct inline styles (prefer `class_name`).
18
+ - **class_name** (str): String containing regular CSS class names.
19
+ - **style** (dict): Optional dictionary for CSS utility classes (prefer `style`).
20
20
  - **children** (list): List of child components.
21
21
  - **Events**: Handlers like `on_change` (triggered when files are selected).
22
22
 
@@ -28,8 +28,8 @@ class Head(Component):
28
28
  - **links** (list): List of dictionaries for custom `<link>` tags.
29
29
  - **structured_data** (dict): JSON-LD dictionary for structured data.
30
30
  - **id** (str): Unique identifier for the component (not rendered).
31
- - **class_name** (str): CSS utility classes (not rendered).
32
- - **style** (dict): Optional dictionary for direct inline styles (not rendered).
31
+ - **class_name** (str): String containing regular CSS class names (not rendered).
32
+ - **style** (dict): Optional dictionary for CSS utility classes (prefer `style`) (not rendered).
33
33
  - **children** (list): List of child components (not rendered).
34
34
  - **Events**: Handlers (not typical for Head).
35
35
 
@@ -10,8 +10,8 @@ class Modal(Component):
10
10
  - **title** (str): Optional title displayed in the modal header.
11
11
  - **is_open** (bool): Whether the modal is currently visible (defaults to False).
12
12
  - **id** (str): Unique identifier for the component.
13
- - **class_name** (str): String containing CSS utility classes for the modal overlay.
14
- - **style** (dict): Optional dictionary for direct inline styles (prefer `class_name`).
13
+ - **class_name** (str): String containing regular CSS class names for the modal overlay.
14
+ - **style** (dict): Optional dictionary for CSS utility classes (prefer `style`).
15
15
  - **Events**: Handlers like `on_click` (can be used to close the modal by clicking the backdrop).
16
16
 
17
17
  Example:
@@ -9,8 +9,8 @@ class Navbar(Component):
9
9
  - ***children** (Component): Positional arguments for navigation links or other components.
10
10
  - **brand** (str): Text or logo component for the site branding area.
11
11
  - **id** (str): Unique identifier for the component.
12
- - **class_name** (str): String containing CSS utility classes (e.g., `"bg-white/80 backdrop-blur-md sticky top-0 z-50 border-b border-slate-100"`).
13
- - **style** (dict): Optional dictionary for direct inline styles (prefer `class_name`).
12
+ - **class_name** (str): String containing regular CSS class names.
13
+ - **style** (dict): Optional dictionary for CSS utility classes (prefer `style`).
14
14
  - **children** (list): List of child components.
15
15
  - **Events**: Handlers like `on_click`, `on_mouse_enter`, etc.
16
16
 
@@ -10,8 +10,8 @@ class Outlet(Container):
10
10
  - **placeholder** (Component): Component to display while the route content is being loaded.
11
11
  - ***children** (Component): Initial content for the outlet if no route is matched.
12
12
  - **id** (str): Unique identifier for the component.
13
- - **class_name** (str): String containing CSS utility classes (e.g., `"flex-1 p-6 bg-slate-50 min-h-screen overflow-y-auto"`).
14
- - **style** (dict): Optional dictionary for direct inline styles (prefer `class_name`).
13
+ - **class_name** (str): String containing regular CSS class names.
14
+ - **style** (dict): Optional dictionary for CSS utility classes (prefer `style`).
15
15
  - **Events**: Handlers for navigation and lifecycle events.
16
16
 
17
17
  Example:
@@ -10,8 +10,8 @@ class Table(Component):
10
10
  - **data** (list): List of row dictionaries where keys match the `field` defined in `columns`.
11
11
  - **page_size** (int): Number of rows to display per page (optional).
12
12
  - **id** (str): Unique identifier for the component.
13
- - **class_name** (str): String containing CSS utility classes (e.g., `"w-full text-left border-collapse border border-slate-200"`).
14
- - **style** (dict): Optional dictionary for direct inline styles (prefer `class_name`).
13
+ - **class_name** (str): String containing regular CSS class names.
14
+ - **style** (dict): Optional dictionary for CSS utility classes (prefer `style`).
15
15
  - **children** (list): List of child components.
16
16
  - **Events**: Handlers for sorting, filtering, and row clicks.
17
17
 
@@ -10,8 +10,8 @@ class Tabs(Component):
10
10
  - **panels** (list): List of components or strings representing the content of each tab.
11
11
  - **selected** (int): Index of the initially active tab (defaults to 0).
12
12
  - **id** (str): Unique identifier for the component.
13
- - **class_name** (str): String containing CSS utility classes (e.g., `"flex flex-col w-full"`).
14
- - **style** (dict): Optional dictionary for direct inline styles (prefer `class_name`).
13
+ - **class_name** (str): String containing regular CSS class names.
14
+ - **style** (dict): Optional dictionary for CSS utility classes (prefer `style`).
15
15
  - **children** (list): List of child components.
16
16
  - **Events**: Handlers like `on_change` when the active tab is switched.
17
17
 
@@ -15,8 +15,8 @@ class Audio(Component):
15
15
  - **muted** (bool): If True, the audio will be muted by default.
16
16
  - **preload** (str): Strategy for preloading ('auto', 'metadata', 'none').
17
17
  - **id** (str): Unique identifier for the component.
18
- - **class_name** (str): String containing CSS utility classes.
19
- - **style** (dict): Optional dictionary for direct inline styles (prefer `class_name`).
18
+ - **class_name** (str): String containing regular CSS class names.
19
+ - **style** (dict): Optional dictionary for CSS utility classes (prefer `style`).
20
20
  - **children** (list): List of child components.
21
21
  - **Events**: Handlers like `on_play`, `on_pause`, `on_ended`, etc.
22
22
 
@@ -13,8 +13,8 @@ class Button(Component):
13
13
  - **disabled** (bool): Whether the button is interactive or not.
14
14
  - **button_type** (str): HTML type of the button ('button', 'submit', 'reset').
15
15
  - **id** (str): Unique identifier for the component.
16
- - **class_name** (str): String containing CSS utility classes (e.g., `"bg-blue-500 hover:bg-blue-600 text-white font-bold py-2 px-4 rounded"`).
17
- - **style** (dict): Optional dictionary for direct inline styles (prefer `class_name`).
16
+ - **class_name** (str): String containing regular CSS class names.
17
+ - **style** (dict): Optional dictionary for CSS utility classes (prefer `style`).
18
18
  - **children** (list): List of child components to render inside the button.
19
19
  - **Events**: Handlers like `on_click`, `on_double_click`, `on_mouse_enter`, `on_mouse_leave`, `on_mouse_down`, `on_mouse_up`, `on_key_down`, `on_key_up`.
20
20
 
@@ -15,8 +15,8 @@ class Checkbox(Component):
15
15
  - **disabled** (bool): If True, the checkbox is not interactive.
16
16
  - **required** (bool): If True, the checkbox must be checked.
17
17
  - **id** (str): Unique identifier for the component.
18
- - **class_name** (str): String containing CSS utility classes (e.g., `"form-checkbox h-5 w-5 text-indigo-600"`).
19
- - **style** (dict): Optional dictionary for direct inline styles (prefer `class_name`).
18
+ - **class_name** (str): String containing regular CSS class names.
19
+ - **style** (dict): Optional dictionary for CSS utility classes (prefer `style`).
20
20
  - **children** (list): List of child components.
21
21
  - **Events**: Handlers like `on_change`, `on_click`, etc.
22
22
 
@@ -10,8 +10,8 @@ class Container(Component):
10
10
  - ***children** (Component): Positional arguments for child components.
11
11
  - **additional_children** (list): Optional list of additional child components.
12
12
  - **id** (str): Unique identifier for the component.
13
- - **class_name** (str): String containing CSS utility classes (e.g., `"flex flex-row justify-between p-4 bg-white shadow"`).
14
- - **style** (dict): Optional dictionary for direct inline styles (prefer `class_name`).
13
+ - **class_name** (str): String containing regular CSS class names.
14
+ - **style** (dict): Optional dictionary for CSS utility classes (prefer `style`).
15
15
  - **Events**: Handlers like `on_click`, `on_mouse_enter`, etc.
16
16
 
17
17
  Example:
@@ -22,8 +22,8 @@ class DatePicker(Component):
22
22
  - **required** (bool): If True, a date must be selected.
23
23
  - **readonly** (bool): If True, the field is read-only.
24
24
  - **id** (str): Unique identifier for the component.
25
- - **class_name** (str): String containing CSS utility classes.
26
- - **style** (dict): Optional dictionary for direct inline styles (prefer `class_name`).
25
+ - **class_name** (str): String containing regular CSS class names.
26
+ - **style** (dict): Optional dictionary for CSS utility classes (prefer `style`).
27
27
  - **children** (list): List of child components.
28
28
  - **Events**: Handlers like `on_change`, `on_open`, `on_close`.
29
29
 
@@ -11,8 +11,8 @@ class Image(Component):
11
11
  - **width** (str): Width of the image (e.g., `"100px"`, `"50%"`).
12
12
  - **height** (str): Height of the image.
13
13
  - **id** (str): Unique identifier for the component.
14
- - **class_name** (str): String containing CSS utility classes (e.g., `"rounded-full object-cover shadow-lg"`).
15
- - **style** (dict): Optional dictionary for direct inline styles (prefer `class_name`).
14
+ - **class_name** (str): String containing regular CSS class names.
15
+ - **style** (dict): Optional dictionary for CSS utility classes (prefer `style`).
16
16
  - **children** (list): List of child components.
17
17
  - **Events**: Handlers like `on_click`, `on_load`, etc.
18
18
 
@@ -16,8 +16,8 @@ class Input(Component):
16
16
  - **required** (bool): If True, the field must be filled.
17
17
  - **max_length** (int): Maximum number of characters allowed.
18
18
  - **id** (str): Unique identifier for the component.
19
- - **class_name** (str): String containing CSS utility classes (e.g., `"border-2 border-slate-200 focus:border-indigo-500 p-2 rounded"`).
20
- - **style** (dict): Optional dictionary for direct inline styles (prefer `class_name`).
19
+ - **class_name** (str): String containing regular CSS class names.
20
+ - **style** (dict): Optional dictionary for CSS utility classes (prefer `style`).
21
21
  - **children** (list): List of child components.
22
22
  - **Events**: Handlers like `on_change`, `on_input`, `on_focus`, `on_blur`, `on_key_down`, `on_key_up`.
23
23
 
@@ -10,8 +10,8 @@ class Link(Component):
10
10
  - **href** (str): The URL or path to navigate to.
11
11
  - **target** (str): Where to open the link (e.g., `"_self"`, `"_blank"`).
12
12
  - **id** (str): Unique identifier for the component.
13
- - **class_name** (str): String containing CSS utility classes (e.g., `"text-indigo-600 hover:underline font-medium"`).
14
- - **style** (dict): Optional dictionary for direct inline styles (prefer `class_name`).
13
+ - **class_name** (str): String containing regular CSS class names.
14
+ - **style** (dict): Optional dictionary for CSS utility classes (prefer `style`).
15
15
  - **children** (list): List of child components.
16
16
  - **Events**: Handlers like `on_click`, `on_mouse_enter`, etc.
17
17
 
@@ -12,8 +12,8 @@ class Markdown(Component):
12
12
  - **dark_theme** (bool): Whether to apply dark theme styles to the markdown container.
13
13
  - **lazy** (bool): Enable lazy loading for content that only fetches when visible.
14
14
  - **id** (str): Unique identifier for the component.
15
- - **class_name** (str): String containing CSS utility classes (e.g., `"prose lg:prose-xl max-w-none"`).
16
- - **style** (dict): Optional dictionary for direct inline styles (prefer `class_name`).
15
+ - **class_name** (str): String containing regular CSS class names.
16
+ - **style** (dict): Optional dictionary for CSS utility classes (prefer `style`).
17
17
  - **children** (list): List of child components (not typically used for Markdown).
18
18
  - **Events**: Handlers like `on_click`, `on_mouse_enter`, etc.
19
19
 
@@ -15,8 +15,8 @@ class Page(Component):
15
15
  Props:
16
16
  - ***children** (Component): Positional arguments for child components to be rendered in the page.
17
17
  - **id** (str): Unique identifier for the component.
18
- - **class_name** (str): String containing CSS utility classes (e.g., `"min-h-screen bg-slate-50 p-8"`).
19
- - **style** (dict): Optional dictionary for direct inline styles (prefer `class_name`).
18
+ - **class_name** (str): String containing regular CSS class names.
19
+ - **style** (dict): Optional dictionary for CSS utility classes (prefer `style`).
20
20
  - **Events**: Handlers like `on_click`, `on_mouse_enter`, etc.
21
21
 
22
22
  Example:
@@ -9,8 +9,8 @@ class ProgressBar(Component):
9
9
  - **value** (int): Current progress value (from 0 to `max_value`).
10
10
  - **max_value** (int): Maximum value representing 100% (defaults to 100).
11
11
  - **id** (str): Unique identifier for the component.
12
- - **class_name** (str): String containing CSS utility classes (e.g., `"h-4 bg-slate-200 rounded-full overflow-hidden"`).
13
- - **style** (dict): Optional dictionary for direct inline styles (prefer `class_name`).
12
+ - **class_name** (str): String containing regular CSS class names.
13
+ - **style** (dict): Optional dictionary for CSS utility classes (prefer `style`).
14
14
  - **children** (list): List of child components.
15
15
  - **Events**: Handlers like `on_click`, `on_mouse_enter`, etc.
16
16
 
@@ -15,8 +15,8 @@ class RadioButton(Component):
15
15
  - **disabled** (bool): If True, the radio button is not interactive.
16
16
  - **required** (bool): If True, the radio button must be selected.
17
17
  - **id** (str): Unique identifier for the component.
18
- - **class_name** (str): String containing CSS utility classes.
19
- - **style** (dict): Optional dictionary for direct inline styles (prefer `class_name`).
18
+ - **class_name** (str): String containing regular CSS class names.
19
+ - **style** (dict): Optional dictionary for CSS utility classes (prefer `style`).
20
20
  - **children** (list): List of child components.
21
21
  - **Events**: Handlers like `on_change`, `on_click`, etc.
22
22
 
@@ -10,8 +10,8 @@ class Section(Component):
10
10
  - ***children** (Component): Positional arguments for child components.
11
11
  - **additional_children** (list): Optional list of additional child components.
12
12
  - **id** (str): Unique identifier for the component.
13
- - **class_name** (str): String containing CSS utility classes (e.g., `"py-12 bg-slate-50 border-b border-slate-200"`).
14
- - **style** (dict): Optional dictionary for direct inline styles (prefer `class_name`).
13
+ - **class_name** (str): String containing regular CSS class names.
14
+ - **style** (dict): Optional dictionary for CSS utility classes (prefer `style`).
15
15
  - **Events**: Handlers like `on_click`, `on_mouse_enter`, etc.
16
16
 
17
17
  Example:
@@ -23,8 +23,8 @@ class Select(Component):
23
23
  - **disabled** (bool): If True, the select is not interactive.
24
24
  - **required** (bool): If True, a selection is mandatory.
25
25
  - **id** (str): Unique identifier for the component.
26
- - **class_name** (str): String containing CSS utility classes.
27
- - **style** (dict): Optional dictionary for direct inline styles (prefer `class_name`).
26
+ - **class_name** (str): String containing regular CSS class names.
27
+ - **style** (dict): Optional dictionary for CSS utility classes (prefer `style`).
28
28
  - **children** (list): List of child components.
29
29
  - **Events**: Handlers like `on_change`, `on_focus`, `on_blur`.
30
30
 
@@ -17,8 +17,8 @@ class Slider(Component):
17
17
  - **orientation** (str): `"horizontal"` or `"vertical"`.
18
18
  - **disabled** (bool): If True, the slider is not interactive.
19
19
  - **id** (str): Unique identifier for the component.
20
- - **class_name** (str): String containing CSS utility classes.
21
- - **style** (dict): Optional dictionary for direct inline styles (prefer `class_name`).
20
+ - **class_name** (str): String containing regular CSS class names.
21
+ - **style** (dict): Optional dictionary for CSS utility classes (prefer `style`).
22
22
  - **children** (list): List of child components.
23
23
  - **Events**: Handlers like `on_change`, `on_input`.
24
24
 
@@ -6,8 +6,8 @@ class Spinner(Component):
6
6
 
7
7
  Props:
8
8
  - **id** (str): Unique identifier for the component.
9
- - **class_name** (str): String containing CSS utility classes (e.g., `"w-8 h-8 border-4 border-indigo-500 border-t-transparent animate-spin rounded-full"`).
10
- - **style** (dict): Optional dictionary for direct inline styles (prefer `class_name`).
9
+ - **class_name** (str): String containing regular CSS class names.
10
+ - **style** (dict): Optional dictionary for CSS utility classes (prefer `style`).
11
11
  - **children** (list): List of child components.
12
12
  - **Events**: Handlers like `on_click`, `on_mouse_enter`, etc.
13
13
 
@@ -9,8 +9,8 @@ class Text(Component):
9
9
  Props:
10
10
  - **text** (str): The text content to display.
11
11
  - **id** (str): Unique identifier for the component.
12
- - **class_name** (str): String containing CSS utility classes (e.g., `"text-2xl font-bold text-slate-800"`).
13
- - **style** (dict): Optional dictionary for direct inline styles (prefer `class_name`).
12
+ - **class_name** (str): String containing regular CSS class names.
13
+ - **style** (dict): Optional dictionary for CSS utility classes (prefer `style`).
14
14
  - **children** (list): List of child components.
15
15
  - **Events**: Handlers like `on_click`, `on_mouse_enter`, etc.
16
16
 
@@ -15,8 +15,8 @@ class Textarea(Component):
15
15
  - **required** (bool): If True, the field must be filled.
16
16
  - **max_length** (int): Maximum number of characters allowed.
17
17
  - **id** (str): Unique identifier for the component.
18
- - **class_name** (str): String containing CSS utility classes (e.g., `"w-full p-4 border rounded-xl focus:ring-2 focus:ring-indigo-500"`).
19
- - **style** (dict): Optional dictionary for direct inline styles (prefer `class_name`).
18
+ - **class_name** (str): String containing regular CSS class names.
19
+ - **style** (dict): Optional dictionary for CSS utility classes (prefer `style`).
20
20
  - **children** (list): List of child components.
21
21
  - **Events**: Handlers like `on_change`, `on_input`, `on_focus`, `on_blur`.
22
22
 
@@ -10,8 +10,8 @@ class Tooltip(Component):
10
10
  - **child** (Component): The component that will trigger the tooltip.
11
11
  - **position** (str): Tooltip placement relative to the child (`"top"`, `"right"`, `"bottom"`, `"left"`).
12
12
  - **id** (str): Unique identifier for the component.
13
- - **class_name** (str): String containing CSS utility classes (e.g., `"bg-slate-800 text-white text-xs p-2 rounded"`).
14
- - **style** (dict): Optional dictionary for direct inline styles (prefer `class_name`).
13
+ - **class_name** (str): String containing regular CSS class names.
14
+ - **style** (dict): Optional dictionary for CSS utility classes (prefer `style`).
15
15
  - **children** (list): List of child components.
16
16
  - **Events**: Handlers for mouse events.
17
17
 
@@ -19,8 +19,8 @@ class Video(Component):
19
19
  - **preload** (str): Preload strategy (`"auto"`, `"metadata"`, `"none"`).
20
20
  - **plays_inline** (bool): If True, the video plays inline on mobile browsers.
21
21
  - **id** (str): Unique identifier for the component.
22
- - **class_name** (str): String containing CSS utility classes (e.g., `"rounded-xl shadow-lg w-full"`).
23
- - **style** (dict): Optional dictionary for direct inline styles (prefer `class_name`).
22
+ - **class_name** (str): String containing regular CSS class names.
23
+ - **style** (dict): Optional dictionary for CSS utility classes (prefer `style`).
24
24
  - **children** (list): List of child components.
25
25
  - **Events**: Handlers like `on_play`, `on_pause`, `on_ended`, etc.
26
26
 
@@ -19,8 +19,8 @@ class FlexLayout(LayoutBase):
19
19
  - **align** (str): Cross axis alignment (`"stretch"`, `"center"`, `"flex-start"`, `"flex-end"`, `"baseline"`).
20
20
  - **gap** (str): Space between child components (e.g., `"16px"`, `"1rem"`).
21
21
  - **id** (str): Unique identifier for the component.
22
- - **class_name** (str): String containing CSS utility classes (e.g., `"w-full h-full p-4 bg-white"`).
23
- - **style** (dict): Optional dictionary for direct inline styles (prefer `class_name`).
22
+ - **class_name** (str): String containing regular CSS class names.
23
+ - **style** (dict): Optional dictionary for CSS utility classes (prefer `style`).
24
24
  - **children** (list): List of child components.
25
25
  - **Events**: Handlers like `on_click`, `on_mouse_enter`, etc.
26
26
 
@@ -33,8 +33,8 @@ class GridLayout(LayoutBase):
33
33
  - **cols** (int): Number of grid columns.
34
34
  - **gap** (str): Space between grid cells (e.g., `"20px"`, `"1.5rem"`).
35
35
  - **id** (str): Unique identifier for the component.
36
- - **class_name** (str): String containing CSS utility classes (e.g., `"grid grid-cols-3 gap-6 p-8"`).
37
- - **style** (dict): Optional dictionary for direct inline styles (prefer `class_name`).
36
+ - **class_name** (str): String containing regular CSS class names.
37
+ - **style** (dict): Optional dictionary for CSS utility classes (prefer `style`).
38
38
  - **children** (list): List of child components.
39
39
  - **Events**: Handlers like `on_click`, `on_mouse_enter`, etc.
40
40
 
@@ -12,8 +12,8 @@ class Chart(Component):
12
12
  - **height** (int/str): Height of the chart container (defaults to `400px`).
13
13
  - **config** (dict): Plotly configuration options (e.g., `{'responsive': True}`).
14
14
  - **id** (str): Unique identifier for the component.
15
- - **class_name** (str): String containing CSS utility classes (e.g., `"rounded-xl shadow-lg border p-4"`).
16
- - **style** (dict): Optional dictionary for direct inline styles (prefer `class_name`).
15
+ - **class_name** (str): String containing regular CSS class names.
16
+ - **style** (dict): Optional dictionary for CSS utility classes (prefer `style`).
17
17
  - **children** (list): List of child components (not typical for Chart).
18
18
  - **Events**: Handlers (not typical for Chart).
19
19
 
@@ -17,8 +17,8 @@ class DataTable(Component):
17
17
  - **theme** (str/dict): Predefined theme (`"light"`, `"dark"`) or a custom color dictionary.
18
18
  - **formatters** (dict): Custom value formatters for specific columns.
19
19
  - **id** (str): Unique identifier for the component.
20
- - **class_name** (str): String containing CSS utility classes.
21
- - **style** (dict): Optional dictionary for direct inline styles (prefer `class_name`).
20
+ - **class_name** (str): String containing regular CSS class names.
21
+ - **style** (dict): Optional dictionary for CSS utility classes (prefer `style`).
22
22
  - **children** (list): List of child components (not rendered).
23
23
  - **Events**: Handlers (not typical for static DataTable).
24
24
 
@@ -7,6 +7,7 @@
7
7
  # Copyright (c) 2025 ZtaDev
8
8
  from typing import Optional, List, Dict, Any
9
9
 
10
+ from dars.core.routing import RouteNode, SPARoute
10
11
  from dars.exporters.base import Exporter
11
12
  from dars.scripts.script import Script
12
13
  from .component import Component
@@ -142,7 +143,117 @@ class Page:
142
143
  return {'type': 'dscript', 'value': obj, **kwargs}
143
144
 
144
145
  class App:
145
- """Main class that represents a Dars application"""
146
+ """
147
+ Main application class for building Dars web and desktop applications.
148
+
149
+ This class represents the root container for a Dars application and handles all
150
+ application-level configuration, routing, pages, and metadata. It supports both
151
+ Single-Page Application (SPA) and Multi-Page Application (MPA) modes.
152
+
153
+ **Modes of Operation:**
154
+
155
+ - **Single-Page App (SPA)**: Set a root Component for client-side routing.
156
+ - **Multi-Page App (MPA)**: Add multiple pages with the `add_page()` method.
157
+ - **Desktop App**: Deploy as a desktop application using Electron or similar.
158
+
159
+ **Props:**
160
+
161
+ - **title** (str): Application title (default: "Dars App").
162
+ - **description** (str): Meta description for SEO.
163
+ - **author** (str): Author name for meta tags.
164
+ - **version** (str): Application version (used in package.json for desktop).
165
+ - **keywords** (list): List of SEO keywords.
166
+ - **language** (str): Document language code (default: "en").
167
+ - **favicon** (str): Path to favicon file.
168
+ - **icon** (str): Path to app icon (used for PWA and meta tags).
169
+ - **apple_touch_icon** (str): Path to Apple touch icon.
170
+ - **apple_mobile_web_app_capable** (bool): Enable Apple mobile web app mode.
171
+ - **apple_mobile_web_app_status_bar_style** (str): Status bar style for Apple devices ("default", "black", "black-translucent").
172
+ - **apple_mobile_web_app_title** (str): Title for Apple home screen.
173
+ - **manifest** (str): Path to PWA manifest.json file.
174
+ - **theme_color** (str): Primary theme color for PWA (default: "#000000").
175
+ - **background_color** (str): Background color for PWA splash screen (default: "#ffffff").
176
+ - **service_worker_path** (str): Path to service worker file.
177
+ - **service_worker_enabled** (bool): Enable service worker registration.
178
+ - **desktop** (bool): Flag for desktop application mode.
179
+ - **devtools** (bool): Auto-open DevTools in desktop development mode (default: True).
180
+ - **ssr_url** (str): URL for Server-Side Rendering backend (optional).
181
+ - **meta** (dict): Custom meta tags and attributes.
182
+
183
+ **Internal Attributes:**
184
+
185
+ - **root** (Component): Root component for SPA mode.
186
+ - **_pages** (dict): Dictionary of pages for MPA mode.
187
+ - **_spa_routes** (dict): SPA route definitions.
188
+ - **_spa_404_page** (Page): Custom 404 error page.
189
+ - **_spa_403_page** (Page): Custom 403 forbidden page.
190
+ - **_spa_loading_page** (Component): Loading page during route transitions.
191
+ - **_spa_error_page** (Component): Error page for runtime errors.
192
+ - **scripts** (list): Global scripts to inject into the app.
193
+ - **global_styles** (dict): Global CSS styles.
194
+ - **event_manager** (EventManager): Application-wide event manager.
195
+
196
+ **SEO & Social Media:**
197
+
198
+ - **og_title, og_description, og_image, og_url**: Open Graph meta tags.
199
+ - **twitter_card, twitter_site, twitter_creator**: Twitter Card meta tags.
200
+ - **robots**: Robots meta tag for search engines.
201
+ - **canonical_url**: Canonical URL for SEO.
202
+
203
+ **PWA Configuration:**
204
+
205
+ - **pwa_enabled** (bool): Enable Progressive Web App support.
206
+ - **pwa_name** (str): PWA display name.
207
+ - **pwa_short_name** (str): PWA short name (max 12 chars).
208
+ - **pwa_display** (str): PWA display mode ("standalone", "fullscreen", "minimal-ui", "browser").
209
+ - **pwa_orientation** (str): PWA orientation ("portrait", "landscape", "portrait-primary", etc.).
210
+
211
+ **Examples:**
212
+
213
+ Single-Page Application (SPA):
214
+ ```python
215
+ from dars.all import *
216
+
217
+ @route("/")
218
+ def home():
219
+ return Container(
220
+ Text("Welcome to Dars!", class_name="text-4xl font-bold"),
221
+ class_name="flex flex-col items-center justify-center min-h-screen"
222
+ )
223
+
224
+ app = App(
225
+ title="My Dars App",
226
+ description="A beautiful Dars application",
227
+ icon="public/icon.png"
228
+ )
229
+
230
+ app.add_page("home", home()) = home()
231
+
232
+ if __name__ == "__main__":
233
+ app.rTimeCompile()
234
+ ```
235
+
236
+ Multi-Page Application (MPA):
237
+ ```python
238
+ app = App(title="My Multi-Page App")
239
+
240
+ app.add_page("home", Page("home", home_component, title="Home"))
241
+ app.add_page("about", Page("about", about_component, title="About Us"))
242
+ app.add_page("contact", Page("contact", contact_component, title="Contact"))
243
+
244
+ if __name__ == "__main__":
245
+ app.rTimeCompile()
246
+ ```
247
+
248
+ Desktop Application:
249
+ ```python
250
+ app = App(
251
+ title="My Desktop App",
252
+ desktop=True,
253
+ devtools=True
254
+ )
255
+ ```
256
+ """
146
257
 
147
258
  def __init__(
148
259
  self,
@@ -6,5 +6,5 @@
6
6
  #
7
7
  # Copyright (c) 2025 ZtaDev
8
8
 
9
- __version__ = "1.9.1"
10
- __release_url__ = "https://github.com/ZtaMDev/Dars-Framework/releases/tag/1.9.1"
9
+ __version__ = "1.9.2"
10
+ __release_url__ = "https://github.com/ZtaMDev/Dars-Framework/releases/tag/1.9.2"
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: dars-framework
3
- Version: 1.9.1
3
+ Version: 1.9.2
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>
@@ -4,7 +4,7 @@ build-backend = "setuptools.build_meta"
4
4
 
5
5
  [project]
6
6
  name = "dars-framework"
7
- version = "1.9.1"
7
+ version = "1.9.2"
8
8
  description = "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."
9
9
  dependencies = [ "rich==15.0.0", "bs4==0.0.2", "uvicorn==0.46.0", "markdown2==2.5.5", "requests==2.33.1", "plotly==6.7.0", "fastapi==0.136.1", "rjsmin==1.2.5", "rcssmin==1.2.2",]
10
10
  license = "MPL-2.0"
File without changes
File without changes