collabmd 0.1.31 → 0.1.33

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 (99) hide show
  1. package/dist/client/assets/{drawio-editor-B4sHHwWJ.js → drawio-editor-BMTwP5mD.js} +1 -1
  2. package/dist/client/assets/drawioEditor-D6clB5OH.js +2 -0
  3. package/dist/client/assets/{editor-session-BKHEYkbY.js → editor-session-Dzy_85Wp.js} +2 -2
  4. package/dist/client/assets/embedded-editor-base-CgEkjNYn.css +1 -0
  5. package/dist/client/assets/{excalidraw-editor-CHbeNZu6.js → excalidraw-editor-CAP9F8CB.js} +3 -3
  6. package/dist/client/assets/{excalidrawEditor-BhaTX2Ko.js → excalidrawEditor-DD4AvzYP.js} +2 -2
  7. package/dist/client/assets/exportDocument-BbkN85c4.css +1 -0
  8. package/dist/client/assets/index-BIt5EZXz.css +1 -0
  9. package/dist/client/assets/{index-kPgEYvEX.js → index-Czg_KL-i.js} +2 -2
  10. package/dist/client/assets/inter-cyrillic-ext-wght-normal-BOeWTOD4.woff2 +0 -0
  11. package/dist/client/assets/inter-cyrillic-wght-normal-DqGufNeO.woff2 +0 -0
  12. package/dist/client/assets/inter-greek-ext-wght-normal-DlzME5K_.woff2 +0 -0
  13. package/dist/client/assets/inter-greek-wght-normal-CkhJZR-_.woff2 +0 -0
  14. package/dist/client/assets/inter-latin-ext-wght-normal-DO1Apj_S.woff2 +0 -0
  15. package/dist/client/assets/inter-latin-wght-normal-Dx4kXJAl.woff2 +0 -0
  16. package/dist/client/assets/inter-vietnamese-wght-normal-CBcvBZtf.woff2 +0 -0
  17. package/dist/client/assets/jetbrains-mono-cyrillic-400-normal-BEIGL1Tu.woff2 +0 -0
  18. package/dist/client/assets/jetbrains-mono-cyrillic-400-normal-ugxPyKxw.woff +0 -0
  19. package/dist/client/assets/jetbrains-mono-greek-400-normal-B9oWc5Lo.woff +0 -0
  20. package/dist/client/assets/jetbrains-mono-greek-400-normal-C190GLew.woff2 +0 -0
  21. package/dist/client/assets/jetbrains-mono-latin-400-normal-6-qcROiO.woff +0 -0
  22. package/dist/client/assets/jetbrains-mono-latin-400-normal-V6pRDFza.woff2 +0 -0
  23. package/dist/client/assets/jetbrains-mono-latin-ext-400-normal-Bc8Ftmh3.woff2 +0 -0
  24. package/dist/client/assets/jetbrains-mono-latin-ext-400-normal-fXTG6kC5.woff +0 -0
  25. package/dist/client/assets/jetbrains-mono-vietnamese-400-normal-CqNFfHCs.woff +0 -0
  26. package/dist/client/assets/main-DeowJOSp.js +1368 -0
  27. package/dist/client/assets/vault-api-client-D7Ck0CvR.css +1 -0
  28. package/dist/client/assets/vault-api-client-p7h7cXKM.js +1 -0
  29. package/dist/client/drawio-editor.html +1 -1
  30. package/dist/client/excalidraw-editor.html +1 -1
  31. package/dist/client/export-document.html +2 -2
  32. package/dist/client/index.html +2 -2
  33. package/package.json +8 -5
  34. package/src/client/app/main-entry.js +2 -0
  35. package/src/client/application/app-shell/git-feature.js +28 -36
  36. package/src/client/application/app-shell/presence-feature.js +3 -1
  37. package/src/client/application/diagram-preview-hydrator.js +24 -15
  38. package/src/client/application/mermaid-preview-hydrator.js +121 -4
  39. package/src/client/application/plantuml-preview-hydrator.js +6 -16
  40. package/src/client/application/preview-renderer.js +11 -2
  41. package/src/client/bootstrap/collabmd-app-shell.js +182 -50
  42. package/src/client/domain/excalidraw-document-switch.js +3 -0
  43. package/src/client/excalidraw-editor.js +187 -84
  44. package/src/client/infrastructure/auth-client.js +4 -4
  45. package/src/client/infrastructure/backlinks-api-client.js +18 -0
  46. package/src/client/infrastructure/comment-thread-store.js +4 -0
  47. package/src/client/infrastructure/editor-session.js +6 -0
  48. package/src/client/infrastructure/editor-view-adapter.js +23 -0
  49. package/src/client/infrastructure/git-api-client.js +134 -0
  50. package/src/client/infrastructure/plantuml-api-client.js +21 -0
  51. package/src/client/infrastructure/vault-api-client.js +115 -0
  52. package/src/client/presentation/backlinks-panel.js +6 -9
  53. package/src/client/presentation/bases-preview-controller.js +1413 -34
  54. package/src/client/presentation/comments-panel.js +50 -5
  55. package/src/client/presentation/excalidraw-embed-controller.js +251 -15
  56. package/src/client/presentation/excalidraw-embed-reconciler.js +0 -1
  57. package/src/client/presentation/file-action-controller.js +97 -0
  58. package/src/client/presentation/file-explorer-controller.js +2 -0
  59. package/src/client/presentation/file-explorer-view.js +368 -0
  60. package/src/client/presentation/file-history-view-controller.js +41 -40
  61. package/src/client/presentation/git-diff-view-controller.js +70 -53
  62. package/src/client/presentation/git-panel-controller.js +12 -30
  63. package/src/client/styles/components/scrollbars.css +5 -0
  64. package/src/client/styles/export-document.css +45 -2
  65. package/src/client/styles/features/auth-gate.css +13 -24
  66. package/src/client/styles/features/comment-card.css +6 -0
  67. package/src/client/styles/features/comments-drawer.css +38 -18
  68. package/src/client/styles/features/diagram-preview.css +33 -0
  69. package/src/client/styles/features/embedded-preview.css +37 -11
  70. package/src/client/styles/features/preview-markdown.css +559 -39
  71. package/src/client/styles/foundation/themes.css +4 -0
  72. package/src/client/styles/foundation/tokens.css +4 -3
  73. package/src/client/styles/layout/sidebar.css +72 -0
  74. package/src/server/auth/auth-common.js +224 -0
  75. package/src/server/auth/auth-constants.js +30 -0
  76. package/src/server/auth/auth-strategies.js +320 -0
  77. package/src/server/auth/create-auth-service.js +24 -545
  78. package/src/server/domain/backlink-index.js +177 -5
  79. package/src/server/domain/bases/base-definition.js +382 -0
  80. package/src/server/domain/bases/base-expression-runtime.js +1196 -0
  81. package/src/server/domain/bases/base-index-snapshot-store.js +565 -0
  82. package/src/server/domain/bases/base-query-metadata.js +242 -0
  83. package/src/server/domain/bases/base-query-results.js +215 -0
  84. package/src/server/domain/bases/base-query-service.js +406 -1992
  85. package/src/server/domain/bases/base-transform.js +116 -0
  86. package/src/server/domain/collaboration/collaboration-room.js +36 -1
  87. package/src/server/domain/collaboration/room-client-state-store.js +1 -0
  88. package/src/server/domain/collaboration/room-persistence-controller.js +1 -1
  89. package/src/server/infrastructure/http/create-vault-api-query-handler.js +161 -1
  90. package/src/server/infrastructure/http/http-response.js +56 -0
  91. package/src/server/infrastructure/persistence/vault-file-store.js +110 -0
  92. package/dist/client/assets/drawioEditor-DGpo2hcx.js +0 -2
  93. package/dist/client/assets/embedded-editor-base-DgmRcsR8.css +0 -1
  94. package/dist/client/assets/exportDocument-DmV7Gngb.css +0 -1
  95. package/dist/client/assets/index-D69HOZHr.css +0 -1
  96. package/dist/client/assets/main-DSxNTtD-.js +0 -1243
  97. package/dist/client/assets/vault-api-client-BzHQseMN.js +0 -1
  98. package/dist/client/assets/vault-api-client-De7kMvrE.css +0 -1
  99. /package/dist/client/assets/{exportDocument-CtZKWE2c.js → exportDocument-Zfwq1XVx.js} +0 -0
@@ -1,5 +1,18 @@
1
1
  /* ===== PREVIEW / MARKDOWN ===== */
2
2
 
3
+ .preview-content {
4
+ font-family: var(--font-prose);
5
+ }
6
+
7
+ .preview-content h1,
8
+ .preview-content h2,
9
+ .preview-content h3,
10
+ .preview-content h4,
11
+ .preview-content h5,
12
+ .preview-content h6 {
13
+ font-family: var(--font-prose);
14
+ }
15
+
3
16
  .preview-content h1 {
4
17
  margin: var(--space-8) 0 var(--space-4);
5
18
  padding-bottom: var(--space-2);
@@ -177,25 +190,28 @@
177
190
  .preview-content .bases-shell {
178
191
  width: 100%;
179
192
  margin: 0 0 var(--space-5);
180
- border: 1px solid var(--color-border);
181
- border-radius: var(--radius-lg);
182
- background: color-mix(in oklab, var(--color-surface-offset) 65%, var(--color-surface));
193
+ border: 1px solid var(--color-divider);
194
+ border-radius: calc(var(--radius-lg) + 2px);
195
+ background: var(--color-surface);
196
+ box-shadow: var(--shadow-md);
183
197
  overflow: hidden;
184
198
  }
185
199
 
200
+ .preview-content .bases-embed-placeholder > .bases-shell {
201
+ margin: 0;
202
+ }
203
+
186
204
  .preview-content .bases-toolbar {
187
- display: flex;
188
- flex-wrap: wrap;
189
- align-items: center;
190
- justify-content: space-between;
205
+ display: grid;
191
206
  gap: var(--space-3);
192
207
  padding: var(--space-4);
193
208
  border-bottom: 1px solid var(--color-divider);
209
+ border-radius: calc(var(--radius-lg) + 1px) calc(var(--radius-lg) + 1px) 0 0;
210
+ background: var(--color-surface);
194
211
  }
195
212
 
196
213
  .preview-content .bases-toolbar-main,
197
214
  .preview-content .bases-toolbar-actions,
198
- .preview-content .bases-tabs,
199
215
  .preview-content .bases-summaries,
200
216
  .preview-content .bases-value-list {
201
217
  display: flex;
@@ -204,38 +220,364 @@
204
220
  align-items: center;
205
221
  }
206
222
 
207
- .preview-content .bases-view-tab,
223
+ .preview-content .bases-toolbar-main {
224
+ justify-content: space-between;
225
+ gap: var(--space-3);
226
+ min-width: 0;
227
+ }
228
+
229
+ .preview-content .bases-tabs {
230
+ flex: 1 1 auto;
231
+ min-width: 0;
232
+ max-width: 100%;
233
+ flex-wrap: nowrap;
234
+ overflow-x: auto;
235
+ overflow-y: hidden;
236
+ padding: 3px;
237
+ border: 1px solid color-mix(in oklab, var(--color-divider) 82%, transparent);
238
+ border-radius: var(--radius-full);
239
+ background: color-mix(in oklab, var(--color-surface-offset) 78%, var(--color-surface));
240
+ scrollbar-width: none;
241
+ }
242
+
243
+ .preview-content .bases-tabs::-webkit-scrollbar {
244
+ display: none;
245
+ }
246
+
208
247
  .preview-content .bases-export-btn,
209
248
  .preview-content .bases-link-button {
249
+ flex-shrink: 0;
250
+ }
251
+
252
+ .preview-content .bases-toolbar-actions {
253
+ width: 100%;
254
+ justify-content: space-between;
255
+ gap: var(--space-3);
256
+ }
257
+
258
+ .preview-content .bases-toolbar-edit-actions,
259
+ .preview-content .bases-panel-title-row,
260
+ .preview-content .bases-toggle-row,
261
+ .preview-content .bases-filter-group-header,
262
+ .preview-content .bases-filter-actions-row {
263
+ display: flex;
264
+ flex-wrap: wrap;
265
+ gap: var(--space-2);
266
+ align-items: center;
267
+ }
268
+
269
+ .preview-content .bases-toolbar-edit-actions {
270
+ display: inline-flex;
271
+ padding: 3px;
272
+ border: 1px solid var(--color-divider);
273
+ border-radius: var(--radius-full);
274
+ background: color-mix(in oklab, var(--color-surface) 72%, var(--color-surface-offset));
275
+ box-shadow: inset 0 1px 0 oklch(from var(--color-text) l c h / 0.04);
276
+ }
277
+
278
+ .preview-content .bases-panel-title-row,
279
+ .preview-content .bases-filter-group-header {
280
+ justify-content: space-between;
281
+ }
282
+
283
+ .preview-content .bases-sort-row,
284
+ .preview-content .bases-filter-row {
285
+ display: grid;
286
+ gap: var(--space-2);
287
+ width: 100%;
288
+ align-items: stretch;
289
+ }
290
+
291
+ .preview-content .bases-panel-section > .bases-sort-row {
292
+ grid-template-columns: minmax(180px, 1.35fr) minmax(140px, 1fr) auto;
293
+ }
294
+
295
+ .preview-content .bases-sort-list > .bases-sort-row {
296
+ grid-template-columns: minmax(180px, 1.35fr) minmax(140px, 1fr) repeat(3, auto);
297
+ }
298
+
299
+ .preview-content .bases-filter-row {
300
+ grid-template-columns: minmax(180px, 1.2fr) minmax(160px, 1fr) minmax(200px, 1.35fr) auto;
301
+ }
302
+
303
+ .preview-content .bases-sort-row > .ui-button,
304
+ .preview-content .bases-filter-row > .ui-button,
305
+ .preview-content .bases-filter-group-header > .ui-button,
306
+ .preview-content .bases-filter-actions-row > .ui-button {
307
+ align-self: stretch;
308
+ }
309
+
310
+ .preview-content .bases-panels {
311
+ padding: var(--space-3) var(--space-4) var(--space-4);
312
+ background: var(--color-surface);
313
+ }
314
+
315
+ .preview-content .bases-panel-card {
316
+ display: grid;
317
+ gap: var(--space-4);
318
+ padding: var(--space-4);
319
+ border: 1px solid var(--color-divider);
320
+ border-radius: calc(var(--radius-lg) + 1px);
321
+ background: var(--color-surface);
322
+ box-shadow: var(--shadow-sm);
323
+ }
324
+
325
+ .preview-content .bases-panel-section {
326
+ display: grid;
327
+ gap: var(--space-2);
328
+ }
329
+
330
+ .preview-content .bases-panel-section + .bases-panel-section {
331
+ padding-top: var(--space-3);
332
+ border-top: 1px solid color-mix(in oklab, var(--color-divider) 86%, transparent);
333
+ }
334
+
335
+ .preview-content .bases-panel-title,
336
+ .preview-content .bases-readonly-note {
337
+ font-size: var(--text-ui-sm);
338
+ color: var(--color-text-muted);
339
+ }
340
+
341
+ .preview-content .bases-panel-title {
342
+ font-weight: 600;
343
+ }
344
+
345
+ .preview-content .bases-readonly-note {
346
+ line-height: 1.5;
347
+ }
348
+
349
+ .preview-content .bases-select,
350
+ .preview-content .bases-filter-value,
351
+ .preview-content .bases-properties-search-input,
352
+ .preview-content .bases-filter-advanced {
353
+ width: 100%;
354
+ min-width: 0;
355
+ }
356
+
357
+ .preview-content .bases-select,
358
+ .preview-content .bases-filter-value,
359
+ .preview-content .bases-filter-value-combobox {
360
+ min-height: var(--control-h-md);
361
+ }
362
+
363
+ .preview-content .bases-select {
364
+ appearance: none;
365
+ padding-right: calc(var(--space-6) + var(--space-3));
366
+ background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='16' height='16' viewBox='0 0 16 16' fill='none'%3E%3Cpath d='M4 6l4 4 4-4' stroke='%23838ea4' stroke-width='1.5' stroke-linecap='round' stroke-linejoin='round'/%3E%3C/svg%3E");
367
+ background-position: right var(--space-3) center;
368
+ background-repeat: no-repeat;
369
+ background-size: 16px 16px;
370
+ }
371
+
372
+ .preview-content .bases-filter-value-combobox {
373
+ position: relative;
374
+ min-width: 0;
375
+ }
376
+
377
+ .preview-content .bases-filter-value {
378
+ padding-right: var(--space-3);
379
+ }
380
+
381
+ .preview-content .bases-filter-value--suggestions {
382
+ padding-right: calc(var(--space-6) + var(--space-3));
383
+ background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='16' height='16' viewBox='0 0 16 16' fill='none'%3E%3Cpath d='M4 6l4 4 4-4' stroke='%23838ea4' stroke-width='1.5' stroke-linecap='round' stroke-linejoin='round'/%3E%3C/svg%3E");
384
+ background-position: right var(--space-3) center;
385
+ background-repeat: no-repeat;
386
+ background-size: 16px 16px;
387
+ }
388
+
389
+ .preview-content .bases-filter-suggestion-list {
390
+ position: absolute;
391
+ top: calc(100% + var(--space-1));
392
+ left: 0;
393
+ right: 0;
394
+ z-index: 3;
395
+ display: grid;
396
+ gap: 2px;
397
+ max-height: 224px;
398
+ overflow: auto;
399
+ padding: var(--space-1);
210
400
  border: 1px solid var(--color-border);
211
- border-radius: 999px;
401
+ border-radius: var(--radius-lg);
212
402
  background: var(--color-surface);
403
+ box-shadow: var(--shadow-lg);
404
+ }
405
+
406
+ .preview-content .bases-filter-suggestion {
407
+ display: grid;
408
+ grid-template-columns: minmax(0, 1fr) auto;
409
+ gap: var(--space-2);
410
+ align-items: center;
411
+ width: 100%;
412
+ min-height: 36px;
413
+ padding: var(--space-2) var(--space-3);
414
+ border: 0;
415
+ border-radius: calc(var(--radius-md) - 2px);
416
+ background: transparent;
213
417
  color: var(--color-text);
418
+ text-align: left;
214
419
  cursor: pointer;
215
- font: inherit;
216
420
  }
217
421
 
218
- .preview-content .bases-view-tab,
219
- .preview-content .bases-export-btn {
220
- min-height: 34px;
221
- padding: 0 var(--space-3);
422
+ .preview-content .bases-filter-suggestion:hover,
423
+ .preview-content .bases-filter-suggestion:focus-visible {
424
+ background: var(--surface-fill-subtle);
425
+ outline: none;
426
+ }
427
+
428
+ .preview-content .bases-filter-suggestion[aria-selected='true'] {
429
+ background: color-mix(in oklab, var(--color-primary) 10%, var(--color-surface));
430
+ color: var(--color-primary);
431
+ }
432
+
433
+ .preview-content .bases-filter-suggestion-label,
434
+ .preview-content .bases-filter-suggestion-meta {
435
+ min-width: 0;
436
+ }
437
+
438
+ .preview-content .bases-filter-suggestion-label {
439
+ overflow: hidden;
440
+ text-overflow: ellipsis;
441
+ white-space: nowrap;
442
+ }
443
+
444
+ .preview-content .bases-filter-suggestion-meta {
445
+ color: var(--color-text-muted);
446
+ font-size: var(--text-ui-sm);
447
+ }
448
+
449
+ .preview-content .bases-filter-group {
450
+ display: grid;
451
+ gap: var(--space-3);
452
+ padding: var(--space-3);
453
+ border: 1px solid color-mix(in oklab, var(--color-divider) 88%, transparent);
454
+ border-radius: calc(var(--radius-lg) + 1px);
455
+ background: var(--color-surface);
456
+ box-shadow: inset 0 1px 0 oklch(from var(--color-text) l c h / 0.04);
222
457
  }
223
458
 
224
- .preview-content .bases-view-tab.is-active {
225
- background: var(--color-primary);
459
+ .preview-content .bases-filter-children,
460
+ .preview-content .bases-sort-list {
461
+ display: grid;
462
+ gap: var(--space-3);
463
+ }
464
+
465
+ .preview-content .bases-properties-search,
466
+ .preview-content .bases-filter-advanced-label {
467
+ display: block;
468
+ width: 100%;
469
+ }
470
+
471
+ .preview-content .bases-properties-list {
472
+ display: grid;
473
+ gap: var(--space-2);
474
+ max-height: 320px;
475
+ overflow: auto;
476
+ padding: var(--space-1);
477
+ border: 1px solid color-mix(in oklab, var(--color-divider) 86%, transparent);
478
+ border-radius: var(--radius-lg);
479
+ background: color-mix(in oklab, var(--color-surface-offset) 54%, var(--color-surface));
480
+ }
481
+
482
+ .preview-content .bases-property-option {
483
+ display: grid;
484
+ grid-template-columns: auto minmax(0, 1fr) auto;
485
+ gap: var(--space-2);
486
+ align-items: center;
487
+ padding: var(--space-2) var(--space-3);
488
+ border: 1px solid var(--color-divider);
489
+ border-radius: var(--radius-md);
490
+ background: var(--color-surface);
491
+ transition:
492
+ transform var(--transition-interactive),
493
+ border-color var(--transition-interactive),
494
+ box-shadow var(--transition-interactive),
495
+ background var(--transition-interactive);
496
+ }
497
+
498
+ .preview-content .bases-property-option:hover {
499
+ transform: translateY(-1px);
500
+ border-color: color-mix(in oklab, var(--color-divider) 55%, var(--color-primary) 45%);
501
+ background: var(--surface-fill-subtle);
502
+ box-shadow: var(--shadow-sm);
503
+ }
504
+
505
+ .preview-content .bases-property-option input[type='checkbox'] {
506
+ width: 16px;
507
+ height: 16px;
508
+ margin: 0;
509
+ accent-color: var(--color-primary);
510
+ }
511
+
512
+ .preview-content .bases-property-option-label {
513
+ min-width: 0;
514
+ font-weight: 500;
515
+ }
516
+
517
+ .preview-content .bases-property-option-meta {
518
+ font-size: var(--text-ui-sm);
519
+ color: var(--color-text-faint);
520
+ text-transform: capitalize;
521
+ }
522
+
523
+ .preview-content .bases-filter-advanced {
524
+ min-height: 180px;
525
+ padding: var(--space-3);
526
+ resize: vertical;
527
+ line-height: 1.5;
528
+ }
529
+
530
+ .preview-content .bases-search-shell {
531
+ position: relative;
532
+ display: flex;
533
+ align-items: center;
534
+ flex: 1 1 320px;
535
+ width: 100%;
536
+ max-width: min(420px, 100%);
537
+ min-width: min(320px, 100%);
538
+ margin-left: auto;
539
+ border: 1px solid color-mix(in oklab, var(--color-border) 82%, var(--color-primary) 18%);
540
+ border-radius: var(--radius-lg);
541
+ background: var(--color-surface);
542
+ box-shadow: inset 0 1px 0 oklch(from var(--color-text) l c h / 0.04);
543
+ transition: border-color var(--transition-interactive), box-shadow var(--transition-interactive), background var(--transition-interactive);
544
+ }
545
+
546
+ .preview-content .bases-search-shell:focus-within {
226
547
  border-color: var(--color-primary);
227
- color: var(--color-primary-contrast);
548
+ box-shadow: var(--shadow-focus), inset 0 1px 0 oklch(from var(--color-text) l c h / 0.04);
549
+ }
550
+
551
+ .preview-content .bases-search-icon {
552
+ position: absolute;
553
+ left: var(--space-3);
554
+ color: var(--color-text-faint);
555
+ pointer-events: none;
228
556
  }
229
557
 
230
558
  .preview-content .bases-search-input {
231
- min-width: 200px;
232
- min-height: 34px;
233
- padding: 0 var(--space-3);
234
- border: 1px solid var(--color-border);
235
- border-radius: 999px;
236
- background: var(--color-surface);
237
- color: var(--color-text);
238
- font: inherit;
559
+ min-width: 0;
560
+ border: 0;
561
+ border-radius: inherit;
562
+ background: transparent;
563
+ box-shadow: none;
564
+ padding-left: calc(var(--space-3) * 2 + 16px);
565
+ }
566
+
567
+ .preview-content .bases-search-input:focus {
568
+ border-color: transparent;
569
+ box-shadow: none;
570
+ }
571
+
572
+ .preview-content .bases-export-btn {
573
+ min-height: var(--control-h-md);
574
+ padding-inline: var(--space-4);
575
+ font-size: var(--text-sm);
576
+ font-weight: 600;
577
+ }
578
+
579
+ .preview-content .bases-export-btn:hover {
580
+ border-color: color-mix(in oklab, var(--color-border) 45%, var(--color-primary) 55%);
239
581
  }
240
582
 
241
583
  .preview-content .bases-meta,
@@ -245,19 +587,39 @@
245
587
  font-size: var(--text-ui-sm);
246
588
  }
247
589
 
590
+ .preview-content .bases-meta {
591
+ display: inline-flex;
592
+ align-items: center;
593
+ min-height: 28px;
594
+ padding: 0 var(--space-3);
595
+ border: 1px solid color-mix(in oklab, var(--color-divider) 84%, transparent);
596
+ border-radius: var(--radius-full);
597
+ background: color-mix(in oklab, var(--color-surface-offset) 72%, var(--color-surface));
598
+ box-shadow: inset 0 1px 0 oklch(from var(--color-text) l c h / 0.04);
599
+ white-space: nowrap;
600
+ }
601
+
248
602
  .preview-content .bases-summaries {
249
603
  padding: var(--space-3) var(--space-4);
604
+ border-top: 1px solid color-mix(in oklab, var(--color-divider) 78%, transparent);
250
605
  border-bottom: 1px solid var(--color-divider);
606
+ background: var(--color-surface);
251
607
  }
252
608
 
253
609
  .preview-content .bases-summary {
254
610
  display: inline-flex;
255
611
  align-items: center;
256
612
  gap: var(--space-2);
257
- min-height: 28px;
613
+ min-height: 30px;
258
614
  padding: 0 var(--space-3);
615
+ border: 1px solid color-mix(in oklab, var(--color-divider) 84%, transparent);
259
616
  border-radius: 999px;
260
617
  background: var(--color-surface);
618
+ box-shadow: inset 0 1px 0 oklch(from var(--color-text) l c h / 0.04);
619
+ }
620
+
621
+ .preview-content .bases-summary-value {
622
+ font-weight: 600;
261
623
  }
262
624
 
263
625
  .preview-content .bases-content {
@@ -283,21 +645,54 @@
283
645
 
284
646
  .preview-content .bases-table-shell {
285
647
  overflow-x: auto;
648
+ border: 1px solid color-mix(in oklab, var(--color-divider) 88%, transparent);
649
+ border-radius: calc(var(--radius-lg) + 1px);
650
+ background: var(--color-surface);
651
+ box-shadow: inset 0 1px 0 oklch(from var(--color-text) l c h / 0.04);
286
652
  }
287
653
 
288
654
  .preview-content .bases-table {
289
655
  width: 100%;
290
- border-collapse: collapse;
656
+ min-width: 620px;
657
+ border-collapse: separate;
658
+ border-spacing: 0;
291
659
  }
292
660
 
293
661
  .preview-content .bases-table th,
294
662
  .preview-content .bases-table td {
295
- padding: var(--space-2) var(--space-3);
663
+ padding: var(--space-3);
296
664
  border-bottom: 1px solid var(--color-divider);
297
665
  text-align: left;
298
666
  vertical-align: top;
299
667
  }
300
668
 
669
+ .preview-content .bases-table th {
670
+ position: sticky;
671
+ top: 0;
672
+ z-index: 1;
673
+ background: color-mix(in oklab, var(--color-surface-offset) 72%, var(--color-surface));
674
+ color: var(--color-text-muted);
675
+ font-size: var(--text-ui-sm);
676
+ font-weight: 600;
677
+ white-space: nowrap;
678
+ }
679
+
680
+ .preview-content .bases-table tbody tr {
681
+ transition: background var(--transition-interactive);
682
+ }
683
+
684
+ .preview-content .bases-table tbody tr:nth-child(even) {
685
+ background: color-mix(in oklab, var(--color-surface-offset) 24%, transparent);
686
+ }
687
+
688
+ .preview-content .bases-table tbody tr:hover {
689
+ background: color-mix(in oklab, var(--color-primary) 6%, var(--color-surface-offset));
690
+ }
691
+
692
+ .preview-content .bases-table tbody tr:last-child td {
693
+ border-bottom: 0;
694
+ }
695
+
301
696
  .preview-content .bases-list,
302
697
  .preview-content .bases-cards {
303
698
  margin: 0;
@@ -307,27 +702,51 @@
307
702
 
308
703
  .preview-content .bases-list {
309
704
  list-style: none;
705
+ display: grid;
706
+ gap: var(--space-2);
310
707
  }
311
708
 
312
709
  .preview-content .bases-list-item {
313
710
  display: flex;
314
711
  flex-wrap: wrap;
315
712
  gap: var(--space-3);
316
- padding: var(--space-3) 0;
317
- border-bottom: 1px solid var(--color-divider);
713
+ padding: var(--space-3);
714
+ border: 1px solid color-mix(in oklab, var(--color-divider) 88%, transparent);
715
+ border-radius: var(--radius-lg);
716
+ background: var(--color-surface);
717
+ box-shadow: inset 0 1px 0 oklch(from var(--color-text) l c h / 0.04);
718
+ }
719
+
720
+ .preview-content .bases-list-field {
721
+ display: grid;
722
+ gap: 2px;
723
+ min-width: min(220px, 100%);
318
724
  }
319
725
 
320
726
  .preview-content .bases-cards {
321
727
  display: grid;
322
- grid-template-columns: repeat(auto-fit, minmax(220px, 1fr));
728
+ grid-template-columns: repeat(auto-fit, minmax(240px, 1fr));
323
729
  gap: var(--space-3);
324
730
  }
325
731
 
326
732
  .preview-content .bases-card {
733
+ display: grid;
734
+ grid-template-rows: auto 1fr;
327
735
  overflow: hidden;
328
736
  border: 1px solid var(--color-border);
329
- border-radius: var(--radius-lg);
737
+ border-radius: calc(var(--radius-lg) + 2px);
330
738
  background: var(--color-surface);
739
+ box-shadow: var(--shadow-sm);
740
+ transition:
741
+ transform var(--transition-interactive),
742
+ box-shadow var(--transition-interactive),
743
+ border-color var(--transition-interactive);
744
+ }
745
+
746
+ .preview-content .bases-card:hover {
747
+ transform: translateY(-1px);
748
+ border-color: color-mix(in oklab, var(--color-border) 58%, var(--color-primary) 42%);
749
+ box-shadow: var(--shadow-md);
331
750
  }
332
751
 
333
752
  .preview-content .bases-card-media {
@@ -343,17 +762,35 @@
343
762
  }
344
763
 
345
764
  .preview-content .bases-card-body {
346
- padding: var(--space-3);
765
+ display: grid;
766
+ gap: var(--space-3);
767
+ padding: var(--space-4);
347
768
  }
348
769
 
349
770
  .preview-content .bases-card-field + .bases-card-field {
350
- margin-top: var(--space-3);
771
+ margin-top: 0;
772
+ padding-top: var(--space-3);
773
+ border-top: 1px solid color-mix(in oklab, var(--color-divider) 84%, transparent);
351
774
  }
352
775
 
353
776
  .preview-content .bases-link-button {
777
+ min-height: auto;
354
778
  padding: 0;
355
779
  border: 0;
780
+ border-radius: 0;
356
781
  background: transparent;
782
+ box-shadow: none;
783
+ color: var(--color-primary);
784
+ font-size: inherit;
785
+ font-weight: 600;
786
+ line-height: inherit;
787
+ }
788
+
789
+ .preview-content .bases-link-button:hover,
790
+ .preview-content .bases-link-button:focus-visible {
791
+ background: transparent;
792
+ border-color: transparent;
793
+ box-shadow: none;
357
794
  color: var(--color-primary);
358
795
  }
359
796
 
@@ -364,7 +801,8 @@
364
801
  padding: 0 var(--space-3);
365
802
  border: 1px solid var(--color-border);
366
803
  border-radius: 999px;
367
- background: var(--color-surface);
804
+ background: color-mix(in oklab, var(--color-surface-offset) 44%, var(--color-surface));
805
+ box-shadow: inset 0 1px 0 oklch(from var(--color-text) l c h / 0.04);
368
806
  font-size: var(--text-ui-sm);
369
807
  }
370
808
 
@@ -372,7 +810,9 @@
372
810
  display: block;
373
811
  max-width: 120px;
374
812
  max-height: 80px;
813
+ border: 1px solid color-mix(in oklab, var(--color-divider) 84%, transparent);
375
814
  border-radius: var(--radius-md);
815
+ box-shadow: var(--shadow-sm);
376
816
  }
377
817
 
378
818
  .preview-content .bases-unsupported {
@@ -380,6 +820,81 @@
380
820
  border: 1px dashed var(--color-border);
381
821
  border-radius: var(--radius-lg);
382
822
  color: var(--color-text-muted);
823
+ background: color-mix(in oklab, var(--color-surface-offset) 52%, var(--color-surface));
824
+ }
825
+
826
+ @media (max-width: 900px) {
827
+ .preview-content .bases-toolbar-actions {
828
+ justify-content: flex-start;
829
+ }
830
+
831
+ .preview-content .bases-search-shell {
832
+ margin-left: 0;
833
+ max-width: none;
834
+ }
835
+
836
+ .preview-content .bases-panel-section > .bases-sort-row,
837
+ .preview-content .bases-sort-list > .bases-sort-row,
838
+ .preview-content .bases-filter-row {
839
+ grid-template-columns: 1fr;
840
+ }
841
+
842
+ .preview-content .bases-sort-row > .ui-button,
843
+ .preview-content .bases-filter-row > .ui-button {
844
+ width: 100%;
845
+ }
846
+ }
847
+
848
+ @media (max-width: 640px) {
849
+ .preview-content .bases-toolbar,
850
+ .preview-content .bases-panels,
851
+ .preview-content .bases-summaries,
852
+ .preview-content .bases-content {
853
+ padding-inline: var(--space-3);
854
+ }
855
+
856
+ .preview-content .bases-toolbar-edit-actions,
857
+ .preview-content .bases-toggle-row,
858
+ .preview-content .bases-filter-actions-row {
859
+ width: 100%;
860
+ }
861
+
862
+ .preview-content .bases-toolbar-edit-actions {
863
+ display: grid;
864
+ grid-template-columns: repeat(2, minmax(0, 1fr));
865
+ padding: 0;
866
+ border: 0;
867
+ border-radius: 0;
868
+ background: transparent;
869
+ box-shadow: none;
870
+ }
871
+
872
+ .preview-content .bases-toolbar-edit-actions > .ui-button,
873
+ .preview-content .bases-toggle-row > .ui-button,
874
+ .preview-content .bases-filter-actions-row > .ui-button {
875
+ flex: 1 1 140px;
876
+ }
877
+
878
+ .preview-content .bases-toolbar-edit-actions > .ui-button {
879
+ width: 100%;
880
+ min-width: 0;
881
+ }
882
+
883
+ .preview-content .bases-toolbar-edit-actions > .ui-button:last-child:nth-child(odd) {
884
+ grid-column: 1 / -1;
885
+ }
886
+
887
+ .preview-content .bases-property-option {
888
+ grid-template-columns: auto minmax(0, 1fr);
889
+ }
890
+
891
+ .preview-content .bases-property-option-meta {
892
+ grid-column: 2;
893
+ }
894
+
895
+ .preview-content .bases-table {
896
+ min-width: 540px;
897
+ }
383
898
  }
384
899
 
385
900
  .preview-content a {
@@ -429,7 +944,7 @@
429
944
 
430
945
  .preview-content .task-list-item input[type='checkbox'] {
431
946
  position: absolute;
432
- top: 0.3em;
947
+ top: 0.5em;
433
948
  left: calc(var(--space-5) * -1);
434
949
  margin: 0;
435
950
  accent-color: var(--color-primary);
@@ -540,8 +1055,13 @@
540
1055
 
541
1056
  @media (max-width: 768px) {
542
1057
  .preview-content .frontmatter-header {
543
- align-items: flex-start;
544
- flex-direction: column;
1058
+ align-items: center;
1059
+ flex-direction: row;
1060
+ flex-wrap: nowrap;
1061
+ }
1062
+
1063
+ .preview-content .frontmatter-toggle {
1064
+ margin-left: auto;
545
1065
  }
546
1066
 
547
1067
  .preview-content .frontmatter-property {