django-cfg 1.4.9__py3-none-any.whl → 1.4.11__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 (193) hide show
  1. django_cfg/apps/agents/management/commands/create_agent.py +1 -1
  2. django_cfg/apps/agents/management/commands/orchestrator_status.py +3 -3
  3. django_cfg/apps/newsletter/serializers.py +40 -3
  4. django_cfg/apps/newsletter/views/campaigns.py +12 -3
  5. django_cfg/apps/newsletter/views/emails.py +14 -3
  6. django_cfg/apps/newsletter/views/subscriptions.py +12 -2
  7. django_cfg/apps/payments/middleware/api_access.py +6 -2
  8. django_cfg/apps/payments/middleware/rate_limiting.py +2 -1
  9. django_cfg/apps/payments/middleware/usage_tracking.py +5 -1
  10. django_cfg/apps/payments/models/managers/api_key_managers.py +0 -1
  11. django_cfg/apps/payments/models/managers/subscription_managers.py +0 -1
  12. django_cfg/apps/payments/services/core/balance_service.py +5 -5
  13. django_cfg/apps/payments/services/core/subscription_service.py +1 -2
  14. django_cfg/apps/payments/views/api/balances.py +8 -7
  15. django_cfg/apps/payments/views/api/base.py +10 -6
  16. django_cfg/apps/payments/views/api/currencies.py +53 -10
  17. django_cfg/apps/payments/views/api/payments.py +3 -1
  18. django_cfg/apps/payments/views/api/subscriptions.py +2 -5
  19. django_cfg/apps/payments/views/api/webhooks.py +72 -7
  20. django_cfg/apps/payments/views/overview/serializers.py +34 -1
  21. django_cfg/apps/payments/views/overview/views.py +2 -1
  22. django_cfg/apps/payments/views/serializers/payments.py +6 -6
  23. django_cfg/apps/urls.py +106 -45
  24. django_cfg/core/base/config_model.py +2 -2
  25. django_cfg/core/constants.py +1 -1
  26. django_cfg/core/generation/integration_generators/__init__.py +1 -1
  27. django_cfg/core/generation/integration_generators/api.py +82 -41
  28. django_cfg/core/integration/display/startup.py +30 -22
  29. django_cfg/core/integration/url_integration.py +15 -16
  30. django_cfg/dashboard/sections/documentation.py +391 -0
  31. django_cfg/management/commands/check_endpoints.py +11 -160
  32. django_cfg/management/commands/check_settings.py +13 -265
  33. django_cfg/management/commands/clear_constance.py +13 -201
  34. django_cfg/management/commands/create_token.py +13 -321
  35. django_cfg/management/commands/generate_clients.py +23 -0
  36. django_cfg/management/commands/list_urls.py +13 -306
  37. django_cfg/management/commands/migrate_all.py +13 -126
  38. django_cfg/management/commands/migrator.py +13 -396
  39. django_cfg/management/commands/rundramatiq.py +15 -247
  40. django_cfg/management/commands/rundramatiq_simulator.py +12 -429
  41. django_cfg/management/commands/runserver_ngrok.py +15 -160
  42. django_cfg/management/commands/script.py +12 -488
  43. django_cfg/management/commands/show_config.py +12 -215
  44. django_cfg/management/commands/show_urls.py +12 -342
  45. django_cfg/management/commands/superuser.py +15 -295
  46. django_cfg/management/commands/task_clear.py +14 -217
  47. django_cfg/management/commands/task_status.py +13 -248
  48. django_cfg/management/commands/test_email.py +15 -86
  49. django_cfg/management/commands/test_telegram.py +14 -61
  50. django_cfg/management/commands/test_twilio.py +15 -105
  51. django_cfg/management/commands/tree.py +13 -383
  52. django_cfg/management/commands/validate_openapi.py +10 -0
  53. django_cfg/middleware/README.md +1 -1
  54. django_cfg/middleware/user_activity.py +3 -3
  55. django_cfg/models/__init__.py +2 -2
  56. django_cfg/models/api/drf/spectacular.py +6 -6
  57. django_cfg/models/django/__init__.py +2 -2
  58. django_cfg/models/django/openapi.py +238 -0
  59. django_cfg/models/django/{revolution.py → revolution_legacy.py} +8 -0
  60. django_cfg/modules/django_admin/management/__init__.py +0 -0
  61. django_cfg/modules/django_admin/management/commands/__init__.py +0 -0
  62. django_cfg/modules/django_admin/management/commands/check_endpoints.py +169 -0
  63. django_cfg/modules/django_admin/management/commands/check_settings.py +355 -0
  64. django_cfg/modules/django_admin/management/commands/clear_constance.py +208 -0
  65. django_cfg/modules/django_admin/management/commands/create_token.py +328 -0
  66. django_cfg/modules/django_admin/management/commands/list_urls.py +313 -0
  67. django_cfg/modules/django_admin/management/commands/migrate_all.py +133 -0
  68. django_cfg/modules/django_admin/management/commands/migrator.py +403 -0
  69. django_cfg/modules/django_admin/management/commands/script.py +496 -0
  70. django_cfg/modules/django_admin/management/commands/show_config.py +225 -0
  71. django_cfg/modules/django_admin/management/commands/show_urls.py +361 -0
  72. django_cfg/modules/django_admin/management/commands/superuser.py +302 -0
  73. django_cfg/modules/django_admin/management/commands/tree.py +390 -0
  74. django_cfg/modules/django_client/__init__.py +20 -0
  75. django_cfg/modules/django_client/apps.py +35 -0
  76. django_cfg/modules/django_client/core/__init__.py +56 -0
  77. django_cfg/modules/django_client/core/archive/__init__.py +11 -0
  78. django_cfg/modules/django_client/core/archive/manager.py +134 -0
  79. django_cfg/modules/django_client/core/cli/__init__.py +12 -0
  80. django_cfg/modules/django_client/core/cli/main.py +235 -0
  81. django_cfg/modules/django_client/core/config/__init__.py +18 -0
  82. django_cfg/modules/django_client/core/config/config.py +188 -0
  83. django_cfg/modules/django_client/core/config/group.py +101 -0
  84. django_cfg/modules/django_client/core/config/service.py +209 -0
  85. django_cfg/modules/django_client/core/generator/__init__.py +115 -0
  86. django_cfg/modules/django_client/core/generator/base.py +767 -0
  87. django_cfg/modules/django_client/core/generator/python.py +751 -0
  88. django_cfg/modules/django_client/core/generator/templates/python/__init__.py.jinja +9 -0
  89. django_cfg/modules/django_client/core/generator/templates/python/api_wrapper.py.jinja +130 -0
  90. django_cfg/modules/django_client/core/generator/templates/python/app_init.py.jinja +6 -0
  91. django_cfg/modules/django_client/core/generator/templates/python/client/app_client.py.jinja +18 -0
  92. django_cfg/modules/django_client/core/generator/templates/python/client/flat_client.py.jinja +38 -0
  93. django_cfg/modules/django_client/core/generator/templates/python/client/main_client.py.jinja +50 -0
  94. django_cfg/modules/django_client/core/generator/templates/python/client/main_client_file.py.jinja +13 -0
  95. django_cfg/modules/django_client/core/generator/templates/python/client/operation_method.py.jinja +7 -0
  96. django_cfg/modules/django_client/core/generator/templates/python/client/sub_client.py.jinja +11 -0
  97. django_cfg/modules/django_client/core/generator/templates/python/client_file.py.jinja +13 -0
  98. django_cfg/modules/django_client/core/generator/templates/python/main_init.py.jinja +50 -0
  99. django_cfg/modules/django_client/core/generator/templates/python/models/app_models.py.jinja +17 -0
  100. django_cfg/modules/django_client/core/generator/templates/python/models/enum_class.py.jinja +15 -0
  101. django_cfg/modules/django_client/core/generator/templates/python/models/enums.py.jinja +8 -0
  102. django_cfg/modules/django_client/core/generator/templates/python/models/models.py.jinja +17 -0
  103. django_cfg/modules/django_client/core/generator/templates/python/models/schema_class.py.jinja +19 -0
  104. django_cfg/modules/django_client/core/generator/templates/python/utils/logger.py.jinja +255 -0
  105. django_cfg/modules/django_client/core/generator/templates/python/utils/schema.py.jinja +12 -0
  106. django_cfg/modules/django_client/core/generator/templates/typescript/app_index.ts.jinja +2 -0
  107. django_cfg/modules/django_client/core/generator/templates/typescript/client/app_client.ts.jinja +18 -0
  108. django_cfg/modules/django_client/core/generator/templates/typescript/client/client.ts.jinja +327 -0
  109. django_cfg/modules/django_client/core/generator/templates/typescript/client/flat_client.ts.jinja +109 -0
  110. django_cfg/modules/django_client/core/generator/templates/typescript/client/main_client_file.ts.jinja +9 -0
  111. django_cfg/modules/django_client/core/generator/templates/typescript/client/operation.ts.jinja +61 -0
  112. django_cfg/modules/django_client/core/generator/templates/typescript/client/sub_client.ts.jinja +15 -0
  113. django_cfg/modules/django_client/core/generator/templates/typescript/client_file.ts.jinja +9 -0
  114. django_cfg/modules/django_client/core/generator/templates/typescript/index.ts.jinja +5 -0
  115. django_cfg/modules/django_client/core/generator/templates/typescript/main_index.ts.jinja +206 -0
  116. django_cfg/modules/django_client/core/generator/templates/typescript/models/app_models.ts.jinja +8 -0
  117. django_cfg/modules/django_client/core/generator/templates/typescript/models/enums.ts.jinja +4 -0
  118. django_cfg/modules/django_client/core/generator/templates/typescript/models/models.ts.jinja +8 -0
  119. django_cfg/modules/django_client/core/generator/templates/typescript/utils/errors.ts.jinja +114 -0
  120. django_cfg/modules/django_client/core/generator/templates/typescript/utils/http.ts.jinja +98 -0
  121. django_cfg/modules/django_client/core/generator/templates/typescript/utils/logger.ts.jinja +251 -0
  122. django_cfg/modules/django_client/core/generator/templates/typescript/utils/schema.ts.jinja +7 -0
  123. django_cfg/modules/django_client/core/generator/templates/typescript/utils/storage.ts.jinja +114 -0
  124. django_cfg/modules/django_client/core/generator/typescript.py +872 -0
  125. django_cfg/modules/django_client/core/groups/__init__.py +13 -0
  126. django_cfg/modules/django_client/core/groups/detector.py +178 -0
  127. django_cfg/modules/django_client/core/groups/manager.py +314 -0
  128. django_cfg/modules/django_client/core/ir/__init__.py +57 -0
  129. django_cfg/modules/django_client/core/ir/context.py +387 -0
  130. django_cfg/modules/django_client/core/ir/operation.py +518 -0
  131. django_cfg/modules/django_client/core/ir/schema.py +353 -0
  132. django_cfg/modules/django_client/core/parser/__init__.py +74 -0
  133. django_cfg/modules/django_client/core/parser/base.py +648 -0
  134. django_cfg/modules/django_client/core/parser/models/__init__.py +74 -0
  135. django_cfg/modules/django_client/core/parser/models/base.py +212 -0
  136. django_cfg/modules/django_client/core/parser/models/components.py +160 -0
  137. django_cfg/modules/django_client/core/parser/models/openapi.py +203 -0
  138. django_cfg/modules/django_client/core/parser/models/operation.py +207 -0
  139. django_cfg/modules/django_client/core/parser/models/schema.py +266 -0
  140. django_cfg/modules/django_client/core/parser/openapi30.py +56 -0
  141. django_cfg/modules/django_client/core/parser/openapi31.py +64 -0
  142. django_cfg/modules/django_client/core/validation/__init__.py +22 -0
  143. django_cfg/modules/django_client/core/validation/checker.py +134 -0
  144. django_cfg/modules/django_client/core/validation/fixer.py +216 -0
  145. django_cfg/modules/django_client/core/validation/reporter.py +480 -0
  146. django_cfg/modules/django_client/core/validation/rules/__init__.py +11 -0
  147. django_cfg/modules/django_client/core/validation/rules/base.py +96 -0
  148. django_cfg/modules/django_client/core/validation/rules/type_hints.py +288 -0
  149. django_cfg/modules/django_client/core/validation/safety.py +266 -0
  150. django_cfg/modules/django_client/management/__init__.py +3 -0
  151. django_cfg/modules/django_client/management/commands/__init__.py +3 -0
  152. django_cfg/modules/django_client/management/commands/generate_client.py +422 -0
  153. django_cfg/modules/django_client/management/commands/validate_openapi.py +343 -0
  154. django_cfg/modules/django_client/spectacular/__init__.py +9 -0
  155. django_cfg/modules/django_client/spectacular/enum_naming.py +192 -0
  156. django_cfg/modules/django_client/urls.py +72 -0
  157. django_cfg/modules/django_email/management/__init__.py +0 -0
  158. django_cfg/modules/django_email/management/commands/__init__.py +0 -0
  159. django_cfg/modules/django_email/management/commands/test_email.py +93 -0
  160. django_cfg/modules/django_logging/django_logger.py +6 -6
  161. django_cfg/modules/django_ngrok/management/__init__.py +0 -0
  162. django_cfg/modules/django_ngrok/management/commands/__init__.py +0 -0
  163. django_cfg/modules/django_ngrok/management/commands/runserver_ngrok.py +167 -0
  164. django_cfg/modules/django_tasks/management/__init__.py +0 -0
  165. django_cfg/modules/django_tasks/management/commands/__init__.py +0 -0
  166. django_cfg/modules/django_tasks/management/commands/rundramatiq.py +254 -0
  167. django_cfg/modules/django_tasks/management/commands/rundramatiq_simulator.py +437 -0
  168. django_cfg/modules/django_tasks/management/commands/task_clear.py +226 -0
  169. django_cfg/modules/django_tasks/management/commands/task_status.py +257 -0
  170. django_cfg/modules/django_telegram/management/__init__.py +0 -0
  171. django_cfg/modules/django_telegram/management/commands/__init__.py +0 -0
  172. django_cfg/modules/django_telegram/management/commands/test_telegram.py +68 -0
  173. django_cfg/modules/django_twilio/management/__init__.py +0 -0
  174. django_cfg/modules/django_twilio/management/commands/__init__.py +0 -0
  175. django_cfg/modules/django_twilio/management/commands/test_twilio.py +112 -0
  176. django_cfg/modules/django_unfold/callbacks/main.py +16 -5
  177. django_cfg/modules/django_unfold/callbacks/revolution.py +41 -36
  178. django_cfg/modules/django_unfold/dashboard.py +1 -1
  179. django_cfg/pyproject.toml +2 -6
  180. django_cfg/registry/third_party.py +5 -7
  181. django_cfg/routing/callbacks.py +1 -1
  182. django_cfg/static/admin/css/prose-unfold.css +666 -0
  183. django_cfg/templates/admin/index.html +8 -0
  184. django_cfg/templates/admin/index_new.html +13 -0
  185. django_cfg/templates/admin/layouts/dashboard_with_tabs.html +15 -3
  186. django_cfg/templates/admin/sections/documentation_section.html +172 -0
  187. django_cfg/templates/admin/snippets/tabs/documentation_tab.html +231 -0
  188. {django_cfg-1.4.9.dist-info → django_cfg-1.4.11.dist-info}/METADATA +2 -2
  189. {django_cfg-1.4.9.dist-info → django_cfg-1.4.11.dist-info}/RECORD +192 -71
  190. django_cfg/management/commands/generate.py +0 -107
  191. {django_cfg-1.4.9.dist-info → django_cfg-1.4.11.dist-info}/WHEEL +0 -0
  192. {django_cfg-1.4.9.dist-info → django_cfg-1.4.11.dist-info}/entry_points.txt +0 -0
  193. {django_cfg-1.4.9.dist-info → django_cfg-1.4.11.dist-info}/licenses/LICENSE +0 -0
@@ -0,0 +1,666 @@
1
+ /**
2
+ * Prose Unfold - Universal Markdown Styling
3
+ *
4
+ * Semantic color system for markdown content that adapts to Unfold theme
5
+ * Overrides Tailwind Typography variables with Unfold semantic colors
6
+ *
7
+ * Usage: Add class "prose-unfold" to markdown container
8
+ * Example: <div class="prose prose-unfold">{{ markdown_content|safe }}</div>
9
+ */
10
+
11
+ /* ========================================
12
+ Base Prose Container
13
+ Override Tailwind Typography variables
14
+ ======================================== */
15
+ .prose-unfold {
16
+ /* Override Tailwind Typography CSS variables with Unfold colors */
17
+ --tw-prose-body: var(--color-font-default-light);
18
+ --tw-prose-headings: var(--color-font-important-light);
19
+ --tw-prose-lead: var(--color-font-default-light);
20
+ --tw-prose-links: var(--color-primary-600);
21
+ --tw-prose-bold: var(--color-font-important-light);
22
+ --tw-prose-counters: var(--color-font-subtle-light);
23
+ --tw-prose-bullets: var(--color-font-subtle-light);
24
+ --tw-prose-hr: var(--color-base-200);
25
+ --tw-prose-quotes: var(--color-font-subtle-light);
26
+ --tw-prose-quote-borders: var(--color-base-300);
27
+ --tw-prose-captions: var(--color-font-subtle-light);
28
+ --tw-prose-kbd: var(--color-font-default-light);
29
+ --tw-prose-code: var(--color-primary-600);
30
+ --tw-prose-pre-code: var(--color-font-default-light);
31
+ --tw-prose-pre-bg: var(--color-base-100);
32
+ --tw-prose-th-borders: var(--color-base-200);
33
+ --tw-prose-td-borders: var(--color-base-200);
34
+ }
35
+
36
+ html.dark .prose-unfold {
37
+ /* Dark mode overrides */
38
+ --tw-prose-body: var(--color-font-default-dark);
39
+ --tw-prose-headings: var(--color-font-important-dark);
40
+ --tw-prose-lead: var(--color-font-default-dark);
41
+ --tw-prose-links: var(--color-primary-400);
42
+ --tw-prose-bold: var(--color-font-important-dark);
43
+ --tw-prose-counters: var(--color-font-subtle-dark);
44
+ --tw-prose-bullets: var(--color-font-subtle-dark);
45
+ --tw-prose-hr: var(--color-base-700);
46
+ --tw-prose-quotes: var(--color-font-subtle-dark);
47
+ --tw-prose-quote-borders: var(--color-base-600);
48
+ --tw-prose-captions: var(--color-font-subtle-dark);
49
+ --tw-prose-kbd: var(--color-font-default-dark);
50
+ --tw-prose-code: var(--color-primary-400);
51
+ --tw-prose-pre-code: var(--color-font-default-dark);
52
+ --tw-prose-pre-bg: var(--color-base-700);
53
+ --tw-prose-th-borders: var(--color-base-700);
54
+ --tw-prose-td-borders: var(--color-base-700);
55
+ }
56
+
57
+ /* ========================================
58
+ Headings - Semantic Typography
59
+ ======================================== */
60
+ .prose-unfold h1,
61
+ .prose-unfold h2,
62
+ .prose-unfold h3,
63
+ .prose-unfold h4,
64
+ .prose-unfold h5,
65
+ .prose-unfold h6 {
66
+ scroll-margin-top: 2rem;
67
+ }
68
+
69
+ .prose-unfold h1 {
70
+ font-size: 2em;
71
+ font-weight: 700;
72
+ margin-top: 0;
73
+ margin-bottom: 1em;
74
+ padding-bottom: 0.5em;
75
+ border-bottom: 2px solid var(--color-base-200) !important;
76
+ color: var(--color-font-important-light) !important;
77
+ }
78
+
79
+ html.dark .prose-unfold h1 {
80
+ border-bottom-color: var(--color-base-700) !important;
81
+ color: var(--color-font-important-dark) !important;
82
+ }
83
+
84
+ .prose-unfold h2 {
85
+ font-size: 1.5em;
86
+ font-weight: 600;
87
+ margin-top: 2em;
88
+ margin-bottom: 1em;
89
+ color: var(--color-font-important-light);
90
+ }
91
+
92
+ html.dark .prose-unfold h2 {
93
+ color: var(--color-font-important-dark);
94
+ }
95
+
96
+ .prose-unfold h3 {
97
+ font-size: 1.25em;
98
+ font-weight: 600;
99
+ margin-top: 1.5em;
100
+ margin-bottom: 0.75em;
101
+ color: var(--color-font-default-light);
102
+ }
103
+
104
+ html.dark .prose-unfold h3 {
105
+ color: var(--color-font-default-dark);
106
+ }
107
+
108
+ .prose-unfold h4 {
109
+ font-size: 1.1em;
110
+ font-weight: 600;
111
+ margin-top: 1.25em;
112
+ margin-bottom: 0.5em;
113
+ color: var(--color-font-default-light);
114
+ }
115
+
116
+ html.dark .prose-unfold h4 {
117
+ color: var(--color-font-default-dark);
118
+ }
119
+
120
+ .prose-unfold h5 {
121
+ font-size: 1em;
122
+ font-weight: 600;
123
+ margin-top: 1em;
124
+ margin-bottom: 0.5em;
125
+ color: var(--color-font-default-light);
126
+ }
127
+
128
+ html.dark .prose-unfold h5 {
129
+ color: var(--color-font-default-dark);
130
+ }
131
+
132
+ .prose-unfold h6 {
133
+ font-size: 0.9em;
134
+ font-weight: 600;
135
+ margin-top: 1em;
136
+ margin-bottom: 0.5em;
137
+ color: var(--color-font-subtle-light);
138
+ }
139
+
140
+ html.dark .prose-unfold h6 {
141
+ color: var(--color-font-subtle-dark);
142
+ }
143
+
144
+ /* ========================================
145
+ Paragraphs and Text
146
+ ======================================== */
147
+ .prose-unfold p {
148
+ margin-top: 1em;
149
+ margin-bottom: 1em;
150
+ color: var(--color-font-default-light);
151
+ }
152
+
153
+ html.dark .prose-unfold p {
154
+ color: var(--color-font-default-dark);
155
+ }
156
+
157
+ .prose-unfold strong {
158
+ font-weight: 600;
159
+ color: var(--color-font-important-light);
160
+ }
161
+
162
+ html.dark .prose-unfold strong {
163
+ color: var(--color-font-important-dark);
164
+ }
165
+
166
+ .prose-unfold em {
167
+ font-style: italic;
168
+ color: var(--color-font-default-light);
169
+ }
170
+
171
+ html.dark .prose-unfold em {
172
+ color: var(--color-font-default-dark);
173
+ }
174
+
175
+ .prose-unfold mark {
176
+ padding: 0.1em 0.2em;
177
+ border-radius: 0.25em;
178
+ background-color: rgb(254 252 232); /* yellow-100 */
179
+ color: rgb(113 63 18); /* yellow-900 */
180
+ }
181
+
182
+ html.dark .prose-unfold mark {
183
+ background-color: rgba(113 63 18 / 0.3); /* yellow-900/30 */
184
+ color: rgb(254 240 138); /* yellow-200 */
185
+ }
186
+
187
+ .prose-unfold sub,
188
+ .prose-unfold sup {
189
+ font-size: 0.75em;
190
+ }
191
+
192
+ /* ========================================
193
+ Lists
194
+ ======================================== */
195
+ .prose-unfold ul,
196
+ .prose-unfold ol {
197
+ margin-top: 1em;
198
+ margin-bottom: 1em;
199
+ padding-left: 1.5em;
200
+ color: var(--color-font-default-light);
201
+ }
202
+
203
+ html.dark .prose-unfold ul,
204
+ html.dark .prose-unfold ol {
205
+ color: var(--color-font-default-dark);
206
+ }
207
+
208
+ .prose-unfold li {
209
+ margin-top: 0.5em;
210
+ margin-bottom: 0.5em;
211
+ }
212
+
213
+ .prose-unfold ul > li::marker {
214
+ color: var(--color-font-subtle-light);
215
+ }
216
+
217
+ html.dark .prose-unfold ul > li::marker {
218
+ color: var(--color-font-subtle-dark);
219
+ }
220
+
221
+ .prose-unfold ol > li::marker {
222
+ font-weight: 600;
223
+ color: var(--color-font-subtle-light);
224
+ }
225
+
226
+ html.dark .prose-unfold ol > li::marker {
227
+ color: var(--color-font-subtle-dark);
228
+ }
229
+
230
+ /* Nested lists */
231
+ .prose-unfold ul ul,
232
+ .prose-unfold ul ol,
233
+ .prose-unfold ol ul,
234
+ .prose-unfold ol ol {
235
+ margin-top: 0.5em;
236
+ margin-bottom: 0.5em;
237
+ }
238
+
239
+ /* Task lists (GitHub flavored) */
240
+ .prose-unfold input[type="checkbox"] {
241
+ margin-right: 0.5em;
242
+ accent-color: var(--color-primary-600);
243
+ }
244
+
245
+ html.dark .prose-unfold input[type="checkbox"] {
246
+ accent-color: var(--color-primary-400);
247
+ }
248
+
249
+ /* ========================================
250
+ Code - Inline and Blocks
251
+ ======================================== */
252
+ .prose-unfold code {
253
+ padding: 0.2em 0.4em;
254
+ border-radius: 0.25em;
255
+ font-size: 0.875em;
256
+ font-family: 'Monaco', 'Menlo', 'Consolas', 'Courier New', monospace;
257
+ font-weight: 500;
258
+ background-color: var(--color-base-100);
259
+ color: var(--color-primary-600);
260
+ }
261
+
262
+ html.dark .prose-unfold code {
263
+ background-color: var(--color-base-700);
264
+ color: var(--color-primary-400);
265
+ }
266
+
267
+ /* Pre and code blocks are styled by Tailwind Typography using --tw-prose-pre-bg variable */
268
+
269
+ /* Special styling for pre blocks inside documentation card */
270
+ .documentation-card .prose-unfold {
271
+ --tw-prose-pre-bg: var(--color-base-100) !important;
272
+ --tw-prose-pre-code: var(--color-font-default-light) !important;
273
+ }
274
+
275
+ html.dark .documentation-card .prose-unfold {
276
+ --tw-prose-pre-bg: var(--color-base-900) !important;
277
+ --tw-prose-pre-code: var(--color-base-50) !important;
278
+ }
279
+
280
+ /* Direct override for pre elements */
281
+ .documentation-card .prose-unfold pre {
282
+ background-color: var(--color-base-100) !important;
283
+ }
284
+
285
+ html.dark .documentation-card .prose-unfold pre {
286
+ background-color: var(--color-base-900) !important;
287
+ }
288
+
289
+ .documentation-card .prose-unfold pre code {
290
+ color: var(--color-font-default-light) !important;
291
+ }
292
+
293
+ html.dark .documentation-card .prose-unfold pre code {
294
+ color: var(--color-base-50) !important;
295
+ }
296
+
297
+ .prose-unfold kbd {
298
+ padding: 0.2em 0.4em;
299
+ border-radius: 0.25em;
300
+ font-size: 0.875em;
301
+ font-family: 'Monaco', 'Menlo', 'Consolas', monospace;
302
+ background-color: var(--color-base-100);
303
+ border: 1px solid var(--color-base-300);
304
+ color: var(--color-font-default-light);
305
+ }
306
+
307
+ html.dark .prose-unfold kbd {
308
+ background-color: var(--color-base-700);
309
+ border-color: var(--color-base-600);
310
+ color: var(--color-font-default-dark);
311
+ }
312
+
313
+ /* ========================================
314
+ Links
315
+ ======================================== */
316
+ .prose-unfold a {
317
+ text-decoration: none;
318
+ font-weight: 500;
319
+ transition: all 0.2s ease;
320
+ color: var(--color-primary-600);
321
+ }
322
+
323
+ html.dark .prose-unfold a {
324
+ color: var(--color-primary-400);
325
+ }
326
+
327
+ .prose-unfold a:hover {
328
+ text-decoration: underline;
329
+ color: var(--color-primary-700);
330
+ }
331
+
332
+ html.dark .prose-unfold a:hover {
333
+ color: var(--color-primary-300);
334
+ }
335
+
336
+ /* External links indicator (optional) */
337
+ .prose-unfold a[href^="http"]::after {
338
+ content: " ↗";
339
+ font-size: 0.8em;
340
+ opacity: 0.6;
341
+ }
342
+
343
+ .prose-unfold a[href^="http"][href*="localhost"]::after,
344
+ .prose-unfold a[href^="http"][href*="127.0.0.1"]::after {
345
+ content: "";
346
+ }
347
+
348
+ /* ========================================
349
+ Blockquotes
350
+ ======================================== */
351
+ .prose-unfold blockquote {
352
+ border-left: 4px solid var(--color-base-300);
353
+ padding-left: 1em;
354
+ font-style: italic;
355
+ margin: 1.5em 0;
356
+ color: var(--color-font-subtle-light);
357
+ }
358
+
359
+ html.dark .prose-unfold blockquote {
360
+ border-left-color: var(--color-base-600);
361
+ color: var(--color-font-subtle-dark);
362
+ }
363
+
364
+ .prose-unfold blockquote p {
365
+ margin: 0.5em 0;
366
+ }
367
+
368
+ /* ========================================
369
+ Tables
370
+ ======================================== */
371
+ .prose-unfold table {
372
+ width: 100%;
373
+ border-collapse: collapse;
374
+ margin-top: 1.5em;
375
+ margin-bottom: 1.5em;
376
+ color: var(--color-font-default-light);
377
+ }
378
+
379
+ html.dark .prose-unfold table {
380
+ color: var(--color-font-default-dark);
381
+ }
382
+
383
+ .prose-unfold th,
384
+ .prose-unfold td {
385
+ padding: 0.75em 1em;
386
+ text-align: left;
387
+ border: 1px solid var(--color-base-200);
388
+ }
389
+
390
+ html.dark .prose-unfold th,
391
+ html.dark .prose-unfold td {
392
+ border-color: var(--color-base-700);
393
+ }
394
+
395
+ .prose-unfold thead {
396
+ background-color: var(--color-base-50);
397
+ }
398
+
399
+ html.dark .prose-unfold thead {
400
+ background-color: var(--color-base-800);
401
+ }
402
+
403
+ .prose-unfold th {
404
+ font-weight: 600;
405
+ color: var(--color-font-important-light);
406
+ }
407
+
408
+ html.dark .prose-unfold th {
409
+ color: var(--color-font-important-dark);
410
+ }
411
+
412
+ .prose-unfold tbody tr:hover {
413
+ background-color: var(--color-base-50);
414
+ }
415
+
416
+ html.dark .prose-unfold tbody tr:hover {
417
+ background-color: rgba(var(--color-base-800) / 0.5);
418
+ }
419
+
420
+ /* ========================================
421
+ Horizontal Rule
422
+ ======================================== */
423
+ .prose-unfold hr {
424
+ border: 0;
425
+ margin: 2em 0;
426
+ border-top: 1px solid var(--color-base-200);
427
+ }
428
+
429
+ html.dark .prose-unfold hr {
430
+ border-top-color: var(--color-base-700);
431
+ }
432
+
433
+ /* ========================================
434
+ Images and Media
435
+ ======================================== */
436
+ .prose-unfold img {
437
+ max-width: 100%;
438
+ height: auto;
439
+ border-radius: 0.5em;
440
+ margin: 1.5em 0;
441
+ border: 1px solid var(--color-base-200);
442
+ }
443
+
444
+ html.dark .prose-unfold img {
445
+ border-color: var(--color-base-700);
446
+ }
447
+
448
+ .prose-unfold figure {
449
+ margin: 1.5em 0;
450
+ }
451
+
452
+ .prose-unfold figcaption {
453
+ margin-top: 0.5em;
454
+ font-size: 0.875em;
455
+ text-align: center;
456
+ color: var(--color-font-subtle-light);
457
+ }
458
+
459
+ html.dark .prose-unfold figcaption {
460
+ color: var(--color-font-subtle-dark);
461
+ }
462
+
463
+ /* ========================================
464
+ Definition Lists
465
+ ======================================== */
466
+ .prose-unfold dl {
467
+ margin: 1em 0;
468
+ }
469
+
470
+ .prose-unfold dt {
471
+ font-weight: 600;
472
+ margin-top: 1em;
473
+ color: var(--color-font-important-light);
474
+ }
475
+
476
+ html.dark .prose-unfold dt {
477
+ color: var(--color-font-important-dark);
478
+ }
479
+
480
+ .prose-unfold dd {
481
+ margin-left: 1.5em;
482
+ margin-top: 0.5em;
483
+ color: var(--color-font-default-light);
484
+ }
485
+
486
+ html.dark .prose-unfold dd {
487
+ color: var(--color-font-default-dark);
488
+ }
489
+
490
+ /* ========================================
491
+ Details/Summary (Collapsible)
492
+ ======================================== */
493
+ .prose-unfold details {
494
+ margin: 1em 0;
495
+ padding: 1em;
496
+ border-radius: 0.5em;
497
+ background-color: var(--color-base-50);
498
+ border: 1px solid var(--color-base-200);
499
+ }
500
+
501
+ html.dark .prose-unfold details {
502
+ background-color: var(--color-base-800);
503
+ border-color: var(--color-base-700);
504
+ }
505
+
506
+ .prose-unfold summary {
507
+ cursor: pointer;
508
+ font-weight: 600;
509
+ user-select: none;
510
+ color: var(--color-font-important-light);
511
+ }
512
+
513
+ html.dark .prose-unfold summary {
514
+ color: var(--color-font-important-dark);
515
+ }
516
+
517
+ .prose-unfold summary:hover {
518
+ color: var(--color-primary-600);
519
+ }
520
+
521
+ html.dark .prose-unfold summary:hover {
522
+ color: var(--color-primary-400);
523
+ }
524
+
525
+ .prose-unfold details[open] summary {
526
+ margin-bottom: 0.5em;
527
+ }
528
+
529
+ /* ========================================
530
+ Footnotes
531
+ ======================================== */
532
+ .prose-unfold .footnote {
533
+ font-size: 0.875em;
534
+ color: var(--color-font-subtle-light);
535
+ }
536
+
537
+ html.dark .prose-unfold .footnote {
538
+ color: var(--color-font-subtle-dark);
539
+ }
540
+
541
+ .prose-unfold .footnote-ref {
542
+ font-size: 0.75em;
543
+ vertical-align: super;
544
+ color: var(--color-primary-600);
545
+ }
546
+
547
+ html.dark .prose-unfold .footnote-ref {
548
+ color: var(--color-primary-400);
549
+ }
550
+
551
+ /* ========================================
552
+ Badges and Pills
553
+ ======================================== */
554
+ .prose-unfold .badge {
555
+ display: inline-flex;
556
+ align-items: center;
557
+ padding: 0.25em 0.75em;
558
+ border-radius: 9999px;
559
+ font-size: 0.75em;
560
+ font-weight: 600;
561
+ background-color: var(--color-primary-100);
562
+ color: var(--color-primary-600);
563
+ }
564
+
565
+ html.dark .prose-unfold .badge {
566
+ background-color: rgba(var(--color-primary-900) / 0.2);
567
+ color: var(--color-primary-400);
568
+ }
569
+
570
+ /* ========================================
571
+ Admonitions/Alerts
572
+ ======================================== */
573
+ .prose-unfold .admonition {
574
+ padding: 1em;
575
+ margin: 1em 0;
576
+ border-left: 4px solid;
577
+ border-radius: 0.5em;
578
+ }
579
+
580
+ .prose-unfold .admonition-note {
581
+ background-color: rgb(239 246 255); /* blue-50 */
582
+ border-left-color: rgb(59 130 246); /* blue-500 */
583
+ }
584
+
585
+ html.dark .prose-unfold .admonition-note {
586
+ background-color: rgba(59 130 246 / 0.1);
587
+ border-left-color: rgb(96 165 250); /* blue-400 */
588
+ }
589
+
590
+ .prose-unfold .admonition-tip {
591
+ background-color: rgb(240 253 244); /* green-50 */
592
+ border-left-color: rgb(34 197 94); /* green-500 */
593
+ }
594
+
595
+ html.dark .prose-unfold .admonition-tip {
596
+ background-color: rgba(34 197 94 / 0.1);
597
+ border-left-color: rgb(74 222 128); /* green-400 */
598
+ }
599
+
600
+ .prose-unfold .admonition-warning {
601
+ background-color: rgb(254 252 232); /* yellow-50 */
602
+ border-left-color: rgb(234 179 8); /* yellow-500 */
603
+ }
604
+
605
+ html.dark .prose-unfold .admonition-warning {
606
+ background-color: rgba(234 179 8 / 0.1);
607
+ border-left-color: rgb(250 204 21); /* yellow-400 */
608
+ }
609
+
610
+ .prose-unfold .admonition-danger {
611
+ background-color: rgb(254 242 242); /* red-50 */
612
+ border-left-color: rgb(239 68 68); /* red-500 */
613
+ }
614
+
615
+ html.dark .prose-unfold .admonition-danger {
616
+ background-color: rgba(239 68 68 / 0.1);
617
+ border-left-color: rgb(248 113 113); /* red-400 */
618
+ }
619
+
620
+ /* ========================================
621
+ Print Styles
622
+ ======================================== */
623
+ @media print {
624
+ .prose-unfold {
625
+ color: #000;
626
+ }
627
+
628
+ .prose-unfold a {
629
+ color: #000;
630
+ text-decoration: underline;
631
+ }
632
+
633
+ .prose-unfold code,
634
+ .prose-unfold pre {
635
+ border: 1px solid #ddd;
636
+ }
637
+
638
+ .prose-unfold a[href^="http"]::after {
639
+ content: " (" attr(href) ")";
640
+ }
641
+ }
642
+
643
+ /* ========================================
644
+ Responsive Adjustments
645
+ ======================================== */
646
+ @media (max-width: 640px) {
647
+ .prose-unfold {
648
+ font-size: 0.9rem;
649
+ }
650
+
651
+ .prose-unfold h1 {
652
+ font-size: 1.75em;
653
+ }
654
+
655
+ .prose-unfold h2 {
656
+ font-size: 1.4em;
657
+ }
658
+
659
+ .prose-unfold pre {
660
+ padding: 0.75em;
661
+ }
662
+
663
+ .prose-unfold table {
664
+ font-size: 0.875em;
665
+ }
666
+ }
@@ -69,4 +69,12 @@
69
69
  {% else %}
70
70
  {% include 'admin/snippets/tabs/commands_tab.html' %}
71
71
  {% endif %}
72
+ {% endblock %}
73
+
74
+ {% block documentation_tab %}
75
+ {% if documentation_section %}
76
+ {{ documentation_section|safe }}
77
+ {% else %}
78
+ {% include 'admin/snippets/tabs/documentation_tab.html' %}
79
+ {% endif %}
72
80
  {% endblock %}
@@ -31,6 +31,10 @@
31
31
  <span class="material-icons mr-2 align-middle text-sm">terminal</span>
32
32
  Commands
33
33
  </button>
34
+ <button type="button" data-tab="7" class="px-4 py-3 rounded-t-lg focus:outline-none">
35
+ <span class="material-icons mr-2 align-middle text-sm">description</span>
36
+ Documentation
37
+ </button>
34
38
  {% endblock %}
35
39
 
36
40
  {% block tab_content %}
@@ -103,4 +107,13 @@
103
107
  {% include 'admin/snippets/tabs/commands_tab.html' %}
104
108
  {% endif %}
105
109
  </div>
110
+
111
+ <!-- Documentation Tab -->
112
+ <div class="tab-content" data-tab="7">
113
+ {% if documentation_section %}
114
+ {{ documentation_section|safe }}
115
+ {% else %}
116
+ {% include 'admin/snippets/tabs/documentation_tab.html' %}
117
+ {% endif %}
118
+ </div>
106
119
  {% endblock %}