nextpy-framework 3.8.0__tar.gz → 3.9.0__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 (141) hide show
  1. {nextpy_framework-3.8.0 → nextpy_framework-3.9.0}/.nextpy_framework/nextpy/__init__.py +1 -1
  2. {nextpy_framework-3.8.0 → nextpy_framework-3.9.0}/.nextpy_framework/nextpy/cli.py +127 -76
  3. {nextpy_framework-3.8.0 → nextpy_framework-3.9.0}/.nextpy_framework/nextpy_framework.egg-info/PKG-INFO +3 -3
  4. {nextpy_framework-3.8.0 → nextpy_framework-3.9.0}/PKG-INFO +3 -3
  5. {nextpy_framework-3.8.0 → nextpy_framework-3.9.0}/README.md +2 -2
  6. {nextpy_framework-3.8.0 → nextpy_framework-3.9.0}/pyproject.toml +1 -1
  7. {nextpy_framework-3.8.0 → nextpy_framework-3.9.0}/.nextpy_framework/nextpy/ast_parser.py +0 -0
  8. {nextpy_framework-3.8.0 → nextpy_framework-3.9.0}/.nextpy_framework/nextpy/auth.py +0 -0
  9. {nextpy_framework-3.8.0 → nextpy_framework-3.9.0}/.nextpy_framework/nextpy/builder.py +0 -0
  10. {nextpy_framework-3.8.0 → nextpy_framework-3.9.0}/.nextpy_framework/nextpy/components/__init__.py +0 -0
  11. {nextpy_framework-3.8.0 → nextpy_framework-3.9.0}/.nextpy_framework/nextpy/components/debug/AutoDebug.py +0 -0
  12. {nextpy_framework-3.8.0 → nextpy_framework-3.9.0}/.nextpy_framework/nextpy/components/debug/AutoDebug_v3.py +0 -0
  13. {nextpy_framework-3.8.0 → nextpy_framework-3.9.0}/.nextpy_framework/nextpy/components/debug/DebugIcon.py +0 -0
  14. {nextpy_framework-3.8.0 → nextpy_framework-3.9.0}/.nextpy_framework/nextpy/components/debug/DebugIconFixed.py +0 -0
  15. {nextpy_framework-3.8.0 → nextpy_framework-3.9.0}/.nextpy_framework/nextpy/components/feedback.py +0 -0
  16. {nextpy_framework-3.8.0 → nextpy_framework-3.9.0}/.nextpy_framework/nextpy/components/form.py +0 -0
  17. {nextpy_framework-3.8.0 → nextpy_framework-3.9.0}/.nextpy_framework/nextpy/components/head.py +0 -0
  18. {nextpy_framework-3.8.0 → nextpy_framework-3.9.0}/.nextpy_framework/nextpy/components/hooks_provider.py +0 -0
  19. {nextpy_framework-3.8.0 → nextpy_framework-3.9.0}/.nextpy_framework/nextpy/components/image.py +0 -0
  20. {nextpy_framework-3.8.0 → nextpy_framework-3.9.0}/.nextpy_framework/nextpy/components/layout.py +0 -0
  21. {nextpy_framework-3.8.0 → nextpy_framework-3.9.0}/.nextpy_framework/nextpy/components/link.py +0 -0
  22. {nextpy_framework-3.8.0 → nextpy_framework-3.9.0}/.nextpy_framework/nextpy/components/loader.py +0 -0
  23. {nextpy_framework-3.8.0 → nextpy_framework-3.9.0}/.nextpy_framework/nextpy/components/navigation.py +0 -0
  24. {nextpy_framework-3.8.0 → nextpy_framework-3.9.0}/.nextpy_framework/nextpy/components/toast.py +0 -0
  25. {nextpy_framework-3.8.0 → nextpy_framework-3.9.0}/.nextpy_framework/nextpy/components/ui.py +0 -0
  26. {nextpy_framework-3.8.0 → nextpy_framework-3.9.0}/.nextpy_framework/nextpy/components/visual.py +0 -0
  27. {nextpy_framework-3.8.0 → nextpy_framework-3.9.0}/.nextpy_framework/nextpy/components.py +0 -0
  28. {nextpy_framework-3.8.0 → nextpy_framework-3.9.0}/.nextpy_framework/nextpy/conf.py +0 -0
  29. {nextpy_framework-3.8.0 → nextpy_framework-3.9.0}/.nextpy_framework/nextpy/config.py +0 -0
  30. {nextpy_framework-3.8.0 → nextpy_framework-3.9.0}/.nextpy_framework/nextpy/core/__init__.py +0 -0
  31. {nextpy_framework-3.8.0 → nextpy_framework-3.9.0}/.nextpy_framework/nextpy/core/builder.py +0 -0
  32. {nextpy_framework-3.8.0 → nextpy_framework-3.9.0}/.nextpy_framework/nextpy/core/component_renderer.py +0 -0
  33. {nextpy_framework-3.8.0 → nextpy_framework-3.9.0}/.nextpy_framework/nextpy/core/component_router.py +0 -0
  34. {nextpy_framework-3.8.0 → nextpy_framework-3.9.0}/.nextpy_framework/nextpy/core/data_fetching.py +0 -0
  35. {nextpy_framework-3.8.0 → nextpy_framework-3.9.0}/.nextpy_framework/nextpy/core/demo_pages_simple.py +0 -0
  36. {nextpy_framework-3.8.0 → nextpy_framework-3.9.0}/.nextpy_framework/nextpy/core/demo_router.py +0 -0
  37. {nextpy_framework-3.8.0 → nextpy_framework-3.9.0}/.nextpy_framework/nextpy/core/renderer.py +0 -0
  38. {nextpy_framework-3.8.0 → nextpy_framework-3.9.0}/.nextpy_framework/nextpy/core/router.py +0 -0
  39. {nextpy_framework-3.8.0 → nextpy_framework-3.9.0}/.nextpy_framework/nextpy/core/sync.py +0 -0
  40. {nextpy_framework-3.8.0 → nextpy_framework-3.9.0}/.nextpy_framework/nextpy/db.py +0 -0
  41. {nextpy_framework-3.8.0 → nextpy_framework-3.9.0}/.nextpy_framework/nextpy/debug/core.py +0 -0
  42. {nextpy_framework-3.8.0 → nextpy_framework-3.9.0}/.nextpy_framework/nextpy/debug/performance.py +0 -0
  43. {nextpy_framework-3.8.0 → nextpy_framework-3.9.0}/.nextpy_framework/nextpy/debug/ui.py +0 -0
  44. {nextpy_framework-3.8.0 → nextpy_framework-3.9.0}/.nextpy_framework/nextpy/debug/websocket.py +0 -0
  45. {nextpy_framework-3.8.0 → nextpy_framework-3.9.0}/.nextpy_framework/nextpy/dev_server.py +0 -0
  46. {nextpy_framework-3.8.0 → nextpy_framework-3.9.0}/.nextpy_framework/nextpy/dev_tools.py +0 -0
  47. {nextpy_framework-3.8.0 → nextpy_framework-3.9.0}/.nextpy_framework/nextpy/errors.py +0 -0
  48. {nextpy_framework-3.8.0 → nextpy_framework-3.9.0}/.nextpy_framework/nextpy/hooks.py +0 -0
  49. {nextpy_framework-3.8.0 → nextpy_framework-3.9.0}/.nextpy_framework/nextpy/hooks_provider.py +0 -0
  50. {nextpy_framework-3.8.0 → nextpy_framework-3.9.0}/.nextpy_framework/nextpy/hooks_provider_new.py +0 -0
  51. {nextpy_framework-3.8.0 → nextpy_framework-3.9.0}/.nextpy_framework/nextpy/jsx.py +0 -0
  52. {nextpy_framework-3.8.0 → nextpy_framework-3.9.0}/.nextpy_framework/nextpy/jsx_preprocessor.py +0 -0
  53. {nextpy_framework-3.8.0 → nextpy_framework-3.9.0}/.nextpy_framework/nextpy/jsx_transformer.py +0 -0
  54. {nextpy_framework-3.8.0 → nextpy_framework-3.9.0}/.nextpy_framework/nextpy/main.py +0 -0
  55. {nextpy_framework-3.8.0 → nextpy_framework-3.9.0}/.nextpy_framework/nextpy/performance.py +0 -0
  56. {nextpy_framework-3.8.0 → nextpy_framework-3.9.0}/.nextpy_framework/nextpy/plugins/__init__.py +0 -0
  57. {nextpy_framework-3.8.0 → nextpy_framework-3.9.0}/.nextpy_framework/nextpy/plugins/base.py +0 -0
  58. {nextpy_framework-3.8.0 → nextpy_framework-3.9.0}/.nextpy_framework/nextpy/plugins/builtin.py +0 -0
  59. {nextpy_framework-3.8.0 → nextpy_framework-3.9.0}/.nextpy_framework/nextpy/plugins/config.py +0 -0
  60. {nextpy_framework-3.8.0 → nextpy_framework-3.9.0}/.nextpy_framework/nextpy/plugins.py +0 -0
  61. {nextpy_framework-3.8.0 → nextpy_framework-3.9.0}/.nextpy_framework/nextpy/psx/__init__.py +0 -0
  62. {nextpy_framework-3.8.0 → nextpy_framework-3.9.0}/.nextpy_framework/nextpy/psx/compiler/actions.py +0 -0
  63. {nextpy_framework-3.8.0 → nextpy_framework-3.9.0}/.nextpy_framework/nextpy/psx/compiler/handler_compiler.py +0 -0
  64. {nextpy_framework-3.8.0 → nextpy_framework-3.9.0}/.nextpy_framework/nextpy/psx/components/component.py +0 -0
  65. {nextpy_framework-3.8.0 → nextpy_framework-3.9.0}/.nextpy_framework/nextpy/psx/core/__init__.py +0 -0
  66. {nextpy_framework-3.8.0 → nextpy_framework-3.9.0}/.nextpy_framework/nextpy/psx/core/ast_nodes.py +0 -0
  67. {nextpy_framework-3.8.0 → nextpy_framework-3.9.0}/.nextpy_framework/nextpy/psx/core/evaluator.py +0 -0
  68. {nextpy_framework-3.8.0 → nextpy_framework-3.9.0}/.nextpy_framework/nextpy/psx/core/parser.py +0 -0
  69. {nextpy_framework-3.8.0 → nextpy_framework-3.9.0}/.nextpy_framework/nextpy/psx/core/runtime.py +0 -0
  70. {nextpy_framework-3.8.0 → nextpy_framework-3.9.0}/.nextpy_framework/nextpy/psx/devtools/language_server.py +0 -0
  71. {nextpy_framework-3.8.0 → nextpy_framework-3.9.0}/.nextpy_framework/nextpy/psx/devtools/language_server_lsp.py +0 -0
  72. {nextpy_framework-3.8.0 → nextpy_framework-3.9.0}/.nextpy_framework/nextpy/psx/devtools/psx_formatter.py +0 -0
  73. {nextpy_framework-3.8.0 → nextpy_framework-3.9.0}/.nextpy_framework/nextpy/psx/devtools/server_client_components.py +0 -0
  74. {nextpy_framework-3.8.0 → nextpy_framework-3.9.0}/.nextpy_framework/nextpy/psx/devtools/setup.py +0 -0
  75. {nextpy_framework-3.8.0 → nextpy_framework-3.9.0}/.nextpy_framework/nextpy/psx/hydration/__init__.py +0 -0
  76. {nextpy_framework-3.8.0 → nextpy_framework-3.9.0}/.nextpy_framework/nextpy/psx/hydration/decorators.py +0 -0
  77. {nextpy_framework-3.8.0 → nextpy_framework-3.9.0}/.nextpy_framework/nextpy/psx/hydration/engine.py +0 -0
  78. {nextpy_framework-3.8.0 → nextpy_framework-3.9.0}/.nextpy_framework/nextpy/psx/hydration/integration.py +0 -0
  79. {nextpy_framework-3.8.0 → nextpy_framework-3.9.0}/.nextpy_framework/nextpy/psx/renderer/renderer.py +0 -0
  80. {nextpy_framework-3.8.0 → nextpy_framework-3.9.0}/.nextpy_framework/nextpy/psx/runtime/actions_runtime.py +0 -0
  81. {nextpy_framework-3.8.0 → nextpy_framework-3.9.0}/.nextpy_framework/nextpy/psx/runtime/js_actions_runtime.py +0 -0
  82. {nextpy_framework-3.8.0 → nextpy_framework-3.9.0}/.nextpy_framework/nextpy/psx/tests/test_full_integration.py +0 -0
  83. {nextpy_framework-3.8.0 → nextpy_framework-3.9.0}/.nextpy_framework/nextpy/psx/tests/test_html_attribute_support.py +0 -0
  84. {nextpy_framework-3.8.0 → nextpy_framework-3.9.0}/.nextpy_framework/nextpy/psx/utils/helpers.py +0 -0
  85. {nextpy_framework-3.8.0 → nextpy_framework-3.9.0}/.nextpy_framework/nextpy/psx/vdom/vnode.py +0 -0
  86. {nextpy_framework-3.8.0 → nextpy_framework-3.9.0}/.nextpy_framework/nextpy/py.typed +0 -0
  87. {nextpy_framework-3.8.0 → nextpy_framework-3.9.0}/.nextpy_framework/nextpy/runtime/events.py +0 -0
  88. {nextpy_framework-3.8.0 → nextpy_framework-3.9.0}/.nextpy_framework/nextpy/security.py +0 -0
  89. {nextpy_framework-3.8.0 → nextpy_framework-3.9.0}/.nextpy_framework/nextpy/server/__init__.py +0 -0
  90. {nextpy_framework-3.8.0 → nextpy_framework-3.9.0}/.nextpy_framework/nextpy/server/app.py +0 -0
  91. {nextpy_framework-3.8.0 → nextpy_framework-3.9.0}/.nextpy_framework/nextpy/server/debug.py +0 -0
  92. {nextpy_framework-3.8.0 → nextpy_framework-3.9.0}/.nextpy_framework/nextpy/server/middleware.py +0 -0
  93. {nextpy_framework-3.8.0 → nextpy_framework-3.9.0}/.nextpy_framework/nextpy/source/conf.py +0 -0
  94. {nextpy_framework-3.8.0 → nextpy_framework-3.9.0}/.nextpy_framework/nextpy/tests/HANDLER_REGISTRATION_SYSTEM.py +0 -0
  95. {nextpy_framework-3.8.0 → nextpy_framework-3.9.0}/.nextpy_framework/nextpy/tests/setup_complete.py +0 -0
  96. {nextpy_framework-3.8.0 → nextpy_framework-3.9.0}/.nextpy_framework/nextpy/tests/test_autodebug_enhanced.py +0 -0
  97. {nextpy_framework-3.8.0 → nextpy_framework-3.9.0}/.nextpy_framework/nextpy/tests/test_cli_scaffolding.py +0 -0
  98. {nextpy_framework-3.8.0 → nextpy_framework-3.9.0}/.nextpy_framework/nextpy/tests/test_colors.py +0 -0
  99. {nextpy_framework-3.8.0 → nextpy_framework-3.9.0}/.nextpy_framework/nextpy/tests/test_component_rendering.py +0 -0
  100. {nextpy_framework-3.8.0 → nextpy_framework-3.9.0}/.nextpy_framework/nextpy/tests/test_conversion.py +0 -0
  101. {nextpy_framework-3.8.0 → nextpy_framework-3.9.0}/.nextpy_framework/nextpy/tests/test_critical_fixes.py +0 -0
  102. {nextpy_framework-3.8.0 → nextpy_framework-3.9.0}/.nextpy_framework/nextpy/tests/test_demo_mode.py +0 -0
  103. {nextpy_framework-3.8.0 → nextpy_framework-3.9.0}/.nextpy_framework/nextpy/tests/test_demo_server.py +0 -0
  104. {nextpy_framework-3.8.0 → nextpy_framework-3.9.0}/.nextpy_framework/nextpy/tests/test_enhanced_handlers.py +0 -0
  105. {nextpy_framework-3.8.0 → nextpy_framework-3.9.0}/.nextpy_framework/nextpy/tests/test_extraction.py +0 -0
  106. {nextpy_framework-3.8.0 → nextpy_framework-3.9.0}/.nextpy_framework/nextpy/tests/test_final.py +0 -0
  107. {nextpy_framework-3.8.0 → nextpy_framework-3.9.0}/.nextpy_framework/nextpy/tests/test_fixes.py +0 -0
  108. {nextpy_framework-3.8.0 → nextpy_framework-3.9.0}/.nextpy_framework/nextpy/tests/test_handler_system.py +0 -0
  109. {nextpy_framework-3.8.0 → nextpy_framework-3.9.0}/.nextpy_framework/nextpy/tests/test_hydration_engine.py +0 -0
  110. {nextpy_framework-3.8.0 → nextpy_framework-3.9.0}/.nextpy_framework/nextpy/tests/test_integration.py +0 -0
  111. {nextpy_framework-3.8.0 → nextpy_framework-3.9.0}/.nextpy_framework/nextpy/tests/test_interactive_bug.py +0 -0
  112. {nextpy_framework-3.8.0 → nextpy_framework-3.9.0}/.nextpy_framework/nextpy/tests/test_jsx_edgecases.py +0 -0
  113. {nextpy_framework-3.8.0 → nextpy_framework-3.9.0}/.nextpy_framework/nextpy/tests/test_jsx_preprocessor.py +0 -0
  114. {nextpy_framework-3.8.0 → nextpy_framework-3.9.0}/.nextpy_framework/nextpy/tests/test_migration.py +0 -0
  115. {nextpy_framework-3.8.0 → nextpy_framework-3.9.0}/.nextpy_framework/nextpy/tests/test_modular_debug.py +0 -0
  116. {nextpy_framework-3.8.0 → nextpy_framework-3.9.0}/.nextpy_framework/nextpy/tests/test_routing.py +0 -0
  117. {nextpy_framework-3.8.0 → nextpy_framework-3.9.0}/.nextpy_framework/nextpy/tests/test_server.py +0 -0
  118. {nextpy_framework-3.8.0 → nextpy_framework-3.9.0}/.nextpy_framework/nextpy/tests/test_server_features.py +0 -0
  119. {nextpy_framework-3.8.0 → nextpy_framework-3.9.0}/.nextpy_framework/nextpy/tests/test_server_working.py +0 -0
  120. {nextpy_framework-3.8.0 → nextpy_framework-3.9.0}/.nextpy_framework/nextpy/tests/test_tailwind.py +0 -0
  121. {nextpy_framework-3.8.0 → nextpy_framework-3.9.0}/.nextpy_framework/nextpy/tests/test_tailwind_full.py +0 -0
  122. {nextpy_framework-3.8.0 → nextpy_framework-3.9.0}/.nextpy_framework/nextpy/tests/test_tailwind_integration.py +0 -0
  123. {nextpy_framework-3.8.0 → nextpy_framework-3.9.0}/.nextpy_framework/nextpy/tests/test_tailwind_up_to_date.py +0 -0
  124. {nextpy_framework-3.8.0 → nextpy_framework-3.9.0}/.nextpy_framework/nextpy/tests/test_websocket_complete.py +0 -0
  125. {nextpy_framework-3.8.0 → nextpy_framework-3.9.0}/.nextpy_framework/nextpy/true_jsx.py +0 -0
  126. {nextpy_framework-3.8.0 → nextpy_framework-3.9.0}/.nextpy_framework/nextpy/utils/__init__.py +0 -0
  127. {nextpy_framework-3.8.0 → nextpy_framework-3.9.0}/.nextpy_framework/nextpy/utils/cache.py +0 -0
  128. {nextpy_framework-3.8.0 → nextpy_framework-3.9.0}/.nextpy_framework/nextpy/utils/email.py +0 -0
  129. {nextpy_framework-3.8.0 → nextpy_framework-3.9.0}/.nextpy_framework/nextpy/utils/file_upload.py +0 -0
  130. {nextpy_framework-3.8.0 → nextpy_framework-3.9.0}/.nextpy_framework/nextpy/utils/logging.py +0 -0
  131. {nextpy_framework-3.8.0 → nextpy_framework-3.9.0}/.nextpy_framework/nextpy/utils/search.py +0 -0
  132. {nextpy_framework-3.8.0 → nextpy_framework-3.9.0}/.nextpy_framework/nextpy/utils/seo.py +0 -0
  133. {nextpy_framework-3.8.0 → nextpy_framework-3.9.0}/.nextpy_framework/nextpy/utils/validators.py +0 -0
  134. {nextpy_framework-3.8.0 → nextpy_framework-3.9.0}/.nextpy_framework/nextpy/websocket.py +0 -0
  135. {nextpy_framework-3.8.0 → nextpy_framework-3.9.0}/.nextpy_framework/nextpy_framework.egg-info/SOURCES.txt +0 -0
  136. {nextpy_framework-3.8.0 → nextpy_framework-3.9.0}/.nextpy_framework/nextpy_framework.egg-info/dependency_links.txt +0 -0
  137. {nextpy_framework-3.8.0 → nextpy_framework-3.9.0}/.nextpy_framework/nextpy_framework.egg-info/entry_points.txt +0 -0
  138. {nextpy_framework-3.8.0 → nextpy_framework-3.9.0}/.nextpy_framework/nextpy_framework.egg-info/requires.txt +0 -0
  139. {nextpy_framework-3.8.0 → nextpy_framework-3.9.0}/.nextpy_framework/nextpy_framework.egg-info/top_level.txt +0 -0
  140. {nextpy_framework-3.8.0 → nextpy_framework-3.9.0}/LICENSE +0 -0
  141. {nextpy_framework-3.8.0 → nextpy_framework-3.9.0}/setup.cfg +0 -0
@@ -3,7 +3,7 @@ NextPy - The Python Web Framdwork
3
3
  File-based routing, SSR, SSG, and more with FastAPI + PSX (True JSX)
4
4
  """
5
5
 
6
- __version__ = "3.8.0"
6
+ __version__ = "3.9.0"
7
7
 
8
8
  from nextpy.core.router import Router, Route, DynamicRoute
9
9
  from nextpy.core.renderer import Renderer
@@ -1164,6 +1164,37 @@ def _create_project_structure(
1164
1164
  </body>
1165
1165
  </html>""")
1166
1166
  click.echo(" Created: templates/_404.html")
1167
+
1168
+ try:
1169
+ from importlib.resources import files, as_file
1170
+ import shutil
1171
+
1172
+ images_dir = project_dir / "public" / "images"
1173
+ images_dir.mkdir(parents=True, exist_ok=True)
1174
+
1175
+ logo_source = files("nextpy.public").joinpath("logo.png")
1176
+
1177
+ with as_file(logo_source) as logo_path:
1178
+ shutil.copy2(
1179
+ logo_path,
1180
+ images_dir / "logo.png"
1181
+ )
1182
+ click.echo(" Copied: logo.png to public/images/")
1183
+ except Exception as e:
1184
+ click.echo(click.style(f" ⚠️ Failed to copy logo.png: {str(e)}", fg="yellow"))
1185
+
1186
+ #create minimal stylesheet
1187
+ (project_dir / "public" / "css"/ "styles.css").write_text("""/* NextPy Styles */
1188
+ body{
1189
+ margin: 0;
1190
+ padding: 0;
1191
+ font-family: -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, Helvetica, Arial, sans-serif;
1192
+ }
1193
+ """)
1194
+
1195
+ click.echo(" Created: public/css/styles.css")
1196
+
1197
+
1167
1198
 
1168
1199
  # Create styles.css with Tailwind directives
1169
1200
  (project_dir / "styles" / "styles.css").write_text("""/* NextPy Styles */
@@ -1332,8 +1363,9 @@ module.exports = {
1332
1363
  _create_traditional_homepage(project_dir)
1333
1364
 
1334
1365
  (project_dir / "pages" / "index.py").write_text('''"""Interactive Homepage """
1335
- from nextpy.psx import interactive_component as component
1336
-
1366
+
1367
+ from nextpy.psx import interactive_component as component
1368
+
1337
1369
 
1338
1370
  @component
1339
1371
  def Home(props=None):
@@ -1342,96 +1374,115 @@ def Home(props=None):
1342
1374
  message = props.get("message", "Build amazing web apps with Python and True JSX")
1343
1375
 
1344
1376
  return (
1345
- <div class="flex flex-col items-center justify-between min-h-screen p-24 font-sans text-white bg-black">
1346
- <div class="flex items-center justify-between w-full max-w-5xl text-sm">
1347
- <p>
1348
- Get started by editing index.py in the
1349
- <code class="font-mono font-bold">/pages</code>
1350
- directory.
1351
- </p>
1352
- <div>
1377
+ <div class="flex flex-col items-center justify-between min-h-screen p-8 font-sans antialiased text-black bg-white selection:bg-gray-200">
1378
+ <head>
1379
+ {/* optionally load a stylesheet from public/css <link rel="stylesheet" href="static/css/styles.css" /> */}
1380
+ </head>
1381
+ {/* Top spacer to perfectly center the main content vertically */}
1382
+ <div class=""></div>
1383
+
1384
+ {/* Main Centered Content */}
1385
+ <div class="flex flex-col items-center max-w-xl gap-8 text-center">
1386
+ {/* Logo Section */}
1387
+ <h1 class="text-[56px] font-extrabold tracking-tighter leading-none select-none font-mono flex items-baseline">
1388
+ <img src="static/images/logo.png" alt="NextPy Logo" class="w-auto h-16" />
1389
+
1390
+ </h1>
1391
+
1392
+ {/* Step-by-Step Instructions */}
1393
+ <ol class="list-decimal list-inside text-left text-[16px] font-mono text-gray-800 space-y-2.5">
1394
+ <li>
1395
+ Get started by editing
1396
+ <code class="bg-black/[0.05] px-1.5 py-0.5 rounded font-bold text-black text-[13px]">
1397
+ pages/index.py
1398
+ </code>
1399
+ .
1400
+ </li>
1401
+ <li>Save and see your changes instantly.</li>
1402
+ </ol>
1403
+
1404
+ {/* Call To Action Buttons */}
1405
+ <div class="flex flex-col items-center gap-4 mt-2 sm:flex-row">
1406
+
1353
1407
  <a
1354
- href="https://rahimstudios.dev"
1355
- class="flex items-center gap-2 hover:underline"
1408
+ href="https://nextpy-framework.onrender.com/deploy"
1409
+ class="flex items-center gap-2 bg-black text-white px-6 py-3 rounded-full text-[14px] font-medium transition-colors hover:bg-[#2c2c2c] shadow-sm"
1410
+
1356
1411
  >
1357
- By
1358
- <span class="font-bold">RahimStudios</span>
1412
+ <svg
1413
+ class="w-6 h-6"
1414
+ fill="none"
1415
+ stroke="currentColor"
1416
+ stroke-width="2"
1417
+ viewBox="0 0 24 24"
1418
+ >
1419
+ <path
1420
+ stroke-linecap="round"
1421
+ stroke-linejoin="round"
1422
+ d="M7 18a4 4 0 010-8 5 5 0 019.7-1.2A3.5 3.5 0 0117.5 18H7z"
1423
+ />
1424
+ <path
1425
+ stroke-linecap="round"
1426
+ stroke-linejoin="round"
1427
+ d="M12 14V8m0 0l-3 3m3-3l3 3"
1428
+ />
1429
+ </svg>
1430
+
1431
+ Deploy now
1432
+ </a>
1433
+
1434
+ <a
1435
+ href="https://nextpy-framework.onrender.com/"
1436
+ class="flex items-center justify-center border border-black/[0.08] bg-white text-black px-6 py-3 rounded-full text-[14px] font-medium transition-colors hover:bg-gray-50 hover:border-black/[0.15] min-w-[140px]"
1437
+
1438
+ >
1439
+ Read our docs
1359
1440
  </a>
1360
1441
  </div>
1361
- </div>
1362
-
1363
- <div class="flex flex-col items-center gap-8">
1364
- <div class="flex items-center gap-4">
1365
- <h1 class="text-6xl font-bold text-transparent bg-gradient-to-r from-blue-400 to-purple-600 bg-clip-text">
1366
- NextPy
1367
- </h1>
1368
- <span class="inline-flex items-center justify-center w-12 h-12 text-lg font-bold bg-gray-800 rounded-full">
1369
- 3.7.3
1370
- </span>
1371
- </div>
1372
- </div>
1373
-
1374
- <div class="grid w-full max-w-5xl grid-cols-1 gap-4 sm:grid-cols-2 lg:grid-cols-4">
1375
- <a
1376
- href="https://nextpy-framework.onrender.com/"
1377
- class="p-6 transition-colors border border-gray-700 rounded-lg hover:border-gray-400 group"
1378
- >
1379
- <h2 class="mb-3 text-2xl font-semibold">
1380
- Docs
1381
- <span class="inline-block transition-transform group-hover:translate-x-1">
1382
- -&gt;
1383
- </span>
1384
- </h2>
1385
- <p class="text-sm text-gray-400">
1386
- Find in-depth information about NextPy features and API.
1387
- </p>
1388
- </a>
1389
-
1390
- <a
1442
+
1443
+ <div class="flex flex-wrap items-center justify-center gap-x-8 text-[14px] font-medium text-gray-600 w-full max-w-2xl py-4 border-t border-gray-100 sm:border-none">
1444
+ <a
1391
1445
  href="https://nextpy-framework.onrender.com/learn"
1392
- class="p-6 transition-colors border border-gray-700 rounded-lg hover:border-gray-400 group"
1446
+ class="flex items-center gap-2 transition-colors hover:underline hover:text-black"
1447
+
1393
1448
  >
1394
- <h2 class="mb-3 text-2xl font-semibold">
1395
- Learn
1396
- <span class="inline-block transition-transform group-hover:translate-x-1">
1397
- -&gt;
1398
- </span>
1399
- </h2>
1400
- <p class="text-sm text-gray-400">
1401
- Learn about NextPy in an interactive course with quizzes!
1402
- </p>
1449
+ {/* Document Icon */}
1450
+ <svg class="w-4 h-4 text-gray-400" fill="none" stroke="currentColor" stroke-width="2" viewBox="0 0 24 24">
1451
+ <path stroke-linecap="round" stroke-linejoin="round" d="M9 12h6m-6 4h6m2 5H7a2 2 0 01-2-2V5a2 2 0 012-2h5.586a1 1 0 01.707.293l5.414 5.414a1 1 0 01.293.707V19a2 2 0 01-2 2z"/>
1452
+ </svg>
1453
+ Learn
1403
1454
  </a>
1404
1455
 
1405
1456
  <a
1406
1457
  href="https://nextpy-framework.onrender.com/templates"
1407
- class="p-6 transition-colors border border-gray-700 rounded-lg hover:border-gray-400 group"
1458
+ class="flex items-center gap-2 transition-colors hover:underline hover:text-black"
1459
+
1408
1460
  >
1409
- <h2 class="mb-3 text-2xl font-semibold">
1410
- Templates
1411
- <span class="inline-block transition-transform group-hover:translate-x-1">
1412
- -&gt;
1413
- </span>
1414
- </h2>
1415
- <p class="text-sm text-gray-400">
1416
- Explore starter templates for NextPy.
1417
- </p>
1461
+ {/* Window Layout Icon */}
1462
+ <svg class="w-4 h-4 text-gray-400" fill="none" stroke="currentColor" stroke-width="2" viewBox="0 0 24 24">
1463
+ <path stroke-linecap="round" stroke-linejoin="round" d="M4 5a1 1 0 011-1h14a1 1 0 011 1v2a1 1 0 01-1 1H5a1 1 0 01-1-1V5zm0 7a1 1 0 011-1h6a1 1 0 011 1v6a1 1 0 01-1 1H5a1 1 0 01-1-1v-6zm10 0a1 1 0 011-1h4a1 1 0 011 1v6a1 1 0 01-1 1h-4a1 1 0 01-1-1v-6z"/>
1464
+ </svg>
1465
+ Examples
1418
1466
  </a>
1419
1467
 
1420
1468
  <a
1421
- href="https://nextpy-framework.onrender.com/deploy"
1422
- class="p-6 transition-colors border border-gray-700 rounded-lg hover:border-gray-400 group"
1469
+ href="https://nextpy-framework.onrender.com/"
1470
+ class="flex items-center gap-1.5 hover:underline hover:text-black transition-colors"
1471
+
1423
1472
  >
1424
- <h2 class="mb-3 text-2xl font-semibold">
1425
- Deploy
1426
- <span class="inline-block transition-transform group-hover:translate-x-1">
1427
- -&gt;
1428
- </span>
1429
- </h2>
1430
- <p class="text-sm text-gray-400">
1431
- Instantly deploy your NextPy site to a shareable URL with RahimStudios.
1432
- </p>
1473
+ {/* Globe Icon */}
1474
+ <svg class="w-4 h-4 text-gray-400" fill="none" stroke="currentColor" stroke-width="2" viewBox="0 0 24 24">
1475
+ <path stroke-linecap="round" stroke-linejoin="round" d="M21 12a9 9 0 01-9 9m9-9a9 9 0 00-9-9m9 9H3m9 9a9 9 0 01-9-9m9 9c1.657 0 3-4.03 3-9s-1.343-9-3-9m0 18c-1.657 0-3-4.03-3-9s1.343-9 3-9m-9 9a9 9 0 019-9"/>
1476
+ </svg>
1477
+ Go to nextpy.org →
1433
1478
  </a>
1479
+ </div>
1480
+
1434
1481
  </div>
1482
+
1483
+ <footer class="flex flex-wrap items-center justify-center text-[14px] font-medium text-gray-600 w-full max-w-2xl py-4 border-t border-gray-100 sm:border-none">
1484
+ The Python Web Framework for Everyone
1485
+ </footer>
1435
1486
  </div>
1436
1487
  )
1437
1488
 
@@ -1445,7 +1496,7 @@ def getServerSideProps(context):
1445
1496
  }
1446
1497
 
1447
1498
 
1448
- default = Home
1499
+ default = Home
1449
1500
 
1450
1501
 
1451
1502
  ''')
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: nextpy-framework
3
- Version: 3.8.0
3
+ Version: 3.9.0
4
4
  Summary: The Python Web Framework introducing file-based routing, SSR, and SSG and more
5
5
  Author: NextPy Team
6
6
  License: MIT
@@ -160,7 +160,7 @@ Everything in one framework.
160
160
  ## Example
161
161
 
162
162
  ```python
163
- from nextpy import component, useState
163
+ from nextpy import interactive_component as component, useState, create_onclick
164
164
 
165
165
  @component
166
166
  def Home():
@@ -170,7 +170,7 @@ def Home():
170
170
  <div>
171
171
  <h1>Welcome to NextPy</h1>
172
172
 
173
- <button onclick={lambda e: setCount(count + 1)}>
173
+ <button create_onclick={create_onclick(lambda e: setCount(count + 1))}>
174
174
  Count: {count}
175
175
  </button>
176
176
  </div>
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: nextpy-framework
3
- Version: 3.8.0
3
+ Version: 3.9.0
4
4
  Summary: The Python Web Framework introducing file-based routing, SSR, and SSG and more
5
5
  Author: NextPy Team
6
6
  License: MIT
@@ -160,7 +160,7 @@ Everything in one framework.
160
160
  ## Example
161
161
 
162
162
  ```python
163
- from nextpy import component, useState
163
+ from nextpy import interactive_component as component, useState, create_onclick
164
164
 
165
165
  @component
166
166
  def Home():
@@ -170,7 +170,7 @@ def Home():
170
170
  <div>
171
171
  <h1>Welcome to NextPy</h1>
172
172
 
173
- <button onclick={lambda e: setCount(count + 1)}>
173
+ <button create_onclick={create_onclick(lambda e: setCount(count + 1))}>
174
174
  Count: {count}
175
175
  </button>
176
176
  </div>
@@ -119,7 +119,7 @@ Everything in one framework.
119
119
  ## Example
120
120
 
121
121
  ```python
122
- from nextpy import component, useState
122
+ from nextpy import interactive_component as component, useState, create_onclick
123
123
 
124
124
  @component
125
125
  def Home():
@@ -129,7 +129,7 @@ def Home():
129
129
  <div>
130
130
  <h1>Welcome to NextPy</h1>
131
131
 
132
- <button onclick={lambda e: setCount(count + 1)}>
132
+ <button create_onclick={create_onclick(lambda e: setCount(count + 1))}>
133
133
  Count: {count}
134
134
  </button>
135
135
  </div>
@@ -4,7 +4,7 @@ build-backend = "setuptools.build_meta"
4
4
 
5
5
  [project]
6
6
  name = "nextpy-framework"
7
- version = "3.8.0"
7
+ version = "3.9.0"
8
8
  description = "The Python Web Framework introducing file-based routing, SSR, and SSG and more"
9
9
  readme = "README.md"
10
10
  requires-python = ">=3.11"