@adminforge/core 0.3.1

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 (86) hide show
  1. package/.turbo/turbo-build.log +56 -0
  2. package/CHANGELOG.md +32 -0
  3. package/LICENSE +21 -0
  4. package/bin/adminforge.js +317 -0
  5. package/dist/auth-client.cjs +45 -0
  6. package/dist/auth-client.cjs.map +1 -0
  7. package/dist/auth-client.d.cts +17 -0
  8. package/dist/auth-client.d.ts +17 -0
  9. package/dist/auth-client.js +20 -0
  10. package/dist/auth-client.js.map +1 -0
  11. package/dist/auth.cjs +65 -0
  12. package/dist/auth.cjs.map +1 -0
  13. package/dist/auth.d.cts +21 -0
  14. package/dist/auth.d.ts +21 -0
  15. package/dist/auth.js +36 -0
  16. package/dist/auth.js.map +1 -0
  17. package/dist/client-D0cjJVsn.d.ts +20 -0
  18. package/dist/client-sRnmZ-Y9.d.cts +20 -0
  19. package/dist/index-CyzxaE7n.d.cts +124 -0
  20. package/dist/index-CyzxaE7n.d.ts +124 -0
  21. package/dist/index.cjs +453 -0
  22. package/dist/index.cjs.map +1 -0
  23. package/dist/index.d.cts +65 -0
  24. package/dist/index.d.ts +65 -0
  25. package/dist/index.js +410 -0
  26. package/dist/index.js.map +1 -0
  27. package/dist/next.cjs +839 -0
  28. package/dist/next.cjs.map +1 -0
  29. package/dist/next.d.cts +84 -0
  30. package/dist/next.d.ts +84 -0
  31. package/dist/next.js +800 -0
  32. package/dist/next.js.map +1 -0
  33. package/dist/styles.css +763 -0
  34. package/dist/styles.css.map +1 -0
  35. package/dist/styles.d.cts +2 -0
  36. package/dist/styles.d.ts +2 -0
  37. package/dist/ui.cjs +2500 -0
  38. package/dist/ui.cjs.map +1 -0
  39. package/dist/ui.d.cts +119 -0
  40. package/dist/ui.d.ts +119 -0
  41. package/dist/ui.js +2448 -0
  42. package/dist/ui.js.map +1 -0
  43. package/eslint.config.js +35 -0
  44. package/package.json +99 -0
  45. package/src/api/controller.ts +234 -0
  46. package/src/api/index.ts +4 -0
  47. package/src/api/next.ts +281 -0
  48. package/src/api/security/agent-auth.ts +134 -0
  49. package/src/auth/config.ts +20 -0
  50. package/src/auth/index.ts +3 -0
  51. package/src/auth/middleware.ts +15 -0
  52. package/src/auth/provider.tsx +28 -0
  53. package/src/core/fields/index.ts +119 -0
  54. package/src/core/hooks/index.ts +60 -0
  55. package/src/core/index.ts +43 -0
  56. package/src/core/registry/index.ts +22 -0
  57. package/src/core/schema/collection.ts +12 -0
  58. package/src/core/schema/config.ts +11 -0
  59. package/src/core/schema/normalize.ts +32 -0
  60. package/src/core/types/index.ts +114 -0
  61. package/src/db/client.ts +146 -0
  62. package/src/db/index.ts +3 -0
  63. package/src/db/schema-generator.ts +104 -0
  64. package/src/fields/index.ts +1 -0
  65. package/src/index.ts +4 -0
  66. package/src/next.ts +3 -0
  67. package/src/styles/adminforge.css +840 -0
  68. package/src/ui/AdminDashboard.tsx +176 -0
  69. package/src/ui/AdminForgeContext.tsx +64 -0
  70. package/src/ui/components/AdminLayout.tsx +107 -0
  71. package/src/ui/form-engine/FormEngine.tsx +250 -0
  72. package/src/ui/form-engine/ImageUpload.tsx +68 -0
  73. package/src/ui/form-engine/RelationInput.tsx +215 -0
  74. package/src/ui/form-engine/RichTextEditor.tsx +708 -0
  75. package/src/ui/index.ts +18 -0
  76. package/src/ui/screens/AdminPage.tsx +162 -0
  77. package/src/ui/screens/AgentTokenPage.tsx +232 -0
  78. package/src/ui/screens/CollectionFormPage.tsx +135 -0
  79. package/src/ui/screens/CollectionListPage.tsx +170 -0
  80. package/src/ui/screens/CollectionSchemaPage.tsx +180 -0
  81. package/src/ui/screens/RoleDetailPage.tsx +147 -0
  82. package/src/ui/screens/RolesListPage.tsx +57 -0
  83. package/src/ui/table-engine/TableEngine.tsx +157 -0
  84. package/src/ui.ts +3 -0
  85. package/tsconfig.json +10 -0
  86. package/tsup.config.ts +54 -0
@@ -0,0 +1,763 @@
1
+ @import "https://fonts.googleapis.com/css2?family=Inter:wght@400;500;600;700;800&display=swap";
2
+ @import "https://fonts.googleapis.com/css2?family=Material+Symbols+Outlined:wght,FILL@100..700,0..1&display=swap";
3
+
4
+ /* src/styles/adminforge.css */
5
+ *,
6
+ *::before,
7
+ *::after {
8
+ box-sizing: border-box;
9
+ margin: 0;
10
+ padding: 0;
11
+ }
12
+ :root {
13
+ --color-primary: #0058be;
14
+ --color-primary-hover: #004fb1;
15
+ --color-bg: #f7f9fb;
16
+ --color-surface: #ffffff;
17
+ --color-border: #e2e8f0;
18
+ --radius-md: 6px;
19
+ --radius-lg: 8px;
20
+ --sidebar-width: 260px;
21
+ --glass-bg: rgba(255, 255, 255, 0.8);
22
+ --glass-border: rgba(226, 232, 240, 0.4);
23
+ --color-danger: #ef4444;
24
+ --color-danger-hover: #dc2626;
25
+ --color-sidebar-bg: #000000;
26
+ --color-sidebar-text: rgba(255, 255, 255, 0.7);
27
+ --color-sidebar-active-bg: rgba(255, 255, 255, 0.1);
28
+ }
29
+ body {
30
+ font-family:
31
+ "Inter",
32
+ -apple-system,
33
+ BlinkMacSystemFont,
34
+ "Segoe UI",
35
+ Roboto,
36
+ sans-serif;
37
+ background: var(--color-bg);
38
+ color: var(--color-text);
39
+ line-height: 1.5;
40
+ -webkit-font-smoothing: antialiased;
41
+ -moz-osx-font-smoothing: grayscale;
42
+ }
43
+ ::-webkit-scrollbar {
44
+ width: 8px;
45
+ height: 8px;
46
+ }
47
+ ::-webkit-scrollbar-track {
48
+ background: transparent;
49
+ }
50
+ ::-webkit-scrollbar-thumb {
51
+ background: #d1d5db;
52
+ border-radius: 4px;
53
+ }
54
+ ::-webkit-scrollbar-thumb:hover {
55
+ background: #9ca3af;
56
+ }
57
+ a {
58
+ color: inherit;
59
+ text-decoration: none;
60
+ }
61
+ .adminforge-layout {
62
+ display: flex;
63
+ min-height: 100vh;
64
+ }
65
+ .adminforge-sidebar {
66
+ width: var(--sidebar-width);
67
+ background: var(--color-sidebar-bg);
68
+ color: var(--color-sidebar-text);
69
+ height: 100vh;
70
+ position: fixed;
71
+ left: 0;
72
+ top: 0;
73
+ display: flex;
74
+ flex-direction: column;
75
+ padding: 24px 0;
76
+ z-index: 100;
77
+ border-right: 1px solid rgba(255, 255, 255, 0.05);
78
+ }
79
+ .adminforge-sidebar-header {
80
+ padding: 0 24px;
81
+ margin-bottom: 40px;
82
+ }
83
+ .adminforge-sidebar-header h1 {
84
+ background:
85
+ linear-gradient(
86
+ 135deg,
87
+ #fff 0%,
88
+ rgba(255, 255, 255, 0.7) 100%);
89
+ -webkit-background-clip: text;
90
+ background-clip: text;
91
+ -webkit-text-fill-color: transparent;
92
+ font-size: 24px;
93
+ font-weight: 800;
94
+ letter-spacing: -0.04em;
95
+ margin-bottom: 4px;
96
+ }
97
+ .adminforge-sidebar-subtitle {
98
+ font-size: 13px;
99
+ font-weight: 500;
100
+ color: #626469;
101
+ letter-spacing: 0.02em;
102
+ }
103
+ .adminforge-nav {
104
+ list-style: none;
105
+ padding: 0 12px;
106
+ flex: 1;
107
+ }
108
+ .adminforge-nav li {
109
+ margin-bottom: 4px;
110
+ }
111
+ .adminforge-nav-item {
112
+ position: relative;
113
+ }
114
+ .adminforge-nav a,
115
+ .adminforge-nav-link {
116
+ display: flex;
117
+ align-items: center;
118
+ padding: 12px 16px;
119
+ color: var(--color-sidebar-text);
120
+ text-decoration: none;
121
+ border-radius: var(--radius-md);
122
+ font-size: 14px;
123
+ font-weight: 600;
124
+ transition: all 0.2s;
125
+ gap: 12px;
126
+ }
127
+ .adminforge-nav a:hover,
128
+ .adminforge-nav-link:hover {
129
+ background: var(--color-sidebar-active-bg);
130
+ color: #fff;
131
+ }
132
+ .adminforge-nav a.active,
133
+ .adminforge-nav-link.active {
134
+ background: var(--color-primary);
135
+ color: #fff;
136
+ }
137
+ .adminforge-nav-item-content {
138
+ display: flex;
139
+ align-items: center;
140
+ gap: 12px;
141
+ }
142
+ .adminforge-nav-icon {
143
+ font-size: 20px;
144
+ }
145
+ .adminforge-nav-quick-create {
146
+ position: absolute;
147
+ right: 8px;
148
+ top: 50%;
149
+ transform: translateY(-50%);
150
+ display: flex;
151
+ align-items: center;
152
+ justify-content: center;
153
+ width: 28px;
154
+ height: 28px;
155
+ border-radius: 4px;
156
+ opacity: 0;
157
+ transition: all 0.2s;
158
+ color: rgba(255, 255, 255, 0.5);
159
+ z-index: 10;
160
+ }
161
+ .adminforge-nav-item:hover .adminforge-nav-quick-create {
162
+ opacity: 1;
163
+ }
164
+ .adminforge-nav-quick-create:hover {
165
+ background: rgba(255, 255, 255, 0.2);
166
+ color: #fff;
167
+ }
168
+ .adminforge-sidebar-footer {
169
+ padding: 16px;
170
+ border-top: 1px solid rgba(255, 255, 255, 0.05);
171
+ }
172
+ .adminforge-sidebar-btn {
173
+ width: 100%;
174
+ background: var(--color-primary);
175
+ color: #fff;
176
+ border: none;
177
+ padding: 12px;
178
+ border-radius: var(--radius-md);
179
+ font-size: 14px;
180
+ font-weight: 600;
181
+ display: flex;
182
+ align-items: center;
183
+ justify-content: center;
184
+ gap: 8px;
185
+ cursor: pointer;
186
+ transition: background 0.2s;
187
+ }
188
+ .adminforge-sidebar-btn:hover {
189
+ background: var(--color-primary-hover);
190
+ }
191
+ .adminforge-content {
192
+ flex: 1;
193
+ margin-left: var(--sidebar-width);
194
+ min-height: 100vh;
195
+ display: flex;
196
+ flex-direction: column;
197
+ min-width: 0;
198
+ }
199
+ .adminforge-topbar {
200
+ position: sticky;
201
+ top: 0;
202
+ z-index: 40;
203
+ background: var(--glass-bg);
204
+ backdrop-filter: blur(12px);
205
+ -webkit-backdrop-filter: blur(12px);
206
+ border-bottom: 1px solid var(--color-border);
207
+ padding: 16px 32px !important;
208
+ display: flex;
209
+ justify-content: space-between;
210
+ align-items: center;
211
+ margin-bottom: 0 !important;
212
+ }
213
+ .adminforge-main-canvas {
214
+ padding: 32px;
215
+ flex: 1;
216
+ min-width: 0;
217
+ overflow-x: hidden;
218
+ }
219
+ .adminforge-display-title {
220
+ font-size: 30px;
221
+ font-weight: 800;
222
+ letter-spacing: -0.03em;
223
+ margin-bottom: 8px;
224
+ }
225
+ .adminforge-display-subtitle {
226
+ font-size: 16px;
227
+ color: var(--color-text-secondary);
228
+ }
229
+ .adminforge-badge {
230
+ display: inline-flex;
231
+ align-items: center;
232
+ padding: 2px 8px;
233
+ font-size: 12px;
234
+ font-weight: 500;
235
+ border-radius: 4px;
236
+ background: #f1f5f9;
237
+ color: var(--color-text-secondary);
238
+ border: 1px solid var(--color-border);
239
+ }
240
+ .adminforge-badge-secondary {
241
+ background: #f0f9ff;
242
+ color: #0369a1;
243
+ border-color: #bae6fd;
244
+ }
245
+ .adminforge-id-badge {
246
+ font-family:
247
+ "SFMono-Regular",
248
+ Consolas,
249
+ "Liberation Mono",
250
+ Menlo,
251
+ monospace;
252
+ font-size: 12px;
253
+ background: #f8fafc;
254
+ color: #64748b;
255
+ padding: 2px 6px;
256
+ border-radius: 4px;
257
+ border: 1px solid var(--color-border);
258
+ cursor: help;
259
+ transition: all 0.2s;
260
+ }
261
+ .adminforge-id-badge:hover {
262
+ background: #f1f5f9;
263
+ color: #475569;
264
+ }
265
+ .adminforge-btn-text {
266
+ background: none;
267
+ border: none;
268
+ color: var(--color-primary);
269
+ font-size: 14px;
270
+ font-weight: 600;
271
+ cursor: pointer;
272
+ padding: 4px 8px;
273
+ border-radius: 4px;
274
+ transition: all 0.2s;
275
+ text-decoration: none;
276
+ }
277
+ .adminforge-btn-text:hover {
278
+ background: #f0f7ff;
279
+ color: var(--color-primary-hover);
280
+ }
281
+ .adminforge-page-header {
282
+ display: flex;
283
+ align-items: center;
284
+ justify-content: space-between;
285
+ margin-bottom: 32px;
286
+ }
287
+ .adminforge-page-header h2 {
288
+ font-size: 24px;
289
+ font-weight: 700;
290
+ letter-spacing: -0.02em;
291
+ }
292
+ .adminforge-btn {
293
+ display: inline-flex;
294
+ align-items: center;
295
+ justify-content: center;
296
+ padding: 10px 20px;
297
+ font-size: 14px;
298
+ font-weight: 600;
299
+ border-radius: var(--radius-md);
300
+ border: 1px solid var(--color-border);
301
+ background: var(--color-surface);
302
+ color: var(--color-text);
303
+ cursor: pointer;
304
+ transition: all 0.2s;
305
+ gap: 8px;
306
+ white-space: nowrap;
307
+ }
308
+ .adminforge-btn:hover {
309
+ background: #f8fafc;
310
+ border-color: #cbd5e1;
311
+ }
312
+ .adminforge-btn-primary {
313
+ background: var(--color-primary);
314
+ color: #fff;
315
+ border-color: var(--color-primary);
316
+ box-shadow: 0 1px 2px rgba(0, 88, 190, 0.2);
317
+ }
318
+ .adminforge-btn-primary:hover {
319
+ background: var(--color-primary-hover);
320
+ border-color: var(--color-primary-hover);
321
+ transform: translateY(-1px);
322
+ box-shadow: 0 4px 12px rgba(0, 88, 190, 0.3);
323
+ }
324
+ .adminforge-btn-secondary {
325
+ background: var(--color-surface);
326
+ color: var(--color-text);
327
+ }
328
+ .adminforge-btn-danger {
329
+ background: var(--color-danger);
330
+ color: #fff;
331
+ }
332
+ .adminforge-btn-block {
333
+ width: 100%;
334
+ }
335
+ .adminforge-btn-icon {
336
+ display: inline-flex;
337
+ align-items: center;
338
+ justify-content: center;
339
+ width: 32px;
340
+ height: 32px;
341
+ border-radius: 6px;
342
+ border: none;
343
+ background: transparent;
344
+ color: #94a3b8;
345
+ cursor: pointer;
346
+ transition: all 0.2s cubic-bezier(0.4, 0, 0.2, 1);
347
+ padding: 0;
348
+ text-decoration: none;
349
+ }
350
+ .adminforge-btn-icon:hover {
351
+ background: #f1f5f9;
352
+ color: var(--color-primary);
353
+ transform: scale(1.1);
354
+ }
355
+ .adminforge-btn-icon-danger {
356
+ color: var(--color-danger);
357
+ }
358
+ .adminforge-btn-icon-danger:hover {
359
+ background: #fff1f2;
360
+ color: var(--color-danger);
361
+ }
362
+ .adminforge-table-wrapper {
363
+ background: var(--color-surface);
364
+ border: 1px solid var(--color-border);
365
+ border-radius: var(--radius-lg);
366
+ box-shadow: var(--shadow-sm);
367
+ overflow-x: auto;
368
+ max-width: 100%;
369
+ }
370
+ .adminforge-collection-page {
371
+ display: flex;
372
+ flex-direction: column;
373
+ gap: 0;
374
+ max-width: 100%;
375
+ }
376
+ .adminforge-table {
377
+ width: 100%;
378
+ border-collapse: collapse;
379
+ }
380
+ .adminforge-table th {
381
+ text-align: left;
382
+ padding: 14px 20px;
383
+ font-size: 12px;
384
+ font-weight: 600;
385
+ text-transform: uppercase;
386
+ letter-spacing: 0.05em;
387
+ color: var(--color-text-secondary);
388
+ background: #f8fafc;
389
+ border-bottom: 1px solid var(--color-border);
390
+ }
391
+ .adminforge-table td {
392
+ padding: 16px 20px;
393
+ font-size: 14px;
394
+ border-bottom: 1px solid var(--color-border);
395
+ color: var(--color-text);
396
+ }
397
+ .adminforge-table tr:last-child td {
398
+ border-bottom: none;
399
+ }
400
+ .adminforge-table tr:hover td {
401
+ background: #fcfdfe;
402
+ }
403
+ .adminforge-form {
404
+ background: var(--color-surface);
405
+ border: 1px solid var(--color-border);
406
+ border-radius: var(--radius-lg);
407
+ padding: 32px;
408
+ max-width: 800px;
409
+ box-shadow: var(--shadow-sm);
410
+ }
411
+ .adminforge-field {
412
+ margin-bottom: 24px;
413
+ }
414
+ .adminforge-field label {
415
+ display: block;
416
+ font-size: 14px;
417
+ font-weight: 600;
418
+ margin-bottom: 8px;
419
+ color: var(--color-text);
420
+ }
421
+ .adminforge-input {
422
+ width: 100%;
423
+ height: 42px;
424
+ padding: 0 16px;
425
+ font-size: 14px;
426
+ border: 1px solid var(--color-border);
427
+ border-radius: var(--radius-md);
428
+ background: var(--color-surface);
429
+ color: var(--color-text);
430
+ transition: all 0.2s;
431
+ font-family: inherit;
432
+ }
433
+ .adminforge-input:focus {
434
+ outline: none;
435
+ border-color: var(--color-primary);
436
+ box-shadow: 0 0 0 4px rgba(0, 88, 190, 0.1);
437
+ }
438
+ .adminforge-textarea {
439
+ min-height: 200px;
440
+ padding: 12px 16px;
441
+ resize: vertical;
442
+ }
443
+ .adminforge-field-checkbox {
444
+ display: flex;
445
+ align-items: center;
446
+ }
447
+ .adminforge-field-checkbox label {
448
+ display: flex;
449
+ align-items: center;
450
+ gap: 10px;
451
+ cursor: pointer;
452
+ margin-bottom: 0;
453
+ }
454
+ .adminforge-field-checkbox input[type=checkbox] {
455
+ width: 18px;
456
+ height: 18px;
457
+ cursor: pointer;
458
+ accent-color: var(--color-primary);
459
+ }
460
+ .adminforge-form-actions {
461
+ margin-top: 32px;
462
+ padding-top: 24px;
463
+ border-top: 1px solid var(--color-border);
464
+ display: flex;
465
+ justify-content: flex-end;
466
+ }
467
+ .adminforge-login-page {
468
+ display: flex;
469
+ align-items: center;
470
+ justify-content: center;
471
+ min-height: 100vh;
472
+ background:
473
+ linear-gradient(
474
+ 135deg,
475
+ #f1f5f9 0%,
476
+ #e2e8f0 100%);
477
+ padding: 20px;
478
+ }
479
+ .adminforge-login-card {
480
+ background: var(--color-surface);
481
+ border: 1px solid var(--glass-border);
482
+ border-radius: var(--radius-lg);
483
+ padding: 48px;
484
+ width: 100%;
485
+ max-width: 440px;
486
+ box-shadow: 0 25px 50px -12px rgba(0, 0, 0, 0.1);
487
+ backdrop-filter: blur(8px);
488
+ }
489
+ .adminforge-login-card h1 {
490
+ font-size: 28px;
491
+ font-weight: 800;
492
+ text-align: center;
493
+ margin-bottom: 8px;
494
+ letter-spacing: -0.03em;
495
+ color: var(--color-primary);
496
+ }
497
+ .adminforge-login-subtitle {
498
+ text-align: center;
499
+ color: var(--color-text-secondary);
500
+ font-size: 15px;
501
+ margin-bottom: 32px;
502
+ }
503
+ .adminforge-form-error {
504
+ background: #fef2f2;
505
+ color: var(--color-danger);
506
+ border: 1px solid #fee2e2;
507
+ border-radius: var(--radius-md);
508
+ padding: 12px 16px;
509
+ font-size: 13px;
510
+ font-weight: 500;
511
+ margin-bottom: 24px;
512
+ }
513
+ .adminforge-field-err {
514
+ display: block;
515
+ color: var(--color-danger);
516
+ font-size: 12px;
517
+ margin-top: 4px;
518
+ }
519
+ .adminforge-input-error {
520
+ border-color: var(--color-danger) !important;
521
+ }
522
+ .adminforge-search {
523
+ margin-bottom: 16px;
524
+ }
525
+ .adminforge-search-input {
526
+ width: 100%;
527
+ max-width: 400px;
528
+ padding: 8px 12px;
529
+ font-size: 14px;
530
+ border: 1px solid var(--color-border);
531
+ border-radius: 6px;
532
+ background: var(--color-surface);
533
+ }
534
+ .adminforge-search-input:focus {
535
+ outline: none;
536
+ border-color: var(--color-primary);
537
+ box-shadow: 0 0 0 3px rgba(59, 130, 246, 0.1);
538
+ }
539
+ .adminforge-loading {
540
+ display: flex;
541
+ align-items: center;
542
+ justify-content: center;
543
+ min-height: 200px;
544
+ color: var(--color-text-secondary);
545
+ font-size: 14px;
546
+ }
547
+ .adminforge-login-error {
548
+ background: #fef2f2;
549
+ color: var(--color-danger);
550
+ border: 1px solid #fecaca;
551
+ border-radius: 6px;
552
+ padding: 8px 12px;
553
+ font-size: 13px;
554
+ margin-bottom: 16px;
555
+ }
556
+ .adminforge-editor {
557
+ border: 1px solid var(--color-border);
558
+ border-radius: var(--radius-md);
559
+ overflow: hidden;
560
+ background: #fff;
561
+ transition: all 0.2s cubic-bezier(0.4, 0, 0.2, 1);
562
+ box-shadow: var(--shadow-sm);
563
+ }
564
+ .adminforge-editor:focus-within {
565
+ border-color: var(--color-primary);
566
+ box-shadow: 0 0 0 4px rgba(0, 88, 190, 0.08), 0 4px 6px -1px rgba(0, 0, 0, 0.1);
567
+ }
568
+ .adminforge-editor-toolbar {
569
+ display: flex;
570
+ align-items: center;
571
+ flex-wrap: wrap;
572
+ padding: 6px;
573
+ background: #f8fafc;
574
+ border-bottom: 1px solid var(--color-border);
575
+ gap: 4px;
576
+ }
577
+ .adminforge-editor-toolbar-group {
578
+ display: flex;
579
+ align-items: center;
580
+ gap: 2px;
581
+ }
582
+ .adminforge-editor-toolbar-separator {
583
+ width: 1px;
584
+ height: 20px;
585
+ background: var(--color-border);
586
+ margin: 0 4px;
587
+ }
588
+ .adminforge-editor-btn {
589
+ display: inline-flex;
590
+ align-items: center;
591
+ justify-content: center;
592
+ width: 32px;
593
+ height: 32px;
594
+ border: 1px solid transparent;
595
+ border-radius: 4px;
596
+ background: transparent;
597
+ color: #64748b;
598
+ cursor: pointer;
599
+ transition: all 0.1s;
600
+ }
601
+ .adminforge-editor-btn:hover:not(:disabled) {
602
+ background: #e2e8f0;
603
+ color: #1e293b;
604
+ }
605
+ .adminforge-editor-btn:disabled {
606
+ opacity: 0.3;
607
+ cursor: not-allowed;
608
+ }
609
+ .adminforge-editor-btn.active {
610
+ background: #e0f2fe;
611
+ color: #0369a1;
612
+ border-color: #bae6fd;
613
+ }
614
+ .adminforge-editor-bubble-menu {
615
+ display: flex;
616
+ background: #1e293b;
617
+ padding: 4px;
618
+ border-radius: 8px;
619
+ box-shadow: 0 10px 15px -3px rgba(0, 0, 0, 0.2);
620
+ gap: 2px;
621
+ animation: fadeIn 0.1s ease-out;
622
+ }
623
+ @keyframes fadeIn {
624
+ from {
625
+ opacity: 0;
626
+ transform: translateY(5px);
627
+ }
628
+ to {
629
+ opacity: 1;
630
+ transform: translateY(0);
631
+ }
632
+ }
633
+ .adminforge-editor-bubble-menu .adminforge-editor-btn {
634
+ color: #cbd5e1;
635
+ }
636
+ .adminforge-editor-bubble-menu .adminforge-editor-btn:hover {
637
+ background: rgba(255, 255, 255, 0.1);
638
+ color: #fff;
639
+ }
640
+ .adminforge-editor-bubble-menu .adminforge-editor-btn.active {
641
+ background: var(--color-primary);
642
+ color: #fff;
643
+ border-color: transparent;
644
+ }
645
+ .adminforge-editor-content {
646
+ padding: 24px;
647
+ min-height: 350px;
648
+ }
649
+ .adminforge-editor-content .ProseMirror {
650
+ outline: none;
651
+ min-height: 300px;
652
+ font-size: 16px;
653
+ line-height: 1.7;
654
+ color: #1e293b;
655
+ }
656
+ .adminforge-editor-content .ProseMirror p.is-editor-empty:first-child::before {
657
+ content: attr(data-placeholder);
658
+ float: left;
659
+ color: #adb5bd;
660
+ pointer-events: none;
661
+ height: 0;
662
+ }
663
+ .adminforge-editor-content .ProseMirror h1 {
664
+ font-size: 2.25em;
665
+ font-weight: 800;
666
+ margin-bottom: 0.5em;
667
+ }
668
+ .adminforge-editor-content .ProseMirror h2 {
669
+ font-size: 1.5em;
670
+ font-weight: 700;
671
+ margin-top: 1.5em;
672
+ margin-bottom: 0.5em;
673
+ }
674
+ .adminforge-editor-content .ProseMirror h3 {
675
+ font-size: 1.25em;
676
+ font-weight: 600;
677
+ margin-top: 1.2em;
678
+ margin-bottom: 0.4em;
679
+ }
680
+ .adminforge-editor-content .ProseMirror ul,
681
+ .adminforge-editor-content .ProseMirror ol {
682
+ padding-left: 1.5em;
683
+ margin-bottom: 1em;
684
+ }
685
+ .adminforge-editor-content .ProseMirror blockquote {
686
+ border-left: 4px solid var(--color-primary);
687
+ padding-left: 1em;
688
+ margin-left: 0;
689
+ color: #64748b;
690
+ font-style: italic;
691
+ }
692
+ .adminforge-editor-content .ProseMirror pre {
693
+ background: #1e293b;
694
+ color: #f8fafc;
695
+ padding: 1em;
696
+ border-radius: 8px;
697
+ font-family:
698
+ "JetBrains Mono",
699
+ "Fira Code",
700
+ monospace;
701
+ font-size: 0.9em;
702
+ overflow-x: auto;
703
+ }
704
+ .adminforge-editor-content .ProseMirror code {
705
+ background: #f1f5f9;
706
+ color: #0f172a;
707
+ padding: 0.2em 0.4em;
708
+ border-radius: 4px;
709
+ font-size: 0.9em;
710
+ }
711
+ .adminforge-editor-content .ProseMirror a {
712
+ color: var(--color-primary);
713
+ text-decoration: underline;
714
+ cursor: pointer;
715
+ }
716
+ .adminforge-editor-content .ProseMirror hr {
717
+ border: none;
718
+ border-top: 2px solid var(--color-border);
719
+ margin: 2em 0;
720
+ }
721
+ .adminforge-editor-content .ProseMirror mark {
722
+ background-color: #fef08a;
723
+ padding: 0 0.2em;
724
+ border-radius: 2px;
725
+ }
726
+ .adminforge-editor-content .ProseMirror ul[data-type=taskList] {
727
+ list-style: none;
728
+ padding: 0;
729
+ }
730
+ .adminforge-editor-content .ProseMirror ul[data-type=taskList] li {
731
+ display: flex;
732
+ align-items: flex-start;
733
+ gap: 8px;
734
+ margin-bottom: 0.5em;
735
+ }
736
+ .adminforge-editor-content .ProseMirror ul[data-type=taskList] input[type=checkbox] {
737
+ margin-top: 0.3em;
738
+ cursor: pointer;
739
+ }
740
+ .adminforge-image-upload {
741
+ display: flex;
742
+ align-items: flex-start;
743
+ gap: 20px;
744
+ margin-top: 8px;
745
+ padding: 16px;
746
+ border: 2px dashed var(--color-border);
747
+ border-radius: var(--radius-lg);
748
+ background: #fcfdfe;
749
+ }
750
+ .adminforge-image-preview {
751
+ width: 160px;
752
+ height: 100px;
753
+ object-fit: cover;
754
+ border-radius: var(--radius-md);
755
+ box-shadow: var(--shadow-sm);
756
+ background: #eee;
757
+ }
758
+ .adminforge-image-upload-info {
759
+ display: flex;
760
+ flex-direction: column;
761
+ gap: 8px;
762
+ }
763
+ /*# sourceMappingURL=styles.css.map */