自定义渲染
借助 Svelte 5 的 snippet,你可以接管日历的渲染——事件内容、附加工具栏控件,甚至整个工具栏。
eventContent snippet
在 <Calendar> 内声明 eventContent snippet,即可替换所有事件条与事件块的默认内容。它接收 EventInstance——包含事件数据、该次出现的具体时间与解析后的颜色:
按日历源加表情前缀
周一
7
周二
8
周三
9
周四
10
周五
11
周六
12
周日
13
全天
1时
2时
3时
4时
5时
6时
7时
8时
9时
10时
11时
12时
13时
14时
15时
16时
17时
18时
19时
20时
21时
22时
23时
0时
自定义新建与详情 UI
内置弹层只是默认行为,不是束缚:一旦提供 onSelect / onDateClick,快速新建弹层就会让位;提供 onEventClick 则替换详情弹层。之后任何 UI 都可以——模态框、抽屉、独立路由页。下面的示例把它们换成了居中的新建对话框和右侧详情抽屉:
自己的对话框与抽屉
周一
7
周二
8
周三
9
周四
10
周五
11
周六
12
周日
13
全天
1时
2时
3时
4时
5时
6时
7时
8时
9时
10时
11时
12时
13时
14时
15时
16时
17时
18时
19时
20时
21时
22时
23时
0时
只想换皮肤? —
如果只是想调整默认弹层的外观,用 CSS 变量和 .s5c-popover 类名换肤即可,无需整体替换。
附加工具栏内容
toolbarEnd snippet 渲染在内置工具栏右侧——适合放筛选器或“新建日程”按钮。
无头模式
<script lang="ts">
import { Calendar, type CalendarView } from 'svelte5plus-calendar';
let view = $state<CalendarView>('week');
let date = $state(new Date());
</script>
<!-- Bring your own toolbar: hide the built-in one and drive the bindables -->
<nav>
<button onclick={() => (date = new Date())}>Today</button>
<select bind:value={view}>
<option value="week">Week</option>
<option value="month">Month</option>
</select>
</nav>
<Calendar bind:view bind:date header={false} events={[]} />所有布局算法(时间网格分列、周行分段、重复展开)同时以纯函数导出——你完全可以基于它们构建全新的自定义 UI。