payload-wordpress-migrator 0.0.22

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 (162) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +586 -0
  3. package/dist/components/BeforeDashboardClient.d.ts +14 -0
  4. package/dist/components/BeforeDashboardClient.js +225 -0
  5. package/dist/components/BeforeDashboardClient.js.map +1 -0
  6. package/dist/components/BeforeDashboardClient.module.css +175 -0
  7. package/dist/components/BeforeDashboardServer.d.ts +1 -0
  8. package/dist/components/BeforeDashboardServer.js +29 -0
  9. package/dist/components/BeforeDashboardServer.js.map +1 -0
  10. package/dist/components/ContentTypeSelect.d.ts +4 -0
  11. package/dist/components/ContentTypeSelect.js +147 -0
  12. package/dist/components/ContentTypeSelect.js.map +1 -0
  13. package/dist/components/FieldMappingConfiguration.d.ts +5 -0
  14. package/dist/components/FieldMappingConfiguration.js +361 -0
  15. package/dist/components/FieldMappingConfiguration.js.map +1 -0
  16. package/dist/components/FieldMappingConfiguration.module.css +75 -0
  17. package/dist/components/MigrationDashboardClient.d.ts +6 -0
  18. package/dist/components/MigrationDashboardClient.js +49 -0
  19. package/dist/components/MigrationDashboardClient.js.map +1 -0
  20. package/dist/components/MigrationDashboardClient.module.css +749 -0
  21. package/dist/components/SimpleFieldMapping.d.ts +5 -0
  22. package/dist/components/SimpleFieldMapping.js +437 -0
  23. package/dist/components/SimpleFieldMapping.js.map +1 -0
  24. package/dist/components/dashboard/JobActionButtons.d.ts +8 -0
  25. package/dist/components/dashboard/JobActionButtons.js +91 -0
  26. package/dist/components/dashboard/JobActionButtons.js.map +1 -0
  27. package/dist/components/dashboard/JobsTable.d.ts +6 -0
  28. package/dist/components/dashboard/JobsTable.js +86 -0
  29. package/dist/components/dashboard/JobsTable.js.map +1 -0
  30. package/dist/components/dashboard/LogViewer.d.ts +3 -0
  31. package/dist/components/dashboard/LogViewer.js +35 -0
  32. package/dist/components/dashboard/LogViewer.js.map +1 -0
  33. package/dist/components/dashboard/SiteConfigPanel.d.ts +12 -0
  34. package/dist/components/dashboard/SiteConfigPanel.js +205 -0
  35. package/dist/components/dashboard/SiteConfigPanel.js.map +1 -0
  36. package/dist/components/dashboard/StatsOverview.d.ts +5 -0
  37. package/dist/components/dashboard/StatsOverview.js +72 -0
  38. package/dist/components/dashboard/StatsOverview.js.map +1 -0
  39. package/dist/components/dashboard/index.d.ts +7 -0
  40. package/dist/components/dashboard/index.js +7 -0
  41. package/dist/components/dashboard/index.js.map +1 -0
  42. package/dist/components/dashboard/types.d.ts +46 -0
  43. package/dist/components/dashboard/types.js +2 -0
  44. package/dist/components/dashboard/types.js.map +1 -0
  45. package/dist/components/dashboard/useMigrationDashboard.d.ts +15 -0
  46. package/dist/components/dashboard/useMigrationDashboard.js +584 -0
  47. package/dist/components/dashboard/useMigrationDashboard.js.map +1 -0
  48. package/dist/exports/client.d.ts +4 -0
  49. package/dist/exports/client.js +5 -0
  50. package/dist/exports/client.js.map +1 -0
  51. package/dist/exports/rsc.d.ts +1 -0
  52. package/dist/exports/rsc.js +2 -0
  53. package/dist/exports/rsc.js.map +1 -0
  54. package/dist/index.d.ts +101 -0
  55. package/dist/index.js +443 -0
  56. package/dist/index.js.map +1 -0
  57. package/dist/utils/content/blocks.d.ts +6 -0
  58. package/dist/utils/content/blocks.js +93 -0
  59. package/dist/utils/content/blocks.js.map +1 -0
  60. package/dist/utils/content/fieldMapping.d.ts +9 -0
  61. package/dist/utils/content/fieldMapping.js +218 -0
  62. package/dist/utils/content/fieldMapping.js.map +1 -0
  63. package/dist/utils/content/index.d.ts +4 -0
  64. package/dist/utils/content/index.js +4 -0
  65. package/dist/utils/content/index.js.map +1 -0
  66. package/dist/utils/content/transformer.d.ts +5 -0
  67. package/dist/utils/content/transformer.js +323 -0
  68. package/dist/utils/content/transformer.js.map +1 -0
  69. package/dist/utils/endpoints/handlers.d.ts +9 -0
  70. package/dist/utils/endpoints/handlers.js +201 -0
  71. package/dist/utils/endpoints/handlers.js.map +1 -0
  72. package/dist/utils/endpoints/index.d.ts +2 -0
  73. package/dist/utils/endpoints/index.js +2 -0
  74. package/dist/utils/endpoints/index.js.map +1 -0
  75. package/dist/utils/fields/analyzer.d.ts +7 -0
  76. package/dist/utils/fields/analyzer.js +502 -0
  77. package/dist/utils/fields/analyzer.js.map +1 -0
  78. package/dist/utils/fields/index.d.ts +2 -0
  79. package/dist/utils/fields/index.js +2 -0
  80. package/dist/utils/fields/index.js.map +1 -0
  81. package/dist/utils/helpers/auth.d.ts +9 -0
  82. package/dist/utils/helpers/auth.js +50 -0
  83. package/dist/utils/helpers/auth.js.map +1 -0
  84. package/dist/utils/helpers/cache.d.ts +11 -0
  85. package/dist/utils/helpers/cache.js +47 -0
  86. package/dist/utils/helpers/cache.js.map +1 -0
  87. package/dist/utils/helpers/concurrency.d.ts +2 -0
  88. package/dist/utils/helpers/concurrency.js +26 -0
  89. package/dist/utils/helpers/concurrency.js.map +1 -0
  90. package/dist/utils/helpers/index.d.ts +8 -0
  91. package/dist/utils/helpers/index.js +8 -0
  92. package/dist/utils/helpers/index.js.map +1 -0
  93. package/dist/utils/helpers/objectHelpers.d.ts +3 -0
  94. package/dist/utils/helpers/objectHelpers.js +22 -0
  95. package/dist/utils/helpers/objectHelpers.js.map +1 -0
  96. package/dist/utils/helpers/rateLimiter.d.ts +10 -0
  97. package/dist/utils/helpers/rateLimiter.js +29 -0
  98. package/dist/utils/helpers/rateLimiter.js.map +1 -0
  99. package/dist/utils/helpers/responses.d.ts +3 -0
  100. package/dist/utils/helpers/responses.js +23 -0
  101. package/dist/utils/helpers/responses.js.map +1 -0
  102. package/dist/utils/helpers/wpHelpers.d.ts +6 -0
  103. package/dist/utils/helpers/wpHelpers.js +29 -0
  104. package/dist/utils/helpers/wpHelpers.js.map +1 -0
  105. package/dist/utils/lexical/constants.d.ts +37 -0
  106. package/dist/utils/lexical/constants.js +58 -0
  107. package/dist/utils/lexical/constants.js.map +1 -0
  108. package/dist/utils/lexical/htmlParser.d.ts +20 -0
  109. package/dist/utils/lexical/htmlParser.js +253 -0
  110. package/dist/utils/lexical/htmlParser.js.map +1 -0
  111. package/dist/utils/lexical/htmlToLexicalConverter.d.ts +55 -0
  112. package/dist/utils/lexical/htmlToLexicalConverter.js +999 -0
  113. package/dist/utils/lexical/htmlToLexicalConverter.js.map +1 -0
  114. package/dist/utils/lexical/index.d.ts +5 -0
  115. package/dist/utils/lexical/index.js +4 -0
  116. package/dist/utils/lexical/index.js.map +1 -0
  117. package/dist/utils/lexical/nodeFactories.d.ts +21 -0
  118. package/dist/utils/lexical/nodeFactories.js +91 -0
  119. package/dist/utils/lexical/nodeFactories.js.map +1 -0
  120. package/dist/utils/lexical/preprocessor.d.ts +4 -0
  121. package/dist/utils/lexical/preprocessor.js +302 -0
  122. package/dist/utils/lexical/preprocessor.js.map +1 -0
  123. package/dist/utils/media/download.d.ts +7 -0
  124. package/dist/utils/media/download.js +85 -0
  125. package/dist/utils/media/download.js.map +1 -0
  126. package/dist/utils/media/extraction.d.ts +12 -0
  127. package/dist/utils/media/extraction.js +58 -0
  128. package/dist/utils/media/extraction.js.map +1 -0
  129. package/dist/utils/media/import.d.ts +7 -0
  130. package/dist/utils/media/import.js +146 -0
  131. package/dist/utils/media/import.js.map +1 -0
  132. package/dist/utils/media/index.d.ts +6 -0
  133. package/dist/utils/media/index.js +6 -0
  134. package/dist/utils/media/index.js.map +1 -0
  135. package/dist/utils/media/upload.d.ts +4 -0
  136. package/dist/utils/media/upload.js +46 -0
  137. package/dist/utils/media/upload.js.map +1 -0
  138. package/dist/utils/media/validation.d.ts +8 -0
  139. package/dist/utils/media/validation.js +60 -0
  140. package/dist/utils/media/validation.js.map +1 -0
  141. package/dist/utils/migration/index.d.ts +3 -0
  142. package/dist/utils/migration/index.js +3 -0
  143. package/dist/utils/migration/index.js.map +1 -0
  144. package/dist/utils/migration/jobCrud.d.ts +4 -0
  145. package/dist/utils/migration/jobCrud.js +380 -0
  146. package/dist/utils/migration/jobCrud.js.map +1 -0
  147. package/dist/utils/migration/orchestrator.d.ts +5 -0
  148. package/dist/utils/migration/orchestrator.js +756 -0
  149. package/dist/utils/migration/orchestrator.js.map +1 -0
  150. package/dist/utils/types.d.ts +201 -0
  151. package/dist/utils/types.js +14 -0
  152. package/dist/utils/types.js.map +1 -0
  153. package/dist/utils/wordpress/client.d.ts +61 -0
  154. package/dist/utils/wordpress/client.js +365 -0
  155. package/dist/utils/wordpress/client.js.map +1 -0
  156. package/dist/utils/wordpress/index.d.ts +2 -0
  157. package/dist/utils/wordpress/index.js +2 -0
  158. package/dist/utils/wordpress/index.js.map +1 -0
  159. package/dist/utils/wordpressApi.d.ts +11 -0
  160. package/dist/utils/wordpressApi.js +25 -0
  161. package/dist/utils/wordpressApi.js.map +1 -0
  162. package/package.json +155 -0
@@ -0,0 +1,749 @@
1
+ .migrationDashboardHeader {
2
+ display: flex;
3
+ justify-content: space-between;
4
+ align-items: center;
5
+ margin-bottom: 2rem;
6
+ }
7
+
8
+ .migrationDashboardHeader h1 {
9
+ margin: 0;
10
+ color: var(--theme-elevation-800);
11
+ font-size: 2rem;
12
+ font-weight: 600;
13
+ }
14
+
15
+ .refreshButton {
16
+ padding: 0.5rem 1rem;
17
+ background: var(--theme-elevation-100);
18
+ border: 1px solid var(--theme-elevation-200);
19
+ border-radius: 4px;
20
+ cursor: pointer;
21
+ transition: all 0.2s ease;
22
+ font-weight: 500;
23
+ color: var(--theme-elevation-700);
24
+ }
25
+
26
+ .refreshButton:hover {
27
+ background: var(--theme-elevation-200);
28
+ }
29
+
30
+ .refreshButton:disabled {
31
+ opacity: 0.6;
32
+ cursor: not-allowed;
33
+ }
34
+
35
+ .statsGrid {
36
+ display: grid;
37
+ grid-template-columns: repeat(auto-fit, minmax(200px, 1fr));
38
+ gap: 1rem;
39
+ margin-bottom: 2rem;
40
+ }
41
+
42
+ .statCard {
43
+ padding: 1.5rem;
44
+ background: var(--theme-elevation-50);
45
+ border: 1px solid var(--theme-elevation-100);
46
+ border-radius: 6px;
47
+ text-align: center;
48
+ }
49
+
50
+ .statCard h3 {
51
+ margin: 0;
52
+ color: var(--theme-elevation-400);
53
+ font-size: 0.875rem;
54
+ font-weight: 500;
55
+ text-transform: uppercase;
56
+ letter-spacing: 0.05em;
57
+ }
58
+
59
+ .statValue {
60
+ margin: 0.5rem 0 0;
61
+ font-size: 1.5rem;
62
+ font-weight: 600;
63
+ color: var(--theme-elevation-800);
64
+ }
65
+
66
+ .statValue.active {
67
+ color: var(--theme-success-600);
68
+ }
69
+
70
+ .recentJobs {
71
+ margin-top: 2rem;
72
+ }
73
+
74
+ .recentJobs h3 {
75
+ margin: 0 0 1rem;
76
+ color: var(--theme-elevation-700);
77
+ font-size: 1.25rem;
78
+ font-weight: 600;
79
+ }
80
+
81
+ .jobsTable {
82
+ overflow-x: auto;
83
+ border: 1px solid var(--theme-elevation-100);
84
+ border-radius: 6px;
85
+ background: var(--theme-elevation-0);
86
+ }
87
+
88
+ .jobsTable table {
89
+ width: 100%;
90
+ border-collapse: collapse;
91
+ font-size: 0.875rem;
92
+ }
93
+
94
+ .jobsTable th,
95
+ .jobsTable td {
96
+ padding: 0.75rem 1rem;
97
+ text-align: left;
98
+ border-bottom: 1px solid var(--theme-elevation-100);
99
+ }
100
+
101
+ .jobsTable th {
102
+ background: var(--theme-elevation-50);
103
+ font-weight: 600;
104
+ color: var(--theme-elevation-600);
105
+ text-transform: uppercase;
106
+ font-size: 0.75rem;
107
+ letter-spacing: 0.05em;
108
+ }
109
+
110
+ .jobsTable tr:last-child td {
111
+ border-bottom: none;
112
+ }
113
+
114
+ .jobsTable tr:hover {
115
+ background: var(--theme-elevation-25);
116
+ }
117
+
118
+ .statusBadge {
119
+ display: inline-block;
120
+ padding: 0.25rem 0.5rem;
121
+ border-radius: 999px;
122
+ font-size: 0.75rem;
123
+ font-weight: 600;
124
+ text-transform: uppercase;
125
+ letter-spacing: 0.025em;
126
+ }
127
+
128
+ .statusBadge.completed {
129
+ background: var(--theme-success-100);
130
+ color: var(--white);
131
+ }
132
+
133
+ .statusBadge.running {
134
+ background: var(--theme-warning-100);
135
+ color: var(--theme-warning-700);
136
+ }
137
+
138
+ .statusBadge.ready {
139
+ background: var(--theme-elevation-100);
140
+ color: var(--theme-elevation-600);
141
+ }
142
+
143
+ .statusBadge.failed {
144
+ background: var(--theme-error-100);
145
+ color: var(--theme-error-700);
146
+ }
147
+
148
+ .statusBadge.paused {
149
+ background: var(--theme-elevation-200);
150
+ color: var(--theme-elevation-700);
151
+ }
152
+
153
+ .jobActions {
154
+ display: flex;
155
+ align-items: center;
156
+ gap: 0.5rem;
157
+ }
158
+
159
+ .actionButton {
160
+ padding: 0.25rem 0.5rem;
161
+ background: var(--theme-elevation-100);
162
+ border: 1px solid var(--theme-elevation-200);
163
+ border-radius: 4px;
164
+ cursor: pointer;
165
+ transition: all 0.2s ease;
166
+ font-size: 0.75rem;
167
+ font-weight: 500;
168
+ color: var(--theme-elevation-700);
169
+ }
170
+
171
+ .actionButton:hover {
172
+ background: var(--theme-elevation-200);
173
+ border-color: var(--theme-elevation-300);
174
+ }
175
+
176
+ .actionButton:disabled {
177
+ opacity: 0.6;
178
+ cursor: not-allowed;
179
+ }
180
+
181
+ .retryButton {
182
+ background: var(--theme-warning-600);
183
+ color: white;
184
+ }
185
+
186
+ .retryButton:hover {
187
+ background: var(--theme-warning-700);
188
+ }
189
+
190
+ .loadingSpinner {
191
+ width: 20px;
192
+ height: 20px;
193
+ border: 2px solid var(--theme-elevation-100);
194
+ border-top-color: var(--theme-elevation-400);
195
+ border-radius: 50%;
196
+ animation: spin 1s linear infinite;
197
+ }
198
+
199
+ @keyframes spin {
200
+ to {
201
+ transform: rotate(360deg);
202
+ }
203
+ }
204
+
205
+ .errorMessage {
206
+ color: var(--theme-error-500);
207
+ background: var(--theme-error-100);
208
+ padding: 1rem;
209
+ border-radius: 4px;
210
+ border: 1px solid var(--theme-error-200);
211
+ margin-bottom: 1rem;
212
+ }
213
+
214
+ .errorMessage h3 {
215
+ margin: 0 0 0.5rem;
216
+ }
217
+
218
+ .errorMessage p {
219
+ margin: 0;
220
+ }
221
+
222
+ /* Modal Styles */
223
+ .modalOverlay {
224
+ position: fixed;
225
+ top: 0;
226
+ left: 0;
227
+ right: 0;
228
+ bottom: 0;
229
+ background-color: rgba(0, 0, 0, 0.5);
230
+ display: flex;
231
+ justify-content: center;
232
+ align-items: center;
233
+ z-index: 1000;
234
+ }
235
+
236
+ .modal {
237
+ background: white;
238
+ border-radius: 8px;
239
+ box-shadow: 0 10px 25px rgba(0, 0, 0, 0.2);
240
+ max-width: 800px;
241
+ width: 90%;
242
+ max-height: 90vh;
243
+ overflow-y: auto;
244
+ }
245
+
246
+ .modalHeader {
247
+ display: flex;
248
+ justify-content: space-between;
249
+ align-items: center;
250
+ padding: 1.5rem;
251
+ border-bottom: 1px solid #e2e8f0;
252
+ }
253
+
254
+ .modalHeader h2 {
255
+ margin: 0;
256
+ font-size: 1.5rem;
257
+ color: #1a202c;
258
+ }
259
+
260
+ .closeButton {
261
+ background: none;
262
+ border: none;
263
+ font-size: 1.5rem;
264
+ cursor: pointer;
265
+ color: #718096;
266
+ padding: 0.25rem;
267
+ line-height: 1;
268
+ border-radius: 4px;
269
+ }
270
+
271
+ .closeButton:hover {
272
+ background-color: #f7fafc;
273
+ color: #1a202c;
274
+ }
275
+
276
+ .modalContent {
277
+ padding: 1.5rem;
278
+ }
279
+
280
+ .detailsGrid {
281
+ display: grid;
282
+ grid-template-columns: 1fr 1fr;
283
+ gap: 2rem;
284
+ margin-bottom: 2rem;
285
+ }
286
+
287
+ @media (max-width: 768px) {
288
+ .detailsGrid {
289
+ grid-template-columns: 1fr;
290
+ gap: 1rem;
291
+ }
292
+ }
293
+
294
+ .detailSection {
295
+ background: #f8fafc;
296
+ padding: 1rem;
297
+ border-radius: 6px;
298
+ }
299
+
300
+ .detailSection h3 {
301
+ margin: 0 0 1rem 0;
302
+ font-size: 1.1rem;
303
+ color: #2d3748;
304
+ }
305
+
306
+ .detailSection p {
307
+ margin: 0.5rem 0;
308
+ color: #4a5568;
309
+ }
310
+
311
+ .progressStats {
312
+ display: grid;
313
+ grid-template-columns: 1fr 1fr;
314
+ gap: 0.75rem;
315
+ margin-bottom: 1rem;
316
+ }
317
+
318
+ .progressStat {
319
+ display: flex;
320
+ justify-content: space-between;
321
+ align-items: center;
322
+ padding: 0.5rem;
323
+ background: white;
324
+ border-radius: 4px;
325
+ }
326
+
327
+ .progressLabel {
328
+ font-size: 0.875rem;
329
+ color: #718096;
330
+ }
331
+
332
+ .progressValue {
333
+ font-weight: 600;
334
+ color: #2d3748;
335
+ }
336
+
337
+ .jobControls {
338
+ display: flex;
339
+ gap: 0.75rem;
340
+ padding-top: 1rem;
341
+ border-top: 1px solid #e2e8f0;
342
+ }
343
+
344
+ .jobControls .actionButton {
345
+ flex: 1;
346
+ max-width: 120px;
347
+ }
348
+
349
+ /* Status badge enhancements */
350
+ .statusBadge.running {
351
+ background-color: #3182ce;
352
+ animation: pulse 2s infinite;
353
+ }
354
+
355
+ @keyframes pulse {
356
+
357
+ 0%,
358
+ 100% {
359
+ opacity: 1;
360
+ }
361
+
362
+ 50% {
363
+ opacity: 0.7;
364
+ }
365
+ }
366
+
367
+ .statusBadge.completed {
368
+ background-color: #38a169;
369
+ }
370
+
371
+ .statusBadge.failed {
372
+ background-color: #e53e3e;
373
+ }
374
+
375
+ .statusBadge.paused {
376
+ background-color: #ed8936;
377
+ }
378
+
379
+ .statusBadge.ready {
380
+ background-color: #718096;
381
+ }
382
+
383
+ /* WordPress Site Configuration Styles */
384
+ .siteConfigSection {
385
+ margin-bottom: 2rem;
386
+ border: 1px solid var(--theme-elevation-200);
387
+ border-radius: 6px;
388
+ background: var(--theme-elevation-0);
389
+ }
390
+
391
+ .siteConfigHeader {
392
+ display: flex;
393
+ justify-content: space-between;
394
+ align-items: center;
395
+ padding: 1rem 1.5rem;
396
+ border-bottom: 1px solid var(--theme-elevation-100);
397
+ background: var(--theme-elevation-25);
398
+ }
399
+
400
+ .siteConfigHeader h2 {
401
+ margin: 0;
402
+ color: var(--theme-elevation-700);
403
+ font-size: 1.125rem;
404
+ font-weight: 600;
405
+ }
406
+
407
+ .toggleButton {
408
+ padding: 0.5rem 1rem;
409
+ background: var(--theme-elevation-100);
410
+ border: 1px solid var(--theme-elevation-200);
411
+ border-radius: 4px;
412
+ cursor: pointer;
413
+ transition: all 0.2s ease;
414
+ font-size: 0.875rem;
415
+ font-weight: 500;
416
+ color: var(--theme-elevation-700);
417
+ }
418
+
419
+ .toggleButton:hover {
420
+ background: var(--theme-elevation-200);
421
+ }
422
+
423
+ .siteConfigForm {
424
+ padding: 1.5rem;
425
+ }
426
+
427
+ .formGrid {
428
+ display: grid;
429
+ grid-template-columns: repeat(auto-fit, minmax(250px, 1fr));
430
+ gap: 1rem;
431
+ margin-bottom: 1.5rem;
432
+ }
433
+
434
+ .formGroup {
435
+ display: flex;
436
+ flex-direction: column;
437
+ gap: 0.5rem;
438
+ }
439
+
440
+ .formGroup label {
441
+ font-weight: 600;
442
+ color: var(--theme-elevation-700);
443
+ font-size: 0.875rem;
444
+ }
445
+
446
+ .formGroup input {
447
+ padding: 0.75rem;
448
+ border: 1px solid var(--theme-elevation-200);
449
+ border-radius: 4px;
450
+ font-size: 0.875rem;
451
+ background: var(--theme-elevation-0);
452
+ color: var(--theme-elevation-800);
453
+ transition: border-color 0.2s ease;
454
+ }
455
+
456
+ .formGroup input:focus {
457
+ outline: none;
458
+ border-color: var(--theme-success-500);
459
+ box-shadow: 0 0 0 3px var(--theme-success-100);
460
+ }
461
+
462
+ .formGroup small {
463
+ color: var(--theme-elevation-500);
464
+ font-size: 0.75rem;
465
+ }
466
+
467
+ .configActions {
468
+ margin-top: 1.5rem;
469
+ padding-top: 1.5rem;
470
+ border-top: 1px solid var(--theme-elevation-100);
471
+ display: flex;
472
+ flex-direction: column;
473
+ gap: 1rem;
474
+ }
475
+
476
+ .connectionStatus {
477
+ display: flex;
478
+ flex-direction: column;
479
+ justify-content: space-between;
480
+ align-items: start;
481
+ padding: 1rem;
482
+ background: var(--theme-elevation-50);
483
+ border: 1px solid var(--theme-elevation-100);
484
+ border-radius: 4px;
485
+ }
486
+
487
+ .statusIndicator {
488
+ display: flex;
489
+ align-items: center;
490
+ gap: 0.5rem;
491
+ }
492
+
493
+ .statusDot {
494
+ width: 10px;
495
+ height: 10px;
496
+ border-radius: 50%;
497
+ flex-shrink: 0;
498
+ }
499
+
500
+ .statusDot.not-tested {
501
+ background: var(--theme-elevation-300);
502
+ }
503
+
504
+ .statusDot.testing {
505
+ background: var(--theme-warning-500);
506
+ animation: pulse 1.5s infinite;
507
+ }
508
+
509
+ .statusDot.connected {
510
+ background: var(--theme-success-500);
511
+ }
512
+
513
+ .statusDot.failed {
514
+ background: var(--theme-error-500);
515
+ }
516
+
517
+ .statusText {
518
+ font-weight: 500;
519
+ color: var(--theme-elevation-700);
520
+ font-size: 0.875rem;
521
+ }
522
+
523
+ .testButton {
524
+ padding: 0.5rem 1rem;
525
+ background: var(--theme-success-600);
526
+ border: none;
527
+ border-radius: 4px;
528
+ cursor: pointer;
529
+ transition: all 0.2s ease;
530
+ font-weight: 500;
531
+ color: white;
532
+ font-size: 0.875rem;
533
+ }
534
+
535
+ .testButton:hover {
536
+ background: var(--theme-success-700);
537
+ }
538
+
539
+ .testButton:disabled {
540
+ opacity: 0.6;
541
+ cursor: not-allowed;
542
+ }
543
+
544
+ .formActions {
545
+ display: flex;
546
+ align-items: center;
547
+ gap: 0.75rem;
548
+ justify-content: flex-end;
549
+ }
550
+
551
+ .saveButton,
552
+ .editButton,
553
+ .cancelButton {
554
+ padding: 0.5rem 1rem;
555
+ border: none;
556
+ border-radius: 4px;
557
+ cursor: pointer;
558
+ transition: all 0.2s ease;
559
+ font-weight: 500;
560
+ font-size: 0.875rem;
561
+ min-width: 120px;
562
+ }
563
+
564
+ .saveButton {
565
+ background: var(--theme-success-600);
566
+ color: white;
567
+ }
568
+
569
+ .saveButton:hover {
570
+ background: var(--theme-success-700);
571
+ }
572
+
573
+ .editButton {
574
+ background: var(--theme-elevation-600);
575
+ color: white;
576
+ }
577
+
578
+ .editButton:hover {
579
+ background: var(--theme-elevation-700);
580
+ }
581
+
582
+ .cancelButton {
583
+ background: var(--theme-elevation-200);
584
+ color: var(--theme-elevation-700);
585
+ border: 1px solid var(--theme-elevation-300);
586
+ }
587
+
588
+ .cancelButton:hover {
589
+ background: var(--theme-elevation-300);
590
+ }
591
+
592
+ .saveButton:disabled,
593
+ .editButton:disabled,
594
+ .cancelButton:disabled {
595
+ opacity: 0.6;
596
+ cursor: not-allowed;
597
+ }
598
+
599
+ .formGroup input:disabled {
600
+ background: var(--theme-elevation-100);
601
+ color: var(--theme-elevation-500);
602
+ cursor: not-allowed;
603
+ }
604
+
605
+ @media (max-width: 768px) {
606
+ .formGrid {
607
+ grid-template-columns: 1fr;
608
+ }
609
+
610
+ .connectionStatus {
611
+ flex-direction: column;
612
+ gap: 1rem;
613
+ text-align: center;
614
+ }
615
+
616
+ .formActions {
617
+ justify-content: center;
618
+ flex-wrap: wrap;
619
+ }
620
+
621
+ .saveButton,
622
+ .editButton,
623
+ .cancelButton {
624
+ min-width: 100px;
625
+ }
626
+ }
627
+
628
+ /* Migration Logs */
629
+ .migrationLogs {
630
+ margin-top: 2rem;
631
+ }
632
+
633
+ .migrationLogs h3 {
634
+ margin: 0 0 1rem;
635
+ color: var(--theme-elevation-700);
636
+ font-size: 1.25rem;
637
+ font-weight: 600;
638
+ }
639
+
640
+ .logsContainer {
641
+ border: 1px solid var(--theme-elevation-100);
642
+ border-radius: 6px;
643
+ background: var(--theme-elevation-0);
644
+ }
645
+
646
+ .logsTextarea {
647
+ width: 100%;
648
+ min-height: 200px;
649
+ padding: 1rem;
650
+ border: none;
651
+ background: var(--theme-elevation-50);
652
+ color: var(--theme-elevation-800);
653
+ font-family: 'Monaco', 'Menlo', 'Ubuntu Mono', monospace;
654
+ font-size: 0.875rem;
655
+ line-height: 1.5;
656
+ resize: vertical;
657
+ border-radius: 6px;
658
+ }
659
+
660
+ .logsTextarea:focus {
661
+ outline: 2px solid var(--theme-success-500);
662
+ outline-offset: -2px;
663
+ }
664
+
665
+ .logsTextarea::placeholder {
666
+ color: var(--theme-elevation-400);
667
+ font-style: italic;
668
+ }
669
+
670
+ /* Action buttons */
671
+ .actionButton {
672
+ background: #0066cc;
673
+ border: none;
674
+ border-radius: 4px;
675
+ color: white;
676
+ cursor: pointer;
677
+ font-size: 12px;
678
+ padding: 6px 12px;
679
+ transition: background-color 0.2s;
680
+ }
681
+
682
+ .actionButton:hover:not(:disabled) {
683
+ background: #0052a3;
684
+ }
685
+
686
+ .actionButton:disabled {
687
+ background: #ccc;
688
+ cursor: not-allowed;
689
+ }
690
+
691
+ .refreshButton {
692
+ background: #28a745;
693
+ font-size: 14px;
694
+ padding: 8px 16px;
695
+ }
696
+
697
+ .refreshButton:hover:not(:disabled) {
698
+ background: #218838;
699
+ }
700
+
701
+ .updateButton {
702
+ background-color: #17a2b8;
703
+ border-color: #17a2b8;
704
+ color: white;
705
+ }
706
+
707
+ .updateButton:hover {
708
+ background-color: #138496;
709
+ border-color: #138496;
710
+ }
711
+
712
+ .updateButton:disabled {
713
+ background-color: #7dd3fc;
714
+ border-color: #7dd3fc;
715
+ cursor: not-allowed;
716
+ }
717
+
718
+ .restartButton {
719
+ background-color: #ff9500;
720
+ border-color: #ff9500;
721
+ }
722
+
723
+ .restartButton:hover {
724
+ background-color: #e6850e;
725
+ border-color: #e6850e;
726
+ }
727
+
728
+ .restartButton:disabled {
729
+ background-color: #ffcc80;
730
+ border-color: #ffcc80;
731
+ cursor: not-allowed;
732
+ }
733
+
734
+ .rollbackButton {
735
+ background-color: #dc3545;
736
+ border-color: #dc3545;
737
+ color: white;
738
+ }
739
+
740
+ .rollbackButton:hover {
741
+ background-color: #c82333;
742
+ border-color: #c82333;
743
+ }
744
+
745
+ .rollbackButton:disabled {
746
+ background-color: #f5a6ad;
747
+ border-color: #f5a6ad;
748
+ cursor: not-allowed;
749
+ }