django-cfg 1.2.31__py3-none-any.whl → 1.3.1__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 (256) hide show
  1. django_cfg/__init__.py +1 -1
  2. django_cfg/apps/api/health/views.py +4 -2
  3. django_cfg/apps/knowbase/config/settings.py +16 -15
  4. django_cfg/apps/payments/README.md +326 -0
  5. django_cfg/apps/payments/admin/__init__.py +20 -10
  6. django_cfg/apps/payments/admin/api_keys_admin.py +521 -237
  7. django_cfg/apps/payments/admin/balance_admin.py +592 -297
  8. django_cfg/apps/payments/admin/currencies_admin.py +526 -222
  9. django_cfg/apps/payments/admin/filters.py +306 -199
  10. django_cfg/apps/payments/admin/payments_admin.py +465 -70
  11. django_cfg/apps/payments/admin/subscriptions_admin.py +578 -128
  12. django_cfg/apps/payments/admin_interface/__init__.py +18 -0
  13. django_cfg/apps/payments/admin_interface/templates/payments/base.html +162 -0
  14. django_cfg/apps/payments/admin_interface/templates/payments/components/dev_tool_card.html +38 -0
  15. django_cfg/apps/payments/admin_interface/templates/payments/components/loading_spinner.html +16 -0
  16. django_cfg/apps/payments/admin_interface/templates/payments/components/notification.html +27 -0
  17. django_cfg/apps/payments/admin_interface/templates/payments/components/provider_card.html +86 -0
  18. django_cfg/apps/payments/admin_interface/templates/payments/components/status_card.html +39 -0
  19. django_cfg/apps/payments/admin_interface/templates/payments/currency_converter.html +382 -0
  20. django_cfg/apps/payments/admin_interface/templates/payments/payment_dashboard.html +300 -0
  21. django_cfg/apps/payments/admin_interface/templates/payments/payment_form.html +303 -0
  22. django_cfg/apps/payments/admin_interface/templates/payments/payment_list.html +382 -0
  23. django_cfg/apps/payments/admin_interface/templates/payments/payment_status.html +500 -0
  24. django_cfg/apps/payments/admin_interface/templates/payments/webhook_dashboard.html +594 -0
  25. django_cfg/apps/payments/admin_interface/views/__init__.py +23 -0
  26. django_cfg/apps/payments/admin_interface/views/payment_views.py +259 -0
  27. django_cfg/apps/payments/admin_interface/views/webhook_dashboard.py +37 -0
  28. django_cfg/apps/payments/apps.py +34 -9
  29. django_cfg/apps/payments/config/__init__.py +28 -51
  30. django_cfg/apps/payments/config/constance/__init__.py +22 -0
  31. django_cfg/apps/payments/config/constance/config_service.py +123 -0
  32. django_cfg/apps/payments/config/constance/fields.py +69 -0
  33. django_cfg/apps/payments/config/constance/settings.py +160 -0
  34. django_cfg/apps/payments/config/django_cfg_integration.py +202 -0
  35. django_cfg/apps/payments/config/helpers.py +130 -0
  36. django_cfg/apps/payments/management/__init__.py +1 -3
  37. django_cfg/apps/payments/management/commands/__init__.py +1 -3
  38. django_cfg/apps/payments/management/commands/manage_currencies.py +303 -151
  39. django_cfg/apps/payments/management/commands/manage_providers.py +333 -160
  40. django_cfg/apps/payments/middleware/__init__.py +3 -1
  41. django_cfg/apps/payments/middleware/api_access.py +329 -222
  42. django_cfg/apps/payments/middleware/rate_limiting.py +342 -152
  43. django_cfg/apps/payments/middleware/usage_tracking.py +249 -240
  44. django_cfg/apps/payments/migrations/0001_initial.py +708 -536
  45. django_cfg/apps/payments/models/__init__.py +13 -18
  46. django_cfg/apps/payments/models/api_keys.py +121 -43
  47. django_cfg/apps/payments/models/balance.py +150 -115
  48. django_cfg/apps/payments/models/base.py +68 -15
  49. django_cfg/apps/payments/models/currencies.py +172 -148
  50. django_cfg/apps/payments/models/managers/__init__.py +44 -0
  51. django_cfg/apps/payments/models/managers/api_key_managers.py +329 -0
  52. django_cfg/apps/payments/models/managers/balance_managers.py +599 -0
  53. django_cfg/apps/payments/models/managers/currency_managers.py +385 -0
  54. django_cfg/apps/payments/models/managers/payment_managers.py +511 -0
  55. django_cfg/apps/payments/models/managers/subscription_managers.py +641 -0
  56. django_cfg/apps/payments/models/payments.py +235 -285
  57. django_cfg/apps/payments/models/subscriptions.py +257 -177
  58. django_cfg/apps/payments/models/tariffs.py +147 -40
  59. django_cfg/apps/payments/services/__init__.py +209 -56
  60. django_cfg/apps/payments/services/cache/__init__.py +6 -6
  61. django_cfg/apps/payments/services/cache/{simple_cache.py → cache_service.py} +112 -12
  62. django_cfg/apps/payments/services/core/__init__.py +10 -6
  63. django_cfg/apps/payments/services/core/balance_service.py +435 -360
  64. django_cfg/apps/payments/services/core/base.py +166 -0
  65. django_cfg/apps/payments/services/core/currency_service.py +478 -0
  66. django_cfg/apps/payments/services/core/payment_service.py +346 -467
  67. django_cfg/apps/payments/services/core/subscription_service.py +425 -481
  68. django_cfg/apps/payments/services/core/webhook_service.py +410 -0
  69. django_cfg/apps/payments/services/integrations/__init__.py +29 -0
  70. django_cfg/apps/payments/services/integrations/ngrok_service.py +47 -0
  71. django_cfg/apps/payments/services/integrations/providers_config.py +107 -0
  72. django_cfg/apps/payments/services/providers/__init__.py +9 -14
  73. django_cfg/apps/payments/services/providers/base.py +234 -174
  74. django_cfg/apps/payments/services/providers/nowpayments.py +478 -0
  75. django_cfg/apps/payments/services/providers/registry.py +367 -301
  76. django_cfg/apps/payments/services/types/__init__.py +78 -0
  77. django_cfg/apps/payments/services/types/data.py +177 -0
  78. django_cfg/apps/payments/services/types/requests.py +150 -0
  79. django_cfg/apps/payments/services/types/responses.py +156 -0
  80. django_cfg/apps/payments/services/types/webhooks.py +232 -0
  81. django_cfg/apps/payments/signals/__init__.py +33 -8
  82. django_cfg/apps/payments/signals/api_key_signals.py +210 -129
  83. django_cfg/apps/payments/signals/balance_signals.py +174 -0
  84. django_cfg/apps/payments/signals/payment_signals.py +128 -103
  85. django_cfg/apps/payments/signals/subscription_signals.py +194 -142
  86. django_cfg/apps/payments/static/payments/css/components.css +380 -0
  87. django_cfg/apps/payments/static/payments/css/dashboard.css +188 -0
  88. django_cfg/apps/payments/static/payments/js/components.js +545 -0
  89. django_cfg/apps/payments/static/payments/js/utils.js +412 -0
  90. django_cfg/apps/payments/templatetags/__init__.py +1 -1
  91. django_cfg/apps/payments/templatetags/payment_tags.py +466 -0
  92. django_cfg/apps/payments/urls.py +45 -48
  93. django_cfg/apps/payments/urls_admin.py +33 -42
  94. django_cfg/apps/payments/views/api/__init__.py +101 -0
  95. django_cfg/apps/payments/views/api/api_keys.py +387 -0
  96. django_cfg/apps/payments/views/api/balances.py +381 -0
  97. django_cfg/apps/payments/views/api/base.py +298 -0
  98. django_cfg/apps/payments/views/api/currencies.py +402 -0
  99. django_cfg/apps/payments/views/api/payments.py +415 -0
  100. django_cfg/apps/payments/views/api/subscriptions.py +475 -0
  101. django_cfg/apps/payments/views/api/webhooks.py +476 -0
  102. django_cfg/apps/payments/views/serializers/__init__.py +99 -0
  103. django_cfg/apps/payments/views/serializers/api_keys.py +424 -0
  104. django_cfg/apps/payments/views/serializers/balances.py +300 -0
  105. django_cfg/apps/payments/views/serializers/currencies.py +335 -0
  106. django_cfg/apps/payments/views/serializers/payments.py +387 -0
  107. django_cfg/apps/payments/views/serializers/subscriptions.py +429 -0
  108. django_cfg/apps/payments/views/serializers/webhooks.py +137 -0
  109. django_cfg/config.py +1 -1
  110. django_cfg/core/config.py +40 -4
  111. django_cfg/core/generation.py +25 -4
  112. django_cfg/core/integration/README.md +363 -0
  113. django_cfg/core/integration/__init__.py +47 -0
  114. django_cfg/core/integration/commands_collector.py +239 -0
  115. django_cfg/core/integration/display/__init__.py +15 -0
  116. django_cfg/core/integration/display/base.py +157 -0
  117. django_cfg/core/integration/display/ngrok.py +164 -0
  118. django_cfg/core/integration/display/startup.py +815 -0
  119. django_cfg/core/integration/url_integration.py +123 -0
  120. django_cfg/core/integration/version_checker.py +160 -0
  121. django_cfg/management/commands/auto_generate.py +4 -0
  122. django_cfg/management/commands/check_settings.py +6 -0
  123. django_cfg/management/commands/clear_constance.py +5 -2
  124. django_cfg/management/commands/create_token.py +6 -0
  125. django_cfg/management/commands/list_urls.py +6 -0
  126. django_cfg/management/commands/migrate_all.py +6 -0
  127. django_cfg/management/commands/migrator.py +3 -0
  128. django_cfg/management/commands/rundramatiq.py +6 -0
  129. django_cfg/management/commands/runserver_ngrok.py +51 -29
  130. django_cfg/management/commands/script.py +6 -0
  131. django_cfg/management/commands/show_config.py +12 -2
  132. django_cfg/management/commands/show_urls.py +4 -0
  133. django_cfg/management/commands/superuser.py +6 -0
  134. django_cfg/management/commands/task_clear.py +4 -1
  135. django_cfg/management/commands/task_status.py +3 -1
  136. django_cfg/management/commands/test_email.py +3 -0
  137. django_cfg/management/commands/test_telegram.py +6 -0
  138. django_cfg/management/commands/test_twilio.py +6 -0
  139. django_cfg/management/commands/tree.py +6 -0
  140. django_cfg/management/commands/validate_config.py +155 -149
  141. django_cfg/models/constance.py +31 -11
  142. django_cfg/models/payments.py +175 -492
  143. django_cfg/modules/django_logger.py +160 -146
  144. django_cfg/modules/django_unfold/dashboard.py +64 -16
  145. django_cfg/registry/core.py +1 -0
  146. django_cfg/template_archive/django_sample.zip +0 -0
  147. django_cfg/utils/smart_defaults.py +222 -571
  148. django_cfg/utils/toolkit.py +51 -11
  149. {django_cfg-1.2.31.dist-info → django_cfg-1.3.1.dist-info}/METADATA +4 -1
  150. {django_cfg-1.2.31.dist-info → django_cfg-1.3.1.dist-info}/RECORD +153 -185
  151. django_cfg/apps/payments/__init__.py +0 -8
  152. django_cfg/apps/payments/admin/tariffs_admin.py +0 -199
  153. django_cfg/apps/payments/config/module.py +0 -70
  154. django_cfg/apps/payments/config/providers.py +0 -105
  155. django_cfg/apps/payments/config/settings.py +0 -96
  156. django_cfg/apps/payments/config/utils.py +0 -52
  157. django_cfg/apps/payments/decorators.py +0 -291
  158. django_cfg/apps/payments/management/commands/README.md +0 -146
  159. django_cfg/apps/payments/management/commands/currency_stats.py +0 -304
  160. django_cfg/apps/payments/managers/__init__.py +0 -23
  161. django_cfg/apps/payments/managers/api_key_manager.py +0 -35
  162. django_cfg/apps/payments/managers/balance_manager.py +0 -361
  163. django_cfg/apps/payments/managers/currency_manager.py +0 -306
  164. django_cfg/apps/payments/managers/payment_manager.py +0 -192
  165. django_cfg/apps/payments/managers/subscription_manager.py +0 -37
  166. django_cfg/apps/payments/managers/tariff_manager.py +0 -29
  167. django_cfg/apps/payments/migrations/0002_network_providercurrency_and_more.py +0 -241
  168. django_cfg/apps/payments/migrations/0003_add_usd_rate_cache.py +0 -30
  169. django_cfg/apps/payments/models/events.py +0 -73
  170. django_cfg/apps/payments/serializers/__init__.py +0 -57
  171. django_cfg/apps/payments/serializers/api_keys.py +0 -51
  172. django_cfg/apps/payments/serializers/balance.py +0 -59
  173. django_cfg/apps/payments/serializers/currencies.py +0 -63
  174. django_cfg/apps/payments/serializers/payments.py +0 -62
  175. django_cfg/apps/payments/serializers/subscriptions.py +0 -71
  176. django_cfg/apps/payments/serializers/tariffs.py +0 -56
  177. django_cfg/apps/payments/services/billing/__init__.py +0 -8
  178. django_cfg/apps/payments/services/cache/base.py +0 -30
  179. django_cfg/apps/payments/services/core/fallback_service.py +0 -432
  180. django_cfg/apps/payments/services/internal_types.py +0 -461
  181. django_cfg/apps/payments/services/middleware/__init__.py +0 -8
  182. django_cfg/apps/payments/services/monitoring/__init__.py +0 -22
  183. django_cfg/apps/payments/services/monitoring/api_schemas.py +0 -76
  184. django_cfg/apps/payments/services/monitoring/provider_health.py +0 -372
  185. django_cfg/apps/payments/services/providers/cryptapi/__init__.py +0 -4
  186. django_cfg/apps/payments/services/providers/cryptapi/config.py +0 -8
  187. django_cfg/apps/payments/services/providers/cryptapi/models.py +0 -192
  188. django_cfg/apps/payments/services/providers/cryptapi/provider.py +0 -439
  189. django_cfg/apps/payments/services/providers/cryptomus/__init__.py +0 -4
  190. django_cfg/apps/payments/services/providers/cryptomus/models.py +0 -176
  191. django_cfg/apps/payments/services/providers/cryptomus/provider.py +0 -429
  192. django_cfg/apps/payments/services/providers/cryptomus/provider_v2.py +0 -564
  193. django_cfg/apps/payments/services/providers/models/__init__.py +0 -34
  194. django_cfg/apps/payments/services/providers/models/currencies.py +0 -190
  195. django_cfg/apps/payments/services/providers/nowpayments/__init__.py +0 -4
  196. django_cfg/apps/payments/services/providers/nowpayments/models.py +0 -196
  197. django_cfg/apps/payments/services/providers/nowpayments/provider.py +0 -380
  198. django_cfg/apps/payments/services/providers/stripe/__init__.py +0 -4
  199. django_cfg/apps/payments/services/providers/stripe/models.py +0 -184
  200. django_cfg/apps/payments/services/providers/stripe/provider.py +0 -109
  201. django_cfg/apps/payments/services/security/__init__.py +0 -34
  202. django_cfg/apps/payments/services/security/error_handler.py +0 -635
  203. django_cfg/apps/payments/services/security/payment_notifications.py +0 -342
  204. django_cfg/apps/payments/services/security/webhook_validator.py +0 -474
  205. django_cfg/apps/payments/static/payments/css/payments.css +0 -340
  206. django_cfg/apps/payments/static/payments/js/notifications.js +0 -202
  207. django_cfg/apps/payments/static/payments/js/payment-utils.js +0 -318
  208. django_cfg/apps/payments/static/payments/js/theme.js +0 -86
  209. django_cfg/apps/payments/tasks/__init__.py +0 -12
  210. django_cfg/apps/payments/tasks/webhook_processing.py +0 -177
  211. django_cfg/apps/payments/templates/admin/payments/currency/change_list.html +0 -50
  212. django_cfg/apps/payments/templates/payments/base.html +0 -182
  213. django_cfg/apps/payments/templates/payments/components/payment_card.html +0 -201
  214. django_cfg/apps/payments/templates/payments/components/payment_qr_code.html +0 -109
  215. django_cfg/apps/payments/templates/payments/components/progress_bar.html +0 -43
  216. django_cfg/apps/payments/templates/payments/components/provider_stats.html +0 -40
  217. django_cfg/apps/payments/templates/payments/components/status_badge.html +0 -34
  218. django_cfg/apps/payments/templates/payments/components/status_overview.html +0 -148
  219. django_cfg/apps/payments/templates/payments/dashboard.html +0 -258
  220. django_cfg/apps/payments/templates/payments/dashboard_simple_test.html +0 -35
  221. django_cfg/apps/payments/templates/payments/payment_create.html +0 -579
  222. django_cfg/apps/payments/templates/payments/payment_detail.html +0 -373
  223. django_cfg/apps/payments/templates/payments/payment_list.html +0 -354
  224. django_cfg/apps/payments/templates/payments/stats.html +0 -261
  225. django_cfg/apps/payments/templates/payments/test.html +0 -213
  226. django_cfg/apps/payments/templatetags/payments_tags.py +0 -315
  227. django_cfg/apps/payments/utils/__init__.py +0 -43
  228. django_cfg/apps/payments/utils/billing_utils.py +0 -342
  229. django_cfg/apps/payments/utils/config_utils.py +0 -239
  230. django_cfg/apps/payments/utils/middleware_utils.py +0 -228
  231. django_cfg/apps/payments/utils/validation_utils.py +0 -94
  232. django_cfg/apps/payments/views/__init__.py +0 -63
  233. django_cfg/apps/payments/views/api_key_views.py +0 -164
  234. django_cfg/apps/payments/views/balance_views.py +0 -75
  235. django_cfg/apps/payments/views/currency_views.py +0 -122
  236. django_cfg/apps/payments/views/payment_views.py +0 -149
  237. django_cfg/apps/payments/views/subscription_views.py +0 -135
  238. django_cfg/apps/payments/views/tariff_views.py +0 -131
  239. django_cfg/apps/payments/views/templates/__init__.py +0 -25
  240. django_cfg/apps/payments/views/templates/ajax.py +0 -451
  241. django_cfg/apps/payments/views/templates/base.py +0 -212
  242. django_cfg/apps/payments/views/templates/dashboard.py +0 -60
  243. django_cfg/apps/payments/views/templates/payment_detail.py +0 -102
  244. django_cfg/apps/payments/views/templates/payment_management.py +0 -158
  245. django_cfg/apps/payments/views/templates/qr_code.py +0 -174
  246. django_cfg/apps/payments/views/templates/stats.py +0 -244
  247. django_cfg/apps/payments/views/templates/utils.py +0 -181
  248. django_cfg/apps/payments/views/webhook_views.py +0 -266
  249. django_cfg/apps/payments/viewsets.py +0 -66
  250. django_cfg/core/integration.py +0 -160
  251. django_cfg/template_archive/.gitignore +0 -1
  252. django_cfg/template_archive/__init__.py +0 -0
  253. django_cfg/urls.py +0 -33
  254. {django_cfg-1.2.31.dist-info → django_cfg-1.3.1.dist-info}/WHEEL +0 -0
  255. {django_cfg-1.2.31.dist-info → django_cfg-1.3.1.dist-info}/entry_points.txt +0 -0
  256. {django_cfg-1.2.31.dist-info → django_cfg-1.3.1.dist-info}/licenses/LICENSE +0 -0
@@ -1,340 +0,0 @@
1
- /* Payment System Styles */
2
-
3
- /* Payment Status Colors */
4
- .payment-status-pending { @apply bg-yellow-100 text-yellow-800 dark:bg-yellow-900 dark:text-yellow-200; }
5
- .payment-status-confirming { @apply bg-blue-100 text-blue-800 dark:bg-blue-900 dark:text-blue-200; }
6
- .payment-status-confirmed { @apply bg-green-100 text-green-800 dark:bg-green-900 dark:text-green-200; }
7
- .payment-status-completed { @apply bg-green-100 text-green-800 dark:bg-green-900 dark:text-green-200; }
8
- .payment-status-failed { @apply bg-red-100 text-red-800 dark:bg-red-900 dark:text-red-200; }
9
- .payment-status-expired { @apply bg-gray-100 text-gray-800 dark:bg-gray-900 dark:text-gray-200; }
10
- .payment-status-cancelled { @apply bg-gray-100 text-gray-800 dark:bg-gray-900 dark:text-gray-200; }
11
- .payment-status-refunded { @apply bg-purple-100 text-purple-800 dark:bg-purple-900 dark:text-purple-200; }
12
-
13
- /* Payment Card Animations */
14
- .payment-card {
15
- @apply transition-all duration-200 hover:shadow-lg hover:-translate-y-1;
16
- }
17
-
18
- .payment-card:hover {
19
- @apply ring-2 ring-blue-500 ring-opacity-50;
20
- }
21
-
22
- .payment-card.compact {
23
- @apply p-4;
24
- }
25
-
26
- /* Progress Bar Styles */
27
- .progress-bar {
28
- @apply w-full bg-gray-200 rounded-full h-2 dark:bg-gray-700 overflow-hidden;
29
- }
30
-
31
- .progress-fill {
32
- @apply bg-blue-600 h-2 rounded-full transition-all duration-500 ease-out;
33
- }
34
-
35
- .progress-fill.success {
36
- @apply bg-green-600;
37
- }
38
-
39
- .progress-fill.warning {
40
- @apply bg-yellow-600;
41
- }
42
-
43
- .progress-fill.danger {
44
- @apply bg-red-600;
45
- }
46
-
47
- /* Progress Steps */
48
- .progress-steps {
49
- @apply flex justify-between items-center mb-4;
50
- }
51
-
52
- .progress-step {
53
- @apply flex flex-col items-center text-center;
54
- }
55
-
56
- .progress-step.completed .step-icon {
57
- @apply text-green-500;
58
- }
59
-
60
- .progress-step.active .step-icon {
61
- @apply text-blue-500;
62
- }
63
-
64
- .step-label {
65
- @apply text-xs text-gray-500 dark:text-gray-400 mt-1;
66
- }
67
-
68
- .step-icon {
69
- @apply w-8 h-8 flex items-center justify-center rounded-full border-2 border-gray-300 dark:border-gray-600 mb-2;
70
- }
71
-
72
- .step-icon.completed {
73
- @apply border-green-500 bg-green-500 text-white;
74
- }
75
-
76
- .step-icon.active {
77
- @apply border-blue-500 bg-blue-500 text-white;
78
- }
79
-
80
- /* Real-time indicators */
81
- .payment-live-indicator {
82
- @apply inline-flex items-center px-2 py-1 rounded-full text-xs font-medium bg-green-100 text-green-800;
83
- }
84
-
85
- .payment-live-indicator::before {
86
- content: '';
87
- @apply w-2 h-2 bg-green-500 rounded-full mr-2 animate-pulse;
88
- }
89
-
90
- /* Status Overview Cards */
91
- .status-overview {
92
- @apply grid grid-cols-1 md:grid-cols-2 lg:grid-cols-4 gap-6 mb-8;
93
- }
94
-
95
- .status-card {
96
- @apply bg-white dark:bg-gray-800 rounded-xl shadow-sm border border-gray-200 dark:border-gray-700 p-6 transition-all duration-200 hover:shadow-md;
97
- }
98
-
99
- .status-card:hover {
100
- @apply transform scale-105;
101
- }
102
-
103
- /* Payment Table Styles */
104
- .payments-table {
105
- @apply min-w-full divide-y divide-gray-200 dark:divide-gray-700;
106
- }
107
-
108
- .payments-table th {
109
- @apply px-6 py-3 text-left text-xs font-medium text-gray-500 dark:text-gray-400 uppercase tracking-wider;
110
- }
111
-
112
- .payments-table td {
113
- @apply px-6 py-4 whitespace-nowrap text-sm text-gray-900 dark:text-white;
114
- }
115
-
116
- .payments-table tr:hover {
117
- @apply bg-gray-50 dark:bg-gray-800;
118
- }
119
-
120
- /* Provider Icons */
121
- .provider-icon {
122
- @apply w-6 h-6 rounded;
123
- }
124
-
125
- .provider-icon.nowpayments {
126
- @apply bg-orange-500;
127
- }
128
-
129
- .provider-icon.cryptapi {
130
- @apply bg-blue-500;
131
- }
132
-
133
- .provider-icon.cryptomus {
134
- @apply bg-purple-500;
135
- }
136
-
137
- .provider-icon.stripe {
138
- @apply bg-indigo-500;
139
- }
140
-
141
- .provider-icon.internal {
142
- @apply bg-gray-500;
143
- }
144
-
145
- /* QR Code Styles */
146
- .qr-code-container {
147
- @apply flex flex-col items-center space-y-2 p-4 bg-white dark:bg-gray-800 rounded-lg border border-gray-200 dark:border-gray-700;
148
- }
149
-
150
- .qr-code {
151
- @apply w-32 h-32 bg-gray-100 dark:bg-gray-700 rounded flex items-center justify-center;
152
- }
153
-
154
- /* Filter Styles */
155
- .payment-filters {
156
- @apply bg-white dark:bg-gray-800 rounded-xl shadow-sm border border-gray-200 dark:border-gray-700 p-6 mb-6;
157
- }
158
-
159
- .filter-group {
160
- @apply flex flex-wrap gap-4 items-center;
161
- }
162
-
163
- .filter-input {
164
- @apply min-w-0 flex-1 px-3 py-2 border border-gray-300 dark:border-gray-600 rounded-md text-sm bg-white dark:bg-gray-700 text-gray-900 dark:text-white;
165
- }
166
-
167
- .filter-select {
168
- @apply px-3 py-2 border border-gray-300 dark:border-gray-600 rounded-md text-sm bg-white dark:bg-gray-700 text-gray-900 dark:text-white;
169
- }
170
-
171
- /* Button Styles */
172
- .btn {
173
- @apply inline-flex items-center px-4 py-2 border border-transparent text-sm font-medium rounded-md transition-colors duration-200;
174
- }
175
-
176
- .btn-primary {
177
- @apply bg-blue-600 text-white hover:bg-blue-700 focus:outline-none focus:ring-2 focus:ring-blue-500 focus:ring-offset-2;
178
- }
179
-
180
- .btn-secondary {
181
- @apply bg-gray-600 text-white hover:bg-gray-700 focus:outline-none focus:ring-2 focus:ring-gray-500 focus:ring-offset-2;
182
- }
183
-
184
- .btn-success {
185
- @apply bg-green-600 text-white hover:bg-green-700 focus:outline-none focus:ring-2 focus:ring-green-500 focus:ring-offset-2;
186
- }
187
-
188
- .btn-danger {
189
- @apply bg-red-600 text-white hover:bg-red-700 focus:outline-none focus:ring-2 focus:ring-red-500 focus:ring-offset-2;
190
- }
191
-
192
- .btn-outline {
193
- @apply border-gray-300 dark:border-gray-600 text-gray-700 dark:text-gray-300 bg-white dark:bg-gray-700 hover:bg-gray-50 dark:hover:bg-gray-600;
194
- }
195
-
196
- .btn-sm {
197
- @apply px-3 py-1.5 text-xs;
198
- }
199
-
200
- .btn-lg {
201
- @apply px-6 py-3 text-base;
202
- }
203
-
204
- /* Modal Styles */
205
- .modal-overlay {
206
- @apply fixed inset-0 bg-black bg-opacity-50 flex items-center justify-center z-50;
207
- }
208
-
209
- .modal-content {
210
- @apply bg-white dark:bg-gray-800 rounded-lg shadow-xl max-w-md w-full mx-4 max-h-screen overflow-y-auto;
211
- }
212
-
213
- .modal-header {
214
- @apply px-6 py-4 border-b border-gray-200 dark:border-gray-700;
215
- }
216
-
217
- .modal-body {
218
- @apply px-6 py-4;
219
- }
220
-
221
- .modal-footer {
222
- @apply px-6 py-4 border-t border-gray-200 dark:border-gray-700 flex justify-end space-x-3;
223
- }
224
-
225
- /* Notification Styles */
226
- .notification {
227
- @apply max-w-sm w-full bg-white dark:bg-gray-800 shadow-lg rounded-lg pointer-events-auto ring-1 ring-black ring-opacity-5 overflow-hidden;
228
- }
229
-
230
- .notification.success {
231
- @apply border-l-4 border-green-500;
232
- }
233
-
234
- .notification.error {
235
- @apply border-l-4 border-red-500;
236
- }
237
-
238
- .notification.warning {
239
- @apply border-l-4 border-yellow-500;
240
- }
241
-
242
- .notification.info {
243
- @apply border-l-4 border-blue-500;
244
- }
245
-
246
- /* Responsive improvements */
247
- @media (max-width: 768px) {
248
- .payment-card {
249
- @apply p-4;
250
- }
251
-
252
- .status-overview {
253
- @apply grid-cols-2 gap-4;
254
- }
255
-
256
- .progress-steps {
257
- @apply hidden;
258
- }
259
-
260
- .filter-group {
261
- @apply flex-col items-stretch;
262
- }
263
-
264
- .payments-table {
265
- @apply text-xs;
266
- }
267
-
268
- .payments-table th,
269
- .payments-table td {
270
- @apply px-3 py-2;
271
- }
272
- }
273
-
274
- @media (max-width: 480px) {
275
- .status-overview {
276
- @apply grid-cols-1;
277
- }
278
- }
279
-
280
- /* Loading animations */
281
- .skeleton {
282
- @apply animate-pulse bg-gray-200 dark:bg-gray-700 rounded;
283
- }
284
-
285
- .skeleton-text {
286
- @apply h-4 bg-gray-200 dark:bg-gray-700 rounded;
287
- }
288
-
289
- .skeleton-text.w-1/4 {
290
- @apply w-1/4;
291
- }
292
-
293
- .skeleton-text.w-1/2 {
294
- @apply w-1/2;
295
- }
296
-
297
- .skeleton-text.w-3/4 {
298
- @apply w-3/4;
299
- }
300
-
301
- /* Chart styles */
302
- .chart-container {
303
- @apply bg-white dark:bg-gray-800 rounded-xl shadow-sm border border-gray-200 dark:border-gray-700 p-6;
304
- }
305
-
306
- .chart-legend {
307
- @apply flex justify-center space-x-6 mt-4;
308
- }
309
-
310
- .chart-legend-item {
311
- @apply flex items-center space-x-2;
312
- }
313
-
314
- .chart-legend-color {
315
- @apply w-3 h-3 rounded-full;
316
- }
317
-
318
- /* Dark mode adjustments */
319
- @media (prefers-color-scheme: dark) {
320
- .material-icons {
321
- color: inherit;
322
- }
323
- }
324
-
325
- /* Custom scrollbar */
326
- .custom-scrollbar::-webkit-scrollbar {
327
- width: 6px;
328
- }
329
-
330
- .custom-scrollbar::-webkit-scrollbar-track {
331
- @apply bg-gray-100 dark:bg-gray-800;
332
- }
333
-
334
- .custom-scrollbar::-webkit-scrollbar-thumb {
335
- @apply bg-gray-400 dark:bg-gray-600 rounded-full;
336
- }
337
-
338
- .custom-scrollbar::-webkit-scrollbar-thumb:hover {
339
- @apply bg-gray-500 dark:bg-gray-500;
340
- }
@@ -1,202 +0,0 @@
1
- /**
2
- * Notification System for Payment Dashboard
3
- * Handles toast notifications with auto-dismiss and styling
4
- */
5
-
6
- class NotificationManager {
7
- constructor() {
8
- this.container = this.getOrCreateContainer();
9
- this.notifications = new Map();
10
- this.defaultDuration = 5000; // 5 seconds
11
- }
12
-
13
- getOrCreateContainer() {
14
- let container = document.getElementById('notification-container');
15
- if (!container) {
16
- container = document.createElement('div');
17
- container.id = 'notification-container';
18
- container.className = 'fixed top-4 left-1/2 transform -translate-x-1/2 z-50 space-y-2';
19
- document.body.appendChild(container);
20
- }
21
- return container;
22
- }
23
-
24
- show(message, type = 'info', options = {}) {
25
- const id = this.generateId();
26
- const duration = options.duration || this.defaultDuration;
27
- const persistent = options.persistent || false;
28
-
29
- const notification = this.createNotificationElement(id, message, type, persistent);
30
- this.container.appendChild(notification);
31
- this.notifications.set(id, notification);
32
-
33
- // Animate in
34
- requestAnimationFrame(() => {
35
- notification.classList.add('animate-in');
36
- });
37
-
38
- // Auto-dismiss if not persistent
39
- if (!persistent) {
40
- setTimeout(() => {
41
- this.dismiss(id);
42
- }, duration);
43
- }
44
-
45
- return id;
46
- }
47
-
48
- createNotificationElement(id, message, type, persistent) {
49
- const notification = document.createElement('div');
50
- notification.id = `notification-${id}`;
51
- notification.className = `notification ${type} transform transition-all duration-300 translate-y-2 opacity-0`;
52
-
53
- const typeIcons = {
54
- success: 'check_circle',
55
- error: 'error',
56
- warning: 'warning',
57
- info: 'info'
58
- };
59
-
60
- const typeColors = {
61
- success: 'text-green-600',
62
- error: 'text-red-600',
63
- warning: 'text-yellow-600',
64
- info: 'text-blue-600'
65
- };
66
-
67
- notification.innerHTML = `
68
- <div class="p-4">
69
- <div class="flex">
70
- <div class="flex-shrink-0">
71
- <span class="material-icons ${typeColors[type]}">${typeIcons[type]}</span>
72
- </div>
73
- <div class="ml-3 w-0 flex-1">
74
- <p class="text-sm font-medium text-gray-900 dark:text-white">
75
- ${this.escapeHtml(message)}
76
- </p>
77
- </div>
78
- ${!persistent ? `
79
- <div class="ml-4 flex-shrink-0 flex">
80
- <button class="dismiss-btn bg-white dark:bg-gray-800 rounded-md inline-flex text-gray-400 hover:text-gray-500 focus:outline-none focus:ring-2 focus:ring-offset-2 focus:ring-indigo-500" onclick="window.notificationManager.dismiss('${id}')">
81
- <span class="sr-only">Close</span>
82
- <span class="material-icons text-sm">close</span>
83
- </button>
84
- </div>
85
- ` : ''}
86
- </div>
87
- </div>
88
- `;
89
-
90
- // Add CSS class for animation
91
- notification.style.setProperty('--tw-translate-y', '0.5rem');
92
-
93
- return notification;
94
- }
95
-
96
- dismiss(id) {
97
- const notification = this.notifications.get(id);
98
- if (!notification) return;
99
-
100
- // Animate out
101
- notification.classList.add('animate-out');
102
- notification.style.setProperty('--tw-translate-y', '-0.5rem');
103
- notification.style.opacity = '0';
104
-
105
- setTimeout(() => {
106
- if (notification.parentNode) {
107
- notification.parentNode.removeChild(notification);
108
- }
109
- this.notifications.delete(id);
110
- }, 300);
111
- }
112
-
113
- dismissAll() {
114
- this.notifications.forEach((notification, id) => {
115
- this.dismiss(id);
116
- });
117
- }
118
-
119
- // Convenience methods
120
- success(message, options = {}) {
121
- return this.show(message, 'success', options);
122
- }
123
-
124
- error(message, options = {}) {
125
- return this.show(message, 'error', options);
126
- }
127
-
128
- warning(message, options = {}) {
129
- return this.show(message, 'warning', options);
130
- }
131
-
132
- info(message, options = {}) {
133
- return this.show(message, 'info', options);
134
- }
135
-
136
- // Payment-specific notifications
137
- paymentCreated(paymentId) {
138
- return this.success(`Payment #${paymentId} created successfully`);
139
- }
140
-
141
- paymentCompleted(paymentId) {
142
- return this.success(`Payment #${paymentId} completed!`);
143
- }
144
-
145
- paymentFailed(paymentId, reason = '') {
146
- const message = `Payment #${paymentId} failed${reason ? ': ' + reason : ''}`;
147
- return this.error(message);
148
- }
149
-
150
- paymentCancelled(paymentId) {
151
- return this.warning(`Payment #${paymentId} cancelled`);
152
- }
153
-
154
- connectionStatus(connected) {
155
- if (connected) {
156
- return this.success('Connected to payment system', { duration: 3000 });
157
- } else {
158
- return this.error('Connection lost', { persistent: true });
159
- }
160
- }
161
-
162
- // Utility methods
163
- generateId() {
164
- return Math.random().toString(36).substr(2, 9);
165
- }
166
-
167
- escapeHtml(text) {
168
- const map = {
169
- '&': '&amp;',
170
- '<': '&lt;',
171
- '>': '&gt;',
172
- '"': '&quot;',
173
- "'": '&#039;'
174
- };
175
- return text.replace(/[&<>"']/g, (m) => map[m]);
176
- }
177
- }
178
-
179
- // Add CSS animations dynamically
180
- const style = document.createElement('style');
181
- style.textContent = `
182
- .notification.animate-in {
183
- transform: translateY(0);
184
- opacity: 1;
185
- }
186
-
187
- .notification.animate-out {
188
- transform: translateY(-0.5rem);
189
- opacity: 0;
190
- }
191
- `;
192
- document.head.appendChild(style);
193
-
194
- // Initialize notification manager when DOM is loaded
195
- document.addEventListener('DOMContentLoaded', () => {
196
- window.notificationManager = new NotificationManager();
197
- });
198
-
199
- // Export for use in other modules
200
- if (typeof module !== 'undefined' && module.exports) {
201
- module.exports = NotificationManager;
202
- }