dars-framework 1.1.2__tar.gz → 1.1.3__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 (102) hide show
  1. {dars_framework-1.1.2/dars_framework.egg-info → dars_framework-1.1.3}/PKG-INFO +1 -1
  2. {dars_framework-1.1.2 → dars_framework-1.1.3}/dars/cli/main.py +0 -1
  3. {dars_framework-1.1.2 → dars_framework-1.1.3}/dars/cli/translations.py +4 -0
  4. {dars_framework-1.1.2 → dars_framework-1.1.3}/dars/core/app.py +9 -5
  5. {dars_framework-1.1.2 → dars_framework-1.1.3}/dars/docs/app.md +112 -0
  6. {dars_framework-1.1.2 → dars_framework-1.1.3}/dars/docs/components.md +29 -30
  7. {dars_framework-1.1.2 → dars_framework-1.1.3}/dars/exporters/web/html_css_js.py +28 -24
  8. {dars_framework-1.1.2 → dars_framework-1.1.3}/dars/templates/examples/advanced/SimpleDashboard/dashboard.py +1 -4
  9. {dars_framework-1.1.2 → dars_framework-1.1.3}/dars/templates/examples/basic/HelloWorld/hello_world.py +1 -1
  10. {dars_framework-1.1.2 → dars_framework-1.1.3}/dars/version.py +2 -2
  11. {dars_framework-1.1.2 → dars_framework-1.1.3/dars_framework.egg-info}/PKG-INFO +1 -1
  12. {dars_framework-1.1.2 → dars_framework-1.1.3}/pyproject.toml +1 -1
  13. {dars_framework-1.1.2 → dars_framework-1.1.3}/LICENSE +0 -0
  14. {dars_framework-1.1.2 → dars_framework-1.1.3}/MANIFEST.in +0 -0
  15. {dars_framework-1.1.2 → dars_framework-1.1.3}/README.md +0 -0
  16. {dars_framework-1.1.2 → dars_framework-1.1.3}/dars/__init__.py +0 -0
  17. {dars_framework-1.1.2 → dars_framework-1.1.3}/dars/all.py +0 -0
  18. {dars_framework-1.1.2 → dars_framework-1.1.3}/dars/cli/__init__.py +0 -0
  19. {dars_framework-1.1.2 → dars_framework-1.1.3}/dars/cli/hot_reload.py +0 -0
  20. {dars_framework-1.1.2 → dars_framework-1.1.3}/dars/cli/preview.py +0 -0
  21. {dars_framework-1.1.2 → dars_framework-1.1.3}/dars/components/__init__.py +0 -0
  22. {dars_framework-1.1.2 → dars_framework-1.1.3}/dars/components/advanced/__init__.py +0 -0
  23. {dars_framework-1.1.2 → dars_framework-1.1.3}/dars/components/advanced/accordion.py +0 -0
  24. {dars_framework-1.1.2 → dars_framework-1.1.3}/dars/components/advanced/card.py +0 -0
  25. {dars_framework-1.1.2 → dars_framework-1.1.3}/dars/components/advanced/modal.py +0 -0
  26. {dars_framework-1.1.2 → dars_framework-1.1.3}/dars/components/advanced/navbar.py +0 -0
  27. {dars_framework-1.1.2 → dars_framework-1.1.3}/dars/components/advanced/table.py +0 -0
  28. {dars_framework-1.1.2 → dars_framework-1.1.3}/dars/components/advanced/tabs.py +0 -0
  29. {dars_framework-1.1.2 → dars_framework-1.1.3}/dars/components/basic/__init__.py +0 -0
  30. {dars_framework-1.1.2 → dars_framework-1.1.3}/dars/components/basic/button.py +0 -0
  31. {dars_framework-1.1.2 → dars_framework-1.1.3}/dars/components/basic/checkbox.py +0 -0
  32. {dars_framework-1.1.2 → dars_framework-1.1.3}/dars/components/basic/container.py +0 -0
  33. {dars_framework-1.1.2 → dars_framework-1.1.3}/dars/components/basic/datepicker.py +0 -0
  34. {dars_framework-1.1.2 → dars_framework-1.1.3}/dars/components/basic/image.py +0 -0
  35. {dars_framework-1.1.2 → dars_framework-1.1.3}/dars/components/basic/input.py +0 -0
  36. {dars_framework-1.1.2 → dars_framework-1.1.3}/dars/components/basic/link.py +0 -0
  37. {dars_framework-1.1.2 → dars_framework-1.1.3}/dars/components/basic/markdown.py +0 -0
  38. {dars_framework-1.1.2 → dars_framework-1.1.3}/dars/components/basic/page.py +0 -0
  39. {dars_framework-1.1.2 → dars_framework-1.1.3}/dars/components/basic/progressbar.py +0 -0
  40. {dars_framework-1.1.2 → dars_framework-1.1.3}/dars/components/basic/radiobutton.py +0 -0
  41. {dars_framework-1.1.2 → dars_framework-1.1.3}/dars/components/basic/select.py +0 -0
  42. {dars_framework-1.1.2 → dars_framework-1.1.3}/dars/components/basic/slider.py +0 -0
  43. {dars_framework-1.1.2 → dars_framework-1.1.3}/dars/components/basic/spinner.py +0 -0
  44. {dars_framework-1.1.2 → dars_framework-1.1.3}/dars/components/basic/text.py +0 -0
  45. {dars_framework-1.1.2 → dars_framework-1.1.3}/dars/components/basic/textarea.py +0 -0
  46. {dars_framework-1.1.2 → dars_framework-1.1.3}/dars/components/basic/tooltip.py +0 -0
  47. {dars_framework-1.1.2 → dars_framework-1.1.3}/dars/components/layout/__init__.py +0 -0
  48. {dars_framework-1.1.2 → dars_framework-1.1.3}/dars/components/layout/anchor.py +0 -0
  49. {dars_framework-1.1.2 → dars_framework-1.1.3}/dars/components/layout/flex.py +0 -0
  50. {dars_framework-1.1.2 → dars_framework-1.1.3}/dars/components/layout/grid.py +0 -0
  51. {dars_framework-1.1.2 → dars_framework-1.1.3}/dars/core/__init__.py +0 -0
  52. {dars_framework-1.1.2 → dars_framework-1.1.3}/dars/core/component.py +0 -0
  53. {dars_framework-1.1.2 → dars_framework-1.1.3}/dars/core/events.py +0 -0
  54. {dars_framework-1.1.2 → dars_framework-1.1.3}/dars/core/properties.py +0 -0
  55. {dars_framework-1.1.2 → dars_framework-1.1.3}/dars/docs/__init__.py +0 -0
  56. {dars_framework-1.1.2 → dars_framework-1.1.3}/dars/docs/cli.md +0 -0
  57. {dars_framework-1.1.2 → dars_framework-1.1.3}/dars/docs/custom_components.md +0 -0
  58. {dars_framework-1.1.2 → dars_framework-1.1.3}/dars/docs/events.md +0 -0
  59. {dars_framework-1.1.2 → dars_framework-1.1.3}/dars/docs/exporters.md +0 -0
  60. {dars_framework-1.1.2 → dars_framework-1.1.3}/dars/docs/getting_started.md +0 -0
  61. {dars_framework-1.1.2 → dars_framework-1.1.3}/dars/docs/index.md +0 -0
  62. {dars_framework-1.1.2 → dars_framework-1.1.3}/dars/docs/scripts.md +0 -0
  63. {dars_framework-1.1.2 → dars_framework-1.1.3}/dars/exporters/__init__.py +0 -0
  64. {dars_framework-1.1.2 → dars_framework-1.1.3}/dars/exporters/base.py +0 -0
  65. {dars_framework-1.1.2 → dars_framework-1.1.3}/dars/exporters/web/OLD/html_css_js_OLD4.py +0 -0
  66. {dars_framework-1.1.2 → dars_framework-1.1.3}/dars/exporters/web/OLD/html_css_js_old.py +0 -0
  67. {dars_framework-1.1.2 → dars_framework-1.1.3}/dars/exporters/web/OLD/html_css_js_old2.py +0 -0
  68. {dars_framework-1.1.2 → dars_framework-1.1.3}/dars/exporters/web/__init__.py +0 -0
  69. {dars_framework-1.1.2 → dars_framework-1.1.3}/dars/scripts/__init__.py +0 -0
  70. {dars_framework-1.1.2 → dars_framework-1.1.3}/dars/scripts/dscript.py +0 -0
  71. {dars_framework-1.1.2 → dars_framework-1.1.3}/dars/scripts/script.py +0 -0
  72. {dars_framework-1.1.2 → dars_framework-1.1.3}/dars/templates/__init__.py +0 -0
  73. {dars_framework-1.1.2 → dars_framework-1.1.3}/dars/templates/__pycache__/__init__.cpython-311.pyc +0 -0
  74. {dars_framework-1.1.2 → dars_framework-1.1.3}/dars/templates/examples/README.md +0 -0
  75. {dars_framework-1.1.2 → dars_framework-1.1.3}/dars/templates/examples/__pycache__/dynamic_event_demo.cpython-311.pyc +0 -0
  76. {dars_framework-1.1.2 → dars_framework-1.1.3}/dars/templates/examples/advanced/Modal_Demo/advanced_modal_demo.py +0 -0
  77. {dars_framework-1.1.2 → dars_framework-1.1.3}/dars/templates/examples/advanced/SimpleModermWeb/modern_web_app.py +0 -0
  78. {dars_framework-1.1.2 → dars_framework-1.1.3}/dars/templates/examples/advanced/VariousComponents/all_components_demo.py +0 -0
  79. {dars_framework-1.1.2 → dars_framework-1.1.3}/dars/templates/examples/advanced/__init__.py +0 -0
  80. {dars_framework-1.1.2 → dars_framework-1.1.3}/dars/templates/examples/basic/Forms/form_components.py +0 -0
  81. {dars_framework-1.1.2 → dars_framework-1.1.3}/dars/templates/examples/basic/Forms/simple_form.py +0 -0
  82. {dars_framework-1.1.2 → dars_framework-1.1.3}/dars/templates/examples/basic/Layouts/flex_layout_responsive.py +0 -0
  83. {dars_framework-1.1.2 → dars_framework-1.1.3}/dars/templates/examples/basic/Layouts/grid_layout_responsive.py +0 -0
  84. {dars_framework-1.1.2 → dars_framework-1.1.3}/dars/templates/examples/basic/Layouts/layout_multipage_demo.py +0 -0
  85. {dars_framework-1.1.2 → dars_framework-1.1.3}/dars/templates/examples/basic/Multipage/multipage_example.py +0 -0
  86. {dars_framework-1.1.2 → dars_framework-1.1.3}/dars/templates/examples/basic/PWA/icon-192x192.png +0 -0
  87. {dars_framework-1.1.2 → dars_framework-1.1.3}/dars/templates/examples/basic/PWA/icon-512x512.png +0 -0
  88. {dars_framework-1.1.2 → dars_framework-1.1.3}/dars/templates/examples/basic/PWA/pwa_custom_icons.py +0 -0
  89. {dars_framework-1.1.2 → dars_framework-1.1.3}/dars/templates/examples/basic/__init__.py +0 -0
  90. {dars_framework-1.1.2 → dars_framework-1.1.3}/dars/templates/examples/demo/__pycache__/complete_app.cpython-311.pyc +0 -0
  91. {dars_framework-1.1.2 → dars_framework-1.1.3}/dars/templates/examples/demo/complete_app.py +0 -0
  92. {dars_framework-1.1.2 → dars_framework-1.1.3}/dars/templates/examples/markdown/MarkdownTemplate/README.md +0 -0
  93. {dars_framework-1.1.2 → dars_framework-1.1.3}/dars/templates/examples/markdown/MarkdownTemplate/markdown_template.py +0 -0
  94. {dars_framework-1.1.2 → dars_framework-1.1.3}/dars/templates/examples/markdown/MarkdownTemplate/other_docs.md +0 -0
  95. {dars_framework-1.1.2 → dars_framework-1.1.3}/dars/templates/examples/markdown/__init__.py +0 -0
  96. {dars_framework-1.1.2 → dars_framework-1.1.3}/dars/templates/html/__init__.py +0 -0
  97. {dars_framework-1.1.2 → dars_framework-1.1.3}/dars_framework.egg-info/SOURCES.txt +0 -0
  98. {dars_framework-1.1.2 → dars_framework-1.1.3}/dars_framework.egg-info/dependency_links.txt +0 -0
  99. {dars_framework-1.1.2 → dars_framework-1.1.3}/dars_framework.egg-info/entry_points.txt +0 -0
  100. {dars_framework-1.1.2 → dars_framework-1.1.3}/dars_framework.egg-info/requires.txt +0 -0
  101. {dars_framework-1.1.2 → dars_framework-1.1.3}/dars_framework.egg-info/top_level.txt +0 -0
  102. {dars_framework-1.1.2 → dars_framework-1.1.3}/setup.cfg +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: dars-framework
3
- Version: 1.1.2
3
+ Version: 1.1.3
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 <zondax2009@gmail.com>
6
6
  License: MIT License
@@ -368,7 +368,6 @@ class DarsExporter:
368
368
  info_table.add_row(translator.get('scripts'), str(stats['scripts_count']))
369
369
  info_table.add_row(translator.get('global_styles'), str(stats['global_styles_count']))
370
370
  info_table.add_row(translator.get('theme'), app.config.get('theme', 'light'))
371
- info_table.add_row(translator.get('responsive'), str(app.config.get('responsive', True)))
372
371
 
373
372
  console.print(info_table)
374
373
 
@@ -17,6 +17,8 @@ translations = {
17
17
  'info_help': "Show application information",
18
18
  'formats_help': "Show supported formats",
19
19
  'preview_help': "Preview information",
20
+ 'property_column': "Property",
21
+ 'value_column': "Value",
20
22
  'preview_cmd_help': "Preview exported application",
21
23
  'init_help': "Create a Dars project",
22
24
  'template_not_found': "Template '{template}' not found",
@@ -171,6 +173,8 @@ translations = {
171
173
  'preview_help': "Información de preview",
172
174
  'preview_cmd_help': "Previsualizar aplicación exportada",
173
175
  'init_help': "Crea un proyecto Dars",
176
+ 'property_column': "Propiedad",
177
+ 'value_column': "Valor",
174
178
 
175
179
  # Export command
176
180
  'file_help': "Archivo Python con la aplicación Dars",
@@ -127,7 +127,7 @@ class Page:
127
127
  class App:
128
128
  """Main class that represents a Dars application"""
129
129
 
130
- def rTimeCompile(self, exporter=None, port=None, add_file_types=".py, .js, .css"):
130
+ def rTimeCompile(self, exporter=None, port=None, add_file_types=".py, .js, .css", watchfiledialog=False):
131
131
  """
132
132
  Generates a quick preview of the app on a local server using an exporter
133
133
  (default: HTMLCSSJSExporter) and serving the files from a temporary directory.
@@ -145,6 +145,8 @@ class App:
145
145
  import shutil
146
146
  import traceback
147
147
 
148
+ self.watchfiledialog = watchfiledialog
149
+
148
150
  @contextmanager
149
151
  def pushd(path):
150
152
  """Cambia temporalmente el cwd y lo restaura al salir."""
@@ -425,11 +427,13 @@ class App:
425
427
  subtitle=f"Project root: {os.path.basename(project_root)}",
426
428
  border_style="magenta"
427
429
  )
428
- console.print(panel)
430
+ if self.watchfiledialog:
431
+ console.print(panel)
429
432
  else:
430
- print(f"[Dars] Watching {len(files_to_watch)} files in {project_root}:")
431
- for f in files_to_watch:
432
- print(" -", os.path.relpath(f, project_root))
433
+ if self.watchfiledialog:
434
+ print(f"[Dars] Watching {len(files_to_watch)} files in {project_root}:")
435
+ for f in files_to_watch:
436
+ print(" -", os.path.relpath(f, project_root))
433
437
 
434
438
  # Loop principal: espera a Ctrl+C
435
439
  while not shutdown_event.is_set():
@@ -27,6 +27,118 @@ class App:
27
27
  ):
28
28
  ```
29
29
 
30
+ ## Global Styles Management
31
+
32
+ ### Enhanced add_global_style() Method
33
+
34
+ The `App` class now includes an enhanced `add_global_style()` method that supports both inline style definitions and external CSS file imports.
35
+
36
+
37
+ #### Usage Examples
38
+
39
+ **1. Inline Style Definition (Traditional)**
40
+ ```python
41
+ app.add_global_style(
42
+ selector=".my-button",
43
+ styles={
44
+ "background-color": "#4CAF50",
45
+ "color": "white",
46
+ "padding": "10px 20px",
47
+ "border-radius": "5px"
48
+ }
49
+ )
50
+ ```
51
+
52
+ **2. External CSS File Import (New in v1.1.2)**
53
+ ```python
54
+ app.add_global_style(file_path="styles.css")
55
+ ```
56
+
57
+ **3. Combined Usage**
58
+ ```python
59
+ # Add inline styles
60
+ app.add_global_style(
61
+ selector=".primary-btn",
62
+ styles={
63
+ "background-color": "#007bff",
64
+ "color": "white"
65
+ }
66
+ )
67
+
68
+ # Import external CSS file
69
+ app.add_global_style(file_path="components.css")
70
+ ```
71
+
72
+ #### Practical Example with External CSS
73
+
74
+ **main.py:**
75
+ ```python
76
+ from dars.all import *
77
+
78
+ app = App(title="Dars Styling Test")
79
+
80
+ index = Page(
81
+ Container(
82
+ Button("Styled Button", class_name="button-styling-test"),
83
+ id="page_sub_container"
84
+ )
85
+ )
86
+
87
+ app.add_page(name="index", root=index, title="index", index=True)
88
+ app.add_global_style(file_path="styles.css")
89
+
90
+ if __name__ == "__main__":
91
+ app.rTimeCompile(add_file_types=".py, .css")
92
+ ```
93
+
94
+ **styles.css:**
95
+ ```css
96
+ .button-styling-test {
97
+ background-color: rgb(51, 255, 0);
98
+ padding: 15px 30px;
99
+ border-radius: 8px;
100
+ border: none;
101
+ font-weight: bold;
102
+ cursor: pointer;
103
+ }
104
+
105
+ .button-styling-test:hover {
106
+ background-color: rgb(30, 200, 0);
107
+ transform: scale(1.05);
108
+ }
109
+
110
+ #page_sub_container {
111
+ padding: 20px;
112
+ background-color: #f5f5f5;
113
+ min-height: 100vh;
114
+ }
115
+ ```
116
+
117
+ ### Hot Reload for CSS Files
118
+
119
+ When using `app.rTimeCompile()` with the `add_file_types=".css"` parameter, the development server automatically watches for changes in CSS files and reloads the application when modifications are detected.
120
+
121
+ ```python
122
+ # Watch for both Python and CSS file changes
123
+ app.rTimeCompile(add_file_types=".py, .css")
124
+
125
+ # Or watch for CSS files only
126
+ app.rTimeCompile(add_file_types=".css")
127
+ ```
128
+
129
+ ### Benefits of External CSS Import
130
+
131
+ 1. **Separation of Concerns**: Keep styles separate from application logic
132
+ 2. **Better Organization**: Maintain complex stylesheets in dedicated files
133
+ 3. **Team Collaboration**: Designers and developers can work simultaneously
134
+ 4. **CSS Preprocessors**: Use SASS, LESS, or other preprocessors
135
+ 5. **Performance**: Browser caching for external CSS files
136
+
137
+ ### Backward Compatibility
138
+
139
+ The enhanced method maintains full backward compatibility - existing code using `add_global_style(selector, styles)` will continue to work without modification.
140
+
141
+
30
142
  ## PWA Configuration Properties
31
143
 
32
144
  The App class includes these PWA-specific properties:
@@ -19,13 +19,13 @@ This simplifies integration and improves the developer experience.
19
19
 
20
20
  Components are the fundamental elements of Dars that represent UI elements. Each component encapsulates its appearance, behavior, and state, allowing you to create complex interfaces by composing simple elements.
21
21
 
22
- To learn how to create your own custom components, refer to the documentation in [Custom Components](custom_components.md).
22
+ To learn how to create your own custom components, refer to the documentation in [Custom Components](#custom-components-in-dars-framework).
23
23
 
24
24
  ## Event Handling with dScript
25
25
 
26
26
  Dars provides a powerful way to handle user interactions through the `dScript` class. You can attach event handlers to interactive components like `Button` and `Input` to create dynamic and responsive user interfaces.
27
27
 
28
- For a complete list of available event types and how to use them, refer to the documentation in [Events](events.md).
28
+ For a complete list of available event types and how to use them, refer to the documentation in [Events](#events-in-dars).
29
29
 
30
30
  ### Basic Usage
31
31
 
@@ -87,34 +87,34 @@ input_field = Input(
87
87
  ### Quick Access
88
88
 
89
89
  - [Base Component Class](#base-component-class)
90
- - [Component Search](#Component-Search-and-Modification)
91
- - [Page](#Page)
92
- - [Text](#Text)
93
- - [Button](#Button)
94
- - [Input](#Input)
95
- - [Container](#Container)
96
- - [Markdown](#Markdown)
97
- - [Image](#Image)
98
- - [Link](#Link)
99
- - [Textarea](#Textarea)
100
- - [Checkbox](#Checkbox)
101
- - [RadioButton](#RadioButton)
102
- - [Select](#Select)
103
- - [Slider](#Slider)
104
- - [ProgressBar](#ProgressBar)
105
- - [Tooltip](#Tooltip)
106
- - [DatePicker](#DatePicker)
107
- - [Card](#Card)
108
- - [Modal](#Modal)
109
- - [Navbar](#Navbar)
110
- - [Accordion](#Accordion)
111
- - [Tabs](#Tabs)
112
- - [Table](#Table)
90
+ - [Component Search](#component-search-and-modification)
91
+ - [Page](#page)
92
+ - [Text](#text)
93
+ - [Button](#button)
94
+ - [Input](#input)
95
+ - [Container](#container)
96
+ - [Markdown](#markdown)
97
+ - [Image](#image)
98
+ - [Link](#link)
99
+ - [Textarea](#textarea)
100
+ - [Checkbox](#checkbox)
101
+ - [RadioButton](#radiobutton)
102
+ - [Select](#select)
103
+ - [Slider](#slider)
104
+ - [ProgressBar](#progressBar)
105
+ - [Tooltip](#tooltip)
106
+ - [DatePicker](#datepicker)
107
+ - [Card](#card)
108
+ - [Modal](#modal)
109
+ - [Navbar](#navbar)
110
+ - [Accordion](#accordion)
111
+ - [Tabs](#tabs)
112
+ - [Table](#table)
113
113
  - [Layout Components](#layout-components)
114
- - [GridLayout](#GridLayout)
115
- - [FlexLayout](#FlexLayout)
116
- - [LayoutBase](#LayoutBase)
117
- - [AnchorPoint](#AnchorPoint)
114
+ - [GridLayout](#gridlayout)
115
+ - [FlexLayout](#flexlayout)
116
+ - [LayoutBase](#layoutbase)
117
+ - [AnchorPoint](#anchorpoint)
118
118
 
119
119
  ---
120
120
 
@@ -1675,4 +1675,3 @@ save_button = Button("Guardar", style=PRIMARY_BUTTON_STYLES)
1675
1675
 
1676
1676
  Components provide a solid foundation for creating modern and responsive user interfaces that can be exported to multiple platforms while maintaining consistency and functionality.
1677
1677
 
1678
-
@@ -80,9 +80,11 @@ class HTMLCSSJSExporter(Exporter):
80
80
  shutil.copy2(os.path.join(project_root, src), os.path.join(output_path, os.path.basename(src)))
81
81
  # NOTA: No copiar ejecutables ni nada fuera del proyecto
82
82
 
83
- # Generar CSS global (compartido)
84
- css_content = self.generate_css(app)
85
- self.write_file(os.path.join(output_path, "styles.css"), css_content)
83
+ base_css_content = self.generate_base_css() # Nuevo método para estilos base
84
+ custom_css_content = self.generate_custom_css(app) # Nuevo método para estilos personalizados
85
+
86
+ self.write_file(os.path.join(output_path, "runtime_css.css"), base_css_content)
87
+ self.write_file(os.path.join(output_path, "styles.css"), custom_css_content)
86
88
 
87
89
  # Multipágina: exportar un HTML, CSS y JS por cada página registrada
88
90
  if hasattr(app, "is_multipage") and app.is_multipage():
@@ -493,7 +495,7 @@ self.addEventListener('fetch', event => {
493
495
  {links_html}
494
496
  {og_tags_html}
495
497
  {twitter_tags_html}
496
- <link rel=\"stylesheet\" href=\"https://cdnjs.cloudflare.com/ajax/libs/font-awesome/4.7.0/css/font-awesome.min.css\">\n <link rel=\"stylesheet\" href=\"{css_file}\">
498
+ <link rel=\"stylesheet\" href=\"https://cdnjs.cloudflare.com/ajax/libs/font-awesome/4.7.0/css/font-awesome.min.css\">\n <link rel=\"stylesheet\" href=\"runtime_css.css\">\n <link rel=\"stylesheet\" href=\"{css_file}\">
497
499
  </head>
498
500
  <body>
499
501
  {body_content}
@@ -548,6 +550,25 @@ if ('serviceWorker' in navigator) {
548
550
  </script>
549
551
  """)
550
552
  return "\n ".join(links)
553
+ def generate_custom_css(self, app: App) -> str:
554
+ """Genera solo los estilos personalizados de la aplicación"""
555
+ css_content = ""
556
+
557
+ # Agregar estilos globales de la aplicación definidos por el usuario
558
+ for selector, styles in app.global_styles.items():
559
+ css_content += f"{selector} {{\n"
560
+ css_content += f" {self.render_styles(styles)}\n"
561
+ css_content += "}\n\n"
562
+
563
+ # Agregar contenido de archivos CSS globales
564
+ for file_path in app.global_style_files:
565
+ try:
566
+ with open(file_path, "r", encoding="utf-8") as f:
567
+ css_content += f.read() + "\n\n"
568
+ except Exception as e:
569
+ print(f"[Dars] Warning: could not read CSS file '{file_path}': {e}")
570
+
571
+ return css_content
551
572
 
552
573
  def _generate_open_graph_tags(self, app: App) -> str:
553
574
  """Genera todos los tags Open Graph para redes sociales"""
@@ -571,9 +592,9 @@ if ('serviceWorker' in navigator) {
571
592
 
572
593
  return '\n'.join(twitter_html)
573
594
 
574
- def generate_css(self, app: App) -> str:
575
- """Genera el contenido CSS"""
576
- css_content = """/* Estilos base de Dars */
595
+ def generate_base_css(self) -> str:
596
+ """Genera el contenido CSS base"""
597
+ return """/* Estilos base de Dars */
577
598
  * {
578
599
  box-sizing: border-box;
579
600
  }
@@ -1250,24 +1271,7 @@ body {
1250
1271
  background-color: #444;
1251
1272
  }
1252
1273
  """
1253
-
1254
- # Agregar estilos globales de la aplicación definidos por el usuario
1255
- for selector, styles in app.global_styles.items():
1256
- css_content += f"{selector} {{\n"
1257
- css_content += f" {self.render_styles(styles)}\n"
1258
- css_content += "}\n\n"
1259
1274
 
1260
- # Agregar contenido de archivos CSS globales
1261
- for file_path in app.global_style_files:
1262
- try:
1263
- with open(file_path, "r", encoding="utf-8") as f:
1264
- css_content += f.read() + "\n\n"
1265
- except Exception as e:
1266
- print(f"[Dars] Warning: could not read CSS file '{file_path}': {e}")
1267
-
1268
-
1269
- return css_content
1270
-
1271
1275
  def generate_javascript(self, app: App, page_root: Component) -> str:
1272
1276
  """Genera el contenido JavaScript específico para una página"""
1273
1277
  js_content = """// Dars Runtime - Página específica
@@ -432,9 +432,6 @@ main_container.add_child(content_area)
432
432
  app.set_root(main_container)
433
433
  app.add_script(script)
434
434
 
435
- # Para exportar esta aplicación, ejecuta:
436
- # ./dars_exporter export examples/advanced/dashboard.py --format html --output ./dashboard_output
437
-
438
435
  if __name__ == "__main__":
439
- app.rTimeCompile() # Preview/compilación rápida
436
+ app.rTimeCompile(watchfiledialog=True) # Preview/compilación rápida
440
437
 
@@ -97,5 +97,5 @@ app.set_root(container)
97
97
  app.add_script(script)
98
98
 
99
99
  if __name__ == '__main__':
100
- app.rTimeCompile()
100
+ app.rTimeCompile(watchfiledialog=True)
101
101
 
@@ -1,2 +1,2 @@
1
- __version__ = "1.1.2"
2
- __release_url__ = "https://github.com/ZtaMDev/Dars-Framework/releases/tag/1.1.2"
1
+ __version__ = "1.1.3"
2
+ __release_url__ = "https://github.com/ZtaMDev/Dars-Framework/releases/tag/1.1.3"
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: dars-framework
3
- Version: 1.1.2
3
+ Version: 1.1.3
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 <zondax2009@gmail.com>
6
6
  License: MIT License
@@ -1,6 +1,6 @@
1
1
  [project]
2
2
  name = "dars-framework"
3
- version = "1.1.2"
3
+ version = "1.1.3"
4
4
  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."
5
5
  authors = [
6
6
  { name="ztamdev", email="zondax2009@gmail.com" }
File without changes
File without changes
File without changes