feat(editor): calendar view for database block (#14984)

fix #13663


#### PR Dependency Tree


* **PR #14984** 👈

This tree was auto-generated by
[Charcoal](https://github.com/danerwilliams/charcoal)

<!-- This is an auto-generated comment: release notes by coderabbit.ai
-->
## Summary by CodeRabbit

* **New Features**
* Calendar view for database blocks (month layout, entry cards,
external-source support)
  * Workspace calendar integration and new slash-menu "Calendar View"

* **Improvements**
* Create/manage database rows from calendar UI; preserve durations when
moving/resizing ranges
* Drag-and-drop, drop-preview, and hit-testing support for calendar and
docs
  * Redesigned in-menu View settings with multi-page navigation
  * Context-menu input autofocus toggle and conditional back-navigation

* **Tests**
* New unit and E2E suites covering calendar layout, interactions,
sources, and slash-menu integration
<!-- end of auto-generated comment: release notes by coderabbit.ai -->
This commit is contained in:
DarkSky
2026-05-17 20:40:36 +08:00
committed by GitHub
parent e9ef3c50c8
commit 0f5778ac89
40 changed files with 6367 additions and 724 deletions

View File

@@ -608,7 +608,7 @@ test.describe('slash search', () => {
await expect(slashMenu).toBeVisible();
await type(page, 'c');
await expect(slashItems).toHaveCount(11);
await expect(slashItems).toHaveCount(12);
await expect(slashItems.nth(0).locator('.text')).toHaveText(['Copy']);
await expect(slashItems.nth(1).locator('.text')).toHaveText(['Italic']);
await expect(slashItems.nth(2).locator('.text')).toHaveText(['Callout']);
@@ -632,11 +632,14 @@ test.describe('slash search', () => {
const slashItems = slashMenu.locator('icon-button');
await type(page, 'database');
await expect(slashItems).toHaveCount(2);
await expect(slashItems).toHaveCount(3);
await expect(slashItems.nth(0).locator('.text')).toHaveText(['Table View']);
await expect(slashItems.nth(1).locator('.text')).toHaveText([
'Kanban View',
]);
await expect(slashItems.nth(2).locator('.text')).toHaveText([
'Calendar View',
]);
await type(page, 'v');
await expect(slashItems).toHaveCount(0);
});