Calendar 设计文档

纯事件展示日历,对齐 Semi Design Calendar。四视图 mode=day/week/month/range:day 单日时间轴(左时间列 + 单日列,25×2 半小时可点击格 + 绝对定位事件);week 星期表头 + 7 列 DayCol,跨天事件走顶部全天区(parseWeekSpanEvents);range 结构同 week,列数=range 天数(左闭右开),跨天走 parseSpanEvents;month 6×7 网格,跨天条走 getMonthEvents,每格超额显示「还有 N 项」并用 Popover 弹卡片。displayValue 决定展示锚点;onClick 回调点击的精确时间点(日/周精确到半小时,月精确到日)。showCurrTime 当前时间红线(当天列,每 30s 刷新)。事件定位全部来自 @chenzy-design/core 纯算法(getDailyEvents/parseWeekSpanEvents/parseSpanEvents/getMonthEvents/calcRowHeight/allDayEventMap/getPos),本组件只把数值位置转成内联样式。事件外观由 event.children 承载(字符串直出 / snippet render),对齐 Semi children。头部对齐 Semi:无默认导航,仅当传入 header 时渲染自定义头部。

← API 文档

使用建议

纯事件展示日历,对齐 Semi Design Calendar。四视图 mode=day/week/month/range:day 单日时间轴(左时间列 + 单日列,25×2 半小时可点击格 + 绝对定位事件);week 星期表头 + 7 列 DayCol,跨天事件走顶部全天区(parseWeekSpanEvents);range 结构同 week,列数=range 天数(左闭右开),跨天走 parseSpanEvents;month 6×7 网格,跨天条走 getMonthEvents,每格超额显示「还有 N 项」并用 Popover 弹卡片。displayValue 决定展示锚点;onClick 回调点击的精确时间点(日/周精确到半小时,月精确到日)。showCurrTime 当前时间红线(当天列,每 30s 刷新)。事件定位全部来自 @chenzy-design/core 纯算法(getDailyEvents/parseWeekSpanEvents/parseSpanEvents/getMonthEvents/calcRowHeight/allDayEventMap/getPos),本组件只把数值位置转成内联样式。事件外观由 event.children 承载(字符串直出 / snippet render),对齐 Semi children。头部对齐 Semi:无默认导航,仅当传入 header 时渲染自定义头部。

Accessibility

  • 根容器 role=grid + aria-label(取标题)。时间轴视图每列 role=gridcell(含 aria-label 日期),半小时格为 <button>(aria-label=日期+时:分)。week/range 视图有日期表头 role=columnheader(day 视图对齐 Semi 无列头)。month 视图:星期表头 role=columnheader,日格 role=gridcell,today 格 aria-current=date,日格可点击(Enter/Space)。月视图「还有 N 项」用 Popover(trigger=click,showCloseButton,title=日期),关闭回调 onClose。

设计变量

变量默认值用法
--cd-calendar-color-bg var(--cd-color-bg-2)Semi $color-calendar-bg(时间列 .time-items 背景)
--cd-calendar-color-bg-active var(--cd-color-primary)Semi $color-calendar-bg-active(今日日期 .today-date 实底)
--cd-calendar-color-curr-border var(--cd-color-danger)Semi $color-calendar_curr-border(当前时间线 .grid-curr-line border)
--cd-calendar-color-currcircle-bg-default var(--cd-color-danger)Semi $color-calendar_currCircle-bg-default(当前时间原点 .grid-curr-circle 底)
--cd-calendar-color-date-text-default var(--cd-color-text-0)Semi $color-calendar_date-text-default(当月日期 .month-same 文字)
--cd-calendar-color-day-border var(--cd-color-border)Semi $color-calendar_day-border(网格 / 时间轴描边)
--cd-calendar-color-day-text-default var(--cd-color-text-2)Semi $color-calendar_day-text-default(星期 / 时间列 / 非当月文字)
--cd-calendar-color-sticky-bg var(--cd-color-bg-2)Semi $color-calendar_sticky-bg(.sticky-top / .sticky-left 背景)
--cd-calendar-color-text-active var(--cd-color-bg-1)Semi $color-calendar-text-active(今日日期 .today-date 文字)
--cd-calendar-color-weekend-bg var(--cd-color-fill-0)Semi $color-calendar_weekend-bg(.weekend 背景)