django-cfg 1.3.13__py3-none-any.whl → 1.4.3__py3-none-any.whl

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 (446) hide show
  1. django_cfg/__init__.py +1 -1
  2. django_cfg/apps/accounts/admin/user_admin.py +39 -16
  3. django_cfg/apps/accounts/serializers/profile.py +1 -1
  4. django_cfg/apps/accounts/services/otp_service.py +18 -11
  5. django_cfg/apps/accounts/signals.py +15 -24
  6. django_cfg/apps/accounts/utils/notifications.py +217 -358
  7. django_cfg/apps/accounts/views/otp.py +2 -2
  8. django_cfg/apps/accounts/views/webhook.py +1 -1
  9. django_cfg/apps/agents/core/django_agent.py +1 -1
  10. django_cfg/apps/agents/examples/__init__.py +3 -0
  11. django_cfg/apps/agents/examples/simple_example.py +161 -0
  12. django_cfg/apps/api/commands/views.py +66 -83
  13. django_cfg/apps/api/health/drf_views.py +269 -0
  14. django_cfg/apps/api/health/serializers.py +45 -0
  15. django_cfg/apps/api/health/urls.py +6 -1
  16. django_cfg/apps/knowbase/admin/actions/__init__.py +13 -0
  17. django_cfg/apps/knowbase/admin/actions/visibility_actions.py +56 -0
  18. django_cfg/apps/knowbase/admin/document_admin.py +136 -270
  19. django_cfg/apps/knowbase/admin/helpers/__init__.py +17 -0
  20. django_cfg/apps/knowbase/admin/helpers/configs.py +72 -0
  21. django_cfg/apps/knowbase/admin/helpers/display_helpers.py +156 -0
  22. django_cfg/apps/knowbase/admin/helpers/statistics.py +108 -0
  23. django_cfg/apps/knowbase/config/constance_fields.py +1 -1
  24. django_cfg/apps/knowbase/config/settings.py +2 -2
  25. django_cfg/apps/knowbase/examples/__init__.py +3 -0
  26. django_cfg/apps/knowbase/examples/external_data_usage.py +191 -0
  27. django_cfg/apps/knowbase/mixins/__init__.py +19 -2
  28. django_cfg/apps/knowbase/mixins/config/__init__.py +14 -0
  29. django_cfg/apps/knowbase/mixins/config/defaults.py +75 -0
  30. django_cfg/apps/knowbase/mixins/config/meta_config.py +120 -0
  31. django_cfg/apps/knowbase/mixins/creator.py +10 -10
  32. django_cfg/apps/knowbase/mixins/examples/vehicle_model_example.py +199 -0
  33. django_cfg/apps/knowbase/mixins/external_data_mixin.py +105 -403
  34. django_cfg/apps/knowbase/mixins/generators/__init__.py +16 -0
  35. django_cfg/apps/knowbase/mixins/generators/content_generator.py +218 -0
  36. django_cfg/apps/knowbase/mixins/generators/field_analyzer.py +76 -0
  37. django_cfg/apps/knowbase/mixins/generators/metadata_generator.py +124 -0
  38. django_cfg/apps/knowbase/mixins/service.py +2 -2
  39. django_cfg/apps/knowbase/services/archive/__init__.py +1 -0
  40. django_cfg/apps/knowbase/services/archive/analyzers/__init__.py +17 -0
  41. django_cfg/apps/knowbase/services/archive/analyzers/complexity_analyzer.py +33 -0
  42. django_cfg/apps/knowbase/services/archive/analyzers/purpose_detector.py +36 -0
  43. django_cfg/apps/knowbase/services/archive/analyzers/quality_analyzer.py +39 -0
  44. django_cfg/apps/knowbase/services/archive/analyzers/tag_generator.py +103 -0
  45. django_cfg/apps/knowbase/services/archive/chunking/__init__.py +19 -0
  46. django_cfg/apps/knowbase/services/archive/chunking/base.py +81 -0
  47. django_cfg/apps/knowbase/services/archive/chunking/json_chunker.py +62 -0
  48. django_cfg/apps/knowbase/services/archive/chunking/markdown_chunker.py +107 -0
  49. django_cfg/apps/knowbase/services/archive/chunking/python_chunker.py +248 -0
  50. django_cfg/apps/knowbase/services/archive/chunking/text_chunker.py +70 -0
  51. django_cfg/apps/knowbase/services/archive/chunking_service.py +110 -729
  52. django_cfg/apps/knowbase/services/archive/context/__init__.py +14 -0
  53. django_cfg/apps/knowbase/services/archive/context/builders.py +220 -0
  54. django_cfg/apps/knowbase/services/archive/context/models.py +38 -0
  55. django_cfg/apps/knowbase/services/embedding/models.py +18 -14
  56. django_cfg/apps/knowbase/services/embedding/processors.py +6 -3
  57. django_cfg/apps/knowbase/tasks/document_processing.py +11 -3
  58. django_cfg/apps/leads/tests.py +1 -1
  59. django_cfg/apps/payments/admin/api_keys_admin.py +1 -1
  60. django_cfg/apps/payments/admin/balance_admin.py +1 -1
  61. django_cfg/apps/payments/admin/currencies_admin.py +1 -1
  62. django_cfg/apps/payments/admin/payments_admin.py +1 -1
  63. django_cfg/apps/payments/admin/subscriptions_admin.py +1 -1
  64. django_cfg/apps/payments/admin_interface/templates/payments/base.html +59 -126
  65. django_cfg/apps/payments/admin_interface/views/api/payments.py +1 -1
  66. django_cfg/apps/payments/admin_interface/views/api/stats.py +1 -1
  67. django_cfg/apps/payments/admin_interface/views/api/users.py +1 -1
  68. django_cfg/apps/payments/admin_interface/views/api/webhook_admin.py +1 -1
  69. django_cfg/apps/payments/admin_interface/views/api/webhook_public.py +1 -1
  70. django_cfg/apps/payments/admin_interface/views/base.py +29 -2
  71. django_cfg/apps/payments/apps.py +1 -1
  72. django_cfg/apps/payments/config/django_cfg_integration.py +2 -2
  73. django_cfg/apps/payments/config/helpers.py +3 -2
  74. django_cfg/apps/payments/management/commands/cleanup_expired_data.py +1 -1
  75. django_cfg/apps/payments/management/commands/currency_stats.py +1 -1
  76. django_cfg/apps/payments/management/commands/manage_currencies.py +1 -1
  77. django_cfg/apps/payments/management/commands/manage_providers.py +1 -1
  78. django_cfg/apps/payments/management/commands/process_pending_payments.py +1 -1
  79. django_cfg/apps/payments/management/commands/test_providers.py +1 -1
  80. django_cfg/apps/payments/middleware/api_access.py +1 -1
  81. django_cfg/apps/payments/middleware/rate_limiting.py +1 -1
  82. django_cfg/apps/payments/middleware/usage_tracking.py +1 -1
  83. django_cfg/apps/payments/models/balance.py +2 -2
  84. django_cfg/apps/payments/models/managers/api_key_managers.py +1 -1
  85. django_cfg/apps/payments/models/managers/balance_managers.py +1 -1
  86. django_cfg/apps/payments/models/managers/currency_managers.py +1 -1
  87. django_cfg/apps/payments/models/managers/payment_managers.py +1 -1
  88. django_cfg/apps/payments/models/managers/subscription_managers.py +1 -1
  89. django_cfg/apps/payments/models/payments.py +2 -2
  90. django_cfg/apps/payments/services/cache_service/__init__.py +1 -1
  91. django_cfg/apps/payments/services/cache_service/simple_cache.py +10 -5
  92. django_cfg/apps/payments/services/core/base.py +1 -1
  93. django_cfg/apps/payments/services/core/currency/__init__.py +13 -0
  94. django_cfg/apps/payments/services/core/currency/currency_converter.py +57 -0
  95. django_cfg/apps/payments/services/core/currency/currency_validator.py +61 -0
  96. django_cfg/apps/payments/services/core/operations/__init__.py +15 -0
  97. django_cfg/apps/payments/services/core/operations/payment_canceller.py +100 -0
  98. django_cfg/apps/payments/services/core/operations/payment_creator.py +196 -0
  99. django_cfg/apps/payments/services/core/operations/status_checker.py +100 -0
  100. django_cfg/apps/payments/services/core/payment_service.py +124 -612
  101. django_cfg/apps/payments/services/core/providers/__init__.py +13 -0
  102. django_cfg/apps/payments/services/core/providers/provider_client.py +132 -0
  103. django_cfg/apps/payments/services/core/providers/status_mapper.py +89 -0
  104. django_cfg/apps/payments/services/core/utils/__init__.py +13 -0
  105. django_cfg/apps/payments/services/core/utils/data_converter.py +48 -0
  106. django_cfg/apps/payments/services/core/utils/statistics_calculator.py +69 -0
  107. django_cfg/apps/payments/services/providers/base.py +1 -1
  108. django_cfg/apps/payments/services/providers/nowpayments/__init__.py +3 -3
  109. django_cfg/apps/payments/services/providers/nowpayments/parsers/__init__.py +9 -0
  110. django_cfg/apps/payments/services/providers/nowpayments/parsers/data/__init__.py +23 -0
  111. django_cfg/apps/payments/services/providers/nowpayments/parsers/data/constants.py +23 -0
  112. django_cfg/apps/payments/services/providers/nowpayments/parsers/data/currency_names.py +244 -0
  113. django_cfg/apps/payments/services/providers/nowpayments/parsers/data/patterns.py +511 -0
  114. django_cfg/apps/payments/services/providers/nowpayments/parsers/parser.py +168 -0
  115. django_cfg/apps/payments/services/providers/nowpayments/provider.py +1 -1
  116. django_cfg/apps/payments/services/providers/nowpayments/sync.py +1 -1
  117. django_cfg/apps/payments/services/providers/registry.py +1 -1
  118. django_cfg/apps/payments/services/providers/sync_service.py +1 -1
  119. django_cfg/apps/payments/signals/__init__.py +1 -1
  120. django_cfg/apps/payments/signals/api_key_signals.py +1 -1
  121. django_cfg/apps/payments/signals/balance_signals.py +1 -1
  122. django_cfg/apps/payments/signals/payment_signals.py +1 -1
  123. django_cfg/apps/payments/signals/subscription_signals.py +1 -1
  124. django_cfg/apps/payments/views/api/api_keys.py +1 -1
  125. django_cfg/apps/payments/views/api/balances.py +1 -1
  126. django_cfg/apps/payments/views/api/base.py +1 -1
  127. django_cfg/apps/payments/views/api/currencies.py +1 -1
  128. django_cfg/apps/payments/views/api/payments.py +1 -1
  129. django_cfg/apps/payments/views/api/subscriptions.py +1 -1
  130. django_cfg/apps/payments/views/api/webhooks.py +1 -1
  131. django_cfg/apps/payments/views/serializers/api_keys.py +1 -1
  132. django_cfg/apps/payments/views/serializers/balances.py +1 -1
  133. django_cfg/apps/payments/views/serializers/currencies.py +1 -1
  134. django_cfg/apps/payments/views/serializers/payments.py +1 -1
  135. django_cfg/apps/payments/views/serializers/subscriptions.py +1 -1
  136. django_cfg/apps/payments/views/serializers/webhooks.py +1 -1
  137. django_cfg/apps/support/admin/support_admin.py +21 -13
  138. django_cfg/apps/support/templates/support/chat/access_denied.html +21 -27
  139. django_cfg/apps/support/templates/support/chat/ticket_chat.html +183 -254
  140. django_cfg/apps/support/utils/support_email_service.py +1 -1
  141. django_cfg/apps/tasks/templates/tasks/layout/base.html +20 -115
  142. django_cfg/apps/tasks/utils/simulator.py +1 -1
  143. django_cfg/apps/tasks/views/dashboard.py +33 -3
  144. django_cfg/apps/urls.py +5 -1
  145. django_cfg/cli/README.md +57 -471
  146. django_cfg/cli/commands/create_project.py +140 -529
  147. django_cfg/cli/main.py +13 -10
  148. django_cfg/core/__init__.py +63 -6
  149. django_cfg/core/base/__init__.py +5 -0
  150. django_cfg/core/base/config_model.py +652 -0
  151. django_cfg/core/builders/__init__.py +11 -0
  152. django_cfg/core/builders/apps_builder.py +258 -0
  153. django_cfg/core/builders/middleware_builder.py +115 -0
  154. django_cfg/core/builders/security_builder.py +96 -0
  155. django_cfg/core/config.py +20 -892
  156. django_cfg/core/constants.py +69 -0
  157. django_cfg/core/environment/__init__.py +9 -0
  158. django_cfg/core/exceptions.py +45 -298
  159. django_cfg/core/generation/__init__.py +51 -0
  160. django_cfg/core/generation/core_generators/__init__.py +0 -0
  161. django_cfg/core/generation/core_generators/settings.py +90 -0
  162. django_cfg/core/generation/core_generators/static.py +82 -0
  163. django_cfg/core/generation/core_generators/templates.py +141 -0
  164. django_cfg/core/generation/data_generators/__init__.py +15 -0
  165. django_cfg/core/generation/data_generators/cache.py +132 -0
  166. django_cfg/core/generation/data_generators/database.py +117 -0
  167. django_cfg/core/generation/generation.py +92 -0
  168. django_cfg/core/generation/integration_generators/__init__.py +21 -0
  169. django_cfg/core/generation/integration_generators/api.py +237 -0
  170. django_cfg/core/generation/integration_generators/sessions.py +65 -0
  171. django_cfg/core/generation/integration_generators/tailwind.py +54 -0
  172. django_cfg/core/generation/integration_generators/tasks.py +92 -0
  173. django_cfg/core/generation/integration_generators/third_party.py +144 -0
  174. django_cfg/core/generation/orchestrator.py +285 -0
  175. django_cfg/core/generation/protocols.py +30 -0
  176. django_cfg/core/generation/security_generators/__init__.py +0 -0
  177. django_cfg/core/generation/utility_generators/__init__.py +24 -0
  178. django_cfg/core/generation/utility_generators/email.py +58 -0
  179. django_cfg/core/generation/utility_generators/i18n.py +66 -0
  180. django_cfg/core/generation/utility_generators/limits.py +58 -0
  181. django_cfg/core/generation/utility_generators/logging.py +66 -0
  182. django_cfg/core/generation/utility_generators/security.py +101 -0
  183. django_cfg/core/generation/utils/__init__.py +0 -0
  184. django_cfg/core/generation/utils/helpers.py +32 -0
  185. django_cfg/core/integration/__init__.py +18 -25
  186. django_cfg/core/integration/display/startup.py +146 -133
  187. django_cfg/core/integration/url_integration.py +13 -2
  188. django_cfg/core/services/__init__.py +5 -0
  189. django_cfg/core/services/config_service.py +121 -0
  190. django_cfg/core/state/__init__.py +9 -0
  191. django_cfg/core/state/registry.py +84 -0
  192. django_cfg/core/types/__init__.py +15 -0
  193. django_cfg/core/types/aliases.py +15 -0
  194. django_cfg/core/types/enums.py +49 -0
  195. django_cfg/dashboard/DEBUG_README.md +105 -0
  196. django_cfg/dashboard/REFACTORING_SUMMARY.md +237 -0
  197. django_cfg/dashboard/__init__.py +24 -0
  198. django_cfg/dashboard/components.py +308 -0
  199. django_cfg/dashboard/debug.py +176 -0
  200. django_cfg/dashboard/management/__init__.py +0 -0
  201. django_cfg/dashboard/management/commands/__init__.py +0 -0
  202. django_cfg/dashboard/management/commands/debug_dashboard.py +109 -0
  203. django_cfg/dashboard/sections/__init__.py +1 -0
  204. django_cfg/dashboard/sections/base.py +128 -0
  205. django_cfg/dashboard/sections/commands.py +32 -0
  206. django_cfg/dashboard/sections/overview.py +394 -0
  207. django_cfg/dashboard/sections/stats.py +48 -0
  208. django_cfg/dashboard/sections/system.py +73 -0
  209. django_cfg/management/commands/check_settings.py +6 -2
  210. django_cfg/management/commands/clear_constance.py +6 -1
  211. django_cfg/management/commands/create_token.py +5 -4
  212. django_cfg/management/commands/generate.py +5 -0
  213. django_cfg/management/commands/list_urls.py +7 -2
  214. django_cfg/management/commands/migrate_all.py +6 -2
  215. django_cfg/management/commands/migrator.py +6 -1
  216. django_cfg/management/commands/rundramatiq.py +6 -1
  217. django_cfg/management/commands/rundramatiq_simulator.py +11 -4
  218. django_cfg/management/commands/runserver_ngrok.py +9 -7
  219. django_cfg/management/commands/script.py +25 -21
  220. django_cfg/management/commands/show_config.py +6 -1
  221. django_cfg/management/commands/show_urls.py +8 -3
  222. django_cfg/management/commands/superuser.py +5 -4
  223. django_cfg/management/commands/task_clear.py +8 -3
  224. django_cfg/management/commands/task_status.py +8 -3
  225. django_cfg/management/commands/test_email.py +6 -1
  226. django_cfg/management/commands/test_telegram.py +6 -1
  227. django_cfg/management/commands/test_twilio.py +6 -1
  228. django_cfg/management/commands/tree.py +7 -4
  229. django_cfg/models/__init__.py +88 -3
  230. django_cfg/models/api/__init__.py +27 -0
  231. django_cfg/models/{api.py → api/config.py} +1 -1
  232. django_cfg/models/api/drf/__init__.py +21 -0
  233. django_cfg/models/api/drf/config.py +101 -0
  234. django_cfg/models/api/drf/redoc.py +31 -0
  235. django_cfg/models/api/drf/spectacular.py +129 -0
  236. django_cfg/models/api/drf/swagger.py +59 -0
  237. django_cfg/models/{api_keys.py → api/keys.py} +16 -6
  238. django_cfg/models/{limits.py → api/limits.py} +0 -1
  239. django_cfg/models/base/__init__.py +14 -0
  240. django_cfg/models/django/__init__.py +16 -0
  241. django_cfg/models/{constance.py → django/constance.py} +1 -1
  242. django_cfg/models/{environment.py → django/environment.py} +1 -1
  243. django_cfg/models/infrastructure/__init__.py +17 -0
  244. django_cfg/models/{cache.py → infrastructure/cache.py} +3 -2
  245. django_cfg/models/infrastructure/database/__init__.py +22 -0
  246. django_cfg/models/infrastructure/database/config.py +265 -0
  247. django_cfg/models/infrastructure/database/converters.py +91 -0
  248. django_cfg/models/infrastructure/database/parsers.py +96 -0
  249. django_cfg/models/infrastructure/database/routing.py +85 -0
  250. django_cfg/models/infrastructure/database/validators.py +170 -0
  251. django_cfg/models/{logging.py → infrastructure/logging.py} +1 -1
  252. django_cfg/models/{security.py → infrastructure/security.py} +2 -2
  253. django_cfg/models/ngrok/__init__.py +11 -0
  254. django_cfg/models/ngrok/auth.py +37 -0
  255. django_cfg/models/ngrok/config.py +77 -0
  256. django_cfg/models/ngrok/tunnel.py +35 -0
  257. django_cfg/models/payments/__init__.py +20 -0
  258. django_cfg/models/payments/api_keys.py +57 -0
  259. django_cfg/models/{payments.py → payments/config.py} +56 -154
  260. django_cfg/models/payments/providers/__init__.py +15 -0
  261. django_cfg/models/payments/providers/base.py +25 -0
  262. django_cfg/models/payments/providers/nowpayments.py +48 -0
  263. django_cfg/models/services/__init__.py +18 -0
  264. django_cfg/models/services/base.py +65 -0
  265. django_cfg/models/{email.py → services/email.py} +1 -1
  266. django_cfg/models/services/telegram.py +172 -0
  267. django_cfg/models/tasks/__init__.py +51 -0
  268. django_cfg/models/tasks/backends.py +250 -0
  269. django_cfg/models/tasks/config.py +314 -0
  270. django_cfg/models/tasks/utils.py +174 -0
  271. django_cfg/modules/base.py +18 -3
  272. django_cfg/modules/django_admin/decorators/actions.py +1 -1
  273. django_cfg/modules/django_admin/decorators/display.py +1 -1
  274. django_cfg/modules/django_admin/mixins/standalone_actions_mixin.py +1 -1
  275. django_cfg/modules/django_currency/examples/__init__.py +3 -0
  276. django_cfg/modules/django_currency/examples/example_database_usage.py +144 -0
  277. django_cfg/modules/django_drf_theme/CHANGELOG.md +210 -0
  278. django_cfg/modules/django_drf_theme/EXAMPLE.md +465 -0
  279. django_cfg/modules/django_drf_theme/IMPLEMENTATION.md +232 -0
  280. django_cfg/modules/django_drf_theme/README.md +207 -0
  281. django_cfg/modules/django_drf_theme/TAILWIND_CDN_GUIDE.md +274 -0
  282. django_cfg/modules/django_drf_theme/__init__.py +23 -0
  283. django_cfg/modules/django_drf_theme/apps.py +15 -0
  284. django_cfg/modules/django_drf_theme/renderers.py +58 -0
  285. django_cfg/modules/django_drf_theme/templates/rest_framework/tailwind/api.html +375 -0
  286. django_cfg/modules/django_drf_theme/templates/rest_framework/tailwind/base.html +938 -0
  287. django_cfg/modules/django_drf_theme/templates/rest_framework/tailwind/forms/filter_form.html +132 -0
  288. django_cfg/modules/django_drf_theme/templates/rest_framework/tailwind/forms/raw_data_form.html +123 -0
  289. django_cfg/modules/django_drf_theme/templatetags/__init__.py +1 -0
  290. django_cfg/modules/django_drf_theme/templatetags/tailwind_tags.py +57 -0
  291. django_cfg/modules/django_email/__init__.py +14 -0
  292. django_cfg/modules/{django_email.py → django_email/service.py} +78 -113
  293. django_cfg/modules/django_email/utils.py +40 -0
  294. django_cfg/modules/django_health/__init__.py +9 -0
  295. django_cfg/modules/{django_health.py → django_health/service.py} +23 -21
  296. django_cfg/modules/django_ipc_client/README.md +346 -0
  297. django_cfg/modules/django_ipc_client/__init__.py +51 -0
  298. django_cfg/modules/django_ipc_client/client.py +540 -0
  299. django_cfg/modules/django_ipc_client/config.py +207 -0
  300. django_cfg/modules/django_ipc_client/dashboard/README.md +517 -0
  301. django_cfg/modules/django_ipc_client/dashboard/UNFOLD_INTEGRATION.md +439 -0
  302. django_cfg/modules/django_ipc_client/dashboard/__init__.py +11 -0
  303. django_cfg/modules/django_ipc_client/dashboard/apps.py +22 -0
  304. django_cfg/modules/django_ipc_client/dashboard/monitor.py +435 -0
  305. django_cfg/modules/django_ipc_client/dashboard/static/django_ipc_dashboard/js/dashboard.js +373 -0
  306. django_cfg/modules/django_ipc_client/dashboard/templates/django_ipc_dashboard/base.html +76 -0
  307. django_cfg/modules/django_ipc_client/dashboard/templates/django_ipc_dashboard/dashboard.html +200 -0
  308. django_cfg/modules/django_ipc_client/dashboard/urls.py +22 -0
  309. django_cfg/modules/django_ipc_client/dashboard/urls_admin.py +9 -0
  310. django_cfg/modules/django_ipc_client/dashboard/views.py +251 -0
  311. django_cfg/modules/django_ipc_client/exceptions.py +201 -0
  312. django_cfg/modules/django_llm/llm/client.py +155 -550
  313. django_cfg/modules/django_llm/llm/embeddings/__init__.py +13 -0
  314. django_cfg/modules/django_llm/llm/embeddings/mock_embedder.py +106 -0
  315. django_cfg/modules/django_llm/llm/embeddings/openai_embedder.py +79 -0
  316. django_cfg/modules/django_llm/llm/models_api/__init__.py +9 -0
  317. django_cfg/modules/django_llm/llm/models_api/models_query.py +163 -0
  318. django_cfg/modules/django_llm/llm/providers/__init__.py +15 -0
  319. django_cfg/modules/django_llm/llm/providers/config_builder.py +103 -0
  320. django_cfg/modules/django_llm/llm/providers/provider_manager.py +148 -0
  321. django_cfg/modules/django_llm/llm/providers/provider_selector.py +60 -0
  322. django_cfg/modules/django_llm/llm/requests/__init__.py +15 -0
  323. django_cfg/modules/django_llm/llm/requests/cache_manager.py +170 -0
  324. django_cfg/modules/django_llm/llm/requests/chat_handler.py +199 -0
  325. django_cfg/modules/django_llm/llm/requests/embedding_handler.py +113 -0
  326. django_cfg/modules/django_llm/llm/responses/__init__.py +9 -0
  327. django_cfg/modules/django_llm/llm/responses/response_builder.py +131 -0
  328. django_cfg/modules/django_llm/llm/stats/__init__.py +9 -0
  329. django_cfg/modules/django_llm/llm/stats/stats_manager.py +107 -0
  330. django_cfg/modules/django_llm/translator/detectors/__init__.py +13 -0
  331. django_cfg/modules/django_llm/translator/detectors/language_detector.py +90 -0
  332. django_cfg/modules/django_llm/translator/detectors/script_detector.py +153 -0
  333. django_cfg/modules/django_llm/translator/stats/__init__.py +11 -0
  334. django_cfg/modules/django_llm/translator/stats/stats_tracker.py +85 -0
  335. django_cfg/modules/django_llm/translator/translator.py +150 -603
  336. django_cfg/modules/django_llm/translator/translators/__init__.py +15 -0
  337. django_cfg/modules/django_llm/translator/translators/json_translator.py +316 -0
  338. django_cfg/modules/django_llm/translator/translators/text_translator.py +139 -0
  339. django_cfg/modules/django_llm/translator/utils/__init__.py +13 -0
  340. django_cfg/modules/django_llm/translator/utils/prompt_builder.py +110 -0
  341. django_cfg/modules/django_llm/translator/utils/text_utils.py +114 -0
  342. django_cfg/modules/django_logging/FIXES_SUMMARY.md +276 -0
  343. django_cfg/modules/django_logging/LOGGING_GUIDE.md +504 -0
  344. django_cfg/modules/django_logging/__init__.py +14 -0
  345. django_cfg/modules/{django_logger.py → django_logging/django_logger.py} +13 -13
  346. django_cfg/modules/{logger.py → django_logging/logger.py} +14 -4
  347. django_cfg/modules/django_ngrok/__init__.py +39 -0
  348. django_cfg/modules/{django_ngrok.py → django_ngrok/service.py} +14 -42
  349. django_cfg/modules/django_rpc_old/POETRY.md +344 -0
  350. django_cfg/modules/django_rpc_old/README.md +397 -0
  351. django_cfg/modules/django_rpc_old/TESTING.md +358 -0
  352. django_cfg/modules/django_rpc_old/__init__.py +39 -0
  353. django_cfg/modules/django_rpc_old/client.py +531 -0
  354. django_cfg/modules/django_rpc_old/config.py +279 -0
  355. django_cfg/modules/django_rpc_old/exceptions.py +172 -0
  356. django_cfg/modules/django_tailwind/README.md +478 -0
  357. django_cfg/modules/django_tailwind/__init__.py +7 -0
  358. django_cfg/modules/django_tailwind/apps.py +10 -0
  359. django_cfg/modules/django_tailwind/templates/django_tailwind/app.html +5 -0
  360. django_cfg/modules/django_tailwind/templates/django_tailwind/base.html +117 -0
  361. django_cfg/modules/django_tailwind/templates/django_tailwind/components/navbar.html +124 -0
  362. django_cfg/modules/django_tailwind/templates/django_tailwind/components/theme_toggle.html +54 -0
  363. django_cfg/modules/django_tailwind/templates/django_tailwind/components/user_menu.html +116 -0
  364. django_cfg/modules/django_tailwind/templates/django_tailwind/simple.html +46 -0
  365. django_cfg/modules/django_tailwind/templatetags/__init__.py +1 -0
  366. django_cfg/modules/django_tailwind/templatetags/tailwind_info.py +185 -0
  367. django_cfg/modules/django_tasks/__init__.py +29 -0
  368. django_cfg/modules/django_tasks/factory.py +127 -0
  369. django_cfg/modules/{django_tasks.py → django_tasks/service.py} +45 -274
  370. django_cfg/modules/django_tasks/settings.py +107 -0
  371. django_cfg/modules/django_telegram/__init__.py +29 -0
  372. django_cfg/modules/{django_telegram.py → django_telegram/service.py} +45 -113
  373. django_cfg/modules/django_telegram/utils.py +62 -0
  374. django_cfg/modules/django_twilio/__init__.py +54 -107
  375. django_cfg/modules/django_twilio/_imports.py +30 -0
  376. django_cfg/modules/django_twilio/base.py +192 -0
  377. django_cfg/modules/django_twilio/email_otp.py +227 -0
  378. django_cfg/modules/django_twilio/sendgrid_service.py +1 -1
  379. django_cfg/modules/django_twilio/simple_service.py +1 -2
  380. django_cfg/modules/django_twilio/sms.py +94 -0
  381. django_cfg/modules/django_twilio/twilio_service.py +2 -3
  382. django_cfg/modules/django_twilio/unified.py +310 -0
  383. django_cfg/modules/django_twilio/utils.py +190 -0
  384. django_cfg/modules/django_twilio/whatsapp.py +137 -0
  385. django_cfg/modules/django_unfold/callbacks/base.py +198 -7
  386. django_cfg/modules/django_unfold/callbacks/main.py +102 -10
  387. django_cfg/modules/django_unfold/dashboard.py +65 -43
  388. django_cfg/modules/django_unfold/models/config.py +13 -12
  389. django_cfg/modules/django_unfold/models/navigation.py +8 -3
  390. django_cfg/modules/django_unfold/models/tabs.py +2 -2
  391. django_cfg/modules/django_unfold/templates/unfold/helpers/app_list.html +102 -0
  392. django_cfg/registry/core.py +24 -26
  393. django_cfg/registry/modules.py +5 -2
  394. django_cfg/registry/services.py +20 -3
  395. django_cfg/registry/third_party.py +8 -8
  396. django_cfg/static/admin/css/dashboard.css +260 -0
  397. django_cfg/static/admin/js/commands.js +171 -0
  398. django_cfg/static/admin/js/dashboard.js +126 -0
  399. django_cfg/templates/admin/components/management_commands.js +375 -0
  400. django_cfg/templates/admin/components/progress_bar.html +18 -23
  401. django_cfg/templates/admin/examples/component_class_example.html +156 -0
  402. django_cfg/templates/admin/index.html +48 -20
  403. django_cfg/templates/admin/index_new.html +106 -0
  404. django_cfg/templates/admin/layouts/base_dashboard.html +60 -0
  405. django_cfg/templates/admin/layouts/dashboard_with_tabs.html +1 -20
  406. django_cfg/templates/admin/sections/commands_section.html +626 -0
  407. django_cfg/templates/admin/sections/overview_section.html +112 -0
  408. django_cfg/templates/admin/sections/stats_section.html +35 -0
  409. django_cfg/templates/admin/sections/system_section.html +99 -0
  410. django_cfg/templates/admin/snippets/components/CHARTS_GUIDE.md +322 -0
  411. django_cfg/templates/admin/snippets/components/activity_tracker.html +85 -47
  412. django_cfg/templates/admin/snippets/components/charts_section.html +154 -64
  413. django_cfg/templates/admin/snippets/components/django_commands.html +3 -3
  414. django_cfg/templates/admin/snippets/components/recent_activity_improved.html +25 -0
  415. django_cfg/templates/admin/snippets/components/recent_users_table.html +1 -1
  416. django_cfg/templates/admin/snippets/components/system_metrics.html +179 -93
  417. django_cfg/templates/admin/snippets/zones/zones_table.html +2 -2
  418. django_cfg/templatetags/django_cfg.py +7 -1
  419. django_cfg/utils/smart_defaults.py +4 -4
  420. django_cfg-1.4.3.dist-info/METADATA +533 -0
  421. {django_cfg-1.3.13.dist-info → django_cfg-1.4.3.dist-info}/RECORD +432 -195
  422. django_cfg/apps/accounts/utils/auth_email_service.py +0 -84
  423. django_cfg/apps/payments/services/providers/nowpayments/parsers.py +0 -879
  424. django_cfg/core/generation.py +0 -621
  425. django_cfg/management/commands/validate_config.py +0 -189
  426. django_cfg/models/database.py +0 -480
  427. django_cfg/models/drf.py +0 -272
  428. django_cfg/models/ngrok.py +0 -122
  429. django_cfg/models/services.py +0 -440
  430. django_cfg/models/tasks.py +0 -550
  431. django_cfg/modules/django_twilio/service.py +0 -942
  432. django_cfg/template_archive/django_sample.zip +0 -0
  433. django_cfg/templates/rest_framework/api.html +0 -12
  434. django_cfg/utils/toolkit.py +0 -703
  435. django_cfg-1.3.13.dist-info/METADATA +0 -1029
  436. /django_cfg/apps/accounts/management/commands/{test_otp.py → otp_test.py} +0 -0
  437. /django_cfg/core/{environment.py → environment/detector.py} +0 -0
  438. /django_cfg/models/{cors.py → api/cors.py} +0 -0
  439. /django_cfg/models/{jwt.py → api/jwt.py} +0 -0
  440. /django_cfg/models/{base.py → base/config.py} +0 -0
  441. /django_cfg/models/{cfg.py → base/module.py} +0 -0
  442. /django_cfg/models/{revolution.py → django/revolution.py} +0 -0
  443. /django_cfg/modules/{dramatiq_setup.py → django_tasks/dramatiq_setup.py} +0 -0
  444. {django_cfg-1.3.13.dist-info → django_cfg-1.4.3.dist-info}/WHEEL +0 -0
  445. {django_cfg-1.3.13.dist-info → django_cfg-1.4.3.dist-info}/entry_points.txt +0 -0
  446. {django_cfg-1.3.13.dist-info → django_cfg-1.4.3.dist-info}/licenses/LICENSE +0 -0
@@ -0,0 +1,478 @@
1
+ # Django Tailwind Layouts
2
+
3
+ Universal layouts for use across the entire django-cfg project.
4
+
5
+ ## 📋 Available Layouts
6
+
7
+ ### 1. `django_tailwind/base.html`
8
+ Base layout with minimal markup.
9
+
10
+ **Usage:**
11
+ ```django
12
+ {% extends 'django_tailwind/base.html' %}
13
+
14
+ {% block title %}My Page{% endblock %}
15
+ {% block content %}
16
+ <h1>Hello World</h1>
17
+ {% endblock %}
18
+ ```
19
+
20
+ **Blocks:**
21
+ - `title` - page title
22
+ - `extra_head` - additional tags in head
23
+ - `header` - header (empty by default)
24
+ - `content` - main content
25
+ - `footer` - footer (empty by default)
26
+ - `extra_js` - additional JS
27
+
28
+ ---
29
+
30
+ ### 2. `django_tailwind/app.html`
31
+ Layout for full-featured applications with header, footer and dark mode.
32
+
33
+ **Usage:**
34
+ ```django
35
+ {% extends 'django_tailwind/app.html' %}
36
+
37
+ {% block header_title %}My App{% endblock %}
38
+ {% block header_icon %}🚀{% endblock %}
39
+
40
+ {% block content %}
41
+ <h1>Dashboard</h1>
42
+ {% endblock %}
43
+ ```
44
+
45
+ **Blocks:**
46
+ - `header_title` - title in header (default: "Django CFG")
47
+ - `header_icon` - icon in header (default: 💎)
48
+ - `header_actions` - buttons in header (default: dark mode toggle)
49
+ - `header_nav` - navigation under header
50
+ - `content` - main content
51
+ - `footer_text` - text in footer
52
+
53
+ ---
54
+
55
+ ### 3. `django_tailwind/simple.html`
56
+ Layout for simple pages (success, error, 404, etc).
57
+
58
+ **Usage:**
59
+ ```django
60
+ {% extends 'django_tailwind/simple.html' %}
61
+
62
+ {% block icon %}✅{% endblock %}
63
+ {% block heading %}Success!{% endblock %}
64
+ {% block message %}
65
+ Payment completed successfully
66
+ {% endblock %}
67
+
68
+ {% block actions %}
69
+ <a href="/dashboard" class="btn-primary">
70
+ Go to Dashboard
71
+ </a>
72
+ {% endblock %}
73
+ ```
74
+
75
+ **Blocks:**
76
+ - `icon` - icon (emoji or SVG)
77
+ - `heading` - heading
78
+ - `message` - message
79
+ - `actions` - action buttons
80
+
81
+ ---
82
+
83
+ ## ✨ Features
84
+
85
+ ### Dark Mode
86
+ All layouts support dark mode via Alpine.js:
87
+ - Theme toggle included in all layouts
88
+ - State persisted in localStorage
89
+ - Automatic system theme detection
90
+ - Prevents flash on load (FOUC)
91
+ - Ready-to-use `theme_toggle.html` component
92
+
93
+ **Using the toggle component:**
94
+ ```django
95
+ <!-- Default variant (with background) -->
96
+ {% include 'django_tailwind/components/theme_toggle.html' %}
97
+
98
+ <!-- Icon only (compact) -->
99
+ {% include 'django_tailwind/components/theme_toggle.html' with button_variant="icon" %}
100
+
101
+ <!-- With text label -->
102
+ {% include 'django_tailwind/components/theme_toggle.html' with button_variant="text" %}
103
+
104
+ <!-- Custom classes -->
105
+ {% include 'django_tailwind/components/theme_toggle.html' with button_class="my-custom-class" %}
106
+ ```
107
+
108
+ ### Tailwind CSS
109
+ All layouts use **django-tailwind** via `{% tailwind_css %}`:
110
+ - Compilation via django-tailwind app
111
+ - PurgeCSS in production
112
+ - Hot reload in development
113
+
114
+ ### Alpine.js
115
+ Included in all layouts for interactivity:
116
+ - Dark mode toggle
117
+ - Dynamic components
118
+ - Form validation
119
+
120
+ ---
121
+
122
+ ## 📦 Template Tags
123
+
124
+ ### Library Information
125
+
126
+ ```django
127
+ {% load tailwind_info %}
128
+
129
+ {# Library name #}
130
+ {% tailwind_lib_name %} {# Django Tailwind Layouts #}
131
+
132
+ {# Version #}
133
+ {% tailwind_lib_version %} {# 1.0.0 #}
134
+
135
+ {# Description #}
136
+ {% tailwind_lib_description %}
137
+
138
+ {# URL #}
139
+ {% tailwind_lib_url %}
140
+
141
+ {# Ready-made HTML for footer #}
142
+ {% tailwind_powered_by %}
143
+
144
+ {# Text for footer #}
145
+ {% tailwind_footer_text %}
146
+ ```
147
+
148
+ ---
149
+
150
+ ## 🎨 Components
151
+
152
+ ### Navbar (Navigation Bar)
153
+
154
+ Universal navbar with support for navigation links and theme toggle.
155
+
156
+ **Location:**
157
+ ```
158
+ django_tailwind/components/navbar.html
159
+ ```
160
+
161
+ **Parameters:**
162
+ - `title` - Navbar title (default: "Django CFG")
163
+ - `icon` - Icon (emoji or HTML)
164
+ - `nav_items` - List of navigation items
165
+ - `show_theme_toggle` - Show dark mode toggle (default: True)
166
+ - `show_user_menu` - Show user menu dropdown (default: True)
167
+ - `sticky` - Fixed navbar (default: True)
168
+
169
+ **Usage:**
170
+
171
+ 1. **Simple navbar:**
172
+ ```django
173
+ {% include 'django_tailwind/components/navbar.html' with title="My App" icon="🚀" %}
174
+ ```
175
+
176
+ 2. **With navigation links:**
177
+ ```django
178
+ {# In view pass: #}
179
+ nav_items = [
180
+ {'label': 'Dashboard', 'url': '/dashboard/', 'active': True, 'icon': '📊'},
181
+ {'label': 'Settings', 'url': '/settings/'},
182
+ ]
183
+
184
+ {# In template: #}
185
+ {% include 'django_tailwind/components/navbar.html' with title="Admin" nav_items=nav_items %}
186
+ ```
187
+
188
+ 3. **Customization via app.html:**
189
+ ```django
190
+ {% extends 'django_tailwind/app.html' %}
191
+
192
+ {% block header %}
193
+ {% include 'django_tailwind/components/navbar.html' with title="Payment Admin" icon='<span class="material-icons">payment</span>' nav_items=navbar_items %}
194
+ {% endblock %}
195
+ ```
196
+
197
+ ---
198
+
199
+ ### Theme Toggle (Theme Switcher)
200
+
201
+ Ready-to-use component for switching between dark/light mode.
202
+
203
+ **Location:**
204
+ ```
205
+ django_tailwind/components/theme_toggle.html
206
+ ```
207
+
208
+ **Variants:**
209
+
210
+ 1. **Default** - with background on hover:
211
+ ```django
212
+ {% include 'django_tailwind/components/theme_toggle.html' %}
213
+ ```
214
+
215
+ 2. **Icon** - icon only (compact):
216
+ ```django
217
+ {% include 'django_tailwind/components/theme_toggle.html' with button_variant="icon" %}
218
+ ```
219
+
220
+ 3. **Text** - with text label:
221
+ ```django
222
+ {% include 'django_tailwind/components/theme_toggle.html' with button_variant="text" %}
223
+ ```
224
+
225
+ 4. **Floating button** (for simple pages):
226
+ ```django
227
+ <div class="fixed top-4 right-4 z-50">
228
+ {% include 'django_tailwind/components/theme_toggle.html' %}
229
+ </div>
230
+ ```
231
+
232
+ ---
233
+
234
+ ### User Menu (User Dropdown)
235
+
236
+ Dropdown user menu with avatar, information and links.
237
+
238
+ **Location:**
239
+ ```
240
+ django_tailwind/components/user_menu.html
241
+ ```
242
+
243
+ **Features:**
244
+ - Shows only for authenticated users
245
+ - Avatar with initials (auto-generated from name or username)
246
+ - Display name and email
247
+ - Admin panel link (automatically for staff users)
248
+ - Optional links: profile, logout
249
+ - Alpine.js dropdown with animation
250
+
251
+ **Parameters:**
252
+ - `show_admin`: Show admin link (default: auto for staff)
253
+ - `show_profile`: Show profile link (default: False)
254
+ - `show_logout`: Show logout link (default: False)
255
+ - `profile_url`: Profile URL (default: /profile/)
256
+ - `logout_url`: Logout URL (default: /accounts/logout/)
257
+
258
+ **Usage:**
259
+
260
+ 1. **Default** (admin link for staff only):
261
+ ```django
262
+ {% include 'django_tailwind/components/user_menu.html' %}
263
+ ```
264
+
265
+ 2. **With profile and logout:**
266
+ ```django
267
+ {% include 'django_tailwind/components/user_menu.html' with show_profile=True show_logout=True %}
268
+ ```
269
+
270
+ 3. **With custom URLs:**
271
+ ```django
272
+ {% include 'django_tailwind/components/user_menu.html' with
273
+ show_profile=True
274
+ show_logout=True
275
+ profile_url="/dashboard/profile/"
276
+ logout_url="/auth/logout/" %}
277
+ ```
278
+
279
+ 4. **In navbar** (already included by default):
280
+ ```django
281
+ {# User menu automatically included in navbar #}
282
+ {% include 'django_tailwind/components/navbar.html' with title="My App" %}
283
+
284
+ {# Disable user menu #}
285
+ {% include 'django_tailwind/components/navbar.html' with show_user_menu=False %}
286
+
287
+ {# With profile and logout #}
288
+ {% include 'django_tailwind/components/navbar.html' with
289
+ show_profile=True
290
+ show_logout=True %}
291
+ ```
292
+
293
+ **Template Tags:**
294
+
295
+ User menu uses special templatetags from `tailwind_info`:
296
+
297
+ ```django
298
+ {% load tailwind_info %}
299
+
300
+ {# Get admin URL from settings or default #}
301
+ {% get_admin_url as admin_url %}
302
+
303
+ {# Get user display name #}
304
+ {% get_user_display_name as user_name %}
305
+
306
+ {# Get initials for avatar #}
307
+ {% get_user_initials as initials %}
308
+ ```
309
+
310
+ ---
311
+
312
+ ## 📦 Usage Examples
313
+
314
+ ### Example 1: Success Page
315
+ ```django
316
+ {% extends 'django_tailwind/simple.html' %}
317
+
318
+ {% block icon %}✅{% endblock %}
319
+ {% block heading %}Payment Successful{% endblock %}
320
+ {% block message %}
321
+ We received your payment and will process it shortly.
322
+ {% endblock %}
323
+ ```
324
+
325
+ ### Example 2: Dashboard with Navigation
326
+
327
+ **View (dashboard.py):**
328
+ ```python
329
+ def dashboard_view(request):
330
+ nav_items = [
331
+ {'label': 'Overview', 'url': '/dashboard/', 'active': True},
332
+ {'label': 'Users', 'url': '/dashboard/users/'},
333
+ {'label': 'Settings', 'url': '/dashboard/settings/'},
334
+ ]
335
+
336
+ context = {
337
+ 'navbar_title': 'Admin Dashboard',
338
+ 'navbar_icon': '📊',
339
+ 'navbar_items': nav_items,
340
+ }
341
+ return render(request, 'dashboard.html', context)
342
+ ```
343
+
344
+ **Template (dashboard.html):**
345
+ ```django
346
+ {% extends 'django_tailwind/app.html' %}
347
+
348
+ {% block content %}
349
+ <div class="grid grid-cols-3 gap-6">
350
+ <!-- Stats cards -->
351
+ </div>
352
+ {% endblock %}
353
+ ```
354
+
355
+ ### Example 3: Custom Layout
356
+ ```django
357
+ {% extends 'django_tailwind/base.html' %}
358
+
359
+ {% block header %}
360
+ <header class="custom-header">
361
+ <!-- Your custom header -->
362
+ </header>
363
+ {% endblock %}
364
+
365
+ {% block content %}
366
+ <!-- Your content -->
367
+ {% endblock %}
368
+ ```
369
+
370
+ ---
371
+
372
+ ## 🎨 Customization
373
+
374
+ ### Overriding Styles
375
+ ```django
376
+ {% extends 'django_tailwind/app.html' %}
377
+
378
+ {% block extra_head %}
379
+ <style>
380
+ .custom-btn {
381
+ @apply px-6 py-3 bg-purple-600 text-white rounded-lg;
382
+ }
383
+ </style>
384
+ {% endblock %}
385
+ ```
386
+
387
+ ### Adding Custom Blocks
388
+ ```django
389
+ {% extends 'django_tailwind/app.html' %}
390
+
391
+ {% block header_actions %}
392
+ {{ block.super }} <!-- Keep dark mode toggle -->
393
+ <button class="btn">Notifications</button>
394
+ {% endblock %}
395
+ ```
396
+
397
+ ---
398
+
399
+ ## 🚀 Migrating Existing Templates
400
+
401
+ ### Before (CDN):
402
+ ```django
403
+ <!DOCTYPE html>
404
+ <html>
405
+ <head>
406
+ <script src="https://cdn.tailwindcss.com"></script>
407
+ </head>
408
+ <body>
409
+ <h1>Hello</h1>
410
+ </body>
411
+ </html>
412
+ ```
413
+
414
+ ### After (django-tailwind):
415
+ ```django
416
+ {% extends 'django_tailwind/simple.html' %}
417
+
418
+ {% block heading %}Hello{% endblock %}
419
+ ```
420
+
421
+ **Benefits:**
422
+ - ✅ Less code
423
+ - ✅ Unified style
424
+ - ✅ Dark mode out of the box
425
+ - ✅ Production-ready (PurgeCSS)
426
+ - ✅ Hot reload in dev
427
+
428
+ ---
429
+
430
+ ## 📁 File Structure
431
+
432
+ ```
433
+ modules/django_tailwind/
434
+ ├── templates/
435
+ │ └── django_tailwind/
436
+ │ ├── base.html # Base layout
437
+ │ ├── app.html # Layout for applications
438
+ │ ├── simple.html # Layout for simple pages
439
+ │ └── components/
440
+ │ ├── navbar.html # Universal navbar
441
+ │ ├── theme_toggle.html # Dark mode toggle
442
+ │ └── user_menu.html # User dropdown menu
443
+ └── templatetags/
444
+ └── tailwind_info.py # Template tags for library info
445
+ ```
446
+
447
+ ---
448
+
449
+ ## 🌙 Dark Mode Implementation
450
+
451
+ All layouts use **class-based dark mode** via Alpine.js:
452
+
453
+ 1. **Initialization** (in `base.html`):
454
+ - Reads from localStorage or system preference
455
+ - Applies `.dark` class to `<html>` immediately to prevent flash
456
+ - Sets up Alpine.js reactive state
457
+
458
+ 2. **CSS Overrides**:
459
+ - Ensures `dark:` classes only work with `.dark` class
460
+ - Prevents conflicts with media query dark mode
461
+ - Smooth transitions on theme change
462
+
463
+ 3. **Toggle Component**:
464
+ - Updates Alpine.js state
465
+ - Persists to localStorage
466
+ - Toggles `.dark` class on `<html>`
467
+
468
+ **Why class-based?**
469
+ - Full control over theme switching
470
+ - No dependency on system preferences (unless user wants it)
471
+ - Works with compiled Tailwind CSS
472
+ - Prevents flash of unstyled content (FOUC)
473
+
474
+ ---
475
+
476
+ **Last Updated**: 2025-10-03
477
+ **Version**: 1.0.0
478
+ **Author**: Django-CFG Team
@@ -0,0 +1,7 @@
1
+ """
2
+ Django Tailwind Layouts Module
3
+
4
+ Provides universal layout templates for Django applications.
5
+ """
6
+
7
+ default_app_config = 'django_cfg.modules.django_tailwind.apps.DjangoTailwindConfig'
@@ -0,0 +1,10 @@
1
+ from django.apps import AppConfig
2
+
3
+
4
+ class DjangoTailwindConfig(AppConfig):
5
+ """Django Tailwind Layouts app configuration."""
6
+
7
+ default_auto_field = 'django.db.models.BigAutoField'
8
+ name = 'django_cfg.modules.django_tailwind'
9
+ label = 'django_cfg_tailwind'
10
+ verbose_name = 'Django Tailwind Layouts'
@@ -0,0 +1,5 @@
1
+ {% extends 'django_tailwind/base.html' %}
2
+
3
+ {% block header %}
4
+ {% include 'django_tailwind/components/navbar.html' with title=navbar_title|default:header_title|default:"Django CFG" icon=navbar_icon|default:header_icon|default:"💎" nav_items=navbar_items sticky=navbar_sticky|default:True show_theme_toggle=navbar_show_theme|default:True %}
5
+ {% endblock %}
@@ -0,0 +1,117 @@
1
+ {% load static tailwind_tags %}
2
+ <!DOCTYPE html>
3
+ <html lang="en" class="h-full">
4
+ <head>
5
+ <meta charset="UTF-8">
6
+ <meta name="viewport" content="width=device-width, initial-scale=1.0">
7
+ <title>{% block title %}{% block page_title %}Page{% endblock %} - Django CFG{% endblock %}</title>
8
+
9
+ <!-- Tailwind CSS (compiled via django-tailwind) -->
10
+ {% tailwind_css %}
11
+
12
+ <!-- Alpine.js for interactivity -->
13
+ <script defer src="https://unpkg.com/alpinejs@3.x.x/dist/cdn.min.js"></script>
14
+
15
+ {% block extra_head %}{% endblock %}
16
+
17
+ <style>
18
+ /* Prevent flash of unstyled content */
19
+ [x-cloak] { display: none !important; }
20
+
21
+ /* Override Tailwind's media-query dark mode with class-based dark mode */
22
+ /* This ensures dark: classes work when .dark is on <html>, not just media queries */
23
+
24
+ /* Force light mode when NOT in dark mode - override media queries */
25
+ @media (prefers-color-scheme: dark) {
26
+ html:not(.dark) body,
27
+ html:not(.dark) .dark\:bg-gray-900,
28
+ html:not(.dark) .dark\:bg-gray-800,
29
+ html:not(.dark) .dark\:bg-gray-700,
30
+ html:not(.dark) .dark\:bg-gray-600 {
31
+ background-color: inherit !important;
32
+ }
33
+
34
+ html:not(.dark) .dark\:text-gray-100,
35
+ html:not(.dark) .dark\:text-white,
36
+ html:not(.dark) .dark\:text-gray-300,
37
+ html:not(.dark) .dark\:text-gray-400,
38
+ html:not(.dark) .dark\:text-gray-500 {
39
+ color: inherit !important;
40
+ }
41
+
42
+ html:not(.dark) .dark\:border-gray-700,
43
+ html:not(.dark) .dark\:border-gray-600,
44
+ html:not(.dark) .dark\:border-gray-800 {
45
+ border-color: inherit !important;
46
+ }
47
+
48
+ html:not(.dark) .dark\:hover\:bg-gray-700:hover,
49
+ html:not(.dark) .dark\:hover\:bg-gray-800:hover {
50
+ background-color: inherit !important;
51
+ }
52
+
53
+ html:not(.dark) .dark\:hover\:text-white:hover,
54
+ html:not(.dark) .dark\:hover\:text-blue-400:hover {
55
+ color: inherit !important;
56
+ }
57
+ }
58
+ </style>
59
+
60
+ <!-- Dark mode initialization (prevents flash) -->
61
+ <script>
62
+ (function() {
63
+ const isDark = localStorage.getItem('darkMode') === 'true' ||
64
+ (!localStorage.getItem('darkMode') && window.matchMedia('(prefers-color-scheme: dark)').matches);
65
+ if (isDark) {
66
+ document.documentElement.classList.add('dark');
67
+ }
68
+ })();
69
+ </script>
70
+ </head>
71
+ <body class="h-full bg-gray-50 dark:bg-gray-900"
72
+ x-data="{ darkMode: localStorage.getItem('darkMode') === 'true' || (!localStorage.getItem('darkMode') && window.matchMedia('(prefers-color-scheme: dark)').matches){% block alpine_data_extra %}{% endblock %} }"
73
+ x-init="$watch('darkMode', val => { localStorage.setItem('darkMode', val); document.documentElement.classList.toggle('dark', val); }){% block alpine_init_extra %}{% endblock %}">
74
+
75
+ {% block body %}
76
+ <div class="min-h-full flex flex-col">
77
+ {% block header %}{% endblock %}
78
+
79
+ <!-- Main Content -->
80
+ <main class="flex-1">
81
+ {% block main %}
82
+ <div class="{% block container_class %}max-w-7xl mx-auto px-4 sm:px-6 lg:px-8 py-6{% endblock %}">
83
+ {% block content %}{% endblock %}
84
+ </div>
85
+ {% endblock %}
86
+ </main>
87
+
88
+ {% block footer %}
89
+ {% load django_cfg %}
90
+ <footer class="bg-white dark:bg-gray-800 border-t border-gray-200 dark:border-gray-700 mt-auto">
91
+ <div class="max-w-7xl mx-auto px-4 sm:px-6 lg:px-8 py-6">
92
+ {% block footer_content %}
93
+ <div class="text-center">
94
+ {% block footer_text %}
95
+ <p class="text-sm text-gray-600 dark:text-gray-400">
96
+ Powered by
97
+ <a href="{% lib_site_url %}"
98
+ class="text-blue-600 dark:text-blue-400 hover:text-blue-700 dark:hover:text-blue-300 font-medium transition-colors"
99
+ target="_blank" rel="noopener noreferrer">
100
+ {% lib_name %}
101
+ </a>
102
+ </p>
103
+ <p class="mt-2 text-xs text-gray-500 dark:text-gray-500">
104
+ {% lib_subtitle %}
105
+ </p>
106
+ {% endblock %}
107
+ </div>
108
+ {% endblock %}
109
+ </div>
110
+ </footer>
111
+ {% endblock %}
112
+ </div>
113
+ {% endblock %}
114
+
115
+ {% block extra_js %}{% endblock %}
116
+ </body>
117
+ </html>