dars-framework 1.2.5__tar.gz → 1.2.6__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 (124) hide show
  1. {dars_framework-1.2.5/dars_framework.egg-info → dars_framework-1.2.6}/PKG-INFO +1 -1
  2. {dars_framework-1.2.5 → dars_framework-1.2.6}/dars/config.py +2 -0
  3. {dars_framework-1.2.5 → dars_framework-1.2.6}/dars/core/component.py +7 -0
  4. {dars_framework-1.2.5 → dars_framework-1.2.6}/dars/exporters/web/html_css_js.py +61 -3
  5. {dars_framework-1.2.5 → dars_framework-1.2.6}/dars/version.py +2 -2
  6. {dars_framework-1.2.5 → dars_framework-1.2.6/dars_framework.egg-info}/PKG-INFO +1 -1
  7. {dars_framework-1.2.5 → dars_framework-1.2.6}/pyproject.toml +1 -1
  8. {dars_framework-1.2.5 → dars_framework-1.2.6}/LICENSE +0 -0
  9. {dars_framework-1.2.5 → dars_framework-1.2.6}/MANIFEST.in +0 -0
  10. {dars_framework-1.2.5 → dars_framework-1.2.6}/README.md +0 -0
  11. {dars_framework-1.2.5 → dars_framework-1.2.6}/dars/__init__.py +0 -0
  12. {dars_framework-1.2.5 → dars_framework-1.2.6}/dars/all.py +0 -0
  13. {dars_framework-1.2.5 → dars_framework-1.2.6}/dars/cli/__init__.py +0 -0
  14. {dars_framework-1.2.5 → dars_framework-1.2.6}/dars/cli/doctor/__init__.py +0 -0
  15. {dars_framework-1.2.5 → dars_framework-1.2.6}/dars/cli/doctor/detect.py +0 -0
  16. {dars_framework-1.2.5 → dars_framework-1.2.6}/dars/cli/doctor/doctor.py +0 -0
  17. {dars_framework-1.2.5 → dars_framework-1.2.6}/dars/cli/doctor/installers.py +0 -0
  18. {dars_framework-1.2.5 → dars_framework-1.2.6}/dars/cli/doctor/persist.py +0 -0
  19. {dars_framework-1.2.5 → dars_framework-1.2.6}/dars/cli/doctor/preflight.py +0 -0
  20. {dars_framework-1.2.5 → dars_framework-1.2.6}/dars/cli/doctor/ui.py +0 -0
  21. {dars_framework-1.2.5 → dars_framework-1.2.6}/dars/cli/hot_reload.py +0 -0
  22. {dars_framework-1.2.5 → dars_framework-1.2.6}/dars/cli/main.py +0 -0
  23. {dars_framework-1.2.5 → dars_framework-1.2.6}/dars/cli/preview.py +0 -0
  24. {dars_framework-1.2.5 → dars_framework-1.2.6}/dars/cli/translations.py +0 -0
  25. {dars_framework-1.2.5 → dars_framework-1.2.6}/dars/components/__init__.py +0 -0
  26. {dars_framework-1.2.5 → dars_framework-1.2.6}/dars/components/advanced/__init__.py +0 -0
  27. {dars_framework-1.2.5 → dars_framework-1.2.6}/dars/components/advanced/accordion.py +0 -0
  28. {dars_framework-1.2.5 → dars_framework-1.2.6}/dars/components/advanced/card.py +0 -0
  29. {dars_framework-1.2.5 → dars_framework-1.2.6}/dars/components/advanced/modal.py +0 -0
  30. {dars_framework-1.2.5 → dars_framework-1.2.6}/dars/components/advanced/navbar.py +0 -0
  31. {dars_framework-1.2.5 → dars_framework-1.2.6}/dars/components/advanced/table.py +0 -0
  32. {dars_framework-1.2.5 → dars_framework-1.2.6}/dars/components/advanced/tabs.py +0 -0
  33. {dars_framework-1.2.5 → dars_framework-1.2.6}/dars/components/basic/__init__.py +0 -0
  34. {dars_framework-1.2.5 → dars_framework-1.2.6}/dars/components/basic/button.py +0 -0
  35. {dars_framework-1.2.5 → dars_framework-1.2.6}/dars/components/basic/checkbox.py +0 -0
  36. {dars_framework-1.2.5 → dars_framework-1.2.6}/dars/components/basic/container.py +0 -0
  37. {dars_framework-1.2.5 → dars_framework-1.2.6}/dars/components/basic/datepicker.py +0 -0
  38. {dars_framework-1.2.5 → dars_framework-1.2.6}/dars/components/basic/image.py +0 -0
  39. {dars_framework-1.2.5 → dars_framework-1.2.6}/dars/components/basic/input.py +0 -0
  40. {dars_framework-1.2.5 → dars_framework-1.2.6}/dars/components/basic/link.py +0 -0
  41. {dars_framework-1.2.5 → dars_framework-1.2.6}/dars/components/basic/markdown.py +0 -0
  42. {dars_framework-1.2.5 → dars_framework-1.2.6}/dars/components/basic/page.py +0 -0
  43. {dars_framework-1.2.5 → dars_framework-1.2.6}/dars/components/basic/progressbar.py +0 -0
  44. {dars_framework-1.2.5 → dars_framework-1.2.6}/dars/components/basic/radiobutton.py +0 -0
  45. {dars_framework-1.2.5 → dars_framework-1.2.6}/dars/components/basic/select.py +0 -0
  46. {dars_framework-1.2.5 → dars_framework-1.2.6}/dars/components/basic/slider.py +0 -0
  47. {dars_framework-1.2.5 → dars_framework-1.2.6}/dars/components/basic/spinner.py +0 -0
  48. {dars_framework-1.2.5 → dars_framework-1.2.6}/dars/components/basic/text.py +0 -0
  49. {dars_framework-1.2.5 → dars_framework-1.2.6}/dars/components/basic/textarea.py +0 -0
  50. {dars_framework-1.2.5 → dars_framework-1.2.6}/dars/components/basic/tooltip.py +0 -0
  51. {dars_framework-1.2.5 → dars_framework-1.2.6}/dars/components/layout/__init__.py +0 -0
  52. {dars_framework-1.2.5 → dars_framework-1.2.6}/dars/components/layout/anchor.py +0 -0
  53. {dars_framework-1.2.5 → dars_framework-1.2.6}/dars/components/layout/flex.py +0 -0
  54. {dars_framework-1.2.5 → dars_framework-1.2.6}/dars/components/layout/grid.py +0 -0
  55. {dars_framework-1.2.5 → dars_framework-1.2.6}/dars/core/__init__.py +0 -0
  56. {dars_framework-1.2.5 → dars_framework-1.2.6}/dars/core/app.py +0 -0
  57. {dars_framework-1.2.5 → dars_framework-1.2.6}/dars/core/events.py +0 -0
  58. {dars_framework-1.2.5 → dars_framework-1.2.6}/dars/core/js_bridge.py +0 -0
  59. {dars_framework-1.2.5 → dars_framework-1.2.6}/dars/core/properties.py +0 -0
  60. {dars_framework-1.2.5 → dars_framework-1.2.6}/dars/core/state.py +0 -0
  61. {dars_framework-1.2.5 → dars_framework-1.2.6}/dars/dars_tests/apps_test/health_check.py +0 -0
  62. {dars_framework-1.2.5 → dars_framework-1.2.6}/dars/dars_tests/run_tests.py +0 -0
  63. {dars_framework-1.2.5 → dars_framework-1.2.6}/dars/dars_tests/tests/test_advanced_components.py +0 -0
  64. {dars_framework-1.2.5 → dars_framework-1.2.6}/dars/dars_tests/tests/test_basic_components.py +0 -0
  65. {dars_framework-1.2.5 → dars_framework-1.2.6}/dars/dars_tests/tests/test_core_and_cli.py +0 -0
  66. {dars_framework-1.2.5 → dars_framework-1.2.6}/dars/dars_tests/tests/test_layout_components.py +0 -0
  67. {dars_framework-1.2.5 → dars_framework-1.2.6}/dars/dars_tests/tests/test_version_check.py +0 -0
  68. {dars_framework-1.2.5 → dars_framework-1.2.6}/dars/docs/__init__.py +0 -0
  69. {dars_framework-1.2.5 → dars_framework-1.2.6}/dars/docs/app.md +0 -0
  70. {dars_framework-1.2.5 → dars_framework-1.2.6}/dars/docs/cli.md +0 -0
  71. {dars_framework-1.2.5 → dars_framework-1.2.6}/dars/docs/components.md +0 -0
  72. {dars_framework-1.2.5 → dars_framework-1.2.6}/dars/docs/custom_components.md +0 -0
  73. {dars_framework-1.2.5 → dars_framework-1.2.6}/dars/docs/events.md +0 -0
  74. {dars_framework-1.2.5 → dars_framework-1.2.6}/dars/docs/exporters.md +0 -0
  75. {dars_framework-1.2.5 → dars_framework-1.2.6}/dars/docs/getting_started.md +0 -0
  76. {dars_framework-1.2.5 → dars_framework-1.2.6}/dars/docs/index.md +0 -0
  77. {dars_framework-1.2.5 → dars_framework-1.2.6}/dars/docs/scripts.md +0 -0
  78. {dars_framework-1.2.5 → dars_framework-1.2.6}/dars/docs/state_management.md +0 -0
  79. {dars_framework-1.2.5 → dars_framework-1.2.6}/dars/exporters/__init__.py +0 -0
  80. {dars_framework-1.2.5 → dars_framework-1.2.6}/dars/exporters/base.py +0 -0
  81. {dars_framework-1.2.5 → dars_framework-1.2.6}/dars/exporters/web/OLD/html_css_js_OLD4.py +0 -0
  82. {dars_framework-1.2.5 → dars_framework-1.2.6}/dars/exporters/web/OLD/html_css_js_old.py +0 -0
  83. {dars_framework-1.2.5 → dars_framework-1.2.6}/dars/exporters/web/OLD/html_css_js_old2.py +0 -0
  84. {dars_framework-1.2.5 → dars_framework-1.2.6}/dars/exporters/web/__init__.py +0 -0
  85. {dars_framework-1.2.5 → dars_framework-1.2.6}/dars/exporters/web/vdom.py +0 -0
  86. {dars_framework-1.2.5 → dars_framework-1.2.6}/dars/js_lib.py +0 -0
  87. {dars_framework-1.2.5 → dars_framework-1.2.6}/dars/scripts/__init__.py +0 -0
  88. {dars_framework-1.2.5 → dars_framework-1.2.6}/dars/scripts/dscript.py +0 -0
  89. {dars_framework-1.2.5 → dars_framework-1.2.6}/dars/scripts/script.py +0 -0
  90. {dars_framework-1.2.5 → dars_framework-1.2.6}/dars/security.py +0 -0
  91. {dars_framework-1.2.5 → dars_framework-1.2.6}/dars/templates/__init__.py +0 -0
  92. {dars_framework-1.2.5 → dars_framework-1.2.6}/dars/templates/__pycache__/__init__.cpython-311.pyc +0 -0
  93. {dars_framework-1.2.5 → dars_framework-1.2.6}/dars/templates/examples/README.md +0 -0
  94. {dars_framework-1.2.5 → dars_framework-1.2.6}/dars/templates/examples/__pycache__/dynamic_event_demo.cpython-311.pyc +0 -0
  95. {dars_framework-1.2.5 → dars_framework-1.2.6}/dars/templates/examples/advanced/Modal_Demo/advanced_modal_demo.py +0 -0
  96. {dars_framework-1.2.5 → dars_framework-1.2.6}/dars/templates/examples/advanced/SimpleDashboard/dashboard.py +0 -0
  97. {dars_framework-1.2.5 → dars_framework-1.2.6}/dars/templates/examples/advanced/SimpleModermWeb/modern_web_app.py +0 -0
  98. {dars_framework-1.2.5 → dars_framework-1.2.6}/dars/templates/examples/advanced/VariousComponents/all_components_demo.py +0 -0
  99. {dars_framework-1.2.5 → dars_framework-1.2.6}/dars/templates/examples/advanced/__init__.py +0 -0
  100. {dars_framework-1.2.5 → dars_framework-1.2.6}/dars/templates/examples/advanced/dState/state_mods_demo.py +0 -0
  101. {dars_framework-1.2.5 → dars_framework-1.2.6}/dars/templates/examples/basic/Forms/form_components.py +0 -0
  102. {dars_framework-1.2.5 → dars_framework-1.2.6}/dars/templates/examples/basic/Forms/simple_form.py +0 -0
  103. {dars_framework-1.2.5 → dars_framework-1.2.6}/dars/templates/examples/basic/HelloWorld/hello_world.py +0 -0
  104. {dars_framework-1.2.5 → dars_framework-1.2.6}/dars/templates/examples/basic/Layouts/flex_layout_responsive.py +0 -0
  105. {dars_framework-1.2.5 → dars_framework-1.2.6}/dars/templates/examples/basic/Layouts/grid_layout_responsive.py +0 -0
  106. {dars_framework-1.2.5 → dars_framework-1.2.6}/dars/templates/examples/basic/Layouts/layout_multipage_demo.py +0 -0
  107. {dars_framework-1.2.5 → dars_framework-1.2.6}/dars/templates/examples/basic/Multipage/multipage_example.py +0 -0
  108. {dars_framework-1.2.5 → dars_framework-1.2.6}/dars/templates/examples/basic/PWA/icon-192x192.png +0 -0
  109. {dars_framework-1.2.5 → dars_framework-1.2.6}/dars/templates/examples/basic/PWA/icon-512x512.png +0 -0
  110. {dars_framework-1.2.5 → dars_framework-1.2.6}/dars/templates/examples/basic/PWA/pwa_custom_icons.py +0 -0
  111. {dars_framework-1.2.5 → dars_framework-1.2.6}/dars/templates/examples/basic/__init__.py +0 -0
  112. {dars_framework-1.2.5 → dars_framework-1.2.6}/dars/templates/examples/demo/__pycache__/complete_app.cpython-311.pyc +0 -0
  113. {dars_framework-1.2.5 → dars_framework-1.2.6}/dars/templates/examples/demo/complete_app.py +0 -0
  114. {dars_framework-1.2.5 → dars_framework-1.2.6}/dars/templates/examples/markdown/MarkdownTemplate/README.md +0 -0
  115. {dars_framework-1.2.5 → dars_framework-1.2.6}/dars/templates/examples/markdown/MarkdownTemplate/markdown_template.py +0 -0
  116. {dars_framework-1.2.5 → dars_framework-1.2.6}/dars/templates/examples/markdown/MarkdownTemplate/other_docs.md +0 -0
  117. {dars_framework-1.2.5 → dars_framework-1.2.6}/dars/templates/examples/markdown/__init__.py +0 -0
  118. {dars_framework-1.2.5 → dars_framework-1.2.6}/dars/templates/html/__init__.py +0 -0
  119. {dars_framework-1.2.5 → dars_framework-1.2.6}/dars_framework.egg-info/SOURCES.txt +0 -0
  120. {dars_framework-1.2.5 → dars_framework-1.2.6}/dars_framework.egg-info/dependency_links.txt +0 -0
  121. {dars_framework-1.2.5 → dars_framework-1.2.6}/dars_framework.egg-info/entry_points.txt +0 -0
  122. {dars_framework-1.2.5 → dars_framework-1.2.6}/dars_framework.egg-info/requires.txt +0 -0
  123. {dars_framework-1.2.5 → dars_framework-1.2.6}/dars_framework.egg-info/top_level.txt +0 -0
  124. {dars_framework-1.2.5 → dars_framework-1.2.6}/setup.cfg +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: dars_framework
3
- Version: 1.2.5
3
+ Version: 1.2.6
4
4
  Summary: Dars is a Python UI framework for building modern, interactive web apps with only Python code. Write your interface in Python, export it to static HTML/CSS/JS, and deploy anywhere.
5
5
  Author-email: ztamdev <ztadevs@gmail.com>
6
6
  License-Expression: MIT
@@ -11,6 +11,8 @@ DEFAULT_CONFIG = {
11
11
  "exclude": ["**/__pycache__", ".git", ".venv", "node_modules"],
12
12
  "bundle": True,
13
13
  "viteMinify": True,
14
+ "markdownHighlight": True,
15
+ "markdownHighlightTheme": "auto",
14
16
  }
15
17
 
16
18
  CONFIG_FILENAME = "dars.config.json"
@@ -250,6 +250,13 @@ class Component(ABC):
250
250
 
251
251
  def mod(self, **attrs):
252
252
  return DeferredAttr(self, attrs)
253
+
254
+ def render_children(self, exporter: 'Exporter') -> str:
255
+ """Render all children of the component using the exporter."""
256
+ children_html = ""
257
+ for child in self.children:
258
+ children_html += exporter.render_component(child)
259
+ return children_html
253
260
 
254
261
 
255
262
  class DeferredAttr:
@@ -2615,7 +2615,12 @@ body {
2615
2615
  # Convert markdown to HTML
2616
2616
  html_content = markdown2.markdown(
2617
2617
  markdown.content,
2618
- extras=["fenced-code-blocks", "tables", "header-ids"]
2618
+ extras=[
2619
+ "fenced-code-blocks",
2620
+ "code-friendly",
2621
+ "tables",
2622
+ "header-ids",
2623
+ ],
2619
2624
  )
2620
2625
  except ImportError:
2621
2626
  # Fallback to basic conversion if markdown2 is not available
@@ -2630,8 +2635,61 @@ body {
2630
2635
 
2631
2636
  class_attr = f'class="{class_name.strip()}"'
2632
2637
  style_attr = f'style="{self.render_styles(markdown.style)}"' if markdown.style else ""
2633
-
2634
- return f'<div id="{component_id}" {class_attr} {style_attr}>{html_content}</div>'
2638
+
2639
+ # Normalize code block classes for client highlighters (e.g., Prism)
2640
+ # markdown2 may emit <code class="lang-python">; convert to language-python
2641
+ import re
2642
+ html_content = re.sub(r'<code class="lang-([a-zA-Z0-9_+-]+)">', r'<code class="language-\1">', html_content)
2643
+ # If a <pre><code> lacks a class, add language-none for Prism to process
2644
+ html_content = re.sub(r'<pre([^>]*)>\s*<code(?![^>]*class=)([^>]*)>', r'<pre\1>\n<code class="language-none"\2>', html_content)
2645
+ # Ensure multiline code blocks render correctly even without extra CSS and allow absolute-positioned copy button
2646
+ html_content = html_content.replace(
2647
+ '<pre><code',
2648
+ '<pre style="white-space: pre; overflow:auto; position: relative;"><code'
2649
+ )
2650
+
2651
+ # Auto-inject highlight.js (CSS + JS + init) once per page if enabled in config and not injected
2652
+ assets = ""
2653
+ cfg_hl = True
2654
+ hl_theme = "auto"
2655
+ try:
2656
+ # Try to read config for markdownHighlight; default True if missing/errors
2657
+ app_source = getattr(getattr(self, 'app', None), '__source__', None)
2658
+ project_root = os.getcwd() if not app_source else os.path.dirname(os.path.abspath(app_source))
2659
+ from dars.config import load_config
2660
+ cfg, _ = load_config(project_root)
2661
+ cfg_hl = bool(cfg.get('markdownHighlight', True))
2662
+ hl_theme = str(cfg.get('markdownHighlightTheme', 'auto')).lower()
2663
+ except Exception:
2664
+ cfg_hl = True
2665
+ if cfg_hl and (not hasattr(self, "_hljs_injected") or not getattr(self, "_hljs_injected")):
2666
+ # Prism.js theme CSS selection
2667
+ css_links = ''
2668
+ if hl_theme == 'dark':
2669
+ css_links = '<link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/prism/1.29.0/themes/prism-okaidia.min.css">\n'
2670
+ elif hl_theme == 'light':
2671
+ css_links = '<link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/prism/1.29.0/themes/prism.min.css">\n'
2672
+ else: # auto
2673
+ css_links = (
2674
+ '<link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/prism/1.29.0/themes/prism.min.css" media="(prefers-color-scheme: light)">\n'
2675
+ '<link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/prism/1.29.0/themes/prism-okaidia.min.css" media="(prefers-color-scheme: dark)">\n'
2676
+ )
2677
+ parts = []
2678
+ parts.append(css_links)
2679
+ parts.append('<style>.dars-code-copy{position:absolute;top:8px;right:8px;background:rgba(0,0,0,0.5);color:#fff;border:none;border-radius:6px;padding:4px 8px;font-size:12px;cursor:pointer;opacity:.0;transition:opacity .2s ease;}pre:hover .dars-code-copy{opacity:.9}.dars-code-copy.copied{background:#16a34a}</style>\n')
2680
+ parts.append('<script src="https://cdnjs.cloudflare.com/ajax/libs/prism/1.29.0/prism.min.js"></script>\n')
2681
+ parts.append('<script>window.Prism=window.Prism||{};Prism.plugins=Prism.plugins||{};Prism.plugins.autoloader=Prism.plugins.autoloader||{};Prism.plugins.autoloader.languages_path="https://cdnjs.cloudflare.com/ajax/libs/prism/1.29.0/components/";</script>\n')
2682
+ parts.append('<script src="https://cdnjs.cloudflare.com/ajax/libs/prism/1.29.0/plugins/autoloader/prism-autoloader.min.js"></script>\n')
2683
+ parts.append('<script>(function(){function addCopyButtons(){document.querySelectorAll("pre code").forEach(function(code){var pre=code.parentElement;if(!pre||pre.querySelector(".dars-code-copy"))return;var btn=document.createElement("button");btn.className="dars-code-copy";btn.type="button";btn.textContent="Copy";btn.addEventListener("click",async function(e){e.stopPropagation();try{await navigator.clipboard.writeText(code.innerText);btn.textContent="Copied";btn.classList.add("copied");setTimeout(function(){btn.textContent="Copy";btn.classList.remove("copied")},1200)}catch(err){btn.textContent="Error";setTimeout(function(){btn.textContent="Copy"},1200)}});pre.appendChild(btn);});}function guessLang(text){var t=text.trim();if(/^{[\\s\\S]*}$/.test(t)||/^\\[/.test(t))return "json";if(/^(pip |python |python3 |dars |#|\\$ )/m.test(t))return "bash";if(/\\b(def |class |import |from |print\\(|self\\b)/.test(t))return "python";return null;}function stripPygments(code){if(code && code.innerHTML && code.innerHTML.indexOf("<span")!==-1){code.textContent = code.innerText;}}function prepareAndHighlight(){document.querySelectorAll("pre code").forEach(function(code){stripPygments(code);if(!code.className||code.className.indexOf("language-")===-1){var g=guessLang(code.innerText);code.classList.add("language-"+(g||"none"));}if(window.Prism&&Prism.highlightElement){Prism.highlightElement(code);}});}document.addEventListener("DOMContentLoaded",function(){try{prepareAndHighlight();}catch(e){};try{addCopyButtons()}catch(e){}});})();</script>')
2684
+ assets = ''.join(parts)
2685
+ setattr(self, "_hljs_injected", True)
2686
+
2687
+ # Add stable theme class to container for easier overriding if needed
2688
+ theme_tag = hl_theme if hl_theme in ('light','dark') else 'auto'
2689
+ class_name = f"{class_name} dars-code-theme-{theme_tag}"
2690
+ class_attr = f'class="{class_name.strip()}"'
2691
+
2692
+ return f'{assets}<div id="{component_id}" {class_attr} {style_attr}>{html_content}</div>'
2635
2693
 
2636
2694
  def _basic_markdown_to_html(self, markdown_text: str) -> str:
2637
2695
  """Basic markdown to HTML conversion as fallback"""
@@ -1,2 +1,2 @@
1
- __version__ = "1.2.5"
2
- __release_url__ = "https://github.com/ZtaMDev/Dars-Framework/releases/tag/1.2.5"
1
+ __version__ = "1.2.6"
2
+ __release_url__ = "https://github.com/ZtaMDev/Dars-Framework/releases/tag/1.2.6"
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: dars_framework
3
- Version: 1.2.5
3
+ Version: 1.2.6
4
4
  Summary: Dars is a Python UI framework for building modern, interactive web apps with only Python code. Write your interface in Python, export it to static HTML/CSS/JS, and deploy anywhere.
5
5
  Author-email: ztamdev <ztadevs@gmail.com>
6
6
  License-Expression: MIT
@@ -4,7 +4,7 @@ build-backend = "setuptools.build_meta"
4
4
 
5
5
  [project]
6
6
  name = "dars_framework"
7
- version = "1.2.5"
7
+ version = "1.2.6"
8
8
  description = "Dars is a Python UI framework for building modern, interactive web apps with only Python code. Write your interface in Python, export it to static HTML/CSS/JS, and deploy anywhere."
9
9
  dependencies = [ "rich==14.2.0", "bs4==0.0.2", "uvicorn==0.35.0", "fastapi==0.116.1", "markdown2==2.5.4", "requests==2.32.5", "rjsmin==1.2.5",]
10
10
  license = "MIT"
File without changes
File without changes
File without changes