@bendyline/docblocks-react 0.1.0

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 (104) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +70 -0
  3. package/dist/AppMenu/AppMenu.d.ts +11 -0
  4. package/dist/AppMenu/AppMenu.d.ts.map +1 -0
  5. package/dist/AppMenu/AppMenu.js +27 -0
  6. package/dist/AppMenu/AppMenu.js.map +1 -0
  7. package/dist/AppMenu/index.d.ts +3 -0
  8. package/dist/AppMenu/index.d.ts.map +1 -0
  9. package/dist/AppMenu/index.js +2 -0
  10. package/dist/AppMenu/index.js.map +1 -0
  11. package/dist/DocBlocksShell/DocBlocksShell.d.ts +16 -0
  12. package/dist/DocBlocksShell/DocBlocksShell.d.ts.map +1 -0
  13. package/dist/DocBlocksShell/DocBlocksShell.js +487 -0
  14. package/dist/DocBlocksShell/DocBlocksShell.js.map +1 -0
  15. package/dist/DocBlocksShell/index.d.ts +3 -0
  16. package/dist/DocBlocksShell/index.d.ts.map +1 -0
  17. package/dist/DocBlocksShell/index.js +2 -0
  18. package/dist/DocBlocksShell/index.js.map +1 -0
  19. package/dist/Export/ExportDialog.d.ts +16 -0
  20. package/dist/Export/ExportDialog.d.ts.map +1 -0
  21. package/dist/Export/ExportDialog.js +42 -0
  22. package/dist/Export/ExportDialog.js.map +1 -0
  23. package/dist/Export/ExportToolbarControls.d.ts +17 -0
  24. package/dist/Export/ExportToolbarControls.d.ts.map +1 -0
  25. package/dist/Export/ExportToolbarControls.js +109 -0
  26. package/dist/Export/ExportToolbarControls.js.map +1 -0
  27. package/dist/Export/export-options.d.ts +18 -0
  28. package/dist/Export/export-options.d.ts.map +1 -0
  29. package/dist/Export/export-options.js +44 -0
  30. package/dist/Export/export-options.js.map +1 -0
  31. package/dist/Export/index.d.ts +6 -0
  32. package/dist/Export/index.d.ts.map +1 -0
  33. package/dist/Export/index.js +3 -0
  34. package/dist/Export/index.js.map +1 -0
  35. package/dist/Export/run-export.d.ts +8 -0
  36. package/dist/Export/run-export.d.ts.map +1 -0
  37. package/dist/Export/run-export.js +208 -0
  38. package/dist/Export/run-export.js.map +1 -0
  39. package/dist/FileExplorer/FileExplorer.d.ts +21 -0
  40. package/dist/FileExplorer/FileExplorer.d.ts.map +1 -0
  41. package/dist/FileExplorer/FileExplorer.js +125 -0
  42. package/dist/FileExplorer/FileExplorer.js.map +1 -0
  43. package/dist/FileExplorer/FileTreeNode.d.ts +18 -0
  44. package/dist/FileExplorer/FileTreeNode.d.ts.map +1 -0
  45. package/dist/FileExplorer/FileTreeNode.js +86 -0
  46. package/dist/FileExplorer/FileTreeNode.js.map +1 -0
  47. package/dist/FileExplorer/index.d.ts +6 -0
  48. package/dist/FileExplorer/index.d.ts.map +1 -0
  49. package/dist/FileExplorer/index.js +4 -0
  50. package/dist/FileExplorer/index.js.map +1 -0
  51. package/dist/FileExplorer/useFileTree.d.ts +35 -0
  52. package/dist/FileExplorer/useFileTree.d.ts.map +1 -0
  53. package/dist/FileExplorer/useFileTree.js +124 -0
  54. package/dist/FileExplorer/useFileTree.js.map +1 -0
  55. package/dist/WorkspacePicker/WorkspacePicker.d.ts +17 -0
  56. package/dist/WorkspacePicker/WorkspacePicker.d.ts.map +1 -0
  57. package/dist/WorkspacePicker/WorkspacePicker.js +57 -0
  58. package/dist/WorkspacePicker/WorkspacePicker.js.map +1 -0
  59. package/dist/WorkspacePicker/WorkspaceSettingsButton.d.ts +10 -0
  60. package/dist/WorkspacePicker/WorkspaceSettingsButton.d.ts.map +1 -0
  61. package/dist/WorkspacePicker/WorkspaceSettingsButton.js +27 -0
  62. package/dist/WorkspacePicker/WorkspaceSettingsButton.js.map +1 -0
  63. package/dist/WorkspacePicker/index.d.ts +3 -0
  64. package/dist/WorkspacePicker/index.d.ts.map +1 -0
  65. package/dist/WorkspacePicker/index.js +2 -0
  66. package/dist/WorkspacePicker/index.js.map +1 -0
  67. package/dist/hooks/index.d.ts +2 -0
  68. package/dist/hooks/index.d.ts.map +1 -0
  69. package/dist/hooks/index.js +2 -0
  70. package/dist/hooks/index.js.map +1 -0
  71. package/dist/hooks/useAutoSave.d.ts +9 -0
  72. package/dist/hooks/useAutoSave.d.ts.map +1 -0
  73. package/dist/hooks/useAutoSave.js +48 -0
  74. package/dist/hooks/useAutoSave.js.map +1 -0
  75. package/dist/icons.d.ts +6 -0
  76. package/dist/icons.d.ts.map +1 -0
  77. package/dist/icons.js +24 -0
  78. package/dist/icons.js.map +1 -0
  79. package/dist/index.d.ts +20 -0
  80. package/dist/index.d.ts.map +1 -0
  81. package/dist/index.js +19 -0
  82. package/dist/index.js.map +1 -0
  83. package/package.json +65 -0
  84. package/src/AppMenu/AppMenu.tsx +124 -0
  85. package/src/AppMenu/index.ts +2 -0
  86. package/src/DocBlocksShell/DocBlocksShell.tsx +662 -0
  87. package/src/DocBlocksShell/index.ts +2 -0
  88. package/src/Export/ExportDialog.tsx +173 -0
  89. package/src/Export/ExportToolbarControls.tsx +183 -0
  90. package/src/Export/export-options.ts +57 -0
  91. package/src/Export/index.ts +5 -0
  92. package/src/Export/run-export.ts +238 -0
  93. package/src/FileExplorer/FileExplorer.tsx +260 -0
  94. package/src/FileExplorer/FileTreeNode.tsx +172 -0
  95. package/src/FileExplorer/index.ts +5 -0
  96. package/src/FileExplorer/useFileTree.ts +178 -0
  97. package/src/WorkspacePicker/WorkspacePicker.tsx +126 -0
  98. package/src/WorkspacePicker/WorkspaceSettingsButton.tsx +79 -0
  99. package/src/WorkspacePicker/index.ts +2 -0
  100. package/src/hooks/index.ts +1 -0
  101. package/src/hooks/useAutoSave.ts +58 -0
  102. package/src/icons.tsx +60 -0
  103. package/src/index.ts +31 -0
  104. package/src/styles/docblocks.css +961 -0
@@ -0,0 +1,961 @@
1
+ /* ── DocBlocks Styles ─────────────────────────────────────────── */
2
+
3
+ /* ── Theme Tokens ────────────────────────────────────────────── */
4
+
5
+ .db-shell {
6
+ --db-bg: #ffffff;
7
+ --db-bg-subtle: #f9fafb;
8
+ --db-bg-hover: #f3f4f6;
9
+ --db-bg-selected: #dbeafe;
10
+ --db-bg-selected-hover: #bfdbfe;
11
+ --db-border: #e5e7eb;
12
+ --db-text: #1f2937;
13
+ --db-text-secondary: #374151;
14
+ --db-text-muted: #6b7280;
15
+ --db-text-placeholder: #9ca3af;
16
+ --db-accent: #3b82f6;
17
+ --db-accent-hover: #2563eb;
18
+ --db-input-border: #93c5fd;
19
+ --db-danger: #dc2626;
20
+ --db-danger-bg: #fef2f2;
21
+ --db-shadow: rgba(0, 0, 0, 0.12);
22
+ }
23
+
24
+ .db-shell[data-theme='dark'] {
25
+ --db-bg: #0f172a;
26
+ --db-bg-subtle: #1e293b;
27
+ --db-bg-hover: #334155;
28
+ --db-bg-selected: #1e3a5f;
29
+ --db-bg-selected-hover: #1e4a7f;
30
+ --db-border: #334155;
31
+ --db-text: #e5e7eb;
32
+ --db-text-secondary: #cbd5e1;
33
+ --db-text-muted: #94a3b8;
34
+ --db-text-placeholder: #64748b;
35
+ --db-accent: #3b82f6;
36
+ --db-accent-hover: #60a5fa;
37
+ --db-input-border: #3b82f6;
38
+ --db-danger: #f87171;
39
+ --db-danger-bg: #1c1917;
40
+ --db-shadow: rgba(0, 0, 0, 0.4);
41
+ }
42
+
43
+ @media (prefers-color-scheme: dark) {
44
+ .db-shell:not([data-theme='light']) {
45
+ --db-bg: #0f172a;
46
+ --db-bg-subtle: #1e293b;
47
+ --db-bg-hover: #334155;
48
+ --db-bg-selected: #1e3a5f;
49
+ --db-bg-selected-hover: #1e4a7f;
50
+ --db-border: #334155;
51
+ --db-text: #e5e7eb;
52
+ --db-text-secondary: #cbd5e1;
53
+ --db-text-muted: #94a3b8;
54
+ --db-text-placeholder: #64748b;
55
+ --db-accent: #3b82f6;
56
+ --db-accent-hover: #60a5fa;
57
+ --db-input-border: #3b82f6;
58
+ --db-danger: #f87171;
59
+ --db-danger-bg: #1c1917;
60
+ --db-shadow: rgba(0, 0, 0, 0.4);
61
+ }
62
+ }
63
+
64
+ /* ── File Explorer ───────────────────────────────────────────── */
65
+
66
+ .db-file-explorer {
67
+ display: flex;
68
+ flex-direction: column;
69
+ height: 100%;
70
+ overflow: hidden;
71
+ font-size: 13px;
72
+ position: relative;
73
+ }
74
+
75
+ .db-file-explorer--drop-active::after {
76
+ content: 'Drop to import';
77
+ position: absolute;
78
+ inset: 0;
79
+ display: flex;
80
+ align-items: center;
81
+ justify-content: center;
82
+ background: rgba(37, 99, 235, 0.08);
83
+ border: 2px dashed #2563eb;
84
+ border-radius: 6px;
85
+ color: #2563eb;
86
+ font-size: 13px;
87
+ font-weight: 600;
88
+ z-index: 10;
89
+ pointer-events: none;
90
+ }
91
+
92
+ .db-explorer-toolbar {
93
+ display: flex;
94
+ align-items: center;
95
+ justify-content: space-between;
96
+ padding: 6px 8px;
97
+ border-bottom: 1px solid var(--db-border);
98
+ flex-shrink: 0;
99
+ }
100
+
101
+ .db-explorer-title {
102
+ font-weight: 600;
103
+ font-size: 12px;
104
+ text-transform: uppercase;
105
+ letter-spacing: 0.03em;
106
+ color: var(--db-text-muted);
107
+ }
108
+
109
+ .db-explorer-actions {
110
+ display: flex;
111
+ gap: 2px;
112
+ }
113
+
114
+ .db-explorer-btn {
115
+ background: none;
116
+ border: 1px solid transparent;
117
+ border-radius: 3px;
118
+ cursor: pointer;
119
+ padding: 3px;
120
+ font-size: 12px;
121
+ color: var(--db-text-muted);
122
+ display: flex;
123
+ align-items: center;
124
+ justify-content: center;
125
+ }
126
+
127
+ .db-explorer-btn:hover {
128
+ background: var(--db-bg-hover);
129
+ border-color: var(--db-border);
130
+ color: var(--db-text-secondary);
131
+ }
132
+
133
+ /* ── New Item Input ──────────────────────────────────────────── */
134
+
135
+ .db-new-item {
136
+ padding: 4px 8px;
137
+ border-bottom: 1px solid var(--db-border);
138
+ }
139
+
140
+ .db-new-item-row {
141
+ display: flex;
142
+ align-items: center;
143
+ gap: 4px;
144
+ }
145
+
146
+ .db-new-item-input {
147
+ flex: 1;
148
+ min-width: 0;
149
+ box-sizing: border-box;
150
+ padding: 3px 6px;
151
+ font-size: 13px;
152
+ background: var(--db-bg);
153
+ color: var(--db-text);
154
+ border: 1px solid var(--db-input-border);
155
+ border-radius: 3px;
156
+ outline: none;
157
+ }
158
+
159
+ .db-new-item-suffix {
160
+ font-size: 12px;
161
+ color: var(--db-text-muted);
162
+ flex-shrink: 0;
163
+ }
164
+
165
+ .db-new-item-add {
166
+ flex-shrink: 0;
167
+ padding: 3px 8px;
168
+ font-size: 12px;
169
+ background: var(--db-accent);
170
+ color: #fff;
171
+ border: none;
172
+ border-radius: 3px;
173
+ cursor: pointer;
174
+ }
175
+
176
+ .db-new-item-add:hover {
177
+ background: var(--db-accent-hover);
178
+ }
179
+
180
+ /* ── Tree ────────────────────────────────────────────────────── */
181
+
182
+ .db-tree {
183
+ flex: 1;
184
+ overflow-y: auto;
185
+ padding: 2px 0;
186
+ }
187
+
188
+ .db-tree-loading,
189
+ .db-tree-empty {
190
+ padding: 12px 16px;
191
+ color: var(--db-text-placeholder);
192
+ font-size: 12px;
193
+ }
194
+
195
+ .db-tree-row {
196
+ display: flex;
197
+ align-items: center;
198
+ padding: 6px 4px;
199
+ cursor: pointer;
200
+ white-space: nowrap;
201
+ user-select: none;
202
+ color: var(--db-text);
203
+ }
204
+
205
+ .db-tree-row:hover {
206
+ background: var(--db-bg-hover);
207
+ }
208
+
209
+ .db-tree-row--selected {
210
+ background: var(--db-bg-selected);
211
+ }
212
+
213
+ .db-tree-row--selected:hover {
214
+ background: var(--db-bg-selected-hover);
215
+ }
216
+
217
+ .db-tree-icon {
218
+ width: 16px;
219
+ flex-shrink: 0;
220
+ text-align: center;
221
+ font-size: 10px;
222
+ color: var(--db-text-placeholder);
223
+ }
224
+
225
+ .db-tree-label {
226
+ flex: 1;
227
+ overflow: hidden;
228
+ text-overflow: ellipsis;
229
+ }
230
+
231
+ .db-tree-rename-input {
232
+ flex: 1;
233
+ padding: 1px 4px;
234
+ font-size: 13px;
235
+ background: var(--db-bg);
236
+ color: var(--db-text);
237
+ border: 1px solid var(--db-input-border);
238
+ border-radius: 2px;
239
+ outline: none;
240
+ }
241
+
242
+ /* ── Context Menu ────────────────────────────────────────────── */
243
+
244
+ .db-tree-node {
245
+ position: relative;
246
+ }
247
+
248
+ .db-tree-context {
249
+ position: absolute;
250
+ z-index: 50;
251
+ background: var(--db-bg);
252
+ border: 1px solid var(--db-border);
253
+ border-radius: 4px;
254
+ box-shadow: 0 4px 12px var(--db-shadow);
255
+ padding: 4px 0;
256
+ min-width: 120px;
257
+ }
258
+
259
+ .db-tree-context-item {
260
+ display: block;
261
+ width: 100%;
262
+ padding: 6px 12px;
263
+ font-size: 13px;
264
+ text-align: left;
265
+ background: none;
266
+ border: none;
267
+ cursor: pointer;
268
+ color: var(--db-text-secondary);
269
+ }
270
+
271
+ .db-tree-context-item:hover {
272
+ background: var(--db-bg-hover);
273
+ }
274
+
275
+ .db-tree-context-item--danger {
276
+ color: var(--db-danger);
277
+ }
278
+
279
+ .db-tree-context-item--danger:hover {
280
+ background: var(--db-danger-bg);
281
+ }
282
+
283
+ /* ── Workspace Picker ────────────────────────────────────────── */
284
+
285
+ .db-workspace-picker {
286
+ position: relative;
287
+ flex: 1;
288
+ min-width: 0;
289
+ }
290
+
291
+ .db-workspace-picker-btn {
292
+ display: flex;
293
+ align-items: center;
294
+ justify-content: space-between;
295
+ width: 100%;
296
+ padding: 6px 8px;
297
+ font-size: 13px;
298
+ background: var(--db-bg-subtle);
299
+ border: 1px solid var(--db-border);
300
+ border-radius: 4px;
301
+ cursor: pointer;
302
+ color: var(--db-text-secondary);
303
+ }
304
+
305
+ .db-workspace-picker-btn:hover {
306
+ background: var(--db-bg-hover);
307
+ }
308
+
309
+ .db-workspace-picker-caret {
310
+ font-size: 10px;
311
+ margin-left: 4px;
312
+ color: var(--db-text-placeholder);
313
+ }
314
+
315
+ .db-workspace-dropdown {
316
+ position: absolute;
317
+ left: 8px;
318
+ right: 8px;
319
+ top: 100%;
320
+ z-index: 60;
321
+ background: var(--db-bg);
322
+ border: 1px solid var(--db-border);
323
+ border-radius: 4px;
324
+ box-shadow: 0 4px 12px var(--db-shadow);
325
+ padding: 4px 0;
326
+ }
327
+
328
+ .db-workspace-dropdown-item {
329
+ display: flex;
330
+ align-items: center;
331
+ justify-content: space-between;
332
+ width: 100%;
333
+ padding: 6px 12px;
334
+ font-size: 13px;
335
+ text-align: left;
336
+ background: none;
337
+ border: none;
338
+ cursor: pointer;
339
+ color: var(--db-text-secondary);
340
+ }
341
+
342
+ .db-workspace-dropdown-item:hover {
343
+ background: var(--db-bg-hover);
344
+ }
345
+
346
+ .db-workspace-dropdown-item--active {
347
+ background: var(--db-bg-selected);
348
+ font-weight: 500;
349
+ }
350
+
351
+ .db-workspace-type {
352
+ font-size: 11px;
353
+ color: var(--db-text-placeholder);
354
+ }
355
+
356
+ .db-workspace-dropdown-divider {
357
+ height: 1px;
358
+ background: var(--db-border);
359
+ margin: 4px 0;
360
+ }
361
+
362
+ /* ── App Menu ────────────────────────────────────────────────── */
363
+
364
+ .db-app-menu {
365
+ position: relative;
366
+ flex-shrink: 0;
367
+ }
368
+
369
+ .db-app-menu-btn {
370
+ display: flex;
371
+ align-items: center;
372
+ gap: 4px;
373
+ padding: 6px 10px;
374
+ font-size: 13px;
375
+ font-weight: 600;
376
+ background: none;
377
+ border: none;
378
+ cursor: pointer;
379
+ color: var(--db-text);
380
+ border-radius: 4px;
381
+ }
382
+
383
+ .db-app-menu-btn:hover {
384
+ background: var(--db-bg-hover);
385
+ }
386
+
387
+ .db-app-menu-logo {
388
+ height: 20px;
389
+ width: auto;
390
+ display: block;
391
+ }
392
+
393
+ .db-app-menu-caret {
394
+ font-size: 18px;
395
+ color: var(--db-text-muted);
396
+ display: inline-block;
397
+ transition: transform 0.15s;
398
+ }
399
+
400
+ .db-app-menu-caret--open {
401
+ transform: rotate(180deg);
402
+ }
403
+
404
+ .db-app-menu-dropdown {
405
+ position: absolute;
406
+ top: 100%;
407
+ left: 0;
408
+ z-index: 70;
409
+ min-width: 200px;
410
+ background: var(--db-bg);
411
+ border: 1px solid var(--db-border);
412
+ border-radius: 4px;
413
+ box-shadow: 0 4px 12px var(--db-shadow);
414
+ padding: 4px 0;
415
+ }
416
+
417
+ .db-app-menu-item {
418
+ display: block;
419
+ width: 100%;
420
+ padding: 6px 12px;
421
+ font-size: 13px;
422
+ text-align: left;
423
+ background: none;
424
+ border: none;
425
+ cursor: pointer;
426
+ color: var(--db-text-secondary);
427
+ text-decoration: none;
428
+ }
429
+
430
+ .db-app-menu-item:hover {
431
+ background: var(--db-bg-hover);
432
+ }
433
+
434
+ .db-app-menu-item--danger {
435
+ color: var(--db-danger);
436
+ }
437
+
438
+ .db-app-menu-item--danger:hover {
439
+ background: var(--db-danger-bg);
440
+ }
441
+
442
+ .db-app-menu-divider {
443
+ height: 1px;
444
+ background: var(--db-border);
445
+ margin: 4px 0;
446
+ }
447
+
448
+ /* ── Workspace Settings Button ───────────────────────────────── */
449
+
450
+ .db-ws-settings {
451
+ position: relative;
452
+ flex-shrink: 0;
453
+ }
454
+
455
+ .db-ws-settings-btn {
456
+ display: flex;
457
+ align-items: center;
458
+ justify-content: center;
459
+ width: 28px;
460
+ height: 28px;
461
+ border: none;
462
+ border-radius: 4px;
463
+ background: transparent;
464
+ color: var(--db-text-muted);
465
+ cursor: pointer;
466
+ transition:
467
+ background 0.12s,
468
+ color 0.12s;
469
+ }
470
+
471
+ .db-ws-settings-btn:hover {
472
+ background: var(--db-bg-hover);
473
+ color: var(--db-text);
474
+ }
475
+
476
+ .db-ws-settings-dropdown {
477
+ position: absolute;
478
+ top: 100%;
479
+ right: 0;
480
+ z-index: 100;
481
+ min-width: 200px;
482
+ background: var(--db-bg);
483
+ border: 1px solid var(--db-border);
484
+ border-radius: 6px;
485
+ box-shadow: 0 4px 12px var(--db-shadow);
486
+ padding: 4px 0;
487
+ margin-top: 2px;
488
+ }
489
+
490
+ .db-ws-settings-item {
491
+ display: block;
492
+ width: 100%;
493
+ padding: 8px 14px;
494
+ border: none;
495
+ background: transparent;
496
+ text-align: left;
497
+ font-size: 13px;
498
+ color: var(--db-text);
499
+ cursor: pointer;
500
+ }
501
+
502
+ .db-ws-settings-item:hover {
503
+ background: var(--db-bg-hover);
504
+ }
505
+
506
+ .db-ws-settings-item--danger {
507
+ color: var(--db-danger);
508
+ }
509
+
510
+ .db-ws-settings-item--danger:hover {
511
+ background: var(--db-danger-bg);
512
+ }
513
+
514
+ .db-ws-settings-divider {
515
+ height: 1px;
516
+ background: var(--db-border);
517
+ margin: 4px 0;
518
+ }
519
+
520
+ /* ── DocBlocks Shell ─────────────────────────────────────────── */
521
+
522
+ .db-shell {
523
+ display: flex;
524
+ flex-direction: column;
525
+ height: 100vh;
526
+ background: var(--db-bg);
527
+ color: var(--db-text);
528
+ font-family:
529
+ system-ui,
530
+ -apple-system,
531
+ BlinkMacSystemFont,
532
+ 'Segoe UI',
533
+ Roboto,
534
+ 'Helvetica Neue',
535
+ Arial,
536
+ sans-serif;
537
+ }
538
+
539
+ .db-shell-topbar {
540
+ display: flex;
541
+ align-items: center;
542
+ padding: 8px 16px;
543
+ border-bottom: 1px solid var(--db-border);
544
+ background: var(--db-bg-subtle);
545
+ flex-shrink: 0;
546
+ }
547
+
548
+ .db-shell-title {
549
+ font-weight: 600;
550
+ font-size: 14px;
551
+ }
552
+
553
+ .db-shell-sidebar {
554
+ width: 260px;
555
+ border-right: 1px solid var(--db-border);
556
+ display: flex;
557
+ flex-direction: column;
558
+ overflow: hidden;
559
+ flex-shrink: 0;
560
+ }
561
+
562
+ .db-shell-sidebar-header {
563
+ display: flex;
564
+ align-items: center;
565
+ border-bottom: 1px solid var(--db-border);
566
+ padding: 4px;
567
+ gap: 4px;
568
+ flex-shrink: 0;
569
+ min-height: 40px;
570
+ }
571
+
572
+ .db-shell-sidebar-footer {
573
+ padding: 8px 12px;
574
+ border-top: 1px solid var(--db-border);
575
+ flex-shrink: 0;
576
+ font-size: 11px;
577
+ }
578
+
579
+ .db-shell-sidebar-footer a {
580
+ color: var(--db-text-muted);
581
+ text-decoration: none;
582
+ }
583
+
584
+ .db-shell-sidebar-footer a:hover {
585
+ color: var(--db-text-secondary);
586
+ text-decoration: underline;
587
+ }
588
+
589
+ .db-shell-empty {
590
+ display: flex;
591
+ align-items: center;
592
+ justify-content: center;
593
+ height: 100%;
594
+ color: var(--db-text-placeholder);
595
+ font-size: 14px;
596
+ }
597
+
598
+ /* ── Mobile Layout ──────────────────────────────────────────── */
599
+
600
+ .db-shell--mobile .db-shell-sidebar {
601
+ width: 100%;
602
+ border-right: none;
603
+ }
604
+
605
+ .db-mobile-back {
606
+ display: flex;
607
+ align-items: center;
608
+ gap: 6px;
609
+ padding: 6px 10px;
610
+ border: none;
611
+ border-radius: 4px;
612
+ background: none;
613
+ color: var(--db-text-secondary);
614
+ font-size: 14px;
615
+ cursor: pointer;
616
+ flex-shrink: 0;
617
+ }
618
+
619
+ .db-mobile-back:hover {
620
+ background: var(--db-bg-hover);
621
+ }
622
+
623
+ .db-mobile-back-arrow {
624
+ font-size: 18px;
625
+ line-height: 1;
626
+ }
627
+
628
+ /* In folder/empty views, the back button sits as a standalone bar */
629
+ .db-folder-view > .db-mobile-back {
630
+ padding: 10px 12px;
631
+ border-bottom: 1px solid var(--db-border);
632
+ border-radius: 0;
633
+ background: var(--db-bg-subtle);
634
+ }
635
+
636
+ /* ── Dialog ───────────────────────────────────────────────────── */
637
+
638
+ .db-dialog-overlay {
639
+ position: fixed;
640
+ inset: 0;
641
+ z-index: 100;
642
+ display: flex;
643
+ align-items: center;
644
+ justify-content: center;
645
+ background: rgba(0, 0, 0, 0.4);
646
+ }
647
+
648
+ .db-dialog {
649
+ background: var(--db-bg);
650
+ border: 1px solid var(--db-border);
651
+ border-radius: 8px;
652
+ box-shadow: 0 8px 32px var(--db-shadow);
653
+ width: 380px;
654
+ max-width: 90vw;
655
+ }
656
+
657
+ .db-dialog-header {
658
+ display: flex;
659
+ align-items: center;
660
+ justify-content: space-between;
661
+ padding: 16px 20px 12px;
662
+ border-bottom: 1px solid var(--db-border);
663
+ }
664
+
665
+ .db-dialog-title {
666
+ margin: 0;
667
+ font-size: 16px;
668
+ font-weight: 600;
669
+ color: var(--db-text);
670
+ }
671
+
672
+ .db-dialog-close {
673
+ background: none;
674
+ border: none;
675
+ font-size: 20px;
676
+ line-height: 1;
677
+ cursor: pointer;
678
+ color: var(--db-text-muted);
679
+ padding: 2px 6px;
680
+ border-radius: 4px;
681
+ }
682
+
683
+ .db-dialog-close:hover {
684
+ background: var(--db-bg-hover);
685
+ color: var(--db-text);
686
+ }
687
+
688
+ .db-dialog-body {
689
+ padding: 16px 20px 20px;
690
+ font-size: 13px;
691
+ line-height: 1.6;
692
+ color: var(--db-text-secondary);
693
+ }
694
+
695
+ .db-dialog-body p {
696
+ margin: 0 0 12px;
697
+ }
698
+
699
+ .db-dialog-body p:last-child {
700
+ margin-bottom: 0;
701
+ }
702
+
703
+ .db-dialog-body a {
704
+ color: var(--db-accent);
705
+ text-decoration: none;
706
+ }
707
+
708
+ .db-dialog-body a:hover {
709
+ text-decoration: underline;
710
+ }
711
+
712
+ .db-dialog-links {
713
+ display: flex;
714
+ align-items: center;
715
+ gap: 6px;
716
+ }
717
+
718
+ .db-dialog-sep {
719
+ color: var(--db-text-placeholder);
720
+ }
721
+
722
+ /* ── Folder View ─────────────────────────────────────────────── */
723
+
724
+ .db-folder-view {
725
+ padding: 24px;
726
+ height: 100%;
727
+ overflow-y: auto;
728
+ }
729
+
730
+ .db-folder-view-header {
731
+ display: flex;
732
+ align-items: center;
733
+ gap: 8px;
734
+ margin-bottom: 16px;
735
+ padding-bottom: 12px;
736
+ border-bottom: 1px solid var(--db-border);
737
+ }
738
+
739
+ .db-folder-view-icon {
740
+ font-size: 20px;
741
+ }
742
+
743
+ .db-folder-view-path {
744
+ font-size: 16px;
745
+ font-weight: 600;
746
+ color: var(--db-text-secondary);
747
+ }
748
+
749
+ .db-folder-view-empty {
750
+ color: var(--db-text-placeholder);
751
+ font-size: 14px;
752
+ }
753
+
754
+ .db-folder-view-list {
755
+ list-style: none;
756
+ margin: 0;
757
+ padding: 0;
758
+ }
759
+
760
+ .db-folder-view-item {
761
+ display: flex;
762
+ align-items: center;
763
+ gap: 8px;
764
+ padding: 8px 12px;
765
+ border-radius: 4px;
766
+ cursor: pointer;
767
+ font-size: 14px;
768
+ color: var(--db-text-secondary);
769
+ }
770
+
771
+ .db-folder-view-item:hover {
772
+ background: var(--db-bg-hover);
773
+ }
774
+
775
+ .db-folder-view-item-icon {
776
+ font-size: 16px;
777
+ flex-shrink: 0;
778
+ }
779
+
780
+ /* ── Toolbar Image Button Override ─────────────────────────── */
781
+
782
+ /* Remove max-width so editor fills the available space */
783
+ .squisq-wysiwyg-editor {
784
+ max-width: none;
785
+ }
786
+
787
+ .squisq-toolbar {
788
+ min-height: 48px;
789
+ }
790
+
791
+ .squisq-toolbar-button[aria-label='Insert image'] {
792
+ font-size: 0;
793
+ background: no-repeat center / 18px
794
+ url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 18 18' fill='none' stroke='%23374151' stroke-width='1.4' stroke-linecap='round' stroke-linejoin='round'%3E%3Crect x='1.5' y='2.5' width='15' height='13' rx='1.5'/%3E%3Ccircle cx='5.5' cy='6.5' r='1.5'/%3E%3Cpath d='M1.5 13l4-4.5 3 3 2.5-3L16.5 13'/%3E%3C/svg%3E");
795
+ width: 32px;
796
+ height: 32px;
797
+ }
798
+
799
+ /* ── Toolbar Overflow Menu ──────────────────────────────────── */
800
+
801
+ .db-toolbar-menu {
802
+ position: relative;
803
+ }
804
+
805
+ .db-toolbar-menu-trigger {
806
+ display: flex;
807
+ align-items: center;
808
+ justify-content: center;
809
+ width: 28px;
810
+ height: 28px;
811
+ padding: 0;
812
+ font-size: 16px;
813
+ font-weight: 700;
814
+ letter-spacing: 1px;
815
+ line-height: 1;
816
+ border: 1px solid transparent;
817
+ border-radius: 4px;
818
+ cursor: pointer;
819
+ background: none;
820
+ color: var(--db-text-muted);
821
+ }
822
+
823
+ .db-toolbar-menu-trigger:hover {
824
+ background: var(--db-bg-hover);
825
+ border-color: var(--db-border);
826
+ color: var(--db-text-secondary);
827
+ }
828
+
829
+ .db-toolbar-menu-dropdown {
830
+ position: absolute;
831
+ right: 0;
832
+ top: 100%;
833
+ margin-top: 4px;
834
+ z-index: 70;
835
+ min-width: 200px;
836
+ background: var(--db-bg);
837
+ border: 1px solid var(--db-border);
838
+ border-radius: 4px;
839
+ box-shadow: 0 4px 12px var(--db-shadow);
840
+ padding: 4px 0;
841
+ }
842
+
843
+ .db-toolbar-menu-item {
844
+ display: block;
845
+ width: 100%;
846
+ padding: 6px 12px;
847
+ font-size: 13px;
848
+ text-align: left;
849
+ background: none;
850
+ border: none;
851
+ cursor: pointer;
852
+ color: var(--db-text-secondary);
853
+ white-space: nowrap;
854
+ }
855
+
856
+ .db-toolbar-menu-item:hover {
857
+ background: var(--db-bg-hover);
858
+ }
859
+
860
+ .db-toolbar-menu-item:disabled {
861
+ opacity: 0.5;
862
+ cursor: default;
863
+ }
864
+
865
+ .db-toolbar-menu-divider {
866
+ height: 1px;
867
+ background: var(--db-border);
868
+ margin: 4px 0;
869
+ }
870
+
871
+ /* ── Export Dialog ───────────────────────────────────────────── */
872
+
873
+ .db-export-dialog {
874
+ width: 420px;
875
+ }
876
+
877
+ .db-export-field {
878
+ margin-bottom: 14px;
879
+ }
880
+
881
+ .db-export-field:last-child {
882
+ margin-bottom: 0;
883
+ }
884
+
885
+ .db-export-label {
886
+ display: block;
887
+ font-size: 12px;
888
+ font-weight: 600;
889
+ color: var(--db-text-muted);
890
+ text-transform: uppercase;
891
+ letter-spacing: 0.03em;
892
+ margin-bottom: 4px;
893
+ }
894
+
895
+ .db-export-select {
896
+ display: block;
897
+ width: 100%;
898
+ padding: 6px 8px;
899
+ font-size: 13px;
900
+ background: var(--db-bg-subtle);
901
+ color: var(--db-text);
902
+ border: 1px solid var(--db-border);
903
+ border-radius: 4px;
904
+ outline: none;
905
+ cursor: pointer;
906
+ appearance: auto;
907
+ }
908
+
909
+ .db-export-select:focus {
910
+ border-color: var(--db-accent);
911
+ }
912
+
913
+ .db-export-hint {
914
+ display: block;
915
+ margin-top: 3px;
916
+ font-size: 11px;
917
+ color: var(--db-text-placeholder);
918
+ }
919
+
920
+ .db-export-footer {
921
+ display: flex;
922
+ justify-content: flex-end;
923
+ gap: 8px;
924
+ padding: 12px 20px 16px;
925
+ border-top: 1px solid var(--db-border);
926
+ }
927
+
928
+ .db-export-btn {
929
+ padding: 6px 16px;
930
+ font-size: 13px;
931
+ font-weight: 500;
932
+ border-radius: 4px;
933
+ cursor: pointer;
934
+ border: 1px solid transparent;
935
+ }
936
+
937
+ .db-export-btn:disabled {
938
+ opacity: 0.5;
939
+ cursor: default;
940
+ }
941
+
942
+ .db-export-btn--secondary {
943
+ background: var(--db-bg-subtle);
944
+ color: var(--db-text-secondary);
945
+ border-color: var(--db-border);
946
+ }
947
+
948
+ .db-export-btn--secondary:hover {
949
+ background: var(--db-bg-hover);
950
+ }
951
+
952
+ .db-export-btn--primary {
953
+ background: var(--db-accent);
954
+ color: #fff;
955
+ border-color: var(--db-accent);
956
+ }
957
+
958
+ .db-export-btn--primary:hover {
959
+ background: var(--db-accent-hover);
960
+ border-color: var(--db-accent-hover);
961
+ }